#!/bin/sh
# Rebuilds ../js/sjeng/sjeng.js and sjeng.wasm from this folder.
# Needs Docker; uses the pinned Emscripten image so builds are reproducible.
# Sources are copied to a temporary folder first, because Docker Desktop on
# macOS may not be allowed to read ~/Documents.
#
#   cd marco-chess/sjeng && ./build.sh
set -e
cd "$(dirname "$0")"
IMAGE=emscripten/emsdk:6.0.12
WORK=$(mktemp -d /tmp/sjeng-build.XXXXXX)
trap 'rm -rf "$WORK"' EXIT
cp -R src books wasm "$WORK/"

docker run --rm -v "$WORK:/build" -w /build "$IMAGE" sh -c '
  set -e
  mkdir -p out
  emcc -O3 -std=gnu89 -fcommon -Iwasm \
    -Wno-implicit-function-declaration -Wno-implicit-int -Wno-int-conversion \
    -Wno-incompatible-pointer-types -Wno-return-type -Wno-deprecated-non-prototype \
    -Wno-empty-body -Wno-null-dereference \
    src/attacks.c src/crazy.c src/epd.c src/learn.c src/partner.c src/seval.c \
    src/ttable.c src/book.c src/ecache.c src/eval.c src/moves.c src/search.c \
    src/sjeng.c src/utils.c src/newbook.c src/proof.c src/neval.c src/rcfile.c \
    src/leval.c src/draw.c src/see.c src/segtb.c \
    wasm/ndbm_stub.c wasm/browser_io.c -lm \
    -sENVIRONMENT=web,worker,node -sMODULARIZE=1 -sEXPORT_ES6=1 -sEXPORT_NAME=createSjeng \
    -sASYNCIFY=1 -sASYNCIFY_IGNORE_INDIRECT=1 \
    -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE=\$stringToUTF8,\$lengthBytesUTF8 \
    -sSTACK_SIZE=8MB -sINITIAL_MEMORY=64MB -sALLOW_MEMORY_GROWTH=1 \
    --embed-file src/sjeng.rc@/sjeng.rc --embed-file books@/ \
    -o out/sjeng.js
'
mkdir -p ../js/sjeng
cp "$WORK/out/sjeng.js" "$WORK/out/sjeng.wasm" ../js/sjeng/
ls -l ../js/sjeng
