2025-04-18 21:29:45 +01:00

60 lines
1.6 KiB
Bash
Executable File

# compile.sh main.cpp out.js ModuleName
export SCRIPT_DIR=`dirname "$0"`
if [ ! -z "$EMSDK" ]
then
export EMSDK_DIR="$EMSDK"
fi
if [ -z "$EMSDK_DIR" ]
then
export EMSDK_DIR="${SCRIPT_DIR}/emsdk"
fi
if ! test -d "${EMSDK_DIR}"
then
echo "SDK not found - cloning from Github"
git clone https://github.com/emscripten-core/emsdk.git "${EMSDK_DIR}"
pushd "${EMSDK_DIR}" && git pull && ./emsdk install latest && ./emsdk activate latest
popd
fi
EMSDK_QUIET=1 . "${EMSDK_DIR}/emsdk_env.sh" \
&& emcc --check \
&& python3 --version \
&& cmake --version
if [ "$#" -le 1 ]; then
echo "Missing .cpp / .js arguments"
exit 1
fi
INPUT_CPP="$1"
OUTPUT_JS="$2"
mkdir -p $(dirname $OUTPUT_JS)
MODULE_NAME="$3"
if [ -z "$MODULE_NAME" ]
then
MODULE_NAME=$(basename "$OUTPUT_JS" ".${OUTPUT_JS##*.}")
fi
echo "$MODULE_NAME: $INPUT_CPP -> $OUTPUT_JS"
# -sSTRICT -sASSERTIONS --closure=0 \
em++ \
$INPUT_CPP -o "${OUTPUT_JS}" \
-sEXPORT_NAME=$MODULE_NAME -DEXPORT_NAME=$MODULE_NAME \
-I "${SCRIPT_DIR}" \
-std=c++11 -O3 -ffast-math -fno-exceptions -fno-rtti \
--pre-js "${SCRIPT_DIR}/pre.js" --closure 0 \
-Wall -Wextra -Wfatal-errors -Wpedantic -pedantic-errors \
-sSINGLE_FILE=1 -sMODULARIZE -sENVIRONMENT=web,worker,shell -sNO_EXIT_RUNTIME=1 \
-sFILESYSTEM=0 -sEXPORTED_RUNTIME_METHODS=HEAP8,UTF8ToString \
-sINITIAL_MEMORY=512kb -sALLOW_MEMORY_GROWTH=1 -sMEMORY_GROWTH_GEOMETRIC_STEP=0.5 -sABORTING_MALLOC=1 \
-sSTRICT=1 -sDYNAMIC_EXECUTION=0
# Remove UMD definition
node -e "let f=process.argv[1],fs=require('fs');fs.writeFileSync(f,fs.readFileSync(f,'utf8').split(\"if (typeof exports === 'object' && typeof module === 'object') {\")[0])" "${OUTPUT_JS}"