Skip to content

Commit 3fec31a

Browse files
committed
Fix XCFrameworks artifacts support and FatFrameworkTask modulemap file.
1 parent 6bea75b commit 3fec31a

File tree

4 files changed

+44
-28
lines changed

4 files changed

+44
-28
lines changed

SKIE/skie-gradle/plugin/src/kgp_common/gradle_common/kotlin/co/touchlab/skie/plugin/coroutines/AddDependencyOnSkieRuntime.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import co.touchlab.skie.gradle_plugin.BuildConfig
44
import co.touchlab.skie.plugin.util.SkieTarget
55
import co.touchlab.skie.plugin.skieInternal
66
import co.touchlab.skie.plugin.util.lowerCamelCaseName
7+
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeXCFramework
78
import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractNativeLibrary
89
import org.jetbrains.kotlin.konan.target.KonanTarget
910
import org.jetbrains.kotlin.konan.target.presetName
@@ -14,10 +15,14 @@ internal fun SkieTarget.addDependencyOnSkieRuntime() {
1415
binary.compilation.apiConfigurationName,
1516
(binary as? AbstractNativeLibrary)?.exportConfigurationName,
1617
)
17-
is SkieTarget.Artifact -> listOf(
18-
lowerCamelCaseName(konanTarget.presetName, artifact.artifactName, "linkLibrary"),
19-
lowerCamelCaseName(konanTarget.presetName, artifact.artifactName, "linkExport"),
20-
)
18+
19+
is SkieTarget.Artifact -> {
20+
val nameSuffix = SkieTarget.Artifact.artifactNameSuffix(artifact)
21+
listOf(
22+
lowerCamelCaseName(konanTarget.presetName, artifact.artifactName + nameSuffix, "linkLibrary"),
23+
lowerCamelCaseName(konanTarget.presetName, artifact.artifactName + nameSuffix, "linkExport"),
24+
)
25+
}
2126
}
2227

2328
val dependency = if (project.skieInternal.runtimeVariantFallback.get()) {

SKIE/skie-gradle/plugin/src/kgp_common/gradle_common/kotlin/co/touchlab/skie/plugin/fatframework/FatFrameworkConfigurator.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,16 @@ internal object FatFrameworkConfigurator {
3131
private fun Project.configureFatFrameworkPatching() {
3232
tasks.withType<FatFrameworkTask>().configureEach {
3333
doLastOptimized {
34+
// There shouldn't be any real difference between the frameworks except for architecture, so we consider the first one "primary"
35+
val primaryFramework = frameworks.first()
3436
val target = FrameworkLayout(
3537
rootDir = fatFramework,
36-
isMacosFramework = frameworks.first().target.family == Family.OSX,
38+
isMacosFramework = primaryFramework.files.isMacosFramework,
39+
)
40+
41+
// FatFramewrokTask writes its own
42+
target.moduleFile.writeText(
43+
primaryFramework.files.moduleFile.readText()
3744
)
3845

3946
val frameworksByArchs = frameworks.associateBy { it.target.architecture }
@@ -56,10 +63,10 @@ internal object FatFrameworkConfigurator {
5663
}
5764
writer.appendLine(
5865
"""
59-
#else
60-
#error Unsupported platform
61-
#endif
62-
""".trimIndent(),
66+
#else
67+
#error Unsupported platform
68+
#endif
69+
""".trimIndent(),
6370
)
6471
}
6572
}

SKIE/skie-gradle/plugin/src/kgp_common/gradle_common/kotlin/co/touchlab/skie/plugin/util/SkieTarget.kt

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@ sealed interface SkieTarget {
114114
override fun addToCompilerClasspath(fileCollection: FileCollection) {
115115
task.configure {
116116
toolOptions.freeCompilerArgs.addAll(
117-
fileCollection.files.map { it.canonicalPath }.sorted().map { "-Xplugin=$it" }
117+
project.provider {
118+
fileCollection.files.map { it.canonicalPath }.sorted().map { "-Xplugin=$it" }
119+
}
118120
)
119121
}
120122
}
@@ -127,7 +129,13 @@ sealed interface SkieTarget {
127129
}
128130
}
129131

130-
private companion object {
132+
companion object {
133+
fun artifactNameSuffix(artifact: KotlinNativeArtifact): String = when (artifact) {
134+
is KotlinNativeFatFramework -> "ForFat"
135+
is KotlinNativeXCFramework -> "ForXCF"
136+
else -> ""
137+
}
138+
131139
fun linkTaskName(artifact: KotlinNativeArtifact, konanTarget: KonanTarget, buildType: NativeBuildType): String {
132140
return when (artifact) {
133141
is KotlinNativeLibrary -> {
@@ -141,28 +149,13 @@ sealed interface SkieTarget {
141149
konanTarget.presetName,
142150
)
143151
}
144-
is KotlinNativeFramework -> lowerCamelCaseName(
145-
"assemble",
146-
artifact.artifactName,
147-
buildType.visibleName,
148-
NativeOutputKind.FRAMEWORK.taskNameClassifier,
149-
konanTarget.presetName
150-
)
151-
is KotlinNativeFatFramework -> lowerCamelCaseName(
152-
"assemble",
153-
artifact.artifactName,
154-
buildType.visibleName,
155-
NativeOutputKind.FRAMEWORK.taskNameClassifier,
156-
konanTarget.presetName,
157-
"ForFat",
158-
)
159-
is KotlinNativeXCFramework -> lowerCamelCaseName(
152+
is KotlinNativeFramework, is KotlinNativeFatFramework, is KotlinNativeXCFramework -> lowerCamelCaseName(
160153
"assemble",
161154
artifact.artifactName,
162155
buildType.visibleName,
163156
NativeOutputKind.FRAMEWORK.taskNameClassifier,
164157
konanTarget.presetName,
165-
"ForXCF",
158+
artifactNameSuffix(artifact),
166159
)
167160
else -> error("Unknown KotlinNativeArtifact type: $this")
168161
}

dev-support/skie/mac/framework/build.gradle.kts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,17 @@ kotlinArtifacts {
108108
freeCompilerArgs.add("-Xbinary=bundleId=Kotlin")
109109
}
110110

111+
exportedLibraries.forEach {
112+
addModule(it)
113+
}
114+
}
115+
Native.XCFramework("Kotlin") {
116+
targets = setOf(macosArm64, macosX64)
117+
isStatic = true
118+
toolOptions {
119+
freeCompilerArgs.add("-Xbinary=bundleId=Kotlin")
120+
}
121+
111122
exportedLibraries.forEach {
112123
addModule(it)
113124
}

0 commit comments

Comments
 (0)