[Gradle, K/N] Consumable frameworks review fixes
This commit is contained in:
+2
-2
@@ -129,8 +129,8 @@ open class KotlinNativeTarget @Inject constructor(
|
|||||||
"org.jetbrains.kotlin.native.target",
|
"org.jetbrains.kotlin.native.target",
|
||||||
String::class.java
|
String::class.java
|
||||||
)
|
)
|
||||||
val konanBuildTypeAttribute = Attribute.of(
|
val kotlinNativeBuildTypeAttribute = Attribute.of(
|
||||||
"org.jetbrains.kotlin.native.type",
|
"org.jetbrains.kotlin.native.build.type",
|
||||||
String::class.java
|
String::class.java
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-23
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.gradle.tasks.*
|
|||||||
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
||||||
import org.jetbrains.kotlin.gradle.testing.testTaskName
|
import org.jetbrains.kotlin.gradle.testing.testTaskName
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import org.jetbrains.kotlin.konan.target.HostManager
|
import org.jetbrains.kotlin.konan.target.HostManager
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -151,8 +152,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget>(
|
|||||||
binary: Framework,
|
binary: Framework,
|
||||||
linkTask: TaskProvider<KotlinNativeLink>
|
linkTask: TaskProvider<KotlinNativeLink>
|
||||||
) {
|
) {
|
||||||
fun <T: Task> Configuration.configureConfiguration(fat: Boolean, taskProvider: TaskProvider<T>) {
|
fun <T : Task> Configuration.configureConfiguration(taskProvider: TaskProvider<T>) {
|
||||||
usesPlatformOf(binary.target)
|
|
||||||
project.afterEvaluate {
|
project.afterEvaluate {
|
||||||
val task = taskProvider.get()
|
val task = taskProvider.get()
|
||||||
val artifactFile = when (task) {
|
val artifactFile = when (task) {
|
||||||
@@ -169,38 +169,38 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget>(
|
|||||||
project.extensions.getByType(org.gradle.api.internal.plugins.DefaultArtifactPublicationSet::class.java)
|
project.extensions.getByType(org.gradle.api.internal.plugins.DefaultArtifactPublicationSet::class.java)
|
||||||
.addCandidate(linkArtifact)
|
.addCandidate(linkArtifact)
|
||||||
artifacts.add(linkArtifact)
|
artifacts.add(linkArtifact)
|
||||||
|
attributes.attribute(KotlinPlatformType.attribute, binary.target.platformType)
|
||||||
attributes.attribute(
|
attributes.attribute(
|
||||||
org.gradle.api.internal.artifacts.ArtifactAttributes.ARTIFACT_FORMAT,
|
ArtifactAttributes.ARTIFACT_FORMAT,
|
||||||
org.jetbrains.kotlin.gradle.plugin.KotlinNativeTargetConfigurator.NativeArtifactFormat.FRAMEWORK
|
NativeArtifactFormat.FRAMEWORK
|
||||||
)
|
)
|
||||||
attributes.attribute(
|
attributes.attribute(
|
||||||
org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget.konanBuildTypeAttribute,
|
KotlinNativeTarget.kotlinNativeBuildTypeAttribute,
|
||||||
binary.buildType.name
|
binary.buildType.name
|
||||||
)
|
)
|
||||||
|
if (attributes.getAttribute(Framework.frameworkTargets) == null) {
|
||||||
|
attributes.attribute(
|
||||||
|
Framework.frameworkTargets,
|
||||||
|
setOf(binary.target.konanTarget.name)
|
||||||
|
)
|
||||||
|
}
|
||||||
// capture type parameter T
|
// capture type parameter T
|
||||||
fun <T> copyAttribute(key: Attribute<T>, from: AttributeContainer, to: AttributeContainer) {
|
fun <T> copyAttribute(key: Attribute<T>, from: AttributeContainer, to: AttributeContainer) {
|
||||||
to.attribute(key, from.getAttribute(key)!!)
|
to.attribute(key, from.getAttribute(key)!!)
|
||||||
}
|
}
|
||||||
binary.target.getAttributes().keySet().forEach {
|
binary.attributes.keySet().filter { it != KotlinNativeTarget.konanTargetAttribute }.forEach {
|
||||||
copyAttribute(it, binary.target.getAttributes(), this.attributes)
|
|
||||||
}
|
|
||||||
if (fat) {
|
|
||||||
attributes.attribute(KotlinNativeTarget.konanTargetAttribute, "fat")
|
|
||||||
// else is already set to real konan target
|
|
||||||
}
|
|
||||||
binary.attributes.keySet().forEach {
|
|
||||||
copyAttribute(it, binary.attributes, this.attributes)
|
copyAttribute(it, binary.attributes, this.attributes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations.create(frameworkConfigurationName(binary.target.name, binary.buildType.name.toLowerCase()) + binary.baseName) {
|
configurations.create(lowerCamelCaseName(binary.name, binary.target.name)) {
|
||||||
it.isCanBeConsumed = true
|
it.isCanBeConsumed = true
|
||||||
it.isCanBeResolved = false
|
it.isCanBeResolved = false
|
||||||
it.configureConfiguration(false, linkTask)
|
it.configureConfiguration(linkTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
val fatFrameworkConfigurationName = frameworkConfigurationName(binary.baseName, binary.buildType.name.toLowerCase() + "Fat")
|
val fatFrameworkConfigurationName = lowerCamelCaseName(binary.name, binary.target.konanTarget.family.name.toLowerCase(), "fat")
|
||||||
val fatFrameworkTaskName = "link${fatFrameworkConfigurationName.capitalize()}"
|
val fatFrameworkTaskName = "link${fatFrameworkConfigurationName.capitalize()}"
|
||||||
|
|
||||||
val fatFrameworkTask = try {
|
val fatFrameworkTask = try {
|
||||||
@@ -220,17 +220,19 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (configurations.findByName(fatFrameworkConfigurationName) == null) {
|
// maybeCreate is not used as it does not provide way to configure once
|
||||||
configurations.create(fatFrameworkConfigurationName) {
|
val fatConfiguration =
|
||||||
|
configurations.findByName(fatFrameworkConfigurationName) ?: configurations.create(fatFrameworkConfigurationName) {
|
||||||
it.isCanBeConsumed = true
|
it.isCanBeConsumed = true
|
||||||
it.isCanBeResolved = false
|
it.isCanBeResolved = false
|
||||||
it.configureConfiguration(true, fatFrameworkTask)
|
it.configureConfiguration(fatFrameworkTask)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun frameworkConfigurationName(name: String, type: String): String =
|
fatConfiguration.attributes.attribute(
|
||||||
listOf(name, type, "framework").joinToString("") { it.capitalize() }.decapitalize()
|
Framework.frameworkTargets,
|
||||||
|
(fatConfiguration.attributes.getAttribute(Framework.frameworkTargets) ?: setOf<String>()) + binary.target.konanTarget.name
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun Project.createRunTask(binary: Executable) {
|
private fun Project.createRunTask(binary: Executable) {
|
||||||
val taskName = binary.runTaskName ?: return
|
val taskName = binary.runTaskName ?: return
|
||||||
|
|||||||
+8
-2
@@ -12,7 +12,6 @@ import org.gradle.api.Named
|
|||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.artifacts.Dependency
|
import org.gradle.api.artifacts.Dependency
|
||||||
import org.gradle.api.attributes.Attribute
|
import org.gradle.api.attributes.Attribute
|
||||||
import org.gradle.api.attributes.AttributeContainer
|
|
||||||
import org.gradle.api.attributes.HasAttributes
|
import org.gradle.api.attributes.HasAttributes
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.AbstractExecTask
|
import org.gradle.api.tasks.AbstractExecTask
|
||||||
@@ -234,7 +233,7 @@ class Framework(
|
|||||||
compilation: KotlinNativeCompilation
|
compilation: KotlinNativeCompilation
|
||||||
) : AbstractNativeLibrary(name, baseName, buildType, compilation), HasAttributes {
|
) : AbstractNativeLibrary(name, baseName, buildType, compilation), HasAttributes {
|
||||||
|
|
||||||
private val attributeContainer = HierarchyAttributeContainer(parent = null)
|
private val attributeContainer = HierarchyAttributeContainer(parent = compilation.attributes)
|
||||||
|
|
||||||
override fun getAttributes() = attributeContainer
|
override fun getAttributes() = attributeContainer
|
||||||
|
|
||||||
@@ -281,6 +280,13 @@ class Framework(
|
|||||||
/** Embed placeholder LLVM IR data as a marker. */
|
/** Embed placeholder LLVM IR data as a marker. */
|
||||||
MARKER,
|
MARKER,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val frameworkTargets = Attribute.of(
|
||||||
|
"org.jetbrains.kotlin.native.framework.targets",
|
||||||
|
Set::class.java
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user