diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt index dca69532cb1..5c3659df68e 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/metadata/K2MetadataKlibSerializer.kt @@ -91,6 +91,7 @@ internal class K2MetadataKlibSerializer(private val metadataVersion: BuiltInsBin destDir.absolutePath, configuration[CommonConfigurationKeys.MODULE_NAME]!!, nopack = true, + perFile = false, manifestProperties = null, dataFlowGraph = null, builtInsPlatform = BuiltInsPlatform.COMMON diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt index b2fa0638e49..6a3cec379fa 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/klib.kt @@ -179,7 +179,8 @@ fun generateKLib( moduleFragment, expectDescriptorToSymbol, icData, - nopack + nopack, + false ) } @@ -447,7 +448,8 @@ fun serializeModuleIntoKlib( moduleFragment: IrModuleFragment, expectDescriptorToSymbol: MutableMap, cleanFiles: List, - nopack: Boolean + nopack: Boolean, + perFile: Boolean ) { assert(files.size == moduleFragment.files.size) @@ -525,6 +527,7 @@ fun serializeModuleIntoKlib( manifestProperties = null, moduleName = moduleName, nopack = nopack, + perFile = perFile, output = klibPath, versions = versions, builtInsPlatform = BuiltInsPlatform.JS diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryImpl.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryImpl.kt index c9f2c898b7d..cb1f37e905e 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryImpl.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryImpl.kt @@ -234,7 +234,8 @@ open class KotlinLibraryImpl( fun createKotlinLibrary( libraryFile: File, component: String, - isDefault: Boolean = false + isDefault: Boolean = false, + perFile: Boolean = false ): KotlinLibrary { val baseAccess = BaseLibraryAccess(libraryFile, component) val metadataAccess = MetadataLibraryAccess(libraryFile, component) @@ -242,8 +243,7 @@ fun createKotlinLibrary( val base = BaseKotlinLibraryImpl(baseAccess, isDefault) val metadata = MetadataLibraryImpl(metadataAccess) - val ir = IrMonoliticLibraryImpl(irAccess) -// val ir = IrPerFileLibraryImpl(irAccess) + val ir = if (perFile) IrPerFileLibraryImpl(irAccess) else IrMonoliticLibraryImpl(irAccess) return KotlinLibraryImpl(base, metadata, ir) } diff --git a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryWriterImpl.kt b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryWriterImpl.kt index f31638a7d1b..5ac0ac5b8f9 100644 --- a/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryWriterImpl.kt +++ b/compiler/util-klib/src/org/jetbrains/kotlin/library/impl/KotlinLibraryWriterImpl.kt @@ -111,13 +111,26 @@ fun buildKotlinLibrary( output: String, moduleName: String, nopack: Boolean, + perFile: Boolean, manifestProperties: Properties?, dataFlowGraph: ByteArray?, builtInsPlatform: BuiltInsPlatform, nativeTargets: List = emptyList() ): KotlinLibraryLayout { - val library = KotlinLibraryWriterImpl(File(output), moduleName, versions, builtInsPlatform, nativeTargets, nopack) + val klibDirectory = File(output) + val layout = KotlinLibraryLayoutForWriter(klibDirectory) + val irWriter = if (perFile) IrPerFileWriterImpl(layout) else IrMonoliticWriterImpl(layout) + val library = KotlinLibraryWriterImpl( + klibDirectory, + moduleName, + versions, + builtInsPlatform, + nativeTargets, + nopack, + layout = layout, + ir = irWriter + ) library.addMetadata(metadata) @@ -133,10 +146,37 @@ fun buildKotlinLibrary( return library.layout } +class KotlinLibraryOnlyIrWriter(output: String, moduleName: String, versions: KotlinLibraryVersioning, platform: BuiltInsPlatform, nativeTargets: List, perFile: Boolean) { + val outputDir = File(output) + val library = createLibrary(perFile, moduleName, versions, platform, nativeTargets, outputDir) + + private fun createLibrary( + perFile: Boolean, + moduleName: String, + versions: KotlinLibraryVersioning, + platform: BuiltInsPlatform, + nativeTargets: List, + directory: File + ): KotlinLibraryWriterImpl { + val layout = KotlinLibraryLayoutForWriter(directory) + val irWriter = if (perFile) IrPerFileWriterImpl(layout) else IrMonoliticWriterImpl(layout) + return KotlinLibraryWriterImpl(directory, moduleName, versions, platform, nativeTargets, nopack = true, layout = layout, ir = irWriter) + } + + fun invalidate() { + outputDir.deleteRecursively() + library.layout.irDir.mkdirs() + } + + fun writeIr(serializedIrModule: SerializedIrModule) { + library.addIr(serializedIrModule) + } +} + enum class BuiltInsPlatform { JVM, JS, NATIVE, COMMON; companion object { fun parseFromString(name: String): BuiltInsPlatform? = values().firstOrNull { it.name == name } } -} +} \ No newline at end of file