#!/usr/bin/env bash set -eo pipefail GU=`which gu` || true if [ -z "$GU" ]; then if [ -z "$GRAALVM_HOME" ]; then echo "Please set GRAALVM_HOME" exit 1 fi GU="$GRAALVM_HOME/bin/gu" else GRAALVM_HOME=`echo $GU | sed -e "s/\/bin\/gu$//"` fi if [ -z "$BABASHKA_XMX" ]; then export BABASHKA_XMX="-J-Xmx3g" fi NATIVE_IMAGE=`which native-image` || true if [ -z "$NATIVE_IMAGE" ]; then $GU install native-image || true NATIVE_IMAGE=`which native-image` || true if [ -z "$NATIVE_IMAGE" ]; then if [ -z "$GRAALVM_HOME" ]; then echo "Please set GRAALVM_HOME" exit 1 fi NATIVE_IMAGE="$GRAALVM_HOME/bin/native-image" fi fi ## --- THE ACTUAL SCRIPT --- BABASHKA_VERSION=$(cat resources/BABASHKA_VERSION) export JAVA_HOME=$GRAALVM_HOME $GRAALVM_HOME/bin/javac -cp $GRAALVM_HOME/jre/lib/svm/builder/svm.jar resources/CutOffCoreServicesDependencies.java if [ -z "$JAR" ]; then lein with-profiles +reflection do run lein do clean, uberjar JAR=${JAR:-"target/babashka-$BABASHKA_VERSION-standalone.jar"} fi BINARY_NAME=${BINARY_NAME:-"bb"} args=( -jar $JAR \ -H:Name=$BINARY_NAME \ -H:+ReportExceptionStackTraces \ -J-Dclojure.spec.skip-macros=true \ -J-Dclojure.compiler.direct-linking=true \ "-H:IncludeResources=BABASHKA_VERSION" \ "-H:IncludeResources=SCI_VERSION" \ -H:ReflectionConfigurationFiles=reflection.json \ --initialize-at-run-time=java.lang.Math\$RandomNumberGeneratorHolder \ --initialize-at-build-time \ -H:Log=registerResource: \ -H:EnableURLProtocols=http,https \ --enable-all-security-services \ -H:+JNI \ --verbose \ --no-fallback \ --no-server \ --report-unsupported-elements-at-runtime \ "$BABASHKA_XMX" ) if [ "$BABASHKA_STATIC" = "true" ]; then args+=("--static") fi $GRAALVM_HOME/bin/native-image "${args[@]}" LEIN=`which lein` || true if [ -z "$LEIN" ]; then echo "nothing to clean" else lein clean fi