#!/bin/bash # # Compiles code with DDC and runs the resulting code in node.js. # # The first script supplied should be the one with `main()`. # # Saves the output in the same directory as the sources for convenient # inspection, modification or rerunning the code. set -e function follow_links() { file="$1" while [ -h "$file" ]; do file="$(readlink "$file")" done echo "$file" } PROG_NAME="$(follow_links "$BASH_SOURCE")" SDK_DIR="$( cd "${PROG_NAME%/*}/../../.."; pwd -P)" if [[ `uname` == 'Darwin' ]]; then OUT_DIR="$SDK_DIR"/xcodebuild else OUT_DIR="$SDK_DIR"/out fi if [ -z "$DART_CONFIGURATION" ]; then DIRS=$( ls "$OUT_DIR" ) # list of possible configurations in decreasing desirability CONFIGS=("ReleaseX64" "ReleaseIA32" "DebugX64" "DebugIA32" "ReleaseARM" "ReleaseARM64" "ReleaseARMV5TE" "DebugARM" "DebugARM64" "DebugARMV5TE") 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 GEN_DIR="$OUT_DIR"/"$DART_CONFIGURATION"/gen/utils/dartdevc KERNEL=false if [ "$1" = "-k" ]; then KERNEL=true shift fi BASENAME=$( basename "${1%.*}") LIBROOT=$(cd $( dirname "${1%.*}") && pwd) if [ "$KERNEL" = true ]; then if [ ! -e $GEN_DIR/kernel/ddc_sdk.dill ]; then echo "DDC SDK must be built first, please run:" echo " pushd $SDKDIR" echo " ./tools/build.py -m release dartdevc_kernel_sdk" exit 1 fi NODE_PATH=$GEN_DIR/kernel/common:$LIBROOT:$NODE_PATH $SDK_DIR/sdk/bin/dartdevc --kernel --modules=node \ --dart-sdk-summary=$GEN_DIR/ddc_sdk.sum \ -o $LIBROOT/$BASENAME.js $* else if [ ! -e $GEN_DIR/ddc_sdk.sum ]; then echo "DDC SDK must be built first, please run:" echo " pushd $SDKDIR" echo " ./tools/build.py -m release dartdevc_sdk" exit 1 fi NODE_PATH=$GEN_DIR/js/common:$LIBROOT:$NODE_PATH $SDK_DIR/sdk/bin/dartdevc --modules=node \ --library-root=$LIBROOT --dart-sdk-summary=$GEN_DIR/ddc_sdk.sum \ -o $LIBROOT/$BASENAME.js $* fi export NODE_PATH pushd $LIBROOT > /dev/null # TODO(jmesserly): we could have this output the same content as the devtool # script, so you could debug the output without recompiling? echo " let source_maps; try { source_maps = require('source-map-support'); source_maps.install(); } catch(e) { } let sdk = require(\"dart_sdk\"); let main = require(\"./$BASENAME\").$BASENAME.main; try { sdk._isolate_helper.startRootIsolate(main, []); } catch(e) { if (!source_maps) { console.log('For Dart source maps: npm install source-map-support'); } console.error(e); process.exit(1); }" \ > $LIBROOT/$BASENAME.run.js node $BASENAME.run.js || exit 1 popd > /dev/null