#!/bin/bash
source ~/Workshop/emsdk/emsdk_env.sh > /dev/null 2>/dev/null
emsdk activate 3.1.41 >/dev/null 2>/dev/null
function clean () {
echo "Cleaning..."
rm -rf Build
rm -f Code/{libecl*.a,wecl.js,wecl.wasm}
rm -f Code/wasm-ecl/wecl.*
rm -f Code/wasm-ecl/slime
}
function build () {
echo "Building..."
cp -r packages.lisp wecl.lisp wecl.c slime wasm-ecl/
rm -rf wasm-ecl/slime/.git/
pushd wasm-ecl
emcc -O3 \
-sASSERTIONS=1 \
-sASYNCIFY -sASYNCIFY_STACK_SIZE=1048576 \
-sASYNCIFY_IMPORTS=[cl_eval,js_wait,js_read] \
-sSTACK_SIZE=1048576 \
-sINITIAL_MEMORY=67108864 \
-sERROR_ON_UNDEFINED_SYMBOLS=0 \
-sEXPORTED_RUNTIME_METHODS=ccall,cwrap,stringToNewUTF8,UTF8ToString,HEAPU8 \
-sEXPORTED_FUNCTIONS=_wecl_boot,_wecl_eval,_wecl_call,_wecl_test \
--embed-file "help.doc" \
--embed-file "packages.lisp" \
--embed-file "wecl.lisp" \
--embed-file "slime" \
libecl{,gc,gmp}.a wecl.c -I./ -o wecl.js
popd
cp wasm-ecl/wecl.js wasm-ecl/wecl.wasm .
}
function serve () {
echo "Serving..."
pushd App
ecl --load "../webserver.lisp"
popd
}
if [ "${1}" == "clean" ]; then
clean
elif [ "${1}" == "serve" ]; then
serve
elif [ "${1}" == "build" ]; then
clean
cp -r Code Build
pushd Build
build
popd
rm -f App/wecl.{js,wasm}
cp Build/wecl.{js,wasm} App/
else
echo "Command '${1}' not found."
fi