From 4a0bfcd842ecef22ed176df3d204ec1531fa8441 Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Thu, 30 Nov 2023 23:43:22 +0100 Subject: [PATCH] [Gradle] Add AddKotlinPlatformIntegersSupportLibrary Move code from KotlinNativePlatformDependencies.kt ^KT-61559 --- .../gradle/plugin/mpp/KotlinLLDBScript.kt | 2 +- .../plugin/registerKotlinPluginExtensions.kt | 2 + .../native/KotlinNativeTargetPreset.kt | 6 --- ...AddKotlinPlatformIntegersSupportLibrary.kt | 51 +++++++++++++++++++ .../KotlinNativePlatformDependencies.kt | 25 --------- .../gradle/utils/kotlinExtensionUtils.kt | 9 +--- .../kotlin/gradle/utils/projectExtensions.kt | 5 ++ 7 files changed, 60 insertions(+), 40 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/AddKotlinPlatformIntegersSupportLibrary.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinLLDBScript.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinLLDBScript.kt index 17e621d2a97..9bff77d80e4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinLLDBScript.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinLLDBScript.kt @@ -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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt index 7584ed7bf91..5f8cdbf72a5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/registerKotlinPluginExtensions.kt @@ -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) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt index 67a0febdeb7..8aab25b6e3f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt @@ -61,12 +61,6 @@ abstract class AbstractKotlinNativeTargetPreset( createTargetConfigurator().configureTarget(result) - SingleActionPerProject.run(project, "setUpKotlinNativePlatformDependencies") { - project.whenEvaluated { - project.setupKotlinNativePlatformDependencies() - } - } - SingleActionPerProject.run(project, "setupCInteropDependencies") { project.setupCInteropCommonizerDependencies() project.setupCInteropPropagatedDependencies() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/AddKotlinPlatformIntegersSupportLibrary.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/AddKotlinPlatformIntegersSupportLibrary.kt new file mode 100644 index 00000000000..e86c7ea6fb8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/AddKotlinPlatformIntegersSupportLibrary.kt @@ -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()}" + ) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/KotlinNativePlatformDependencies.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/KotlinNativePlatformDependencies.kt index 4dc6f8b5c2b..7f508935c19 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/KotlinNativePlatformDependencies.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/KotlinNativePlatformDependencies.kt @@ -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 { - 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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/kotlinExtensionUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/kotlinExtensionUtils.kt index dce9e777506..9a628f73868 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/kotlinExtensionUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/kotlinExtensionUtils.kt @@ -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)) - +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/projectExtensions.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/projectExtensions.kt index 82a08a216a8..2e733dd1c05 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/projectExtensions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/projectExtensions.kt @@ -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() .getInstance(this) .distsDirectory + +internal val Project.konanDistribution: KonanDistribution + get() = KonanDistribution(project.file(konanHome))