diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index d59e6ec4c..4e2f2fe90 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,13 +1,65 @@ FROM mcr.microsoft.com/devcontainers/cpp:ubuntu-22.04 -RUN apt-get update && apt-get install -y libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev ninja-build +RUN apt-get update && apt-get upgrade -y \ + && rm -rf /var/lib/apt/lists/* + +# download and install cmake from source +# this ensures we use the same version as in the github runner image +RUN apt-get purge -y cmake || true +ARG CMAKE_VERSION=3.31.11 +# download +WORKDIR /tmp +RUN curl -fsSL \ + https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz \ + -o cmake.tar.gz \ + && tar -xzf cmake.tar.gz \ + && rm cmake.tar.gz + # build and install +WORKDIR /tmp/cmake-${CMAKE_VERSION} +RUN ./bootstrap \ + --prefix=/usr/local \ + --parallel=$(nproc) \ + && make -j$(nproc) \ + && make install +# clean up +WORKDIR / +RUN rm -rf /tmp/cmake-${CMAKE_VERSION} + +# download and install tinyxml2 from source +# this ensures we have the cmake files needed for find_package +RUN apt-get purge -y libtinyxml2-dev || true +ARG TINYXML2_VERSION=11.0.0 +# download +WORKDIR /tmp +RUN curl -fsSL \ + https://github.com/leethomason/tinyxml2/archive/refs/tags/${TINYXML2_VERSION}.tar.gz \ + -o tinyxml2.tar.gz \ + && tar -xzf tinyxml2.tar.gz \ + && rm tinyxml2.tar.gz + # build and install +WORKDIR /tmp/tinyxml2-${TINYXML2_VERSION} +RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \ + && cmake --build build --parallel $(nproc) \ + && cmake --install build +# clean up +WORKDIR / +RUN rm -rf /tmp/tinyxml2-${TINYXML2_VERSION} + +# install apt dependencies +RUN apt-get update && apt-get install -y \ + libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev \ + libglew-dev nlohmann-json3-dev libspdlog-dev ninja-build libogg-dev \ + libopus-dev opus-tools libopusfile-dev libvorbis-dev libespeak-ng-dev \ + lsb-release git clang clang-format-14 zipcmp zipmerge ziptool \ + libopengl-dev libbz2-dev libzip-dev \ + && rm -rf /var/lib/apt/lists/* # Install latest SDL2 RUN wget https://www.libsdl.org/release/SDL2-2.26.1.tar.gz && \ tar -xzf SDL2-2.26.1.tar.gz && \ cd SDL2-2.26.1 && \ ./configure && \ - make && \ + make -j$(nproc) && \ make install && \ cd .. && \ rm -rf SDL2-2.26.1 && \ @@ -19,7 +71,7 @@ RUN wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.2.0.tar.gz & tar -xzf SDL2_net-2.2.0.tar.gz && \ cd SDL2_net-2.2.0 && \ ./configure && \ - make && \ + make -j$(nproc) && \ make install && \ cd .. && \ rm -rf SDL2_net-2.2.0 && \ diff --git a/.vscode/tasks.json b/.vscode/tasks.json index be763065e..b3ec8a819 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -9,14 +9,24 @@ "-S", ".", "-B", - "build/x64", + "build-cmake", "-G", - "Visual Studio 17 2022", - "-T", - "v143", - "-A", - "x64" + "Ninja" ], + "windows": { + "args": [ + "-S", + ".", + "-B", + "build/x64", + "-G", + "Visual Studio 17 2022", + "-T", + "v143", + "-A", + "x64" + ] + }, "group": "build", "problemMatcher": [] }, @@ -26,10 +36,19 @@ "command": "cmake", "args": [ "--build", - "./build/x64", + "build-cmake", "--target", - "GenerateSohOtr" + "GenerateSohOtr", + "--parallel" ], + "windows": { + "args": [ + "--build", + "./build/x64", + "--target", + "GenerateSohOtr" + ] + }, "group": "build", "problemMatcher": [] }, @@ -39,8 +58,16 @@ "command": "cmake", "args": [ "--build", - "./build/x64" + "build-cmake", + "--parallel", + "8" ], + "windows": { + "args": [ + "--build", + "./build/x64" + ] + }, "group": { "kind": "build", "isDefault": true @@ -58,4 +85,4 @@ ] } ] -} \ No newline at end of file +}