diff --git a/pgpainless-cli/additional-native-metadata/._include-resources.json b/pgpainless-cli/additional-native-metadata/._include-resources.json new file mode 100644 index 00000000..a9f75c28 Binary files /dev/null and b/pgpainless-cli/additional-native-metadata/._include-resources.json differ diff --git a/pgpainless-cli/additional-native-metadata/._reflection.json b/pgpainless-cli/additional-native-metadata/._reflection.json new file mode 100644 index 00000000..a9f75c28 Binary files /dev/null and b/pgpainless-cli/additional-native-metadata/._reflection.json differ diff --git a/pgpainless-cli/additional-native-metadata/include-resources.json b/pgpainless-cli/additional-native-metadata/include-resources.json new file mode 100644 index 00000000..42c2e3ce --- /dev/null +++ b/pgpainless-cli/additional-native-metadata/include-resources.json @@ -0,0 +1,9 @@ +{ + "resources": { + "includes": [ + { + "pattern": "org/bouncycastle/.*" + } + ] + } +} diff --git a/pgpainless-cli/additional-native-metadata/reflection.json b/pgpainless-cli/additional-native-metadata/reflection.json new file mode 100644 index 00000000..2e73df2a --- /dev/null +++ b/pgpainless-cli/additional-native-metadata/reflection.json @@ -0,0 +1,17 @@ +[ + { + "name" : "org.bouncycastle.jce.provider.BouncyCastleProvider", + "allDeclaredMethods" : true, + "allDeclaredConstructors" : true + }, + { + "name" : "org.bouncycastle.openpgp.*", + "allDeclaredMethods" : true, + "allDeclaredConstructors" : true + }, + { + "name": "org.bouncycastle.crypto.digests.SHA256Digest", + "allDeclaredConstructors": true, + "allDeclaredMethods": true + } +] diff --git a/pgpainless-cli/build.gradle b/pgpainless-cli/build.gradle index 3d9a6a09..3c19c0e1 100644 --- a/pgpainless-cli/build.gradle +++ b/pgpainless-cli/build.gradle @@ -5,6 +5,7 @@ plugins { id 'application' id "com.github.johnrengelman.shadow" version "6.1.0" + id 'org.graalvm.buildtools.native' version '0.10.3' } def generatedVersionDir = "${buildDir}/generated-version" @@ -78,4 +79,28 @@ run { } } +graalvmNative { + binaries { + main { + imageName = "GraalVM-Native-pgpainless" + mainClass = "$mainClassName" + buildArgs.add("-O4") + buildArgs.add('-H:ConfigurationFileDirectories=../../../build/resources/main/META-INF/native-image/') + buildArgs.add('--no-fallback') + buildArgs.add('--verbose') + buildArgs.add('-H:+BuildReport') + buildArgs.add('-J-XshowSettings:vm') + buildArgs.add('--report-unsupported-elements-at-runtime') + buildArgs.add('-H:+ReportExceptionStackTraces') + buildArgs.add('--initialize-at-build-time=org.bouncycastle') + buildArgs.add('--initialize-at-build-time=org.bouncycastle.jce.provider.BouncyCastleProvider') + buildArgs.add('-H:ReflectionConfigurationFiles=../../../additional-native-metadata/reflection.json') + buildArgs.add('-H:ResourceConfigurationFiles=../../../additional-native-metadata/include-resources.json') + } + } + binaries.all { + buildArgs.add("--verbose") + } +} + // tasks."jar".dependsOn(":pgpainless-core:assemble", ":pgpainless-sop:assemble")