babashka/script/compile

140 lines
5.3 KiB
Text
Raw Normal View History

2019-08-09 12:51:42 +00:00
#!/usr/bin/env bash
2020-04-28 10:03:01 +00:00
set -eou pipefail
2019-08-15 07:02:43 +00:00
2020-05-02 11:25:38 +00:00
BABASHKA_XMX=${BABASHKA_XMX:-"-J-Xmx4500m"}
2020-01-09 10:19:48 +00:00
2020-03-30 18:29:08 +00:00
if [ -z "$GRAALVM_HOME" ]; then
echo "Please set GRAALVM_HOME"
exit 1
2020-03-29 14:07:30 +00:00
fi
2020-04-28 10:03:01 +00:00
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
2020-04-30 10:39:44 +00:00
"$GRAALVM_HOME/bin/gu" install native-image
2019-08-09 12:51:42 +00:00
2020-01-09 10:11:12 +00:00
export JAVA_HOME=$GRAALVM_HOME
2020-05-23 12:53:28 +00:00
export PATH=$GRAALVM_HOME/bin:$PATH
2020-01-09 10:11:12 +00:00
2021-01-19 23:30:26 +00:00
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
2020-05-23 12:53:28 +00:00
if [ -z "$BABASHKA_JAR" ]; then
lein with-profiles +reflection,+native-image "do" run
lein "do" clean, uberjar
BABASHKA_JAR=${BABASHKA_JAR:-"target/babashka-$BABASHKA_VERSION-standalone.jar"}
fi
2020-04-28 10:03:01 +00:00
2020-03-30 18:29:08 +00:00
BABASHKA_BINARY=${BABASHKA_BINARY:-"bb"}
2020-03-29 14:07:30 +00:00
2020-04-30 10:39:44 +00:00
args=( "-jar" "$BABASHKA_JAR"
"-H:Name=$BABASHKA_BINARY"
"-H:+ReportExceptionStackTraces"
2021-04-04 14:22:45 +00:00
"-J-Dborkdude.dynaload.aot=true"
2020-04-30 10:39:44 +00:00
"-H:IncludeResources=BABASHKA_VERSION"
"-H:IncludeResources=SCI_VERSION"
"-H:ReflectionConfigurationFiles=reflection.json"
"--initialize-at-build-time"
2021-02-06 17:01:51 +00:00
#"-H:+PrintAnalysisCallTree"
# "-H:+DashboardAll"
2021-02-06 15:32:27 +00:00
# "-H:DashboardDump=reports/dump"
2021-02-06 17:01:51 +00:00
# "-H:+DashboardPretty"
# "-H:+DashboardJson"
2020-04-30 10:39:44 +00:00
"-H:Log=registerResource:"
"-H:EnableURLProtocols=http,https,jar"
2020-04-30 10:39:44 +00:00
"--enable-all-security-services"
"-H:+JNI"
"--verbose"
"--no-fallback"
"--no-server"
"--report-unsupported-elements-at-runtime"
"--initialize-at-run-time=org.postgresql.sspi.SSPIClient"
2021-02-26 21:17:24 +00:00
"--initialize-at-run-time=org.httpkit.client.ClientSslEngineFactory\$SSLHolder"
2020-12-05 19:56:12 +00:00
"--native-image-info"
"--verbose"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.sampled.spi.AudioFileReader"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.midi.spi.MidiFileReader"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.sampled.spi.MixerProvider"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.sampled.spi.FormatConversionProvider"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.sampled.spi.AudioFileWriter"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.midi.spi.MidiDeviceProvider"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.midi.spi.SoundbankReader"
"-H:ServiceLoaderFeatureExcludeServices=javax.sound.midi.spi.MidiFileWriter"
2020-04-30 10:39:44 +00:00
"$BABASHKA_XMX" )
2020-02-23 11:04:18 +00:00
2020-04-28 10:03:01 +00:00
BABASHKA_STATIC=${BABASHKA_STATIC:-}
2020-02-23 11:04:18 +00:00
if [ "$BABASHKA_STATIC" = "true" ]; then
args+=("--static" "--libc=musl")
# needs to be in a separate script as we need sudo and >> redirects in it wont work.
sudo bash script/setup-musl
ZLIB_VERSION="1.2.11"
curl -O -sL "https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz"
echo "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1 zlib-${ZLIB_VERSION}.tar.gz" | sha256sum --check
tar xf "zlib-${ZLIB_VERSION}.tar.gz"
cd "zlib-${ZLIB_VERSION}"
CC=musl-gcc ./configure --static --prefix=/usr/lib/x86_64-linux-musl/
make CC=musl-gcc
sudo make install
export CC=gcc
cd ..
# depending on GCC version, we will have different directories here.
# for example, for GCC 6.3.0 we will have:
# - /usr/lib/gcc/x86_64-linux-gnu/6
# - /usr/lib/gcc/x86_64-linux-gnu/6.3.0
for dest_dir in /usr/lib/gcc/x86_64-linux-gnu/*; do
sudo cp -f /usr/lib/x86_64-linux-musl/lib/libz.a "$dest_dir"
done
2020-02-23 11:04:18 +00:00
fi
2020-04-30 10:20:00 +00:00
BABASHKA_FEATURE_HSQLDB=${BABASHKA_FEATURE_HSQLDB:-}
2020-04-26 11:10:30 +00:00
if [ "$BABASHKA_FEATURE_HSQLDB" = "true" ]; then
2020-04-30 10:39:44 +00:00
args+=("-H:IncludeResources=org/hsqldb/.*\.properties" "-H:IncludeResources=org/hsqldb/.*\.sql")
2020-04-26 11:10:30 +00:00
fi
2021-05-06 10:53:59 +00:00
BABASHKA_FEATURE_SELMER=${BABASHKA_FEATURE_SELMER:-}
if [ "$BABASHKA_FEATURE_SELMER" = "true" ]; then
args+=("-H:IncludeResources=json.human.css")
fi
2020-04-30 10:39:44 +00:00
BABASHKA_LEAN=${BABASHKA_LEAN:-}
2020-04-30 10:20:00 +00:00
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_CORE_ASYNC="${BABASHKA_FEATURE_CORE_ASYNC:-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_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}"
2021-01-23 13:02:00 +00:00
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}"
2021-04-04 14:22:45 +00:00
export BABASHKA_FEATURE_REWRITE_CLJ="${BABASHKA_FEATURE_REWRITE_CLJ:-false}"
2021-05-06 10:53:59 +00:00
export BABASHKA_FEATURE_SELMER="${BABASHKA_FEATURE_SELMER:-false}"
2020-04-30 10:20:00 +00:00
fi
2020-04-30 10:39:44 +00:00
"$GRAALVM_HOME/bin/native-image" "${args[@]}"