From 04bf9b42c30bf269057c6992eb483c79d62b6e0f Mon Sep 17 00:00:00 2001 From: Vantz Stockwell Date: Tue, 17 Mar 2026 09:27:15 -0400 Subject: [PATCH] fix: build zlib + OpenSSL from source for MinGW FreeRDP cross-compile --- .gitea/workflows/build-release.yml | 51 ++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/build-release.yml b/.gitea/workflows/build-release.yml index 5f96ece..681a8b9 100644 --- a/.gitea/workflows/build-release.yml +++ b/.gitea/workflows/build-release.yml @@ -55,7 +55,7 @@ jobs: mingw-w64 mingw-w64-tools binutils-mingw-w64 \ cmake ninja-build nasm meson \ default-jre-headless \ - python3 curl + python3 curl pkg-config # Node.js if ! command -v node >/dev/null 2>&1; then @@ -69,34 +69,71 @@ jobs: x86_64-w64-mingw32-gcc --version | head -1 cmake --version | head -1 + # =============================================================== + # FreeRDP3 dependencies — cross-compile zlib + OpenSSL for MinGW + # =============================================================== + - name: Build FreeRDP3 dependencies (zlib + OpenSSL for MinGW) + run: | + INSTALL_PREFIX="/tmp/mingw-deps" + mkdir -p "$INSTALL_PREFIX" + export CROSS=x86_64-w64-mingw32 + + # --- zlib --- + echo "=== Building zlib for MinGW ===" + ZLIB_VERSION="1.3.1" + curl -sSL -o /tmp/zlib.tar.gz "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" + tar -xzf /tmp/zlib.tar.gz -C /tmp + cd /tmp/zlib-${ZLIB_VERSION} + CC=${CROSS}-gcc AR=${CROSS}-ar RANLIB=${CROSS}-ranlib \ + ./configure --prefix="$INSTALL_PREFIX" --static + make -j$(nproc) + make install + echo "zlib installed to $INSTALL_PREFIX" + + # --- OpenSSL --- + echo "=== Building OpenSSL for MinGW ===" + OPENSSL_VERSION="3.4.1" + curl -sSL -o /tmp/openssl.tar.gz "https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/openssl-${OPENSSL_VERSION}.tar.gz" + tar -xzf /tmp/openssl.tar.gz -C /tmp + cd /tmp/openssl-${OPENSSL_VERSION} + ./Configure mingw64 no-shared no-tests \ + --cross-compile-prefix=${CROSS}- \ + --prefix="$INSTALL_PREFIX" + make -j$(nproc) + make install_sw + echo "OpenSSL installed to $INSTALL_PREFIX" + # =============================================================== # FreeRDP3 — Cross-compile from source via MinGW # =============================================================== - name: Build FreeRDP3 for Windows (MinGW cross-compile) run: | FREERDP_VERSION="3.24.0" + INSTALL_PREFIX="/tmp/mingw-deps" echo "=== Building FreeRDP ${FREERDP_VERSION} for Windows amd64 via MinGW ===" # Download FreeRDP source - curl -sSL -o /tmp/freerdp.tar.gz \ - "https://github.com/FreeRDP/FreeRDP/archive/refs/tags/${FREERDP_VERSION}.tar.gz" + curl -sSL -o /tmp/freerdp.tar.gz "https://github.com/FreeRDP/FreeRDP/archive/refs/tags/${FREERDP_VERSION}.tar.gz" tar -xzf /tmp/freerdp.tar.gz -C /tmp cd /tmp/FreeRDP-${FREERDP_VERSION} - # Create MinGW toolchain file - cat > /tmp/mingw-toolchain.cmake << 'TCEOF' + # Create MinGW toolchain file pointing to our built deps + cat > /tmp/mingw-toolchain.cmake << TCEOF set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_PROCESSOR AMD64) set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) - set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32) + set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32;${INSTALL_PREFIX}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + set(CMAKE_PREFIX_PATH ${INSTALL_PREFIX}) + set(OPENSSL_ROOT_DIR ${INSTALL_PREFIX}) + set(ZLIB_ROOT ${INSTALL_PREFIX}) TCEOF - # Configure — minimal client-only build (no server, no extras) + # Configure — minimal client-only build cmake -B build -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=/tmp/mingw-toolchain.cmake \ -DCMAKE_BUILD_TYPE=Release \