From 2dda5f6ed2eeb3140d697398d2f37a7aed81d798 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Wed, 6 Oct 2021 13:37:12 +0200 Subject: [PATCH] [Gradle][MPP] Bundle cinterop metadata in allMetadata klib ^KT-46198 --- .../KotlinMetadataTargetConfigurator.kt | 3 +++ .../CInteropCommonizerAllMetadataKlib.kt | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerAllMetadataKlib.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt index e80a3e2b973..c7cb98d8fb7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt @@ -308,6 +308,9 @@ class KotlinMetadataTargetConfigurator : if (!isHostSpecific) { val metadataContent = project.filesWithUnpackedArchives(this@apply.output.allOutputs, setOf("klib")) allMetadataJar.configure { it.from(metadataContent) { spec -> spec.into(this@apply.defaultSourceSet.name) } } + if (this is KotlinSharedNativeCompilation) { + project.includeCommonizedCInteropMetadata(allMetadataJar, this) + } } else { if (platformCompilations.filterIsInstance().none { it.konanTarget.enabledOnCurrentHost }) { // Then we don't have any platform module to put this compiled source set to, so disable the compilation task: diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerAllMetadataKlib.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerAllMetadataKlib.kt new file mode 100644 index 00000000000..61a95248bd8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerAllMetadataKlib.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.targets.native.internal + +import org.gradle.api.Project +import org.gradle.api.tasks.TaskProvider +import org.gradle.api.tasks.bundling.Zip +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation + +internal fun Project.includeCommonizedCInteropMetadata(metadataKlib: TaskProvider, compilation: KotlinSharedNativeCompilation) { + metadataKlib.configure { jar -> includeCommonizedCInteropMetadata(jar, compilation) } +} + +internal fun Project.includeCommonizedCInteropMetadata(metadataKlib: Zip, compilation: KotlinSharedNativeCompilation) { + val commonizerTask = commonizeCInteropTask?.get() ?: return + val commonizerDependencyToken = CInteropCommonizerDependent.from(compilation) ?: return + val outputDirectory = commonizerTask.commonizedOutputDirectory(commonizerDependencyToken) ?: return + + metadataKlib.from(outputDirectory) { spec -> + spec.into(compilation.defaultSourceSet.name + "-cinterop") + } +}