HierarchicalKotlinNativePlatformDependencies: Provide platform dependencies to source sets not participating in any commonization
^KT-46142 Verification Pending
This commit is contained in:
committed by
Space
parent
b5ef6c9316
commit
9336e4b09b
+17
-5
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user