diff --git a/kotlin-native/build-tools/build.gradle.kts b/kotlin-native/build-tools/build.gradle.kts index eafb3ab7c04..1e385ab181c 100644 --- a/kotlin-native/build-tools/build.gradle.kts +++ b/kotlin-native/build-tools/build.gradle.kts @@ -59,6 +59,8 @@ dependencies { implementation("org.jetbrains.kotlin:kotlin-util-klib:${project.bootstrapKotlinVersion}") implementation("org.jetbrains.kotlin:kotlin-native-utils:${project.bootstrapKotlinVersion}") + + api(project(":kotlin-native-shared")) } java { @@ -91,8 +93,6 @@ kotlin { 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 a9400305fd4..f66525572dd 100644 --- a/kotlin-native/build-tools/gradle.properties +++ b/kotlin-native/build-tools/gradle.properties @@ -12,3 +12,5 @@ org.gradle.java.installations.fromEnv=\ 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 e93cc24905c..3bac69d298d 100644 --- a/kotlin-native/build-tools/settings.gradle.kts +++ b/kotlin-native/build-tools/settings.gradle.kts @@ -26,4 +26,18 @@ buildscript { 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 72c65031634..c8fcc36b5e8 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 @@ plugins { val rootBuildDirectory by extra(file("..")) apply(from = "../gradle/loadRootProperties.gradle") -val kotlinVersion = project.bootstrapKotlinVersion - group = "org.jetbrains.kotlin" repositories { @@ -33,6 +32,12 @@ repositories { mavenCentral() } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} + kotlin { sourceSets { main { @@ -47,20 +52,37 @@ tasks.withType().configureEach { 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 0793b77d9a0..9d3dc3faf7f 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 @@ open class KonanCacheTask: DefaultTask() { @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()) {