#!/usr/bin/env bash set -eou pipefail BABASHKA_XMX=${BABASHKA_XMX:-"-J-Xmx4500m"} if [ -z "$GRAALVM_HOME" ]; then echo "Please set GRAALVM_HOME" exit 1 fi BABASHKA_VERSION=$(cat resources/BABASHKA_VERSION) BABASHKA_JAR=${BABASHKA_JAR:-"target/babashka-$BABASHKA_VERSION-standalone.jar"} if [[ ! -f "$BABASHKA_JAR" ]] then echo "Please run script/uberjar first." exit 1 fi if [[ ! -x "$GRAALVM_HOME/bin/native-image" ]]; then "$GRAALVM_HOME/bin/gu" install native-image fi export JAVA_HOME=$GRAALVM_HOME export PATH=$GRAALVM_HOME/bin:$PATH rm -rf resources/*.class # SVM_JAR=$(find -L "$GRAALVM_HOME" | grep svm.jar) # "$GRAALVM_HOME/bin/javac" -cp "$SVM_JAR" resources/CutOffCoreServicesDependencies.java # "$GRAALVM_HOME/bin/javac" -cp "$SVM_JAR" resources/CutOffSunAwtWwwContentAudioAiff.java # "$GRAALVM_HOME/bin/javac" -cp "$SVM_JAR" resources/CutOffMisc.java if [ -z "$BABASHKA_JAR" ]; then lein with-profiles +reflection,+native-image "do" run lein "do" clean, uberjar, metabom BABASHKA_JAR=${BABASHKA_JAR:-"target/babashka-$BABASHKA_VERSION-standalone.jar"} fi # because script/test cleans target during ci before the jar can we saved cp target/metabom.jar . BABASHKA_BINARY=${BABASHKA_BINARY:-"bb"} args=("-jar" "$BABASHKA_JAR" "-H:Name=$BABASHKA_BINARY" "-H:+ReportExceptionStackTraces" # "-H:+PrintAnalysisCallTree" # "-H:+DashboardAll" # "-H:DashboardDump=reports/dump" # "-H:+DashboardPretty" # "-H:+DashboardJson" "-H:ReportAnalysisForbiddenType=java.awt.Toolkit:InHeap,Allocated" "--verbose" "--no-fallback" "--native-image-info" # --trace-class-initialization=jdk.internal.net.http.common.DebugLogger,jdk.internal.net.http.websocket.WebSocketImpl,jdk.internal.net.http.common.Utils "$BABASHKA_XMX") BABASHKA_STATIC=${BABASHKA_STATIC:-} BABASHKA_MUSL=${BABASHKA_MUSL:-} if [ "$BABASHKA_STATIC" = "true" ]; then args+=("--static") if [ "$BABASHKA_MUSL" = "true" ]; then args+=("--libc=musl" # see https://github.com/oracle/graal/issues/3398 "-H:CCompilerOption=-Wl,-z,stack-size=2097152") else # see https://github.com/oracle/graal/issues/3737 args+=("-H:+StaticExecutableWithDynamicLibC") fi fi BABASHKA_FEATURE_HSQLDB=${BABASHKA_FEATURE_HSQLDB:-} if [ "$BABASHKA_FEATURE_HSQLDB" = "true" ]; then args+=("-H:IncludeResources=org/hsqldb/.*\.properties" "-H:IncludeResources=org/hsqldb/.*\.sql") fi BABASHKA_FEATURE_SELMER=${BABASHKA_FEATURE_SELMER:-} if [ "$BABASHKA_FEATURE_SELMER" = "true" ]; then args+=("-H:IncludeResources=json.human.css") fi BABASHKA_LEAN=${BABASHKA_LEAN:-} if [ "$BABASHKA_LEAN" = "true" ] then # Remove all the default features, unless explicitly set to true: export BABASHKA_FEATURE_XML="${BABASHKA_FEATURE_XML:-false}" export BABASHKA_FEATURE_YAML="${BABASHKA_FEATURE_YAML:-false}" export BABASHKA_FEATURE_CSV="${BABASHKA_FEATURE_CSV:-false}" export BABAHSKA_FEATURE_TRANSIT="${BABAHSKA_FEATURE_TRANSIT:-false}" export BABASHKA_FEATURE_JAVA_TIME="${BABASHKA_FEATURE_JAVA_TIME:-false}" export BABASHKA_FEATURE_JAVA_NET_HTTP="${BABASHKA_FEATURE_JAVA_NET_HTTP:-false}" export BABASHKA_FEATURE_JAVA_NIO="${BABASHKA_FEATURE_JAVA_NIO:-false}" export BABASHKA_FEATURE_HTTPKIT_CLIENT="${BABASHKA_FEATURE_HTTPKIT_CLIENT:-false}" export BABASHKA_FEATURE_HTTPKIT_SERVER="${BABASHKA_FEATURE_HTTPKIT_SERVER:-false}" export BABASHKA_FEATURE_CORE_MATCH="${BABASHKA_FEATURE_CORE_MATCH:-false}" export BABASHKA_FEATURE_HICCUP="${BABASHKA_FEATURE_HICCUP:-false}" export BABASHKA_FEATURE_TEST_CHECK="${BABASHKA_FEATURE_TEST_CHECK:-false}" export BABASHKA_FEATURE_SPEC_ALPHA="${BABASHKA_FEATURE_SPEC_ALPHA:-false}" export BABASHKA_FEATURE_SELMER="${BABASHKA_FEATURE_SELMER:-false}" export BABASHKA_FEATURE_LOGGING="${BABASHKA_FEATURE_LOGGING:-false}" export BABASHKA_FEATURE_PRIORITY_MAP="${BABASHKA_FEATURE_PRIORITY_MAP:-false}" export BABASHKA_FEATURE_RRB_VECTOR="${BABASHKA_FEATURE_RRB_VECTOR:-false}" fi "$GRAALVM_HOME/bin/native-image" "${args[@]}"