Updated the klib scheme a little.

Renamed 'module' to 'manifest'.
And placed module header protobuf to linkdata/<module> file rather
as another line in the manifest.
This commit is contained in:
Alexander Gorshenev
2017-05-19 00:16:43 +03:00
committed by alexander-gorshenev
parent 53473fc0dd
commit 6c00815968
2 changed files with 16 additions and 17 deletions
@@ -73,10 +73,8 @@ interface SplitScheme {
get() = null get() = null
val klibFile val klibFile
get() = File("${libDir.path}.klib") get() = File("${libDir.path}.klib")
val moduleFile val manifestFile
get() = File(libDir, "module") get() = File(libDir, "manifest")
val linkdataDir
get() = File(libDir, "linkdata")
val resourcesDir val resourcesDir
get() = File(libDir, "resources") get() = File(libDir, "resources")
val targetDir val targetDir
@@ -85,6 +83,12 @@ interface SplitScheme {
get() = File(targetDir, "kotlin") get() = File(targetDir, "kotlin")
val nativeDir val nativeDir
get() = File(targetDir, "native") get() = File(targetDir, "native")
val linkdataDir
get() = File(libDir, "linkdata")
val moduleHeaderFile
get() = File(linkdataDir, "<module>")
fun packageFile(packageName: String)
= File(linkdataDir, if (packageName == "") "<root>" else packageName)
} }
// TODO: Get rid of the configuration here. // TODO: Get rid of the configuration here.
@@ -30,12 +30,12 @@ class SplitMetadataReader(override val libDir: File) : MetadataReader, SplitSche
override fun loadSerializedModule(currentAbiVersion: Int): NamedModuleData { override fun loadSerializedModule(currentAbiVersion: Int): NamedModuleData {
val header = Properties() val header = Properties()
moduleFile.bufferedReader().use { reader -> manifestFile.bufferedReader().use { reader ->
header.load(reader) header.load(reader)
} }
val headerAbiVersion = header.getProperty("abi_version")!! val headerAbiVersion = header.getProperty("abi_version")!!
val moduleName = header.getProperty("module_name")!! val moduleName = header.getProperty("module_name")!!
val moduleData = header.getProperty("module_data")!! val moduleData = moduleHeaderFile.readText()
if ("$currentAbiVersion" != headerAbiVersion) if ("$currentAbiVersion" != headerAbiVersion)
error("ABI version mismatch. Compiler expects: $currentAbiVersion, the library is $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) return NamedModuleData(moduleName, moduleData)
} }
override fun loadSerializedPackageFragment(fqName: String): String { override fun loadSerializedPackageFragment(fqName: String)
val realName = if (fqName == "") "<root>" else fqName = packageFile(fqName).readText()
return File(linkdataDir, realName).readText()
}
} }
internal class SplitMetadataGenerator(override val libDir: File): SplitScheme { internal class SplitMetadataGenerator(override val libDir: File): SplitScheme {
@@ -59,15 +55,14 @@ internal class SplitMetadataGenerator(override val libDir: File): SplitScheme {
val header = Properties() val header = Properties()
header.putAll(hashMapOf( header.putAll(hashMapOf(
"abi_version" to "${linkData.abiVersion}", "abi_version" to "${linkData.abiVersion}",
"module_name" to "${linkData.moduleName}", "module_name" to "${linkData.moduleName}"
"module_data" to "${linkData.module}"
)) ))
header.store(moduleFile.outputStream(), null) moduleHeaderFile.writeText(linkData.module)
header.store(manifestFile.outputStream(), null)
linkData.fragments.forEachIndexed { index, it -> linkData.fragments.forEachIndexed { index, it ->
val name = linkData.fragmentNames[index] val name = linkData.fragmentNames[index]
val realName = if (name == "") "<root>" else name packageFile(name).writeText(it)
File(linkdataDir, realName).writeText(it)
} }
} }
} }