- Cross toolchains: llvm-mingw-aarch64 (Windows ARM64; SDL3 staged from MSYS2's clangarm64 repo since SDL ships no MinGW ARM64 dev package) and clang-aarch64-linux-gnu (Linux ARM64; arm64 libc++/SDL3 via dpkg multiarch). - Distro images: Dockerfile.linux-arm64, Dockerfile.win-arm64, Dockerfile.debian and Dockerfile.debian-arm64 (Debian 13 with upstream CMake, whose 3.31 gate cannot enable import std). - Packaging via CPack: .deb for Ubuntu 26.04 and Debian 13 on amd64 and arm64 (dependencies derived by dpkg-shlibdeps), portable .zip/.tar.gz, and a Windows .msi built with wixl (msitools) straight from the Linux cross image. wixl 0.106 lacks arm64, so Windows/ARM64 ships the portable zip only. - CMake: parameterize the SDL3 MinGW triple, add install() + CPack config. - CI: build/package jobs for both arm64 targets and both Debian packages; existing Linux/Windows jobs now also emit the .deb / .zip + .msi. - scripts/: build-linux-arm64, build-windows-arm64, build-debian, build-debian-arm64.
68 lines
2.5 KiB
Docker
68 lines
2.5 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# Windows cross-build environment (x86_64), fully isolated from the Linux image
|
|
# in Dockerfile so the two toolchains and standard libraries never interfere.
|
|
#
|
|
# Toolchain: llvm-mingw (clang + libc++ + the libc++ `std` module, MSVCRT
|
|
# runtime) with the official SDL3 MinGW development package.
|
|
|
|
FROM ubuntu:26.04 AS dev
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
ARG APT_MIRROR=""
|
|
RUN if [ -n "$APT_MIRROR" ]; then \
|
|
sed -i -e "s|http://archive.ubuntu.com/ubuntu|${APT_MIRROR}|g" \
|
|
-e "s|http://security.ubuntu.com/ubuntu|${APT_MIRROR}|g" \
|
|
-e "s|http://ports.ubuntu.com/ubuntu-ports|${APT_MIRROR}|g" \
|
|
/etc/apt/sources.list /etc/apt/sources.list.d/*.sources 2>/dev/null || true; \
|
|
fi
|
|
|
|
RUN --mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
--mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
for attempt in 1 2 3 4 5; do \
|
|
apt-get -o Acquire::Retries=5 update && break; \
|
|
echo "apt-get update failed (attempt $attempt), retrying"; \
|
|
sleep 5; \
|
|
done \
|
|
&& apt-get -o Acquire::Retries=5 install -y --no-install-recommends \
|
|
ca-certificates \
|
|
cmake \
|
|
curl \
|
|
ninja-build \
|
|
python3 \
|
|
wixl \
|
|
xz-utils \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Pinned toolchain + SDL3 versions (override with --build-arg to bump).
|
|
ARG LLVM_MINGW_VERSION=20260908
|
|
ARG LLVM_MINGW_FLAVOR=msvcrt
|
|
ARG SDL3_VERSION=3.4.16
|
|
|
|
RUN mkdir -p /opt/llvm-mingw /opt/sdl3-mingw \
|
|
&& curl -fL "https://github.com/mstorsjo/llvm-mingw/releases/download/${LLVM_MINGW_VERSION}/llvm-mingw-${LLVM_MINGW_VERSION}-${LLVM_MINGW_FLAVOR}-ubuntu-22.04-x86_64.tar.xz" \
|
|
| tar -xJ -C /opt/llvm-mingw --strip-components=1 \
|
|
&& curl -fL "https://github.com/libsdl-org/SDL/releases/download/release-${SDL3_VERSION}/SDL3-devel-${SDL3_VERSION}-mingw.tar.gz" \
|
|
| tar -xz -C /opt/sdl3-mingw --strip-components=1
|
|
|
|
ENV OPENRA3_LLVM_MINGW_ROOT=/opt/llvm-mingw
|
|
ENV OPENRA3_SDL3_ROOT=/opt/sdl3-mingw
|
|
|
|
WORKDIR /work
|
|
COPY . .
|
|
|
|
RUN cmake -S . -B build/windows -G Ninja \
|
|
-DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/llvm-mingw-x86_64.cmake \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
&& cmake --build build/windows -j \
|
|
&& cmake --build build/windows --target openra3_msi \
|
|
&& (cd build/windows && cpack -G ZIP)
|
|
|
|
# package target: the .exe plus the SDL3 runtime DLL.
|
|
FROM ubuntu:26.04 AS package
|
|
|
|
WORKDIR /app
|
|
COPY --from=dev /work/build/windows/bin/openra3.exe /app/
|
|
COPY --from=dev /work/build/windows/bin/SDL3.dll /app/
|