Add generated interop libraries in compile dependency configuration (#1864)

This commit is contained in:
Ilya Matveev
2018-09-11 16:07:33 +03:00
committed by GitHub
parent 712e23f8b0
commit 29048ce5ae
5 changed files with 56 additions and 8 deletions
@@ -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)
@@ -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}')."
}
}
}
}
@@ -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",
@@ -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)
@@ -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