89 lines
3.0 KiB
Kotlin
Raw Normal View History

2020-05-31 20:36:06 +02:00
import org.apache.tools.ant.taskdefs.condition.Os
import org.gradle.api.NamedDomainObjectContainer
2020-05-31 20:36:06 +02:00
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
import org.gradle.nativeplatform.platform.internal.Architectures
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
2020-05-31 20:36:06 +02:00
import java.lang.RuntimeException
/**
* Created by Ugljesa Jovanovic
* ugljesa.jovanovic@ionspin.com
* on 30-May-2020
*/
fun isInIdea() = System.getProperty("idea.active") == "true"
fun isInTravis() = System.getenv("TRAVIS") == "true"
fun getHostOsName(): String {
val target = System.getProperty("os.name")
if (target == "Linux") return "linux"
if (target.startsWith("Windows")) return "windows"
if (target.startsWith("Mac")) return "macos"
return "unknown"
}
2020-05-31 20:36:06 +02:00
fun getHostArchitecture(): String {
val architecture =System.getProperty("os.arch")
DefaultNativePlatform.getCurrentArchitecture()
println("Arch: $architecture")
val resolvedArch = Architectures.forInput(architecture).name
println("Resolved arch: $resolvedArch")
return resolvedArch
}
fun KotlinMultiplatformExtension.isRunningInIdea(block : KotlinMultiplatformExtension.() -> Unit) {
if (isInIdea()) {
block(this)
}
}
2020-05-31 20:36:06 +02:00
fun KotlinMultiplatformExtension.runningOnLinuxx86_64(block : KotlinMultiplatformExtension.() -> Unit) {
if (getHostOsName() == "linux" && getHostArchitecture() == "x86-64") {
block(this)
}
}
2020-06-01 11:29:45 +02:00
fun KotlinMultiplatformExtension.runningOnLinuxArm64(block : KotlinMultiplatformExtension.() -> Unit) {
if (getHostOsName() == "linux" && getHostArchitecture() == "aarch64") {
2020-05-31 20:36:06 +02:00
block(this)
}
}
2020-06-01 11:29:45 +02:00
fun KotlinMultiplatformExtension.runningOnLinuxArm32(block : KotlinMultiplatformExtension.() -> Unit) {
2020-05-31 20:36:06 +02:00
if (getHostOsName() == "linux" && getHostArchitecture() == "arm-v7") {
block(this)
}
}
fun KotlinMultiplatformExtension.runningOnMacos(block : KotlinMultiplatformExtension.() -> Unit) {
if (getHostOsName() == "macos") {
block(this)
}
}
fun KotlinMultiplatformExtension.runningOnWindows(block : KotlinMultiplatformExtension.() -> Unit) {
if (getHostOsName() == "windows") {
block(this)
}
}
fun independentDependencyBlock(nativeDeps : KotlinDependencyHandler.() -> Unit) : KotlinDependencyHandler.() -> Unit {
return nativeDeps
}
/**
* On mac when two targets that have the same parent source set have cinterops defined, gradle creates a "common"
* target task for that source set metadata, even though it's a native source set, to work around that, we create
* an intermediary source set with the same set of dependancies
2020-06-01 13:11:06 +02:00
*
*/
fun NamedDomainObjectContainer<KotlinSourceSet>.createWorkaroundNativeMainSourceSet(name : String, nativeDeps : KotlinDependencyHandler.() -> Unit) : KotlinSourceSet {
return create("${name}Workaround") {
kotlin.srcDir("src/nativeMain")
dependencies {
nativeDeps.invoke(this)
}
}
}