From 982badb58ee54467c6f35a9ff21aaf78853e447b Mon Sep 17 00:00:00 2001 From: sherif181 <> Date: Sat, 1 Nov 2025 17:02:27 +0100 Subject: [PATCH 1/3] Integrated docker based build --- .gitignore | 1 + build.sh | 73 ++++++++++++++++++++++++++++++ docker-build/Dockerfile | 93 ++++++++++++++++++++++++++++++++++++++ docker-build/entrypoint.sh | 28 ++++++++++++ 4 files changed, 195 insertions(+) create mode 100755 build.sh create mode 100644 docker-build/Dockerfile create mode 100644 docker-build/entrypoint.sh diff --git a/.gitignore b/.gitignore index 1c9c525ae1..f38f4e4473 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ *.user *.ncb /build* +!/build.sh nbproject/ project/ doxygen/ diff --git a/build.sh b/build.sh new file mode 100755 index 0000000000..9344c99691 --- /dev/null +++ b/build.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat <&2 + usage + exit 1 + ;; + *) + # Positional TARGET (accept only one) + MAKE_TARGET="$MAKE_TARGET $1" + shift + ;; + esac +done + +docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) docker-build -t zerohour-build +if [[ "$INTERACTIVE" == "true" ]]; then + FLAGS=" -it --entrypoint bash" +else + FLAGS="" +fi +docker run -u $(id -u):$(id -g) -e MAKE_TARGET="$MAKE_TARGET" -e FORCE_CMAKE=$FORCE_CMAKE -v "`pwd`":/build/cnc --rm $FLAGS zerohour-build + + + + + diff --git a/docker-build/Dockerfile b/docker-build/Dockerfile new file mode 100644 index 0000000000..cad26eb69b --- /dev/null +++ b/docker-build/Dockerfile @@ -0,0 +1,93 @@ +FROM debian:12.10-slim + +# Build arguments +ARG CMAKE_VERSION="3.31.6" +ARG GIT_VERSION="2.49.0" +ARG UID +ARG GID + +# Install utils +RUN apt update \ + && apt install wget gpg unzip git -y \ + && dpkg --add-architecture i386 \ + && apt clean \ + && rm -rf /var/lib/apt/lists/* + +# Install wine +RUN mkdir -pm755 /etc/apt/keyrings \ + && (wget -O - https://dl.winehq.org/wine-builds/winehq.key | gpg --dearmor -o /etc/apt/keyrings/winehq-archive.key -) \ + && wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/debian/dists/bookworm/winehq-bookworm.sources \ + && apt update \ + && apt install --no-install-recommends winehq-stable -y \ + && apt clean \ + && rm -rf /var/lib/apt/lists/* +# Setup build folder +RUN mkdir /build +RUN chown ${UID}:${GID} /build + +USER ${UID}:${GID} +WORKDIR /build/tools + +# Install cmake windows +RUN wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-windows-x86_64.zip \ + && unzip cmake-${CMAKE_VERSION}-windows-x86_64.zip -d /build/tools/ \ + && mv /build/tools/cmake-${CMAKE_VERSION}-windows-x86_64 /build/tools/cmake \ + && find /build/tools/ -name "*.zip" -exec rm -f {} + + +# Install git windows +RUN wget https://github.com/git-for-windows/git/releases/download/v${GIT_VERSION}.windows.1/MinGit-${GIT_VERSION}-64-bit.zip \ + && unzip MinGit-${GIT_VERSION}-64-bit.zip -d /build/tools/ \ + && mv /build/tools/cmd /build/tools/git \ + && find /build/tools/ -name "*.zip" -exec rm -f {} + + +# Install Visual Studio 6 Portable +RUN wget https://github.com/itsmattkc/MSVC600/archive/refs/heads/master.zip \ + && unzip master.zip -d /build/tools \ + && mv /build/tools/MSVC600-master/ /build/tools/vs6 \ + && find /build/tools/ -name "*.zip" -exec rm -f {} + + + +#Install ninja +RUN wget https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-win.zip \ + && unzip ninja-win.zip -d /build/tools/ \ + && find /build/tools/ -name "*.zip" -exec rm -f {} + + +# Setup wine prefix +ENV WINEDEBUG=-all +ENV WINEARCH=win64 +ENV WINEPREFIX=/build/prefix64 + +# Create empty TEMP folder for linking +RUN mkdir /build/tmp +ENV TMP="Z:\\build\\tmp" +ENV TEMP="Z:\\build\\tmp" +ENV TEMPDIR="Z:\\build\\tmp" + +# Setup Visual Studio 6 Environment variables +ENV VS="Z:\\build\\tools\\vs6" +ENV MSVCDir="$VS\\vc98" +ENV WINEPATH="C:\\windows\\system32;\ +$VS\\vc98\\bin;\ +$VS\\vc98\\lib;\ +$VS\\vc98\\include;\ +$VS\\common\\Tools;\ +$VS\\common\\MSDev98\\bin" +ENV LIB="$VS\\vc98\\Lib;$VS\\vc98\\MFC\\Lib;Z:\\build\\cnc\\build\\vc6" +ENV INCLUDE="$VS\\vc98\\ATL\\INCLUDE;\ +$VS\\vc98\\INCLUDE;\ +$VS\\vc98\\MFC\\INCLUDE;\ +$VS\\vc98\\Include" +ENV CC="$VS\\vc98\\bin\\CL.exe" +ENV CXX="$VS\\vc98\\bin\\CL.exe" +ENV PRESET=vc6 + +#prevent cache warning +ENV HOME=/build/tmp/home +RUN mkdir /build/tmp/home + +WORKDIR /build/cnc + +USER root +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh +CMD /entrypoint.sh diff --git a/docker-build/entrypoint.sh b/docker-build/entrypoint.sh new file mode 100644 index 0000000000..1fe64c12ea --- /dev/null +++ b/docker-build/entrypoint.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -euo pipefail +cd /build/cnc +wineboot +if [ "${FORCE_CMAKE:-}" = "true" ] || [ ! -f build/docker/build.ninja ]; then + wine /build/tools/cmake/bin/cmake.exe \ + --preset ${PRESET} \ + -DCMAKE_SYSTEM="Windows" \ + -DCMAKE_SYSTEM_NAME="Windows" \ + -DCMAKE_SIZEOF_VOID_P=4 \ + -DCMAKE_MAKE_PROGRAM="Z:/build/tools/ninja.exe" \ + -DCMAKE_C_COMPILER="Z:/build/tools/vs6/vc98/bin/cl.exe" \ + -DCMAKE_CXX_COMPILER="Z:/build/tools/vs6/vc98/bin/cl.exe" \ + -DGIT_EXECUTABLE="Z:/build/tools/git/git.exe" \ + -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \ + -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ + -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \ + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY \ + -DCMAKE_DISABLE_PRECOMPILE_HEADERS=1 \ + -DCMAKE_C_COMPILER_WORKS=1 \ + -DCMAKE_CXX_COMPILER_WORKS=1 \ + -B /build/cnc/build/docker +fi + +cd /build/cnc/build/docker +wine cmd /c "set TMP=Z:\build\tmp& set TEMP=Z:\build\tmp& Z:\build\tools\ninja.exe $MAKE_TARGET" + + From 4781a6ba5eddf47c05ffc81830cbafe5f2051046 Mon Sep 17 00:00:00 2001 From: sherif181 <> Date: Sat, 1 Nov 2025 17:07:55 +0100 Subject: [PATCH 2/3] Integrated docker based build --- build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sh b/build.sh index 9344c99691..f88f3a553b 100755 --- a/build.sh +++ b/build.sh @@ -8,7 +8,7 @@ usage() { Usage: $(basename "$0") [OPTIONS] [TARGET] -TARGET is passed to NMAKE.exe +TARGET is passed to ninja.exe Options: -h, --help Show this help and exit From 026ef16ccad1f89dde7204b916bc7788fde54e14 Mon Sep 17 00:00:00 2001 From: sherif181 <> Date: Mon, 3 Nov 2025 10:26:58 +0100 Subject: [PATCH 3/3] rename docker build files --- build.sh => dockerbuild.sh | 2 +- {docker-build => dockerbuild}/Dockerfile | 0 {docker-build => dockerbuild}/entrypoint.sh | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename build.sh => dockerbuild.sh (97%) rename {docker-build => dockerbuild}/Dockerfile (100%) rename {docker-build => dockerbuild}/entrypoint.sh (100%) diff --git a/build.sh b/dockerbuild.sh similarity index 97% rename from build.sh rename to dockerbuild.sh index f88f3a553b..9507f429fd 100755 --- a/build.sh +++ b/dockerbuild.sh @@ -59,7 +59,7 @@ while [[ $# -gt 0 ]]; do esac done -docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) docker-build -t zerohour-build +docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) dockerbuild -t zerohour-build if [[ "$INTERACTIVE" == "true" ]]; then FLAGS=" -it --entrypoint bash" else diff --git a/docker-build/Dockerfile b/dockerbuild/Dockerfile similarity index 100% rename from docker-build/Dockerfile rename to dockerbuild/Dockerfile diff --git a/docker-build/entrypoint.sh b/dockerbuild/entrypoint.sh similarity index 100% rename from docker-build/entrypoint.sh rename to dockerbuild/entrypoint.sh