[gradle-plugin] Pass component dependencies in cinterop
This commit is contained in:
committed by
Ilya Matveev
parent
62e3145ca9
commit
847e6cf748
+6
@@ -20,6 +20,7 @@ import groovy.lang.Closure
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.Named
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.language.ComponentDependencies
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
|
||||
interface CInteropSettings {
|
||||
@@ -53,6 +54,11 @@ interface CInteropSettings {
|
||||
|
||||
fun extraOpts(vararg values: Any)
|
||||
fun extraOpts(values: List<Any>)
|
||||
|
||||
val dependencies: ComponentDependencies
|
||||
fun dependencies(action: ComponentDependencies.() -> Unit)
|
||||
fun dependencies(action: Closure<Unit>)
|
||||
fun dependencies(action: Action<ComponentDependencies>)
|
||||
}
|
||||
|
||||
interface CInterop : Named, CInteropSettings {
|
||||
|
||||
+5
-1
@@ -35,7 +35,11 @@ open class KotlinNativeDependenciesImpl @Inject constructor(
|
||||
KotlinNativeDependencies {
|
||||
|
||||
internal val cinterops = project.container(CInteropImpl::class.java) { name ->
|
||||
CInteropImpl(project, name)
|
||||
CInteropImpl(project, name).apply {
|
||||
dependencies.implementationDependencies.extendsFrom(
|
||||
this@KotlinNativeDependenciesImpl.implementationDependencies
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun cinterop(name: String) = cinterops.maybeCreate(name)
|
||||
|
||||
+18
-1
@@ -19,9 +19,10 @@ package org.jetbrains.kotlin.gradle.plugin.experimental.internal.cinterop
|
||||
import groovy.lang.Closure
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.DomainObjectCollection
|
||||
import org.gradle.api.NamedDomainObjectContainer
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.language.ComponentDependencies
|
||||
import org.gradle.language.internal.DefaultComponentDependencies
|
||||
import org.gradle.util.ConfigureUtil
|
||||
import org.jetbrains.kotlin.gradle.plugin.experimental.CInterop
|
||||
import org.jetbrains.kotlin.gradle.plugin.experimental.CInteropSettings
|
||||
@@ -46,12 +47,19 @@ open class CInteropImpl @Inject constructor(
|
||||
private val targetToSettings: MutableMap<KonanTarget, CInteropSettingsImpl> = mutableMapOf()
|
||||
|
||||
// DSL.
|
||||
|
||||
override val dependencies =
|
||||
DefaultComponentDependencies(project.configurations, name + "InteropImplementation")
|
||||
|
||||
override fun target(target: String): CInteropSettings = target(target.konanTarget)
|
||||
|
||||
override fun target(target: KonanTarget): CInteropSettings =
|
||||
targetToSettings.getOrPut(target) {
|
||||
CInteropSettingsImpl(project, name, target).also {
|
||||
platformSettings.add(it)
|
||||
it.dependencies.implementationDependencies.extendsFrom(
|
||||
this.dependencies.implementationDependencies
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,4 +101,13 @@ open class CInteropImpl @Inject constructor(
|
||||
|
||||
override fun extraOpts(vararg values: Any) = platformSettings.all { it.extraOpts(*values) }
|
||||
override fun extraOpts(values: List<Any>) = platformSettings.all { it.extraOpts(values) }
|
||||
|
||||
override fun dependencies(action: ComponentDependencies.() -> Unit) {
|
||||
dependencies.action()
|
||||
}
|
||||
override fun dependencies(action: Closure<Unit>) =
|
||||
dependencies(ConfigureUtil.configureUsing(action))
|
||||
override fun dependencies(action: Action<ComponentDependencies>) {
|
||||
action.execute(dependencies)
|
||||
}
|
||||
}
|
||||
+37
@@ -20,10 +20,19 @@ import groovy.lang.Closure
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.Named
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.attributes.Usage
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.language.ComponentDependencies
|
||||
import org.gradle.language.cpp.CppBinary
|
||||
import org.gradle.language.internal.DefaultComponentDependencies
|
||||
import org.gradle.nativeplatform.OperatingSystemFamily
|
||||
import org.gradle.util.ConfigureUtil
|
||||
import org.jetbrains.kotlin.gradle.plugin.experimental.CInteropSettings
|
||||
import org.jetbrains.kotlin.gradle.plugin.experimental.CInteropSettings.IncludeDirectories
|
||||
import org.jetbrains.kotlin.gradle.plugin.experimental.KotlinNativeBinary
|
||||
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.KotlinNativeBuildType
|
||||
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.KotlinNativeUsage
|
||||
import org.jetbrains.kotlin.gradle.plugin.experimental.internal.getGradleOSFamily
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import java.io.File
|
||||
import javax.inject.Inject
|
||||
@@ -64,6 +73,25 @@ open class CInteropSettingsImpl @Inject constructor(
|
||||
|
||||
// DSL methods.
|
||||
|
||||
override val dependencies = DefaultComponentDependencies(
|
||||
project.configurations,
|
||||
name + "InteropImplementation"
|
||||
).apply {
|
||||
with(implementationDependencies) {
|
||||
val objects = project.objects
|
||||
isCanBeConsumed = false
|
||||
isCanBeResolved = true
|
||||
attributes.attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage::class.java, KotlinNativeUsage.KLIB))
|
||||
attributes.attribute(CppBinary.DEBUGGABLE_ATTRIBUTE, KotlinNativeBuildType.DEBUG.debuggable)
|
||||
attributes.attribute(CppBinary.OPTIMIZED_ATTRIBUTE, KotlinNativeBuildType.DEBUG.optimized)
|
||||
attributes.attribute(KotlinNativeBinary.KONAN_TARGET_ATTRIBUTE, konanTarget.name)
|
||||
attributes.attribute(
|
||||
OperatingSystemFamily.OPERATING_SYSTEM_ATTRIBUTE,
|
||||
konanTarget.getGradleOSFamily(objects)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun defFile(file: Any) {
|
||||
defFile = project.file(file)
|
||||
}
|
||||
@@ -97,4 +125,13 @@ open class CInteropSettingsImpl @Inject constructor(
|
||||
override fun extraOpts(values: List<Any>) {
|
||||
extraOpts.addAll(values.map { it.toString() })
|
||||
}
|
||||
|
||||
override fun dependencies(action: ComponentDependencies.() -> Unit) {
|
||||
dependencies.action()
|
||||
}
|
||||
override fun dependencies(action: Closure<Unit>) =
|
||||
dependencies(ConfigureUtil.configureUsing(action))
|
||||
override fun dependencies(action: Action<ComponentDependencies>) {
|
||||
action.execute(dependencies)
|
||||
}
|
||||
}
|
||||
+3
-1
@@ -203,7 +203,9 @@ class KotlinNativeBasePlugin: Plugin<ProjectInternal> {
|
||||
|
||||
binary.klibraries.dependencies.add(dependencies.create(files(interopTask.outputFileProvider)))
|
||||
if (binary is KotlinNativeLibrary) {
|
||||
binary.linkElements.get().outgoing.artifact(interopTask.outputFileProvider)
|
||||
binary.linkElements.get().outgoing.artifact(interopTask.outputFileProvider) {
|
||||
it.classifier = "interop-${cinterop.name}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+8
-9
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin.experimental.tasks
|
||||
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.tasks.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
@@ -75,6 +76,9 @@ open class CInteropTask @Inject constructor(val settings: CInteropSettingsImpl):
|
||||
val headerFilterDirs: Set<File>
|
||||
@Input get() = settings.includeDirs.headerFilterDirs.files
|
||||
|
||||
val libraries: Configuration
|
||||
@InputFiles get() = settings.dependencies.implementationDependencies
|
||||
|
||||
val extraOpts: List<String>
|
||||
@Input get() = settings.extraOpts
|
||||
|
||||
@@ -102,15 +106,10 @@ open class CInteropTask @Inject constructor(val settings: CInteropSettingsImpl):
|
||||
addArgs("-copt", allHeadersDirs.map { "-I${it.absolutePath}" })
|
||||
addArgs("-headerFilterAdditionalSearchPrefix", headerFilterDirs.map { it.absolutePath })
|
||||
|
||||
/* TODO: Support dependencies
|
||||
addArgs("-repo", libraries.repos.map { it.canonicalPath })
|
||||
|
||||
addFileArgs("-library", libraries.files)
|
||||
addArgs("-library", libraries.namedKlibs)
|
||||
addArgs("-library", libraries.artifacts.map { it.artifact.canonicalPath })
|
||||
|
||||
addKey("-nodefaultlibs", noDefaultLibs)
|
||||
*/
|
||||
libraries.files.forEach { library ->
|
||||
library.parent?.let { addArg("-r", it) }
|
||||
addArg("-l", library.nameWithoutExtension)
|
||||
}
|
||||
|
||||
addAll(extraOpts)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user