#!/bin/sh # Builds Scan 3.1 + dam_scan.cpp into scan/scan.js + scan/scan.wasm (WebAssembly, no threads). # Usage: tools/scan/build.sh # Needs Emscripten (emcc) on the PATH. Run by .github/workflows/scan.yml. set -eu SCAN="$1" OUT="$2" HERE="$(cd "$(dirname "$0")" && pwd)" mkdir -p "$OUT" SRCS="" for f in "$SCAN"/src/*.cpp; do case "$(basename "$f")" in main.cpp|dxp.cpp|socket.cpp) ;; # terminal, DXP and network front ends are not used *) SRCS="$SRCS $f" ;; esac done emcc -O3 -std=c++14 -fno-rtti -fwasm-exceptions -DNDEBUG \ -I"$SCAN/src" $SRCS "$HERE/dam_scan.cpp" \ -o "$OUT/scan.js" \ -sMODULARIZE=1 -sEXPORT_NAME=ScanModule \ -sENVIRONMENT=web,worker,node \ -sALLOW_MEMORY_GROWTH=1 -sINITIAL_MEMORY=64MB -sSTACK_SIZE=8MB \ -sFORCE_FILESYSTEM=1 \ -sEXPORTED_FUNCTIONS=_scan_init,_scan_go,_scan_new_game \ -sEXPORTED_RUNTIME_METHODS=cwrap,FS cp "$SCAN/data/eval" "$OUT/eval" cp "$SCAN/data/book" "$OUT/book" cp "$SCAN/license.txt" "$OUT/COPYING.txt" ls -l "$OUT" # compressed copies: the server sends these to browsers that accept gzip (eval 8.5 MB → 6.2 MB) for f in scan.js scan.wasm eval book; do gzip -9 -n -k -f "$OUT/$f"; done