Changeset View
Changeset View
Standalone View
Standalone View
query_language/build-wasm.sh
- This file was added.
Property | Old Value | New Value |
---|---|---|
File Mode | null | 100755 |
#!/bin/sh | |||||
set -e | |||||
if [ ! -d "tree-sitter" ]; then | |||||
git clone https://github.com/tree-sitter/tree-sitter | |||||
fi | |||||
web_dir=tree-sitter/lib/binding_web | |||||
lib_src=tree-sitter/lib/src | |||||
emscripten_flags="-O3" | |||||
minify_js=1 | |||||
force_docker=0 | |||||
emscripen_version=2.0.24 | |||||
while [[ $# > 0 ]]; do | |||||
case "$1" in | |||||
--debug) | |||||
minify_js=0 | |||||
emscripten_flags="-s ASSERTIONS=1 -s SAFE_HEAP=1 -O0" | |||||
;; | |||||
--help) | |||||
usage | |||||
exit 0 | |||||
;; | |||||
--docker) | |||||
force_docker=1 | |||||
;; | |||||
*) | |||||
usage | |||||
echo "Unrecognized argument '$1'" | |||||
exit 1 | |||||
;; | |||||
esac | |||||
shift | |||||
done | |||||
emcc= | |||||
if which emcc > /dev/null && [[ "$force_docker" == "0" ]]; then | |||||
echo 'Using emcc sdk directly' | |||||
emcc=emcc | |||||
elif which docker > /dev/null; then | |||||
echo 'Using docker' | |||||
emcc="docker run \ | |||||
--rm \ | |||||
-v $(pwd):/src:Z \ | |||||
-u $(id -u) \ | |||||
emscripten/emsdk:$emscripen_version \ | |||||
emcc" | |||||
else | |||||
echo 'You must have either `docker` or `emcc` on your PATH to run this script' | |||||
exit 1 | |||||
fi | |||||
mkdir -p target/scratch | |||||
echo 'Copying files to target directory' | |||||
cp -r grammar.js src/ tree-sitter/lib/ | |||||
echo 'Executing emcc command' | |||||
# Use emscripten to generate `tree-sitter.js` and `tree-sitter.wasm` | |||||
# in the `target/scratch` directory | |||||
$emcc \ | |||||
-s WASM=1 \ | |||||
-s TOTAL_MEMORY=33554432 \ | |||||
-s ALLOW_MEMORY_GROWTH=1 \ | |||||
-s MAIN_MODULE=2 \ | |||||
-s NO_FILESYSTEM=1 \ | |||||
-s NODEJS_CATCH_EXIT=0 \ | |||||
-s NODEJS_CATCH_REJECTION=0 \ | |||||
-s EXPORTED_FUNCTIONS=@${web_dir}/exports.json \ | |||||
$emscripten_flags \ | |||||
-std=c99 \ | |||||
-D 'fprintf(...)=' \ | |||||
-D NDEBUG= \ | |||||
-I lib/src \ | |||||
-I lib/src/unicode \ | |||||
-I lib/include \ | |||||
-I lib/include/tree_sitter \ | |||||
--js-library ${web_dir}/imports.js \ | |||||
--pre-js ${web_dir}/prefix.js \ | |||||
--post-js ${web_dir}/binding.js \ | |||||
--post-js ${web_dir}/suffix.js \ | |||||
${lib_src}/lib.c \ | |||||
${web_dir}/binding.c \ | |||||
-o target/scratch/tree-sitter.js | |||||
# # Use terser to write a minified version of `tree-sitter.js` into | |||||
# # the `lib/binding_web` directory. | |||||
# if [[ "$minify_js" == "1" ]]; then | |||||
# if [ ! -d ${web_dir}/node_modules/terser ]; then | |||||
# ( | |||||
# cd ${web_dir} | |||||
# npm install | |||||
# ) | |||||
# fi | |||||
# ${web_dir}/node_modules/.bin/terser \ | |||||
# --compress \ | |||||
# --mangle \ | |||||
# --keep-classnames \ | |||||
# -- target/scratch/tree-sitter.js \ | |||||
# > $web_dir/tree-sitter.js | |||||
# else | |||||
# cp target/scratch/tree-sitter.js $web_dir/tree-sitter.js | |||||
# fi | |||||
mv target/scratch/tree-sitter.wasm $web_dir/tree-sitter.wasm |