[Gradle, K/N] Add consumable configuration with K/N frameworks

This commit is contained in:
Alexander Likhachev
2020-12-08 13:51:48 +03:00
parent ba969410c2
commit cbdcd8f2bc
2 changed files with 38 additions and 0 deletions
@@ -129,6 +129,10 @@ open class KotlinNativeTarget @Inject constructor(
"org.jetbrains.kotlin.native.target",
String::class.java
)
val konanBuildTypeAttribute = Attribute.of(
"org.jetbrains.kotlin.native.type",
String::class.java
)
}
}
@@ -138,8 +138,41 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget>(
tasks.named(binary.compilation.target.artifactsTaskName).configure { it.dependsOn(result) }
tasks.maybeCreate(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).dependsOn(result)
}
if (binary is Framework) {
val configuration = configurations.create(configurationName(binary.target.name, binary.buildType.name.toLowerCase()) + binary.baseName) {
it.isCanBeConsumed = true
it.isCanBeResolved = false
}
with(configuration) {
usesPlatformOf(binary.target)
project.afterEvaluate {
val linkArtifact = project.artifacts.add(name, binary.outputFile) { artifact ->
artifact.name = name
artifact.extension = "framework"
artifact.type = "binary"
artifact.classifier = "framework"
artifact.builtBy(result)
}
project.extensions.getByType(org.gradle.api.internal.plugins.DefaultArtifactPublicationSet::class.java)
.addCandidate(linkArtifact)
artifacts.add(linkArtifact)
attributes.attribute(
ArtifactAttributes.ARTIFACT_FORMAT,
NativeArtifactFormat.FRAMEWORK
)
attributes.attribute(
KotlinNativeTarget.konanBuildTypeAttribute,
binary.buildType.name
)
}
}
}
}
private fun configurationName(name: String, type: String): String =
listOf(name, type, "frameworks").joinToString("") { it.capitalize() }.decapitalize()
private fun Project.createRunTask(binary: Executable) {
val taskName = binary.runTaskName ?: return
registerTask<Exec>(taskName) { exec ->
@@ -399,6 +432,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget>(
object NativeArtifactFormat {
const val KLIB = "org.jetbrains.kotlin.klib"
const val FRAMEWORK = "org.jetbrains.kotlin.framework"
}
companion object {