fix: build zlib + OpenSSL from source for MinGW FreeRDP cross-compile
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 32s

This commit is contained in:
Vantz Stockwell 2026-03-17 09:27:15 -04:00
parent e5cc40df37
commit 04bf9b42c3

View File

@ -55,7 +55,7 @@ jobs:
mingw-w64 mingw-w64-tools binutils-mingw-w64 \ mingw-w64 mingw-w64-tools binutils-mingw-w64 \
cmake ninja-build nasm meson \ cmake ninja-build nasm meson \
default-jre-headless \ default-jre-headless \
python3 curl python3 curl pkg-config
# Node.js # Node.js
if ! command -v node >/dev/null 2>&1; then if ! command -v node >/dev/null 2>&1; then
@ -69,34 +69,71 @@ jobs:
x86_64-w64-mingw32-gcc --version | head -1 x86_64-w64-mingw32-gcc --version | head -1
cmake --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 # FreeRDP3 — Cross-compile from source via MinGW
# =============================================================== # ===============================================================
- name: Build FreeRDP3 for Windows (MinGW cross-compile) - name: Build FreeRDP3 for Windows (MinGW cross-compile)
run: | run: |
FREERDP_VERSION="3.24.0" FREERDP_VERSION="3.24.0"
INSTALL_PREFIX="/tmp/mingw-deps"
echo "=== Building FreeRDP ${FREERDP_VERSION} for Windows amd64 via MinGW ===" echo "=== Building FreeRDP ${FREERDP_VERSION} for Windows amd64 via MinGW ==="
# Download FreeRDP source # Download FreeRDP source
curl -sSL -o /tmp/freerdp.tar.gz \ curl -sSL -o /tmp/freerdp.tar.gz "https://github.com/FreeRDP/FreeRDP/archive/refs/tags/${FREERDP_VERSION}.tar.gz"
"https://github.com/FreeRDP/FreeRDP/archive/refs/tags/${FREERDP_VERSION}.tar.gz"
tar -xzf /tmp/freerdp.tar.gz -C /tmp tar -xzf /tmp/freerdp.tar.gz -C /tmp
cd /tmp/FreeRDP-${FREERDP_VERSION} cd /tmp/FreeRDP-${FREERDP_VERSION}
# Create MinGW toolchain file # Create MinGW toolchain file pointing to our built deps
cat > /tmp/mingw-toolchain.cmake << 'TCEOF' cat > /tmp/mingw-toolchain.cmake << TCEOF
set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR AMD64) set(CMAKE_SYSTEM_PROCESSOR AMD64)
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) 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_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE 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 TCEOF
# Configure — minimal client-only build (no server, no extras) # Configure — minimal client-only build
cmake -B build -G Ninja \ cmake -B build -G Ninja \
-DCMAKE_TOOLCHAIN_FILE=/tmp/mingw-toolchain.cmake \ -DCMAKE_TOOLCHAIN_FILE=/tmp/mingw-toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \ -DCMAKE_BUILD_TYPE=Release \