forked from graalvm/simplelanguage
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sl
executable file
·112 lines (104 loc) · 4.45 KB
/
sl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/env bash
VERSION="20.0.0"
MAIN_CLASS="com.oracle.truffle.sl.launcher.SLMain"
SCRIPT_HOME="$(cd "$(dirname "$0")" && pwd -P)"
function extractGraalVMVersion() {
local -r releasePath="${1:?Path to relese file is a required parameter}"
grep "GRAALVM_VERSION" "$releasePath" 2> /dev/null \
| awk 'BEGIN {FS="="} {print $2}' \
| sed 's/"//g'
}
function fail() {
local -r message="${1:-Unknown error}"
local -r exitCode="${2:-1}"
>&2 echo "$message"
exit "$exitCode"
}
#######################################################################
# Locations of the language and launcher jars as well as the java command are
# different if I'm running from the repository or as a component in GraalVM
#######################################################################
GRAALVM_VERSION=$(extractGraalVMVersion "$SCRIPT_HOME/../release")
if [[ "$GRAALVM_VERSION" != "" ]]; then
LANGUAGE_PATH=""
# contains paths for both jdk8 and jdk11
LAUNCHER_PATH="$SCRIPT_HOME/../jre/languages/sl/launcher/sl-launcher.jar:$SCRIPT_HOME/../languages/sl/launcher/sl-launcher.jar"
JAVACMD="$SCRIPT_HOME/java"
if [[ "$GRAALVM_VERSION" != "$VERSION" ]]; then
fail "Installed in wrong version of GraalVM. Expected: $VERSION, found $GRAALVM_VERSION"
fi
else
LANGUAGE_PATH="$SCRIPT_HOME/language/target/simplelanguage.jar"
LAUNCHER_PATH="$SCRIPT_HOME/launcher/target/launcher-$VERSION-SNAPSHOT.jar"
# Check the GraalVM version in JAVA_HOME
if [[ "$JAVA_HOME" != "" ]]; then
GRAALVM_VERSION=$(extractGraalVMVersion "$JAVA_HOME"/release)
if [[ "$GRAALVM_VERSION" != "" ]]; then
if [[ "$GRAALVM_VERSION" != "$VERSION" ]]; then
fail "Wrong version of GraalVM in \$JAVA_HOME. Expected: $VERSION, found $GRAALVM_VERSION"
fi
fi
JAVACMD=${JAVACMD:=$JAVA_HOME/bin/java}
if [[ ! -f $LANGUAGE_PATH ]]; then
fail "Could not find language on $LANGUAGE_PATH. Did you run mvn package?"
fi
if [[ ! -f $LAUNCHER_PATH ]]; then
fail "Could not find launcher on $LAUNCHER_PATH. Did you run mvn package?"
fi
else
fail "JAVA_HOME is not set"
exit 1
fi
fi
#######################################################################
# Parse arguments, prepare Java command and execute
#######################################################################
if [[ "$GRAALVM_VERSION" != "" ]]; then
PROGRAM_ARGS=()
JAVA_ARGS=()
for opt in "$@"
do
case $opt in
-debug)
JAVA_ARGS+=("-Xdebug" "-Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=y") ;;
-dump)
JAVA_ARGS+=("-Dgraal.Dump=Truffle:1" "-Dgraal.TruffleBackgroundCompilation=false" "-Dgraal.TraceTruffleCompilation=true" "-Dgraal.TraceTruffleCompilationDetails=true") ;;
-disassemble)
JAVA_ARGS+=("-XX:CompileCommand=print,*OptimizedCallTarget.callRoot" "-XX:CompileCommand=exclude,*OptimizedCallTarget.callRoot" "-Dgraal.TruffleBackgroundCompilation=false" "-Dgraal.TraceTruffleCompilation=true" "-Dgraal.TraceTruffleCompilationDetails=true") ;;
-J*)
opt=${opt:2}
JAVA_ARGS+=("$opt") ;;
*)
PROGRAM_ARGS+=("$opt") ;;
esac
done
"$JAVACMD" "${JAVA_ARGS[@]}" -Dtruffle.class.path.append="$LANGUAGE_PATH" -cp "$LAUNCHER_PATH" "$MAIN_CLASS" "${PROGRAM_ARGS[@]}"
else
echo "Warning: Could not find GraalVM on $JAVA_HOME. Running on JDK without support for compilation."
echo
PROGRAM_ARGS=()
JAVA_ARGS=()
for opt in "$@"
do
case $opt in
-debug)
JAVA_ARGS+=("-Xdebug" "-Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=y") ;;
-dump)
echo "NOTE: Ignoring -dump, only supported on GraalVM." ;;
-disassemble)
echo "NOTE: Ignoring -disassemble" ;;
-J*)
opt=${opt:2}
JAVA_ARGS+=("$opt") ;;
*)
PROGRAM_ARGS+=("$opt") ;;
esac
done
if [[ ! -d $HOME/.m2 ]]; then
echo "Could not find mvn cache at $HOME/.m2"
exit 1
fi
GRAAL_SDK_PATH="$HOME/.m2/repository/org/graalvm/sdk/graal-sdk/$VERSION/graal-sdk-$VERSION.jar"
TRUFFLE_API_PATH="$HOME/.m2/repository/org/graalvm/truffle/truffle-api/$VERSION/truffle-api-$VERSION.jar"
"$JAVACMD" "${JAVA_ARGS[@]}" -cp "$GRAAL_SDK_PATH":"$LAUNCHER_PATH":"$LANGUAGE_PATH":"$TRUFFLE_API_PATH" "$MAIN_CLASS" "${PROGRAM_ARGS[@]}"
fi