Plumbing KlibMetadataVersion and KlibIrVersion values to klib manifest

This commit is contained in:
Alexander Gorshenev
2019-11-28 03:14:25 +03:00
committed by alexander-gorshenev
parent bf12f7eee0
commit b0f077ff4b
22 changed files with 128 additions and 136 deletions
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.cli.js
import com.intellij.openapi.Disposable
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.text.StringUtil
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataVersion
import org.jetbrains.kotlin.cli.common.*
import org.jetbrains.kotlin.cli.common.ExitCode.COMPILATION_ERROR
import org.jetbrains.kotlin.cli.common.ExitCode.OK
@@ -317,7 +318,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
override fun createMetadataVersion(versionArray: IntArray): BinaryVersion {
// TODO: Support metadata versions for klibs
return JsMetadataVersion(*versionArray)
return KlibMetadataVersion(*versionArray)
}
override fun MutableList<String>.addPlatformOptions(arguments: K2JSCompilerArguments) {}
@@ -0,0 +1,27 @@
package org.jetbrains.kotlin.backend.common.serialization
import org.jetbrains.kotlin.library.KLIB_PROPERTY_IR_VERSION
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
class KlibIrVersion(vararg numbers: Int) : BinaryVersion(*numbers) {
override fun isCompatible(): Boolean = isCompatibleTo(INSTANCE)
companion object {
@JvmField
val INSTANCE = KlibIrVersion(1, 0, 0)
@JvmField
val INVALID_VERSION = KlibIrVersion(-1, -1, -1)
}
}
val KotlinLibrary.metadataVersion: KlibIrVersion
get() {
val versionString = manifestProperties.getProperty(KLIB_PROPERTY_IR_VERSION)
val versionIntArray = BinaryVersion.parseVersionArray(versionString)
?: error("Could not parse metadata version: $versionString")
return KlibIrVersion(*versionIntArray)
}
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.serialization.DescriptorTable
import org.jetbrains.kotlin.backend.common.serialization.isExpectMember
import org.jetbrains.kotlin.backend.common.serialization.isSerializableExpectClass
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataSerializer
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataVersion
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.ir.backend.js
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.library.KotlinLibrary
@@ -20,7 +20,7 @@ class JsLibraryResolver(
repositories: List<String>,
directLibs: List<String>,
knownAbiVersions: List<KotlinAbiVersion>?,
knownCompilerVersions: List<KonanVersion>?,
knownCompilerVersions: List<CompilerVersion>?,
distributionKlib: String?,
localKotlinDir: String?,
skipCurrentDir: Boolean,
@@ -49,7 +49,7 @@ fun jsResolveLibraries(libraries: List<String>, logger: Logger): KotlinLibraryRe
repositories = emptyList(),
directLibs = libraryAbsolutePaths,
knownAbiVersions = listOf(KotlinAbiVersion.CURRENT),
knownCompilerVersions = emptyList<KonanVersion>(),
knownCompilerVersions = emptyList<CompilerVersion>(),
distributionKlib = null,
localKotlinDir = null,
skipCurrentDir = false,
@@ -12,7 +12,9 @@ import org.jetbrains.kotlin.backend.common.LoggingContext
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.backend.common.serialization.DescriptorTable
import org.jetbrains.kotlin.backend.common.serialization.KlibIrVersion
import org.jetbrains.kotlin.backend.common.serialization.metadata.DynamicTypeDeserializer
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataVersion
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
@@ -21,7 +23,6 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrLinker
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsIrModuleSerializer
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsMangler
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.metadata.JsKlibMetadataVersion
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.metadata.KlibMetadataIncrementalSerializer
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
@@ -32,8 +33,6 @@ import org.jetbrains.kotlin.ir.util.generateTypicalIrProviderList
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.konan.KonanVersionImpl
import org.jetbrains.kotlin.konan.MetaVersion
import org.jetbrains.kotlin.konan.properties.propertyList
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
import org.jetbrains.kotlin.library.*
@@ -76,7 +75,7 @@ val emptyLoggingContext = object : LoggingContext {
}
private val CompilerConfiguration.metadataVersion
get() = get(CommonConfigurationKeys.METADATA_VERSION) as? JsKlibMetadataVersion ?: JsKlibMetadataVersion.INSTANCE
get() = get(CommonConfigurationKeys.METADATA_VERSION) as? KlibMetadataVersion ?: KlibMetadataVersion.INSTANCE
class KotlinFileSerializedData(val metadata: ByteArray, val irData: SerializedIrFile)
@@ -417,12 +416,13 @@ fun serializeModuleIntoKlib(
val fullSerializedIr = SerializedIrModule(compiledKotlinFiles.map { it.irData })
val abiVersion = KotlinAbiVersion.CURRENT
// DO NOT PUSH. Commonize me.
val compilerVersion = KonanVersionImpl(MetaVersion.DEV, 1, 3, 0, -1)
val libraryVersion = null
val versions = KonanLibraryVersioning(abiVersion = abiVersion, libraryVersion = libraryVersion, compilerVersion = compilerVersion)
val versions = KotlinLibraryVersioning(
abiVersion = KotlinAbiVersion.CURRENT,
libraryVersion = null,
compilerVersion = KotlinCompilerVersion.VERSION,
metadataVersion = KlibMetadataVersion.INSTANCE.toString(),
irVersion = KlibIrVersion.INSTANCE.toString()
)
buildKoltinLibrary(
linkDependencies = dependencies,
@@ -1,39 +0,0 @@
/*
* Copyright 2010-2019 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.ir.backend.js.lower.serialization.metadata
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
import java.io.DataInputStream
import java.io.InputStream
class JsKlibMetadataVersion(vararg numbers: Int) : BinaryVersion(*numbers) {
override fun isCompatible(): Boolean =
this.isCompatibleTo(INSTANCE)
fun toInteger() = (patch shl 16) + (minOf(minor, 255) shl 8) + minOf(major, 255)
companion object {
@JvmField
val INSTANCE = JsKlibMetadataVersion(1, 2, 6)
@JvmField
val INVALID_VERSION = JsKlibMetadataVersion()
fun fromInteger(version: Int): JsKlibMetadataVersion =
JsKlibMetadataVersion(version and 255, (version shr 8) and 255, version shr 16)
fun readFrom(stream: InputStream): JsKlibMetadataVersion {
val dataInput = DataInputStream(stream)
val size = dataInput.readInt()
// We assume here that the version will always have 3 components. This is needed to prevent reading an unpredictable amount
// of integers from old .kjsm files (pre-1.1) because they did not have the version in the beginning
if (size != INSTANCE.toArray().size) return INVALID_VERSION
return JsKlibMetadataVersion(*(1..size).map { dataInput.readInt() }.toIntArray())
}
}
}
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.konan
import java.io.Serializable
interface KonanVersion : Serializable {
interface CompilerVersion : Serializable {
val meta: MetaVersion
val major: Int
val minor: Int
@@ -20,12 +20,12 @@ interface KonanVersion : Serializable {
// 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 {
fun fromString(version: String): CompilerVersion {
val (major, minor, maintenance, metaString, build) =
versionPattern.matchEntire(version)?.destructured
?: throw IllegalArgumentException("Cannot parse Kotlin/Native version: $version")
return KonanVersionImpl(
return CompilerVersionImpl(
MetaVersion.findAppropriate(metaString),
major.toInt(),
minor.toInt(),
@@ -36,15 +36,15 @@ interface KonanVersion : Serializable {
}
}
fun String.parseKonanVersion() = KonanVersion.fromString(this)
fun String.parseCompilerVersion() = CompilerVersion.fromString(this)
data class KonanVersionImpl(
data class CompilerVersionImpl(
override val meta: MetaVersion = MetaVersion.DEV,
override val major: Int,
override val minor: Int,
override val maintenance: Int,
override val build: Int = -1
) : KonanVersion {
) : CompilerVersion {
override fun toString(showMeta: Boolean, showBuild: Boolean) = buildString {
append(major)
@@ -5,17 +5,27 @@
package org.jetbrains.kotlin.backend.common.serialization.metadata
import org.jetbrains.kotlin.library.KLIB_PROPERTY_METADATA_VERSION
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
class KlibMetadataVersion(vararg numbers: Int) : BinaryVersion(*numbers) {
override fun isCompatible(): Boolean = this.major == 1 && this.minor == 0
override fun isCompatible(): Boolean = isCompatibleTo(INSTANCE)
companion object {
@JvmField
val INSTANCE = KlibMetadataVersion(1, 0, 0)
@JvmField
val INVALID_VERSION = KlibMetadataVersion()
val INVALID_VERSION = KlibMetadataVersion(-1, -1, -1)
}
}
val KotlinLibrary.metadataVersion: KlibMetadataVersion
get() {
val versionString = manifestProperties.getProperty(KLIB_PROPERTY_METADATA_VERSION)
val versionIntArray = BinaryVersion.parseVersionArray(versionString)
?: error("Could not parse ir version: $versionString")
return KlibMetadataVersion(*versionIntArray)
}
@@ -1,29 +0,0 @@
package org.jetbrains.kotlin.library
import org.jetbrains.kotlin.konan.parseKonanVersion
import org.jetbrains.kotlin.konan.properties.Properties
import org.jetbrains.kotlin.konan.KonanVersion
data class KonanLibraryVersioning(
val libraryVersion: String?,
val compilerVersion: KonanVersion?,
val abiVersion: KotlinAbiVersion?
)
fun Properties.writeKonanLibraryVersioning(versions: KonanLibraryVersioning) {
versions.abiVersion ?. let { this.setProperty(KLIB_PROPERTY_ABI_VERSION, it.toString()) }
versions.libraryVersion ?. let { this.setProperty(KLIB_PROPERTY_LIBRARY_VERSION, it) }
versions.compilerVersion ?. let { this.setProperty(KLIB_PROPERTY_COMPILER_VERSION, "${versions.compilerVersion.toString(true, true)}") }
}
fun Properties.readKonanLibraryVersioning(): KonanLibraryVersioning {
val abiVersion = this.getProperty(KLIB_PROPERTY_ABI_VERSION)?.parseKonanAbiVersion()
val libraryVersion = this.getProperty(KLIB_PROPERTY_LIBRARY_VERSION)
val compilerVersion = this.getProperty(KLIB_PROPERTY_COMPILER_VERSION)?.parseKonanVersion()
return KonanLibraryVersioning(
abiVersion = abiVersion,
libraryVersion = libraryVersion,
compilerVersion = compilerVersion
)
}
@@ -8,6 +8,8 @@ const val KLIB_PROPERTY_ABI_VERSION = "abi_version"
const val KLIB_PROPERTY_COMPILER_VERSION = "compiler_version"
const val KLIB_PROPERTY_DEPENDENCY_VERSION = "dependency_version"
const val KLIB_PROPERTY_LIBRARY_VERSION = "library_version"
const val KLIB_PROPERTY_METADATA_VERSION = "metadata_version"
const val KLIB_PROPERTY_IR_VERSION = "ir_version"
const val KLIB_PROPERTY_UNIQUE_NAME = "unique_name"
const val KLIB_PROPERTY_DEPENDS = "depends"
const val KLIB_PROPERTY_PACKAGE = "package"
@@ -21,7 +23,7 @@ const val KLIB_PROPERTY_EXPORT_FORWARD_DECLARATIONS = "exportForwardDeclarations
interface BaseKotlinLibrary {
val libraryName: String
val libraryFile: File
val versions: KonanLibraryVersioning
val versions: KotlinLibraryVersioning
// Whether this library is default (provided by distribution)?
val isDefault: Boolean
val manifestProperties: Properties
@@ -0,0 +1,35 @@
package org.jetbrains.kotlin.library
import org.jetbrains.kotlin.konan.properties.Properties
data class KotlinLibraryVersioning(
val libraryVersion: String?,
val compilerVersion: String?,
val abiVersion: KotlinAbiVersion?,
val metadataVersion: String?,
val irVersion: String?
)
fun Properties.writeKonanLibraryVersioning(versions: KotlinLibraryVersioning) {
versions.abiVersion ?. let { this.setProperty(KLIB_PROPERTY_ABI_VERSION, it.toString()) }
versions.libraryVersion ?. let { this.setProperty(KLIB_PROPERTY_LIBRARY_VERSION, it) }
versions.compilerVersion ?. let { this.setProperty(KLIB_PROPERTY_COMPILER_VERSION, it) }
versions.metadataVersion ?. let { this.setProperty(KLIB_PROPERTY_METADATA_VERSION, it) }
versions.irVersion ?. let { this.setProperty(KLIB_PROPERTY_IR_VERSION, it) }
}
fun Properties.readKonanLibraryVersioning(): KotlinLibraryVersioning {
val abiVersion = this.getProperty(KLIB_PROPERTY_ABI_VERSION)?.parseKonanAbiVersion()
val libraryVersion = this.getProperty(KLIB_PROPERTY_LIBRARY_VERSION)
val compilerVersion = this.getProperty(KLIB_PROPERTY_COMPILER_VERSION)
val metadataVersion = this.getProperty(KLIB_PROPERTY_METADATA_VERSION)
val irVersion = this.getProperty(KLIB_PROPERTY_IR_VERSION)
return KotlinLibraryVersioning(
abiVersion = abiVersion,
libraryVersion = libraryVersion,
compilerVersion = compilerVersion,
metadataVersion = metadataVersion,
irVersion = irVersion
)
}
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.library
import org.jetbrains.kotlin.konan.properties.Properties
interface BaseWriter {
val versions: KonanLibraryVersioning
val versions: KotlinLibraryVersioning
fun addLinkDependencies(libraries: List<KotlinLibrary>)
fun addManifestAddend(properties: Properties)
fun commit()
@@ -1,9 +1,7 @@
package org.jetbrains.kotlin.library
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.properties.hasProperty
import org.jetbrains.kotlin.library.impl.createKotlinLibrary
import org.jetbrains.kotlin.util.*
const val KOTLIN_STDLIB_NAME = "stdlib"
@@ -19,7 +17,7 @@ interface SearchPathResolver<L: KotlinLibrary> : WithLogger {
interface SearchPathResolverWithAttributes<L: KotlinLibrary>: SearchPathResolver<L> {
val knownAbiVersions: List<KotlinAbiVersion>?
val knownCompilerVersions: List<KonanVersion>?
val knownCompilerVersions: List<CompilerVersion>?
}
// This is a simple library resolver that only cares for file names.
@@ -159,7 +157,7 @@ abstract class KotlinLibrarySearchPathResolver<L: KotlinLibrary>(
}
}
fun KonanVersion.compatible(other: KonanVersion) =
fun CompilerVersion.compatible(other: CompilerVersion) =
this.major == other.major
&& this.minor == other.minor
&& this.maintenance == other.maintenance
@@ -172,7 +170,7 @@ abstract class KotlinLibraryProperResolverWithAttributes<L: KotlinLibrary>(
repositories: List<String>,
directLibs: List<String>,
override val knownAbiVersions: List<KotlinAbiVersion>?,
override val knownCompilerVersions: List<KonanVersion>?,
override val knownCompilerVersions: List<CompilerVersion>?,
distributionKlib: String?,
localKotlinDir: String?,
skipCurrentDir: Boolean,
@@ -188,23 +186,13 @@ abstract class KotlinLibraryProperResolverWithAttributes<L: KotlinLibrary>(
val candidateAbiVersion = candidate.versions.abiVersion
val candidateLibraryVersion = candidate.versions.libraryVersion
val abiVersionMatch = candidateAbiVersion != null &&
knownAbiVersions != null &&
knownAbiVersions!!.contains(candidateAbiVersion)
val compilerVersionMatch = candidateCompilerVersion != null &&
knownCompilerVersions != null &&
knownCompilerVersions!!.any { it.compatible(candidateCompilerVersion) }
if (!abiVersionMatch && !compilerVersionMatch) {
if (!abiVersionMatch) {
logger.warning("skipping $candidatePath. The abi versions don't match. Expected '${knownAbiVersions}', found '${candidateAbiVersion}'")
if (knownCompilerVersions != null) {
val expected = knownCompilerVersions?.map { it.toString(false, false) }
val found = candidateCompilerVersion?.toString(true, true)
logger.warning("The compiler versions don't match either. Expected '${expected}', found '${found}'")
}
return false
}
@@ -34,7 +34,7 @@ open class BaseKotlinLibraryImpl(
access.inPlace { it.manifestFile.loadProperties() }
}
override val versions: KonanLibraryVersioning by lazy {
override val versions: KotlinLibraryVersioning by lazy {
manifestProperties.readKonanLibraryVersioning()
}
}
@@ -18,7 +18,7 @@ open class KotlinLibraryLayoutForWriter(
open class BaseWriterImpl(
val libraryLayout: KotlinLibraryLayoutForWriter,
moduleName: String,
override val versions: KonanLibraryVersioning,
override val versions: KotlinLibraryVersioning,
val nopack: Boolean = false
) : BaseWriter {
@@ -74,7 +74,7 @@ open class BaseWriterImpl(
class KoltinLibraryWriterImpl(
libDir: File,
moduleName: String,
versions: KonanLibraryVersioning,
versions: KotlinLibraryVersioning,
nopack: Boolean = false,
val layout: KotlinLibraryLayoutForWriter = KotlinLibraryLayoutForWriter(libDir),
@@ -90,7 +90,7 @@ fun buildKoltinLibrary(
linkDependencies: List<KotlinLibrary>,
metadata: SerializedMetadata,
ir: SerializedIrModule,
versions: KonanLibraryVersioning,
versions: KotlinLibraryVersioning,
output: String,
moduleName: String,
nopack: Boolean,
@@ -39,7 +39,7 @@ class KotlinNativeLoadingMetadataCache : BaseComponent {
private val packageFragmentCache = createConcurrentWeakValueMap<CacheKey, CacheValue<ProtoBuf.PackageFragment>>()
private val moduleHeaderCache = createConcurrentWeakValueMap<CacheKey, CacheValue<KlibMetadataProtoBuf.Header>>()
private val libraryVersioningCache = createConcurrentWeakValueMap<CacheKey, CacheValue<KonanLibraryVersioning>>()
private val libraryVersioningCache = createConcurrentWeakValueMap<CacheKey, CacheValue<KotlinLibraryVersioning>>()
fun getCachedPackageFragment(packageFragmentFile: VirtualFile): ProtoBuf.PackageFragment? {
check(packageFragmentFile.extension == KLIB_METADATA_FILE_EXTENSION) {
@@ -93,7 +93,7 @@ class KotlinNativeLoadingMetadataCache : BaseComponent {
}
}
private fun computeLibraryVersioning(manifestFile: VirtualFile): KonanLibraryVersioning? = try {
private fun computeLibraryVersioning(manifestFile: VirtualFile): KotlinLibraryVersioning? = try {
Properties().apply { manifestFile.inputStream.use { load(it) } }.readKonanLibraryVersioning()
} catch (_: IOException) {
// ignore and cache null value
@@ -5,11 +5,11 @@
package org.jetbrains.kotlin.konan.library.lite
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import java.io.File
class LiteKonanDistribution(
val distributionHome: File,
val konanVersion: KonanVersion,
val konanVersion: CompilerVersion,
val konanVersionString: String
)
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.konan.library.lite
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME
import org.jetbrains.kotlin.konan.library.konanCommonLibraryPath
import java.io.File
@@ -17,7 +17,7 @@ object LiteKonanDistributionProvider {
return LiteKonanDistribution(
konanHomeDir,
KonanVersion.fromString(stdlib.compilerVersion),
CompilerVersion.fromString(stdlib.compilerVersion),
stdlib.compilerVersion
)
}
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.konan.library.lite
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.junit.Test
import org.junit.Assert.*
@@ -24,7 +24,7 @@ class LiteKonanDistributionTests {
private companion object {
const val expectedVersionString = "1.2.3-release-5678"
val expectedVersion: KonanVersion
get() = KonanVersion.fromString(expectedVersionString)
val expectedVersion: CompilerVersion
get() = CompilerVersion.fromString(expectedVersionString)
}
}
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.KOTLIN_NATIVE_HOME
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.util.DependencyDirectories
@@ -43,9 +43,9 @@ internal val Project.konanHome: String
file(it).absolutePath
} ?: NativeCompilerDownloader(project).compilerDirectory.absolutePath
internal val Project.konanVersion: KonanVersion
internal val Project.konanVersion: CompilerVersion
get() = PropertiesProvider(this).nativeVersion?.let {
KonanVersion.fromString(it.toString())
CompilerVersion.fromString(it.toString())
} ?: NativeCompilerDownloader.DEFAULT_KONAN_VERSION
internal val Project.disableKonanDaemon: Boolean
@@ -6,18 +6,15 @@
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.artifacts.repositories.ArtifactRepository
import org.gradle.api.artifacts.repositories.IvyArtifactRepository
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.konanVersion
import org.jetbrains.kotlin.gradle.logging.kotlinInfo
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.MetaVersion
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.util.DependencyDirectories
@@ -25,12 +22,12 @@ import java.io.File
class NativeCompilerDownloader(
val project: Project,
private val compilerVersion: KonanVersion = project.konanVersion
private val compilerVersion: CompilerVersion = project.konanVersion
) {
companion object {
internal val DEFAULT_KONAN_VERSION: KonanVersion by lazy {
KonanVersion.fromString(loadPropertyFromResources("project.properties", "kotlin.native.version"))
internal val DEFAULT_KONAN_VERSION: CompilerVersion by lazy {
CompilerVersion.fromString(loadPropertyFromResources("project.properties", "kotlin.native.version"))
}
private const val BASE_DOWNLOAD_URL = "https://download.jetbrains.com/kotlin/native/builds"
@@ -18,8 +18,7 @@ import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSetti
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
import org.jetbrains.kotlin.gradle.targets.native.internal.parseKotlinNativeStackTraceAsJvm
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.MetaVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import java.io.File
import java.util.concurrent.Callable
@@ -101,7 +100,7 @@ open class KotlinNativeTest : KotlinTest() {
// KonanVersion doesn't provide an API to compare versions,
// so we have to transform it to KotlinVersion first.
// Note: this check doesn't take into account the meta version (release, eap, dev).
private fun KonanVersion.isAtLeast(major: Int, minor: Int, patch: Int): Boolean =
private fun CompilerVersion.isAtLeast(major: Int, minor: Int, patch: Int): Boolean =
KotlinVersion(this.major, this.minor, this.maintenance).isAtLeast(major, minor, patch)
override fun createTestExecutionSpec(): TCServiceMessagesTestExecutionSpec {