From 3be2eb9b31a239b3290814634902ee9fbac45365 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Mon, 16 Oct 2023 18:28:18 +0200 Subject: [PATCH] [Gradle] Implement CreateFatFrameworksSetupAction KT-61634 --- .../gradle/plugin/mpp/KotlinMultiplatformPlugin.kt | 2 -- .../gradle/plugin/registerKotlinPluginExtensions.kt | 4 ++++ .../targets/native/configureBinaryFrameworks.kt | 13 +++++++------ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index 89bc94b1341..efb4418101d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinWasmTargetPreset -import org.jetbrains.kotlin.gradle.targets.native.createFatFrameworks import org.jetbrains.kotlin.gradle.targets.native.internal.setupCInteropCommonizedCInteropApiElementsConfigurations import org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.registerKotlinArtifactsExtension import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool @@ -77,7 +76,6 @@ class KotlinMultiplatformPlugin : Plugin { project.locateOrRegisterIdeResolveDependenciesTask() project.launch { project.setupCInteropCommonizedCInteropApiElementsConfigurations() } project.addBuildListenerForXcode() - project.whenEvaluated { kotlinMultiplatformExtension.createFatFrameworks() } } private fun exportProjectStructureMetadataForOtherBuilds( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt index 96e09beb766..7cb74eb9e4e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.PreHmppDependenci import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.UnusedSourceSetsChecker import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.WasmSourceSetsNotFoundChecker import org.jetbrains.kotlin.gradle.targets.js.npm.AddNpmDependencyExtensionProjectSetupAction +import org.jetbrains.kotlin.gradle.targets.native.CreateFatFrameworksSetupAction import org.jetbrains.kotlin.gradle.tooling.RegisterBuildKotlinToolingMetadataTask /** @@ -39,6 +40,9 @@ internal fun Project.registerKotlinPluginExtensions() { register(project, AddNpmDependencyExtensionProjectSetupAction) register(project, RegisterBuildKotlinToolingMetadataTask) register(project, KotlinToolingDiagnosticsSetupAction) + if (isMultiplatform) { + register(project, CreateFatFrameworksSetupAction) + } } KotlinGradleProjectChecker.extensionPoint.apply { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/configureBinaryFrameworks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/configureBinaryFrameworks.kt index 027cdc95825..77ea71c574e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/configureBinaryFrameworks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/configureBinaryFrameworks.kt @@ -10,8 +10,8 @@ import org.gradle.api.artifacts.Configuration import org.gradle.api.provider.Provider import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.plugin.KotlinNativeTargetConfigurator -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType +import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension +import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle import org.jetbrains.kotlin.gradle.plugin.internal.artifactTypeAttribute import org.jetbrains.kotlin.gradle.plugin.launchInStage @@ -35,7 +35,7 @@ private data class FrameworkGroupDescription( val frameworkName: String, val targetFamilyName: String, val baseName: String, - val buildType: NativeBuildType + val buildType: NativeBuildType, ) private val Framework.frameworkGroupDescription @@ -58,8 +58,9 @@ internal fun Project.createFrameworkArtifact(binaryFramework: Framework, linkTas addFrameworkArtifact(frameworkConfiguration, linkTask.flatMap { it.outputFile }) } -internal fun KotlinMultiplatformExtension.createFatFrameworks() { - val frameworkGroups = targets +internal val CreateFatFrameworksSetupAction = KotlinProjectSetupCoroutine { + KotlinPluginLifecycle.Stage.FinaliseDsl.await() + val frameworkGroups = multiplatformExtension.targets .filterIsInstance() .filter { FatFrameworkTask.isSupportedTarget(it) } .flatMap { it.binaries } @@ -78,7 +79,7 @@ private val FrameworkGroupDescription.fatFrameworkConfigurationName get() = lowe private fun Configuration.applyBinaryFrameworkGroupAttributes( project: Project, frameworkDescription: FrameworkGroupDescription, - targets: List + targets: List, ) { with(attributes) { attribute(KotlinPlatformType.attribute, KotlinPlatformType.native)