[Gradle] Use SingleActionPerProject instead runOnceAfterEvaluated
To create fat frameworks for all targets. That should be called only single time KT-55751 Verification Pending KT-56450 Verification Pending
This commit is contained in:
committed by
Space Team
parent
92cc13961f
commit
a2e5fa64dc
+5
-2
@@ -47,6 +47,7 @@ import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
||||
import org.jetbrains.kotlin.gradle.testing.testTaskName
|
||||
import org.jetbrains.kotlin.gradle.utils.Xcode
|
||||
import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject
|
||||
import org.jetbrains.kotlin.gradle.utils.klibModuleName
|
||||
import org.jetbrains.kotlin.gradle.utils.newInstance
|
||||
import org.jetbrains.kotlin.konan.target.HostManager
|
||||
@@ -236,8 +237,10 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
|
||||
target.binaries.all {
|
||||
project.createLinkTask(it)
|
||||
}
|
||||
project.runOnceAfterEvaluated("Create fat frameworks") {
|
||||
project.multiplatformExtensionOrNull?.createFatFrameworks()
|
||||
SingleActionPerProject.run(project, "Create fat frameworks") {
|
||||
project.whenEvaluated {
|
||||
project.multiplatformExtensionOrNull?.createFatFrameworks()
|
||||
}
|
||||
}
|
||||
project.runOnceAfterEvaluated("Sync language settings for NativeLinkTask") {
|
||||
target.binaries.all { binary ->
|
||||
|
||||
+5
-2
@@ -53,14 +53,17 @@ internal fun Project.createFrameworkArtifact(binaryFramework: Framework, linkTas
|
||||
}
|
||||
|
||||
internal fun KotlinMultiplatformExtension.createFatFrameworks() {
|
||||
targets
|
||||
val frameworkGroups = targets
|
||||
.filterIsInstance<KotlinNativeTarget>()
|
||||
.filter { FatFrameworkTask.isSupportedTarget(it) }
|
||||
.flatMap { it.binaries }
|
||||
.filterIsInstance<Framework>()
|
||||
.groupBy { it.frameworkGroupDescription }
|
||||
.filter { (_, frameworks) -> frameworks.size > 1 }
|
||||
.forEach { (groupDescription, frameworks) -> project.createFatFramework(groupDescription, frameworks) }
|
||||
|
||||
for ((groupDescription, frameworkGroup) in frameworkGroups) {
|
||||
project.createFatFramework(groupDescription, frameworkGroup)
|
||||
}
|
||||
}
|
||||
|
||||
private val Framework.binaryFrameworkConfigurationName get() = lowerCamelCaseName(name, target.name)
|
||||
|
||||
+9
@@ -68,6 +68,15 @@ class FatFrameworksTest {
|
||||
iosArm64 { binaries.framework("foo", listOf(DEBUG, RELEASE)) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `fat framework grouping -- multiple build types`() = testFatFrameworkGrouping(
|
||||
"fooReleaseFrameworkIosFat",
|
||||
"fooDebugFrameworkIosFat",
|
||||
) {
|
||||
iosX64 { binaries.framework("foo", listOf(DEBUG, RELEASE)) }
|
||||
iosArm64 { binaries.framework("foo", listOf(DEBUG, RELEASE)) }
|
||||
}
|
||||
|
||||
private fun testFatFrameworkGrouping(
|
||||
vararg allExpectedFatFrameworks: String,
|
||||
configureTargets: KotlinMultiplatformExtension.() -> Unit,
|
||||
|
||||
Reference in New Issue
Block a user