From 9336e4b09ba03611c4557047ba6439cebe1fc39d Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Fri, 16 Apr 2021 16:05:58 +0200 Subject: [PATCH] HierarchicalKotlinNativePlatformDependencies: Provide platform dependencies to source sets not participating in any commonization ^KT-46142 Verification Pending --- ...rchicalKotlinNativePlatformDependencies.kt | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/HierarchicalKotlinNativePlatformDependencies.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/HierarchicalKotlinNativePlatformDependencies.kt index b83054650b4..a587104634e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/HierarchicalKotlinNativePlatformDependencies.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/HierarchicalKotlinNativePlatformDependencies.kt @@ -16,18 +16,30 @@ import org.jetbrains.kotlin.gradle.targets.metadata.getMetadataCompilationForSou import org.jetbrains.kotlin.gradle.utils.filesProvider internal fun Project.setUpHierarchicalKotlinNativePlatformDependencies() { - val task = commonizeNativeDistributionHierarchicallyTask?.get() ?: return val kotlin = multiplatformExtensionOrNull ?: return kotlin.sourceSets.forEach { sourceSet -> val target = getCommonizerTarget(sourceSet) ?: return@forEach - val commonizedDependencies = task.dependenciesFor(target) + val targetDependencies = getDependenciesFor(target) val stdlib = project.filesProvider { listOf(konanDistribution.stdlib) } - addDependencies(sourceSet, commonizedDependencies) + addDependencies(sourceSet, targetDependencies) addDependencies(sourceSet, stdlib) } } -private fun HierarchicalNativeDistributionCommonizerTask.dependenciesFor(target: CommonizerTarget): FileCollection { +private fun Project.getDependenciesFor(target: CommonizerTarget): FileCollection { + val commonizerTask = commonizeNativeDistributionHierarchicallyTask?.get() ?: return project.files() + + /* Target is participating in any commonization and will therefore receive dependencies provided by the commonizer */ + if (commonizerTask.rootCommonizerTargets.any { rootTarget -> rootTarget.isEqualOrAncestorOf(target) }) { + return commonizerTask.getCommonizedDependenciesFor(target) + } + + /* Target does not participate in any commonization. Try finding relevant platform libraries */ + val konanTarget = target.konanTargets.singleOrNull() ?: return project.files() + return project.filesProvider { konanDistribution.platformLibsDir.resolve(konanTarget.name).listFiles().orEmpty().toSet() } +} + +private fun HierarchicalNativeDistributionCommonizerTask.getCommonizedDependenciesFor(target: CommonizerTarget): FileCollection { val rootTarget = rootCommonizerTargets.firstOrNull { rootTarget -> rootTarget.isEqualOrAncestorOf(target) } ?: return project.files() val targetOutputDirectory = HierarchicalCommonizerOutputLayout.getTargetDirectory(getRootOutputDirectory(rootTarget), target) val targetDependencies = project.filesProvider { targetOutputDirectory.listFiles().orEmpty().toList() }.builtBy(this) @@ -38,7 +50,7 @@ private fun HierarchicalNativeDistributionCommonizerTask.dependenciesFor(target: */ val necessaryParentTargetDependencies: FileCollection = rootTarget.takeIf { target is LeafCommonizerTarget } ?.findParentOf(target) - ?.let { parentTarget -> dependenciesFor(parentTarget) } + ?.let { parentTarget -> getCommonizedDependenciesFor(parentTarget) } ?: project.files() return targetDependencies + necessaryParentTargetDependencies