[KLIB] Fix issues between directory and .klib modes
- use .klib extension explicitly - fix issue with `module.klib.klib` names
This commit is contained in:
@@ -39,6 +39,7 @@ import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer
|
|||||||
import org.jetbrains.kotlin.ir.backend.js.*
|
import org.jetbrains.kotlin.ir.backend.js.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory
|
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory
|
||||||
import org.jetbrains.kotlin.js.config.*
|
import org.jetbrains.kotlin.js.config.*
|
||||||
|
import org.jetbrains.kotlin.library.KLIB_FILE_EXTENSION
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
|
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -187,11 +188,9 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (arguments.irProduceKlibDir || arguments.irProduceKlibFile) {
|
if (arguments.irProduceKlibDir || arguments.irProduceKlibFile) {
|
||||||
val outputKlibPath =
|
if (arguments.irProduceKlibFile) {
|
||||||
if (arguments.irProduceKlibDir)
|
require(outputFile.extension == KLIB_FILE_EXTENSION) { "Please set up .klib file as output" }
|
||||||
File(outputFilePath).parent
|
}
|
||||||
else
|
|
||||||
outputFilePath
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
generateKLib(
|
generateKLib(
|
||||||
@@ -202,7 +201,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
allDependencies = resolvedLibraries,
|
allDependencies = resolvedLibraries,
|
||||||
friendDependencies = friendDependencies,
|
friendDependencies = friendDependencies,
|
||||||
irFactory = PersistentIrFactory,
|
irFactory = PersistentIrFactory,
|
||||||
outputKlibPath = outputKlibPath,
|
outputKlibPath = outputFile.path,
|
||||||
nopack = arguments.irProduceKlibDir
|
nopack = arguments.irProduceKlibDir
|
||||||
)
|
)
|
||||||
} catch (e: JsIrCompilationError) {
|
} catch (e: JsIrCompilationError) {
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
|||||||
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
import org.jetbrains.kotlin.konan.util.KlibMetadataFactories
|
||||||
import org.jetbrains.kotlin.library.*
|
import org.jetbrains.kotlin.library.*
|
||||||
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
|
import org.jetbrains.kotlin.library.impl.BuiltInsPlatform
|
||||||
|
import org.jetbrains.kotlin.library.impl.KotlinLibraryLayoutForWriter
|
||||||
import org.jetbrains.kotlin.library.impl.KotlinLibraryWriterImpl
|
import org.jetbrains.kotlin.library.impl.KotlinLibraryWriterImpl
|
||||||
import org.jetbrains.kotlin.library.metadata.NativeTypeTransformer
|
import org.jetbrains.kotlin.library.metadata.NativeTypeTransformer
|
||||||
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
|
import org.jetbrains.kotlin.library.metadata.NullFlexibleTypeDeserializer
|
||||||
@@ -78,8 +79,10 @@ object KlibTestUtil {
|
|||||||
|
|
||||||
val serializedMetadata = serializer.serializeModule(module)
|
val serializedMetadata = serializer.serializeModule(module)
|
||||||
|
|
||||||
|
val unzippedDir = org.jetbrains.kotlin.konan.file.createTempDir(libraryName)
|
||||||
|
val layout = KotlinLibraryLayoutForWriter(KFile(klibFile.path), unzippedDir)
|
||||||
|
|
||||||
val library = KotlinLibraryWriterImpl(
|
val library = KotlinLibraryWriterImpl(
|
||||||
libDir = KFile(klibFile.path.removeSuffix(KLIB_FILE_EXTENSION_WITH_DOT)),
|
|
||||||
moduleName = libraryName,
|
moduleName = libraryName,
|
||||||
versions = KotlinLibraryVersioning(
|
versions = KotlinLibraryVersioning(
|
||||||
libraryVersion = null,
|
libraryVersion = null,
|
||||||
@@ -91,7 +94,8 @@ object KlibTestUtil {
|
|||||||
builtInsPlatform = BuiltInsPlatform.COMMON,
|
builtInsPlatform = BuiltInsPlatform.COMMON,
|
||||||
nativeTargets = emptyList(),
|
nativeTargets = emptyList(),
|
||||||
nopack = false,
|
nopack = false,
|
||||||
shortName = libraryName
|
shortName = libraryName,
|
||||||
|
layout = layout
|
||||||
)
|
)
|
||||||
|
|
||||||
library.addMetadata(serializedMetadata)
|
library.addMetadata(serializedMetadata)
|
||||||
|
|||||||
@@ -26,18 +26,18 @@ const val KLIB_IR_FOLDER_NAME = "ir"
|
|||||||
* This scheme describes the Kotlin/Native Library (KLIB) layout.
|
* This scheme describes the Kotlin/Native Library (KLIB) layout.
|
||||||
*/
|
*/
|
||||||
interface KotlinLibraryLayout {
|
interface KotlinLibraryLayout {
|
||||||
val libDir: File
|
val libFile: File
|
||||||
val libraryName: String
|
val libraryName: String
|
||||||
get() = libDir.path
|
get() = libFile.path
|
||||||
val component: String?
|
val component: String?
|
||||||
val componentDir: File
|
val componentDir: File
|
||||||
get() = File(libDir, component!!)
|
get() = File(libFile, component!!)
|
||||||
val manifestFile
|
val manifestFile
|
||||||
get() = File(componentDir, KLIB_MANIFEST_FILE_NAME)
|
get() = File(componentDir, KLIB_MANIFEST_FILE_NAME)
|
||||||
val resourcesDir
|
val resourcesDir
|
||||||
get() = File(componentDir, "resources")
|
get() = File(componentDir, "resources")
|
||||||
val pre_1_4_manifest: File
|
val pre_1_4_manifest: File
|
||||||
get() = File(libDir, KLIB_MANIFEST_FILE_NAME)
|
get() = File(libFile, KLIB_MANIFEST_FILE_NAME)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MetadataKotlinLibraryLayout : KotlinLibraryLayout {
|
interface MetadataKotlinLibraryLayout : KotlinLibraryLayout {
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ open class BaseKotlinLibraryImpl(
|
|||||||
|
|
||||||
private val componentListAndHasPre14Manifest by lazy {
|
private val componentListAndHasPre14Manifest by lazy {
|
||||||
access.inPlace { layout ->
|
access.inPlace { layout ->
|
||||||
val listFiles = layout.libDir.listFiles
|
val listFiles = layout.libFile.listFiles
|
||||||
listFiles
|
listFiles
|
||||||
.filter { it.isDirectory }
|
.filter { it.isDirectory }
|
||||||
.filter { it.listFiles.map { it.name }.contains(KLIB_MANIFEST_FILE_NAME) }
|
.filter { it.listFiles.map { it.name }.contains(KLIB_MANIFEST_FILE_NAME) }
|
||||||
|
|||||||
@@ -14,14 +14,14 @@ open class KotlinLibraryLayoutImpl(val klib: File, override val component: Strin
|
|||||||
if (isZipped) zippedKotlinLibraryChecks(klib)
|
if (isZipped) zippedKotlinLibraryChecks(klib)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val libDir = if (isZipped) File("/") else klib
|
override val libFile = if (isZipped) File("/") else klib
|
||||||
|
|
||||||
override val libraryName
|
override val libraryName
|
||||||
get() =
|
get() =
|
||||||
if (isZipped)
|
if (isZipped)
|
||||||
klib.path.removeSuffixIfPresent(KLIB_FILE_EXTENSION_WITH_DOT)
|
klib.path.removeSuffixIfPresent(KLIB_FILE_EXTENSION_WITH_DOT)
|
||||||
else
|
else
|
||||||
libDir.path
|
libFile.path
|
||||||
|
|
||||||
open val extractingToTemp: KotlinLibraryLayout by lazy {
|
open val extractingToTemp: KotlinLibraryLayout by lazy {
|
||||||
ExtractingBaseLibraryImpl(this)
|
ExtractingBaseLibraryImpl(this)
|
||||||
@@ -84,7 +84,7 @@ open class FromZipBaseLibraryImpl(zipped: KotlinLibraryLayoutImpl, zipFileSystem
|
|||||||
KotlinLibraryLayout {
|
KotlinLibraryLayout {
|
||||||
|
|
||||||
override val libraryName = zipped.libraryName
|
override val libraryName = zipped.libraryName
|
||||||
override val libDir = zipFileSystem.file(zipped.libDir)
|
override val libFile = zipFileSystem.file(zipped.libFile)
|
||||||
override val component = zipped.component
|
override val component = zipped.component
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ fun KotlinLibraryLayoutImpl.extractDir(directory: File): File = this.klib.withZi
|
|||||||
}
|
}
|
||||||
|
|
||||||
open class ExtractingKotlinLibraryLayout(zipped: KotlinLibraryLayoutImpl) : KotlinLibraryLayout {
|
open class ExtractingKotlinLibraryLayout(zipped: KotlinLibraryLayoutImpl) : KotlinLibraryLayout {
|
||||||
override val libDir: File get() = error("Extracting layout doesn't extract its own root")
|
override val libFile: File get() = error("Extracting layout doesn't extract its own root")
|
||||||
override val libraryName = zipped.libraryName
|
override val libraryName = zipped.libraryName
|
||||||
override val component = zipped.component
|
override val component = zipped.component
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-16
@@ -14,9 +14,13 @@ import org.jetbrains.kotlin.library.*
|
|||||||
const val KLIB_DEFAULT_COMPONENT_NAME = "default"
|
const val KLIB_DEFAULT_COMPONENT_NAME = "default"
|
||||||
|
|
||||||
open class KotlinLibraryLayoutForWriter(
|
open class KotlinLibraryLayoutForWriter(
|
||||||
override val libDir: File,
|
override val libFile: File,
|
||||||
|
val unzippedDir: File,
|
||||||
override val component: String = KLIB_DEFAULT_COMPONENT_NAME
|
override val component: String = KLIB_DEFAULT_COMPONENT_NAME
|
||||||
) : KotlinLibraryLayout, MetadataKotlinLibraryLayout, IrKotlinLibraryLayout
|
) : KotlinLibraryLayout, MetadataKotlinLibraryLayout, IrKotlinLibraryLayout {
|
||||||
|
override val componentDir: File
|
||||||
|
get() = File(unzippedDir, component)
|
||||||
|
}
|
||||||
|
|
||||||
open class BaseWriterImpl(
|
open class BaseWriterImpl(
|
||||||
val libraryLayout: KotlinLibraryLayoutForWriter,
|
val libraryLayout: KotlinLibraryLayoutForWriter,
|
||||||
@@ -28,14 +32,12 @@ open class BaseWriterImpl(
|
|||||||
val shortName: String? = null
|
val shortName: String? = null
|
||||||
) : BaseWriter {
|
) : BaseWriter {
|
||||||
|
|
||||||
val klibFile = File("${libraryLayout.libDir.path}.$KLIB_FILE_EXTENSION")
|
val klibFile = libraryLayout.libFile
|
||||||
val manifestProperties = Properties()
|
val manifestProperties = Properties()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// TODO: figure out the proper policy here.
|
// TODO: figure out the proper policy here.
|
||||||
libraryLayout.libDir.deleteRecursively()
|
|
||||||
klibFile.delete()
|
klibFile.delete()
|
||||||
libraryLayout.libDir.mkdirs()
|
|
||||||
libraryLayout.resourcesDir.mkdirs()
|
libraryLayout.resourcesDir.mkdirs()
|
||||||
// TODO: <name>:<hash> will go somewhere around here.
|
// TODO: <name>:<hash> will go somewhere around here.
|
||||||
manifestProperties.setProperty(KLIB_PROPERTY_UNIQUE_NAME, moduleName)
|
manifestProperties.setProperty(KLIB_PROPERTY_UNIQUE_NAME, moduleName)
|
||||||
@@ -76,8 +78,8 @@ open class BaseWriterImpl(
|
|||||||
override fun commit() {
|
override fun commit() {
|
||||||
manifestProperties.saveToFile(libraryLayout.manifestFile)
|
manifestProperties.saveToFile(libraryLayout.manifestFile)
|
||||||
if (!nopack) {
|
if (!nopack) {
|
||||||
libraryLayout.libDir.zipDirAs(klibFile)
|
libraryLayout.unzippedDir.zipDirAs(klibFile)
|
||||||
libraryLayout.libDir.deleteRecursively()
|
libraryLayout.unzippedDir.deleteRecursively()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,16 +88,13 @@ open class BaseWriterImpl(
|
|||||||
* Requires non-null [target].
|
* Requires non-null [target].
|
||||||
*/
|
*/
|
||||||
class KotlinLibraryWriterImpl(
|
class KotlinLibraryWriterImpl(
|
||||||
libDir: File,
|
|
||||||
moduleName: String,
|
moduleName: String,
|
||||||
versions: KotlinLibraryVersioning,
|
versions: KotlinLibraryVersioning,
|
||||||
builtInsPlatform: BuiltInsPlatform,
|
builtInsPlatform: BuiltInsPlatform,
|
||||||
nativeTargets: List<String>,
|
nativeTargets: List<String>,
|
||||||
nopack: Boolean = false,
|
nopack: Boolean = false,
|
||||||
shortName: String? = null,
|
shortName: String? = null,
|
||||||
|
val layout: KotlinLibraryLayoutForWriter,
|
||||||
val layout: KotlinLibraryLayoutForWriter = KotlinLibraryLayoutForWriter(libDir),
|
|
||||||
|
|
||||||
val base: BaseWriter = BaseWriterImpl(layout, moduleName, versions, builtInsPlatform, nativeTargets, nopack, shortName),
|
val base: BaseWriter = BaseWriterImpl(layout, moduleName, versions, builtInsPlatform, nativeTargets, nopack, shortName),
|
||||||
metadata: MetadataWriter = MetadataWriterImpl(layout),
|
metadata: MetadataWriter = MetadataWriterImpl(layout),
|
||||||
ir: IrWriter = IrMonoliticWriterImpl(layout)
|
ir: IrWriter = IrMonoliticWriterImpl(layout)
|
||||||
@@ -118,11 +117,11 @@ fun buildKotlinLibrary(
|
|||||||
nativeTargets: List<String> = emptyList()
|
nativeTargets: List<String> = emptyList()
|
||||||
): KotlinLibraryLayout {
|
): KotlinLibraryLayout {
|
||||||
|
|
||||||
val klibDirectory = File(output)
|
val klibFile = File(output)
|
||||||
val layout = KotlinLibraryLayoutForWriter(klibDirectory)
|
val unzippedKlibDir = if (nopack) klibFile.also { it.isDirectory } else org.jetbrains.kotlin.konan.file.createTempDir(moduleName)
|
||||||
|
val layout = KotlinLibraryLayoutForWriter(klibFile, unzippedKlibDir)
|
||||||
val irWriter = if (perFile) IrPerFileWriterImpl(layout) else IrMonoliticWriterImpl(layout)
|
val irWriter = if (perFile) IrPerFileWriterImpl(layout) else IrMonoliticWriterImpl(layout)
|
||||||
val library = KotlinLibraryWriterImpl(
|
val library = KotlinLibraryWriterImpl(
|
||||||
klibDirectory,
|
|
||||||
moduleName,
|
moduleName,
|
||||||
versions,
|
versions,
|
||||||
builtInsPlatform,
|
builtInsPlatform,
|
||||||
@@ -158,9 +157,9 @@ class KotlinLibraryOnlyIrWriter(output: String, moduleName: String, versions: Ko
|
|||||||
nativeTargets: List<String>,
|
nativeTargets: List<String>,
|
||||||
directory: File
|
directory: File
|
||||||
): KotlinLibraryWriterImpl {
|
): KotlinLibraryWriterImpl {
|
||||||
val layout = KotlinLibraryLayoutForWriter(directory)
|
val layout = KotlinLibraryLayoutForWriter(directory, directory)
|
||||||
val irWriter = if (perFile) IrPerFileWriterImpl(layout) else IrMonoliticWriterImpl(layout)
|
val irWriter = if (perFile) IrPerFileWriterImpl(layout) else IrMonoliticWriterImpl(layout)
|
||||||
return KotlinLibraryWriterImpl(directory, moduleName, versions, platform, nativeTargets, nopack = true, layout = layout, ir = irWriter)
|
return KotlinLibraryWriterImpl(moduleName, versions, platform, nativeTargets, nopack = true, layout = layout, ir = irWriter)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun invalidate() {
|
fun invalidate() {
|
||||||
|
|||||||
Reference in New Issue
Block a user