|
#!/usr/bin/env bash |
|
set -eo pipefail 2>/dev/null || set -eo |
|
|
|
|
|
|
|
which cargo wasm-bindgen wasm-opt wasm-snip &> /dev/null || { |
|
echo "Please install cargo, wasm-bindgen, wasm-opt from https://github.com/WebAssembly/binaryen, and wasm-snip from https://github.com/r58playz/wasm-snip!" |
|
exit 1 |
|
} |
|
|
|
WBG="wasm-bindgen 0.2.100" |
|
if ! [[ "$(wasm-bindgen -V)" =~ ^"$WBG" ]]; then |
|
echo "Incorrect wasm-bindgen-cli version: '$(wasm-bindgen -V)' != '$WBG'" |
|
exit 1 |
|
fi |
|
|
|
if true; then |
|
WASMOPTFLAGS="${WASMOPTFLAGS:-} -g" |
|
FEATURES="debug,${FEATURES:-}" |
|
else |
|
: "${WASMOPTFLAGS:=}" |
|
: "${FEATURES:=}" |
|
fi |
|
|
|
( |
|
export RUSTFLAGS='-Zlocation-detail=none -Zfmt-debug=none' |
|
if [ "${OPTIMIZE_FOR_SIZE:-0}" = "1" ]; then |
|
export RUSTFLAGS="${RUSTFLAGS} -C opt-level=z" |
|
fi |
|
STD_FEATURES="panic_immediate_abort" |
|
if [ "${OPTIMIZE_FOR_SPEED:-0}" = "0" ]; then |
|
STD_FEATURES="${STD_FEATURES},optimize_for_size" |
|
fi |
|
cargo build --release --target wasm32-unknown-unknown \ |
|
-Z build-std=panic_abort,std -Z build-std-features=${STD_FEATURES} \ |
|
--no-default-features --features "$FEATURES" |
|
) |
|
wasm-bindgen --target web --out-dir out/ ../target/wasm32-unknown-unknown/release/wasm.wasm |
|
|
|
if [[ "$OSTYPE" == "darwin"* ]] || [[ "$OSTYPE" == "freebsd"* ]] || [[ "$OSTYPE" == "dragonfly"* ]]; then |
|
sed -i '' 's/import.meta.url/""/g' out/wasm.js |
|
else |
|
sed -i 's/import.meta.url/""/g' out/wasm.js |
|
fi |
|
|
|
cd ../../ |
|
|
|
wasm-snip rewriter/wasm/out/wasm_bg.wasm -o rewriter/wasm/out/wasm_snipped.wasm \ |
|
-p 'oxc_regular_expression::.*' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_non_array_type' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_ts_import_type' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_type_operator_or_higher' \ |
|
'oxc_parser::ts::statement::<impl oxc_parser::ParserImpl>::parse_ts_interface_declaration' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_mapped_type' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_index_signature_declaration' \ |
|
'oxc_parser::ts::statement::<impl oxc_parser::ParserImpl>::parse_ts_import_equals_declaration' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_type_or_type_predicate' \ |
|
'oxc_parser::ts::statement::<impl oxc_parser::ParserImpl>::parse_ts_namespace_or_module_declaration_body' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_ts_implements_clause' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_intersection_type_or_higher' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_ts_type_name' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_literal_type_node' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_asserts_type_predicate' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_tuple_element_type' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_type_arguments_of_type_reference' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_ts_call_signature_member' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::is_start_of_type' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_this_type_predicate' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_type_query' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_type_reference' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_type_operator' \ |
|
'oxc_parser::ts::types::<impl oxc_parser::ParserImpl>::parse_type_literal' \ |
|
'oxc_parser::ts::statement::<impl oxc_parser::ParserImpl>::is_at_enum_declaration' \ |
|
'oxc_parser::jsx::<impl oxc_parser::ParserImpl>::parse_jsx_element' \ |
|
'oxc_parser::jsx::<impl oxc_parser::ParserImpl>::parse_jsx_identifier' \ |
|
'oxc_parser::jsx::<impl oxc_parser::ParserImpl>::parse_jsx_element_name' \ |
|
'oxc_parser::jsx::<impl oxc_parser::ParserImpl>::parse_jsx_children' \ |
|
'oxc_parser::jsx::<impl oxc_parser::ParserImpl>::parse_jsx_fragment' \ |
|
'oxc_parser::jsx::<impl oxc_parser::ParserImpl>::parse_jsx_expression_container' \ |
|
'oxc_parser::jsx::<impl oxc_parser::ParserImpl>::parse_jsx_expression' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [ "${RELEASE:-0}" = "1" ]; then |
|
( |
|
G="--generate-global-effects" |
|
|
|
time wasm-opt $WASMOPTFLAGS \ |
|
rewriter/wasm/out/wasm_snipped.wasm -o rewriter/wasm/out/optimized.wasm \ |
|
--converge -tnh --vacuum \ |
|
$G -O4 $G --flatten $G --rereloop $G -O4 $G -O4 $G -O4 \ |
|
$G -Oz $G --flatten $G --rereloop $G -Oz $G -Oz $G -Oz \ |
|
$G --code-folding $G --const-hoisting $G --dae $G --flatten $G --merge-locals \ |
|
$G -O4 $G --flatten $G --rereloop $G -O4 $G -O4 $G -O4 \ |
|
$G -Oz $G --flatten $G --rereloop $G -Oz $G -Oz $G -Oz |
|
) |
|
else |
|
cp rewriter/wasm/out/wasm_snipped.wasm rewriter/wasm/out/optimized.wasm |
|
fi |
|
|
|
mkdir -p dist/ |
|
|
|
cp rewriter/wasm/out/optimized.wasm dist/scramjet.wasm.wasm |
|
echo "Rewriter Build Complete!" |