diff --git a/build.gradle b/build.gradle index 15a1fbfba66..79764cc43b7 100644 --- a/build.gradle +++ b/build.gradle @@ -402,6 +402,7 @@ task distEndorsedLibraries { } def stdlib = 'klib/common/stdlib' +def stdlibDefaultComponent = "$stdlib/default" def endorsedLibs = 'klib/common/endorsedLibraries' def endorsedLibsBase = 'klib/common' @@ -437,7 +438,7 @@ targetList.each { target -> from(project(':runtime').file("build/$target")) { include("runtime.bc") - into("$stdlib/targets/$target/native") + into("$stdlibDefaultComponent/targets/$target/native") } from(project(':runtime').file("build/$target")) { include("*.bc") @@ -446,10 +447,10 @@ targetList.each { target -> } from(project(':runtime').file("build/${target}Stdlib")) { include('**') - into(stdlib) + into(stdlibDefaultComponent) } if (target == 'wasm32') { - into("$stdlib/targets/wasm32/included") { + into("$stdlibDefaultComponent/targets/wasm32/included") { from(project(':runtime').file('src/main/js')) from(project(':runtime').file('src/launcher/js')) from(project(':Interop:JsRuntime').file('src/main/js')) diff --git a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/KonanLibraryLayout.kt b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/KonanLibraryLayout.kt index 6b6fd6ad2b5..6b6d7328d76 100644 --- a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/KonanLibraryLayout.kt +++ b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/KonanLibraryLayout.kt @@ -22,13 +22,12 @@ import org.jetbrains.kotlin.library.IrKotlinLibraryLayout import org.jetbrains.kotlin.library.KotlinLibraryLayout import org.jetbrains.kotlin.library.MetadataKotlinLibraryLayout - interface TargetedKotlinLibraryLayout : KotlinLibraryLayout { val target: KonanTarget? // This is a default implementation. Can't make it an assignment. get() = null val targetsDir - get() = File(libDir, "targets") + get() = File(componentDir, "targets") val targetDir get() = File(targetsDir, target!!.visibleName) val includedDir diff --git a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/SearchPathResolver.kt b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/SearchPathResolver.kt index 6e3fb7dc525..4f3668270c1 100644 --- a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/SearchPathResolver.kt +++ b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/SearchPathResolver.kt @@ -3,7 +3,7 @@ package org.jetbrains.kotlin.konan.library import org.jetbrains.kotlin.konan.CompilerVersion import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.konan.library.impl.KonanLibraryImpl -import org.jetbrains.kotlin.konan.library.impl.createKonanLibrary +import org.jetbrains.kotlin.konan.library.impl.createKonanLibraryComponents import org.jetbrains.kotlin.konan.target.Distribution import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.library.* @@ -60,7 +60,7 @@ fun resolverByName( skipCurrentDir, logger ) { - override fun libraryBuilder(file: File, isDefault: Boolean) = createKonanLibrary(file, null, isDefault) + override fun libraryComponentBuilder(file: File, isDefault: Boolean) = createKonanLibraryComponents(file, null, isDefault) } internal class KonanLibraryProperResolver( @@ -84,7 +84,7 @@ internal class KonanLibraryProperResolver( listOf(KLIB_INTEROP_IR_PROVIDER_IDENTIFIER) ), SearchPathResolverWithTarget { - override fun libraryBuilder(file: File, isDefault: Boolean) = createKonanLibrary(file, target, isDefault) + override fun libraryComponentBuilder(file: File, isDefault: Boolean) = createKonanLibraryComponents(file, target, isDefault) override val distPlatformHead: File? get() = distributionKlib?.File()?.child("platform")?.child(target.visibleName) diff --git a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/impl/KonanLibraryImpl.kt b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/impl/KonanLibraryImpl.kt index 3f444e3f91e..5f1a58dea46 100644 --- a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/impl/KonanLibraryImpl.kt +++ b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/impl/KonanLibraryImpl.kt @@ -89,14 +89,15 @@ class KonanLibraryImpl( fun createKonanLibrary( libraryFile: File, + component: String, target: KonanTarget? = null, isDefault: Boolean = false ): KonanLibrary { - val baseAccess = BaseLibraryAccess(libraryFile) - val targetedAccess = TargetedLibraryAccess(libraryFile, target) - val metadataAccess = MetadataLibraryAccess(libraryFile) - val irAccess = IrLibraryAccess(libraryFile) - val bitcodeAccess = BitcodeLibraryAccess(libraryFile, target) + val baseAccess = BaseLibraryAccess(libraryFile, component) + val targetedAccess = TargetedLibraryAccess(libraryFile, component, target) + val metadataAccess = MetadataLibraryAccess(libraryFile, component) + val irAccess = IrLibraryAccess(libraryFile, component) + val bitcodeAccess = BitcodeLibraryAccess(libraryFile, component, target) val base = BaseKotlinLibraryImpl(baseAccess, isDefault) val targeted = TargetedLibraryImpl(targetedAccess, base) @@ -106,3 +107,15 @@ fun createKonanLibrary( return KonanLibraryImpl(targeted, metadata, ir, bitcode) } + +fun createKonanLibraryComponents( + libraryFile: File, + target: KonanTarget? = null, + isDefault: Boolean = true +) : List { + val baseAccess = BaseLibraryAccess(libraryFile, null) + val base = BaseKotlinLibraryImpl(baseAccess, isDefault) + return base.componentList.map { + createKonanLibrary(libraryFile, it, target, isDefault) + } +} \ No newline at end of file diff --git a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/impl/KonanLibraryLayoutImpl.kt b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/impl/KonanLibraryLayoutImpl.kt index d4bd070322e..7e4627a8705 100644 --- a/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/impl/KonanLibraryLayoutImpl.kt +++ b/shared/src/library/kotlin/org/jetbrains/kotlin/konan/library/impl/KonanLibraryLayoutImpl.kt @@ -7,8 +7,8 @@ import org.jetbrains.kotlin.library.* import org.jetbrains.kotlin.library.impl.* import java.nio.file.FileSystem -open class TargetedLibraryLayoutImpl(klib: File, override val target: KonanTarget?) : - KotlinLibraryLayoutImpl(klib), TargetedKotlinLibraryLayout { +open class TargetedLibraryLayoutImpl(klib: File, component: String, override val target: KonanTarget?) : + KotlinLibraryLayoutImpl(klib, component), TargetedKotlinLibraryLayout { override val extractingToTemp: TargetedKotlinLibraryLayout by lazy { ExtractingTargetedLibraryImpl(this) @@ -19,8 +19,8 @@ open class TargetedLibraryLayoutImpl(klib: File, override val target: KonanTarge } -class BitcodeLibraryLayoutImpl(klib: File, target: KonanTarget?) : TargetedLibraryLayoutImpl(klib, target), - BitcodeKotlinLibraryLayout { +class BitcodeLibraryLayoutImpl(klib: File, component: String, target: KonanTarget?) : + TargetedLibraryLayoutImpl(klib, component, target), BitcodeKotlinLibraryLayout { override val extractingToTemp: BitcodeKotlinLibraryLayout by lazy { ExtractingBitcodeLibraryImpl(this) } @@ -30,14 +30,14 @@ class BitcodeLibraryLayoutImpl(klib: File, target: KonanTarget?) : TargetedLibra } -open class TargetedLibraryAccess(klib: File, val target: KonanTarget?) : - BaseLibraryAccess(klib) { - override val layout = TargetedLibraryLayoutImpl(klib, target) +open class TargetedLibraryAccess(klib: File, component: String, val target: KonanTarget?) : + BaseLibraryAccess(klib, component) { + override val layout = TargetedLibraryLayoutImpl(klib, component, target) } -open class BitcodeLibraryAccess(klib: File, target: KonanTarget?) : - TargetedLibraryAccess(klib, target) { - override val layout = BitcodeLibraryLayoutImpl(klib, target) +open class BitcodeLibraryAccess(klib: File, component: String, target: KonanTarget?) : + TargetedLibraryAccess(klib, component, target) { + override val layout = BitcodeLibraryLayoutImpl(klib, component, target) } private open class FromZipTargetedLibraryImpl(zipped: TargetedLibraryLayoutImpl, zipFileSystem: FileSystem) :