diff --git a/buildSrc/src/main/kotlin/dependencies.kt b/buildSrc/src/main/kotlin/dependencies.kt index 281c15528a4..c2dc1d2880e 100644 --- a/buildSrc/src/main/kotlin/dependencies.kt +++ b/buildSrc/src/main/kotlin/dependencies.kt @@ -1,3 +1,8 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + @file:Suppress("unused") // usages in build scripts are not tracked properly @@ -97,9 +102,11 @@ fun Project.kotlinStdlib(suffix: String? = null, classifier: String? = null): An dependencies.project(listOfNotNull(":kotlin-stdlib", suffix).joinToString("-"), classifier) } -fun Project.kotlinBuiltins(): Any = +fun Project.kotlinBuiltins(): Any = kotlinBuiltins(forJvm = false) + +fun Project.kotlinBuiltins(forJvm: Boolean): Any = if (kotlinBuildProperties.useBootstrapStdlib) "org.jetbrains.kotlin:builtins:$bootstrapKotlinVersion" - else dependencies.project(":core:builtins") + else dependencies.project(":core:builtins", configuration = "runtimeElementsJvm".takeIf { forJvm }) fun DependencyHandler.projectTests(name: String): ProjectDependency = project(name, configuration = "tests-jar") fun DependencyHandler.projectRuntimeJar(name: String): ProjectDependency = project(name, configuration = "runtimeJar") diff --git a/core/builtins/build.gradle.kts b/core/builtins/build.gradle.kts index a0373902991..642825a4c90 100644 --- a/core/builtins/build.gradle.kts +++ b/core/builtins/build.gradle.kts @@ -11,6 +11,7 @@ val builtinsNative = fileFrom(rootDir, "core", "builtins", "native") val kotlinReflectCommon = fileFrom(rootDir, "libraries/stdlib/src/kotlin/reflect/") val kotlinReflectJvm = fileFrom(rootDir, "libraries/stdlib/jvm/src/kotlin/reflect") val builtinsCherryPicked = fileFrom(buildDir, "src") +val builtinsCherryPickedJvm = fileFrom(buildDir, "src-jvm") val runtimeElements by configurations.creating { isCanBeResolved = false @@ -20,7 +21,24 @@ val runtimeElements by configurations.creating { } } +val runtimeElementsJvm by configurations.creating { + isCanBeResolved = false + isCanBeConsumed = true + attributes { + attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR)) + attribute(Attribute.of("builtins.platform", String::class.java), "JVM") + } +} + val prepareSources by tasks.registering(Sync::class) { + from(kotlinReflectCommon) { + exclude("typeOf.kt") + exclude("KClasses.kt") + } + into(builtinsCherryPicked) +} + +val prepareSourcesJvm by tasks.registering(Sync::class) { from(kotlinReflectJvm) { exclude("TypesJVM.kt") exclude("KClassesImpl.kt") @@ -31,26 +49,29 @@ val prepareSources by tasks.registering(Sync::class) { include("KTypeParameter.kt") include("KVariance.kt") } - into(builtinsCherryPicked) + into(builtinsCherryPickedJvm) } -val serialize by tasks.registering(NoDebugJavaExec::class) { - dependsOn(prepareSources) - val outDir = buildDir.resolve(name) - val inDirs = arrayOf(builtinsSrc, builtinsNative, builtinsCherryPicked) - inDirs.forEach { inputs.dir(it).withPathSensitivity(RELATIVE) } +fun serializeTask(name: String, sourcesTask: TaskProvider<*>, inDirs: List) = + tasks.register(name, NoDebugJavaExec::class) { + dependsOn(sourcesTask) + val outDir = buildDir.resolve(this.name) + inDirs.forEach { inputs.dir(it).withPathSensitivity(RELATIVE) } + outputs.dir(outDir) + outputs.cacheIf { true } - outputs.dir(outDir) - outputs.cacheIf { true } + classpath(rootProject.buildscript.configurations["bootstrapCompilerClasspath"]) + main = "org.jetbrains.kotlin.serialization.builtins.RunKt" + jvmArgs("-Didea.io.use.nio2=true") + args( + pathRelativeToWorkingDir(outDir), + *inDirs.map(::pathRelativeToWorkingDir).toTypedArray() + ) + } - classpath(rootProject.buildscript.configurations["bootstrapCompilerClasspath"]) - main = "org.jetbrains.kotlin.serialization.builtins.RunKt" - jvmArgs("-Didea.io.use.nio2=true") - args( - pathRelativeToWorkingDir(outDir), - *inDirs.map(::pathRelativeToWorkingDir).toTypedArray() - ) -} +val serialize = serializeTask("serialize", prepareSources, listOf(builtinsSrc, builtinsNative, builtinsCherryPicked)) + +val serializeJvm = serializeTask("serializeJvm", prepareSourcesJvm, listOf(builtinsSrc, builtinsNative, builtinsCherryPickedJvm)) val builtinsJar by task { dependsOn(serialize) @@ -58,11 +79,20 @@ val builtinsJar by task { destinationDir = File(buildDir, "libs") } +val builtinsJvmJar by task { + dependsOn(serializeJvm) + from(serializeJvm) { include("kotlin/**") } + archiveClassifier.set("jvm") + destinationDir = File(buildDir, "libs") +} + val assemble by tasks.getting { dependsOn(serialize) + dependsOn(serializeJvm) } val builtinsJarArtifact = artifacts.add(runtimeElements.name, builtinsJar) +artifacts.add(runtimeElementsJvm.name, builtinsJvmJar) publishing { publications { diff --git a/prepare/idea-plugin/build.gradle.kts b/prepare/idea-plugin/build.gradle.kts index 1cda44e5edf..e31dd2914dc 100644 --- a/prepare/idea-plugin/build.gradle.kts +++ b/prepare/idea-plugin/build.gradle.kts @@ -161,7 +161,7 @@ dependencies { embedded(project(it)) { isTransitive = false } } embedded(protobufFull()) - embedded(kotlinBuiltins()) + embedded(kotlinBuiltins(forJvm = true)) libraries(commonDep("org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:${property("versions.kotlinx-collections-immutable")}")) libraries(commonDep("javax.inject"))