145 lines
5 KiB
Groovy
145 lines
5 KiB
Groovy
/*
|
|
* STAROPENSOURCE ENGINE SOURCE FILE
|
|
* Copyright (c) 2024 The StarOpenSource Engine Authors
|
|
* Licensed under the GNU Affero General Public License v3
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero 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/>.
|
|
*/
|
|
|
|
import org.mikeneck.graalvm.BuildTypeSelector
|
|
|
|
// Plugins
|
|
plugins {
|
|
id("java")
|
|
id("application")
|
|
id("io.freefair.lombok") version("${pluginLombok}")
|
|
id("io.github.goooler.shadow") version("${pluginShadow}")
|
|
id('org.mikeneck.graalvm-native-image') version("${pluginNativeImage}")
|
|
}
|
|
|
|
// Dependencies
|
|
dependencies {
|
|
// Lombok
|
|
compileOnly("org.projectlombok:lombok:${dependencyLombok}")
|
|
annotationProcessor("org.projectlombok:lombok:${dependencyLombok}")
|
|
|
|
// JetBrains Annotations
|
|
compileOnly("org.jetbrains:annotations:${dependencyJetbrainsAnnotations}")
|
|
|
|
// Project
|
|
implementation(project(":base"))
|
|
implementation(project(":rendering"))
|
|
runtimeOnly(project(":ansi"))
|
|
runtimeOnly(project(":slf4j-compat"))
|
|
}
|
|
|
|
// Fix delombok task
|
|
delombok.doFirst {
|
|
File target = file("${project.projectDir}/src/main/module-info.java")
|
|
File source = file("${project.projectDir}/src/main/java/module-info.java")
|
|
|
|
target.delete()
|
|
source.renameTo(target)
|
|
}
|
|
delombok.doLast {
|
|
File target = file("${project.projectDir}/src/main/java/module-info.java")
|
|
File source = file("${project.projectDir}/src/main/module-info.java")
|
|
|
|
target.delete()
|
|
source.renameTo(target)
|
|
}
|
|
|
|
// Configure output jar
|
|
jar {
|
|
manifest {
|
|
attributes(
|
|
"Main-Class": "de.staropensource.engine.testapp.Main"
|
|
)
|
|
}
|
|
}
|
|
|
|
// Configure application run task
|
|
application {
|
|
mainClass.set("de.staropensource.engine.testapp.Main")
|
|
applicationDefaultJvmArgs = [
|
|
"-XX:+UnlockDiagnosticVMOptions",
|
|
|
|
// Display GC log
|
|
//"-Xlog:gc",
|
|
|
|
// Log compilation of methods
|
|
//"-XX:+PrintCompilation",
|
|
//"-XX:+PrintInlining",
|
|
|
|
// Set log level to DIAGNOSTIC
|
|
"-Dsosengine.base.logLevel=diagnostic",
|
|
|
|
// Force writing to standard output
|
|
"-Dsosengine.base.logForceStandardOutput=true",
|
|
|
|
// Pass classes which should be included if
|
|
// reflective sclasspath scanning is disabled.
|
|
"-Dsosengine.base.initialIncludeSubsystemClasses=de.staropensource.engine.ansi.AnsiSubsystem,de.staropensource.engine.slf4j_compat.Slf4jCompatSubsystem,de.staropensource.engine.windowing.glfw.GlfwSubsystem",
|
|
|
|
// Force rendering platform
|
|
"-Dsosengine.rendering.initialPlatform=" + (project.hasProperty("renderingPlatform") ? project.property("renderingPlatform") as String : "any"),
|
|
|
|
// Force Jansi to write escape sequences
|
|
"-Djansi.mode=force",
|
|
]
|
|
}
|
|
|
|
// GraalVM native-image plugin configuration
|
|
nativeImage {
|
|
outputs.upToDateWhen { true }
|
|
|
|
graalVmHome = project.hasProperty("graalHome") ? project.property("graalHome") as String : System.getProperty("java.home")
|
|
executableName = "sosengine-testapp"
|
|
outputDirectory = file("build/bin")
|
|
setClasspath(shadowJar)
|
|
buildType { BuildTypeSelector 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\$"
|
|
}
|
|
}
|
|
|
|
// Register task for executing the generated binary
|
|
tasks.register('runNativeImage', Exec) {
|
|
outputs.upToDateWhen { false }
|
|
dependsOn(nativeImage)
|
|
|
|
args(
|
|
//"-Xlog:gc",
|
|
"-Dsosengine.base.logLevel=diagnostic",
|
|
"-Dsosengine.base.logForceStandardOutput=true",
|
|
"-Dsosengine.base.initialForceDisableClasspathScanning=true",
|
|
"-Dsosengine.base.initialIncludeSubsystemClasses=de.staropensource.engine.ansi.AnsiSubsystem,de.staropensource.engine.slf4j_compat.Slf4jCompatSubsystem,de.staropensource.engine.windowing.glfw.GlfwSubsystem",
|
|
"-Dsosengine.rendering.initialPlatform=" + (project.hasProperty("renderingPlatform") ? project.property("renderingPlatform") as String : "any"),
|
|
"-Djansi.mode=force",
|
|
)
|
|
executable("build/bin/sosengine-testapp")
|
|
}
|