Add generated interop libraries in compile dependency configuration (#1864)
This commit is contained in:
+3
@@ -24,6 +24,9 @@ interface CInteropSettings: Named {
|
||||
// TODO: Provide an interface for native compilations.
|
||||
val compilation: KotlinCompilation
|
||||
|
||||
val dependencyConfigurationName: String
|
||||
var dependencyFiles: FileCollection
|
||||
|
||||
// DSL.
|
||||
fun defFile(file: Any)
|
||||
|
||||
|
||||
+46
-3
@@ -30,6 +30,8 @@ import org.gradle.language.jvm.tasks.ProcessResources
|
||||
import org.gradle.nativeplatform.test.tasks.RunTestExecutable
|
||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.getSourceSetHierarchy
|
||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
||||
@@ -601,7 +603,7 @@ open class KotlinNativeTargetConfigurator(
|
||||
settings = interop
|
||||
destinationDir = provider { klibOutputDirectory(compilation) }
|
||||
group = INTEROP_GROUP
|
||||
description = "Generates Kotlin/Native interop library '${interop.name}' " +
|
||||
description = "Generates Kotlin/Native interop library '${interop.name}' " +
|
||||
"for compilation '${compilation.name}'" +
|
||||
"of target '${konanTarget.name}'."
|
||||
enabled = compilation.target.konanTarget.enabledOnCurrentHost
|
||||
@@ -609,7 +611,7 @@ open class KotlinNativeTargetConfigurator(
|
||||
dependsOnCompilerDownloading()
|
||||
val interopOutput = project.files(outputFileProvider).builtBy(this)
|
||||
with(compilation) {
|
||||
interopFiles += interopOutput
|
||||
project.dependencies.add(compileDependencyConfigurationName, interopOutput)
|
||||
output.tryAddClassesDir { interopOutput }
|
||||
}
|
||||
}
|
||||
@@ -621,7 +623,6 @@ open class KotlinNativeTargetConfigurator(
|
||||
tasks.create(target.artifactsTaskName)
|
||||
target.compilations.all {
|
||||
createKlibCompilationTask(it)
|
||||
createCInteropTasks(it)
|
||||
createBinaryLinkTasks(it)
|
||||
}
|
||||
|
||||
@@ -630,6 +631,29 @@ open class KotlinNativeTargetConfigurator(
|
||||
}
|
||||
}
|
||||
|
||||
protected fun configureCInterops(target: KotlinNativeTarget): Unit = with(target.project) {
|
||||
target.compilations.all { compilation ->
|
||||
createCInteropTasks(compilation)
|
||||
compilation.cinterops.all {
|
||||
defineConfigurationsForCInterop(compilation, it, target, configurations)
|
||||
}
|
||||
}
|
||||
|
||||
if (createTestCompilation) {
|
||||
val mainCompilation = target.compilations.getByName(MAIN_COMPILATION_NAME)
|
||||
target.compilations.findByName(TEST_COMPILATION_NAME)?.apply {
|
||||
cinterops.all {
|
||||
it.dependencyFiles += mainCompilation.output
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun configureTarget(target: KotlinNativeTarget) {
|
||||
super.configureTarget(target)
|
||||
configureCInterops(target)
|
||||
}
|
||||
|
||||
private fun Task.dependsOnCompilerDownloading() =
|
||||
dependsOn(KonanCompilerDownloadTask.KONAN_DOWNLOAD_TASK_NAME)
|
||||
|
||||
@@ -639,6 +663,25 @@ open class KotlinNativeTargetConfigurator(
|
||||
|
||||
companion object {
|
||||
const val INTEROP_GROUP = "interop"
|
||||
|
||||
protected fun defineConfigurationsForCInterop(
|
||||
compilation: KotlinNativeCompilation,
|
||||
cinterop: CInteropSettings,
|
||||
target: KotlinTarget,
|
||||
configurations: ConfigurationContainer
|
||||
) {
|
||||
val compileOnlyConfiguration = configurations.getByName(compilation.compileOnlyConfigurationName)
|
||||
val implementationConfiguration = configurations.getByName(compilation.implementationConfigurationName)
|
||||
|
||||
cinterop.dependencyFiles = configurations.maybeCreate(cinterop.dependencyConfigurationName).apply {
|
||||
extendsFrom(compileOnlyConfiguration, implementationConfiguration)
|
||||
usesPlatformOf(target)
|
||||
isVisible = false
|
||||
isCanBeConsumed = false
|
||||
attributes.attribute(USAGE_ATTRIBUTE, compilation.target.project.usageByName(Usage.JAVA_API))
|
||||
description = "Dependencies for cinterop '${cinterop.name}' (compilation '${compilation.name}')."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
-1
@@ -9,7 +9,6 @@ import groovy.lang.Closure
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.tasks.SourceSetOutput
|
||||
import org.gradle.util.ConfigureUtil
|
||||
import org.jetbrains.kotlin.gradle.plugin.CInteropSettings
|
||||
import org.jetbrains.kotlin.gradle.plugin.CInteropSettings.IncludeDirectories
|
||||
@@ -43,6 +42,11 @@ open class DefaultCInteropSettings @Inject constructor(
|
||||
val target: KotlinNativeTarget
|
||||
get() = compilation.target
|
||||
|
||||
override val dependencyConfigurationName: String
|
||||
get() = compilation.disambiguateName("${name.capitalize()}CInterop")
|
||||
|
||||
override var dependencyFiles: FileCollection = project.files()
|
||||
|
||||
val interopProcessingTaskName: String
|
||||
get() = lowerCamelCaseName(
|
||||
"cinterop",
|
||||
-2
@@ -284,8 +284,6 @@ class KotlinNativeCompilation(
|
||||
|
||||
var friendCompilationName: String? = null
|
||||
|
||||
var interopFiles: FileCollection = project.files()
|
||||
|
||||
internal val friendCompilation: KotlinNativeCompilation?
|
||||
get() = friendCompilationName?.let {
|
||||
target.compilations.getByName(it)
|
||||
|
||||
+2
-2
@@ -106,7 +106,7 @@ open class KotlinNativeCompile : AbstractCompile() {
|
||||
get() = compilation.allSources
|
||||
|
||||
val libraries: FileCollection
|
||||
@InputFiles get() = compilation.compileDependencyFiles + compilation.interopFiles
|
||||
@InputFiles get() = compilation.compileDependencyFiles
|
||||
|
||||
private val friendModule: FileCollection?
|
||||
// It's already taken into account in libraries
|
||||
@@ -289,7 +289,7 @@ open class CInteropProcess: DefaultTask() {
|
||||
@Input get() = settings.includeDirs.headerFilterDirs.files
|
||||
|
||||
val libraries: FileCollection
|
||||
@InputFiles get() = settings.compilation.compileDependencyFiles
|
||||
@InputFiles get() = settings.dependencyFiles
|
||||
|
||||
val extraOpts: List<String>
|
||||
@Input get() = settings.extraOpts
|
||||
|
||||
Reference in New Issue
Block a user