[KLIB] Adapt new klib io API in K/N

(cherry picked from commit 70fabb6a9db83db5f5b26b54f2656655316ea31c)
This commit is contained in:
Roman Artemev
2020-12-24 17:26:31 +03:00
committed by Vasily Levchenko
parent 04ee3e37e7
commit fde107b181
2 changed files with 18 additions and 12 deletions
@@ -5,15 +5,17 @@
package org.jetbrains.kotlin.native.interop.gen.jvm
import kotlinx.metadata.*
import kotlinx.metadata.KmModuleFragment
import kotlinx.metadata.klib.fqName
import kotlinx.metadata.klib.className
import kotlinx.metadata.klib.KlibModuleFragmentWriteStrategy
import kotlinx.metadata.klib.KlibModuleMetadata
import kotlinx.metadata.klib.className
import kotlinx.metadata.klib.fqName
import org.jetbrains.kotlin.backend.common.serialization.KlibIrVersion
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataVersion
import org.jetbrains.kotlin.konan.CURRENT
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.konan.library.impl.KonanLibraryLayoutForWriter
import org.jetbrains.kotlin.konan.library.impl.KonanLibraryWriterImpl
import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.library.KotlinLibraryVersioning
@@ -21,7 +23,6 @@ import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.SerializedMetadata
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
import org.jetbrains.kotlin.util.removeSuffixIfPresent
import java.util.*
fun createInteropLibrary(
@@ -43,16 +44,18 @@ fun createInteropLibrary(
metadataVersion = KlibMetadataVersion.INSTANCE.toString(),
irVersion = KlibIrVersion.INSTANCE.toString()
)
val outputPathWithoutExtension = outputPath.removeSuffixIfPresent(".klib")
val libFile = File(outputPath)
val unzippedDir = if (nopack) libFile else org.jetbrains.kotlin.konan.file.createTempDir(moduleName)
val layout = KonanLibraryLayoutForWriter(libFile, unzippedDir, target)
KonanLibraryWriterImpl(
File(outputPathWithoutExtension),
moduleName,
version,
target,
BuiltInsPlatform.NATIVE,
nopack = nopack,
shortName = shortName
shortName = shortName,
layout = layout
).apply {
val serializedMetadata = metadata.write(ChunkingWriteStrategy())
addMetadata(SerializedMetadata(serializedMetadata.header, serializedMetadata.fragments, serializedMetadata.fragmentNames))
@@ -16,15 +16,15 @@ import org.jetbrains.kotlin.library.*
import org.jetbrains.kotlin.library.impl.*
class KonanLibraryLayoutForWriter(
override val libDir: File,
libFile: File,
unzippedDir: File,
override val target: KonanTarget
) : KonanLibraryLayout, KotlinLibraryLayoutForWriter(libDir)
) : KonanLibraryLayout, KotlinLibraryLayoutForWriter(libFile, unzippedDir)
/**
* Requires non-null [target].
*/
class KonanLibraryWriterImpl(
libDir: File,
moduleName: String,
versions: KotlinLibraryVersioning,
target: KonanTarget,
@@ -32,7 +32,7 @@ class KonanLibraryWriterImpl(
nopack: Boolean = false,
shortName: String? = null,
val layout: KonanLibraryLayoutForWriter = KonanLibraryLayoutForWriter(libDir, target),
val layout: KonanLibraryLayoutForWriter,
base: BaseWriter = BaseWriterImpl(layout, moduleName, versions, builtInsPlatform, listOf(target.visibleName), nopack, shortName),
bitcode: BitcodeWriter = BitcodeWriterImpl(layout),
@@ -57,14 +57,17 @@ fun buildLibrary(
dataFlowGraph: ByteArray?
): KonanLibraryLayout {
val libFile = File(output)
val unzippedDir = if (nopack) libFile else org.jetbrains.kotlin.konan.file.createTempDir(moduleName)
val layout = KonanLibraryLayoutForWriter(libFile, unzippedDir, target)
val library = KonanLibraryWriterImpl(
File(output),
moduleName,
versions,
target,
BuiltInsPlatform.NATIVE,
nopack,
shortName
shortName,
layout
)
library.addMetadata(metadata)