pcbjam/scripts/deps/ngspice-wasm/smoke/run-smoke.sh
2026-07-19 15:59:21 +02:00

40 lines
1.5 KiB
Shell
Executable file

#!/bin/bash
# Gate-1 smoke for the wasm ngspice build: compiles smoke.c against the
# installed sysroot artifacts and runs it under node. Proves, in one shot:
# static sharedspice links; RC transient numerics; XSPICE code models resolve
# through the static registry; CIDER (numd) simulates; bg_run/bg_halt work on
# a real pthread. See smoke.c for the assertions.
#
# Usage: scripts/deps/ngspice-wasm/smoke/run-smoke.sh
# (build ngspice first: scripts/deps/build-ngspice.sh)
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
QUIET=1 source "${SCRIPT_DIR}/../../../common/env.sh"
SMOKE_BUILD="${BUILD_ROOT}/ngspice-smoke"
mkdir -p "${SMOKE_BUILD}"
# NODERAWFS: the wasm module sees the real filesystem, so the NGSPICEDATADIR
# baked into libngspice (the sysroot prefix) resolves and spinit + code-model
# registration run exactly as they will in the service worker.
# PROXY_TO_PTHREAD: main() may block (usleep) while ngspice's bg thread runs.
emcc "${SCRIPT_DIR}/smoke.c" -o "${SMOKE_BUILD}/smoke.js" \
-I"${SYSROOT}/include" \
-O1 -g -pthread ${DEPS_EH_FLAGS} \
"${SYSROOT}/lib/libngspice.a" \
"${SYSROOT}"/lib/ngspice/*.cm \
"${SYSROOT}/lib/ngspice/ngcm_common.a" \
-sENVIRONMENT=node \
-sNODERAWFS=1 \
-sALLOW_MEMORY_GROWTH=1 \
-sINITIAL_MEMORY=256MB \
-sPROXY_TO_PTHREAD \
-sPTHREAD_POOL_SIZE=8 \
-sEXIT_RUNTIME=1 \
-sSTACK_SIZE=4MB \
-sDEFAULT_PTHREAD_STACK_SIZE=2MB
# Optional argument: run a single scenario (rc|xspice|cider|halt).
node "${SMOKE_BUILD}/smoke.js" "$@"