From 6c00815968477f5933d8d1e1b9258a91e595a1d5 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Fri, 19 May 2017 00:16:43 +0300 Subject: [PATCH] Updated the klib scheme a little. Renamed 'module' to 'manifest'. And placed module header protobuf to linkdata/ file rather as another line in the manifest. --- .../backend/konan/library/KonanLibrary.kt | 12 +++++++---- .../konan/library/MetadataGenerator.kt | 21 +++++++------------ 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/KonanLibrary.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/KonanLibrary.kt index acc35b46b1b..f863656fe62 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/KonanLibrary.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/KonanLibrary.kt @@ -73,10 +73,8 @@ interface SplitScheme { get() = null val klibFile get() = File("${libDir.path}.klib") - val moduleFile - get() = File(libDir, "module") - val linkdataDir - get() = File(libDir, "linkdata") + val manifestFile + get() = File(libDir, "manifest") val resourcesDir get() = File(libDir, "resources") val targetDir @@ -85,6 +83,12 @@ interface SplitScheme { get() = File(targetDir, "kotlin") val nativeDir get() = File(targetDir, "native") + val linkdataDir + get() = File(libDir, "linkdata") + val moduleHeaderFile + get() = File(linkdataDir, "") + fun packageFile(packageName: String) + = File(linkdataDir, if (packageName == "") "" else packageName) } // TODO: Get rid of the configuration here. diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/MetadataGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/MetadataGenerator.kt index 9129e95ce66..083a03be1ac 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/MetadataGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/library/MetadataGenerator.kt @@ -30,12 +30,12 @@ class SplitMetadataReader(override val libDir: File) : MetadataReader, SplitSche override fun loadSerializedModule(currentAbiVersion: Int): NamedModuleData { val header = Properties() - moduleFile.bufferedReader().use { reader -> + manifestFile.bufferedReader().use { reader -> header.load(reader) } val headerAbiVersion = header.getProperty("abi_version")!! val moduleName = header.getProperty("module_name")!! - val moduleData = header.getProperty("module_data")!! + val moduleData = moduleHeaderFile.readText() if ("$currentAbiVersion" != headerAbiVersion) error("ABI version mismatch. Compiler expects: $currentAbiVersion, the library is $headerAbiVersion") @@ -43,12 +43,8 @@ class SplitMetadataReader(override val libDir: File) : MetadataReader, SplitSche return NamedModuleData(moduleName, moduleData) } - override fun loadSerializedPackageFragment(fqName: String): String { - val realName = if (fqName == "") "" else fqName - - return File(linkdataDir, realName).readText() - - } + override fun loadSerializedPackageFragment(fqName: String) + = packageFile(fqName).readText() } internal class SplitMetadataGenerator(override val libDir: File): SplitScheme { @@ -59,15 +55,14 @@ internal class SplitMetadataGenerator(override val libDir: File): SplitScheme { val header = Properties() header.putAll(hashMapOf( "abi_version" to "${linkData.abiVersion}", - "module_name" to "${linkData.moduleName}", - "module_data" to "${linkData.module}" + "module_name" to "${linkData.moduleName}" )) - header.store(moduleFile.outputStream(), null) + moduleHeaderFile.writeText(linkData.module) + header.store(manifestFile.outputStream(), null) linkData.fragments.forEachIndexed { index, it -> val name = linkData.fragmentNames[index] - val realName = if (name == "") "" else name - File(linkdataDir, realName).writeText(it) + packageFile(name).writeText(it) } } }