[Gradle] Create separate hostSpecificMetadataConfiguration for Native

Previously this configuration was created on ad-hoc basis by copying
the compileDependenciesConfiguration. This creates bunch of copies
which are practically doing the same thing. Extracting it on
compilation level makes it more controllable and prevents any duplicates

^KT-49933
This commit is contained in:
Anton Lakotka
2023-01-18 10:33:26 +01:00
committed by Space Team
parent c03e0f96d2
commit a2276f9c21
3 changed files with 38 additions and 7 deletions
@@ -41,11 +41,9 @@ private fun Project.collectAllPlatformCompilationData(): List<SourceSetVisibilit
private fun KotlinCompilation<*>.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(
@@ -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 :
@@ -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(