From b0f077ff4baaf5d1cb0664a785a59f64eb40e7d9 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Thu, 28 Nov 2019 03:14:25 +0300 Subject: [PATCH] Plumbing KlibMetadataVersion and KlibIrVersion values to klib manifest --- .../jetbrains/kotlin/cli/js/K2JsIrCompiler.kt | 3 +- .../common/serialization/KlibIrVersion.kt | 27 +++++++++++++ .../KlibMetadataIncrementalSerializer.kt | 1 + .../kotlin/ir/backend/js/JsLibraryResolver.kt | 6 +-- .../jetbrains/kotlin/ir/backend/js/klib.kt | 20 +++++----- .../metadata/JsKlibMetadataVersion.kt | 39 ------------------- .../{KonanVersion.kt => CompilerVersion.kt} | 12 +++--- .../metadata/KlibMetadataMetadataVersion.kt | 14 ++++++- .../kotlin/library/KonanLibraryVersioning.kt | 29 -------------- .../jetbrains/kotlin/library/KotlinLibrary.kt | 4 +- .../kotlin/library/KotlinLibraryVersioning.kt | 35 +++++++++++++++++ .../kotlin/library/KotlinLibraryWriter.kt | 2 +- .../kotlin/library/SearchPathResolver.kt | 24 +++--------- .../kotlin/library/impl/KotlinLibraryImpl.kt | 2 +- .../library/impl/KotlinLibraryWriterImpl.kt | 6 +-- .../KotlinNativeLoadingMetadataCache.kt | 4 +- .../library/lite/LiteKonanDistribution.kt | 4 +- .../lite/LiteKonanDistributionProvider.kt | 4 +- .../lite/LiteKonanDistributionTests.kt | 6 +-- .../compilerRunner/KotlinNativeToolRunner.kt | 6 +-- .../native/NativeCompilerDownloader.kt | 11 ++---- .../targets/native/tasks/KotlinNativeTest.kt | 5 +-- 22 files changed, 128 insertions(+), 136 deletions(-) create mode 100644 compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KlibIrVersion.kt delete mode 100644 compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/metadata/JsKlibMetadataVersion.kt rename compiler/util-io/src/org/jetbrains/kotlin/konan/{KonanVersion.kt => CompilerVersion.kt} (88%) delete mode 100644 compiler/util-klib/src/org/jetbrains/kotlin/library/KonanLibraryVersioning.kt create mode 100644 compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryVersioning.kt diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index 466576b5ae4..274855382c5 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt @@ -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() { override fun createMetadataVersion(versionArray: IntArray): BinaryVersion { // TODO: Support metadata versions for klibs - return JsMetadataVersion(*versionArray) + return KlibMetadataVersion(*versionArray) } override fun MutableList.addPlatformOptions(arguments: K2JSCompilerArguments) {} diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KlibIrVersion.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KlibIrVersion.kt new file mode 100644 index 00000000000..518599d2909 --- /dev/null +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KlibIrVersion.kt @@ -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) + } \ No newline at end of file diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataIncrementalSerializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataIncrementalSerializer.kt index cb627342d74..e107cb37fed 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataIncrementalSerializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/metadata/KlibMetadataIncrementalSerializer.kt @@ -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 diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/JsLibraryResolver.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/JsLibraryResolver.kt index 133da7a6e97..e9997a6670c 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/JsLibraryResolver.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/JsLibraryResolver.kt @@ -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, directLibs: List, knownAbiVersions: List?, - knownCompilerVersions: List?, + knownCompilerVersions: List?, distributionKlib: String?, localKotlinDir: String?, skipCurrentDir: Boolean, @@ -49,7 +49,7 @@ fun jsResolveLibraries(libraries: List, logger: Logger): KotlinLibraryRe repositories = emptyList(), directLibs = libraryAbsolutePaths, knownAbiVersions = listOf(KotlinAbiVersion.CURRENT), - knownCompilerVersions = emptyList(), + knownCompilerVersions = emptyList(), distributionKlib = null, localKotlinDir = null, skipCurrentDir = false, diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index 2c2955b0959..96e0e3f7c04 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt @@ -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, diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/metadata/JsKlibMetadataVersion.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/metadata/JsKlibMetadataVersion.kt deleted file mode 100644 index a2dbb9d53ee..00000000000 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/lower/serialization/metadata/JsKlibMetadataVersion.kt +++ /dev/null @@ -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()) - } - } -} \ No newline at end of file diff --git a/compiler/util-io/src/org/jetbrains/kotlin/konan/KonanVersion.kt b/compiler/util-io/src/org/jetbrains/kotlin/konan/CompilerVersion.kt similarity index 88% rename from compiler/util-io/src/org/jetbrains/kotlin/konan/KonanVersion.kt rename to compiler/util-io/src/org/jetbrains/kotlin/konan/CompilerVersion.kt index eb36768a26e..88eeae4e150 100644 --- a/compiler/util-io/src/org/jetbrains/kotlin/konan/KonanVersion.kt +++ b/compiler/util-io/src/org/jetbrains/kotlin/konan/CompilerVersion.kt @@ -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) diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataMetadataVersion.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataMetadataVersion.kt index 7ef03c6e38d..81649203f59 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataMetadataVersion.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataMetadataVersion.kt @@ -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) + } \ No newline at end of file diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/KonanLibraryVersioning.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/KonanLibraryVersioning.kt deleted file mode 100644 index 961192e1d64..00000000000 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/KonanLibraryVersioning.kt +++ /dev/null @@ -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 - ) -} diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibrary.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibrary.kt index 4c14ececa39..490e7c3c193 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibrary.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibrary.kt @@ -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 diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryVersioning.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryVersioning.kt new file mode 100644 index 00000000000..a3d792d4d12 --- /dev/null +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryVersioning.kt @@ -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 + ) +} diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt index 8ed05e8e04f..79a54f72cba 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/KotlinLibraryWriter.kt @@ -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) fun addManifestAddend(properties: Properties) fun commit() diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt index 78a1c2d6bd4..6c3fda812be 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/SearchPathResolver.kt @@ -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 : WithLogger { interface SearchPathResolverWithAttributes: SearchPathResolver { val knownAbiVersions: List? - val knownCompilerVersions: List? + val knownCompilerVersions: List? } // This is a simple library resolver that only cares for file names. @@ -159,7 +157,7 @@ abstract class KotlinLibrarySearchPathResolver( } } -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( repositories: List, directLibs: List, override val knownAbiVersions: List?, - override val knownCompilerVersions: List?, + override val knownCompilerVersions: List?, distributionKlib: String?, localKotlinDir: String?, skipCurrentDir: Boolean, @@ -188,23 +186,13 @@ abstract class KotlinLibraryProperResolverWithAttributes( 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 } diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryImpl.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryImpl.kt index 6a366219f33..848b4f9900f 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryImpl.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryImpl.kt @@ -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() } } diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryWriterImpl.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryWriterImpl.kt index 178ea8ca8aa..88755b16aeb 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryWriterImpl.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryWriterImpl.kt @@ -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, metadata: SerializedMetadata, ir: SerializedIrModule, - versions: KonanLibraryVersioning, + versions: KotlinLibraryVersioning, output: String, moduleName: String, nopack: Boolean, diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/decompiler/KotlinNativeLoadingMetadataCache.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/decompiler/KotlinNativeLoadingMetadataCache.kt index f02321ce6fb..fc169337fc4 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/decompiler/KotlinNativeLoadingMetadataCache.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/decompiler/KotlinNativeLoadingMetadataCache.kt @@ -39,7 +39,7 @@ class KotlinNativeLoadingMetadataCache : BaseComponent { private val packageFragmentCache = createConcurrentWeakValueMap>() private val moduleHeaderCache = createConcurrentWeakValueMap>() - private val libraryVersioningCache = createConcurrentWeakValueMap>() + private val libraryVersioningCache = createConcurrentWeakValueMap>() 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 diff --git a/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistribution.kt b/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistribution.kt index 882ebca9b7d..ebc94261ce2 100644 --- a/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistribution.kt +++ b/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistribution.kt @@ -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 ) diff --git a/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistributionProvider.kt b/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistributionProvider.kt index d9f68586f4f..7aa389b8660 100644 --- a/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistributionProvider.kt +++ b/konan/library-reader/src/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistributionProvider.kt @@ -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 ) } diff --git a/konan/library-reader/test/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistributionTests.kt b/konan/library-reader/test/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistributionTests.kt index 6059ef0b0f8..f912988cffb 100644 --- a/konan/library-reader/test/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistributionTests.kt +++ b/konan/library-reader/test/org/jetbrains/kotlin/konan/library/lite/LiteKonanDistributionTests.kt @@ -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) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt index 1800bcf8ae9..013be74f5b0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt @@ -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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt index 89395cb0dfa..90692081009 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt @@ -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" diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTest.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTest.kt index de91f5ae05d..7a6491a8125 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTest.kt @@ -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 {