# syntax=docker/dockerfile:1 # Debian build environment for Linux on ARM64 (aarch64-linux-gnu), producing an # arm64 .deb. Cross-compiled from amd64 with Debian's clang-19 + libc++-19 and # the arm64 packages installed via dpkg multiarch. FROM debian:stable AS dev ENV DEBIAN_FRONTEND=noninteractive ARG APT_MIRROR="" RUN if [ -n "$APT_MIRROR" ]; then \ sed -i -e "s|http://deb.debian.org/debian|${APT_MIRROR}|g" \ -e "s|http://security.debian.org/debian-security|${APT_MIRROR}|g" \ /etc/apt/sources.list /etc/apt/sources.list.d/*.sources 2>/dev/null || true; \ fi RUN dpkg --add-architecture arm64 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 \ clang-19 \ clang-tools-19 \ curl \ dpkg-dev \ file \ gcc-aarch64-linux-gnu \ libc++-19-dev:arm64 \ libc++abi-19-dev:arm64 \ libsdl3-dev:arm64 \ libunwind-19-dev:arm64 \ lld-19 \ ninja-build \ pkg-config \ python3 \ && rm -rf /var/lib/apt/lists/* ARG CMAKE_VERSION=4.2.3 RUN mkdir -p /opt/cmake \ && curl -fL "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.tar.gz" \ | tar -xz -C /opt/cmake --strip-components=1 ENV PATH="/opt/cmake/bin:${PATH}" ENV CC=clang-19 ENV CXX=clang++-19 # Point pkg-config at the arm64 packages so SDL3 resolves to the aarch64 build. ENV PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig WORKDIR /work COPY . . RUN cmake -S . -B build/debian-arm64 -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/clang-aarch64-linux-gnu.cmake \ -DCMAKE_BUILD_TYPE=Release \ -DOPENRA3_AARCH64_CC=clang-19 \ -DOPENRA3_AARCH64_CXX=clang++-19 \ -DOPENRA3_AARCH64_STDLIB_MODULES_JSON=/usr/lib/llvm-19/lib/libc++.modules.json \ -DOPENRA3_DISTRO_TAG=debian13 \ && cmake --build build/debian-arm64 -j \ && (cd build/debian-arm64 && cpack -G DEB) FROM --platform=linux/arm64 debian:stable AS deploy ENV DEBIAN_FRONTEND=noninteractive RUN --mount=type=cache,target=/var/lib/apt,sharing=locked \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ apt-get -o Acquire::Retries=5 update \ && apt-get -o Acquire::Retries=5 install -y --no-install-recommends \ libc++1-19 \ libc++abi1-19 \ libsdl3-0 \ libvulkan1 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=dev /work/build/debian-arm64/bin/openra3 /app/openra3 ENTRYPOINT ["/app/openra3"]