[Gradle] Leave native source sets: Add expect parts explictely
This commit is contained in:
+6
-6
@@ -12,6 +12,7 @@ import org.gradle.api.tasks.TaskProvider
|
|||||||
import org.jetbrains.kotlin.commonizer.HierarchicalCommonizerOutputLayout
|
import org.jetbrains.kotlin.commonizer.HierarchicalCommonizerOutputLayout
|
||||||
import org.jetbrains.kotlin.commonizer.prettyName
|
import org.jetbrains.kotlin.commonizer.prettyName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinSharedNativeCompilation
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.filesProvider
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
internal abstract class AbstractCInteropCommonizerTask : DefaultTask() {
|
internal abstract class AbstractCInteropCommonizerTask : DefaultTask() {
|
||||||
@@ -28,15 +29,14 @@ internal abstract class AbstractCInteropCommonizerTask : DefaultTask() {
|
|||||||
|
|
||||||
internal fun getLibraries(compilation: KotlinSharedNativeCompilation): FileCollection {
|
internal fun getLibraries(compilation: KotlinSharedNativeCompilation): FileCollection {
|
||||||
val compilationCommonizerTarget = project.getCommonizerTarget(compilation) ?: return project.files()
|
val compilationCommonizerTarget = project.getCommonizerTarget(compilation) ?: return project.files()
|
||||||
val fileProvider = project.provider<Set<File>> {
|
val fileProvider = project.filesProvider {
|
||||||
val parameters = getCommonizationParameters(compilation) ?: return@provider emptySet()
|
val parameters = getCommonizationParameters(compilation) ?: return@filesProvider emptySet<File>()
|
||||||
HierarchicalCommonizerOutputLayout.getTargetDirectory(outputDirectory(parameters), compilationCommonizerTarget)
|
HierarchicalCommonizerOutputLayout
|
||||||
|
.getTargetDirectory(outputDirectory(parameters), compilationCommonizerTarget)
|
||||||
.listFiles().orEmpty().toSet()
|
.listFiles().orEmpty().toSet()
|
||||||
}
|
}
|
||||||
|
|
||||||
return project.files(fileProvider) { fileCollection ->
|
return fileProvider.builtBy(this)
|
||||||
fileCollection.builtBy(this)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+19
-14
@@ -7,10 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.native.internal
|
|||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.jetbrains.kotlin.commonizer.HierarchicalCommonizerOutputLayout
|
import org.jetbrains.kotlin.commonizer.*
|
||||||
import org.jetbrains.kotlin.commonizer.KonanDistribution
|
|
||||||
import org.jetbrains.kotlin.commonizer.isAncestorOf
|
|
||||||
import org.jetbrains.kotlin.commonizer.stdlib
|
|
||||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
|
||||||
@@ -22,21 +19,29 @@ internal fun Project.setUpHierarchicalKotlinNativePlatformDependencies() {
|
|||||||
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 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 stdlib = project.filesProvider { listOf(konanDistribution.stdlib) }
|
val stdlib = project.filesProvider { listOf(konanDistribution.stdlib) }
|
||||||
addDependencies(sourceSet, dependencies)
|
addDependencies(sourceSet, commonizedDependencies)
|
||||||
addDependencies(sourceSet, stdlib)
|
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) {
|
private fun Project.addDependencies(sourceSet: KotlinSourceSet, libraries: FileCollection) {
|
||||||
getMetadataCompilationForSourceSet(sourceSet)?.let { compilation ->
|
getMetadataCompilationForSourceSet(sourceSet)?.let { compilation ->
|
||||||
compilation.compileDependencyFiles += libraries
|
compilation.compileDependencyFiles += libraries
|
||||||
|
|||||||
Reference in New Issue
Block a user