[Gradle] Implement CreateFatFrameworksSetupAction

KT-61634
This commit is contained in:
Sebastian Sellmair
2023-10-16 18:28:18 +02:00
committed by Space Team
parent c7b4057dab
commit 3be2eb9b31
3 changed files with 11 additions and 8 deletions
@@ -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.KotlinWasmTargetType
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetPreset
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinWasmTargetPreset 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.internal.setupCInteropCommonizedCInteropApiElementsConfigurations
import org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.registerKotlinArtifactsExtension import org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.registerKotlinArtifactsExtension
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool
@@ -77,7 +76,6 @@ class KotlinMultiplatformPlugin : Plugin<Project> {
project.locateOrRegisterIdeResolveDependenciesTask() project.locateOrRegisterIdeResolveDependenciesTask()
project.launch { project.setupCInteropCommonizedCInteropApiElementsConfigurations() } project.launch { project.setupCInteropCommonizedCInteropApiElementsConfigurations() }
project.addBuildListenerForXcode() project.addBuildListenerForXcode()
project.whenEvaluated { kotlinMultiplatformExtension.createFatFrameworks() }
} }
private fun exportProjectStructureMetadataForOtherBuilds( private fun exportProjectStructureMetadataForOtherBuilds(
@@ -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.UnusedSourceSetsChecker
import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.WasmSourceSetsNotFoundChecker import org.jetbrains.kotlin.gradle.plugin.diagnostics.checkers.WasmSourceSetsNotFoundChecker
import org.jetbrains.kotlin.gradle.targets.js.npm.AddNpmDependencyExtensionProjectSetupAction import org.jetbrains.kotlin.gradle.targets.js.npm.AddNpmDependencyExtensionProjectSetupAction
import org.jetbrains.kotlin.gradle.targets.native.CreateFatFrameworksSetupAction
import org.jetbrains.kotlin.gradle.tooling.RegisterBuildKotlinToolingMetadataTask import org.jetbrains.kotlin.gradle.tooling.RegisterBuildKotlinToolingMetadataTask
/** /**
@@ -39,6 +40,9 @@ internal fun Project.registerKotlinPluginExtensions() {
register(project, AddNpmDependencyExtensionProjectSetupAction) register(project, AddNpmDependencyExtensionProjectSetupAction)
register(project, RegisterBuildKotlinToolingMetadataTask) register(project, RegisterBuildKotlinToolingMetadataTask)
register(project, KotlinToolingDiagnosticsSetupAction) register(project, KotlinToolingDiagnosticsSetupAction)
if (isMultiplatform) {
register(project, CreateFatFrameworksSetupAction)
}
} }
KotlinGradleProjectChecker.extensionPoint.apply { KotlinGradleProjectChecker.extensionPoint.apply {
@@ -10,8 +10,8 @@ import org.gradle.api.artifacts.Configuration
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinNativeTargetConfigurator import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle
import org.jetbrains.kotlin.gradle.plugin.internal.artifactTypeAttribute import org.jetbrains.kotlin.gradle.plugin.internal.artifactTypeAttribute
import org.jetbrains.kotlin.gradle.plugin.launchInStage import org.jetbrains.kotlin.gradle.plugin.launchInStage
@@ -35,7 +35,7 @@ private data class FrameworkGroupDescription(
val frameworkName: String, val frameworkName: String,
val targetFamilyName: String, val targetFamilyName: String,
val baseName: String, val baseName: String,
val buildType: NativeBuildType val buildType: NativeBuildType,
) )
private val Framework.frameworkGroupDescription private val Framework.frameworkGroupDescription
@@ -58,8 +58,9 @@ internal fun Project.createFrameworkArtifact(binaryFramework: Framework, linkTas
addFrameworkArtifact(frameworkConfiguration, linkTask.flatMap { it.outputFile }) addFrameworkArtifact(frameworkConfiguration, linkTask.flatMap { it.outputFile })
} }
internal fun KotlinMultiplatformExtension.createFatFrameworks() { internal val CreateFatFrameworksSetupAction = KotlinProjectSetupCoroutine {
val frameworkGroups = targets KotlinPluginLifecycle.Stage.FinaliseDsl.await()
val frameworkGroups = multiplatformExtension.targets
.filterIsInstance<KotlinNativeTarget>() .filterIsInstance<KotlinNativeTarget>()
.filter { FatFrameworkTask.isSupportedTarget(it) } .filter { FatFrameworkTask.isSupportedTarget(it) }
.flatMap { it.binaries } .flatMap { it.binaries }
@@ -78,7 +79,7 @@ private val FrameworkGroupDescription.fatFrameworkConfigurationName get() = lowe
private fun Configuration.applyBinaryFrameworkGroupAttributes( private fun Configuration.applyBinaryFrameworkGroupAttributes(
project: Project, project: Project,
frameworkDescription: FrameworkGroupDescription, frameworkDescription: FrameworkGroupDescription,
targets: List<KotlinNativeTarget> targets: List<KotlinNativeTarget>,
) { ) {
with(attributes) { with(attributes) {
attribute(KotlinPlatformType.attribute, KotlinPlatformType.native) attribute(KotlinPlatformType.attribute, KotlinPlatformType.native)