[Gradle] Add SetupKotlinNativePlatformDependenciesForLegacyImport

The code is extracted from SetupKotlinNativePlatformDependenciesAndStdlib
as the latter is applied only to native compilations and
shared native metadata compilations.
For test shared native source sets, such as `nativeTest
no native metadata compilation is created, but for legacy import
intransitive metadata dependencies should contain native platform
dependencies listed. And
SetupKotlinNativePlatformDependenciesForLegacyImport fixes that.

^KT-61559 Verification Pending
This commit is contained in:
Anton Lakotka
2023-12-03 22:39:03 +01:00
committed by Space Team
parent 721aafc94c
commit f4681fb93a
2 changed files with 21 additions and 10 deletions
@@ -30,10 +30,7 @@ import org.jetbrains.kotlin.gradle.targets.native.ConfigureFrameworkExportSideEf
import org.jetbrains.kotlin.gradle.targets.native.CreateFatFrameworksSetupAction
import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeConfigureBinariesSideEffect
import org.jetbrains.kotlin.gradle.targets.native.SetupEmbedAndSignAppleFrameworkTaskSideEffect
import org.jetbrains.kotlin.gradle.targets.native.internal.AddKotlinPlatformIntegersSupportLibrary
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizedCInteropApiElementsConfigurationsSetupAction
import org.jetbrains.kotlin.gradle.targets.native.internal.SetupCInteropApiElementsConfigurationSideEffect
import org.jetbrains.kotlin.gradle.targets.native.internal.SetupKotlinNativePlatformDependenciesAndStdlib
import org.jetbrains.kotlin.gradle.targets.native.internal.*
import org.jetbrains.kotlin.gradle.targets.native.tasks.artifact.KotlinArtifactsExtensionSetupAction
import org.jetbrains.kotlin.gradle.tooling.RegisterBuildKotlinToolingMetadataTask
@@ -49,6 +46,7 @@ internal fun Project.registerKotlinPluginExtensions() {
register(project, UserDefinedAttributesSetupAction)
register(project, CustomizeKotlinDependenciesSetupAction)
register(project, AddKotlinPlatformIntegersSupportLibrary)
register(project, SetupKotlinNativePlatformDependenciesForLegacyImport)
if (isJvm || isMultiplatform) {
@@ -8,9 +8,12 @@ package org.jetbrains.kotlin.gradle.targets.native.internal
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.jetbrains.kotlin.commonizer.*
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.KotlinProjectSetupCoroutine
import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSideEffectCoroutine
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
import org.jetbrains.kotlin.gradle.targets.metadata.isNativeSourceSet
import org.jetbrains.kotlin.gradle.utils.filesProvider
import org.jetbrains.kotlin.gradle.utils.konanDistribution
import java.io.File
@@ -26,14 +29,24 @@ internal val SetupKotlinNativePlatformDependenciesAndStdlib =
val stdlib = project.files(project.konanDistribution.stdlib)
compilation.compileDependencyFiles += stdlib
val defaultSourceSet = compilation.defaultSourceSet
if (defaultSourceSet is DefaultKotlinSourceSet) {
defaultSourceSet.addDependencyForLegacyImport(nativeDistributionDependencies)
defaultSourceSet.addDependencyForLegacyImport(stdlib)
}
}
internal val SetupKotlinNativePlatformDependenciesForLegacyImport = KotlinProjectSetupCoroutine {
val multiplatform = multiplatformExtensionOrNull ?: return@KotlinProjectSetupCoroutine
val sourceSets = multiplatform
.awaitSourceSets()
.filter { it.isNativeSourceSet.await() }
.filterIsInstance<DefaultKotlinSourceSet>()
val stdlib = project.files(project.konanDistribution.stdlib)
sourceSets.forEach { sourceSet ->
val commonizerTarget = sourceSet.commonizerTarget.await() ?: return@forEach
val nativeDistributionDependencies = getNativeDistributionDependencies(commonizerTarget)
sourceSet.addDependencyForLegacyImport(nativeDistributionDependencies)
sourceSet.addDependencyForLegacyImport(stdlib)
}
}
internal fun Project.getNativeDistributionDependencies(target: CommonizerTarget): FileCollection {
return when (target) {
is LeafCommonizerTarget -> getOriginalPlatformLibrariesFor(target)