diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt index 680598acec1..aa0ad9edd13 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt @@ -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 + ) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index 2c9c5d79472..41921def23c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -138,8 +138,41 @@ open class KotlinNativeTargetConfigurator( 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(taskName) { exec -> @@ -399,6 +432,7 @@ open class KotlinNativeTargetConfigurator( object NativeArtifactFormat { const val KLIB = "org.jetbrains.kotlin.klib" + const val FRAMEWORK = "org.jetbrains.kotlin.framework" } companion object {