Web Embeddable Common Lisp

make.sh at tip
Login

File make.sh from the latest check-in


#!/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