diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmNativeVariantFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmNativeVariantFactory.kt index c04de74bc81..ba87d92700f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmNativeVariantFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmNativeVariantFactory.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.pm20 import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.FragmentNameDisambiguation +import org.jetbrains.kotlin.gradle.utils.setupNativeCompiler fun GradleKpmNativeVariantFactory( module: GradleKpmModule, @@ -80,6 +81,8 @@ class GradleKpmNativeVariantConfigurator( ) : GradleKpmFragmentFactory.FragmentConfigurator { override fun configure(fragment: T) { + fragment.project.setupNativeCompiler(fragment.konanTarget) + fragment.compileDependenciesConfiguration.configure(config.compileDependencies, fragment) fragment.apiElementsConfiguration.configure(config.apiElements, fragment) fragment.hostSpecificMetadataElementsConfiguration?.configure(config.hostSpecificMetadataElements, fragment) 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 792a2e780b6..eb388c52488 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 @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter import org.jetbrains.kotlin.gradle.targets.native.internal.* import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject +import org.jetbrains.kotlin.gradle.utils.setupNativeCompiler import org.jetbrains.kotlin.konan.CompilerVersion import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget @@ -41,38 +42,12 @@ abstract class AbstractKotlinNativeTargetPreset( extensions.extraProperties.set(KOTLIN_NATIVE_HOME_PRIVATE_PROPERTY, konanHome) } - private val propertiesProvider = PropertiesProvider(project) - - private val isKonanHomeOverridden: Boolean - get() = propertiesProvider.nativeHome != null - - private fun setupNativeCompiler() = with(project) { - if (!isKonanHomeOverridden) { - val downloader = NativeCompilerDownloader(this) - - if (propertiesProvider.nativeReinstall) { - logger.info("Reinstall Kotlin/Native distribution") - downloader.compilerDirectory.deleteRecursively() - } - - downloader.downloadIfNeeded() - logger.info("Kotlin/Native distribution: $konanHome") - } else { - logger.info("User-provided Kotlin/Native distribution: $konanHome") - } - - val distributionType = NativeDistributionTypeProvider(project).getDistributionType(konanVersion) - if (distributionType.mustGeneratePlatformLibs) { - PlatformLibrariesGenerator(project, konanTarget).generatePlatformLibsIfNeeded() - } - } - protected abstract fun createTargetConfigurator(): AbstractKotlinTargetConfigurator protected abstract fun instantiateTarget(name: String): T override fun createTarget(name: String): T { - setupNativeCompiler() + project.setupNativeCompiler(konanTarget) val result = instantiateTarget(name).apply { targetName = name diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt index d2cc2264ab2..d55a796a3b5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt @@ -11,16 +11,20 @@ import org.gradle.api.artifacts.repositories.ArtifactRepository import org.gradle.api.file.FileTree import org.gradle.api.logging.Logger import org.jetbrains.kotlin.compilerRunner.KotlinNativeCompilerRunner +import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.compilerRunner.konanVersion import org.jetbrains.kotlin.gradle.logging.kotlinInfo import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider +import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider import org.jetbrains.kotlin.gradle.targets.native.internal.NativeDistributionType import org.jetbrains.kotlin.gradle.targets.native.internal.NativeDistributionTypeProvider +import org.jetbrains.kotlin.gradle.targets.native.internal.PlatformLibrariesGenerator import org.jetbrains.kotlin.konan.CompilerVersion import org.jetbrains.kotlin.konan.CompilerVersionImpl import org.jetbrains.kotlin.konan.MetaVersion import org.jetbrains.kotlin.konan.isAtLeast import org.jetbrains.kotlin.konan.target.HostManager +import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.util.DependencyDirectories import java.io.File import java.nio.file.Files @@ -170,4 +174,26 @@ class NativeCompilerDownloader( downloadAndExtract() } } +} + +internal fun Project.setupNativeCompiler(konanTarget: KonanTarget) { + val isKonanHomeOverridden = kotlinPropertiesProvider.nativeHome != null + if (!isKonanHomeOverridden) { + val downloader = NativeCompilerDownloader(this) + + if (kotlinPropertiesProvider.nativeReinstall) { + logger.info("Reinstall Kotlin/Native distribution") + downloader.compilerDirectory.deleteRecursively() + } + + downloader.downloadIfNeeded() + logger.info("Kotlin/Native distribution: $konanHome") + } else { + logger.info("User-provided Kotlin/Native distribution: $konanHome") + } + + val distributionType = NativeDistributionTypeProvider(project).getDistributionType(konanVersion) + if (distributionType.mustGeneratePlatformLibs) { + PlatformLibrariesGenerator(project, konanTarget).generatePlatformLibsIfNeeded() + } } \ No newline at end of file