Add a project property for Kotlin/Native version overriding
This commit is contained in:
committed by
Ilya Matveev
parent
80bec0898f
commit
ccd4bc1bff
@@ -16,7 +16,18 @@ interface KonanVersion : Serializable {
|
||||
|
||||
fun toString(showMeta: Boolean, showBuild: Boolean): String
|
||||
|
||||
companion object
|
||||
companion object {
|
||||
// major.minor.patch-meta-build where patch, meta and build are optional.
|
||||
private val versionPattern = "(\\d+)\\.(\\d+)(?:\\.(\\d+))?(?:-(\\p{Alpha}\\p{Alnum}*))?(?:-(\\d+))?".toRegex()
|
||||
|
||||
fun fromString(version: String) : KonanVersion {
|
||||
val (major, minor, maintenance, metaString, build) =
|
||||
versionPattern.matchEntire(version)?.destructured ?:
|
||||
throw IllegalArgumentException("Cannot parse Kotlin/Native version: $version")
|
||||
val meta = metaString.ifEmpty { "release" }.let { MetaVersion.valueOf(it.toUpperCase()) }
|
||||
return KonanVersionImpl(meta, major.toInt(), minor.toInt(), maintenance.toIntOrNull() ?: 0, build.toIntOrNull() ?: -1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class KonanVersionImpl(
|
||||
|
||||
+7
@@ -20,6 +20,7 @@ import org.gradle.api.Named
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
|
||||
import org.jetbrains.kotlin.konan.KonanVersion
|
||||
import org.jetbrains.kotlin.konan.target.HostManager
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import org.jetbrains.kotlin.konan.util.DependencyDirectories
|
||||
@@ -29,6 +30,7 @@ import org.jetbrains.kotlin.konan.util.DependencyDirectories
|
||||
internal enum class KotlinNativeProjectProperty(val propertyName: String) {
|
||||
KONAN_HOME_OVERRIDE ("org.jetbrains.kotlin.native.home"),
|
||||
KONAN_JVM_ARGS ("org.jetbrains.kotlin.native.jvmArgs"),
|
||||
KONAN_VERSION ("org.jetbrains.kotlin.native.version"),
|
||||
KONAN_USE_ENVIRONMENT_VARIABLES("org.jetbrains.kotlin.native.useEnvironmentVariables")
|
||||
}
|
||||
|
||||
@@ -49,6 +51,11 @@ internal val Project.konanHome: String
|
||||
file(it).absolutePath
|
||||
} ?: NativeCompilerDownloader(project).compilerDirectory.absolutePath
|
||||
|
||||
internal val Project.konanVersion: KonanVersion
|
||||
get() = project.findProperty(KotlinNativeProjectProperty.KONAN_VERSION)?.let {
|
||||
KonanVersion.fromString(it.toString())
|
||||
} ?: NativeCompilerDownloader.DEFAULT_KONAN_VERSION
|
||||
|
||||
internal interface KonanToolRunner: Named {
|
||||
val mainClass: String
|
||||
val classpath: FileCollection
|
||||
|
||||
+1
-4
@@ -11,10 +11,7 @@ import org.gradle.api.internal.file.FileResolver
|
||||
import org.gradle.api.plugins.JavaPlugin
|
||||
import org.gradle.internal.cleanup.BuildOutputCleanupRegistry
|
||||
import org.gradle.internal.reflect.Instantiator
|
||||
import org.jetbrains.kotlin.compilerRunner.KotlinNativeProjectProperty
|
||||
import org.jetbrains.kotlin.compilerRunner.hasProperty
|
||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||
import org.jetbrains.kotlin.compilerRunner.setProperty
|
||||
import org.jetbrains.kotlin.compilerRunner.*
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
|
||||
+1
-1
@@ -154,7 +154,7 @@ open class KotlinNativeCompile : AbstractCompile() {
|
||||
// endregion.
|
||||
|
||||
val kotlinNativeVersion: String
|
||||
@Input get() = NativeCompilerDownloader(project).compilerVersion.toString()
|
||||
@Input get() = project.konanVersion.toString()
|
||||
|
||||
// We manually register this property as output file or directory depending on output kind.
|
||||
@Internal
|
||||
|
||||
+7
-6
@@ -10,7 +10,7 @@ import org.gradle.api.artifacts.repositories.ArtifactRepository
|
||||
import org.gradle.api.artifacts.repositories.IvyPatternRepositoryLayout
|
||||
import org.gradle.api.file.FileTree
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.jetbrains.kotlin.compilerRunner.KonanCompilerRunner
|
||||
import org.jetbrains.kotlin.compilerRunner.*
|
||||
import org.jetbrains.kotlin.konan.KonanVersion
|
||||
import org.jetbrains.kotlin.konan.KonanVersionImpl
|
||||
import org.jetbrains.kotlin.konan.MetaVersion
|
||||
@@ -18,9 +18,13 @@ import org.jetbrains.kotlin.konan.target.HostManager
|
||||
import org.jetbrains.kotlin.konan.util.DependencyDirectories
|
||||
import java.io.File
|
||||
|
||||
class NativeCompilerDownloader(val project: Project) {
|
||||
class NativeCompilerDownloader(
|
||||
val project: Project,
|
||||
val compilerVersion: KonanVersion = project.konanVersion
|
||||
) {
|
||||
|
||||
internal companion object {
|
||||
val DEFAULT_KONAN_VERSION = KonanVersionImpl(MetaVersion.RELEASE, 0, 9, 0)
|
||||
const val BASE_DOWNLOAD_URL = "https://download.jetbrains.com/kotlin/native/builds"
|
||||
}
|
||||
|
||||
@@ -88,7 +92,7 @@ class NativeCompilerDownloader(val project: Project) {
|
||||
val archive = configuration.files.single()
|
||||
|
||||
logger.info("Use Kotlin/Native compiler archive: ${archive.absolutePath}")
|
||||
logger.lifecycle("Unpacking Kotlin/Native compiler (version $versionString)...")
|
||||
logger.lifecycle("Unpack Kotlin/Native compiler (version $versionString)...")
|
||||
project.copy {
|
||||
it.from(archiveFileTree(archive))
|
||||
it.into(DependencyDirectories.localKonanDir)
|
||||
@@ -100,9 +104,6 @@ class NativeCompilerDownloader(val project: Project) {
|
||||
val compilerDirectory: File
|
||||
get() = DependencyDirectories.localKonanDir.resolve("kotlin-native-$simpleOsName-$compilerVersion")
|
||||
|
||||
// TODO: Support project property for Kotlin/Native compiler version
|
||||
val compilerVersion: KonanVersion = KonanVersionImpl(MetaVersion.RELEASE, 0, 9, 0)
|
||||
|
||||
fun downloadIfNeeded() {
|
||||
if (KonanCompilerRunner(project).classpath.isEmpty) {
|
||||
downloadAndExtract()
|
||||
|
||||
Reference in New Issue
Block a user