[KT-53256] Setup K/N distribution downloading for KPM.

This commit is contained in:
konstantin.tskhovrebov
2022-07-20 14:16:53 +02:00
committed by Space
parent 8adb0528d7
commit 73226aba00
3 changed files with 31 additions and 27 deletions
@@ -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 <T : GradleKpmNativeVariantInternal> GradleKpmNativeVariantFactory(
module: GradleKpmModule,
@@ -80,6 +81,8 @@ class GradleKpmNativeVariantConfigurator<T : GradleKpmNativeVariantInternal>(
) : GradleKpmFragmentFactory.FragmentConfigurator<T> {
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)
@@ -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<T : KotlinNativeTarget>(
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<T>
protected abstract fun instantiateTarget(name: String): T
override fun createTarget(name: String): T {
setupNativeCompiler()
project.setupNativeCompiler(konanTarget)
val result = instantiateTarget(name).apply {
targetName = name
@@ -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()
}
}