FROM emscripten/emsdk:4.0.10 AS builder ARG CMAKE_VERSION=3.29.3 WORKDIR /src USER root RUN apt-get update && apt-get install -y git wget && rm -rf /var/lib/apt/lists/* RUN wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-Linux-x86_64.sh -O /tmp/cmake.sh && \ chmod +x /tmp/cmake.sh && \ /tmp/cmake.sh --skip-license --prefix=/usr/local && \ rm /tmp/cmake.sh RUN chown -R emscripten:emscripten /src USER emscripten COPY ISLE/emscripten/emscripten.patch /tmp/ RUN cd /emsdk/upstream/emscripten && \ git apply --check /tmp/emscripten.patch && \ git apply /tmp/emscripten.patch COPY --chown=emscripten:emscripten 3rdparty/ ./3rdparty/ COPY --chown=emscripten:emscripten LEGO1/ ./LEGO1/ COPY --chown=emscripten:emscripten ISLE/ ./ISLE/ COPY --chown=emscripten:emscripten miniwin/ ./miniwin/ COPY --chown=emscripten:emscripten util/ ./util/ COPY --chown=emscripten:emscripten CMake/ ./CMake/ COPY --chown=emscripten:emscripten packaging/ ./packaging/ COPY --chown=emscripten:emscripten extensions/ ./extensions/ COPY --chown=emscripten:emscripten CMakeLists.txt . RUN emcmake cmake -S . -B build -DISLE_BUILD_CONFIG=OFF -DISLE_DEBUG=OFF -DCMAKE_BUILD_TYPE=Release && \ emmake cmake --build build -j 32 RUN echo "Fetching isle.pizza frontend..."; \ git clone --depth 1 https://github.com/isledecomp/isle.pizza /tmp/isle.pizza; FROM node:22-alpine WORKDIR /app COPY --from=builder /tmp/isle.pizza ./ COPY --from=builder /src/build/isle.js /src/build/isle.wasm ./ RUN npm ci COPY docker/emscripten/entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh EXPOSE 6931 ENTRYPOINT ["/entrypoint.sh"]