The wxWidgets autoconf build inside Docker failed with `emmake: command not
found` on a clean build, while the KiCad CMake build survived (CMake caches the
absolute compiler path). Two compounding causes:
1. `docker compose exec` bypasses the ENTRYPOINT, so it never sourced
emsdk_env.sh and EMSDK was unset. env.sh then fell back to the local
tools/emsdk.
2. The entrypoint's rsync from the host bind mount excluded only build-wasm and
output, so the host's macOS-arm64 tools/emsdk got copied over the container's
Linux emsdk. The macOS Mach-O python can't exec on Linux, so
`emsdk construct_env` failed ("Exec format error") and emcc/emmake never
landed on PATH.
Fixes:
- Set `ENV EMSDK=/emsdk` in the image so every process (including
`docker compose exec`) resolves env.sh's EMSDK branch to the container's own
emsdk and never falls back to tools/emsdk.
- Exclude `tools/emsdk` from the entrypoint rsync so the host emsdk can no
longer leak into the container.
Validated with a clean wxWidgets build (`build-wxuniversal-wasm.sh --clean`):
reconfigures and compiles all 42 wx libs against /emsdk with no missing-tool
errors.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
25 lines
786 B
Shell
Executable file
25 lines
786 B
Shell
Executable file
#!/bin/bash
|
|
set -e
|
|
|
|
# Source Emscripten environment
|
|
source /emsdk/emsdk_env.sh 2>/dev/null
|
|
|
|
# Sync source from host to workspace volume
|
|
# This fixes macOS Docker timestamp issues with bind mounts
|
|
# (autoconf sanity checks fail when timestamps appear inconsistent)
|
|
# Touch transferred files to set container timestamps for correct make detection
|
|
if [[ -d /workspace-host ]]; then
|
|
echo "Syncing source code to container volume..."
|
|
rsync -ai --delete \
|
|
--exclude='build-wasm' \
|
|
--exclude='output' \
|
|
--exclude='tools/emsdk' \
|
|
/workspace-host/ /workspace/ | \
|
|
grep "^>f" | \
|
|
sed "s/^[^ ]* //" | \
|
|
while read f; do touch "/workspace/$f" 2>/dev/null; done
|
|
echo "Sync complete."
|
|
fi
|
|
|
|
# Execute command or start shell
|
|
exec "$@"
|