Engine/testapp/build.gradle.kts
JeremyStarTM 7a1c718270
Some checks failed
PRs & Pushes / test (push) Successful in 1m48s
PRs & Pushes / build-jars (push) Successful in 1m53s
PRs & Pushes / build-apidoc (push) Failing after 1m6s
Add GraalVM native-image
2024-12-25 17:20:41 +01:00

115 lines
3.2 KiB
Text

/*
* STAROPENSOURCE ENGINE SOURCE FILE
* Copyright (c) 2024 The StarOpenSource Engine Authors
* Licensed under the GNU General Public License v3.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// Plugins
plugins {
id("application")
id("org.mikeneck.graalvm-native-image") version("v1.4.0")
}
// Dependencies
dependencies {
// sos!engine
implementation(project(":base"))
implementation(project(":ansi"))
}
// Configure JAR
tasks.withType<Jar> {
manifest {
attributes["Main-Class"] = "de.staropensource.engine.testapp.Main"
}
}
// Configure application
application {
mainClass = "de.staropensource.engine.testapp.Main"
// JVM arguments
applicationDefaultJvmArgs = buildList {
// Unlock more VM options
add("-XX:+UnlockDiagnosticVMOptions")
add("-XX:+UnlockExperimentalVMOptions")
// VM settings
// -> Log garbage collection
if (
hasProperty("jvm.logGC")
&& property("jvm.logGC") as String == "true"
)
add("-Xlog:gc")
// -> Log JIT & AOT
if (
hasProperty("jvm.logJITandAOT")
&& property("jvm.logJITandAOT") as String == "true"
) {
add("-XX:+PrintCompilation")
add("-XX:+PrintInlining")
}
// -> Select garbage collector
if (hasProperty("jvm.garbageCollector"))
when (property("jvm.garbageCollector")) {
"epsilon" -> add("-XX:+UseEpsilonGC")
"serial" -> add("-XX:+UseSerialGC")
"g1" -> add("-XX:+UseG1GC")
}
// Jansi
add("-Djansi.mode=force")
}
}
// GraalVM native-image
// -> Configure
nativeImage {
outputs.upToDateWhen { true }
// for some reason using Gradle properties does not work
graalVmHome = System.getProperty("graalHome", System.getProperty("java.home"))
executableName = "sosengine-testapp"
outputDirectory = file("build/bin")
buildType { build ->
build.executable {
main = "de.staropensource.engine.testapp.Main"
}
}
arguments {
add("-H:+UnlockExperimentalVMOptions")
add("--color=always")
add("-march=native")
add("-O3")
add("--no-fallback")
add("--report-unsupported-elements-at-runtime")
add("--enable-http")
add("--enable-https")
add("-H:IncludeResources=.*properties\$")
}
}
// -> Run task
tasks.register("runNativeImage", Exec::class) {
outputs.upToDateWhen { false }
dependsOn(tasks.nativeImage)
args(application.applicationDefaultJvmArgs)
executable("build/bin/sosengine-testapp")
}