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
|
import org.jetbrains.kotlin.gradle.utils.filesProvider
|
||||||
|
|
||||||
internal fun Project.setUpHierarchicalKotlinNativePlatformDependencies() {
|
internal fun Project.setUpHierarchicalKotlinNativePlatformDependencies() {
|
||||||
val task = commonizeNativeDistributionHierarchicallyTask?.get() ?: return
|
|
||||||
val kotlin = multiplatformExtensionOrNull ?: return
|
val kotlin = multiplatformExtensionOrNull ?: return
|
||||||
kotlin.sourceSets.forEach { sourceSet ->
|
kotlin.sourceSets.forEach { sourceSet ->
|
||||||
val target = getCommonizerTarget(sourceSet) ?: return@forEach
|
val target = getCommonizerTarget(sourceSet) ?: return@forEach
|
||||||
val commonizedDependencies = task.dependenciesFor(target)
|
val targetDependencies = getDependenciesFor(target)
|
||||||
val stdlib = project.filesProvider { listOf(konanDistribution.stdlib) }
|
val stdlib = project.filesProvider { listOf(konanDistribution.stdlib) }
|
||||||
addDependencies(sourceSet, commonizedDependencies)
|
addDependencies(sourceSet, targetDependencies)
|
||||||
addDependencies(sourceSet, stdlib)
|
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 rootTarget = rootCommonizerTargets.firstOrNull { rootTarget -> rootTarget.isEqualOrAncestorOf(target) } ?: return project.files()
|
||||||
val targetOutputDirectory = HierarchicalCommonizerOutputLayout.getTargetDirectory(getRootOutputDirectory(rootTarget), target)
|
val targetOutputDirectory = HierarchicalCommonizerOutputLayout.getTargetDirectory(getRootOutputDirectory(rootTarget), target)
|
||||||
val targetDependencies = project.filesProvider { targetOutputDirectory.listFiles().orEmpty().toList() }.builtBy(this)
|
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 }
|
val necessaryParentTargetDependencies: FileCollection = rootTarget.takeIf { target is LeafCommonizerTarget }
|
||||||
?.findParentOf(target)
|
?.findParentOf(target)
|
||||||
?.let { parentTarget -> dependenciesFor(parentTarget) }
|
?.let { parentTarget -> getCommonizedDependenciesFor(parentTarget) }
|
||||||
?: project.files()
|
?: project.files()
|
||||||
|
|
||||||
return targetDependencies + necessaryParentTargetDependencies
|
return targetDependencies + necessaryParentTargetDependencies
|
||||||
|
|||||||
Reference in New Issue
Block a user