Synchronize secp256k1 library to bitcoin-core/secp256k1 as of Bitcoin Core v24.2, enabling cryptographic primitives required for Taproot (BIP340/341). Changes: - Upgrade src/secp256k1 from bitcoin v24.2 tag - Enable experimental modules via configure.ac: * --enable-module-extrakeys (BIP340 x-only public keys) * --enable-module-schnorrsig (BIP340 Schnorr signatures) * --enable-module-recovery (ECDSA pubkey recovery, pre-existing) - Update MSVC build configuration with corresponding preprocessor defines - Regenerate autotools build files via autogen.sh Module verification: - ENABLE_MODULE_EXTRAKEYS: provides secp256k1_xonly_pubkey APIs - ENABLE_MODULE_SCHNORRSIG: provides secp256k1_schnorrsig APIs - ENABLE_MODULE_RECOVERY: provides secp256k1_ecdsa_recover APIs Build targets: - Linux/Unix: verified with autotools + quick-build.sh - Windows MSVC: configuration updated (requires Windows build verification) Testing: - Static library compiled successfully (1.6M) - All header files present (extrakeys.h, schnorrsig.h) - Regtest functional tests passed: * Transaction signing/verification * ECDSA operations * Block mining and validation - No regressions on existing ECDSA functionality This commit provides the cryptographic foundation for subsequent Taproot implementation (BIP340/341/342) without modifying consensus or wallet logic.
344 lines
9.6 KiB
Bash
Executable File
344 lines
9.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
export LC_ALL=C
|
|
|
|
###############################################################################
|
|
# Quick Build Script for Palladium Core
|
|
# Automates dependencies installation, BerkeleyDB setup, and compilation
|
|
###############################################################################
|
|
|
|
set -e # Exit on error
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Function to print colored messages
|
|
log_info() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Check if running as root
|
|
if [ "$EUID" -eq 0 ]; then
|
|
log_error "Do not run this script as root (sudo will be called when needed)"
|
|
exit 1
|
|
fi
|
|
|
|
# Get script directory
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
###############################################################################
|
|
# STEP 1: Install Dependencies
|
|
###############################################################################
|
|
install_dependencies() {
|
|
log_info "Installing build dependencies..."
|
|
|
|
sudo apt update
|
|
|
|
# Essential build tools
|
|
log_info "Installing essential build tools..."
|
|
sudo apt install -y \
|
|
build-essential \
|
|
libtool \
|
|
autotools-dev \
|
|
automake \
|
|
pkg-config \
|
|
bsdmainutils \
|
|
python3 \
|
|
git \
|
|
curl
|
|
|
|
# Palladium core dependencies
|
|
log_info "Installing Palladium core dependencies..."
|
|
sudo apt install -y \
|
|
libevent-dev \
|
|
libboost-system-dev \
|
|
libboost-filesystem-dev \
|
|
libboost-test-dev \
|
|
libboost-thread-dev
|
|
|
|
# Qt 5 for GUI
|
|
log_info "Installing Qt5 for GUI..."
|
|
sudo apt install -y \
|
|
libqt5gui5 \
|
|
libqt5core5a \
|
|
libqt5dbus5 \
|
|
qttools5-dev \
|
|
qttools5-dev-tools \
|
|
qtbase5-dev
|
|
|
|
# Optional dependencies
|
|
log_info "Installing optional dependencies..."
|
|
sudo apt install -y \
|
|
libqrencode-dev \
|
|
libzmq3-dev \
|
|
libminiupnpc-dev
|
|
|
|
# Debugging tools
|
|
log_info "Installing debugging tools..."
|
|
sudo apt install -y gdb valgrind
|
|
|
|
# ccache for faster rebuilds
|
|
log_info "Installing ccache for faster rebuilds..."
|
|
sudo apt install -y ccache
|
|
|
|
log_info "Dependencies installed successfully!"
|
|
}
|
|
|
|
###############################################################################
|
|
# STEP 2: Install BerkeleyDB 4.8
|
|
###############################################################################
|
|
install_berkeleydb() {
|
|
log_info "Installing BerkeleyDB 4.8..."
|
|
|
|
if [ -d "$SCRIPT_DIR/db4" ]; then
|
|
log_warn "BerkeleyDB directory already exists. Skipping installation."
|
|
log_warn "Remove db4/ folder to reinstall."
|
|
return 0
|
|
fi
|
|
|
|
if [ ! -f "./contrib/install_db4.sh" ]; then
|
|
log_error "install_db4.sh script not found in contrib/"
|
|
exit 1
|
|
fi
|
|
|
|
./contrib/install_db4.sh "$SCRIPT_DIR"
|
|
|
|
log_info "BerkeleyDB 4.8 installed successfully!"
|
|
}
|
|
|
|
###############################################################################
|
|
# STEP 3: Build Palladium Core
|
|
###############################################################################
|
|
build_palladium() {
|
|
log_info "Starting Palladium Core build process..."
|
|
|
|
# Clean previous build if Makefile exists
|
|
if [ -f "Makefile" ]; then
|
|
log_info "Cleaning previous build configuration..."
|
|
make distclean 2>/dev/null || true
|
|
fi
|
|
|
|
# Always regenerate build files to ensure subdirectories (secp256k1, univalue) are in sync
|
|
log_info "Regenerating build files (autogen.sh)..."
|
|
./autogen.sh
|
|
|
|
# Set BerkeleyDB prefix
|
|
export BDB_PREFIX="$SCRIPT_DIR/db4"
|
|
|
|
if [ ! -d "$BDB_PREFIX" ]; then
|
|
log_error "BerkeleyDB not found at $BDB_PREFIX"
|
|
log_error "Please run the script with --install-deps first"
|
|
exit 1
|
|
fi
|
|
|
|
# Setup ccache for faster rebuilds
|
|
if command -v ccache &> /dev/null; then
|
|
log_info "Enabling ccache for faster compilation..."
|
|
# Add ccache to PATH (it will wrap gcc/g++ automatically)
|
|
export PATH="/usr/lib/ccache:$PATH"
|
|
# Use plain gcc/g++ names (ccache wrappers will intercept them)
|
|
export CC="gcc"
|
|
export CXX="g++"
|
|
ccache -z # Zero statistics before build
|
|
else
|
|
log_warn "ccache not found, using plain gcc/g++..."
|
|
export CC="gcc"
|
|
export CXX="g++"
|
|
fi
|
|
|
|
# Calculate optimal number of parallel jobs
|
|
JOBS=$(nproc)
|
|
|
|
log_info "Available CPU cores: $JOBS"
|
|
log_info "Using $JOBS parallel jobs"
|
|
|
|
# Configure build with optimization flags
|
|
log_info "Configuring build with Qt5 and BerkeleyDB 4.8..."
|
|
./configure \
|
|
--enable-gui=qt5 \
|
|
--with-gui=qt5 \
|
|
--enable-zmq \
|
|
--with-miniupnpc \
|
|
--disable-tests \
|
|
--disable-bench \
|
|
CXXFLAGS="-O2 -pipe" \
|
|
BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" \
|
|
BDB_CFLAGS="-I${BDB_PREFIX}/include"
|
|
|
|
# Compile with parallel jobs
|
|
log_info "Starting parallel compilation..."
|
|
START_TIME=$(date +%s)
|
|
|
|
# Use make with parallel jobs
|
|
make -j"$JOBS"
|
|
|
|
END_TIME=$(date +%s)
|
|
BUILD_TIME=$((END_TIME - START_TIME))
|
|
|
|
log_info "Build completed successfully in ${BUILD_TIME}s!"
|
|
|
|
# Show ccache stats after build
|
|
if command -v ccache &> /dev/null; then
|
|
log_info "ccache statistics:"
|
|
ccache -s | head -n 10
|
|
fi
|
|
|
|
log_info "Binaries location:"
|
|
log_info " - palladiumd: $SCRIPT_DIR/src/palladiumd"
|
|
log_info " - palladium-cli: $SCRIPT_DIR/src/palladium-cli"
|
|
log_info " - palladium-qt: $SCRIPT_DIR/src/qt/palladium-qt"
|
|
}
|
|
|
|
###############################################################################
|
|
# STEP 4: Clean build artifacts
|
|
###############################################################################
|
|
clean_build() {
|
|
log_info "Cleaning build artifacts..."
|
|
|
|
if [ -f "Makefile" ]; then
|
|
make clean
|
|
log_info "Build artifacts cleaned"
|
|
else
|
|
log_warn "No Makefile found, nothing to clean"
|
|
fi
|
|
|
|
if [ -f "configure" ]; then
|
|
log_info "Removing configure script..."
|
|
make distclean 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
###############################################################################
|
|
# STEP 5: Quick rebuild (without reconfigure)
|
|
###############################################################################
|
|
rebuild_palladium() {
|
|
log_info "Quick rebuild (keeping existing configuration)..."
|
|
|
|
if [ ! -f "Makefile" ]; then
|
|
log_error "No Makefile found. Run --build first to configure."
|
|
exit 1
|
|
fi
|
|
|
|
# Setup ccache for faster rebuilds
|
|
if command -v ccache &> /dev/null; then
|
|
log_info "Enabling ccache for faster compilation..."
|
|
# Add ccache to PATH (it will wrap gcc/g++ automatically)
|
|
export PATH="/usr/lib/ccache:$PATH"
|
|
# Use plain gcc/g++ names (ccache wrappers will intercept them)
|
|
export CC="gcc"
|
|
export CXX="g++"
|
|
ccache -z # Zero statistics before build
|
|
else
|
|
log_warn "ccache not found, using plain gcc/g++..."
|
|
export CC="gcc"
|
|
export CXX="g++"
|
|
fi
|
|
|
|
# Calculate optimal number of parallel jobs
|
|
JOBS=$(nproc)
|
|
|
|
log_info "Available CPU cores: $JOBS"
|
|
log_info "Using $JOBS parallel jobs"
|
|
|
|
# Clean only object files (fast)
|
|
make clean
|
|
|
|
# Compile with parallel jobs
|
|
log_info "Starting parallel compilation..."
|
|
START_TIME=$(date +%s)
|
|
|
|
make -j"$JOBS"
|
|
|
|
END_TIME=$(date +%s)
|
|
BUILD_TIME=$((END_TIME - START_TIME))
|
|
|
|
log_info "Rebuild completed successfully in ${BUILD_TIME}s!"
|
|
|
|
# Show ccache stats after rebuild
|
|
if command -v ccache &> /dev/null; then
|
|
log_info "ccache statistics:"
|
|
ccache -s | head -n 10
|
|
fi
|
|
|
|
log_info "Binaries location:"
|
|
log_info " - palladiumd: $SCRIPT_DIR/src/palladiumd"
|
|
log_info " - palladium-cli: $SCRIPT_DIR/src/palladium-cli"
|
|
log_info " - palladium-qt: $SCRIPT_DIR/src/qt/palladium-qt"
|
|
}
|
|
|
|
###############################################################################
|
|
# Main script
|
|
###############################################################################
|
|
show_help() {
|
|
cat << EOF
|
|
Usage: $0 [OPTIONS]
|
|
|
|
Quick build script for Palladium Core
|
|
|
|
OPTIONS:
|
|
--help Show this help message
|
|
--install-deps Install system dependencies only
|
|
--install-db Install BerkeleyDB 4.8 only
|
|
--build Full build with reconfigure (distclean + configure + make)
|
|
--rebuild Quick rebuild without reconfigure (clean + make)
|
|
--clean Clean build artifacts
|
|
--full Full build (deps + db + build) [DEFAULT]
|
|
|
|
EXAMPLES:
|
|
$0 # Full build with all steps
|
|
$0 --build # Full rebuild (reconfigures everything)
|
|
$0 --rebuild # Quick rebuild (keeps configuration, faster for testing)
|
|
$0 --clean # Clean build artifacts
|
|
$0 --install-deps # Install dependencies only
|
|
|
|
EOF
|
|
}
|
|
|
|
# Parse command line arguments
|
|
case "${1:-}" in
|
|
--help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
--install-deps)
|
|
install_dependencies
|
|
;;
|
|
--install-db)
|
|
install_berkeleydb
|
|
;;
|
|
--build)
|
|
build_palladium
|
|
;;
|
|
--rebuild)
|
|
rebuild_palladium
|
|
;;
|
|
--clean)
|
|
clean_build
|
|
;;
|
|
--full|"")
|
|
log_info "Starting full build process..."
|
|
install_dependencies
|
|
install_berkeleydb
|
|
build_palladium
|
|
log_info "Full build process completed!"
|
|
;;
|
|
*)
|
|
log_error "Unknown option: $1"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit 0
|