From 4c099062358ba2b1b69bbdebecd95cb6b7a30a87 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 14 Oct 2020 22:11:24 +0200 Subject: [PATCH] Build: add kotlin.build.useIRForLibraries to enable JVM IR for libraries separately The next step for JVM IR adoption in our project is going to be enabling `kotlin.build.useIR`, but keeping `kotlin.build.useIRForLibraries` disabled until we fix all remaining ABI incompatibility issues for library code. --- gradle.properties | 5 +++++ libraries/commonConfiguration.gradle | 15 +++++++++++++++ libraries/kotlin.test/junit/build.gradle | 2 ++ libraries/kotlin.test/junit5/build.gradle | 2 ++ libraries/kotlin.test/jvm/build.gradle | 2 ++ libraries/kotlin.test/testng/build.gradle | 2 ++ libraries/reflect/api/build.gradle | 2 ++ libraries/stdlib/jdk7/build.gradle | 2 ++ libraries/stdlib/jdk8/build.gradle | 2 ++ libraries/stdlib/jvm/build.gradle | 2 ++ .../tools/kotlin-annotations-jvm/build.gradle | 1 + libraries/tools/script-runtime/build.gradle | 2 ++ 12 files changed, 39 insertions(+) diff --git a/gradle.properties b/gradle.properties index 61d7f5a2811..e09e4288c90 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,12 @@ defaultSnapshotVersion=1.4.255-SNAPSHOT kotlin.compiler.effectSystemEnabled=true kotlin.compiler.newInferenceEnabled=true + +# Enable JVM IR backend for all modules except libraries such as kotlin-stdlib, kotlin-reflect, kotlin-test. #kotlin.build.useIR=true +# Enable JVM IR backend for the libraries mentioned above. +#kotlin.build.useIRForLibraries=true + #maven.repository.mirror=http://repository.jetbrains.com/remote-repos/ #bootstrap.kotlin.repo=https://dl.bintray.com/kotlin/kotlin-dev #bootstrap.kotlin.version=1.1.50-dev-1451 diff --git a/libraries/commonConfiguration.gradle b/libraries/commonConfiguration.gradle index e9601a737d7..d62878cac3e 100644 --- a/libraries/commonConfiguration.gradle +++ b/libraries/commonConfiguration.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + ext.configureJavaOnlyJvm6Project = { Project project -> project.tasks.withType(JavaCompile) { sourceCompatibility = 1.6 @@ -193,6 +195,19 @@ ext.configureLegacyPublishing = { Project project -> } } +ext.configureJvmIrBackend = { Project project -> + project.tasks.withType(KotlinCompile.class) { task -> + task.kotlinOptions { + if (CommonUtilKt.getBooleanProperty(project, "kotlin.build.useIRForLibraries")) { + useIR = true + freeCompilerArgs += ["-Xir-binary-with-stable-abi"] + } else { + useIR = false + } + } + } +} + allprojects { project -> project.ext.configureSourcesJar = { lambda = {} -> ArtifactsKt.sourcesJar(project) { task -> diff --git a/libraries/kotlin.test/junit/build.gradle b/libraries/kotlin.test/junit/build.gradle index b4a9004633e..c8203486d59 100644 --- a/libraries/kotlin.test/junit/build.gradle +++ b/libraries/kotlin.test/junit/build.gradle @@ -38,6 +38,8 @@ compileTestKotlin { kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package"] } +configureJvmIrBackend(project) + if (includeJava9) { compileJava9Sources(project, 'kotlin.test.junit') } diff --git a/libraries/kotlin.test/junit5/build.gradle b/libraries/kotlin.test/junit5/build.gradle index a00e3853ca6..1c96aff858b 100644 --- a/libraries/kotlin.test/junit5/build.gradle +++ b/libraries/kotlin.test/junit5/build.gradle @@ -48,6 +48,8 @@ compileTestKotlin { kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package"] } +configureJvmIrBackend(project) + if (includeJava9) { compileJava9Sources(project, 'kotlin.test.junit5') } diff --git a/libraries/kotlin.test/jvm/build.gradle b/libraries/kotlin.test/jvm/build.gradle index fe4ba8f1dfe..a0c3f31a358 100644 --- a/libraries/kotlin.test/jvm/build.gradle +++ b/libraries/kotlin.test/jvm/build.gradle @@ -53,6 +53,8 @@ compileTestKotlin { kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package"] } +configureJvmIrBackend(project) + if (includeJava9) { compileJava9Sources(project, 'kotlin.test') } diff --git a/libraries/kotlin.test/testng/build.gradle b/libraries/kotlin.test/testng/build.gradle index 4709daea4d6..68a5a3e371c 100644 --- a/libraries/kotlin.test/testng/build.gradle +++ b/libraries/kotlin.test/testng/build.gradle @@ -41,6 +41,8 @@ compileTestKotlin { kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package"] } +configureJvmIrBackend(project) + if (includeJava9) { compileJava9Sources(project, 'kotlin.test.testng') } diff --git a/libraries/reflect/api/build.gradle b/libraries/reflect/api/build.gradle index 19fcbb1a5e8..389ec0c47fb 100644 --- a/libraries/reflect/api/build.gradle +++ b/libraries/reflect/api/build.gradle @@ -52,6 +52,8 @@ compileKotlin { } } +configureJvmIrBackend(project) + jar { manifestAttributes(manifest, project, "internal") } diff --git a/libraries/stdlib/jdk7/build.gradle b/libraries/stdlib/jdk7/build.gradle index 20f99c42277..24b83374380 100644 --- a/libraries/stdlib/jdk7/build.gradle +++ b/libraries/stdlib/jdk7/build.gradle @@ -91,6 +91,8 @@ compileTestKotlin { ] } +configureJvmIrBackend(project) + compileJava9Sources(project, 'kotlin.stdlib.jdk7') test { diff --git a/libraries/stdlib/jdk8/build.gradle b/libraries/stdlib/jdk8/build.gradle index 882523a3eaf..f5d7b28e859 100644 --- a/libraries/stdlib/jdk8/build.gradle +++ b/libraries/stdlib/jdk8/build.gradle @@ -84,6 +84,8 @@ compileTestKotlin { ] } +configureJvmIrBackend(project) + compileJava9Sources(project, 'kotlin.stdlib.jdk8') test { diff --git a/libraries/stdlib/jvm/build.gradle b/libraries/stdlib/jvm/build.gradle index e0249a98123..e7b046ae6a1 100644 --- a/libraries/stdlib/jvm/build.gradle +++ b/libraries/stdlib/jvm/build.gradle @@ -145,6 +145,8 @@ compileLongRunningTestKotlin { kotlinOptions.freeCompilerArgs += "-Xopt-in=kotlin.ExperimentalStdlibApi" } +configureJvmIrBackend(project) + task longRunningTest(type: Test, dependsOn: longRunningTestClasses) { group = "verification" testClassesDirs = sourceSets.longRunningTest.output.classesDirs diff --git a/libraries/tools/kotlin-annotations-jvm/build.gradle b/libraries/tools/kotlin-annotations-jvm/build.gradle index 008b851b452..f05b9fd44f3 100644 --- a/libraries/tools/kotlin-annotations-jvm/build.gradle +++ b/libraries/tools/kotlin-annotations-jvm/build.gradle @@ -33,3 +33,4 @@ compileKotlin { ] } +configureJvmIrBackend(project) diff --git a/libraries/tools/script-runtime/build.gradle b/libraries/tools/script-runtime/build.gradle index 3bdb794f809..9704249ac00 100644 --- a/libraries/tools/script-runtime/build.gradle +++ b/libraries/tools/script-runtime/build.gradle @@ -39,3 +39,5 @@ compileKotlin { "-module-name", project.name ] } + +configureJvmIrBackend(project)