#!/bin/bash # XMRig-HAC Release Build Script # Usage: ./build.sh [--linux-release] [--win-release] set -e ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RELEASE_DIR="$ROOT_DIR/release" VERSION=$(grep '#define APP_VERSION' "$ROOT_DIR/src/version.h" | sed 's/.*"\(.*\)"/\1/') BUILD_LINUX=false BUILD_WIN=false for arg in "$@"; do case "$arg" in --linux-release) BUILD_LINUX=true ;; --win-release) BUILD_WIN=true ;; *) echo "Usage: $0 [--linux-release] [--win-release]" exit 1 ;; esac done if ! $BUILD_LINUX && ! $BUILD_WIN; then echo "Usage: $0 [--linux-release] [--win-release]" echo "" echo "Flags:" echo " --linux-release Build Linux x86_64 release" echo " --win-release Build Windows x86_64 release (cross-compile with MinGW)" exit 1 fi echo "=== XMRig-HAC Release Builder v${VERSION} ===" mkdir -p "$RELEASE_DIR" build_linux() { echo "" echo "=========================================" echo " Building Linux x86_64 Release" echo "=========================================" local BUILD_DIR="$ROOT_DIR/build-linux" local DEPS_DIR="$ROOT_DIR/scripts/deps" # Build dependencies if needed if [ ! -f "$DEPS_DIR/lib/libuv.a" ] || [ ! -f "$DEPS_DIR/lib/libssl.a" ] || [ ! -f "$DEPS_DIR/lib/libhwloc.a" ]; then echo "--- Building Linux dependencies ---" cd "$ROOT_DIR/scripts" bash build_deps.sh fi # Configure and build mkdir -p "$BUILD_DIR" cd "$BUILD_DIR" cmake "$ROOT_DIR" \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_STATIC=ON \ -DWITH_OPENCL=OFF \ -DWITH_CUDA=OFF \ -DXMRIG_DEPS="$DEPS_DIR" make -j"$(nproc)" strip xmrig # Package local PKG_NAME="xmrig-hac-${VERSION}-linux-x64" local PKG_DIR="$RELEASE_DIR/$PKG_NAME" rm -rf "$PKG_DIR" mkdir -p "$PKG_DIR" cp "$BUILD_DIR/xmrig" "$PKG_DIR/" cp "$ROOT_DIR/src/config.example.json" "$PKG_DIR/config.json" cp "$ROOT_DIR/README.md" "$PKG_DIR/" cd "$RELEASE_DIR" zip -r "${PKG_NAME}.zip" "$PKG_NAME" rm -rf "$PKG_DIR" echo "" echo "Linux release: release/${PKG_NAME}.zip" } build_windows() { echo "" echo "=========================================" echo " Building Windows x86_64 Release" echo "=========================================" # Delegate to the existing cross-compilation script cd "$ROOT_DIR/scripts" bash build_windows.sh local BUILD_DIR="$ROOT_DIR/build-windows" # Package local PKG_NAME="xmrig-hac-${VERSION}-win-x64" local PKG_DIR="$RELEASE_DIR/$PKG_NAME" rm -rf "$PKG_DIR" mkdir -p "$PKG_DIR" cp "$BUILD_DIR/xmrig.exe" "$PKG_DIR/" cp "$ROOT_DIR/bin/WinRing0/WinRing0x64.sys" "$PKG_DIR/" cp "$ROOT_DIR/src/config.example.json" "$PKG_DIR/config.json" cp "$ROOT_DIR/README.md" "$PKG_DIR/" cd "$RELEASE_DIR" zip -r "${PKG_NAME}.zip" "$PKG_NAME" rm -rf "$PKG_DIR" echo "" echo "Windows release: release/${PKG_NAME}.zip" } # Run selected builds $BUILD_LINUX && build_linux $BUILD_WIN && build_windows echo "" echo "=========================================" echo " Release artifacts in release/" echo "=========================================" ls -lh "$RELEASE_DIR"/*.zip 2>/dev/null || true