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:
committed by
alexander-gorshenev
parent
53473fc0dd
commit
6c00815968
+8
-4
@@ -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.
|
||||||
|
|||||||
+8
-13
@@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user