fix(docker): Replace emsdk image with Ubuntu + emsdk from source

The Docker build used emscripten/emsdk:4.0.2-arm64 as base image but
env.sh couldn't find emsdk there, installing a second copy. The build
then applied wasm-opt/finalize stubs to the wrong emsdk (hardcoded
/emsdk/), so the real wasm-emscripten-finalize ran in Docker and got
OOM-killed.

- Use ubuntu:22.04 base with emsdk installed from source at /emsdk/
- Make stub paths dynamic via $EMSDK instead of hardcoded /emsdk/
- Skip local emsdk install in env.sh when $EMSDK is already active

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Viktor Vaczi 2026-03-19 12:44:26 +01:00
commit d557b21eac
3 changed files with 39 additions and 16 deletions

View file

@ -1,5 +1,7 @@
# Use ARM64-native image for Apple Silicon (M1/M2/M3/M4)
FROM emscripten/emsdk:4.0.2-arm64
# Plain Ubuntu base — multi-arch (ARM64/x86_64 auto-detected)
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
# Install build tools required for KiCad WASM build
RUN apt-get update && apt-get install -y \
@ -19,8 +21,17 @@ RUN apt-get update && apt-get install -y \
unixodbc-dev \
ccache \
rsync \
xz-utils \
&& rm -rf /var/lib/apt/lists/*
# Install emsdk from source (same approach as scripts/setup-emsdk.sh)
# EMSCRIPTEN_VERSION must match scripts/common/versions.sh
ARG EMSCRIPTEN_VERSION=4.0.2
RUN git clone https://github.com/emscripten-core/emsdk.git /emsdk \
&& cd /emsdk \
&& ./emsdk install ${EMSCRIPTEN_VERSION} \
&& ./emsdk activate ${EMSCRIPTEN_VERSION}
# Configure ccache for Emscripten
# CCACHE_DIR in named volume persists across containers
ENV CCACHE_DIR=/workspace/build-wasm/.ccache