From 9b7d13d5c0cb11039333b88ebfd4e8a40c473ea0 Mon Sep 17 00:00:00 2001 From: Daniele Conti Date: Sat, 27 Jan 2024 11:12:46 +0100 Subject: [PATCH 01/10] Cross build via construo --- gradle/libs.versions.toml | 5 +++- samples/standalone/build.gradle.kts | 42 +++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 714f9531b4..c45ccf5c48 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,6 @@ [versions] composeDesktop = "1.6.0-dev1369" +construo = "1.0.1" detekt = "1.23.1" dokka = "1.8.20" idea232 = "232.10227.8" @@ -13,7 +14,7 @@ kotlinterGradlePlugin = "3.16.0" kotlinxSerialization = "1.5.1" kotlinxBinaryCompat = "0.13.2" poko = "0.13.1" - +shadow = "8.1.1" [libraries] kotlinSarif = { module = "io.github.detekt.sarif4k:sarif4k", version.ref = "kotlinSarif" } kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } @@ -44,6 +45,7 @@ idea233 = ["ij-platform-ide-core-233", "ij-platform-ide-impl-233", "ij-platform- [plugins] composeDesktop = { id = "org.jetbrains.compose", version.ref = "composeDesktop" } +construo = { id = "io.github.fourlastor.construo", version.ref = "construo"} detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } ideaGradlePlugin = { id = "org.jetbrains.intellij", version.ref = "ideaGradlePlugin" } @@ -52,3 +54,4 @@ kotlinx-binaryCompatValidator = { id = "org.jetbrains.kotlinx.binary-compatibili kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } kotlinter = { id = "org.jmailen.kotlinter", version.ref = "kotlinterGradlePlugin" } poko = { id = "dev.drewhamilton.poko", version.ref = "poko" } +shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow"} diff --git a/samples/standalone/build.gradle.kts b/samples/standalone/build.gradle.kts index 6eb080e217..e61c18c192 100644 --- a/samples/standalone/build.gradle.kts +++ b/samples/standalone/build.gradle.kts @@ -1,10 +1,13 @@ @file:Suppress("UnstableApiUsage") import org.jetbrains.compose.desktop.application.dsl.TargetFormat +import io.github.fourlastor.construo.Target plugins { jewel alias(libs.plugins.composeDesktop) + alias(libs.plugins.construo) + alias(libs.plugins.shadow) } dependencies { @@ -52,3 +55,42 @@ tasks { } } } + +construo { + // name of the executable + name.set("jewel") + // human readable name, used for example in the `.app` name for MacOS + humanName.set("Jewel Standalone") + // version, required if not specified in project + version.set("1.0.0") + // main class, it wouldn't be required if compose used the application plugin + mainClass.set("org.jetbrains.jewel.samples.standalone.MainKt") + roast { + // required to get around compose using context class loader + useMainAsContextClassLoader.set(true) + } + jlink { + // required as it's used via string by compose, so it's not picked up by jlink automatically + modules.addAll("jdk.zipfs") + } + targets { + // Linux X64 + create("linuxX64") { + architecture.set(Target.Architecture.X86_64) + jdkUrl.set("https://cache-redirector.jetbrains.com/intellij-jbr/jbr-17.0.10-linux-x86-b1087.17.tar.gz") + } + // macOS M1 + create("macOsM1") { + architecture.set(Target.Architecture.AARCH64) + identifier.set("org.jetbrains.jewel.sample.standalone") + macIcon.set(file("icons/jewel.icns")) + jdkUrl.set("https://cache-redirector.jetbrains.com/intellij-jbr/jbr-17.0.10-osx-aarch64-b1087.17.tar.gz") + } + // Windows x64 + create("winx64") { + useGpuHint.set(false) + architecture.set(Target.Architecture.X86_64) + jdkUrl.set("https://cache-redirector.jetbrains.com/intellij-jbr/jbr-17.0.10-windows-x64-b1087.17.tar.gz") + } + } +} From 3750fa627b8559881af042d7cf584bdca408437a Mon Sep 17 00:00:00 2001 From: Daniele Conti Date: Thu, 8 Feb 2024 21:54:50 +0100 Subject: [PATCH 02/10] Update construo to 1.1.0 --- gradle/libs.versions.toml | 2 +- samples/standalone/build.gradle.kts | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c45ccf5c48..c52eed9da6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] composeDesktop = "1.6.0-dev1369" -construo = "1.0.1" +construo = "1.1.0" detekt = "1.23.1" dokka = "1.8.20" idea232 = "232.10227.8" diff --git a/samples/standalone/build.gradle.kts b/samples/standalone/build.gradle.kts index e61c18c192..16559083a2 100644 --- a/samples/standalone/build.gradle.kts +++ b/samples/standalone/build.gradle.kts @@ -2,6 +2,8 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat import io.github.fourlastor.construo.Target +import io.github.fourlastor.construo.ToolchainOptions +import io.github.fourlastor.construo.ToolchainVersion plugins { jewel @@ -73,24 +75,25 @@ construo { // required as it's used via string by compose, so it's not picked up by jlink automatically modules.addAll("jdk.zipfs") } + toolchain.set(ToolchainOptions( + ToolchainVersion.Companion.of(17), + JvmVendorSpec.JETBRAINS + )) targets { // Linux X64 create("linuxX64") { architecture.set(Target.Architecture.X86_64) - jdkUrl.set("https://cache-redirector.jetbrains.com/intellij-jbr/jbr-17.0.10-linux-x86-b1087.17.tar.gz") } // macOS M1 create("macOsM1") { architecture.set(Target.Architecture.AARCH64) identifier.set("org.jetbrains.jewel.sample.standalone") macIcon.set(file("icons/jewel.icns")) - jdkUrl.set("https://cache-redirector.jetbrains.com/intellij-jbr/jbr-17.0.10-osx-aarch64-b1087.17.tar.gz") } // Windows x64 create("winx64") { useGpuHint.set(false) architecture.set(Target.Architecture.X86_64) - jdkUrl.set("https://cache-redirector.jetbrains.com/intellij-jbr/jbr-17.0.10-windows-x64-b1087.17.tar.gz") } } } From 9f8d23bb08f54c7f5ab263c6524e4a17e3cfe33c Mon Sep 17 00:00:00 2001 From: Daniele Conti Date: Tue, 12 Mar 2024 12:01:46 +0100 Subject: [PATCH 03/10] Update name of win distribution --- samples/standalone/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/standalone/build.gradle.kts b/samples/standalone/build.gradle.kts index 586e4b2bae..9bcf15c6fb 100644 --- a/samples/standalone/build.gradle.kts +++ b/samples/standalone/build.gradle.kts @@ -95,7 +95,7 @@ construo { macIcon.set(file("icons/jewel.icns")) } // Windows x64 - create("winx64") { + create("winX64") { useGpuHint.set(false) architecture.set(Target.Architecture.X86_64) } From 4d2f9021f6b2556ad5954f3a6a9bc1f5706c18a8 Mon Sep 17 00:00:00 2001 From: Daniele Conti Date: Tue, 12 Mar 2024 12:02:01 +0100 Subject: [PATCH 04/10] Add distribution instructions --- docs/distribute.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 docs/distribute.md diff --git a/docs/distribute.md b/docs/distribute.md new file mode 100644 index 0000000000..fdf36029b4 --- /dev/null +++ b/docs/distribute.md @@ -0,0 +1,9 @@ +# Creating a self contained application + +You can package the standalone sample with the following gradle tasks: + +- Linux `samples:standalone:packageLinuxX64` +- Macos `samples:standalone:packageMacOsM1` +- Windows `samples:standalone:packageWinX64` + +The packaged application zip will be in the `build/construo/dist` folder. From be39fac4d34d0fc94fb86facc922c83181cd7606 Mon Sep 17 00:00:00 2001 From: Daniele Conti Date: Wed, 20 Nov 2024 21:02:23 +0100 Subject: [PATCH 05/10] Update construo to 1.5.1 --- gradle/libs.versions.toml | 2 +- samples/standalone/build.gradle.kts | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 333241e1c4..a341361cfe 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] commonmark = "0.24.0" composeDesktop = "1.7.1" -construo = "1.1.0" +construo = "1.5.1" detekt = "1.23.6" dokka = "1.9.20" idea = "243.21155.17" diff --git a/samples/standalone/build.gradle.kts b/samples/standalone/build.gradle.kts index 8af7ad40d8..8e50229a09 100644 --- a/samples/standalone/build.gradle.kts +++ b/samples/standalone/build.gradle.kts @@ -2,8 +2,6 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat import io.github.fourlastor.construo.Target -import io.github.fourlastor.construo.ToolchainOptions -import io.github.fourlastor.construo.ToolchainVersion plugins { jewel @@ -86,23 +84,22 @@ construo { // required as it's used via string by compose, so it's not picked up by jlink automatically modules.addAll("jdk.zipfs") } - toolchain.set(ToolchainOptions( - ToolchainVersion.Companion.of(17), - JvmVendorSpec.JETBRAINS - )) targets { // Linux X64 create("linuxX64") { + jdkUrl.set("https://cache-redirector.jetbrains.com/intellij-jbr/jbr_jcef-17.0.12-linux-x64-b1207.37.tar.gz") architecture.set(Target.Architecture.X86_64) } // macOS M1 - create("macOsM1") { + create("macosAarch64") { + jdkUrl.set("https://cache-redirector.jetbrains.com/intellij-jbr/jbr_jcef-17.0.12-osx-aarch64-b1207.37.tar.gz") architecture.set(Target.Architecture.AARCH64) identifier.set("org.jetbrains.jewel.sample.standalone") macIcon.set(file("icons/jewel.icns")) } // Windows x64 create("winX64") { + jdkUrl.set("https://cache-redirector.jetbrains.com/intellij-jbr/jbr_jcef-17.0.12-windows-x64-b1207.37.tar.gz") useGpuHint.set(false) architecture.set(Target.Architecture.X86_64) } From db7860fbcc457bbd882430f762006ad346658c97 Mon Sep 17 00:00:00 2001 From: Daniele Conti Date: Mon, 25 Nov 2024 18:23:34 +0100 Subject: [PATCH 06/10] Update documentation and target name --- DISTRIBUTING.md | 13 +++++++++++++ docs/distribute.md | 9 --------- samples/standalone/build.gradle.kts | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 DISTRIBUTING.md delete mode 100644 docs/distribute.md diff --git a/DISTRIBUTING.md b/DISTRIBUTING.md new file mode 100644 index 0000000000..6517c865e0 --- /dev/null +++ b/DISTRIBUTING.md @@ -0,0 +1,13 @@ +# Creating a self-contained application + +You can package the standalone sample with the following gradle tasks: + +- Linux `samples:standalone:packageLinuxX64` +- Macos `samples:standalone:packageMacOsAarch64` +- Windows `samples:standalone:packageWinX64` + +The packaged application zip will be in the `build/construo/dist` folder. + +## Signing and notarization on MacOS + +Signing of the final application must be done **after** creating a self-contained application, using the standard Apple tools, see the [official documentation](https://developer.apple.com/documentation/security/customizing-the-notarization-workflow). diff --git a/docs/distribute.md b/docs/distribute.md deleted file mode 100644 index fdf36029b4..0000000000 --- a/docs/distribute.md +++ /dev/null @@ -1,9 +0,0 @@ -# Creating a self contained application - -You can package the standalone sample with the following gradle tasks: - -- Linux `samples:standalone:packageLinuxX64` -- Macos `samples:standalone:packageMacOsM1` -- Windows `samples:standalone:packageWinX64` - -The packaged application zip will be in the `build/construo/dist` folder. diff --git a/samples/standalone/build.gradle.kts b/samples/standalone/build.gradle.kts index 8e50229a09..ebfed242fe 100644 --- a/samples/standalone/build.gradle.kts +++ b/samples/standalone/build.gradle.kts @@ -91,7 +91,7 @@ construo { architecture.set(Target.Architecture.X86_64) } // macOS M1 - create("macosAarch64") { + create("macOsAarch64") { jdkUrl.set("https://cache-redirector.jetbrains.com/intellij-jbr/jbr_jcef-17.0.12-osx-aarch64-b1207.37.tar.gz") architecture.set(Target.Architecture.AARCH64) identifier.set("org.jetbrains.jewel.sample.standalone") From 08e5db8ad6a1ecceabc6c28716ac3a7e4819ada5 Mon Sep 17 00:00:00 2001 From: Daniele Conti Date: Mon, 25 Nov 2024 18:31:19 +0100 Subject: [PATCH 07/10] Use correct name for macOS --- DISTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DISTRIBUTING.md b/DISTRIBUTING.md index 6517c865e0..717906d792 100644 --- a/DISTRIBUTING.md +++ b/DISTRIBUTING.md @@ -3,7 +3,7 @@ You can package the standalone sample with the following gradle tasks: - Linux `samples:standalone:packageLinuxX64` -- Macos `samples:standalone:packageMacOsAarch64` +- macOS `samples:standalone:packageMacOsAarch64` - Windows `samples:standalone:packageWinX64` The packaged application zip will be in the `build/construo/dist` folder. From b55c4daf31b5f64815ae192d91e9d0a168014f48 Mon Sep 17 00:00:00 2001 From: Daniele Conti Date: Mon, 25 Nov 2024 18:32:00 +0100 Subject: [PATCH 08/10] Use latest shadow version --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a341361cfe..6843cbbaac 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ kotlinxSerialization = "1.7.3" kotlinxBinaryCompat = "0.16.3" ktfmtGradlePlugin = "0.20.1" poko = "0.17.1" -shadow = "8.1.1" +shadow = "8.3.5" [libraries] commonmark-core = { module = "org.commonmark:commonmark", version.ref = "commonmark" } commonmark-ext-autolink = { module = "org.commonmark:commonmark-ext-autolink", version.ref = "commonmark" } @@ -57,4 +57,4 @@ kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", vers kotlinter = { id = "org.jmailen.kotlinter", version.ref = "kotlinterGradlePlugin" } ktfmt = { id = "com.ncorti.ktfmt.gradle", version.ref = "ktfmtGradlePlugin" } poko = { id = "dev.drewhamilton.poko", version.ref = "poko" } -shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow"} +shadow = { id = "com.gradleup.shadow", version.ref = "shadow"} From 22d7ab4e2cd25a88b4c09a096c7ce2d6df68b486 Mon Sep 17 00:00:00 2001 From: Daniele Conti Date: Wed, 25 Dec 2024 11:48:20 +0100 Subject: [PATCH 09/10] Update construo to 1.6.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6843cbbaac..15c796c51b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] commonmark = "0.24.0" composeDesktop = "1.7.1" -construo = "1.5.1" +construo = "1.6.0" detekt = "1.23.6" dokka = "1.9.20" idea = "243.21155.17" From 3d277f0fcd2bfddde599013c3575971efa766e09 Mon Sep 17 00:00:00 2001 From: Daniele Conti Date: Wed, 25 Dec 2024 11:48:29 +0100 Subject: [PATCH 10/10] Set roast not to run on first thread --- samples/standalone/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/samples/standalone/build.gradle.kts b/samples/standalone/build.gradle.kts index ebfed242fe..6fbdc58b43 100644 --- a/samples/standalone/build.gradle.kts +++ b/samples/standalone/build.gradle.kts @@ -77,6 +77,7 @@ construo { // main class, it wouldn't be required if compose used the application plugin mainClass.set("org.jetbrains.jewel.samples.standalone.MainKt") roast { + runOnFirstThread.set(false) // required to get around compose using context class loader useMainAsContextClassLoader.set(true) }