Don't create individual Gradle configurations for every cinterop
Common configuration serves two purposes: * Dependencies are the same for all cinterops of a single compilation and can therefore be resolved only once in the single configuration * Compilations without cinterops should be able to receive cinterop dependencies from other projects, the updated configuration can be used for that KT-54975
This commit is contained in:
committed by
Space Team
parent
0e195b3ad0
commit
1c79e5a71a
+2
-2
@@ -1123,7 +1123,7 @@ class GeneralNativeIT : BaseGradleIT() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
build(":dependencyInsight", "--configuration", "hostTestTestNumberCInterop", "--dependency", "org.example:publishedLibrary") {
|
build(":dependencyInsight", "--configuration", "hostTestCInterop", "--dependency", "org.example:publishedLibrary") {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertVariantInDependencyInsight("hostApiElements-published")
|
assertVariantInDependencyInsight("hostApiElements-published")
|
||||||
}
|
}
|
||||||
@@ -1137,7 +1137,7 @@ class GeneralNativeIT : BaseGradleIT() {
|
|||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
)
|
)
|
||||||
|
|
||||||
build(":dependencyInsight", "--configuration", "hostTestTestNumberCInterop", "--dependency", ":projectLibrary") {
|
build(":dependencyInsight", "--configuration", "hostTestCInterop", "--dependency", ":projectLibrary") {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertVariantInDependencyInsight("hostCInteropApiElements")
|
assertVariantInDependencyInsight("hostCInteropApiElements")
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -327,7 +327,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotl
|
|||||||
target.compilations.all { compilation ->
|
target.compilations.all { compilation ->
|
||||||
createCInteropTasks(compilation, compilation.cinterops)
|
createCInteropTasks(compilation, compilation.cinterops)
|
||||||
compilation.cinterops.all { cinterop ->
|
compilation.cinterops.all { cinterop ->
|
||||||
cinterop.dependencyFiles += locateOrCreateCInteropDependencyConfiguration(compilation, cinterop, target)
|
cinterop.dependencyFiles += locateOrCreateCInteropDependencyConfiguration(compilation)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-10
@@ -10,14 +10,10 @@ import org.gradle.api.artifacts.Configuration
|
|||||||
import org.gradle.api.attributes.*
|
import org.gradle.api.attributes.*
|
||||||
import org.gradle.api.internal.artifacts.ArtifactAttributes
|
import org.gradle.api.internal.artifacts.ArtifactAttributes
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.CInteropSettings
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinNativeTargetConfigurator.NativeArtifactFormat
|
import org.jetbrains.kotlin.gradle.plugin.KotlinNativeTargetConfigurator.NativeArtifactFormat
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.categoryByName
|
import org.jetbrains.kotlin.gradle.plugin.categoryByName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.DefaultCInteropSettings
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.usesPlatformOf
|
import org.jetbrains.kotlin.gradle.plugin.usesPlatformOf
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropKlibLibraryElements.cinteropKlibLibraryElements
|
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropKlibLibraryElements.cinteropKlibLibraryElements
|
||||||
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
|
import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
|
||||||
@@ -40,26 +36,29 @@ internal fun createCInteropApiElementsKlibArtifact(
|
|||||||
|
|
||||||
internal fun Project.locateOrCreateCInteropDependencyConfiguration(
|
internal fun Project.locateOrCreateCInteropDependencyConfiguration(
|
||||||
compilation: KotlinNativeCompilation,
|
compilation: KotlinNativeCompilation,
|
||||||
cinterop: CInteropSettings,
|
|
||||||
target: KotlinTarget
|
|
||||||
): Configuration {
|
): Configuration {
|
||||||
|
configurations.findByName(compilation.cInteropDependencyConfigurationName)?.let { return it }
|
||||||
|
|
||||||
val compileOnlyConfiguration = configurations.getByName(compilation.compileOnlyConfigurationName)
|
val compileOnlyConfiguration = configurations.getByName(compilation.compileOnlyConfigurationName)
|
||||||
val implementationConfiguration = configurations.getByName(compilation.implementationConfigurationName)
|
val implementationConfiguration = configurations.getByName(compilation.implementationConfigurationName)
|
||||||
|
|
||||||
return configurations.maybeCreate(cinterop.dependencyConfigurationName).apply {
|
return configurations.create(compilation.cInteropDependencyConfigurationName).apply {
|
||||||
extendsFrom(compileOnlyConfiguration, implementationConfiguration)
|
extendsFrom(compileOnlyConfiguration, implementationConfiguration)
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeResolved = true
|
isCanBeResolved = true
|
||||||
isCanBeConsumed = false
|
isCanBeConsumed = false
|
||||||
|
|
||||||
usesPlatformOf(target)
|
usesPlatformOf(compilation.target)
|
||||||
attributes.attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, cinteropKlibLibraryElements())
|
attributes.attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, cinteropKlibLibraryElements())
|
||||||
attributes.attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage::class.java, KotlinUsages.KOTLIN_CINTEROP))
|
attributes.attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage::class.java, KotlinUsages.KOTLIN_CINTEROP))
|
||||||
attributes.attribute(Category.CATEGORY_ATTRIBUTE, project.categoryByName(Category.LIBRARY))
|
attributes.attribute(Category.CATEGORY_ATTRIBUTE, project.categoryByName(Category.LIBRARY))
|
||||||
description = "Dependencies for cinterop '${cinterop.name}' (compilation '${compilation.name}')."
|
description = "CInterop dependencies for compilation '${compilation.name}')."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal val KotlinNativeCompilation.cInteropDependencyConfigurationName: String
|
||||||
|
get() = compilation.disambiguateName("CInterop")
|
||||||
|
|
||||||
internal fun Project.locateOrCreateCInteropApiElementsConfiguration(target: KotlinTarget): Configuration {
|
internal fun Project.locateOrCreateCInteropApiElementsConfiguration(target: KotlinTarget): Configuration {
|
||||||
val configurationName = cInteropApiElementsConfigurationName(target)
|
val configurationName = cInteropApiElementsConfigurationName(target)
|
||||||
configurations.findByName(configurationName)?.let { return it }
|
configurations.findByName(configurationName)?.let { return it }
|
||||||
|
|||||||
Reference in New Issue
Block a user