Make kotlin-native shared be included subproject
diff --git a/kotlin-native/build-tools/build.gradle.kts b/kotlin-native/build-tools/build.gradle.kts
index 54f5204..471e4f8 100644
--- a/kotlin-native/build-tools/build.gradle.kts
+++ b/kotlin-native/build-tools/build.gradle.kts
@@ -60,6 +60,8 @@
implementation("org.jetbrains.kotlin:kotlin-util-klib:${project.bootstrapKotlinVersion}")
implementation("org.jetbrains.kotlin:kotlin-native-utils:${project.bootstrapKotlinVersion}")
+
+ api(project(":kotlin-native-shared"))
}
java {
@@ -92,8 +94,6 @@
sourceSets {
main {
kotlin.srcDir("src/main/kotlin")
- kotlin.srcDir("../../kotlin-native/shared/src/library/kotlin")
- kotlin.srcDir("../../kotlin-native/shared/src/main/kotlin")
kotlin.srcDir("../../kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin")
}
}
diff --git a/kotlin-native/build-tools/gradle.properties b/kotlin-native/build-tools/gradle.properties
index a9400305..f665255 100644
--- a/kotlin-native/build-tools/gradle.properties
+++ b/kotlin-native/build-tools/gradle.properties
@@ -12,3 +12,5 @@
JDK_15_0,JDK_15,\
JDK_16_0,\
JDK_17_0
+
+kotlin.native.build.composite-bootstrap=true
\ No newline at end of file
diff --git a/kotlin-native/build-tools/settings.gradle.kts b/kotlin-native/build-tools/settings.gradle.kts
index d80b29a..bbdcd93 100644
--- a/kotlin-native/build-tools/settings.gradle.kts
+++ b/kotlin-native/build-tools/settings.gradle.kts
@@ -21,4 +21,18 @@
dependencies {
classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:$buildGradlePluginVersion")
}
-}
\ No newline at end of file
+}
+
+include(":kotlin-native-shared")
+project(":kotlin-native-shared").projectDir = File("$rootDir/../shared")
+
+// This code could potentially remove the need of bootstrapping code that use util-klib and util-io
+// by building them, but it's not possible right now, because they use buildSrc plugins (like JPS) and methods (like commonDependency).
+// This could be fixed by replacing the buildSrc with the composite build like build-tools, and splitting it to several parts.
+//include(":native:kotlin-native-utils")
+//include(":kotlin-util-klib")
+//include(":kotlin-util-io")
+
+//project(":native:kotlin-native-utils").projectDir = File("$rootDir/../../native/kotlin-native-utils")
+//project(":kotlin-util-klib").projectDir = File("$rootDir/../../compiler/util-klib")
+//project(":kotlin-util-io").projectDir = File("$rootDir/../../compiler/util-io")
diff --git a/kotlin-native/shared/build.gradle.kts b/kotlin-native/shared/build.gradle.kts
index 72c6503..c8fcc36 100644
--- a/kotlin-native/shared/build.gradle.kts
+++ b/kotlin-native/shared/build.gradle.kts
@@ -15,6 +15,7 @@
*/
@file:Suppress("UnstableApiUsage")
+import org.jetbrains.kotlin.gradle.plugin.extraProperties
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
@@ -24,8 +25,6 @@
val rootBuildDirectory by extra(file(".."))
apply(from = "../gradle/loadRootProperties.gradle")
-val kotlinVersion = project.bootstrapKotlinVersion
-
group = "org.jetbrains.kotlin"
repositories {
@@ -33,6 +32,12 @@
mavenCentral()
}
+java {
+ toolchain {
+ languageVersion.set(JavaLanguageVersion.of(8))
+ }
+}
+
kotlin {
sourceSets {
main {
@@ -47,20 +52,37 @@
kotlinOptions.freeCompilerArgs += listOf("-Xskip-prerelease-check")
}
-tasks.jar {
- archiveFileName.set("shared.jar")
-}
+// TODO: move it somewhere
+//projectTest(jUnitMode = JUnitMode.JUnit5) {
+// useJUnitPlatform()
+//}
-projectTest(jUnitMode = JUnitMode.JUnit5) {
- useJUnitPlatform()
+/**
+ * Depending on the `kotlin.native.build.composite-bootstrap` property returns either coordinates or project dependency.
+ * This is to use this project in composite build (build-tools) and as a project itself.
+ * Project should depend on a current snapshot builds while build-tools use bootstrap dependencies
+ */
+fun compositeDependency(coordinates: String, subproject: String = ""): Any {
+ val bootstrap = project.extraProperties.has("kotlin.native.build.composite-bootstrap")
+ val parts = coordinates.split(':')
+ check(parts.size == 3) {
+ "Full dependency coordinates should be specified group:name:version"
+ }
+ return if (!bootstrap) {
+ // returns dependency on the project specified with coordinates
+ dependencies.project("$subproject:${parts[1]}")
+ } else {
+ // returns full coordinates
+ coordinates
+ }
}
dependencies {
- kotlinCompilerClasspath("org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinVersion")
+ kotlinCompilerClasspath("org.jetbrains.kotlin:kotlin-compiler-embeddable:${project.bootstrapKotlinVersion}")
- implementation(kotlinStdlib())
- implementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false }
- api(project(":native:kotlin-native-utils"))
- api(project(":kotlin-util-klib"))
- testApiJUnit5()
+ implementation("org.jetbrains.kotlin:kotlin-stdlib:${project.bootstrapKotlinVersion}")
+ api(compositeDependency("org.jetbrains.kotlin:kotlin-native-utils:${project.bootstrapKotlinVersion}", ":native"))
+ api(compositeDependency("org.jetbrains.kotlin:kotlin-util-klib:${project.bootstrapKotlinVersion}"))
+ api(compositeDependency("org.jetbrains.kotlin:kotlin-util-io:${project.bootstrapKotlinVersion}"))
+// testApiJUnit5()
}
diff --git a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCacheTask.kt b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCacheTask.kt
index 0793b77..9d3dc3f 100644
--- a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCacheTask.kt
+++ b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/tasks/KonanCacheTask.kt
@@ -73,9 +73,11 @@
@TaskAction
fun compile() {
- check(klibUniqName == readKlibUniqNameFromManifest()) {
- "klibUniqName mismatch: configured '$klibUniqName', resolved '${readKlibUniqNameFromManifest()}'"
- }
+ // This code uses bootstrap version of util-klib and fails due to the older default ABI than library being used
+ // A possible solution is to read it manually from manifest file or this check should be done bu the compiler itself
+// check(klibUniqName == readKlibUniqNameFromManifest()) {
+// "klibUniqName mismatch: configured '$klibUniqName', resolved '${readKlibUniqNameFromManifest()}'"
+// }
// Compiler doesn't create a cache if the cacheFile already exists. So we need to remove it manually.
if (cacheFile.exists()) {