Skip to content

Commit

Permalink
⭐ feat: enlarge support platforms
Browse files Browse the repository at this point in the history
  • Loading branch information
devngho committed Jan 22, 2025
1 parent 8a57a85 commit 583a8c0
Show file tree
Hide file tree
Showing 2 changed files with 230 additions and 31 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/gradle-central-depoly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
strategy:
fail-fast: false
matrix:
platform: [ macos-latest, ubuntu-latest, windows-latest ]
platform: [ macos-latest ]
runs-on: ${{ matrix.platform }}
needs: create_staging_repository
steps:
Expand Down
259 changes: 229 additions & 30 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
@file:OptIn(ExperimentalWasmDsl::class)

import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl

plugins {
kotlin("multiplatform") version "2.0.20"
id("org.jetbrains.dokka") version "1.9.20"
kotlin("multiplatform") version "2.1.0"
id("org.jetbrains.dokka") version "2.0.0"
id("io.kotest.multiplatform") version "5.9.1"
id("io.github.gradle-nexus.publish-plugin") version "1.3.0"
`maven-publish`
signing
}

group = "io.github.devngho"
version = "0.2.3"
version = "0.2.4"

repositories {
mavenCentral()
Expand All @@ -22,6 +26,23 @@ val javadocJar: TaskProvider<Jar> by tasks.registering(Jar::class) {
from(dokkaHtml.outputDirectory)
}

// copied from ionspin/kotlin-multiplatform-bignum (at build.gradle.kts), Apache 2.0
enum class HostOs {
LINUX, WINDOWS, MAC
}


fun getHostOsName(): HostOs {
val target = System.getProperty("os.name")
if (target == "Linux") return HostOs.LINUX
if (target.startsWith("Windows")) return HostOs.WINDOWS
if (target.startsWith("Mac")) return HostOs.MAC
throw GradleException("Unknown OS: $target")
}

val hostOs = getHostOsName()
// copy end

kotlin {
publishing {
signing {
Expand Down Expand Up @@ -92,18 +113,42 @@ kotlin {
}
}

val hostOs = System.getProperty("os.name")
val isMingwX64 = hostOs.startsWith("Windows")

when {
hostOs == "Mac OS X" -> macosX64()
hostOs == "Linux" -> linuxX64()
isMingwX64 -> mingwX64()
else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
// copied from ionspin/kotlin-multiplatform-bignum (at build.gradle.kts), Apache 2.0
// removed watchosDeviceArm64 and modified js
js {
nodejs()
browser()
}
linuxX64()
linuxArm64()
androidNativeX64()
androidNativeX86()
androidNativeArm32()
androidNativeArm64()
iosX64()
iosArm64()
iosSimulatorArm64()
macosX64()
macosArm64()
tvosArm64()
tvosSimulatorArm64()
tvosX64()
watchosArm32()
watchosArm64()
watchosX64()
watchosSimulatorArm64()
mingwX64()
// copy end

jvm()

wasmJs {
browser()
nodejs()
d8()
}
wasmWasi()

sourceSets {
val kotestVersion = "5.9.1"

Expand All @@ -121,28 +166,182 @@ kotlin {
}

tasks {
getByName("signKotlinMultiplatformPublication") {
dependsOn("publishJvmPublicationToSonatypeRepository", "publishJvmPublicationToMavenLocal")
}
// copied from ionspin/kotlin-multiplatform-bignum (at build.gradle.kts), Apache 2.0
// fixed for correct task dependencies in this project
all {
if (hostOs == HostOs.MAC) {
// macOS task dependencies
// @formatter:off
when (this.name) {
"signAndroidNativeArm32Publication" -> { this.mustRunAfter("signAndroidNativeArm64Publication") }
"signAndroidNativeArm64Publication" -> { this.mustRunAfter("signAndroidNativeX64Publication") }
"signAndroidNativeX64Publication" -> { this.mustRunAfter("signAndroidNativeX86Publication") }
"signAndroidNativeX86Publication" -> { this.mustRunAfter("signJsPublication") }
"signJsPublication" -> { this.mustRunAfter("signJvmPublication") }
"signJvmPublication" -> { this.mustRunAfter("signKotlinMultiplatformPublication") }
"signKotlinMultiplatformPublication" -> { this.mustRunAfter("signLinuxArm64Publication") }
"signLinuxArm64Publication" -> { this.mustRunAfter("signLinuxX64Publication") }
"signLinuxX64Publication" -> { this.mustRunAfter("signWasmJsPublication") }
"signWasmJsPublication" -> { this.mustRunAfter("signWasmWasiPublication") }
"signWasmWasiPublication" -> { this.mustRunAfter("signMingwX64Publication") }
"signMingwX64Publication" -> { this.mustRunAfter("signIosArm64Publication") }
"signIosArm64Publication" -> { this.mustRunAfter("signIosSimulatorArm64Publication") }
"signIosSimulatorArm64Publication" -> { this.mustRunAfter("signIosX64Publication") }
"signIosX64Publication" -> { this.mustRunAfter("signMacosArm64Publication") }
"signMacosArm64Publication" -> { this.mustRunAfter("signMacosX64Publication") }
"signMacosX64Publication" -> { this.mustRunAfter("signTvosArm64Publication") }
"signTvosArm64Publication" -> { this.mustRunAfter("signTvosSimulatorArm64Publication") }
"signTvosSimulatorArm64Publication" -> { this.mustRunAfter("signTvosX64Publication") }
"signTvosX64Publication" -> { this.mustRunAfter("signWatchosArm32Publication") }
"signWatchosArm32Publication" -> { this.mustRunAfter("signWatchosArm64Publication") }
"signWatchosArm64Publication" -> { this.mustRunAfter("signWatchosSimulatorArm64Publication") }
"signWatchosSimulatorArm64Publication" -> { this.mustRunAfter("signWatchosX64Publication") }
}
// @formatter:on

val hostOs = System.getProperty("os.name")
val isMingwX64 = hostOs.startsWith("Windows")
val nativeTargets = mutableListOf<String>()

if (hostOs == "Mac OS X") nativeTargets.add("MacosX64")
if (hostOs == "Linux") nativeTargets.add("LinuxX64")
if (isMingwX64) nativeTargets.add("MingwX64")

nativeTargets.forEach { target ->
getByName("sign${target}Publication") {
dependsOn(
"publishJvmPublicationToSonatypeRepository",
"publishJvmPublicationToMavenLocal",
"publishKotlinMultiplatformPublicationToMavenLocal",
"publishKotlinMultiplatformPublicationToSonatypeRepository"
)
if (this.name.startsWith("publish")) {
this.mustRunAfter("signAndroidNativeArm32Publication")
this.mustRunAfter("signAndroidNativeArm64Publication")
this.mustRunAfter("signAndroidNativeX64Publication")
this.mustRunAfter("signAndroidNativeX86Publication")
this.mustRunAfter("signJsPublication")
this.mustRunAfter("signJvmPublication")
this.mustRunAfter("signKotlinMultiplatformPublication")
this.mustRunAfter("signLinuxArm64Publication")
this.mustRunAfter("signLinuxX64Publication")
this.mustRunAfter("signWasmJsPublication")
this.mustRunAfter("signWasmWasiPublication")
this.mustRunAfter("signMingwX64Publication")
this.mustRunAfter("signIosArm64Publication")
this.mustRunAfter("signIosSimulatorArm64Publication")
this.mustRunAfter("signIosX64Publication")
this.mustRunAfter("signMacosArm64Publication")
this.mustRunAfter("signMacosX64Publication")
this.mustRunAfter("signTvosArm64Publication")
this.mustRunAfter("signTvosSimulatorArm64Publication")
this.mustRunAfter("signTvosX64Publication")
this.mustRunAfter("signWatchosArm32Publication")
this.mustRunAfter("signWatchosArm64Publication")
this.mustRunAfter("signWatchosSimulatorArm64Publication")
this.mustRunAfter("signWatchosX64Publication")
}

if (this.name.startsWith("compileTest")) {
this.mustRunAfter("signAndroidNativeArm32Publication")
this.mustRunAfter("signAndroidNativeArm64Publication")
this.mustRunAfter("signAndroidNativeX64Publication")
this.mustRunAfter("signAndroidNativeX86Publication")
this.mustRunAfter("signJsPublication")
this.mustRunAfter("signJvmPublication")
this.mustRunAfter("signKotlinMultiplatformPublication")
this.mustRunAfter("signLinuxArm64Publication")
this.mustRunAfter("signLinuxX64Publication")
this.mustRunAfter("signWasmJsPublication")
this.mustRunAfter("signWasmWasiPublication")
this.mustRunAfter("signMingwX64Publication")
this.mustRunAfter("signIosArm64Publication")
this.mustRunAfter("signIosSimulatorArm64Publication")
this.mustRunAfter("signIosX64Publication")
this.mustRunAfter("signMacosArm64Publication")
this.mustRunAfter("signMacosX64Publication")
this.mustRunAfter("signTvosArm64Publication")
this.mustRunAfter("signTvosSimulatorArm64Publication")
this.mustRunAfter("signTvosX64Publication")
this.mustRunAfter("signWatchosArm32Publication")
this.mustRunAfter("signWatchosArm64Publication")
this.mustRunAfter("signWatchosSimulatorArm64Publication")
}
if (this.name.startsWith("linkDebugTest")) {
this.mustRunAfter("signAndroidNativeArm32Publication")
this.mustRunAfter("signAndroidNativeArm64Publication")
this.mustRunAfter("signAndroidNativeX64Publication")
this.mustRunAfter("signAndroidNativeX86Publication")
this.mustRunAfter("signJsPublication")
this.mustRunAfter("signJvmPublication")
this.mustRunAfter("signKotlinMultiplatformPublication")
this.mustRunAfter("signLinuxArm64Publication")
this.mustRunAfter("signLinuxX64Publication")
this.mustRunAfter("signWasmJsPublication")
this.mustRunAfter("signWasmWasiPublication")
this.mustRunAfter("signMingwX64Publication")
this.mustRunAfter("signIosArm64Publication")
this.mustRunAfter("signIosSimulatorArm64Publication")
this.mustRunAfter("signIosX64Publication")
this.mustRunAfter("signMacosArm64Publication")
this.mustRunAfter("signMacosX64Publication")
this.mustRunAfter("signTvosArm64Publication")
this.mustRunAfter("signTvosSimulatorArm64Publication")
this.mustRunAfter("signTvosX64Publication")
this.mustRunAfter("signWatchosArm32Publication")
this.mustRunAfter("signWatchosArm64Publication")
this.mustRunAfter("signWatchosSimulatorArm64Publication")
}
} else {
// Windows || linux task dependecies

// @formatter:off
when (this.name) {
"signAndroidNativeArm32Publication" -> { this.mustRunAfter("signAndroidNativeArm64Publication") }
"signAndroidNativeArm64Publication" -> { this.mustRunAfter("signAndroidNativeX64Publication") }
"signAndroidNativeX64Publication" -> { this.mustRunAfter("signAndroidNativeX86Publication") }
"signAndroidNativeX86Publication" -> { this.mustRunAfter("signJsPublication") }
"signJsPublication" -> { this.mustRunAfter("signJvmPublication") }
"signJvmPublication" -> { this.mustRunAfter("signKotlinMultiplatformPublication") }
"signKotlinMultiplatformPublication" -> { this.mustRunAfter("signLinuxArm64Publication") }
"signLinuxArm64Publication" -> { this.mustRunAfter("signLinuxX64Publication") }
"signLinuxX64Publication" -> { this.mustRunAfter("signWasmJsPublication") }
"signWasmJsPublication" -> { this.mustRunAfter("signWasmWasiPublication") }
"signWasmWasiPublication" -> { this.mustRunAfter("signMingwX64Publication") }
}
// @formatter:on

if (this.name.startsWith("publish")) {
this.mustRunAfter("signAndroidNativeArm32Publication")
this.mustRunAfter("signAndroidNativeArm64Publication")
this.mustRunAfter("signAndroidNativeX64Publication")
this.mustRunAfter("signAndroidNativeX86Publication")
this.mustRunAfter("signJsPublication")
this.mustRunAfter("signJvmPublication")
this.mustRunAfter("signKotlinMultiplatformPublication")
this.mustRunAfter("signLinuxArm64Publication")
this.mustRunAfter("signLinuxX64Publication")
this.mustRunAfter("signWasmJsPublication")
this.mustRunAfter("signWasmWasiPublication")
this.mustRunAfter("signMingwX64Publication")
}

if (this.name.startsWith("compileTest")) {
this.mustRunAfter("signAndroidNativeArm32Publication")
this.mustRunAfter("signAndroidNativeArm64Publication")
this.mustRunAfter("signAndroidNativeX64Publication")
this.mustRunAfter("signAndroidNativeX86Publication")
this.mustRunAfter("signJsPublication")
this.mustRunAfter("signJvmPublication")
this.mustRunAfter("signKotlinMultiplatformPublication")
this.mustRunAfter("signLinuxArm64Publication")
this.mustRunAfter("signLinuxX64Publication")
this.mustRunAfter("signWasmJsPublication")
this.mustRunAfter("signWasmWasiPublication")
this.mustRunAfter("signMingwX64Publication")
}

if (this.name.startsWith("linkDebugTest")) {
this.mustRunAfter("signAndroidNativeArm32Publication")
this.mustRunAfter("signAndroidNativeArm64Publication")
this.mustRunAfter("signAndroidNativeX64Publication")
this.mustRunAfter("signAndroidNativeX86Publication")
this.mustRunAfter("signJsPublication")
this.mustRunAfter("signJvmPublication")
this.mustRunAfter("signKotlinMultiplatformPublication")
this.mustRunAfter("signLinuxArm64Publication")
this.mustRunAfter("signLinuxX64Publication")
this.mustRunAfter("signWasmJsPublication")
this.mustRunAfter("signWasmWasiPublication")
this.mustRunAfter("signMingwX64Publication")
}
}
}
// copy end

named<Test>("jvmTest") {
useJUnitPlatform()
Expand Down

0 comments on commit 583a8c0

Please sign in to comment.