[Gradle] Leave native source sets: Add expect parts explictely

This commit is contained in:
sebastian.sellmair
2021-04-01 15:37:22 +02:00
parent 9cb67e06e3
commit 947dc71bda
2 changed files with 25 additions and 20 deletions
@@ -12,6 +12,7 @@ import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.commonizer.HierarchicalCommonizerOutputLayout
import org.jetbrains.kotlin.commonizer.prettyName
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
import org.jetbrains.kotlin.gradle.utils.filesProvider
import java.io.File
internal abstract class AbstractCInteropCommonizerTask : DefaultTask() {
@@ -28,15 +29,14 @@ internal abstract class AbstractCInteropCommonizerTask : DefaultTask() {
internal fun getLibraries(compilation: KotlinSharedNativeCompilation): FileCollection {
val compilationCommonizerTarget = project.getCommonizerTarget(compilation) ?: return project.files()
val fileProvider = project.provider<Set<File>> {
val parameters = getCommonizationParameters(compilation) ?: return@provider emptySet()
HierarchicalCommonizerOutputLayout.getTargetDirectory(outputDirectory(parameters), compilationCommonizerTarget)
val fileProvider = project.filesProvider {
val parameters = getCommonizationParameters(compilation) ?: return@filesProvider emptySet<File>()
HierarchicalCommonizerOutputLayout
.getTargetDirectory(outputDirectory(parameters), compilationCommonizerTarget)
.listFiles().orEmpty().toSet()
}
return project.files(fileProvider) { fileCollection ->
fileCollection.builtBy(this)
}
return fileProvider.builtBy(this)
}
}
@@ -7,10 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.native.internal
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.jetbrains.kotlin.commonizer.HierarchicalCommonizerOutputLayout
import org.jetbrains.kotlin.commonizer.KonanDistribution
import org.jetbrains.kotlin.commonizer.isAncestorOf
import org.jetbrains.kotlin.commonizer.stdlib
import org.jetbrains.kotlin.commonizer.*
import org.jetbrains.kotlin.compilerRunner.konanHome
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
@@ -22,21 +19,29 @@ internal fun Project.setUpHierarchicalKotlinNativePlatformDependencies() {
val kotlin = multiplatformExtensionOrNull ?: return
kotlin.sourceSets.forEach { sourceSet ->
val target = getCommonizerTarget(sourceSet) ?: return@forEach
val rootTarget = task.rootCommonizerTargets
.firstOrNull { rootTarget -> rootTarget == target || rootTarget.isAncestorOf(target) }
?: return@forEach
val rootOutputDirectory = task.getRootOutputDirectory(rootTarget)
val targetOutputDirectory = HierarchicalCommonizerOutputLayout.getTargetDirectory(rootOutputDirectory, target)
val dependencies = project.filesProvider { targetOutputDirectory.listFiles().orEmpty().toList() }.builtBy(task)
val commonizedDependencies = task.dependenciesFor(target)
val stdlib = project.filesProvider { listOf(konanDistribution.stdlib) }
addDependencies(sourceSet, dependencies)
addDependencies(sourceSet, commonizedDependencies)
addDependencies(sourceSet, stdlib)
}
}
private fun HierarchicalNativeDistributionCommonizerTask.dependenciesFor(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)
if (target is LeafCommonizerTarget) {
val expectTarget = rootTarget.withAllAncestors()
.firstOrNull { (it as? SharedCommonizerTarget)?.targets?.contains(target) == true }
?: return targetDependencies
return targetDependencies + dependenciesFor(expectTarget)
}
return targetDependencies
}
private fun Project.addDependencies(sourceSet: KotlinSourceSet, libraries: FileCollection) {
getMetadataCompilationForSourceSet(sourceSet)?.let { compilation ->
compilation.compileDependencyFiles += libraries