Skip to content

Commit

Permalink
Add Gradle tests for universal frameworks.
Browse files Browse the repository at this point in the history
  • Loading branch information
TadeasKriz committed Apr 13, 2024
1 parent 72cf41e commit 15034a5
Show file tree
Hide file tree
Showing 4 changed files with 153 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package co.touchlab.skie.test.suite.gradle.basic

import co.touchlab.skie.test.annotation.MatrixTest
import co.touchlab.skie.test.annotation.filter.Smoke
import co.touchlab.skie.test.annotation.type.GradleTests
import co.touchlab.skie.test.base.BaseGradleTests
import co.touchlab.skie.test.runner.BuildConfiguration
import co.touchlab.skie.test.template.Templates
import co.touchlab.skie.test.util.KotlinTarget
import co.touchlab.skie.test.util.KotlinVersion
import co.touchlab.skie.test.util.LinkMode
import co.touchlab.skie.test.util.presets

@Suppress("ClassName")
@Smoke
@GradleTests
class KotlinArtifactDsl_UniversalFramework_AllDarwinTargetsTests: BaseGradleTests() {
@MatrixTest
fun `single darwin preset and single universal framework artifact`(
kotlinVersion: KotlinVersion,
linkMode: LinkMode,
configuration: BuildConfiguration,
preset: KotlinTarget.Preset.Native.Darwin,
) {
// Universal frameworks require unique architectures, so we need to ignore Arm64 simulators.
val targetsWithoutArmSimulators = preset.targets.filter { target ->
when (target) {
KotlinTarget.Native.Ios.SimulatorArm64 -> false
KotlinTarget.Native.Tvos.SimulatorArm64 -> false

KotlinTarget.Native.Ios.X64,
KotlinTarget.Native.Ios.Arm64,
KotlinTarget.Native.MacOS.X64,
KotlinTarget.Native.MacOS.Arm64,
KotlinTarget.Native.Tvos.X64,
KotlinTarget.Native.Tvos.Arm64 -> true
}
}

rootBuildFile(kotlinVersion) {
kotlin {
allDarwin()
}

kotlinArtifacts {
universalFramework(
kotlinVersion = kotlinVersion,
targets = targetsWithoutArmSimulators,
linkMode = linkMode,
buildConfiguration = configuration,
)
}
}

copyToCommonMain(Templates.basic)

runGradle()

targetsWithoutArmSimulators.forEach { target ->
buildSwift(
target = target,
frameworkParentPath = "build/out/fatframework/${configuration.name.lowercase()}",
template = Templates.basic,
)

if (target is KotlinTarget.Native.MacOS) {
runSwift()
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package co.touchlab.skie.test.suite.gradle.basic

import co.touchlab.skie.test.annotation.MatrixTest
import co.touchlab.skie.test.annotation.filter.Smoke
import co.touchlab.skie.test.annotation.type.GradleTests
import co.touchlab.skie.test.base.BaseGradleTests
import co.touchlab.skie.test.runner.BuildConfiguration
import co.touchlab.skie.test.template.Templates
import co.touchlab.skie.test.util.KotlinTarget
import co.touchlab.skie.test.util.KotlinVersion
import co.touchlab.skie.test.util.LinkMode

@Suppress("ClassName")
@Smoke
@GradleTests
class KotlinArtifactDsl_UniversalFramework_SingleTargetTests: BaseGradleTests() {
@MatrixTest
fun `single target`(
kotlinVersion: KotlinVersion,
target: KotlinTarget.Native.Darwin,
linkMode: LinkMode,
configuration: BuildConfiguration,
) {
rootBuildFile(kotlinVersion) {
kotlin {
target(target)
}

kotlinArtifacts {
universalFramework(
kotlinVersion = kotlinVersion,
targets = listOf(target),
linkMode = linkMode,
buildConfiguration = configuration,
)
}
}

copyToCommonMain(Templates.basic)

runGradle()

buildSwift(
target,
Templates.basic,
frameworkParentPath = "build/out/fatframework/${configuration.name.lowercase()}",
)

if (target is KotlinTarget.Native.MacOS) {
runSwift()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import co.touchlab.skie.test.runner.BuildConfiguration
import co.touchlab.skie.test.util.KotlinTarget
import co.touchlab.skie.test.util.KotlinVersion
import co.touchlab.skie.test.util.LinkMode
import co.touchlab.skie.test.util.needsOldLinker
import org.intellij.lang.annotations.Language

class BuildGradleBuilder(
Expand Down Expand Up @@ -149,7 +150,7 @@ class BuildGradleBuilder(
"framework(buildTypes = listOf(NativeBuildType.${buildConfiguration.name.uppercase()}))" {
+"isStatic = ${linkMode.isStatic}"
+"""freeCompilerArgs = freeCompilerArgs + listOf("-Xbinary=bundleId=gradle_test")"""
if (kotlinVersion.value.startsWith("1.8.") || kotlinVersion.value.startsWith("1.9.0")) {
if (kotlinVersion.needsOldLinker) {
+"""linkerOpts += "-ld64""""
}
}
Expand All @@ -175,7 +176,7 @@ class BuildGradleBuilder(
"toolOptions" {
+"""freeCompilerArgs.add("-Xbinary=bundleId=gradle_test")"""
}
if (kotlinVersion.value.startsWith("1.8.") || kotlinVersion.value.startsWith("1.9.0")) {
if (kotlinVersion.needsOldLinker) {
+"""linkerOptions += "-ld64""""
}
}
Expand All @@ -196,7 +197,28 @@ class BuildGradleBuilder(
"toolOptions" {
+"""freeCompilerArgs.add("-Xbinary=bundleId=gradle_test")"""
}
if (kotlinVersion.value.startsWith("1.8.") || kotlinVersion.value.startsWith("1.9.0")) {
if (kotlinVersion.needsOldLinker) {
+"""linkerOptions += "-ld64""""
}
}
}

fun universalFramework(
kotlinVersion: KotlinVersion,
targets: List<KotlinTarget.Native>,
linkMode: LinkMode,
buildConfiguration: BuildConfiguration,
) {
imports.add("org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType")

"Native.FatFramework" {
+"targets(${targets.joinToString { it.id }})"
+"modes(${buildConfiguration.toString().uppercase()})"
+"isStatic = ${linkMode.isStatic}"
"toolOptions" {
+"""freeCompilerArgs.add("-Xbinary=bundleId=gradle_test")"""
}
if (kotlinVersion.needsOldLinker) {
+"""linkerOptions += "-ld64""""
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package co.touchlab.skie.test.util

val KotlinVersion.needsOldLinker: Boolean
get() = value.startsWith("1.8.") || value.startsWith("1.9.0")

0 comments on commit 15034a5

Please sign in to comment.