blob: 63f881ea86e3067931fb506b026c5ebba3ceb921 [file] [log] [blame]
#
# This file builds the js components using emscripten. You normally don't need
# to run this, as the builds are bundled in the repo in bin/. Running this is
# useful if you are a developer and want to update those builds.
#
# Usage: build-js.sh
# Usage: EMSCRIPTEN=path/to/emscripten build-js.sh # explicit emscripten dir
#
# Emscripten's em++ and tools/webidl_binder.py will be accessed through the
# env var EMSCRIPTEN, e.g. ${EMSCRIPTEN}/em++
#
# You can get emscripten from
# http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html
#
set -e
if [ "$1" == "-h" ] || [ "$1" == "--help" ] || [ "$1" == "-help" ]; then
echo "usage: $0 [-g]" >&2
echo " -g produce debug build" >&2
echo ""
echo "If EMSCRIPTEN is set in the envionment, emscripten will be loaded"
echo "from that directory. Otherwise the location of emscripten is resolved"
echo "through PATH."
exit 1
fi
if [ -z "$EMSCRIPTEN" ]; then
if (which emcc >/dev/null); then
# Found emcc in PATH -- set EMSCRIPTEN (we need this to access webidl_binder.py)
EMSCRIPTEN=$(dirname "$(which emcc)")
else
echo "$0: EMSCRIPTEN environment variable is not set and emcc was not found in PATH" >&2
exit 1
fi
elif [ ! -d "$EMSCRIPTEN" ]; then
echo "$0: \"$EMSCRIPTEN\" (\$EMSCRIPTEN) is not a directory" >&2
exit 1
fi
EMCC_ARGS="-std=c++11 --memory-init-file 0"
EMCC_ARGS="$EMCC_ARGS -s ALLOW_MEMORY_GROWTH=1"
EMCC_ARGS="$EMCC_ARGS -s DEMANGLE_SUPPORT=1"
EMCC_ARGS="$EMCC_ARGS -s NO_FILESYSTEM=1"
EMCC_ARGS="$EMCC_ARGS -s WASM=0"
EMCC_ARGS="$EMCC_ARGS -s ERROR_ON_UNDEFINED_SYMBOLS=1"
EMCC_ARGS="$EMCC_ARGS -s BINARYEN_ASYNC_COMPILATION=0"
# TODO: enable this (need nearbyint in emscripten tag) EMCC_ARGS="$EMCC_ARGS -s ERROR_ON_UNDEFINED_SYMBOLS=1"
EMCC_ARGS="$EMCC_ARGS -s DISABLE_EXCEPTION_CATCHING=0" # Exceptions are thrown and caught when optimizing endless loops
OUT_FILE_SUFFIX=
if [ "$1" == "-g" ]; then
EMCC_ARGS="$EMCC_ARGS -O2" # need emcc js opts to be decently fast
EMCC_ARGS="$EMCC_ARGS --llvm-opts 0 --llvm-lto 0"
EMCC_ARGS="$EMCC_ARGS -profiling"
EMCC_ARGS="$EMCC_ARGS -s ASSERTIONS=1"
else
EMCC_ARGS="$EMCC_ARGS -Oz"
EMCC_ARGS="$EMCC_ARGS --llvm-lto 1"
EMCC_ARGS="$EMCC_ARGS -s ELIMINATE_DUPLICATE_FUNCTIONS=1"
EMCC_ARGS="$EMCC_ARGS --closure 1"
# Why these settings?
# See https://gist.github.com/rsms/e33c61a25a31c08260161a087be03169
fi
# input sources relative to this script
BINARYEN_SRC="$(dirname $0)/src"
# input sources relative to this script
BINARYEN_SCRIPTS="$(dirname $0)/scripts"
# output binaries relative to current working directory
BINARYEN_BIN="$PWD/bin"
echo "generate embedded intrinsics module"
python $BINARYEN_SCRIPTS/embedwast.py $BINARYEN_SRC/passes/wasm-intrinsics.wast $BINARYEN_SRC/passes/WasmIntrinsics.cpp
echo "building shared bitcode"
"$EMSCRIPTEN/em++" \
$EMCC_ARGS \
$BINARYEN_SRC/asmjs/asm_v_wasm.cpp \
$BINARYEN_SRC/asmjs/asmangle.cpp \
$BINARYEN_SRC/asmjs/shared-constants.cpp \
$BINARYEN_SRC/cfg/Relooper.cpp \
$BINARYEN_SRC/emscripten-optimizer/optimizer-shared.cpp \
$BINARYEN_SRC/emscripten-optimizer/parser.cpp \
$BINARYEN_SRC/emscripten-optimizer/simple_ast.cpp \
$BINARYEN_SRC/ir/ExpressionAnalyzer.cpp \
$BINARYEN_SRC/ir/ExpressionManipulator.cpp \
$BINARYEN_SRC/ir/LocalGraph.cpp \
$BINARYEN_SRC/ir/ReFinalize.cpp \
$BINARYEN_SRC/passes/pass.cpp \
$BINARYEN_SRC/passes/CoalesceLocals.cpp \
$BINARYEN_SRC/passes/DeadArgumentElimination.cpp \
$BINARYEN_SRC/passes/CodeFolding.cpp \
$BINARYEN_SRC/passes/CodePushing.cpp \
$BINARYEN_SRC/passes/ConstHoisting.cpp \
$BINARYEN_SRC/passes/DataFlowOpts.cpp \
$BINARYEN_SRC/passes/DeadCodeElimination.cpp \
$BINARYEN_SRC/passes/DuplicateFunctionElimination.cpp \
$BINARYEN_SRC/passes/ExtractFunction.cpp \
$BINARYEN_SRC/passes/Flatten.cpp \
$BINARYEN_SRC/passes/FuncCastEmulation.cpp \
$BINARYEN_SRC/passes/I64ToI32Lowering.cpp \
$BINARYEN_SRC/passes/Inlining.cpp \
$BINARYEN_SRC/passes/InstrumentLocals.cpp \
$BINARYEN_SRC/passes/InstrumentMemory.cpp \
$BINARYEN_SRC/passes/LegalizeJSInterface.cpp \
$BINARYEN_SRC/passes/LocalCSE.cpp \
$BINARYEN_SRC/passes/LogExecution.cpp \
$BINARYEN_SRC/passes/LoopInvariantCodeMotion.cpp \
$BINARYEN_SRC/passes/MemoryPacking.cpp \
$BINARYEN_SRC/passes/MergeBlocks.cpp \
$BINARYEN_SRC/passes/MergeLocals.cpp \
$BINARYEN_SRC/passes/Metrics.cpp \
$BINARYEN_SRC/passes/MinifyImportsAndExports.cpp \
$BINARYEN_SRC/passes/NameList.cpp \
$BINARYEN_SRC/passes/NoExitRuntime.cpp \
$BINARYEN_SRC/passes/OptimizeInstructions.cpp \
$BINARYEN_SRC/passes/PickLoadSigns.cpp \
$BINARYEN_SRC/passes/PostEmscripten.cpp \
$BINARYEN_SRC/passes/Precompute.cpp \
$BINARYEN_SRC/passes/Print.cpp \
$BINARYEN_SRC/passes/PrintCallGraph.cpp \
$BINARYEN_SRC/passes/RedundantSetElimination.cpp \
$BINARYEN_SRC/passes/RelooperJumpThreading.cpp \
$BINARYEN_SRC/passes/RemoveNonJSOps.cpp \
$BINARYEN_SRC/passes/RemoveImports.cpp \
$BINARYEN_SRC/passes/RemoveMemory.cpp \
$BINARYEN_SRC/passes/RemoveUnusedBrs.cpp \
$BINARYEN_SRC/passes/RemoveUnusedModuleElements.cpp \
$BINARYEN_SRC/passes/RemoveUnusedNames.cpp \
$BINARYEN_SRC/passes/ReorderFunctions.cpp \
$BINARYEN_SRC/passes/ReorderLocals.cpp \
$BINARYEN_SRC/passes/ReReloop.cpp \
$BINARYEN_SRC/passes/SafeHeap.cpp \
$BINARYEN_SRC/passes/SimplifyLocals.cpp \
$BINARYEN_SRC/passes/Souperify.cpp \
$BINARYEN_SRC/passes/SpillPointers.cpp \
$BINARYEN_SRC/passes/SSAify.cpp \
$BINARYEN_SRC/passes/StackIR.cpp \
$BINARYEN_SRC/passes/Strip.cpp \
$BINARYEN_SRC/passes/TrapMode.cpp \
$BINARYEN_SRC/passes/Untee.cpp \
$BINARYEN_SRC/passes/Vacuum.cpp \
$BINARYEN_SRC/passes/WasmIntrinsics.cpp \
$BINARYEN_SRC/support/bits.cpp \
$BINARYEN_SRC/support/colors.cpp \
$BINARYEN_SRC/support/file.cpp \
$BINARYEN_SRC/support/safe_integer.cpp \
$BINARYEN_SRC/support/threads.cpp \
$BINARYEN_SRC/wasm/literal.cpp \
$BINARYEN_SRC/wasm/wasm-binary.cpp \
$BINARYEN_SRC/wasm/wasm-emscripten.cpp \
$BINARYEN_SRC/wasm/wasm-interpreter.cpp \
$BINARYEN_SRC/wasm/wasm-io.cpp \
$BINARYEN_SRC/wasm/wasm-s-parser.cpp \
$BINARYEN_SRC/wasm/wasm-type.cpp \
$BINARYEN_SRC/wasm/wasm-validator.cpp \
$BINARYEN_SRC/wasm/wasm.cpp \
-I$BINARYEN_SRC \
-o shared.bc
echo "building binaryen.js"
function export_function { if [ -z ${EXPORTED_FUNCTIONS} ]; then EXPORTED_FUNCTIONS='"'$1'"'; else EXPORTED_FUNCTIONS=${EXPORTED_FUNCTIONS}',"'$1'"'; fi }
# Types
export_function "_BinaryenTypeNone"
export_function "_BinaryenTypeInt32"
export_function "_BinaryenTypeInt64"
export_function "_BinaryenTypeFloat32"
export_function "_BinaryenTypeFloat64"
export_function "_BinaryenTypeVec128"
export_function "_BinaryenTypeUnreachable"
export_function "_BinaryenTypeAuto"
# Expression ids
export_function "_BinaryenInvalidId"
export_function "_BinaryenBlockId"
export_function "_BinaryenIfId"
export_function "_BinaryenLoopId"
export_function "_BinaryenBreakId"
export_function "_BinaryenSwitchId"
export_function "_BinaryenCallId"
export_function "_BinaryenCallIndirectId"
export_function "_BinaryenGetLocalId"
export_function "_BinaryenSetLocalId"
export_function "_BinaryenGetGlobalId"
export_function "_BinaryenSetGlobalId"
export_function "_BinaryenLoadId"
export_function "_BinaryenStoreId"
export_function "_BinaryenConstId"
export_function "_BinaryenUnaryId"
export_function "_BinaryenBinaryId"
export_function "_BinaryenSelectId"
export_function "_BinaryenDropId"
export_function "_BinaryenReturnId"
export_function "_BinaryenHostId"
export_function "_BinaryenNopId"
export_function "_BinaryenUnreachableId"
export_function "_BinaryenAtomicCmpxchgId"
export_function "_BinaryenAtomicRMWId"
export_function "_BinaryenAtomicWaitId"
export_function "_BinaryenAtomicWakeId"
export_function "_BinaryenSIMDExtractId"
export_function "_BinaryenSIMDReplaceId"
export_function "_BinaryenSIMDShuffleId"
export_function "_BinaryenSIMDBitselectId"
export_function "_BinaryenSIMDShiftId"
export_function "_BinaryenMemoryInitId"
export_function "_BinaryenDataDropId"
export_function "_BinaryenMemoryCopyId"
export_function "_BinaryenMemoryFillId"
# External kinds
export_function "_BinaryenExternalFunction"
export_function "_BinaryenExternalTable"
export_function "_BinaryenExternalMemory"
export_function "_BinaryenExternalGlobal"
# Literals
export_function "_BinaryenLiteralInt32"
export_function "_BinaryenLiteralInt64"
export_function "_BinaryenLiteralFloat32"
export_function "_BinaryenLiteralFloat64"
export_function "_BinaryenLiteralVec128"
export_function "_BinaryenLiteralFloat32Bits"
export_function "_BinaryenLiteralFloat64Bits"
# Operations
export_function "_BinaryenClzInt32"
export_function "_BinaryenCtzInt32"
export_function "_BinaryenPopcntInt32"
export_function "_BinaryenNegFloat32"
export_function "_BinaryenAbsFloat32"
export_function "_BinaryenCeilFloat32"
export_function "_BinaryenFloorFloat32"
export_function "_BinaryenTruncFloat32"
export_function "_BinaryenNearestFloat32"
export_function "_BinaryenSqrtFloat32"
export_function "_BinaryenEqZInt32"
export_function "_BinaryenClzInt64"
export_function "_BinaryenCtzInt64"
export_function "_BinaryenPopcntInt64"
export_function "_BinaryenNegFloat64"
export_function "_BinaryenAbsFloat64"
export_function "_BinaryenCeilFloat64"
export_function "_BinaryenFloorFloat64"
export_function "_BinaryenTruncFloat64"
export_function "_BinaryenNearestFloat64"
export_function "_BinaryenSqrtFloat64"
export_function "_BinaryenEqZInt64"
export_function "_BinaryenExtendSInt32"
export_function "_BinaryenExtendUInt32"
export_function "_BinaryenWrapInt64"
export_function "_BinaryenTruncSFloat32ToInt32"
export_function "_BinaryenTruncSFloat32ToInt64"
export_function "_BinaryenTruncUFloat32ToInt32"
export_function "_BinaryenTruncUFloat32ToInt64"
export_function "_BinaryenTruncSFloat64ToInt32"
export_function "_BinaryenTruncSFloat64ToInt64"
export_function "_BinaryenTruncUFloat64ToInt32"
export_function "_BinaryenTruncUFloat64ToInt64"
export_function "_BinaryenTruncSatSFloat32ToInt32"
export_function "_BinaryenTruncSatSFloat32ToInt64"
export_function "_BinaryenTruncSatUFloat32ToInt32"
export_function "_BinaryenTruncSatUFloat32ToInt64"
export_function "_BinaryenTruncSatSFloat64ToInt32"
export_function "_BinaryenTruncSatSFloat64ToInt64"
export_function "_BinaryenTruncSatUFloat64ToInt32"
export_function "_BinaryenTruncSatUFloat64ToInt64"
export_function "_BinaryenReinterpretFloat32"
export_function "_BinaryenReinterpretFloat64"
export_function "_BinaryenConvertSInt32ToFloat32"
export_function "_BinaryenConvertSInt32ToFloat64"
export_function "_BinaryenConvertUInt32ToFloat32"
export_function "_BinaryenConvertUInt32ToFloat64"
export_function "_BinaryenConvertSInt64ToFloat32"
export_function "_BinaryenConvertSInt64ToFloat64"
export_function "_BinaryenConvertUInt64ToFloat32"
export_function "_BinaryenConvertUInt64ToFloat64"
export_function "_BinaryenPromoteFloat32"
export_function "_BinaryenDemoteFloat64"
export_function "_BinaryenReinterpretInt32"
export_function "_BinaryenReinterpretInt64"
export_function "_BinaryenExtendS8Int32"
export_function "_BinaryenExtendS16Int32"
export_function "_BinaryenExtendS8Int64"
export_function "_BinaryenExtendS16Int64"
export_function "_BinaryenExtendS32Int64"
export_function "_BinaryenAddInt32"
export_function "_BinaryenSubInt32"
export_function "_BinaryenMulInt32"
export_function "_BinaryenDivSInt32"
export_function "_BinaryenDivUInt32"
export_function "_BinaryenRemSInt32"
export_function "_BinaryenRemUInt32"
export_function "_BinaryenAndInt32"
export_function "_BinaryenOrInt32"
export_function "_BinaryenXorInt32"
export_function "_BinaryenShlInt32"
export_function "_BinaryenShrUInt32"
export_function "_BinaryenShrSInt32"
export_function "_BinaryenRotLInt32"
export_function "_BinaryenRotRInt32"
export_function "_BinaryenEqInt32"
export_function "_BinaryenNeInt32"
export_function "_BinaryenLtSInt32"
export_function "_BinaryenLtUInt32"
export_function "_BinaryenLeSInt32"
export_function "_BinaryenLeUInt32"
export_function "_BinaryenGtSInt32"
export_function "_BinaryenGtUInt32"
export_function "_BinaryenGeSInt32"
export_function "_BinaryenGeUInt32"
export_function "_BinaryenAddInt64"
export_function "_BinaryenSubInt64"
export_function "_BinaryenMulInt64"
export_function "_BinaryenDivSInt64"
export_function "_BinaryenDivUInt64"
export_function "_BinaryenRemSInt64"
export_function "_BinaryenRemUInt64"
export_function "_BinaryenAndInt64"
export_function "_BinaryenOrInt64"
export_function "_BinaryenXorInt64"
export_function "_BinaryenShlInt64"
export_function "_BinaryenShrUInt64"
export_function "_BinaryenShrSInt64"
export_function "_BinaryenRotLInt64"
export_function "_BinaryenRotRInt64"
export_function "_BinaryenEqInt64"
export_function "_BinaryenNeInt64"
export_function "_BinaryenLtSInt64"
export_function "_BinaryenLtUInt64"
export_function "_BinaryenLeSInt64"
export_function "_BinaryenLeUInt64"
export_function "_BinaryenGtSInt64"
export_function "_BinaryenGtUInt64"
export_function "_BinaryenGeSInt64"
export_function "_BinaryenGeUInt64"
export_function "_BinaryenAddFloat32"
export_function "_BinaryenSubFloat32"
export_function "_BinaryenMulFloat32"
export_function "_BinaryenDivFloat32"
export_function "_BinaryenCopySignFloat32"
export_function "_BinaryenMinFloat32"
export_function "_BinaryenMaxFloat32"
export_function "_BinaryenEqFloat32"
export_function "_BinaryenNeFloat32"
export_function "_BinaryenLtFloat32"
export_function "_BinaryenLeFloat32"
export_function "_BinaryenGtFloat32"
export_function "_BinaryenGeFloat32"
export_function "_BinaryenAddFloat64"
export_function "_BinaryenSubFloat64"
export_function "_BinaryenMulFloat64"
export_function "_BinaryenDivFloat64"
export_function "_BinaryenCopySignFloat64"
export_function "_BinaryenMinFloat64"
export_function "_BinaryenMaxFloat64"
export_function "_BinaryenEqFloat64"
export_function "_BinaryenNeFloat64"
export_function "_BinaryenLtFloat64"
export_function "_BinaryenLeFloat64"
export_function "_BinaryenGtFloat64"
export_function "_BinaryenGeFloat64"
export_function "_BinaryenCurrentMemory"
export_function "_BinaryenGrowMemory"
export_function "_BinaryenAtomicRMWAdd"
export_function "_BinaryenAtomicRMWSub"
export_function "_BinaryenAtomicRMWAnd"
export_function "_BinaryenAtomicRMWOr"
export_function "_BinaryenAtomicRMWXor"
export_function "_BinaryenAtomicRMWXchg"
export_function "_BinaryenSplatVecI8x16"
export_function "_BinaryenExtractLaneSVecI8x16"
export_function "_BinaryenExtractLaneUVecI8x16"
export_function "_BinaryenReplaceLaneVecI8x16"
export_function "_BinaryenSplatVecI16x8"
export_function "_BinaryenExtractLaneSVecI16x8"
export_function "_BinaryenExtractLaneUVecI16x8"
export_function "_BinaryenReplaceLaneVecI16x8"
export_function "_BinaryenSplatVecI32x4"
export_function "_BinaryenExtractLaneVecI32x4"
export_function "_BinaryenReplaceLaneVecI32x4"
export_function "_BinaryenSplatVecI64x2"
export_function "_BinaryenExtractLaneVecI64x2"
export_function "_BinaryenReplaceLaneVecI64x2"
export_function "_BinaryenSplatVecF32x4"
export_function "_BinaryenExtractLaneVecF32x4"
export_function "_BinaryenReplaceLaneVecF32x4"
export_function "_BinaryenSplatVecF64x2"
export_function "_BinaryenExtractLaneVecF64x2"
export_function "_BinaryenReplaceLaneVecF64x2"
export_function "_BinaryenEqVecI8x16"
export_function "_BinaryenNeVecI8x16"
export_function "_BinaryenLtSVecI8x16"
export_function "_BinaryenLtUVecI8x16"
export_function "_BinaryenGtSVecI8x16"
export_function "_BinaryenGtUVecI8x16"
export_function "_BinaryenLeSVecI8x16"
export_function "_BinaryenLeUVecI8x16"
export_function "_BinaryenGeSVecI8x16"
export_function "_BinaryenGeUVecI8x16"
export_function "_BinaryenEqVecI16x8"
export_function "_BinaryenNeVecI16x8"
export_function "_BinaryenLtSVecI16x8"
export_function "_BinaryenLtUVecI16x8"
export_function "_BinaryenGtSVecI16x8"
export_function "_BinaryenGtUVecI16x8"
export_function "_BinaryenLeSVecI16x8"
export_function "_BinaryenLeUVecI16x8"
export_function "_BinaryenGeSVecI16x8"
export_function "_BinaryenGeUVecI16x8"
export_function "_BinaryenEqVecI32x4"
export_function "_BinaryenNeVecI32x4"
export_function "_BinaryenLtSVecI32x4"
export_function "_BinaryenLtUVecI32x4"
export_function "_BinaryenGtSVecI32x4"
export_function "_BinaryenGtUVecI32x4"
export_function "_BinaryenLeSVecI32x4"
export_function "_BinaryenLeUVecI32x4"
export_function "_BinaryenGeSVecI32x4"
export_function "_BinaryenGeUVecI32x4"
export_function "_BinaryenEqVecF32x4"
export_function "_BinaryenNeVecF32x4"
export_function "_BinaryenLtVecF32x4"
export_function "_BinaryenGtVecF32x4"
export_function "_BinaryenLeVecF32x4"
export_function "_BinaryenGeVecF32x4"
export_function "_BinaryenEqVecF64x2"
export_function "_BinaryenNeVecF64x2"
export_function "_BinaryenLtVecF64x2"
export_function "_BinaryenGtVecF64x2"
export_function "_BinaryenLeVecF64x2"
export_function "_BinaryenGeVecF64x2"
export_function "_BinaryenNotVec128"
export_function "_BinaryenAndVec128"
export_function "_BinaryenOrVec128"
export_function "_BinaryenXorVec128"
export_function "_BinaryenNegVecI8x16"
export_function "_BinaryenAnyTrueVecI8x16"
export_function "_BinaryenAllTrueVecI8x16"
export_function "_BinaryenShlVecI8x16"
export_function "_BinaryenShrSVecI8x16"
export_function "_BinaryenShrUVecI8x16"
export_function "_BinaryenAddVecI8x16"
export_function "_BinaryenAddSatSVecI8x16"
export_function "_BinaryenAddSatUVecI8x16"
export_function "_BinaryenSubVecI8x16"
export_function "_BinaryenSubSatSVecI8x16"
export_function "_BinaryenSubSatUVecI8x16"
export_function "_BinaryenMulVecI8x16"
export_function "_BinaryenNegVecI16x8"
export_function "_BinaryenAnyTrueVecI16x8"
export_function "_BinaryenAllTrueVecI16x8"
export_function "_BinaryenShlVecI16x8"
export_function "_BinaryenShrSVecI16x8"
export_function "_BinaryenShrUVecI16x8"
export_function "_BinaryenAddVecI16x8"
export_function "_BinaryenAddSatSVecI16x8"
export_function "_BinaryenAddSatUVecI16x8"
export_function "_BinaryenSubVecI16x8"
export_function "_BinaryenSubSatSVecI16x8"
export_function "_BinaryenSubSatUVecI16x8"
export_function "_BinaryenMulVecI16x8"
export_function "_BinaryenNegVecI32x4"
export_function "_BinaryenAnyTrueVecI32x4"
export_function "_BinaryenAllTrueVecI32x4"
export_function "_BinaryenShlVecI32x4"
export_function "_BinaryenShrSVecI32x4"
export_function "_BinaryenShrUVecI32x4"
export_function "_BinaryenAddVecI32x4"
export_function "_BinaryenSubVecI32x4"
export_function "_BinaryenMulVecI32x4"
export_function "_BinaryenNegVecI64x2"
export_function "_BinaryenAnyTrueVecI64x2"
export_function "_BinaryenAllTrueVecI64x2"
export_function "_BinaryenShlVecI64x2"
export_function "_BinaryenShrSVecI64x2"
export_function "_BinaryenShrUVecI64x2"
export_function "_BinaryenAddVecI64x2"
export_function "_BinaryenSubVecI64x2"
export_function "_BinaryenAbsVecF32x4"
export_function "_BinaryenNegVecF32x4"
export_function "_BinaryenSqrtVecF32x4"
export_function "_BinaryenAddVecF32x4"
export_function "_BinaryenSubVecF32x4"
export_function "_BinaryenMulVecF32x4"
export_function "_BinaryenDivVecF32x4"
export_function "_BinaryenMinVecF32x4"
export_function "_BinaryenMaxVecF32x4"
export_function "_BinaryenAbsVecF64x2"
export_function "_BinaryenNegVecF64x2"
export_function "_BinaryenSqrtVecF64x2"
export_function "_BinaryenAddVecF64x2"
export_function "_BinaryenSubVecF64x2"
export_function "_BinaryenMulVecF64x2"
export_function "_BinaryenDivVecF64x2"
export_function "_BinaryenMinVecF64x2"
export_function "_BinaryenMaxVecF64x2"
export_function "_BinaryenTruncSatSVecF32x4ToVecI32x4"
export_function "_BinaryenTruncSatUVecF32x4ToVecI32x4"
export_function "_BinaryenTruncSatSVecF64x2ToVecI64x2"
export_function "_BinaryenTruncSatUVecF64x2ToVecI64x2"
export_function "_BinaryenConvertSVecI32x4ToVecF32x4"
export_function "_BinaryenConvertUVecI32x4ToVecF32x4"
export_function "_BinaryenConvertSVecI64x2ToVecF64x2"
export_function "_BinaryenConvertUVecI64x2ToVecF64x2"
# Expression creation
export_function "_BinaryenBlock"
export_function "_BinaryenIf"
export_function "_BinaryenLoop"
export_function "_BinaryenBreak"
export_function "_BinaryenSwitch"
export_function "_BinaryenCall"
export_function "_BinaryenCallIndirect"
export_function "_BinaryenGetLocal"
export_function "_BinaryenSetLocal"
export_function "_BinaryenTeeLocal"
export_function "_BinaryenGetGlobal"
export_function "_BinaryenSetGlobal"
export_function "_BinaryenLoad"
export_function "_BinaryenStore"
export_function "_BinaryenConst"
export_function "_BinaryenUnary"
export_function "_BinaryenBinary"
export_function "_BinaryenSelect"
export_function "_BinaryenDrop"
export_function "_BinaryenReturn"
export_function "_BinaryenHost"
export_function "_BinaryenNop"
export_function "_BinaryenUnreachable"
export_function "_BinaryenAtomicLoad"
export_function "_BinaryenAtomicStore"
export_function "_BinaryenAtomicRMW"
export_function "_BinaryenAtomicCmpxchg"
export_function "_BinaryenAtomicWait"
export_function "_BinaryenAtomicWake"
export_function "_BinaryenSIMDExtract"
export_function "_BinaryenSIMDReplace"
export_function "_BinaryenSIMDShuffle"
export_function "_BinaryenSIMDBitselect"
export_function "_BinaryenSIMDShift"
export_function "_BinaryenMemoryInit"
export_function "_BinaryenDataDrop"
export_function "_BinaryenMemoryCopy"
export_function "_BinaryenMemoryFill"
# 'Expression' operations
export_function "_BinaryenExpressionGetId"
export_function "_BinaryenExpressionGetType"
export_function "_BinaryenExpressionPrint"
# 'Block' expression operations
export_function "_BinaryenBlockGetName"
export_function "_BinaryenBlockGetNumChildren"
export_function "_BinaryenBlockGetChild"
# 'If' expression operations
export_function "_BinaryenIfGetCondition"
export_function "_BinaryenIfGetIfTrue"
export_function "_BinaryenIfGetIfFalse"
# 'Loop' expression operations
export_function "_BinaryenLoopGetName"
export_function "_BinaryenLoopGetBody"
# 'Break' expression operations
export_function "_BinaryenBreakGetName"
export_function "_BinaryenBreakGetCondition"
export_function "_BinaryenBreakGetValue"
# 'Switch' expression operations
export_function "_BinaryenSwitchGetNumNames"
export_function "_BinaryenSwitchGetName"
export_function "_BinaryenSwitchGetDefaultName"
export_function "_BinaryenSwitchGetCondition"
export_function "_BinaryenSwitchGetValue"
# 'Call' expression operations
export_function "_BinaryenCallGetTarget"
export_function "_BinaryenCallGetNumOperands"
export_function "_BinaryenCallGetOperand"
# 'CallIndirect' expression operations
export_function "_BinaryenCallIndirectGetTarget"
export_function "_BinaryenCallIndirectGetNumOperands"
export_function "_BinaryenCallIndirectGetOperand"
# 'GetLocal' expression operations
export_function "_BinaryenGetLocalGetIndex"
# 'SetLocal' expression operations
export_function "_BinaryenSetLocalIsTee"
export_function "_BinaryenSetLocalGetIndex"
export_function "_BinaryenSetLocalGetValue"
# 'GetGlobal' expression operations
export_function "_BinaryenGetGlobalGetName"
# 'SetGlobal' expression operations
export_function "_BinaryenSetGlobalGetName"
export_function "_BinaryenSetGlobalGetValue"
# 'Host' expression operations
export_function "_BinaryenHostGetOp"
export_function "_BinaryenHostGetNameOperand"
export_function "_BinaryenHostGetNumOperands"
export_function "_BinaryenHostGetOperand"
# 'Load' expression operations
export_function "_BinaryenLoadIsAtomic"
export_function "_BinaryenLoadIsSigned"
export_function "_BinaryenLoadGetBytes"
export_function "_BinaryenLoadGetOffset"
export_function "_BinaryenLoadGetAlign"
export_function "_BinaryenLoadGetPtr"
# 'Store' expression operations
export_function "_BinaryenStoreIsAtomic"
export_function "_BinaryenStoreGetBytes"
export_function "_BinaryenStoreGetOffset"
export_function "_BinaryenStoreGetAlign"
export_function "_BinaryenStoreGetPtr"
export_function "_BinaryenStoreGetValue"
# 'Const' expression operations
export_function "_BinaryenConstGetValueI32"
export_function "_BinaryenConstGetValueI64Low"
export_function "_BinaryenConstGetValueI64High"
export_function "_BinaryenConstGetValueF32"
export_function "_BinaryenConstGetValueF64"
# 'Unary' expression operations
export_function "_BinaryenUnaryGetOp"
export_function "_BinaryenUnaryGetValue"
# 'Binary' expression operations
export_function "_BinaryenBinaryGetOp"
export_function "_BinaryenBinaryGetLeft"
export_function "_BinaryenBinaryGetRight"
# 'Select' expression operations
export_function "_BinaryenSelectGetIfTrue"
export_function "_BinaryenSelectGetIfFalse"
export_function "_BinaryenSelectGetCondition"
# 'Drop' expression operations
export_function "_BinaryenDropGetValue"
# 'Return' expression operations
export_function "_BinaryenReturnGetValue"
# 'AtomicRMW' expression operations
export_function "_BinaryenAtomicRMWGetOp"
export_function "_BinaryenAtomicRMWGetBytes"
export_function "_BinaryenAtomicRMWGetOffset"
export_function "_BinaryenAtomicRMWGetPtr"
export_function "_BinaryenAtomicRMWGetValue"
# 'AtomicCmpxchg' expression operations
export_function "_BinaryenAtomicCmpxchgGetBytes"
export_function "_BinaryenAtomicCmpxchgGetOffset"
export_function "_BinaryenAtomicCmpxchgGetPtr"
export_function "_BinaryenAtomicCmpxchgGetExpected"
export_function "_BinaryenAtomicCmpxchgGetReplacement"
# 'AtomicWait' expression operations
export_function "_BinaryenAtomicWaitGetPtr"
export_function "_BinaryenAtomicWaitGetExpected"
export_function "_BinaryenAtomicWaitGetTimeout"
export_function "_BinaryenAtomicWaitGetExpectedType"
# 'AtomicWake' expression operations
export_function "_BinaryenAtomicWakeGetPtr"
export_function "_BinaryenAtomicWakeGetWakeCount"
# 'SIMDExtract' expression operations
export_function "_BinaryenSIMDExtractGetOp"
export_function "_BinaryenSIMDExtractGetVec"
export_function "_BinaryenSIMDExtractGetIndex"
# 'SIMDReplace' expression operations
export_function "_BinaryenSIMDReplaceGetOp"
export_function "_BinaryenSIMDReplaceGetVec"
export_function "_BinaryenSIMDReplaceGetIndex"
export_function "_BinaryenSIMDReplaceGetValue"
# 'SIMDShuffle' expression operations
export_function "_BinaryenSIMDShuffleGetLeft"
export_function "_BinaryenSIMDShuffleGetRight"
export_function "_BinaryenSIMDShuffleGetMask"
# 'SIMDBitselect' expression operations
export_function "_BinaryenSIMDBitselectGetLeft"
export_function "_BinaryenSIMDBitselectGetRight"
export_function "_BinaryenSIMDBitselectGetCond"
# 'SIMDShift' expression operations
export_function "_BinaryenSIMDShiftGetOp"
export_function "_BinaryenSIMDShiftGetVec"
export_function "_BinaryenSIMDShiftGetShift"
# 'MemoryInit' expression operations
export_function "_BinaryenMemoryInitGetSegment"
export_function "_BinaryenMemoryInitGetDest"
export_function "_BinaryenMemoryInitGetOffset"
export_function "_BinaryenMemoryInitGetSize"
# 'DataDrop' expression operations
export_function "_BinaryenDataDropGetSegment"
# 'MemoryCopy' expression operations
export_function "_BinaryenMemoryCopyGetDest"
export_function "_BinaryenMemoryCopyGetSource"
export_function "_BinaryenMemoryCopyGetSize"
# 'MemoryFill' expression operations
export_function "_BinaryenMemoryFillGetDest"
export_function "_BinaryenMemoryFillGetValue"
export_function "_BinaryenMemoryFillGetSize"
# 'Module' operations
export_function "_BinaryenModuleCreate"
export_function "_BinaryenModuleDispose"
export_function "_BinaryenAddFunctionType"
export_function "_BinaryenRemoveFunctionType"
export_function "_BinaryenGetFunctionTypeBySignature"
export_function "_BinaryenAddFunction"
export_function "_BinaryenGetFunction"
export_function "_BinaryenRemoveFunction"
export_function "_BinaryenAddGlobal"
export_function "_BinaryenRemoveGlobal"
export_function "_BinaryenAddFunctionImport"
export_function "_BinaryenAddTableImport"
export_function "_BinaryenAddMemoryImport"
export_function "_BinaryenAddGlobalImport"
export_function "_BinaryenAddFunctionExport"
export_function "_BinaryenAddTableExport"
export_function "_BinaryenAddMemoryExport"
export_function "_BinaryenAddGlobalExport"
export_function "_BinaryenRemoveExport"
export_function "_BinaryenSetFunctionTable"
export_function "_BinaryenSetMemory"
export_function "_BinaryenSetStart"
export_function "_BinaryenModuleParse"
export_function "_BinaryenModulePrint"
export_function "_BinaryenModulePrintAsmjs"
export_function "_BinaryenModuleValidate"
export_function "_BinaryenModuleOptimize"
export_function "_BinaryenGetOptimizeLevel"
export_function "_BinaryenSetOptimizeLevel"
export_function "_BinaryenGetShrinkLevel"
export_function "_BinaryenSetShrinkLevel"
export_function "_BinaryenGetDebugInfo"
export_function "_BinaryenSetDebugInfo"
export_function "_BinaryenModuleRunPasses"
export_function "_BinaryenModuleAutoDrop"
export_function "_BinaryenModuleAllocateAndWrite"
export_function "_BinaryenModuleRead"
export_function "_BinaryenModuleInterpret"
export_function "_BinaryenModuleAddDebugInfoFileName"
export_function "_BinaryenModuleGetDebugInfoFileName"
# 'FunctionType' operations
export_function "_BinaryenFunctionTypeGetName"
export_function "_BinaryenFunctionTypeGetNumParams"
export_function "_BinaryenFunctionTypeGetParam"
export_function "_BinaryenFunctionTypeGetResult"
# 'Function' operations
export_function "_BinaryenFunctionGetName"
export_function "_BinaryenFunctionGetType"
export_function "_BinaryenFunctionGetNumParams"
export_function "_BinaryenFunctionGetParam"
export_function "_BinaryenFunctionGetResult"
export_function "_BinaryenFunctionGetNumVars"
export_function "_BinaryenFunctionGetVar"
export_function "_BinaryenFunctionGetBody"
export_function "_BinaryenFunctionOptimize"
export_function "_BinaryenFunctionRunPasses"
export_function "_BinaryenFunctionSetDebugLocation"
# 'Import' operations
export_function "_BinaryenGlobalImportGetModule"
export_function "_BinaryenGlobalImportGetBase"
export_function "_BinaryenFunctionImportGetModule"
export_function "_BinaryenFunctionImportGetBase"
# 'Export' operations
export_function "_BinaryenExportGetKind"
export_function "_BinaryenExportGetName"
export_function "_BinaryenExportGetValue"
# 'Relooper' operations
export_function "_RelooperCreate"
export_function "_RelooperAddBlock"
export_function "_RelooperAddBranch"
export_function "_RelooperAddBlockWithSwitch"
export_function "_RelooperAddBranchForSwitch"
export_function "_RelooperRenderAndDispose"
# Tracing
export_function "_BinaryenSetAPITracing"
"$EMSCRIPTEN/em++" \
$EMCC_ARGS \
$BINARYEN_SRC/binaryen-c.cpp \
shared.bc \
-I$BINARYEN_SRC/ \
-s EXPORTED_FUNCTIONS=[${EXPORTED_FUNCTIONS}] \
-o $BINARYEN_BIN/binaryen${OUT_FILE_SUFFIX}.js \
-s MODULARIZE_INSTANCE=1 \
-s 'EXPORT_NAME="Binaryen"' \
--post-js $BINARYEN_SRC/js/binaryen.js-post.js