From a10ec5f97c2179e44b52feebca32c03c807acb02 Mon Sep 17 00:00:00 2001 From: Razish Date: Thu, 29 Feb 2024 03:59:57 +1100 Subject: [PATCH] simplify dedicated server docker build introduce .dockerignore to ignore common build directories that would inflate the builder layer and slow down the COPY step switch from ubuntu to debian base, effectively upgraded (18.04 -> bookworm/2023) install only necessary packages, simplify apt-get invocation cmake: don't require JPEG and PNG libraries unless we're building renderers --- .dockerignore | 1 + CMakeLists.txt | 29 ++++++++++++--------- Dockerfile | 52 +++++++++++++++++++++---------------- codemp/client/cl_parse.cpp | 10 ++----- codemp/server/sv_client.cpp | 6 ----- 5 files changed, 50 insertions(+), 48 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..a5309e6b90 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +build*/ diff --git a/CMakeLists.txt b/CMakeLists.txt index c168794694..2e9cff41c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -358,22 +358,27 @@ set(SharedCommonSafeFiles # Adding all of the projects # #============================================================================= -if(UseInternalJPEG) - add_subdirectory(lib/jpeg-9a) -else() - find_package(JPEG REQUIRED) -endif() -if(UseInternalZlib) - add_subdirectory(lib/zlib) -else() - find_package(ZLIB REQUIRED) +# only include image libraries if we're building renderers +# FIXME: the renderers should declare their own dependencies +if(BuildMPRdVanilla OR BuildMPRend2 OR BuildSPRdVanilla OR BuildJK2SPRdVanilla) + if(UseInternalJPEG) + add_subdirectory(lib/jpeg-9a) + else() + find_package(JPEG REQUIRED) + endif() + + if(UseInternalPNG) + add_subdirectory(lib/libpng) + else() + find_package(PNG REQUIRED) + endif() endif() -if(UseInternalPNG) - add_subdirectory(lib/libpng) +if(UseInternalZlib) +add_subdirectory(lib/zlib) else() - find_package(PNG REQUIRED) +find_package(ZLIB REQUIRED) endif() # Always use bundled minizip (sets MINIZIP_{LIBRARIES,INCLUDE_DIR}) diff --git a/Dockerfile b/Dockerfile index 37614696e6..2f5b66ee50 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,44 +1,52 @@ # Builder image -FROM ubuntu:18.04 as builder +FROM debian:bookworm-slim as builder # Install build tools and libraries RUN dpkg --add-architecture i386 &&\ apt-get -q update &&\ - DEBIAN_FRONTEND="noninteractive" apt-get -q install -y -o Dpkg::Options::="--force-confnew" --no-install-recommends build-essential gcc-multilib g++-multilib cmake libjpeg-dev libjpeg-dev:i386 libpng-dev libpng-dev:i386 zlib1g-dev zlib1g-dev:i386 &&\ + apt-get -q install -y --no-install-recommends \ + make cmake \ + g++-multilib gcc-multilib \ + zlib1g-dev zlib1g-dev:i386 && \ rm -rf /var/lib/apt/lists/* # Copy sources COPY . /usr/src/openjk # Build i386 arch -RUN mkdir /usr/src/openjk/build.i386 &&\ - cd /usr/src/openjk/build.i386 &&\ - cmake -DCMAKE_TOOLCHAIN_FILE=/usr/src/openjk/cmake/Toolchains/linux-i686.cmake \ +RUN mkdir /usr/src/openjk/build.i386 && \ + cd /usr/src/openjk && \ + cmake -B "build.i386" \ + -DCMAKE_TOOLCHAIN_FILE=/usr/src/openjk/cmake/Toolchains/linux-i686.cmake \ -DCMAKE_INSTALL_PREFIX=/opt \ - -DBuildMPCGame=OFF -DBuildMPEngine=OFF -DBuildMPRdVanilla=OFF -DBuildMPUI=OFF \ - -DBuildSPEngine=OFF -DBuildSPGame=OFF -DBuildSPRdVanilla=OFF -DBuildMPRend2=OFF \ - .. &&\ - make &&\ - make install + -DBuildJK2SPEngine=OFF -DBuildJK2SPGame=OFF -DBuildJK2SPRdVanilla=OFF \ + -DBuildMPCGame=OFF -DBuildMPEngine=OFF -DBuildMPRdVanilla=OFF -DBuildMPRend2=OFF -DBuildMPUI=OFF \ + -DBuildSPEngine=OFF -DBuildSPGame=OFF -DBuildSPRdVanilla=OFF \ + -DBuildMPDed=ON -DBuildMPGame=ON && \ + cmake --build "build.i386" --config "Release" --parallel && \ + cmake --install "build.i386" --config "Release" # Build x86_64 arch -RUN mkdir /usr/src/openjk/build.x86_64 &&\ - cd /usr/src/openjk/build.x86_64 &&\ - cmake -DCMAKE_INSTALL_PREFIX=/opt \ - -DBuildMPCGame=OFF -DBuildMPEngine=OFF -DBuildMPRdVanilla=OFF -DBuildMPUI=OFF \ - -DBuildSPEngine=OFF -DBuildSPGame=OFF -DBuildSPRdVanilla=OFF -DBuildMPRend2=OFF \ - .. &&\ - make &&\ - make install +RUN mkdir /usr/src/openjk/build.x86_64 && \ + cd /usr/src/openjk && \ + cmake -B "build.x86_64" \ + -DCMAKE_INSTALL_PREFIX=/opt \ + -DBuildJK2SPEngine=OFF -DBuildJK2SPGame=OFF -DBuildJK2SPRdVanilla=OFF \ + -DBuildMPCGame=OFF -DBuildMPEngine=OFF -DBuildMPRdVanilla=OFF -DBuildMPRend2=OFF -DBuildMPUI=OFF \ + -DBuildSPEngine=OFF -DBuildSPGame=OFF -DBuildSPRdVanilla=OFF \ + -DBuildMPDed=ON -DBuildMPGame=ON && \ + cmake --build "build.x86_64" --config "Release" --parallel && \ + cmake --install "build.x86_64" --config "Release" # Server image -FROM ubuntu:18.04 +FROM debian:bookworm-slim # Install utilities and libraries -RUN dpkg --add-architecture i386 &&\ - apt-get -q update &&\ - DEBIAN_FRONTEND="noninteractive" apt-get -q install -y -o Dpkg::Options::="--force-confnew" --no-install-recommends socat libstdc++6 libstdc++6:i386 zlib1g zlib1g:i386 &&\ +RUN dpkg --add-architecture i386 && \ + apt-get -q update && \ + apt-get -q install -y --no-install-recommends \ + socat libstdc++6 libstdc++6:i386 zlib1g zlib1g:i386 && \ rm -rf /var/lib/apt/lists/* # Copy binaries and scripts diff --git a/codemp/client/cl_parse.cpp b/codemp/client/cl_parse.cpp index 379c458ee1..6acfe4a486 100644 --- a/codemp/client/cl_parse.cpp +++ b/codemp/client/cl_parse.cpp @@ -28,15 +28,9 @@ along with this program; if not, see . #include "cl_cgameapi.h" #include "qcommon/stringed_ingame.h" -#ifdef USE_INTERNAL_ZLIB -#include "zlib/zlib.h" -#else -#include -#endif - static char hiddenCvarVal[128]; -char *svc_strings[256] = { +const char *svc_strings[256] = { "svc_bad", "svc_nop", @@ -50,7 +44,7 @@ char *svc_strings[256] = { "svc_mapchange", }; -void SHOWNET( msg_t *msg, char *s) { +void SHOWNET( msg_t *msg, const char *s) { if ( cl_shownet->integer >= 2) { Com_Printf ("%3i:%s\n", msg->readcount-1, s); } diff --git a/codemp/server/sv_client.cpp b/codemp/server/sv_client.cpp index 073fbbe6a4..f446f5955d 100644 --- a/codemp/server/sv_client.cpp +++ b/codemp/server/sv_client.cpp @@ -27,12 +27,6 @@ along with this program; if not, see . #include "server.h" #include "qcommon/stringed_ingame.h" -#ifdef USE_INTERNAL_ZLIB -#include "zlib/zlib.h" -#else -#include -#endif - #include "server/sv_gameapi.h" static void SV_CloseDownload( client_t *cl );