diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt index fcc2753e01a..bcd1f34f48e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropCommonizerTask.kt @@ -10,11 +10,12 @@ import org.gradle.api.file.FileCollection import org.gradle.api.provider.Provider import org.gradle.api.tasks.* import org.gradle.workers.WorkParameters -import org.jetbrains.kotlin.compilerRunner.GradleCliCommonizer -import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.commonizer.CommonizerTarget +import org.jetbrains.kotlin.commonizer.NativeDistributionCommonizerOutputLayout import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget import org.jetbrains.kotlin.commonizer.level +import org.jetbrains.kotlin.compilerRunner.GradleCliCommonizer +import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull import org.jetbrains.kotlin.gradle.plugin.CInteropSettings import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation @@ -26,6 +27,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.kotlinSourceSetsIncludingDefault import org.jetbrains.kotlin.gradle.plugin.sources.resolveAllDependsOnSourceSets import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizerTask.CInteropGist import org.jetbrains.kotlin.gradle.tasks.CInteropProcess +import org.jetbrains.kotlin.gradle.utils.transitiveClosure import org.jetbrains.kotlin.konan.target.KonanTarget import java.io.File @@ -49,6 +51,23 @@ internal open class CInteropCommonizerTask : AbstractCInteropCommonizerTask() { internal var cinterops = setOf() private set + /** + * All library files produced by the [Project.commonizeNativeDistributionTask] that are relevant for commonization + */ + @get:Classpath + internal val nativeDistributionLibraries: Set + get() { + val commonizeNativeDistribution = project.commonizeNativeDistributionTask.get() + return getCommonizationParameters().flatMapTo(mutableSetOf()) { parameters -> + parameters.commonizerTarget.withAllTransitiveTargets().flatMap { target -> + commonizeNativeDistribution.commonizerTargetOutputDirectories.flatMap { outputDirectory -> + NativeDistributionCommonizerOutputLayout.getTargetDirectory(outputDirectory, target) + .listFiles().orEmpty().toList() + } + } + } + } + @OutputDirectories fun getAllOutputDirectories(): Set { return getCommonizationParameters().map { outputDirectory(it) }.toSet() @@ -89,11 +108,12 @@ internal open class CInteropCommonizerTask : AbstractCInteropCommonizerTask() { val cinteropsForTarget = cinterops.filter { cinterop -> cinterop.identifier in parameters.interops } outputDirectory(parameters).deleteRecursively() if (cinteropsForTarget.isEmpty()) return + GradleCliCommonizer(project).commonizeLibraries( konanHome = project.file(project.konanHome), outputCommonizerTarget = parameters.commonizerTarget, inputLibraries = cinteropsForTarget.map { it.libraryFile.get() }.toSet(), - dependencyLibraries = cinteropsForTarget.flatMap { it.dependencies.files }.toSet(), + dependencyLibraries = cinteropsForTarget.flatMap { it.dependencies.files }.toSet() + nativeDistributionLibraries, outputDirectory = outputDirectory(parameters) ) } @@ -187,13 +207,16 @@ private fun removeRedundantParameters(parameters: Set other in child } } +private fun SharedCommonizerTarget.withAllTransitiveTargets(): Set { + return setOf(this) + this.transitiveClosure { if (this is SharedCommonizerTarget) this.targets else emptySet() } +} + private fun Project.getDependingNativeCompilations(compilation: KotlinSharedNativeCompilation): Set { /** * Some implementations of [KotlinCompilation] do not contain the default source set in diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CommonizerTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CommonizerTasks.kt index 6a79827b352..543f9497c39 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CommonizerTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CommonizerTasks.kt @@ -46,7 +46,7 @@ internal val Project.commonizeCInteropTask: TaskProvider if (isCInteropCommonizationEnabled) { return locateOrRegisterTask( "commonizeCInterop", - invokeWhenRegistered = { commonizeTask.dependsOn(this) }, + invokeWhenRegistered = { commonizeTask.dependsOn(this); dependsOn(commonizeNativeDistributionTask) }, configureTask = { group = "interop" description = "Invokes the commonizer on c-interop bindings of the project" diff --git a/native/commonizer/src/org/jetbrains/kotlin/commonizer/cli/nativeTasks.kt b/native/commonizer/src/org/jetbrains/kotlin/commonizer/cli/nativeTasks.kt index 8f0f19c7ccc..b4ce1397f05 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/commonizer/cli/nativeTasks.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/commonizer/cli/nativeTasks.kt @@ -71,7 +71,6 @@ internal class NativeKlibCommonize(options: Collection>) : Task(option commonTarget = outputCommonizerTarget, repository = repository, dependencies = StdlibRepository(distribution, libraryLoader) + - KonanDistributionRepository(distribution, commonizerTargets.toSet(), libraryLoader) + FilesRepository(dependencyLibraries.toSet(), libraryLoader), resultsConsumer = resultsConsumer, statsCollector = statsCollector,