import org.jetbrains.kotlin.gradle.dsl.KotlinCompile plugins { kotlin("multiplatform") } kotlin { js(IR) { nodejs() } } val commonMainFullSources by task { dependsOn(":prepare:build.version:writeStdlibVersion") val sources = listOf( "libraries/stdlib/common/src/", "libraries/stdlib/src/kotlin/", "libraries/stdlib/unsigned/", "core/builtins/src/kotlin/internal/", ) sources.forEach { path -> from("$rootDir/$path") { into(path.dropLastWhile { it != '/' }) } } into("$buildDir/commonMainFullSources") } val commonMainSources by task { dependsOn(commonMainFullSources) from { exclude( listOf( "libraries/stdlib/unsigned/src/kotlin/UByteArray.kt", "libraries/stdlib/unsigned/src/kotlin/UIntArray.kt", "libraries/stdlib/unsigned/src/kotlin/ULongArray.kt", "libraries/stdlib/unsigned/src/kotlin/UMath.kt", "libraries/stdlib/unsigned/src/kotlin/UNumbers.kt", "libraries/stdlib/unsigned/src/kotlin/UShortArray.kt", "libraries/stdlib/unsigned/src/kotlin/UStrings.kt", "libraries/stdlib/common/src/generated/_Arrays.kt", "libraries/stdlib/common/src/generated/_Collections.kt", "libraries/stdlib/common/src/generated/_Comparisons.kt", "libraries/stdlib/common/src/generated/_Maps.kt", "libraries/stdlib/common/src/generated/_OneToManyTitlecaseMappings.kt", "libraries/stdlib/common/src/generated/_Sequences.kt", "libraries/stdlib/common/src/generated/_Sets.kt", "libraries/stdlib/common/src/generated/_Strings.kt", "libraries/stdlib/common/src/generated/_UArrays.kt", "libraries/stdlib/common/src/generated/_URanges.kt", "libraries/stdlib/common/src/generated/_UCollections.kt", "libraries/stdlib/common/src/generated/_UComparisons.kt", "libraries/stdlib/common/src/generated/_USequences.kt", "libraries/stdlib/common/src/kotlin/SequencesH.kt", "libraries/stdlib/common/src/kotlin/TextH.kt", "libraries/stdlib/common/src/kotlin/UMath.kt", "libraries/stdlib/common/src/kotlin/collections/**", "libraries/stdlib/common/src/kotlin/ioH.kt", "libraries/stdlib/src/kotlin/collections/**", "libraries/stdlib/src/kotlin/io/**", "libraries/stdlib/src/kotlin/properties/Delegates.kt", "libraries/stdlib/src/kotlin/random/URandom.kt", "libraries/stdlib/src/kotlin/text/**", "libraries/stdlib/src/kotlin/time/**", "libraries/stdlib/src/kotlin/util/KotlinVersion.kt", "libraries/stdlib/src/kotlin/util/Tuples.kt", "libraries/stdlib/src/kotlin/enums/**" ) ) commonMainFullSources.get().outputs.files.singleFile } into("$buildDir/commonMainSources") } val commonMainCollectionSources by task { dependsOn(commonMainFullSources) from { include("libraries/stdlib/src/kotlin/collections/PrimitiveIterators.kt") commonMainFullSources.get().outputs.files.singleFile } into("$buildDir/commonMainCollectionSources") } val jsMainSources by task { dependsOn(":kotlin-stdlib:prepareJsIrMainSources") val jsDir = file("$rootDir/libraries/stdlib/js") from("$jsDir/src") { exclude( "generated/**", "org.w3c/**", "kotlin/char.kt", "kotlin/collectionJs.kt", "kotlin/collections/**", "kotlin/time/**", "kotlin/console.kt", "kotlin/coreDeprecated.kt", "kotlin/date.kt", "kotlin/GroupingJs.kt", "kotlin/ItemArrayLike.kt", "kotlin/io/**", "kotlin/json.kt", "kotlin/promise.kt", "kotlin/regexp.kt", "kotlin/sequenceJs.kt", "kotlin/throwableExtensions.kt", "kotlin/text/**", "kotlin/reflect/KTypeHelpers.kt", "kotlin/reflect/KTypeParameterImpl.kt", "kotlin/reflect/KTypeImpl.kt", "kotlin/dom/**", "kotlin/browser/**", "kotlinx/dom/**", "kotlinx/browser/**", "kotlin/enums/**", ) } from { val fullJsMainSources = tasks.getByPath(":kotlin-stdlib:prepareJsIrMainSources") as Sync fullJsMainSources.destinationDir } from("$jsDir/runtime") { exclude("collectionsHacks.kt") into("runtime") } from("$jsDir/builtins") { into("builtins") } from("$rootDir/libraries/stdlib/js-ir-minimal-for-test/src") into("$buildDir/jsMainSources") } kotlin { sourceSets { named("commonMain") { kotlin.srcDir(files(commonMainSources.map { it.destinationDir })) kotlin.srcDir(files(commonMainCollectionSources.map { it.destinationDir })) } named("jsMain") { kotlin.srcDir(files(jsMainSources.map { it.destinationDir })) } } } tasks.withType> { kotlinOptions.freeCompilerArgs += listOf( "-Xallow-kotlin-package", "-opt-in=kotlin.ExperimentalMultiplatform", "-opt-in=kotlin.contracts.ExperimentalContracts", "-opt-in=kotlin.RequiresOptIn", "-opt-in=kotlin.ExperimentalUnsignedTypes", "-opt-in=kotlin.ExperimentalStdlibApi", ) } tasks { compileKotlinMetadata { enabled = false } named("compileKotlinJs", KotlinCompile::class) { kotlinOptions.freeCompilerArgs += "-Xir-module-name=kotlin" } }