A native counterpart for plubing metadata and ir versions to klib manifest

(cherry picked from commit 06a515393df6c1c071a551353a2a82fd2252a24c)
This commit is contained in:
Alexander Gorshenev
2019-11-28 03:17:32 +03:00
committed by Vasily Levchenko
parent aafe34db13
commit fcba683e72
17 changed files with 65 additions and 52 deletions
@@ -4,12 +4,14 @@
*/
package org.jetbrains.kotlin.native.interop.gen.jvm
import org.jetbrains.kotlin.backend.common.serialization.KlibIrVersion
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.CURRENT
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.library.impl.KonanLibraryWriterImpl
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.library.KonanLibraryVersioning
import org.jetbrains.kotlin.library.KotlinLibraryVersioning
import org.jetbrains.kotlin.library.KotlinAbiVersion
import java.util.*
@@ -22,10 +24,12 @@ data class LibraryCreationArguments(
)
fun createInteropLibrary(arguments: LibraryCreationArguments) {
val version = KonanLibraryVersioning(
val version = KotlinLibraryVersioning(
libraryVersion = null,
abiVersion = KotlinAbiVersion.CURRENT,
compilerVersion = KonanVersion.CURRENT
compilerVersion = CompilerVersion.CURRENT.toString(),
metadataVersion = KlibMetadataVersion.INSTANCE.toString(),
irVersion = KlibIrVersion.INSTANCE.toString()
)
KonanLibraryWriterImpl(
File(arguments.outputPath),arguments.moduleName, version, arguments.target
@@ -34,4 +38,4 @@ fun createInteropLibrary(arguments: LibraryCreationArguments) {
addManifestAddend(arguments.manifest)
commit()
}
}
}
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.Services
import org.jetbrains.kotlin.konan.CURRENT
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
@@ -47,7 +47,7 @@ class K2Native : CLICompiler<K2NativeCompilerArguments>() {
@Nullable paths: KotlinPaths?): ExitCode {
if (arguments.version) {
println("Kotlin/Native: ${KonanVersion.CURRENT}")
println("Kotlin/Native: ${CompilerVersion.CURRENT}")
return ExitCode.OK
}
@@ -82,7 +82,7 @@ class K2Native : CLICompiler<K2NativeCompilerArguments>() {
|Compilation failed: ${e.message}
| * Source files: ${environment.getSourceFiles().joinToString(transform = KtFile::getName)}
| * Compiler version info: Konan: ${KonanVersion.CURRENT} / Kotlin: ${KotlinVersion.CURRENT}
| * Compiler version info: Konan: ${CompilerVersion.CURRENT} / Kotlin: ${KotlinVersion.CURRENT}
| * Output kind: ${configuration.get(KonanConfigKeys.PRODUCE)}
""".trimMargin())
@@ -5,12 +5,14 @@
package org.jetbrains.kotlin.backend.konan
import llvm.*
import org.jetbrains.kotlin.backend.common.serialization.KlibIrVersion
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataVersion
import org.jetbrains.kotlin.backend.konan.llvm.*
import org.jetbrains.kotlin.backend.konan.llvm.Llvm
import org.jetbrains.kotlin.backend.konan.llvm.objc.linkObjC
import org.jetbrains.kotlin.konan.CURRENT
import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.file.isBitcode
import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
@@ -122,12 +124,16 @@ internal fun produceOutput(context: Context) {
val libraryName = context.config.moduleId
val neededLibraries = context.librariesWithDependencies
val abiVersion = KotlinAbiVersion.CURRENT
val compilerVersion = KonanVersion.CURRENT
val compilerVersion = CompilerVersion.CURRENT.toString()
val libraryVersion = config.get(KonanConfigKeys.LIBRARY_VERSION)
val versions = KonanLibraryVersioning(
val metadataVersion = KlibMetadataVersion.INSTANCE.toString()
val irVersion = KlibIrVersion.INSTANCE.toString()
val versions = KotlinLibraryVersioning(
abiVersion = abiVersion,
libraryVersion = libraryVersion,
compilerVersion = compilerVersion
compilerVersion = compilerVersion,
metadataVersion = metadataVersion,
irVersion = irVersion
)
val target = context.config.target
val nopack = config.getBoolean(KonanConfigKeys.NOPACK)
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.util.Logger
import kotlin.system.exitProcess
import org.jetbrains.kotlin.library.toUnresolvedLibraries
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.resolver.impl.libraryResolver
import org.jetbrains.kotlin.library.UnresolvedLibrary
@@ -54,7 +54,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
val needCompilerVerification: Boolean
get() = configuration.get(KonanConfigKeys.VERIFY_COMPILER) ?:
(configuration.getBoolean(KonanConfigKeys.OPTIMIZATION) ||
KonanVersion.CURRENT.meta != MetaVersion.RELEASE)
CompilerVersion.CURRENT.meta != MetaVersion.RELEASE)
init {
if (!platformManager.isEnabled(target)) {
@@ -112,8 +112,8 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration
}
}
private val compatibleCompilerVersions: List<KonanVersion> =
configuration.getList(KonanConfigKeys.COMPATIBLE_COMPILER_VERSIONS).map { it.parseKonanVersion() }
private val compatibleCompilerVersions: List<CompilerVersion> =
configuration.getList(KonanConfigKeys.COMPATIBLE_COMPILER_VERSIONS).map { it.parseCompilerVersion() }
private val resolver = defaultResolver(
repositories,
@@ -20,11 +20,11 @@ import org.jetbrains.kotlin.ir.util.isTypeParameter
import org.jetbrains.kotlin.ir.util.isUnsigned
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.konan.CURRENT
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.file.File
internal object DWARF {
val producer = "konanc ${KonanVersion.CURRENT} / kotlin-compiler: ${KotlinVersion.CURRENT}"
val producer = "konanc ${CompilerVersion.CURRENT} / kotlin-compiler: ${KotlinVersion.CURRENT}"
/* TODO: from LLVM sources is unclear what runtimeVersion corresponds to term in terms of dwarf specification. */
val dwarfVersionMetaDataNodeName get() = "Dwarf Version".mdString()
val dwarfDebugInfoMetaDataNodeName get() = "Debug Info Version".mdString()
+3 -3
View File
@@ -76,7 +76,7 @@ ext {
kotlinNativeUtilsModule="org.jetbrains.kotlin:kotlin-native-utils:${kotlinVersion}"
kotlinUtilKliMetadatabModule="org.jetbrains.kotlin:kotlin-util-klib-metadata:${kotlinVersion}"
konanVersionFull = KonanVersionGeneratedKt.getCurrentKonanVersion()
konanVersionFull = CompilerVersionGeneratedKt.getCurrentCompilerVersion()
gradlePluginVersion = konanVersionFull
}
@@ -631,7 +631,7 @@ task uploadBundle {
}
}
task teamcityKonanVersion {
task teamcityCompilerVersion {
doLast {
println("##teamcity[setParameter name='kotlin.native.version.base' value='$konanVersion']")
println("##teamcity[setParameter name='kotlin.native.version.full' value='$konanVersionFull']")
@@ -650,7 +650,7 @@ task clean {
task pusher(type: KotlinBuildPusher){
kotlinVersion = project.kotlinVersion
konanVersion = KonanVersionGeneratedKt.getCurrentKonanVersion()
konanVersion = CompilerVersionGeneratedKt.getCurrentCompilerVersion()
buildServer = "buildserver.labs.intellij.net"
compilerConfigurationId = System.getenv("TEAMCITY_COMPILER_ID") ?: "Kotlin_KotlinDev_Compiler"
overrideConfigurationId = System.getenv("TEAMCITY_OVERRIDE_NATIVE_ID") ?: "Kotlin_KotlinDev_DeployMavenArtifacts_OverrideNative"
@@ -105,14 +105,18 @@ class Library(val name: String, val requestedRepository: String?, val target: St
val headerAbiVersion = library.versions.abiVersion
val headerCompilerVersion = library.versions.compilerVersion
val headerLibraryVersion = library.versions.libraryVersion
val headerMetadataVersion = library.versions.metadataVersion
val headerIrVersion = library.versions.irVersion
val moduleName = ModuleDeserializer(library.moduleHeaderData).moduleName
println("")
println("Resolved to: ${library.libraryName.File().absolutePath}")
println("Module name: $moduleName")
println("ABI version: $headerAbiVersion")
println("Compiler version: ${headerCompilerVersion?.toString(true, true)}")
println("Compiler version: ${headerCompilerVersion}")
println("Library version: $headerLibraryVersion")
println("Metadata version: $headerMetadataVersion")
println("IR version: $headerIrVersion")
if (library is KonanLibrary) {
val targets = library.targetList.joinToString(", ")
@@ -16,7 +16,7 @@ open class VersionGenerator: DefaultTask() {
@OutputDirectory
val versionSourceDirectory = project.file("build/generated")
@OutputFile
val versionFile:File = project.file("${versionSourceDirectory.path}/org/jetbrains/kotlin/konan/KonanVersionGenerated.kt")
val versionFile:File = project.file("${versionSourceDirectory.path}/org/jetbrains/kotlin/konan/CompilerVersionGenerated.kt")
val konanVersion: String
@Input get() = project.properties["konanVersion"].toString()
@@ -49,11 +49,11 @@ open class VersionGenerator: DefaultTask() {
+ """
|package org.jetbrains.kotlin.konan
|
|internal val currentKonanVersion: KonanVersion =
| KonanVersionImpl($meta, $major, $minor, $maintenance, $build)
|internal val currentCompilerVersion: CompilerVersion =
| CompilerVersionImpl($meta, $major, $minor, $maintenance, $build)
|
|val KonanVersion.Companion.CURRENT: KonanVersion
| get() = currentKonanVersion
|val CompilerVersion.Companion.CURRENT: CompilerVersion
| get() = currentCompilerVersion
""".trimMargin()
}
versionFile.printWriter().use {
@@ -1,6 +1,6 @@
package org.jetbrains.kotlin.konan.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.library.impl.KonanLibraryImpl
import org.jetbrains.kotlin.konan.library.impl.createKonanLibrary
@@ -21,7 +21,7 @@ fun defaultResolver(
repositories: List<String>,
target: KonanTarget,
distribution: Distribution = Distribution(),
compatibleCompilerVersions: List<KonanVersion> = emptyList()
compatibleCompilerVersions: List<CompilerVersion> = emptyList()
): SearchPathResolverWithTarget<KonanLibrary> = defaultResolver(repositories, emptyList(), target, distribution, compatibleCompilerVersions)
fun defaultResolver(
@@ -29,7 +29,7 @@ fun defaultResolver(
directLibs: List<String>,
target: KonanTarget,
distribution: Distribution,
compatibleCompilerVersions: List<KonanVersion> = emptyList(),
compatibleCompilerVersions: List<CompilerVersion> = emptyList(),
logger: Logger = DummyLogger,
skipCurrentDir: Boolean = false
): SearchPathResolverWithTarget<KonanLibrary> = KonanLibraryProperResolver(
@@ -68,7 +68,7 @@ internal class KonanLibraryProperResolver(
directLibs: List<String>,
override val target: KonanTarget,
knownAbiVersions: List<KotlinAbiVersion>?,
knownCompilerVersions: List<KonanVersion>?,
knownCompilerVersions: List<CompilerVersion>?,
distributionKlib: String?,
localKonanDir: String?,
skipCurrentDir: Boolean,
@@ -20,14 +20,13 @@ class KonanLibraryLayoutForWriter(
override val target: KonanTarget
) : KonanLibraryLayout, KotlinLibraryLayoutForWriter(libDir)
/**
* Requires non-null [target].
*/
class KonanLibraryWriterImpl(
libDir: File,
moduleName: String,
versions: KonanLibraryVersioning,
versions: KotlinLibraryVersioning,
target: KonanTarget,
nopack: Boolean = false,
@@ -46,7 +45,7 @@ fun buildLibrary(
linkDependencies: List<KonanLibrary>,
metadata: SerializedMetadata,
ir: SerializedIrModule,
versions: KonanLibraryVersioning,
versions: KotlinLibraryVersioning,
target: KonanTarget,
output: String,
moduleName: String,
@@ -72,4 +71,4 @@ fun buildLibrary(
library.commit()
return library.layout
}
}
@@ -44,7 +44,7 @@ apply plugin: 'groovy'
apply plugin: 'com.github.johnrengelman.shadow'
group = 'org.jetbrains.kotlin'
version = KonanVersionGeneratedKt.getCurrentKonanVersion()
version = CompilerVersionGeneratedKt.getCurrentCompilerVersion()
repositories {
mavenCentral()
@@ -25,7 +25,7 @@ import org.gradle.api.tasks.Internal
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanArtifactWithLibrariesTask
import org.jetbrains.kotlin.gradle.plugin.tasks.KonanBuildingTask
import org.jetbrains.kotlin.konan.*
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.library.defaultResolver
import org.jetbrains.kotlin.konan.library.impl.KonanLibraryImpl
import org.jetbrains.kotlin.konan.target.Distribution
@@ -35,8 +35,8 @@ import org.jetbrains.kotlin.gradle.plugin.konan.KonanPlugin.Companion.COMPILE_AL
import org.jetbrains.kotlin.gradle.plugin.model.KonanToolingModelBuilder
import org.jetbrains.kotlin.gradle.plugin.tasks.*
import org.jetbrains.kotlin.konan.CURRENT
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.parseKonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.parseCompilerVersion
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.buildDistribution
@@ -89,10 +89,10 @@ internal val Project.konanHome: String
return project.file(getProperty(KonanPlugin.ProjectProperty.KONAN_HOME)).canonicalPath
}
internal val Project.konanVersion: KonanVersion
internal val Project.konanVersion: CompilerVersion
get() = project.findProperty(KonanPlugin.ProjectProperty.KONAN_VERSION)
?.toString()?.let { KonanVersion.fromString(it) }
?: KonanVersion.CURRENT
?.toString()?.let { CompilerVersion.fromString(it) }
?: CompilerVersion.CURRENT
internal val Project.konanBuildRoot get() = buildDir.resolve("konan")
internal val Project.konanBinBaseDir get() = konanBuildRoot.resolve("bin")
@@ -233,7 +233,7 @@ internal fun dumpProperties(task: Task) {
println("target : $target")
println("languageVersion : $languageVersion")
println("apiVersion : $apiVersion")
println("konanVersion : ${KonanVersion.CURRENT}")
println("konanVersion : ${CompilerVersion.CURRENT}")
println("konanHome : $konanHome")
println()
}
@@ -254,7 +254,7 @@ internal fun dumpProperties(task: Task) {
println("linkerOpts : $linkerOpts")
println("headers : ${headers.dump()}")
println("linkFiles : ${linkFiles.dump()}")
println("konanVersion : ${KonanVersion.CURRENT}")
println("konanVersion : ${CompilerVersion.CURRENT}")
println("konanHome : $konanHome")
println()
}
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.gradle.plugin.konan.KonanInteropSpec.IncludeDirector
import org.jetbrains.kotlin.gradle.plugin.model.KonanModelArtifact
import org.jetbrains.kotlin.gradle.plugin.model.KonanModelArtifactImpl
import org.jetbrains.kotlin.konan.CURRENT
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.library.defaultResolver
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import org.jetbrains.kotlin.konan.target.Distribution
@@ -221,4 +221,4 @@ open class KonanInteropTask @Inject constructor(val workerExecutor: WorkerExecut
}
}
internal val interchangeBox = ConcurrentHashMap<String, KonanToolRunner>()
internal val interchangeBox = ConcurrentHashMap<String, KonanToolRunner>()
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.gradle.plugin.model
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import java.io.File
import java.io.Serializable
@@ -27,7 +27,7 @@ import java.io.Serializable
*/
interface KonanModel : Serializable {
val konanHome: File
val konanVersion: KonanVersion
val konanVersion: CompilerVersion
val languageVersion: String?
val apiVersion: String?
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.gradle.plugin.konan.konanExtension
import org.jetbrains.kotlin.gradle.plugin.konan.konanHome
import org.jetbrains.kotlin.gradle.plugin.konan.konanVersion
import org.jetbrains.kotlin.konan.CURRENT
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.target.CompilerOutputKind
import java.io.File
@@ -61,7 +61,7 @@ object KonanToolingModelBuilder : ToolingModelBuilder {
internal data class KonanModelImpl(
override val artifacts: List<KonanModelArtifact>,
override val konanHome: File,
override val konanVersion: KonanVersion,
override val konanVersion: CompilerVersion,
override val languageVersion: String?,
override val apiVersion: String?
) : KonanModel
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.gradle.plugin.konan.KonanPlugin
import org.jetbrains.kotlin.gradle.plugin.konan.konanArtifactsContainer
import org.jetbrains.kotlin.gradle.plugin.model.KonanToolingModelBuilder
import org.jetbrains.kotlin.konan.CURRENT
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.CompilerVersion
import org.junit.Rule
import org.junit.rules.TemporaryFolder
import java.io.File
@@ -92,7 +92,7 @@ open class ToolingModelTests {
@Test
fun `The model should contain the same data as the Gradle tasks`() {
val project = KonanProject.createEmpty(projectDirectory, listOf("host", "wasm32")).apply {
val konanVersion = KonanVersion.CURRENT.toString()
val konanVersion = CompilerVersion.CURRENT.toString()
generateSrcFile(listOf("src", "foo1"), "foo1.kt", "fun foo1() = 0")
generateSrcFile(listOf("src", "foo1"), "foo11.kt", "fun foo11() = 0")
generateSrcFile(listOf("src", "foo2"), "foo2.kt", "fun foo2() = 0")