Files
2026-07-19 18:05:04 +02:00

43 lines
1.4 KiB
Bash
Executable File

set -euo pipefail
EMSDK_VERSION="${WEBMETAL_EMSDK_VERSION:-5.0.7}"
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
EMSDK_DIR="$REPO_ROOT/.emsdk"
if [[ "${1:-}" == "--install" ]]; then
if [[ ! -d "$EMSDK_DIR" ]]; then
git clone --depth 1 https://github.com/emscripten-core/emsdk.git "$EMSDK_DIR"
fi
"$EMSDK_DIR/emsdk" install "$EMSDK_VERSION"
"$EMSDK_DIR/emsdk" activate "$EMSDK_VERSION"
fi
if ! command -v emcmake >/dev/null 2>&1; then
if [[ -f "$EMSDK_DIR/emsdk_env.sh" ]]; then
# shellcheck disable=SC1091
source "$EMSDK_DIR/emsdk_env.sh" >/dev/null 2>&1
fi
fi
if ! command -v emcmake >/dev/null 2>&1; then
echo "error: Emscripten (emcmake) not found." >&2
echo "Run: scripts/build-wasm.sh --install (installs emsdk $EMSDK_VERSION into .emsdk/)" >&2
echo "or activate your own emsdk first: source <emsdk>/emsdk_env.sh" >&2
exit 1
fi
BUILD_DIR="$REPO_ROOT/wasm/build-wasm"
OUT_DIR="$REPO_ROOT/frontend/public/wasm"
echo "== configuring (emscripten: $(command -v emcc))"
emcmake cmake -S "$REPO_ROOT/wasm" -B "$BUILD_DIR" -DCMAKE_BUILD_TYPE=Release >/dev/null
echo "== building"
cmake --build "$BUILD_DIR" --parallel
echo "== installing into frontend/public/wasm/"
mkdir -p "$OUT_DIR"
cp "$BUILD_DIR/webmetal-engine.mjs" "$BUILD_DIR/webmetal-engine.wasm" "$OUT_DIR/"
ls -la "$OUT_DIR"
echo "done - the app will pick the engine up on next load."