diff --git a/build.gradle b/build.gradle index db952979..d3ae9667 100644 --- a/build.gradle +++ b/build.gradle @@ -75,8 +75,38 @@ task checkLibVersions { } } -task printRuntimeClasspath { +task buildNativeBinary { + dependsOn("build") doLast { - print sourceSets.main.runtimeClasspath.asPath + def graalVMHome = System.getenv("GRAALVM_HOME") + if (!graalVMHome) { + throw new GradleException('Required GRAALVM_HOME environment variable not set.') + } + def nativeBinaryOutputPath = "$buildDir/native-image" + def nativeBinaryName = "signal-cli" + + mkdir nativeBinaryOutputPath + + exec { + workingDir "." + commandLine "$graalVMHome/bin/native-image", + "-H:Path=$nativeBinaryOutputPath", + "-H:Name=$nativeBinaryName", + "-H:JNIConfigurationFiles=", + "-H:DynamicProxyConfigurationFiles=", + "-H:ReflectionConfigurationFiles=", + "-H:ResourceConfigurationFiles=", + "--no-fallback", + "--allow-incomplete-classpath", + "--report-unsupported-elements-at-runtime", + "--enable-url-protocols=http,https", + "--enable-https", + "--enable-all-security-services", + "-H:ResourceConfigurationFiles=graalvm-config-dir/resource-config.json", + "-H:ReflectionConfigurationFiles=graalvm-config-dir/reflect-config.json", + "-cp", + sourceSets.main.runtimeClasspath.asPath, + project.mainClassName + } } } diff --git a/native-build.sh b/native-build.sh deleted file mode 100755 index 5b8983ee..00000000 --- a/native-build.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh - -if [ -z "$GRAALVM_HOME" ]; then - echo "The GRAALVM_HOME environment variable is required.\n\n e.g. export GRAALVM_HOME=../graalvm-ce-java11-21.0.0/\n" 1>&2 - exit 1 -fi -export JAVA_HOME=$GRAALVM_HOME - -./gradlew clean build - -RUNTIME_CLASSPATH=$(./gradlew -q printRuntimeClasspath) - -mkdir -p build/native-image - -echo Compiling native-image... -$GRAALVM_HOME/bin/native-image \ - -cp "$RUNTIME_CLASSPATH"\ - -H:Path=build/native-image\ - -H:Name=signal-cli\ - -H:JNIConfigurationFiles=\ - -H:DynamicProxyConfigurationFiles=\ - -H:ReflectionConfigurationFiles=\ - -H:ResourceConfigurationFiles=\ - --no-fallback\ - --allow-incomplete-classpath\ - --report-unsupported-elements-at-runtime\ - --enable-url-protocols=http,https\ - --enable-https\ - --enable-all-security-services\ - -H:ResourceConfigurationFiles=graalvm-config-dir/resource-config.json\ - -H:ReflectionConfigurationFiles=graalvm-config-dir/reflect-config.json\ - org.asamk.signal.Main -