diff --git a/build.gradle.kts b/build.gradle.kts index 9bde5f1d218..0208c9770e6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,6 @@ +import org.gradle.api.Project import java.util.* +import java.io.File import org.gradle.api.tasks.bundling.Jar import org.gradle.kotlin.dsl.java import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -165,8 +167,14 @@ fun Project.allprojectsRecursive(body: Project.() -> Unit) { this.subprojects { allprojectsRecursive(body) } } +val defaultJvmTarget = "1.8" +val defaultJavaHome = jdkPath(defaultJvmTarget!!) + allprojects { + jvmTarget = defaultJvmTarget + javaHome = defaultJavaHome + buildDir = File(commonBuildDir, project.name) repositories { @@ -176,10 +184,11 @@ allprojects { mavenCentral() jcenter() } + configureJvmProject(javaHome!!, jvmTarget!!) tasks.withType { kotlinOptions.freeCompilerArgs = listOf("-Xallow-kotlin-package", "-module-name", project.name) - kotlinOptions.jvmTarget = "1.8" +// kotlinOptions.jvmTarget = "1.8" } tasks.withType { @@ -197,6 +206,13 @@ allprojects { tasks.withType { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } + + afterEvaluate { + logger.info("configuring project $name to compile to the target jvm version $jvmTarget using jdk: $javaHome") + if (javaHome != defaultJavaHome || jvmTarget != defaultJvmTarget) { + configureJvmProject(javaHome!!, jvmTarget!!) + } + } } task("dist") { @@ -288,3 +304,22 @@ fun jdkPath(version: String): String { val varName = "JDK_${version.replace(".", "")}" return System.getenv(varName) ?: throw GradleException ("Please set environment variable $varName to point to JDK $version installation") } + +fun Project.configureJvmProject(javaHome: String, javaVersion: String) { + + tasks.withType { + options.forkOptions.javaHome = file(javaHome) + } + + tasks.withType { + kotlinOptions.jdkHome = javaHome + kotlinOptions.jvmTarget = javaVersion + doFirst { + System.setProperty("kotlin.colors.enabled", "false") + } + } + + tasks.withType { + executable = File(javaHome, "bin/java").canonicalPath + } +} diff --git a/buildSrc/src/main/kotlin/CommonUtil.kt b/buildSrc/src/main/kotlin/CommonUtil.kt index 925a21a9ed1..e19edd6d10f 100644 --- a/buildSrc/src/main/kotlin/CommonUtil.kt +++ b/buildSrc/src/main/kotlin/CommonUtil.kt @@ -65,7 +65,13 @@ fun Project.getResourceFiles(): SourceDirectorySet? = withJavaPlugin { the().sourceSets.getByName("main").resources } - - fun File(root: File, vararg children: String): File = children.fold(root, { f, c -> File(f, c) }) fun File(root: String, vararg children: String): File = children.fold(File(root), { f, c -> File(f, c) }) + +var Project.jvmTarget: String? + get() = extra.takeIf { it.has("jvmTarget") }?.get("jvmTarget") as? String + set(v) { extra["jvmTarget"] = v } + +var Project.javaHome: String? + get() = extra.takeIf { it.has("javaHome") }?.get("javaHome") as? String + set(v) { extra["javaHome"] = v } diff --git a/compiler/android-tests/build.gradle.kts b/compiler/android-tests/build.gradle.kts index e05db0e4bb1..9d83ef762f0 100644 --- a/compiler/android-tests/build.gradle.kts +++ b/compiler/android-tests/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":compiler:util")) compile(project(":compiler:cli")) @@ -21,7 +23,7 @@ dependencies { } sourceSets { - "main" { java.srcDirs() } + "main" { projectDefault() } "test" { projectDefault() } } diff --git a/compiler/backend-common/build.gradle.kts b/compiler/backend-common/build.gradle.kts index 24f1ce52f76..e51b2dddf4b 100644 --- a/compiler/backend-common/build.gradle.kts +++ b/compiler/backend-common/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":core")) compile(project(":compiler:util")) diff --git a/compiler/backend/build.gradle.kts b/compiler/backend/build.gradle.kts index 0c940823ec3..c769ea9dbd8 100644 --- a/compiler/backend/build.gradle.kts +++ b/compiler/backend/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":compiler:util")) compile(project(":compiler:backend-common")) diff --git a/compiler/build.gradle.kts b/compiler/build.gradle.kts index a00688c1a6f..394c7cd49b7 100644 --- a/compiler/build.gradle.kts +++ b/compiler/build.gradle.kts @@ -3,6 +3,8 @@ import java.io.File apply { plugin("kotlin") } +jvmTarget = "1.6" + val compilerModules: Array by rootProject.extra val otherCompilerModules = compilerModules.filter { it != path } diff --git a/compiler/cli/build.gradle.kts b/compiler/cli/build.gradle.kts index 1929bce4ae0..d6e7e4100ee 100644 --- a/compiler/cli/build.gradle.kts +++ b/compiler/cli/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":compiler:util")) compile(project(":compiler:cli-common")) diff --git a/compiler/cli/cli-common/build.gradle.kts b/compiler/cli/cli-common/build.gradle.kts index e96ff4abb0d..2190bfd7e39 100644 --- a/compiler/cli/cli-common/build.gradle.kts +++ b/compiler/cli/cli-common/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":core:util.runtime")) compile(project(":compiler:frontend")) diff --git a/compiler/cli/cli-runner/build.gradle.kts b/compiler/cli/cli-runner/build.gradle.kts index 1250f666491..d9db3f741e1 100644 --- a/compiler/cli/cli-runner/build.gradle.kts +++ b/compiler/cli/cli-runner/build.gradle.kts @@ -3,6 +3,8 @@ description = "Kotlin Runner" apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { val compile by configurations compile(project(":kotlin-stdlib")) diff --git a/compiler/compiler-runner/build.gradle.kts b/compiler/compiler-runner/build.gradle.kts index 9e16a6c41c2..db553fc3991 100644 --- a/compiler/compiler-runner/build.gradle.kts +++ b/compiler/compiler-runner/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":kotlin-build-common")) compile(project(":compiler:cli-common")) diff --git a/compiler/container/build.gradle.kts b/compiler/container/build.gradle.kts index 4567ede8ddf..455268c7c13 100644 --- a/compiler/container/build.gradle.kts +++ b/compiler/container/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":core:util.runtime")) compile(commonDep("javax.inject")) diff --git a/compiler/daemon/daemon-client/build.gradle.kts b/compiler/daemon/daemon-client/build.gradle.kts index 66000b5758a..4b84ea42f78 100644 --- a/compiler/daemon/daemon-client/build.gradle.kts +++ b/compiler/daemon/daemon-client/build.gradle.kts @@ -3,6 +3,8 @@ description = "Kotlin Daemon Client" apply { plugin("kotlin") } +jvmTarget = "1.6" + val nativePlatformUberjar = preloadedDeps("native-platform-uberjar") dependencies { diff --git a/compiler/daemon/daemon-common/build.gradle.kts b/compiler/daemon/daemon-common/build.gradle.kts index 81b0ed078a4..7b7892a135f 100644 --- a/compiler/daemon/daemon-common/build.gradle.kts +++ b/compiler/daemon/daemon-common/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":core")) compile(project(":compiler:util")) diff --git a/compiler/frontend.java/build.gradle.kts b/compiler/frontend.java/build.gradle.kts index 58e1cab1380..f4b160ad842 100644 --- a/compiler/frontend.java/build.gradle.kts +++ b/compiler/frontend.java/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":core")) compile(project(":compiler:util")) diff --git a/compiler/frontend.script/build.gradle.kts b/compiler/frontend.script/build.gradle.kts index c64c03ed333..cb8923d78b3 100644 --- a/compiler/frontend.script/build.gradle.kts +++ b/compiler/frontend.script/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":compiler:util")) compile(project(":compiler:frontend")) diff --git a/compiler/frontend/build.gradle.kts b/compiler/frontend/build.gradle.kts index 22379e4a61e..f2cdcd5997b 100644 --- a/compiler/frontend/build.gradle.kts +++ b/compiler/frontend/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":core")) compile(project(":compiler:util")) diff --git a/compiler/incremental-compilation-impl/build.gradle.kts b/compiler/incremental-compilation-impl/build.gradle.kts index 96c4c35692b..dc1e0fb212f 100644 --- a/compiler/incremental-compilation-impl/build.gradle.kts +++ b/compiler/incremental-compilation-impl/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":core")) compile(project(":compiler:util")) diff --git a/compiler/ir/ir.ir2cfg/build.gradle.kts b/compiler/ir/ir.ir2cfg/build.gradle.kts index 80387dbfd4c..8a49d208449 100644 --- a/compiler/ir/ir.ir2cfg/build.gradle.kts +++ b/compiler/ir/ir.ir2cfg/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":compiler:util")) compile(project(":compiler:frontend")) diff --git a/compiler/ir/ir.psi2ir/build.gradle.kts b/compiler/ir/ir.psi2ir/build.gradle.kts index abf4f19f006..1c265351c6f 100644 --- a/compiler/ir/ir.psi2ir/build.gradle.kts +++ b/compiler/ir/ir.psi2ir/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":compiler:util")) compile(project(":compiler:frontend")) diff --git a/compiler/ir/ir.tree/build.gradle.kts b/compiler/ir/ir.tree/build.gradle.kts index 633b86d484d..8639a547868 100644 --- a/compiler/ir/ir.tree/build.gradle.kts +++ b/compiler/ir/ir.tree/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":compiler:util")) compile(project(":compiler:frontend")) diff --git a/compiler/light-classes/build.gradle.kts b/compiler/light-classes/build.gradle.kts index a62b78ae9ed..20fdb692fed 100644 --- a/compiler/light-classes/build.gradle.kts +++ b/compiler/light-classes/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":compiler:util")) compile(project(":compiler:backend")) diff --git a/compiler/plugin-api/build.gradle.kts b/compiler/plugin-api/build.gradle.kts index 07bb3aa08e4..e0deee681fa 100644 --- a/compiler/plugin-api/build.gradle.kts +++ b/compiler/plugin-api/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(ideaSdkCoreDeps("intellij-core")) compile(project(":compiler:util")) diff --git a/compiler/preloader/build.gradle.kts b/compiler/preloader/build.gradle.kts index 5fb17afa3d3..1079bf7962f 100644 --- a/compiler/preloader/build.gradle.kts +++ b/compiler/preloader/build.gradle.kts @@ -3,6 +3,8 @@ description = "Kotlin Preloader" apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { val compile by configurations compile(ideaSdkDeps("asm-all")) diff --git a/compiler/resolution/build.gradle.kts b/compiler/resolution/build.gradle.kts index fd01c671c0d..5b5190e30d6 100644 --- a/compiler/resolution/build.gradle.kts +++ b/compiler/resolution/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":compiler:util")) compile(project(":core")) diff --git a/compiler/serialization/build.gradle.kts b/compiler/serialization/build.gradle.kts index fd01c671c0d..5b5190e30d6 100644 --- a/compiler/serialization/build.gradle.kts +++ b/compiler/serialization/build.gradle.kts @@ -1,6 +1,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":compiler:util")) compile(project(":core")) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 1c9811c2ffa..522d80f1fc4 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -4,6 +4,8 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { val compile by configurations compile(project(":core:builtins")) diff --git a/core/builtins/build.gradle.kts b/core/builtins/build.gradle.kts index e86de579b82..ddb9f27b2ee 100644 --- a/core/builtins/build.gradle.kts +++ b/core/builtins/build.gradle.kts @@ -7,6 +7,8 @@ import java.io.File apply { plugin("kotlin") } +jvmTarget = "1.6" + val builtinsSrc = File(rootDir, "core", "builtins", "src") val builtinsNative = File(rootDir, "core", "builtins", "native") // TODO: rewrite dependent projects on using build results instead of the fixed location diff --git a/core/reflection.jvm/build.gradle.kts b/core/reflection.jvm/build.gradle.kts index 77ba0a23255..22218634aec 100644 --- a/core/reflection.jvm/build.gradle.kts +++ b/core/reflection.jvm/build.gradle.kts @@ -19,6 +19,8 @@ apply { plugin("com.github.johnrengelman.shadow") } +jvmTarget = "1.6" + dependencies { val compile by configurations compile(project(":core:builtins")) diff --git a/core/script.runtime/build.gradle.kts b/core/script.runtime/build.gradle.kts index 6819454f8c3..cd80316909d 100644 --- a/core/script.runtime/build.gradle.kts +++ b/core/script.runtime/build.gradle.kts @@ -3,6 +3,8 @@ import org.gradle.jvm.tasks.Jar apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { val compile by configurations compile(project(":core:builtins")) diff --git a/core/util.runtime/build.gradle.kts b/core/util.runtime/build.gradle.kts index 4f81d77fa9c..ad5a5cb9430 100644 --- a/core/util.runtime/build.gradle.kts +++ b/core/util.runtime/build.gradle.kts @@ -4,6 +4,8 @@ apply { plugin("kotlin") } +jvmTarget = "1.6" + dependencies { compile(project(":core:builtins")) compile(project(":kotlin-stdlib")) diff --git a/libraries/commonConfiguration.gradle b/libraries/commonConfiguration.gradle index c22be3b5216..04406cd9a6a 100644 --- a/libraries/commonConfiguration.gradle +++ b/libraries/commonConfiguration.gradle @@ -43,6 +43,9 @@ ext.configureJvmProject = { Project project -> ext.configureJvm6Project = { Project project -> project.configure(project) { + project.ext.jvmTarget = "1.6" + project.ext.javaHome = JDK_16 + task sourcesJar(type: Jar, dependsOn: classes) { classifier = 'sources' from sourceSets.main.kotlin diff --git a/libraries/stdlib/jre7/build.gradle b/libraries/stdlib/jre7/build.gradle index 9f5042e0699..587872e1979 100644 --- a/libraries/stdlib/jre7/build.gradle +++ b/libraries/stdlib/jre7/build.gradle @@ -4,6 +4,7 @@ apply plugin: 'kotlin' configureJvm6Project(project) configurePublishing(project) +ext.javaHome = JDK_17 dependencies { compile project(':kotlin-stdlib') diff --git a/libraries/stdlib/jre8/build.gradle b/libraries/stdlib/jre8/build.gradle index 17247385e03..99360fbcdcc 100644 --- a/libraries/stdlib/jre8/build.gradle +++ b/libraries/stdlib/jre8/build.gradle @@ -4,6 +4,7 @@ apply plugin: 'kotlin' configureJvm6Project(project) configurePublishing(project) +ext.javaHome = JDK_18 dependencies { compile project(':kotlin-stdlib')