#!/usr/bin/env bash # Copyright (c) 2016-2024 The Hush developers # Copyright (c) 2024-2026 The DragonX developers # Distributed under the GPLv3 software license, see the accompanying # file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html set -eu -o pipefail VERSION="1.0.0" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RELEASE_DIR="$SCRIPT_DIR/release" # Parse release flags BUILD_LINUX_RELEASE=0 BUILD_WIN_RELEASE=0 BUILD_MAC_RELEASE=0 REMAINING_ARGS=() for arg in "$@"; do case "$arg" in --linux-release) BUILD_LINUX_RELEASE=1 ;; --win-release) BUILD_WIN_RELEASE=1 ;; --mac-release) BUILD_MAC_RELEASE=1 ;; --all-release) BUILD_LINUX_RELEASE=1 BUILD_WIN_RELEASE=1 BUILD_MAC_RELEASE=1 ;; *) REMAINING_ARGS+=("$arg") ;; esac done # Clean artifacts that may conflict between platform builds clean_for_platform() { local platform="$1" echo "Cleaning build artifacts for $platform build..." # Use make clean if Makefile exists (safer than manual deletion) if [ -f src/Makefile ]; then make -C src clean 2>/dev/null || true fi # Remove final binaries if [ -d src ]; then rm -f src/dragonxd src/dragonx-cli src/dragonx-tx 2>/dev/null || true rm -f src/dragonxd.exe src/dragonx-cli.exe src/dragonx-tx.exe 2>/dev/null || true rm -f src/hushd src/hush-cli src/hush-tx 2>/dev/null || true rm -f src/hushd.exe src/hush-cli.exe src/hush-tx.exe 2>/dev/null || true fi # Clean RandomX build for cross-platform compatibility rm -rf src/RandomX/build 2>/dev/null || true # Clean cryptoconditions rm -rf src/cc/*.o src/cc/*.a 2>/dev/null || true # Clean config cache (forces reconfigure for cross-platform) rm -f config.status config.log 2>/dev/null || true echo "Clean complete for $platform" } # Package release for a platform package_release() { local platform="$1" local release_subdir="$RELEASE_DIR/dragonx-$VERSION-$platform" echo "Packaging release for $platform..." mkdir -p "$release_subdir" # Copy bootstrap script cp "$SCRIPT_DIR/util/bootstrap-dragonx.sh" "$release_subdir/" # Copy common files cp "$SCRIPT_DIR/contrib/asmap/asmap.dat" "$release_subdir/" 2>/dev/null || true cp "$SCRIPT_DIR/sapling-output.params" "$release_subdir/" 2>/dev/null || true cp "$SCRIPT_DIR/sapling-spend.params" "$release_subdir/" 2>/dev/null || true case "$platform" in linux-amd64) cp "$SCRIPT_DIR/src/dragonxd" "$release_subdir/" cp "$SCRIPT_DIR/src/dragonx-cli" "$release_subdir/" cp "$SCRIPT_DIR/src/dragonx-tx" "$release_subdir/" strip "$release_subdir/dragonxd" "$release_subdir/dragonx-cli" "$release_subdir/dragonx-tx" ;; win64) cp "$SCRIPT_DIR/src/dragonxd.exe" "$release_subdir/" cp "$SCRIPT_DIR/src/dragonx-cli.exe" "$release_subdir/" cp "$SCRIPT_DIR/src/dragonx-tx.exe" "$release_subdir/" x86_64-w64-mingw32-strip "$release_subdir/"*.exe 2>/dev/null || strip "$release_subdir/"*.exe 2>/dev/null || true ;; macos) cp "$SCRIPT_DIR/src/dragonxd" "$release_subdir/" cp "$SCRIPT_DIR/src/dragonx-cli" "$release_subdir/" cp "$SCRIPT_DIR/src/dragonx-tx" "$release_subdir/" strip "$release_subdir/dragonxd" "$release_subdir/dragonx-cli" "$release_subdir/dragonx-tx" 2>/dev/null || true ;; esac echo "Release packaged: $release_subdir" ls -la "$release_subdir" } # Handle release builds if [ $BUILD_LINUX_RELEASE -eq 1 ] || [ $BUILD_WIN_RELEASE -eq 1 ] || [ $BUILD_MAC_RELEASE -eq 1 ]; then mkdir -p "$RELEASE_DIR" if [ $BUILD_LINUX_RELEASE -eq 1 ]; then echo "=== Building Linux release ===" clean_for_platform linux ./util/build.sh --disable-tests "${REMAINING_ARGS[@]}" package_release linux-amd64 fi if [ $BUILD_WIN_RELEASE -eq 1 ]; then echo "=== Building Windows release ===" clean_for_platform windows ./util/build-win.sh --disable-tests "${REMAINING_ARGS[@]}" package_release win64 fi if [ $BUILD_MAC_RELEASE -eq 1 ]; then echo "=== Building macOS release ===" clean_for_platform macos ./util/build-mac.sh --disable-tests "${REMAINING_ARGS[@]}" package_release macos fi echo "" echo "=== Release builds complete ===" ls -la "$RELEASE_DIR"/ exit 0 fi # Standard build (auto-detect OS) if [[ "$OSTYPE" == "linux-gnu"* ]]; then ./util/build.sh --disable-tests "${REMAINING_ARGS[@]}" elif [[ "$OSTYPE" == "darwin"* ]]; then ./util/build-mac.sh --disable-tests "${REMAINING_ARGS[@]}" elif [[ "$OSTYPE" == "msys"* ]]; then ./util/build-win.sh --disable-tests "${REMAINING_ARGS[@]}" else echo "Unable to detect your OS. What are you using?" fi