[Gradle] Add AddKotlinPlatformIntegersSupportLibrary

Move code from KotlinNativePlatformDependencies.kt

^KT-61559
This commit is contained in:
Anton Lakotka
2023-11-30 23:43:22 +01:00
committed by Space Team
parent 1604ab1e0b
commit 4a0bfcd842
7 changed files with 60 additions and 40 deletions
@@ -16,9 +16,9 @@ import org.gradle.api.tasks.*
import org.gradle.work.DisableCachingByDefault
import org.jetbrains.kotlin.commonizer.toolsDir
import org.jetbrains.kotlin.gradle.plugin.KotlinProjectSetupCoroutine
import org.jetbrains.kotlin.gradle.targets.native.internal.konanDistribution
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
import org.jetbrains.kotlin.gradle.utils.getFile
import org.jetbrains.kotlin.gradle.utils.konanDistribution
import org.jetbrains.kotlin.gradle.utils.property
import javax.inject.Inject
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.gradle.targets.native.ConfigureFrameworkExportSideEf
import org.jetbrains.kotlin.gradle.targets.native.CreateFatFrameworksSetupAction
import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeConfigureBinariesSideEffect
import org.jetbrains.kotlin.gradle.targets.native.SetupEmbedAndSignAppleFrameworkTaskSideEffect
import org.jetbrains.kotlin.gradle.targets.native.internal.AddKotlinPlatformIntegersSupportLibrary
import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropCommonizedCInteropApiElementsConfigurationsSetupAction
import org.jetbrains.kotlin.gradle.targets.native.internal.SetupCInteropApiElementsConfigurationSideEffect
import org.jetbrains.kotlin.gradle.targets.native.internal.SetupKotlinNativePlatformDependenciesAndStdlib
@@ -47,6 +48,7 @@ internal fun Project.registerKotlinPluginExtensions() {
register(project, SyncLanguageSettingsWithKotlinExtensionSetupAction)
register(project, UserDefinedAttributesSetupAction)
register(project, CustomizeKotlinDependenciesSetupAction)
register(project, AddKotlinPlatformIntegersSupportLibrary)
if (isJvm || isMultiplatform) {
@@ -61,12 +61,6 @@ abstract class AbstractKotlinNativeTargetPreset<T : KotlinNativeTarget>(
createTargetConfigurator().configureTarget(result)
SingleActionPerProject.run(project, "setUpKotlinNativePlatformDependencies") {
project.whenEvaluated {
project.setupKotlinNativePlatformDependencies()
}
}
SingleActionPerProject.run(project, "setupCInteropDependencies") {
project.setupCInteropCommonizerDependencies()
project.setupCInteropPropagatedDependencies()
@@ -0,0 +1,51 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.targets.native.internal
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.internal.KOTLIN_MODULE_GROUP
import org.jetbrains.kotlin.gradle.internal.PLATFORM_INTEGERS_SUPPORT_LIBRARY
import org.jetbrains.kotlin.gradle.plugin.KotlinProjectSetupCoroutine
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
import org.jetbrains.kotlin.gradle.plugin.sources.getVisibleSourceSetsFromAssociateCompilations
import org.jetbrains.kotlin.gradle.plugin.sources.internal
internal val AddKotlinPlatformIntegersSupportLibrary = KotlinProjectSetupCoroutine {
if (!isPlatformIntegerCommonizationEnabled) return@KotlinProjectSetupCoroutine
val kotlin = multiplatformExtensionOrNull ?: return@KotlinProjectSetupCoroutine
val sourceSets = kotlin.awaitSourceSets()
/**
* Calculate roots of native source sets
* Imagine following structure:
*
* ```
* common
* / | \
* jvm linux ios
* / | | \
* lX64 lArm64 iosX64 iosArm64
* ```
*
* In the structure above following source sets are native: linux, ios, lX64, lArm64, iosX64, iosArm64
* But roots of the native source set hierarchies are only linux and ios. I.e. they don't depend on any other
* native source set. The code below calculates exactly that:
*/
val nativeSourceSets = sourceSets.filter { sourceSet -> sourceSet.internal.commonizerTarget.await() != null }
val nativeSourceSetsRoots = nativeSourceSets.filter { sourceSet ->
val allVisibleSourceSets = sourceSet.dependsOn + getVisibleSourceSetsFromAssociateCompilations(sourceSet)
allVisibleSourceSets.none { dependency ->
dependency in nativeSourceSets
}
}
nativeSourceSetsRoots.forEach { sourceSet ->
dependencies.add(
sourceSet.implementationConfigurationName,
"$KOTLIN_MODULE_GROUP:$PLATFORM_INTEGERS_SUPPORT_LIBRARY:${getKotlinPluginVersion()}"
)
}
}
@@ -27,31 +27,6 @@ import org.jetbrains.kotlin.gradle.utils.filesProvider
import org.jetbrains.kotlin.gradle.utils.konanDistribution
import java.io.File
internal fun Project.setupKotlinNativePlatformDependencies() {
val kotlin = multiplatformExtensionOrNull ?: return
launch {
if (isPlatformIntegerCommonizationEnabled) {
kotlin.nativeRootSourceSets().forEach { sourceSet ->
dependencies.add(
sourceSet.implementationConfigurationName,
"$KOTLIN_MODULE_GROUP:$PLATFORM_INTEGERS_SUPPORT_LIBRARY:${getKotlinPluginVersion()}"
)
}
}
}
}
internal suspend fun KotlinMultiplatformExtension.nativeRootSourceSets(): Collection<KotlinSourceSet> {
val nativeSourceSets = sourceSets.filter { sourceSet -> sourceSet.internal.commonizerTarget.await() != null }
return nativeSourceSets.filter { sourceSet ->
val allVisibleSourceSets = sourceSet.dependsOn + getVisibleSourceSetsFromAssociateCompilations(sourceSet)
allVisibleSourceSets.none { dependency ->
dependency in nativeSourceSets
}
}
}
/**
* Function signature needs to be kept stable since this is used during import
* in IDEs (KotlinCommonizerModelBuilder) < 222
@@ -5,9 +5,6 @@
package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Project
import org.jetbrains.kotlin.commonizer.KonanDistribution
import org.jetbrains.kotlin.compilerRunner.konanHome
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension
@@ -29,8 +26,4 @@ internal fun KotlinProjectExtension.forAllTargets(action: (target: KotlinTarget)
is KotlinMultiplatformExtension -> targets.all(action)
else -> error("Unexpected 'kotlin' extension $this")
}
}
internal val Project.konanDistribution: KonanDistribution
get() = KonanDistribution(project.file(konanHome))
}
@@ -6,6 +6,8 @@
package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Project
import org.jetbrains.kotlin.commonizer.KonanDistribution
import org.jetbrains.kotlin.compilerRunner.konanHome
import org.jetbrains.kotlin.gradle.plugin.internal.BasePluginConfiguration
import org.jetbrains.kotlin.gradle.plugin.variantImplementationFactory
@@ -38,3 +40,6 @@ internal val Project.distsDirectory
get() = variantImplementationFactory<BasePluginConfiguration.BasePluginConfigurationVariantFactory>()
.getInstance(this)
.distsDirectory
internal val Project.konanDistribution: KonanDistribution
get() = KonanDistribution(project.file(konanHome))