diff options
Diffstat (limited to 'desktop/build.gradle.kts')
| -rw-r--r-- | desktop/build.gradle.kts | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index 2705014..d72a319 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -41,3 +41,29 @@ tasks.withType<JavaExec>().configureEach { environment.putAll(System.getenv().filterKeys { it.startsWith("XDG_") || it.startsWith("ROOKERY_") }) standardInput = System.`in` // so `--cube monitor` can take commands } + +// One jar that runs anywhere: the app plus the native graphics libraries for every desktop platform. +// (Compose's own uber jar only carries the natives of the machine that built it.) +val universal: Configuration by configurations.creating { extendsFrom(configurations.runtimeClasspath.get()) } +dependencies { + universal(compose.desktop.linux_x64) + universal(compose.desktop.linux_arm64) + universal(compose.desktop.macos_x64) + universal(compose.desktop.macos_arm64) + universal(compose.desktop.windows_x64) +} + +interface ArchiveServices { @get:javax.inject.Inject val archives: ArchiveOperations } +val archives = objects.newInstance<ArchiveServices>().archives // an injected service, so the configuration cache can store it + +tasks.register<Jar>("universalJar") { + group = "distribution" + archiveBaseName = "rookery" + archiveClassifier = "universal" + manifest { attributes["Main-Class"] = "coffee.liz.rookery.desktop.MainKt" } + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(sourceSets.main.get().output) + val unzip = archives // a local, so the closure below captures the service and not the whole build script + from(universal.elements.map { files -> files.filter { it.asFile.name.endsWith(".jar") }.map { unzip.zipTree(it.asFile) } }) + exclude("META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA", "META-INF/INDEX.LIST") +} |
