Skip to content

Commit

Permalink
Always enable library evolution for XCFramework targets.
Browse files Browse the repository at this point in the history
  • Loading branch information
TadeasKriz committed Apr 15, 2024
1 parent 971dc2d commit 576f1b2
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,7 @@ abstract class SkieGradlePlugin : Plugin<Project> {
project = project,
target = target,
binary = binary,
outputKind = SkieTarget.OutputKind.Framework,
)
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ internal class GradleAnalyticsManager(
val analyticsCollectorProvider = target.skieDirectories.map { skieDirectories ->
AnalyticsCollector(
skieBuildDirectory = skieDirectories.buildDirectory,
skieConfiguration = project.skieExtension.buildConfiguration(),
skieConfiguration = project.skieExtension.buildConfiguration(target.outputKind),
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ internal abstract class CreateSkieConfigurationTask : DefaultTask() {
fun registerTask(target: SkieTarget) {
val createConfiguration = target.registerSkieTargetBasedTask<CreateSkieConfigurationTask>("createConfiguration") {
configurationFile.set(target.skieBuildDirectory.skieConfiguration)
configuration.set(project.provider { project.skieExtension.buildConfiguration() })
configuration.set(project.provider { project.skieExtension.buildConfiguration(target.outputKind) })

dependsOn(target.createSkieBuildDirectoryTask)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,34 @@ package co.touchlab.skie.plugin.configuration

import co.touchlab.skie.configuration.SkieConfigurationFlag
import co.touchlab.skie.plugin.configuration.util.takeIf
import co.touchlab.skie.plugin.util.SkieTarget
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property
import javax.inject.Inject

abstract class SkieBuildConfiguration @Inject constructor(objects: ObjectFactory) {

/**
* Swift Library Evolution is required by XCFramework artifacts,
* so this flag is always true for any XCFramework target.
*/
val enableSwiftLibraryEvolution: Property<Boolean> = objects.property(Boolean::class.java).convention(false)
val enableParallelSwiftCompilation: Property<Boolean> = objects.property(Boolean::class.java).convention(true)
val enableConcurrentSkieCompilation: Property<Boolean> = objects.property(Boolean::class.java).convention(true)
val enableParallelSkieCompilation: Property<Boolean> = objects.property(Boolean::class.java).convention(true)

internal fun buildConfigurationFlags(): Set<SkieConfigurationFlag> =
internal fun buildConfigurationFlags(outputKind: SkieTarget.OutputKind): Set<SkieConfigurationFlag> =
setOfNotNull(
SkieConfigurationFlag.Build_SwiftLibraryEvolution takeIf enableSwiftLibraryEvolution,
decideSwiftLibraryEvolutionFlag(outputKind),
SkieConfigurationFlag.Build_ParallelSwiftCompilation takeIf enableParallelSwiftCompilation,
SkieConfigurationFlag.Build_ConcurrentSkieCompilation takeIf enableConcurrentSkieCompilation,
SkieConfigurationFlag.Build_ParallelSkieCompilation takeIf enableParallelSkieCompilation,
)

private fun decideSwiftLibraryEvolutionFlag(outputKind: SkieTarget.OutputKind) =
if (outputKind == SkieTarget.OutputKind.XCFramework) {
SkieConfigurationFlag.Build_SwiftLibraryEvolution
} else {
SkieConfigurationFlag.Build_SwiftLibraryEvolution takeIf enableSwiftLibraryEvolution
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package co.touchlab.skie.plugin.configuration

import co.touchlab.skie.configuration.SkieConfigurationFlag
import co.touchlab.skie.plugin.configuration.util.GradleSkieConfigurationData
import co.touchlab.skie.plugin.util.SkieTarget
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.model.ObjectFactory
Expand Down Expand Up @@ -58,15 +59,15 @@ open class SkieExtension @Inject constructor(objects: ObjectFactory) {
fun Project.createExtension(): SkieExtension =
project.extensions.create("skie", SkieExtension::class.java)

fun SkieExtension.buildConfiguration(): GradleSkieConfigurationData =
fun SkieExtension.buildConfiguration(outputKind: SkieTarget.OutputKind): GradleSkieConfigurationData =
GradleSkieConfigurationData(
enabledConfigurationFlags = (mergeConfigurationSetsFromConfigurations() + additionalConfigurationFlags.get()) - suppressedConfigurationFlags.get(),
enabledConfigurationFlags = (mergeConfigurationSetsFromConfigurations(outputKind) + additionalConfigurationFlags.get()) - suppressedConfigurationFlags.get(),
groups = features.buildGroups(),
)

private fun SkieExtension.mergeConfigurationSetsFromConfigurations() =
private fun SkieExtension.mergeConfigurationSetsFromConfigurations(outputKind: SkieTarget.OutputKind) =
analytics.buildConfigurationFlags() +
build.buildConfigurationFlags() +
build.buildConfigurationFlags(outputKind) +
debug.buildConfigurationFlags() +
features.buildConfigurationFlags() +
migration.buildConfigurationFlags()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ internal fun Project.skieTargetsOf(artifact: KotlinNativeArtifact): List<SkieTar
artifact = artifact,
konanTarget = artifact.target,
buildType = buildType,
outputKind = SkieTarget.OutputKind.Library,
)
}
} else {
Expand All @@ -39,6 +40,7 @@ internal fun Project.skieTargetsOf(artifact: KotlinNativeArtifact): List<SkieTar
artifact = artifact,
konanTarget = artifact.target,
buildType = buildType,
outputKind = SkieTarget.OutputKind.Framework,
)
}
} else {
Expand All @@ -52,6 +54,7 @@ internal fun Project.skieTargetsOf(artifact: KotlinNativeArtifact): List<SkieTar
artifact = artifact,
konanTarget = target,
buildType = buildType,
outputKind = SkieTarget.OutputKind.UniversalFramework,
)
}
}
Expand All @@ -63,6 +66,7 @@ internal fun Project.skieTargetsOf(artifact: KotlinNativeArtifact): List<SkieTar
artifact = artifact,
konanTarget = target,
buildType = buildType,
outputKind = SkieTarget.OutputKind.XCFramework,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ sealed interface SkieTarget {
val task: TaskProvider<out Task>
val konanTarget: KonanTarget
val buildType: NativeBuildType
val outputKind: OutputKind

val skieDirectories: Provider<SkieDirectories>

Expand All @@ -42,6 +43,7 @@ sealed interface SkieTarget {
override val project: Project,
val target: KotlinNativeTarget,
val binary: NativeBinary,
override val outputKind: OutputKind,
): SkieTarget {
override val konanTarget: KonanTarget = target.konanTarget

Expand Down Expand Up @@ -89,6 +91,7 @@ sealed interface SkieTarget {
val artifact: KotlinNativeArtifact,
override val konanTarget: KonanTarget,
override val buildType: NativeBuildType,
override val outputKind: OutputKind,
): SkieTarget {
override val name: String = "artifact: ${artifact.artifactName}, target: $konanTarget, buildType: $buildType"

Expand Down Expand Up @@ -162,6 +165,13 @@ sealed interface SkieTarget {
}
}
}

enum class OutputKind {
Framework,
XCFramework,
UniversalFramework,
Library,
}
}

val SkieTarget.skieBuildDirectory: Provider<SkieBuildDirectory>
Expand Down

0 comments on commit 576f1b2

Please sign in to comment.