[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:
committed by
Space Team
parent
c03e0f96d2
commit
a2276f9c21
+3
-5
@@ -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(
|
||||
|
||||
+28
-2
@@ -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 :
|
||||
|
||||
+7
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user