diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt index 704e96c2336..1f7560321d1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/SourceSetVisibilityProvider.kt @@ -41,11 +41,9 @@ private fun Project.collectAllPlatformCompilationData(): List.toPlatformCompilationData() = SourceSetVisibilityProvider.PlatformCompilationData( allSourceSets = allKotlinSourceSets.map { it.name }.toSet(), resolvedDependenciesConfiguration = LazyResolvedConfiguration(project.configurations.getByName(compileDependencyConfigurationName)), - hostSpecificMetadataConfiguration = project - .configurations - .getByName(compileDependencyConfigurationName) - .copyRecursive().apply { attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA)) } - .let(::LazyResolvedConfiguration) + hostSpecificMetadataConfiguration = (this as? KotlinNativeCompilation) + ?.hostSpecificMetadataConfiguration + ?.let(::LazyResolvedConfiguration) ) internal class SourceSetVisibilityProvider( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/KotlinCompilationDependencyConfigurationsFactories.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/KotlinCompilationDependencyConfigurationsFactories.kt index 2b0547cb3ce..0799c89f54c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/KotlinCompilationDependencyConfigurationsFactories.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/compilationImpl/factory/KotlinCompilationDependencyConfigurationsFactories.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory +import org.gradle.api.artifacts.Configuration import org.gradle.api.attributes.Category import org.gradle.api.attributes.Usage import org.jetbrains.kotlin.gradle.plugin.* @@ -13,6 +14,8 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationConfigurationsContainer import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationConfigurationsContainer import org.jetbrains.kotlin.gradle.plugin.mpp.javaSourceSets +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.copyAttributes +import org.jetbrains.kotlin.gradle.plugin.sources.METADATA_CONFIGURATION_NAME_SUFFIX import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.utils.* @@ -36,16 +39,39 @@ internal sealed class DefaultKotlinCompilationDependencyConfigurationsFactory : internal object NativeKotlinCompilationDependencyConfigurationsFactory : KotlinCompilationImplFactory.KotlinCompilationDependencyConfigurationsFactory { - override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationConfigurationsContainer { + override fun create(target: KotlinTarget, compilationName: String): NativeCompilationDependencyConfigurationsContainer { val naming = ConfigurationNaming.Default(target, compilationName) - return KotlinCompilationDependencyConfigurationsContainer( + val baseContainer = KotlinCompilationDependencyConfigurationsContainer( target = target, compilationName = compilationName, naming = naming, withRuntime = false, compileClasspathConfigurationName = naming.name("compileKlibraries") ) + + val compilationCoordinates = "${target.disambiguationClassifier}/$compilationName" + val project = target.project + val hostSpecificMetadataConfiguration: Configuration = project + .configurations + .maybeCreate(naming.name(compilation, METADATA_CONFIGURATION_NAME_SUFFIX)) + .apply { + markResolvable() + isVisible = false + description = "Host-specific Metadata dependencies for $compilationCoordinates" + extendsFrom(baseContainer.compileDependencyConfiguration) + copyAttributes(from = baseContainer.compileDependencyConfiguration.attributes, to = attributes) + attributes { + it.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA)) + } + } + + return NativeCompilationDependencyConfigurationsContainer(baseContainer, hostSpecificMetadataConfiguration) } + + class NativeCompilationDependencyConfigurationsContainer( + baseContainer: KotlinCompilationConfigurationsContainer, + val hostSpecificMetadataConfiguration: Configuration? + ) : KotlinCompilationConfigurationsContainer by baseContainer } internal object JsKotlinCompilationDependencyConfigurationsFactory : diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt index 34f66a19976..539e527cfb3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeCompilation.kt @@ -9,10 +9,12 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.Action import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl +import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.NativeKotlinCompilationDependencyConfigurationsFactory.NativeCompilationDependencyConfigurationsContainer import org.jetbrains.kotlin.gradle.targets.native.NativeCompilerOptions import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName @@ -67,6 +69,11 @@ open class KotlinNativeCompilation @Inject internal constructor( val binariesTaskName: String get() = lowerCamelCaseName(target.disambiguationClassifier, compilation.compilationName, "binaries") + + internal val hostSpecificMetadataConfiguration: Configuration? get() { + val container = compilation.configurations as? NativeCompilationDependencyConfigurationsContainer + return container?.hostSpecificMetadataConfiguration + } } open class KotlinSharedNativeCompilation @Inject internal constructor(