aboutsummaryrefslogtreecommitdiff
path: root/build.gradle.kts
diff options
context:
space:
mode:
Diffstat (limited to 'build.gradle.kts')
-rw-r--r--build.gradle.kts377
1 files changed, 239 insertions, 138 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index 1a31f16..9bb3e09 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -6,15 +6,23 @@
* SPDX-License-Identifier: GPL-3.0-or-later
*/
-import com.google.devtools.ksp.gradle.KspTaskJvm
+import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
+import com.google.common.hash.Hashing
+import com.google.devtools.ksp.gradle.KspAATask
import com.google.gson.Gson
import com.google.gson.JsonObject
import moe.nea.licenseextractificator.LicenseDiscoveryTask
import moe.nea.mcautotranslations.gradle.CollectTranslations
import net.fabricmc.loom.LoomGradleExtension
+import net.fabricmc.loom.task.RemapJarTask
+import net.fabricmc.loom.task.RemapSourcesJarTask
+import net.fabricmc.loom.task.RunGameTask
+import org.apache.tools.ant.taskdefs.condition.Os
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
-import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+import org.jetbrains.kotlin.gradle.utils.extendsFrom
+import java.nio.charset.StandardCharsets
+import java.util.*
plugins {
java
@@ -23,16 +31,14 @@ plugins {
alias(libs.plugins.kotlin.plugin.serialization)
alias(libs.plugins.kotlin.plugin.powerassert)
alias(libs.plugins.kotlin.plugin.ksp)
- // alias(libs.plugins.loom)
- // TODO: use arch loom once they update to 1.8
- id("fabric-loom") version "1.9.2"
- alias(libs.plugins.shadow)
- id("moe.nea.licenseextractificator")
- id("moe.nea.mc-auto-translations") version "0.1.0"
+ alias(libs.plugins.loom)
+ alias(libs.plugins.shadow) apply false
+ id("firmament.common")
+ id("firmament.license-management")
+ alias(libs.plugins.mcAutoTranslations)
}
version = getGitTagInfo(libs.versions.minecraft.get())
-group = rootProject.property("maven_group").toString()
java {
withSourcesJar()
@@ -40,6 +46,7 @@ java {
languageVersion.set(JavaLanguageVersion.of(21))
}
}
+
loom {
mixin.useLegacyMixinAp.set(false)
}
@@ -50,54 +57,6 @@ tasks.withType(KotlinCompile::class) {
}
}
-allprojects {
- repositories {
- mavenCentral()
- maven("https://maven.terraformersmc.com/releases/")
- maven("https://maven.shedaniel.me")
- maven("https://maven.fabricmc.net")
- maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1")
- maven("https://api.modrinth.com/maven") {
- content {
- includeGroup("maven.modrinth")
- }
- }
- maven("https://repo.sleeping.town") {
- content {
- includeGroup("com.unascribed")
- }
- }
- ivy("https://github.com/HotswapProjects/HotswapAgent/releases/download") {
- patternLayout {
- artifact("[revision]/[artifact]-[revision].[ext]")
- }
- content {
- includeGroup("virtual.github.hotswapagent")
- }
- metadataSources {
- artifact()
- }
- }
- maven("https://server.bbkr.space/artifactory/libs-release")
- maven("https://repo.nea.moe/releases")
- maven("https://maven.notenoughupdates.org/releases")
- maven("https://repo.nea.moe/mirror")
- maven("https://jitpack.io/") {
- content {
- includeGroupByRegex("(com|io)\\.github\\..+")
- excludeModule("io.github.cottonmc", "LibGui")
- }
- }
- maven("https://repo.hypixel.net/repository/Hypixel/")
- maven("https://maven.azureaaron.net/snapshots")
- maven("https://maven.azureaaron.net/releases")
- maven("https://www.cursemaven.com")
- maven("https://maven.isxander.dev/releases") {
- name = "Xander Maven"
- }
- mavenLocal()
- }
-}
kotlin {
sourceSets.all {
languageSettings {
@@ -123,11 +82,21 @@ fun innerJarsOf(name: String, dependency: Dependency): Provider<FileTree> {
val collectTranslations by tasks.registering(CollectTranslations::class) {
this.baseTranslations.from(file("translations/en_us.json"))
+ this.baseTranslations.from(file("translations/extra.json"))
this.classes.from(sourceSets.main.get().kotlin.classesDirectory)
}
+val shadowJar = tasks.register("shadowJar", ShadowJar::class)
+val mergedSourceSetsJar = tasks.register("mergedSourceSetsJar", ShadowJar::class)
+
val compatSourceSets: MutableSet<SourceSet> = mutableSetOf()
-fun createIsolatedSourceSet(name: String, path: String = "compat/$name", isEnabled: Boolean = true): SourceSet {
+fun createIsolatedSourceSet(
+ name: String,
+ path: String = "compat/$name",
+ isEnabled: Boolean = true,
+ inheritsFromMain: Boolean = true,
+ enableKsp: Boolean = true,
+): SourceSet {
val ss = sourceSets.create(name) {
this.java.setSrcDirs(listOf(layout.projectDirectory.dir("src/$path/java")))
this.kotlin.setSrcDirs(listOf(layout.projectDirectory.dir("src/$path/java")))
@@ -135,8 +104,12 @@ fun createIsolatedSourceSet(name: String, path: String = "compat/$name", isEnabl
val mainSS = sourceSets.main.get()
val upperName = ss.name.capitalizeN()
afterEvaluate {
- tasks.named("ksp${upperName}Kotlin", KspTaskJvm::class) {
- this.options.add(SubpluginOption("apoption", "firmament.sourceset=${ss.name}"))
+ tasks.named("ksp${upperName}Kotlin", KspAATask::class) {
+ this.commandLineArgumentProviders.add { // TODO: update https://github.com/google/ksp/issues/2075
+ listOf("firmament.sourceset=${ss.name}")
+ }
+ if (!enableKsp)
+ this.enabled = false
}
tasks.named("compile${upperName}Kotlin", KotlinCompile::class) {
this.enabled = isEnabled
@@ -153,23 +126,30 @@ fun createIsolatedSourceSet(name: String, path: String = "compat/$name", isEnabl
}
configurations {
(ss.implementationConfigurationName) {
- extendsFrom(getByName(mainSS.compileClasspathConfigurationName))
+ if (inheritsFromMain)
+ extendsFrom(getByName(mainSS.compileClasspathConfigurationName))
}
(ss.annotationProcessorConfigurationName) {
extendsFrom(getByName(mainSS.annotationProcessorConfigurationName))
}
(mainSS.runtimeOnlyConfigurationName) {
- extendsFrom(getByName(ss.runtimeClasspathConfigurationName))
- }
- ("ksp$upperName") {
- extendsFrom(ksp.get())
+ if (isEnabled)
+ extendsFrom(getByName(ss.runtimeClasspathConfigurationName))
}
+ if (enableKsp)
+ ("ksp$upperName") {
+ extendsFrom(ksp.get())
+ }
}
dependencies {
- runtimeOnly(ss.output)
- (ss.implementationConfigurationName)(sourceSets.main.get().output)
+ if (isEnabled)
+ runtimeOnly(ss.output)
+ if (inheritsFromMain) {
+ (ss.implementationConfigurationName)(project.files(tasks.compileKotlin.map { it.destinationDirectory }))
+ (ss.implementationConfigurationName)(project.files(tasks.compileJava.map { it.destinationDirectory }))
+ }
}
- tasks.shadowJar {
+ mergedSourceSetsJar.configure {
from(ss.output)
}
// TODO: figure out why inheritances are not being respected by tiny kotlin names
@@ -177,8 +157,7 @@ fun createIsolatedSourceSet(name: String, path: String = "compat/$name", isEnabl
classpath.from(configurations.getByName(ss.compileClasspathConfigurationName))
}
collectTranslations {
- // TODO: this does not work, somehow
- this.classes.from(sourceSets.main.get().kotlin.classesDirectory)
+ this.classes.from(ss.kotlin.classesDirectory)
}
return ss
}
@@ -188,6 +167,11 @@ val SourceSet.modImplementationConfigurationName
loom.remapConfigurations.find {
it.targetConfigurationName.get() == this.implementationConfigurationName
}!!.sourceConfiguration
+val SourceSet.modRuntimeOnlyConfigurationName
+ get() =
+ loom.remapConfigurations.find {
+ it.targetConfigurationName.get() == this.runtimeOnlyConfigurationName
+ }!!.sourceConfiguration
val shadowMe by configurations.creating {
exclude(group = "org.jetbrains.kotlin")
@@ -214,24 +198,36 @@ val testAgent by configurations.creating {
isVisible = false
}
+fabricApi.configureTests {
+ createSourceSet.set(true)
+ enableClientGameTests.set(true)
+ modId.set("firmament-gametest")
+ eula.set(true)
+ username.set("CoolGuy123")
+}
+val gameTestSourceSet by sourceSets.named("gametest") {
+ configurations.named(compileClasspathConfigurationName).extendsFrom(configurations.testCompileClasspath)
+ configurations.named(runtimeClasspathConfigurationName).extendsFrom(configurations.testRuntimeClasspath)
+}
-val configuredSourceSet = createIsolatedSourceSet("configured",
- isEnabled = false) // Wait for update (also low prio, because configured sucks)
-val sodiumSourceSet = createIsolatedSourceSet("sodium", isEnabled = false)
-val citResewnSourceSet = createIsolatedSourceSet("citresewn", isEnabled = false) // TODO: Wait for update
+val sodiumSourceSet = createIsolatedSourceSet("sodium")
val yaclSourceSet = createIsolatedSourceSet("yacl")
-val explosiveEnhancementSourceSet =
- createIsolatedSourceSet("explosiveEnhancement", isEnabled = false) // TODO: wait for their port
val wildfireGenderSourceSet = createIsolatedSourceSet("wildfireGender")
+val jadeSourceSet = createIsolatedSourceSet("jade")
val modmenuSourceSet = createIsolatedSourceSet("modmenu")
-val reiSourceSet = createIsolatedSourceSet("rei")
+val reiSourceSet = createIsolatedSourceSet("rei", isEnabled = true)
val moulconfigSourceSet = createIsolatedSourceSet("moulconfig")
+val irisSourceSet = createIsolatedSourceSet("iris")
val customTexturesSourceSet = createIsolatedSourceSet("texturePacks", "texturePacks")
+val apiSourceSet = createIsolatedSourceSet("api", "api", inheritsFromMain = false, enableKsp = false)
dependencies {
// Minecraft dependencies
"minecraft"(libs.minecraft)
- "mappings"("net.fabricmc:yarn:${libs.versions.yarn.get()}:v2")
+ "mappings"(loom.layered {
+ officialMojangMappings()
+ parchment("org.parchmentmc.data:parchment-1.21.10:2025.10.12@zip")
+ })
// Hotswap Dependency
hotswap(libs.hotswap)
@@ -242,21 +238,24 @@ dependencies {
modImplementation(libs.moulconfig)
modImplementation(libs.manninghamMills)
modImplementation(libs.basicMath)
+ implementation(apiSourceSet.output)
+ (apiSourceSet.implementationConfigurationName)(loom.namedMinecraftJars)
+ (apiSourceSet.implementationConfigurationName)(libs.jspecify)
+ (apiSourceSet.implementationConfigurationName)(libs.jbAnnotations)
+ // configurations.forEach { println(it.name) }
include(libs.basicMath)
(modmenuSourceSet.modImplementationConfigurationName)(libs.modmenu)
- (explosiveEnhancementSourceSet.modImplementationConfigurationName)(libs.explosiveenhancement)
modImplementation(libs.hypixelmodapi)
include(libs.hypixelmodapi.fabric)
- compileOnly(project(":javaplugin"))
- annotationProcessor(project(":javaplugin"))
- implementation("com.google.auto.service:auto-service-annotations:1.1.1")
+ compileOnly(projects.javaplugin)
+ annotationProcessor(projects.javaplugin)
+ nonModImplentation("com.google.auto.service:auto-service-annotations:1.1.1")
ksp("dev.zacsweers.autoservice:auto-service-ksp:1.2.0")
include(libs.manninghamMills)
- include(libs.moulconfig)
-
+ shadowMe(libs.moulconfig)
annotationProcessor(libs.mixinextras)
- implementation(libs.mixinextras)
+ nonModImplentation(libs.mixinextras)
include(libs.mixinextras)
nonModImplentation(libs.nealisp)
@@ -264,36 +263,25 @@ dependencies {
modCompileOnly(libs.fabric.api)
modRuntimeOnly(libs.fabric.api.deprecated)
- modApi(libs.architectury)
modCompileOnly(libs.jarvis.api)
include(libs.jarvis.fabric)
+ (irisSourceSet.modImplementationConfigurationName)(libs.iris)
(wildfireGenderSourceSet.modImplementationConfigurationName)(libs.femalegender)
(wildfireGenderSourceSet.implementationConfigurationName)(customTexturesSourceSet.output)
- (configuredSourceSet.modImplementationConfigurationName)(libs.configured)
(sodiumSourceSet.modImplementationConfigurationName)(libs.sodium)
+ (sodiumSourceSet.implementationConfigurationName)(customTexturesSourceSet.output)
+ (jadeSourceSet.modImplementationConfigurationName)(libs.jade)
- (citResewnSourceSet.modImplementationConfigurationName)(
- innerJarsOf("citresewn", dependencies.create(libs.citresewn.get()))
- )
- (citResewnSourceSet.modImplementationConfigurationName)(libs.citresewn)
(yaclSourceSet.modImplementationConfigurationName)(libs.yacl)
// Actual dependencies
- (reiSourceSet.modImplementationConfigurationName)(libs.rei.api) {
- exclude(module = "architectury")
- exclude(module = "architectury-fabric")
- }
+
+ val reiDeps = libs.rei
+ (reiSourceSet.modImplementationConfigurationName)(reiDeps.api)
+ (reiSourceSet.modRuntimeOnlyConfigurationName)(reiDeps.fabric)
nonModImplentation(libs.repoparser)
shadowMe(libs.repoparser)
- fun ktor(mod: String) = "io.ktor:ktor-$mod-jvm:${libs.versions.ktor.get()}"
- // TODO: get rid of ktor. lowkey ballooning file size and like not neccessary at all for what i am doing.0
- transInclude(nonModImplentation(ktor("client-core"))!!)
- transInclude(nonModImplentation(ktor("client-java"))!!)
- transInclude(nonModImplentation(ktor("serialization-kotlinx-json"))!!)
- transInclude(nonModImplentation(ktor("client-content-negotiation"))!!)
- transInclude(nonModImplentation(ktor("client-encoding"))!!)
- transInclude(nonModImplentation(ktor("client-logging"))!!)
// Dev environment preinstalled mods
modLocalRuntime(libs.bundles.runtime.required)
@@ -306,26 +294,30 @@ dependencies {
}
- testImplementation("io.kotest:kotest-runner-junit5:6.0.0.M1")
- testAgent(project(":testagent", configuration = "shadow"))
+ testImplementation("net.fabricmc:fabric-loader-junit:${libs.versions.fabric.loader.get()}")
+ testAgent(files(tasks.getByPath(":testagent:jar")))
+
+ "gametestImplementation"(sourceSets.test.map { it.output })
- implementation(project(":symbols"))
- ksp(project(":symbols"))
+ implementation(projects.symbols)
+ ksp(projects.symbols)
}
loom {
clientOnlyMinecraftJar()
accessWidenerPath.set(project.file("src/main/resources/firmament.accesswidener"))
runs {
- removeIf { it.name != "client" }
+ removeIf { it.name == "server" }
configureEach {
property("fabric.log.level", "info")
property("firmament.debug", "true")
- property("firmament.classroots",
- compatSourceSets.joinToString(File.pathSeparator) {
- File(it.output.classesDirs.asPath).absolutePath
- })
+ property(
+ "firmament.classroots",
+ compatSourceSets.joinToString(File.pathSeparator) {
+ File(it.output.classesDirs.asPath).absolutePath
+ })
property("mixin.debug.export", "true")
+// property("mixin.debug", "true")
parseEnvFile(file(".env")).forEach { (t, u) ->
environmentVariable(t, u)
@@ -337,9 +329,9 @@ loom {
named("client") {
property("devauth.enabled", "true")
vmArg("-ea")
- vmArg("-XX:+AllowEnhancedClassRedefinition")
- vmArg("-XX:HotswapAgent=external")
- vmArg("-javaagent:${hotswap.resolve().single().absolutePath}")
+// vmArg("-XX:+AllowEnhancedClassRedefinition")
+// vmArg("-XX:HotswapAgent=external")
+// vmArg("-javaagent:${hotswap.resolve().single().absolutePath}")
}
}
}
@@ -358,12 +350,16 @@ val updateTestRepo by tasks.registering {
doLast {
val propertiesFile = rootProject.file("gradle.properties")
val json =
- Gson().fromJson(uri("https://api.github.com/repos/NotEnoughUpdates/NotEnoughUpdates-REPO/branches/master")
- .toURL().readText(), JsonObject::class.java)
+ Gson().fromJson(
+ uri("https://api.github.com/repos/NotEnoughUpdates/NotEnoughUpdates-REPO/branches/master")
+ .toURL().readText(), JsonObject::class.java
+ )
val latestSha = json["commit"].asJsonObject["sha"].asString
var text = propertiesFile.readText()
- text = text.replace("firmament\\.compiletimerepohash=[^\n]*".toRegex(),
- "firmament.compiletimerepohash=$latestSha")
+ text = text.replace(
+ "firmament\\.compiletimerepohash=[^\n]*".toRegex(),
+ "firmament.compiletimerepohash=$latestSha"
+ )
propertiesFile.writeText(text)
}
}
@@ -377,8 +373,10 @@ tasks.test {
doFirst {
wd.mkdirs()
wd.resolve("config").deleteRecursively()
- systemProperty("firmament.testrepo",
- downloadTestRepo.flatMap { it.outputDirectory.asFile }.map { it.absolutePath }.get())
+ systemProperty(
+ "firmament.testrepo",
+ downloadTestRepo.flatMap { it.outputDirectory.asFile }.map { it.absolutePath }.get()
+ )
jvmArgs("-javaagent:${testAgent.singleFile.absolutePath}")
}
systemProperty("jdk.attach.allowAttachSelf", "true")
@@ -396,44 +394,84 @@ tasks.withType<JavaCompile> {
this.targetCompatibility = "21"
options.encoding = "UTF-8"
val module = "ALL-UNNAMED"
- options.forkOptions.jvmArgs!!.addAll(listOf(
- "--add-exports=jdk.compiler/com.sun.tools.javac.util=$module",
- "--add-exports=jdk.compiler/com.sun.tools.javac.comp=$module",
- "--add-exports=jdk.compiler/com.sun.tools.javac.tree=$module",
- "--add-exports=jdk.compiler/com.sun.tools.javac.api=$module",
- "--add-exports=jdk.compiler/com.sun.tools.javac.code=$module",
- ))
+ options.forkOptions.jvmArgs!!.addAll(
+ listOf(
+ "--add-exports=jdk.compiler/com.sun.tools.javac.util=$module",
+ "--add-exports=jdk.compiler/com.sun.tools.javac.comp=$module",
+ "--add-exports=jdk.compiler/com.sun.tools.javac.tree=$module",
+ "--add-exports=jdk.compiler/com.sun.tools.javac.api=$module",
+ "--add-exports=jdk.compiler/com.sun.tools.javac.code=$module",
+ )
+ )
options.isFork = true
afterEvaluate {
options.compilerArgs.add("-Xplugin:IntermediaryNameReplacement mappingFile=${LoomGradleExtension.get(project).mappingsFile.absolutePath} sourceNs=named")
}
}
+fun AbstractArchiveTask.badjar() = destinationDirectory.set(layout.buildDirectory.dir("badjars"))
tasks.jar {
- destinationDirectory.set(layout.buildDirectory.dir("badjars"))
+ badjar()
archiveClassifier.set("slim")
}
+val apiJarNamed = tasks.register("apiJarNamed", Jar::class) {
+ badjar()
+ archiveClassifier = "api-named"
+ from(apiSourceSet.output)
+}
+val apiJar = tasks.register("apiJar", RemapJarTask::class) {
+ inputFile = apiJarNamed.flatMap { it.archiveFile }
+ addNestedDependencies = false
+ archiveClassifier = "api"
+}
+val apiSourcesJarNamed = tasks.register("apiSourcesJarNamed", Jar::class) {
+ badjar()
+ from(apiSourceSet.allSource)
+ archiveClassifier = "api-sources-named"
+}
+val apiSourcesJar = tasks.register("apiSourceSJar", RemapSourcesJarTask::class) {
+ inputFile = apiSourcesJarNamed.flatMap { it.archiveFile }
+ archiveClassifier = "api-sources"
+}
+
+tasks.assemble {
+ dependsOn(apiJar)
+ dependsOn(apiSourcesJar)
+}
-tasks.shadowJar {
+mergedSourceSetsJar.configure {
+ from(zipTree(tasks.jar.flatMap { it.archiveFile }))
+ destinationDirectory.set(layout.buildDirectory.dir("badjars"))
+ archiveClassifier.set("merged-source-sets")
+ mergeServiceFiles()
+}
+shadowJar.configure {
+ from(zipTree(tasks.remapJar.flatMap { it.archiveFile }))
configurations = listOf(shadowMe)
- archiveClassifier.set("dev")
+ archiveClassifier.set("")
relocate("io.github.moulberry.repo", "moe.nea.firmament.deps.repo")
- destinationDirectory.set(layout.buildDirectory.dir("badjars"))
+ relocate("io.github.notenoughupdates.moulconfig", "moe.nea.firmament.deps.moulconfig")
mergeServiceFiles()
+ transform<FabricModTransform>()
}
tasks.remapJar {
// injectAccessWidener.set(true)
- inputFile.set(tasks.shadowJar.flatMap { it.archiveFile })
- dependsOn(tasks.shadowJar)
- archiveClassifier.set("")
+ inputFile.set(mergedSourceSetsJar.flatMap { it.archiveFile })
+ dependsOn(mergedSourceSetsJar)
+ destinationDirectory.set(layout.buildDirectory.dir("badjars"))
+ archiveClassifier.set("remapped")
}
+tasks.assemble { dependsOn(shadowJar) }
+
+
tasks.processResources {
val replacements = listOf(
"version" to project.version.toString(),
"minecraft_version" to libs.versions.minecraft.get(),
"fabric_kotlin_version" to libs.versions.fabric.kotlin.get(),
+ "fabric_api_version" to libs.versions.fabric.api.get(),
"rei_version" to libs.versions.rei.get()
)
replacements.forEach { (key, value) -> inputs.property(key, value) }
@@ -445,17 +483,26 @@ tasks.processResources {
from(collectTranslations) {
into("assets/firmament/lang")
}
+ from(project.files("translations/languages/")) {
+ into("assets/firmament/lang")
+ }
}
tasks.scanLicenses {
scanConfiguration(nonModImplentation)
scanConfiguration(configurations.modCompileClasspath.get())
+ compatSourceSets.forEach {
+ scanConfiguration(it.modImplementationConfigurationName.get())
+ }
outputFile.set(layout.buildDirectory.file("LICENSES-FIRMAMENT.json"))
licenseFormatter.set(moe.nea.licenseextractificator.JsonLicenseFormatter())
}
-tasks.create("printAllLicenses", LicenseDiscoveryTask::class.java, licensing).apply {
+tasks.register("printAllLicenses", LicenseDiscoveryTask::class.java, licensing).configure {
outputFile.set(layout.buildDirectory.file("LICENSES-FIRMAMENT.txt"))
licenseFormatter.set(moe.nea.licenseextractificator.TextLicenseFormatter())
+ compatSourceSets.forEach {
+ scanConfiguration(it.modImplementationConfigurationName.get())
+ }
scanConfiguration(nonModImplentation)
scanConfiguration(configurations.modCompileClasspath.get())
doLast {
@@ -463,10 +510,64 @@ tasks.create("printAllLicenses", LicenseDiscoveryTask::class.java, licensing).ap
}
outputs.upToDateWhen { false }
}
+fun patchRenderDoc(
+ javaLauncher: JavaLauncher,
+): JavaLauncher {
+ val wrappedJavaExecutable = javaLauncher.executablePath.asFile.absolutePath
+ require("\"" !in wrappedJavaExecutable)
+ val hashBytes = Hashing.sha256().hashString(wrappedJavaExecutable, StandardCharsets.UTF_8)
+ val hash = Base64.getUrlEncoder().encodeToString(hashBytes.asBytes())
+ .replace("=", "")
+ val wrapperJavaRoot = rootProject.layout.buildDirectory
+ .dir("binaries/renderdoc-wrapped-java/$hash/")
+ .get()
+ val isWindows = Os.isFamily(Os.FAMILY_WINDOWS)
+ val wrapperJavaExe =
+ if (isWindows) wrapperJavaRoot.file("java.cmd")
+ else wrapperJavaRoot.file("java")
+ return object : JavaLauncher {
+ override fun getMetadata(): JavaInstallationMetadata {
+ return object : JavaInstallationMetadata by javaLauncher.metadata {
+ override fun isCurrentJvm(): Boolean {
+ return false
+ }
+ }
+ }
+
+ override fun getExecutablePath(): RegularFile {
+ val fileF = wrapperJavaExe.asFile
+ if (!fileF.exists()) {
+ fileF.parentFile.mkdirs()
+ if (isWindows) {
+ fileF.writeText(
+ """
+ setlocal enableextensions
+ start "" renderdoccmd.exe capture --opt-hook-children --wait-for-exit --working-dir . "$wrappedJavaExecutable" %*
+ endlocal
+ """.trimIndent()
+ )
+ } else {
+ fileF.writeText(
+ """
+ #!/usr/bin/env bash
+ exec renderdoccmd capture --opt-hook-children --wait-for-exit --working-dir . "$wrappedJavaExecutable" "$@"
+ """.trimIndent()
+ )
+ fileF.setExecutable(true)
+ }
+ }
+ return wrapperJavaExe
+ }
+ }
+}
+tasks.runClient {
+ javaLauncher.set(
+ javaToolchains.launcherFor(java.toolchain)
+// .map { patchRenderDoc(it) }
+ )
+}
tasks.withType<AbstractArchiveTask>().configureEach {
isPreserveFileTimestamps = false
isReproducibleFileOrder = true
}
-
-licensing.addExtraLicenseMatchers()