blob: 86ecf9bdd649a677304043df82b963bb3b37b664 [file] [log] [blame]
#!/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 dartdevk_sdk"
exit 1
fi
NODE_PATH=$GEN_DIR/kernel/common:$LIBROOT:$NODE_PATH
dart -c $SDK_DIR/pkg/dev_compiler/bin/dartdevk.dart --modules=node \
--dart-sdk-summary=$GEN_DIR/kernel/ddc_sdk.dill \
-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
dart -c $SDK_DIR/pkg/dev_compiler/bin/dartdevc.dart --modules=node \
--library-root=$LIBROOT --dart-sdk-summary=$GEN_DIR/ddc_sdk.sum \
-o $LIBROOT/$BASENAME.js $*
fi
pushd $LIBROOT > /dev/null
echo "
// Fix the node.js search paths that Electron cleared out.
const Module = require('module');
const originalResolveFilename = Module._resolveFilename;
Module._resolveFilename = function (request, parent, isMain) {
let paths = parent.paths;
const ddcPath = \"$GEN_DIR/js/common\";
if (paths[0] != ddcPath) {
paths.splice(0, 0, ddcPath, \"$LIBROOT\");
}
return originalResolveFilename(request, parent, isMain);
};
let sdk = require(\"dart_sdk\");
let main = require(\"$BASENAME\").$BASENAME.main;
sdk.dart.ignoreWhitelistedErrors(false);
sdk._isolate_helper.startRootIsolate(main, []);" \
> $LIBROOT/$BASENAME.run.js
devtool $LIBROOT/$BASENAME.run.js
popd > /dev/null