[KT-53256] Setup K/N distribution downloading for KPM.
This commit is contained in:
committed by
Space
parent
8adb0528d7
commit
73226aba00
+3
@@ -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)
|
||||
|
||||
+2
-27
@@ -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
|
||||
|
||||
+26
@@ -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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user