From 9e1fd3768502040af5f5ed4242615384239e32ff Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Tue, 12 Oct 2021 16:59:57 +0200 Subject: [PATCH] [Gradle][MPP] Include commonized cinterops in host specific metadata artifacts ^KT-46198 --- .../targets/native/KotlinNativeTarget.kt | 13 ++++++--- ...nteropCommonizerAllMetadataKlibBundling.kt | 27 +++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerAllMetadataKlibBundling.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt index fa0ac3dffec..d7a8fee10dd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeBinaryTestRun import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeHostTestRun import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeSimulatorTestRun import org.jetbrains.kotlin.gradle.targets.native.NativeBinaryTestRunSource +import org.jetbrains.kotlin.gradle.targets.native.internal.includeCommonizedCInteropMetadata import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask import org.jetbrains.kotlin.gradle.utils.dashSeparatedName import org.jetbrains.kotlin.konan.target.HostManager @@ -72,11 +73,15 @@ open class KotlinNativeTarget @Inject constructor( project.getMetadataCompilationForSourceSet(it) } - metadataCompilations.forEach { - metadataJar.from(project.filesWithUnpackedArchives(it.output.allOutputs, setOf("klib"))) { spec -> - spec.into(it.name) + metadataCompilations.forEach { compilation -> + metadataJar.from(project.filesWithUnpackedArchives(compilation.output.allOutputs, setOf("klib"))) { spec -> + spec.into(compilation.name) + } + metadataJar.dependsOn(compilation.output.classesDirs) + + if (compilation is KotlinSharedNativeCompilation) { + project.includeCommonizedCInteropMetadata(metadataJar, compilation) } - metadataJar.dependsOn(it.output.classesDirs) } } project.artifacts.add(Dependency.ARCHIVES_CONFIGURATION, hostSpecificMetadataJar) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerAllMetadataKlibBundling.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerAllMetadataKlibBundling.kt new file mode 100644 index 00000000000..7d56724b5b7 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerAllMetadataKlibBundling.kt @@ -0,0 +1,27 @@ +/* + * 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") + } +}