#!/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. # Run dart2wasm on the Dart VM. This script assumes the Dart repo's # directory structure. 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)" # Locate build directory, containing executables, snapshots and platform dill. if [[ `uname` == 'Darwin' ]]; then OUT_DIR="$SDK_DIR/xcodebuild" else OUT_DIR="$SDK_DIR/out" fi # Set DART_CONFIGURATION. Code copied from `dart` script in the same directory. if [ -z "$DART_CONFIGURATION" ]; then DIRS=$( ls "$OUT_DIR" ) # List of possible configurations in decreasing desirability. CONFIGS=("ReleaseX64" "ReleaseARM64" "ReleaseIA32" "DebugX64" "DebugIA32" "ReleaseARM" "DebugARM" "DebugARM64" ) DART_CONFIGURATION="None" for CONFIG in ${CONFIGS[*]} do for DIR in $DIRS; do if [ "$CONFIG" = "$DIR" ]; then # Choose most desirable configuration that is available and break. DART_CONFIGURATION="$DIR" break 2 fi done done if [ "$DART_CONFIGURATION" = "None" ] then echo "No valid dart configuration found in $OUT_DIR" exit 1 fi fi BIN_DIR="$OUT_DIR/$DART_CONFIGURATION" DART_PRECOMPILED_RUNTIME="$BIN_DIR/dart_precompiled_runtime" # Point to SDK directory. SDK_ARG="--dart-sdk=$SDK_DIR" # Point to built platform dill. PLATFORM="$BIN_DIR/dart2wasm_platform.dill" # Not the prettiest way to check for a target, and it doesn't support changing # the default, but it will do for experiments. for arg in "$@"; do if [[ "$arg" == "--stringref" ]]; then PLATFORM="$BIN_DIR/dart2wasm_stringref_platform.dill" fi if [[ "$arg" == "--js-compatibility" ]]; then PLATFORM="$BIN_DIR/dart2wasm_js_compatibility_platform.dill" fi done PLATFORM_ARG="--platform=$PLATFORM" unset EXTRA_VM_OPTIONS declare -a EXTRA_VM_OPTIONS # Choose snapshot with or without asserts enabled. SNAPSHOT_NAME="dart2wasm" case $0 in *_developer) EXTRA_VM_OPTIONS+=('--enable_asserts') SNAPSHOT_NAME="dart2wasm_asserts" ;; esac SNAPSHOT="$BIN_DIR/$SNAPSHOT_NAME.snapshot" # We allow extra vm options to be passed in through an environment variable. if [[ $DART_VM_OPTIONS ]]; then read -a OPTIONS <<< "$DART_VM_OPTIONS" EXTRA_VM_OPTIONS+=("${OPTIONS[@]}") fi DART_ROOT="$(cd "${SDK_DIR}/.." ; pwd -P)" exec "$DART_PRECOMPILED_RUNTIME" "--packages=$DART_ROOT/.packages" "${EXTRA_VM_OPTIONS[@]}" "$SNAPSHOT" "$SDK_ARG" "$PLATFORM_ARG" "$@"