#!/bin/bash # XMRig Windows Cross-Compilation Build Script # Builds xmrig for Windows using MinGW-w64 on Linux set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" XMRIG_DIR="$(dirname "$SCRIPT_DIR")" BUILD_DIR="$XMRIG_DIR/build-windows" DEPS_DIR="$XMRIG_DIR/deps-windows" OPENSSL_VERSION="1.1.1w" echo "=== XMRig Windows Build ===" echo "Source: $XMRIG_DIR" echo "Build: $BUILD_DIR" echo "Deps: $DEPS_DIR" # Check for MinGW-w64 if ! command -v x86_64-w64-mingw32-gcc-posix &> /dev/null; then echo "Error: MinGW-w64 not found. Install with:" echo " sudo apt install mingw-w64" exit 1 fi # Create directories mkdir -p "$BUILD_DIR" mkdir -p "$DEPS_DIR/include" mkdir -p "$DEPS_DIR/lib" # Build OpenSSL if needed if [ ! -f "$DEPS_DIR/lib/libssl.a" ]; then echo "=== Building OpenSSL $OPENSSL_VERSION ===" cd "$DEPS_DIR" if [ ! -f "openssl-${OPENSSL_VERSION}.tar.gz" ]; then wget "https://openssl.org/source/old/1.1.1/openssl-${OPENSSL_VERSION}.tar.gz" fi if [ ! -d "openssl-${OPENSSL_VERSION}" ]; then tar -xzf "openssl-${OPENSSL_VERSION}.tar.gz" fi cd "openssl-${OPENSSL_VERSION}" # Configure for Windows cross-compilation ./Configure mingw64 \ --cross-compile-prefix=x86_64-w64-mingw32- \ no-shared \ no-asm \ no-zlib \ no-comp \ --prefix="$DEPS_DIR" make -j$(nproc) make install_sw cd "$DEPS_DIR" fi # Build libuv if needed if [ ! -f "$DEPS_DIR/lib/libuv.a" ]; then echo "=== Building libuv dependency ===" cd "$DEPS_DIR" if [ ! -d "libuv-v1.51.0" ]; then if [ ! -f "libuv.tar.gz" ]; then curl -L -o libuv.tar.gz https://github.com/libuv/libuv/archive/refs/tags/v1.51.0.tar.gz fi tar -xzf libuv.tar.gz fi cd libuv-v1.51.0 mkdir -p build && cd build cmake .. \ -DCMAKE_TOOLCHAIN_FILE="$XMRIG_DIR/cmake/mingw-w64-toolchain.cmake" \ -DCMAKE_INSTALL_PREFIX="$DEPS_DIR" \ -DLIBUV_BUILD_SHARED=OFF \ -DBUILD_TESTING=OFF make -j$(nproc) make install fi cd "$BUILD_DIR" echo "=== Configuring XMRig ===" cmake "$XMRIG_DIR" \ -DCMAKE_TOOLCHAIN_FILE="$XMRIG_DIR/cmake/mingw-w64-toolchain.cmake" \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_STATIC=ON \ -DWITH_TLS=ON \ -DWITH_HWLOC=OFF \ -DWITH_OPENCL=OFF \ -DWITH_CUDA=OFF \ -DXMRIG_DEPS="$DEPS_DIR" \ -DOPENSSL_ROOT_DIR:PATH="$DEPS_DIR" \ -DOPENSSL_INCLUDE_DIR:PATH="$DEPS_DIR/include" \ -DOPENSSL_CRYPTO_LIBRARY:FILEPATH="$DEPS_DIR/lib/libcrypto.a" \ -DOPENSSL_SSL_LIBRARY:FILEPATH="$DEPS_DIR/lib/libssl.a" \ -DOPENSSL_LIBRARIES="$DEPS_DIR/lib/libssl.a;$DEPS_DIR/lib/libcrypto.a" \ -DUV_INCLUDE_DIR="$DEPS_DIR/include" \ -DUV_LIBRARY="$DEPS_DIR/lib/libuv.a" echo "=== Building XMRig ===" make -j$(nproc) # Strip the executable x86_64-w64-mingw32-strip xmrig.exe 2>/dev/null || true echo "" echo "=== Build Complete ===" ls -la *.exe 2>/dev/null || echo "Executable not found" echo "" echo "Copy the .exe and WinRing0x64.sys to Windows to run"