mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
38 lines
1.7 KiB
Bash
Executable File
38 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
script_dir="$(realpath "$(dirname "$0")")"
|
|
soljson_js="$1"
|
|
soljson_wasm="$2"
|
|
soljson_wasm_size=$(wc -c "${soljson_wasm}" | cut -d ' ' -f 1)
|
|
output="$3"
|
|
|
|
(( $# == 3 )) || { >&2 echo "Usage: $0 soljson.js soljson.wasm packed_soljson.js"; exit 1; }
|
|
|
|
# If this changes in an emscripten update, it's probably nothing to worry about,
|
|
# but we should double-check when it happens and adjust the tail command below.
|
|
[[ $(head -c 5 "${soljson_js}") == "null;" ]] || { >&2 echo 'Expected soljson.js to start with "null;"'; exit 1; }
|
|
|
|
echo "Packing $soljson_js and $soljson_wasm to $output."
|
|
(
|
|
echo -n 'var Module = Module || {}; Module["wasmBinary"] = '
|
|
echo -n '(function(source, uncompressedSize) {'
|
|
# Note that base64DecToArr assumes no trailing equals signs.
|
|
cpp "${script_dir}/base64DecToArr.js" | grep -v "^#.*"
|
|
# Note that mini-lz4.js assumes no file header and no frame crc checksums.
|
|
cpp "${script_dir}/mini-lz4.js" | grep -v "^#.*"
|
|
echo 'return uncompress(base64DecToArr(source), uncompressedSize);})('
|
|
echo -n '"'
|
|
# We fix lz4 format settings, remove the 8 bytes file header and remove the trailing equals signs of the base64 encoding.
|
|
lz4c --no-frame-crc --best --favor-decSpeed "${soljson_wasm}" - | tail -c +8 | base64 -w 0 | sed 's/[^A-Za-z0-9\+\/]//g'
|
|
echo '",'
|
|
echo -n "${soljson_wasm_size});"
|
|
# Remove "null;" from the js wrapper.
|
|
tail -c +6 "${soljson_js}"
|
|
) > "$output"
|
|
|
|
echo "Testing $output."
|
|
echo "process.stdout.write(require('$(realpath "${output}")').wasmBinary)" | node | cmp "${soljson_wasm}" && echo "Binaries match."
|
|
# Allow the wasm binary to be garbage collected after compilation.
|
|
echo 'Module["wasmBinary"] = undefined;' >> "${output}"
|