From 34720f27d495b983ba974c7b68840cf715683b09 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 24 Mar 2023 09:51:12 +0100 Subject: [PATCH] [stdlib-mpp] Switch kotlin-stdlib project to multiplatform #KT-56106 --- build.gradle.kts | 5 ++-- gradle.properties | 1 + gradle/verification-metadata.xml | 30 +++++++++++++++++++ libraries/stdlib/build.gradle.kts | 11 ++++++- libraries/stdlib/js-v1/build.gradle | 8 +++++ .../jvm-minimal-for-test/build.gradle.kts | 2 +- .../src/main/kotlin/BuildPropertiesExt.kt | 3 ++ .../src/main/kotlin/repoDependencies.kt | 4 +-- settings.gradle | 9 +++--- 9 files changed, 63 insertions(+), 10 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index ed05c0d423b..5a77820b26d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -357,8 +357,9 @@ val coreLibProjects by extra { ) } val mppProjects by extra { - listOf( - ":kotlin-stdlib-mpp", + listOfNotNull( + ":kotlin-stdlib-mpp".takeUnless { kotlinBuildProperties.kotlinStdlibMpp }, + ":kotlin-stdlib".takeIf { kotlinBuildProperties.kotlinStdlibMpp }, ) } diff --git a/gradle.properties b/gradle.properties index f04df3b0a43..bd761c074d4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -56,6 +56,7 @@ kotlin.options.suppressFreeCompilerArgsModificationWarning=true # TODO: add this flag in a granular way to the modules that don't need stdlib? kotlin.stdlib.default.dependency=false kotlin.js.stdlib.dom.api.included=false +kotlin.stdlib.mpp=true # Suppress warnings about using deprecated and unstable plugins in kotlin-stdlib kotlin.internal.suppressGradlePluginErrors=PreHMPPFlagsError diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index f9a55cd9b41..e5768490a5d 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -4101,12 +4101,30 @@ + + + + + + + + + + + + + + + + + + @@ -4125,6 +4143,18 @@ + + + + + + + + + + + + diff --git a/libraries/stdlib/build.gradle.kts b/libraries/stdlib/build.gradle.kts index 6e3a74323b4..9672b673e3f 100644 --- a/libraries/stdlib/build.gradle.kts +++ b/libraries/stdlib/build.gradle.kts @@ -980,4 +980,13 @@ private class ComponentWithExternalVariants( override fun getVariants(): Set = externalComponents } -// endregion \ No newline at end of file +// endregion + +// for legacy intra-project dependencies +for (name in listOf("sources", "distSources")) { + val sourcesConfiguration = configurations.getOrCreate(name).apply { + isCanBeResolved = false + isCanBeConsumed = true + } + artifacts.add(sourcesConfiguration.name, tasks["jvmSourcesJar"]) +} diff --git a/libraries/stdlib/js-v1/build.gradle b/libraries/stdlib/js-v1/build.gradle index 2346a16f9a7..394b0729cf6 100644 --- a/libraries/stdlib/js-v1/build.gradle +++ b/libraries/stdlib/js-v1/build.gradle @@ -376,3 +376,11 @@ tasks.register("runMocha", NodeTask) { tasks.withType(org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile) { kotlinOptions.freeCompilerArgs += "-Xforce-deprecated-legacy-compiler-usage" } + +if (BuildPropertiesExtKt.getKotlinStdlibMpp(project.kotlinBuildProperties)) { + afterEvaluate { + tasks.withType(AbstractPublishToMaven).configureEach { + enabled = false + } + } +} \ No newline at end of file diff --git a/libraries/stdlib/jvm-minimal-for-test/build.gradle.kts b/libraries/stdlib/jvm-minimal-for-test/build.gradle.kts index c9d6ed74603..055bb458ae1 100644 --- a/libraries/stdlib/jvm-minimal-for-test/build.gradle.kts +++ b/libraries/stdlib/jvm-minimal-for-test/build.gradle.kts @@ -32,7 +32,7 @@ sourceSets { } val copySources by task { - val stdlibProjectDir = project(":kotlin-stdlib").projectDir + val stdlibProjectDir = file("$rootDir/libraries/stdlib/jvm") from(stdlibProjectDir.resolve("runtime")) .include("kotlin/TypeAliases.kt", diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/BuildPropertiesExt.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/BuildPropertiesExt.kt index 4ce9308dd05..55bc6e97372 100644 --- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/BuildPropertiesExt.kt +++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/BuildPropertiesExt.kt @@ -59,3 +59,6 @@ val KotlinBuildProperties.useFirWithLightTree: Boolean val KotlinBuildProperties.useFirTightIC: Boolean get() = getBoolean("kotlin.build.useFirIC") + +val KotlinBuildProperties.kotlinStdlibMpp: Boolean + get() = getBoolean("kotlin.stdlib.mpp") \ No newline at end of file diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/repoDependencies.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/repoDependencies.kt index d0e7175b615..7f0d8d8fbd1 100644 --- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/repoDependencies.kt +++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/repoDependencies.kt @@ -86,9 +86,9 @@ fun kotlinDep(artifactBaseName: String, version: String, classifier: String? = n @JvmOverloads fun Project.kotlinStdlib(suffix: String? = null, classifier: String? = null): Any { return if (kotlinBuildProperties.useBootstrapStdlib) - kotlinDep(listOfNotNull("stdlib", suffix).joinToString("-"), bootstrapKotlinVersion, classifier) + kotlinDep(listOfNotNull("stdlib", suffix.takeUnless { kotlinBuildProperties.kotlinStdlibMpp && it == "mpp" }).joinToString("-"), bootstrapKotlinVersion, classifier) else - dependencies.project(listOfNotNull(":kotlin-stdlib", suffix).joinToString("-"), classifier) + dependencies.project(listOfNotNull(":kotlin-stdlib", suffix.takeUnless { kotlinBuildProperties.kotlinStdlibMpp && it == "mpp" }).joinToString("-"), classifier) } fun Project.kotlinBuiltins(): Any = kotlinBuiltins(forJvm = false) diff --git a/settings.gradle b/settings.gradle index 5e0d76c57c6..4369e5d00d1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -578,7 +578,7 @@ if (buildProperties.inJpsBuildIdeaSync) { project(":kotlin-stdlib:jps-build").projectDir = "$rootDir/libraries/stdlib/jps-build" as File } else { // modules that we are currently cannot compile with jps - + def stdlibMpp = buildProperties.getBoolean("kotlin.stdlib.mpp", false) include ":core:builtins", ":kotlin-stdlib-common", ":kotlin-stdlib", @@ -587,7 +587,6 @@ if (buildProperties.inJpsBuildIdeaSync) { ":kotlin-dom-api-compat", ":kotlin-stdlib-js-ir-minimal-for-test", ":kotlin-stdlib-wasm", - ":kotlin-stdlib-mpp", ":kotlin-stdlib-jdk7", ":kotlin-stdlib-jdk8", ":kotlin-stdlib:samples", @@ -605,8 +604,10 @@ if (buildProperties.inJpsBuildIdeaSync) { ":kotlin-test:kotlin-test-wasm", ":native:native.tests" + if (!stdlibMpp) include ":kotlin-stdlib-mpp" + project(':kotlin-stdlib-common').projectDir = "$rootDir/libraries/stdlib/common" as File - project(':kotlin-stdlib').projectDir = "$rootDir/libraries/stdlib/jvm" as File + project(':kotlin-stdlib').projectDir = "$rootDir/libraries/stdlib" + (stdlibMpp ? "" : "/jvm") as File project(':kotlin-stdlib-js').projectDir = "$rootDir/libraries/stdlib/js-v1" as File project(':kotlin-stdlib-js-ir').projectDir = "$rootDir/libraries/stdlib/js-ir" as File project(':kotlin-dom-api-compat').projectDir = "$rootDir/libraries/kotlin-dom-api-compat" as File @@ -614,7 +615,7 @@ if (buildProperties.inJpsBuildIdeaSync) { project(':kotlin-stdlib-js-ir-minimal-for-test').projectDir = "$rootDir/libraries/stdlib/js-ir-minimal-for-test" as File project(':kotlin-stdlib-jdk7').projectDir = "$rootDir/libraries/stdlib/jdk7" as File project(':kotlin-stdlib-jdk8').projectDir = "$rootDir/libraries/stdlib/jdk8" as File - project(':kotlin-stdlib-mpp').projectDir = "$rootDir/libraries/stdlib" as File + if (!stdlibMpp) project(':kotlin-stdlib-mpp').projectDir = "$rootDir/libraries/stdlib" as File project(':kotlin-stdlib:samples').projectDir = "$rootDir/libraries/stdlib/samples" as File project(":kotlin-stdlib-jvm-minimal-for-test").projectDir = "$rootDir/libraries/stdlib/jvm-minimal-for-test" as File