115 lines
3.2 KiB
Text
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")
|
|
}
|