| #!/usr/bin/env bash |
| # Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| |
| # Script to run a benchmark compiled using dart2wasm. Assumes the Dart repo's |
| # directory structure. |
| |
| set -e |
| |
| function follow_links() { |
| file="$1" |
| while [ -h "$file" ]; do |
| # On Mac OS, readlink -f doesn't work. |
| file="$(readlink "$file")" |
| done |
| echo "$file" |
| } |
| |
| # Unlike $0, $BASH_SOURCE points to the absolute path of this file. |
| PROG_NAME="$(follow_links "$BASH_SOURCE")" |
| |
| # Handle the case where dart-sdk/bin has been symlinked to. |
| PROG_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)" |
| SDK_DIR="$(cd "${PROG_DIR}/../../.." ; pwd -P)" |
| |
| RUN_WASM="$SDK_DIR/pkg/dart2wasm/bin/run_wasm.js" |
| |
| # Hardcoded to x64 Linux for now. |
| D8_BIN="$SDK_DIR/third_party/d8/linux/x64/d8" |
| JSSHELL_BIN="$SDK_DIR/third_party/firefox_jsshell/js" |
| JSC_BIN="$SDK_DIR/third_party/jsc/jsc" |
| |
| SHELL_BIN="$D8_BIN" |
| SHELL_OPTIONS=() |
| SHELL_ARG_SEPERATOR="--" |
| MJS_FILE="" |
| WASM_FILE="" |
| LINEAR_WASM_FILES=() |
| ARGS=() |
| while [ $# -gt 0 ]; do |
| case "$1" in |
| --d8) |
| SHELL_BIN="$D8_BIN" |
| SHELL_ARG_SEPERATOR="--" |
| shift |
| ;; |
| |
| --jsshell) |
| SHELL_BIN="$JSSHELL_BIN" |
| SHELL_ARG_SEPERATOR="" |
| shift |
| ;; |
| |
| --jsc) |
| SHELL_BIN="$JSC_BIN" |
| SHELL_ARG_SEPERATOR="--" |
| shift |
| ;; |
| |
| --shell-option=*) |
| SHELL_OPTIONS+=("${1#--shell-option=}") |
| shift |
| ;; |
| |
| *.wasm) |
| if [ -z "$WASM_FILE" ]; then |
| # First wasm file is the actual dart program |
| WASM_FILE="$(realpath "$1")" |
| MJS_FILE="${WASM_FILE%.wasm}.mjs" |
| else |
| # Following wasm files are imported linear memory modules |
| LINEAR_WASM_FILES+=("$1") |
| fi |
| shift |
| ;; |
| |
| *) |
| # Any arguments that are not the above will be arguments to the dart's |
| # main function. |
| break |
| ;; |
| esac |
| done |
| |
| exec "$SHELL_BIN" "${SHELL_OPTIONS[@]}" "$RUN_WASM" $SHELL_ARG_SEPERATOR "$MJS_FILE" "$WASM_FILE" "${LINEAR_WASM_FILES[@]}" -- "$@" |