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.
|
// TODO: Provide an interface for native compilations.
|
||||||
val compilation: KotlinCompilation
|
val compilation: KotlinCompilation
|
||||||
|
|
||||||
|
val dependencyConfigurationName: String
|
||||||
|
var dependencyFiles: FileCollection
|
||||||
|
|
||||||
// DSL.
|
// DSL.
|
||||||
fun defFile(file: Any)
|
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.gradle.nativeplatform.test.tasks.RunTestExecutable
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
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.mpp.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.getSourceSetHierarchy
|
import org.jetbrains.kotlin.gradle.plugin.sources.getSourceSetHierarchy
|
||||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
||||||
@@ -601,7 +603,7 @@ open class KotlinNativeTargetConfigurator(
|
|||||||
settings = interop
|
settings = interop
|
||||||
destinationDir = provider { klibOutputDirectory(compilation) }
|
destinationDir = provider { klibOutputDirectory(compilation) }
|
||||||
group = INTEROP_GROUP
|
group = INTEROP_GROUP
|
||||||
description = "Generates Kotlin/Native interop library '${interop.name}' " +
|
description = "Generates Kotlin/Native interop library '${interop.name}' " +
|
||||||
"for compilation '${compilation.name}'" +
|
"for compilation '${compilation.name}'" +
|
||||||
"of target '${konanTarget.name}'."
|
"of target '${konanTarget.name}'."
|
||||||
enabled = compilation.target.konanTarget.enabledOnCurrentHost
|
enabled = compilation.target.konanTarget.enabledOnCurrentHost
|
||||||
@@ -609,7 +611,7 @@ open class KotlinNativeTargetConfigurator(
|
|||||||
dependsOnCompilerDownloading()
|
dependsOnCompilerDownloading()
|
||||||
val interopOutput = project.files(outputFileProvider).builtBy(this)
|
val interopOutput = project.files(outputFileProvider).builtBy(this)
|
||||||
with(compilation) {
|
with(compilation) {
|
||||||
interopFiles += interopOutput
|
project.dependencies.add(compileDependencyConfigurationName, interopOutput)
|
||||||
output.tryAddClassesDir { interopOutput }
|
output.tryAddClassesDir { interopOutput }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -621,7 +623,6 @@ open class KotlinNativeTargetConfigurator(
|
|||||||
tasks.create(target.artifactsTaskName)
|
tasks.create(target.artifactsTaskName)
|
||||||
target.compilations.all {
|
target.compilations.all {
|
||||||
createKlibCompilationTask(it)
|
createKlibCompilationTask(it)
|
||||||
createCInteropTasks(it)
|
|
||||||
createBinaryLinkTasks(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() =
|
private fun Task.dependsOnCompilerDownloading() =
|
||||||
dependsOn(KonanCompilerDownloadTask.KONAN_DOWNLOAD_TASK_NAME)
|
dependsOn(KonanCompilerDownloadTask.KONAN_DOWNLOAD_TASK_NAME)
|
||||||
|
|
||||||
@@ -639,6 +663,25 @@ open class KotlinNativeTargetConfigurator(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val INTEROP_GROUP = "interop"
|
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.Action
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.tasks.SourceSetOutput
|
|
||||||
import org.gradle.util.ConfigureUtil
|
import org.gradle.util.ConfigureUtil
|
||||||
import org.jetbrains.kotlin.gradle.plugin.CInteropSettings
|
import org.jetbrains.kotlin.gradle.plugin.CInteropSettings
|
||||||
import org.jetbrains.kotlin.gradle.plugin.CInteropSettings.IncludeDirectories
|
import org.jetbrains.kotlin.gradle.plugin.CInteropSettings.IncludeDirectories
|
||||||
@@ -43,6 +42,11 @@ open class DefaultCInteropSettings @Inject constructor(
|
|||||||
val target: KotlinNativeTarget
|
val target: KotlinNativeTarget
|
||||||
get() = compilation.target
|
get() = compilation.target
|
||||||
|
|
||||||
|
override val dependencyConfigurationName: String
|
||||||
|
get() = compilation.disambiguateName("${name.capitalize()}CInterop")
|
||||||
|
|
||||||
|
override var dependencyFiles: FileCollection = project.files()
|
||||||
|
|
||||||
val interopProcessingTaskName: String
|
val interopProcessingTaskName: String
|
||||||
get() = lowerCamelCaseName(
|
get() = lowerCamelCaseName(
|
||||||
"cinterop",
|
"cinterop",
|
||||||
-2
@@ -284,8 +284,6 @@ class KotlinNativeCompilation(
|
|||||||
|
|
||||||
var friendCompilationName: String? = null
|
var friendCompilationName: String? = null
|
||||||
|
|
||||||
var interopFiles: FileCollection = project.files()
|
|
||||||
|
|
||||||
internal val friendCompilation: KotlinNativeCompilation?
|
internal val friendCompilation: KotlinNativeCompilation?
|
||||||
get() = friendCompilationName?.let {
|
get() = friendCompilationName?.let {
|
||||||
target.compilations.getByName(it)
|
target.compilations.getByName(it)
|
||||||
|
|||||||
+2
-2
@@ -106,7 +106,7 @@ open class KotlinNativeCompile : AbstractCompile() {
|
|||||||
get() = compilation.allSources
|
get() = compilation.allSources
|
||||||
|
|
||||||
val libraries: FileCollection
|
val libraries: FileCollection
|
||||||
@InputFiles get() = compilation.compileDependencyFiles + compilation.interopFiles
|
@InputFiles get() = compilation.compileDependencyFiles
|
||||||
|
|
||||||
private val friendModule: FileCollection?
|
private val friendModule: FileCollection?
|
||||||
// It's already taken into account in libraries
|
// It's already taken into account in libraries
|
||||||
@@ -289,7 +289,7 @@ open class CInteropProcess: DefaultTask() {
|
|||||||
@Input get() = settings.includeDirs.headerFilterDirs.files
|
@Input get() = settings.includeDirs.headerFilterDirs.files
|
||||||
|
|
||||||
val libraries: FileCollection
|
val libraries: FileCollection
|
||||||
@InputFiles get() = settings.compilation.compileDependencyFiles
|
@InputFiles get() = settings.dependencyFiles
|
||||||
|
|
||||||
val extraOpts: List<String>
|
val extraOpts: List<String>
|
||||||
@Input get() = settings.extraOpts
|
@Input get() = settings.extraOpts
|
||||||
|
|||||||
Reference in New Issue
Block a user