project(":lwjgl3") { apply plugin: "org.graalvm.buildtools.native" dependencies { implementation "io.github.berstanio:gdx-svmhelper-backend-lwjgl3:$graalHelperVersion" implementation "io.github.berstanio:gdx-svmhelper-extension-box2d:$graalHelperVersion" } graalvmNative { binaries { main { imageName = appName mainClass = project.mainClassName requiredVersion = '23.0' buildArgs.add("-march=compatibility") jvmArgs.addAll("-Dfile.encoding=UTF8") sharedLibrary = false } } } run { doNotTrackState("Running the app should not be affected by Graal.") } // Modified from https://lyze.dev/2021/04/29/libGDX-Internal-Assets-List/ ; thanks again, Lyze! // This creates a resource-config.json file based on the contents of the assets folder (and the libGDX icons). // This file is used by Graal Native to embed those specific files. // This has to run before nativeCompile, so it runs at the start of an unrelated resource-handling command. generateResourcesConfigFile.doFirst { def assetsFolder = new File("${project.rootDir}/assets/") def lwjgl3 = project(':lwjgl3') def resFolder = new File("${lwjgl3.projectDir}/src/main/resources/META-INF/native-image/${lwjgl3.ext.appName}") resFolder.mkdirs() def resFile = new File(resFolder, "resource-config.json") resFile.delete() resFile.append( """{ "resources":{ "includes":[ { "pattern": ".*(""") // This adds every filename in the assets/ folder to a pattern that adds those files as resources. fileTree(assetsFolder).each { // The backslash-Q and backslash-E escape the start and end of a literal string, respectively. resFile.append("\\\\Q${it.name}\\\\E|") } // We also match all of the window icon images this way and the font files that are part of libGDX. resFile.append( """libgdx.+\\\\.png|lsans.+)" } ]}, "bundles":[] }""" ) } } project(":core") { dependencies { implementation "io.github.berstanio:gdx-svmhelper-annotations:$graalHelperVersion" } }