[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( private fun KotlinCompilation<*>.toPlatformCompilationData() = SourceSetVisibilityProvider.PlatformCompilationData(
allSourceSets = allKotlinSourceSets.map { it.name }.toSet(), allSourceSets = allKotlinSourceSets.map { it.name }.toSet(),
resolvedDependenciesConfiguration = LazyResolvedConfiguration(project.configurations.getByName(compileDependencyConfigurationName)), resolvedDependenciesConfiguration = LazyResolvedConfiguration(project.configurations.getByName(compileDependencyConfigurationName)),
hostSpecificMetadataConfiguration = project hostSpecificMetadataConfiguration = (this as? KotlinNativeCompilation)
.configurations ?.hostSpecificMetadataConfiguration
.getByName(compileDependencyConfigurationName) ?.let(::LazyResolvedConfiguration)
.copyRecursive().apply { attributes.attribute(Usage.USAGE_ATTRIBUTE, project.usageByName(KotlinUsages.KOTLIN_METADATA)) }
.let(::LazyResolvedConfiguration)
) )
internal class SourceSetVisibilityProvider( internal class SourceSetVisibilityProvider(
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory 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.Category
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.jetbrains.kotlin.gradle.plugin.* 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.DefaultKotlinCompilationConfigurationsContainer
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationConfigurationsContainer import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationConfigurationsContainer
import org.jetbrains.kotlin.gradle.plugin.mpp.javaSourceSets 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.KotlinJsTarget
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.utils.* import org.jetbrains.kotlin.gradle.utils.*
@@ -36,16 +39,39 @@ internal sealed class DefaultKotlinCompilationDependencyConfigurationsFactory :
internal object NativeKotlinCompilationDependencyConfigurationsFactory : internal object NativeKotlinCompilationDependencyConfigurationsFactory :
KotlinCompilationImplFactory.KotlinCompilationDependencyConfigurationsFactory { KotlinCompilationImplFactory.KotlinCompilationDependencyConfigurationsFactory {
override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationConfigurationsContainer { override fun create(target: KotlinTarget, compilationName: String): NativeCompilationDependencyConfigurationsContainer {
val naming = ConfigurationNaming.Default(target, compilationName) val naming = ConfigurationNaming.Default(target, compilationName)
return KotlinCompilationDependencyConfigurationsContainer( val baseContainer = KotlinCompilationDependencyConfigurationsContainer(
target = target, target = target,
compilationName = compilationName, compilationName = compilationName,
naming = naming, naming = naming,
withRuntime = false, withRuntime = false,
compileClasspathConfigurationName = naming.name("compileKlibraries") 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 : internal object JsKotlinCompilationDependencyConfigurationsFactory :
@@ -9,10 +9,12 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.Action import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl 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.targets.native.NativeCompilerOptions
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
@@ -67,6 +69,11 @@ open class KotlinNativeCompilation @Inject internal constructor(
val binariesTaskName: String val binariesTaskName: String
get() = lowerCamelCaseName(target.disambiguationClassifier, compilation.compilationName, "binaries") 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( open class KotlinSharedNativeCompilation @Inject internal constructor(