From 395e3e0f81dc55a18afa4ec86172a014bcac84f0 Mon Sep 17 00:00:00 2001 From: Pavel Punegov Date: Fri, 27 Jan 2023 18:06:56 +0100 Subject: [PATCH] [K/N][build] Composite build with build.tools-conventions plugin Adds convention plugin instead of sources inclusion inside the buildSrc, effectively reducing the amount of the code to be compiled in buildSrc. Merge-request: KT-MR-8898 --- build.gradle.kts | 3 + buildSrc/build.gradle.kts | 72 +---------- .../Interop/Indexer/build.gradle.kts | 3 +- .../Interop/Runtime/build.gradle.kts | 2 - kotlin-native/backend.native/build.gradle | 2 +- .../backend.native/tests/build.gradle | 15 ++- kotlin-native/build-tools/build.gradle.kts | 102 ++++++++++----- kotlin-native/build-tools/gradle.properties | 14 ++ kotlin-native/build-tools/settings.gradle.kts | 29 +++++ .../kotlin/org/jetbrains/kotlin/ExecClang.kt | 3 - .../org/jetbrains/kotlin/FileCheckTest.kt | 2 - .../jetbrains/kotlin/KonanTestExecutable.kt | 5 +- .../org/jetbrains/kotlin/KotlinNativeTest.kt | 1 - .../org/jetbrains/kotlin/LlvmCovReport.kt | 1 - .../org/jetbrains/kotlin/TestDirectives.kt | 1 - .../main/kotlin/org/jetbrains/kotlin/Utils.kt | 2 - .../jetbrains/kotlin/cpp/CppConsumerPlugin.kt | 1 - ....native.build-tools-conventions.gradle.kts | 0 .../testing/native/RuntimeTestingPlugin.kt | 1 - .../kotlin/org/jetbrains/kotlin/utils/DFS.kt | 121 ------------------ kotlin-native/build.gradle | 2 + kotlin-native/common/build.gradle.kts | 1 + .../kotlinx.cli/build.gradle.kts | 3 +- kotlin-native/klib/build.gradle | 4 +- kotlin-native/libclangext/build.gradle.kts | 12 +- kotlin-native/libllvmext/build.gradle.kts | 5 +- .../performance/buildSrc/build.gradle.kts | 4 +- .../internal/KotlinNativePlatform.kt | 88 ++++++------- .../kotlin/gradle/plugin/konan/KonanPlugin.kt | 2 +- settings.gradle | 2 +- 30 files changed, 190 insertions(+), 313 deletions(-) create mode 100644 kotlin-native/build-tools/gradle.properties create mode 100644 kotlin-native/build-tools/settings.gradle.kts create mode 100644 kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/kotlin.native.build-tools-conventions.gradle.kts delete mode 100644 kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/utils/DFS.kt diff --git a/build.gradle.kts b/build.gradle.kts index c473cf769e8..c13306b94ef 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -39,6 +39,9 @@ plugins { signing id("org.jetbrains.kotlin.jvm") apply false id("org.jetbrains.kotlin.plugin.serialization") apply false + if (kotlinBuildProperties.isKotlinNativeEnabled) { + id("kotlin.native.build-tools-conventions") apply false + } } pill { diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 418d18c7ddf..928f01cfc7d 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -30,7 +30,6 @@ apply { plugins { `kotlin-dsl` `java-gradle-plugin` - `groovy` id("org.jetbrains.kotlin.jvm") id("org.jetbrains.kotlin.plugin.sam.with.receiver") } @@ -84,18 +83,6 @@ java { } } -sourceSets["main"].withConvention(org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet::class) { - kotlin.srcDir("src/main/kotlin") - if (!kotlinBuildProperties.isInJpsBuildIdeaSync) { - kotlin.srcDir("../kotlin-native/shared/src/library/kotlin") - kotlin.srcDir("../kotlin-native/shared/src/main/kotlin") - kotlin.srcDir("../kotlin-native/build-tools/src/main/kotlin") - kotlin.srcDir("../kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin") - kotlin.srcDir("../compiler/util-klib/src") - kotlin.srcDir("../native/utils/src") - } -} - tasks.validatePlugins.configure { enabled = false } @@ -124,23 +111,13 @@ dependencies { compileOnly(gradleApi()) - val kotlinVersion = project.bootstrapKotlinVersion - val metadataVersion = "0.0.1-dev-10" - val coroutinesVersion = "1.5.0" - // See https://github.com/gradle/gradle/issues/22510 implementation("org.gradle.kotlin:gradle-kotlin-dsl-plugins:2.4.1") - implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") - implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion") - implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion") + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${project.bootstrapKotlinVersion}") + implementation("org.jetbrains.kotlin:kotlin-stdlib:${project.bootstrapKotlinVersion}") + implementation("org.jetbrains.kotlin:kotlin-reflect:${project.bootstrapKotlinVersion}") implementation("com.google.code.gson:gson:2.8.9") // Workaround for Gradle dependency resolution error - implementation("org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.6.0") - implementation("org.jetbrains.kotlinx:kotlinx-metadata-klib:$metadataVersion") - if (kotlinBuildProperties.isInJpsBuildIdeaSync) { - implementation("org.jetbrains.kotlin:kotlin-native-utils:${project.bootstrapKotlinVersion}") - } } samWithReceiver { @@ -161,58 +138,15 @@ tasks.withType().configureEach { } } -if (!kotlinBuildProperties.isInJpsBuildIdeaSync) { - sourceSets["main"].extensions - .getByType(GroovySourceDirectorySet::class.java) - .srcDir("../kotlin-native/build-tools/src/main/groovy") -} - -tasks.withType().configureEach { - classpath += project.files(compileKotlin.outputs) - dependsOn(compileKotlin) -} - allprojects { tasks.register("checkBuild") } gradlePlugin { plugins { - create("compileToBitcode") { - id = "compile-to-bitcode" - implementationClass = "org.jetbrains.kotlin.bitcode.CompileToBitcodePlugin" - } - create("runtimeTesting") { - id = "runtime-testing" - implementationClass = "org.jetbrains.kotlin.testing.native.RuntimeTestingPlugin" - } - create("compilationDatabase") { - id = "compilation-database" - implementationClass = "org.jetbrains.kotlin.cpp.CompilationDatabasePlugin" - } - create("konan") { - id = "konan" - implementationClass = "org.jetbrains.kotlin.gradle.plugin.konan.KonanPlugin" - } - // We bundle a shaded version of kotlinx-serialization plugin - create("kotlinx-serialization-native") { - id = "kotlinx-serialization-native" - implementationClass = "shadow.org.jetbrains.kotlinx.serialization.gradle.SerializationGradleSubplugin" - } - - create("org.jetbrains.kotlin.konan") { - id = "org.jetbrains.kotlin.konan" - implementationClass = "org.jetbrains.kotlin.gradle.plugin.konan.KonanPlugin" - } - create("native") { id = "native" implementationClass = "org.jetbrains.gradle.plugins.tools.NativePlugin" } - - create("native-interop-plugin") { - id = "native-interop-plugin" - implementationClass = "org.jetbrains.kotlin.NativeInteropPlugin" - } } } diff --git a/kotlin-native/Interop/Indexer/build.gradle.kts b/kotlin-native/Interop/Indexer/build.gradle.kts index ea450c020d0..d1d5adb3b14 100644 --- a/kotlin-native/Interop/Indexer/build.gradle.kts +++ b/kotlin-native/Interop/Indexer/build.gradle.kts @@ -24,7 +24,8 @@ import org.jetbrains.kotlin.konan.target.HostManager.Companion.hostIsMac plugins { `kotlin` - `native-interop-plugin` + id("kotlin.native.build-tools-conventions") + id("native-interop-plugin") `native` } diff --git a/kotlin-native/Interop/Runtime/build.gradle.kts b/kotlin-native/Interop/Runtime/build.gradle.kts index 4248aaa202e..38d799921f9 100644 --- a/kotlin-native/Interop/Runtime/build.gradle.kts +++ b/kotlin-native/Interop/Runtime/build.gradle.kts @@ -16,8 +16,6 @@ import org.jetbrains.gradle.plugins.tools.lib import org.jetbrains.gradle.plugins.tools.solib import org.jetbrains.kotlin.* -import org.jetbrains.kotlin.konan.target.HostManager -import java.io.ByteArrayOutputStream val kotlinVersion = project.bootstrapKotlinVersion plugins { diff --git a/kotlin-native/backend.native/build.gradle b/kotlin-native/backend.native/build.gradle index ff622d926fa..226df4422b7 100644 --- a/kotlin-native/backend.native/build.gradle +++ b/kotlin-native/backend.native/build.gradle @@ -13,7 +13,7 @@ buildscript { apply plugin: 'java' apply plugin: 'kotlin' -apply plugin: org.jetbrains.kotlin.NativeInteropPlugin +apply plugin: "native-interop-plugin" apply plugin: "maven-publish" apply plugin: CppConsumerPlugin diff --git a/kotlin-native/backend.native/tests/build.gradle b/kotlin-native/backend.native/tests/build.gradle index 7c2aba18a80..2d81c56bd95 100644 --- a/kotlin-native/backend.native/tests/build.gradle +++ b/kotlin-native/backend.native/tests/build.gradle @@ -21,17 +21,11 @@ buildscript { url project.bootstrapKotlinRepo } } - ext.useCustomDist = UtilsKt.getUseCustomDist(project) - ext.kotlinNativeDist = UtilsKt.getKotlinNativeDist(project) - if (!useCustomDist) { - ext.setProperty("kotlin.native.home", kotlinNativeDist.absolutePath) - ext.setProperty("org.jetbrains.kotlin.native.home", kotlinNativeDist.absolutePath) - ext.setProperty("konan.home", kotlinNativeDist.absolutePath) - } } apply plugin: 'konan' apply plugin: 'kotlin' +apply plugin: 'kotlin.native.build-tools-conventions' configurations { cli_bc @@ -56,6 +50,13 @@ ext.testLibraryDir = "${ext.testOutputRoot}/klib/platform/${project.target.name} // NOTE: If this persists in a gradle daemon, environment update (e.g. an Xcode update) may lead to execution failures. project.extensions.executor = ExecutorServiceKt.create(project) +ext.useCustomDist = UtilsKt.getUseCustomDist(project) +ext.kotlinNativeDist = UtilsKt.getKotlinNativeDist(project) +if (!useCustomDist) { + ext.setProperty("kotlin.native.home", kotlinNativeDist.absolutePath) + ext.setProperty("org.jetbrains.kotlin.native.home", kotlinNativeDist.absolutePath) + ext.setProperty("konan.home", kotlinNativeDist.absolutePath) +} compileTestKotlin { kotlinOptions { diff --git a/kotlin-native/build-tools/build.gradle.kts b/kotlin-native/build-tools/build.gradle.kts index b17cb5d003d..eafb3ab7c04 100644 --- a/kotlin-native/build-tools/build.gradle.kts +++ b/kotlin-native/build-tools/build.gradle.kts @@ -6,51 +6,44 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import java.util.Properties -plugins { - kotlin - groovy - id("org.gradle.kotlin.kotlin-dsl") - id("gradle-plugin-dependency-configuration") - id("org.jetbrains.kotlin.plugin.sam.with.receiver") -} - buildscript { val rootBuildDirectory by extra(project.file("../..")) - apply(from = rootBuildDirectory.resolve("kotlin-native/gradle/loadRootProperties.gradle")) + dependencies { - classpath(commonDependency("com.google.code.gson:gson")) + classpath("com.google.code.gson:gson:2.8.9") } } -val rootProperties = Properties().apply { - project(":kotlin-native").projectDir.resolve("gradle.properties").reader().use(::load) -} - -val kotlinVersion = project.bootstrapKotlinVersion -val metadataVersion: String by rootProperties - -group = "org.jetbrains.kotlin" -version = kotlinVersion - repositories { - maven("https://cache-redirector.jetbrains.com/maven-central") + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies") mavenCentral() gradlePluginPortal() } +plugins { + groovy + kotlin("jvm") + `kotlin-dsl` +} + dependencies { api(gradleApi()) - api(kotlinStdlib()) - implementation(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false } + api("org.jetbrains.kotlin:kotlin-stdlib:${project.bootstrapKotlinVersion}") + implementation("org.jetbrains.kotlin:kotlin-reflect:${project.bootstrapKotlinVersion}") { isTransitive = false } implementation("org.jetbrains.kotlin:kotlin-build-gradle-plugin:${kotlinBuildProperties.buildGradlePluginVersion}") + implementation("org.jetbrains.kotlin:kotlin-native-utils:${project.bootstrapKotlinVersion}") + + // To build Konan Gradle plugin + implementation("org.jetbrains.kotlin:kotlin-build-common:${project.bootstrapKotlinVersion}") + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${project.bootstrapKotlinVersion}") val versionProperties = Properties() - project.rootProject.projectDir.resolve("gradle/versions.properties").inputStream().use { propInput -> + project.rootProject.projectDir.resolve("../../gradle/versions.properties").inputStream().use { propInput -> versionProperties.load(propInput) } - implementation(commonDependency("com.google.code.gson:gson")) + implementation("com.google.code.gson:gson:2.8.9") configurations.all { resolutionStrategy.eachDependency { if (requested.group == "com.google.code.gson" && requested.name == "gson") { @@ -60,12 +53,18 @@ dependencies { } } - implementation(commonDependency("org.jetbrains.kotlinx:kotlinx-coroutines-core")) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0") + val metadataVersion = "0.0.1-dev-10" + implementation("org.jetbrains.kotlinx:kotlinx-metadata-klib:$metadataVersion") - implementation(commonDependency("org.jetbrains.kotlin:kotlin-native-utils:$kotlinVersion")) - implementation(commonDependency("org.jetbrains.kotlinx:kotlinx-metadata-klib:$metadataVersion")) + implementation("org.jetbrains.kotlin:kotlin-util-klib:${project.bootstrapKotlinVersion}") + implementation("org.jetbrains.kotlin:kotlin-native-utils:${project.bootstrapKotlinVersion}") +} - api(project(":kotlin-native-shared")) +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } } val compileKotlin: KotlinCompile by tasks @@ -73,11 +72,12 @@ val compileGroovy: GroovyCompile by tasks compileKotlin.apply { kotlinOptions { - jvmTarget = "1.8" freeCompilerArgs += listOf( "-Xskip-prerelease-check", "-Xsuppress-version-warnings", - "-opt-in=kotlin.ExperimentalStdlibApi") + "-opt-in=kotlin.ExperimentalStdlibApi", + "-opt-in=kotlin.RequiresOptIn" + ) } } @@ -86,3 +86,43 @@ compileGroovy.apply { classpath += project.files(compileKotlin.destinationDirectory) dependsOn(compileKotlin) } + +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") + } + } +} + +gradlePlugin { + plugins { + create("compileToBitcode") { + id = "compile-to-bitcode" + implementationClass = "org.jetbrains.kotlin.bitcode.CompileToBitcodePlugin" + } + create("runtimeTesting") { + id = "runtime-testing" + implementationClass = "org.jetbrains.kotlin.testing.native.RuntimeTestingPlugin" + } + create("compilationDatabase") { + id = "compilation-database" + implementationClass = "org.jetbrains.kotlin.cpp.CompilationDatabasePlugin" + } + create("konanPlugin") { + id = "konan" + implementationClass = "org.jetbrains.kotlin.gradle.plugin.konan.KonanPlugin" + } + create("native-interop-plugin") { + id = "native-interop-plugin" + implementationClass = "org.jetbrains.kotlin.NativeInteropPlugin" + } + create("native") { + id = "native" + implementationClass = "org.jetbrains.kotlin.tools.NativePlugin" + } + } +} diff --git a/kotlin-native/build-tools/gradle.properties b/kotlin-native/build-tools/gradle.properties new file mode 100644 index 00000000000..a9400305fd4 --- /dev/null +++ b/kotlin-native/build-tools/gradle.properties @@ -0,0 +1,14 @@ +cacheRedirectorEnabled=true +bootstrap.kotlin.default.version=1.8.20-dev-5197 +kotlin.build.gradlePlugin.version=0.0.39 + +org.gradle.java.installations.fromEnv=\ + JDK_1_6,JDK_16,\ + JDK_1_7,JDK_17,\ + JDK_1_8,JDK_18,\ + JDK_9_0,JDK_9,\ + JDK_10_0,JDK_10,\ + JDK_11_0,JDK_11,\ + JDK_15_0,JDK_15,\ + JDK_16_0,\ + JDK_17_0 diff --git a/kotlin-native/build-tools/settings.gradle.kts b/kotlin-native/build-tools/settings.gradle.kts new file mode 100644 index 00000000000..e93cc24905c --- /dev/null +++ b/kotlin-native/build-tools/settings.gradle.kts @@ -0,0 +1,29 @@ +rootProject.name = "build-tools" + +pluginManagement { + apply(from = "../../repo/scripts/cache-redirector.settings.gradle.kts") + apply(from = "../../repo/scripts/kotlin-bootstrap.settings.gradle.kts") + repositories { + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies") + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("jvm-toolchain-provisioning") + id("build-cache") +} + +buildscript { + repositories { + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies") + mavenCentral() + gradlePluginPortal() + } + + val buildGradlePluginVersion = extra["kotlin.build.gradlePlugin.version"] + dependencies { + classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:$buildGradlePluginVersion") + } +} \ No newline at end of file diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecClang.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecClang.kt index 71b437c4eca..f9b29f98964 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecClang.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecClang.kt @@ -20,14 +20,11 @@ import org.gradle.api.Action import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.internal.file.FileOperations -import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.model.ObjectFactory import org.gradle.process.ExecOperations import org.gradle.process.ExecResult import org.gradle.process.ExecSpec import org.jetbrains.kotlin.konan.target.* -import org.jetbrains.kotlin.konan.file.* -import org.jetbrains.kotlin.konan.file.File as KFile import java.io.File import javax.inject.Inject diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FileCheckTest.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FileCheckTest.kt index 8dfc93403f8..c8134966101 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FileCheckTest.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FileCheckTest.kt @@ -7,13 +7,11 @@ package org.jetbrains.kotlin import groovy.lang.Closure import org.gradle.api.DefaultTask -import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.tasks.* import org.jetbrains.kotlin.konan.target.* import java.io.File import java.nio.file.Path -import java.nio.file.Files /** * Gradle task that wraps FileCheck LLVM utility. diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/KonanTestExecutable.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/KonanTestExecutable.kt index 132b5767de1..2ea6207d10d 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/KonanTestExecutable.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/KonanTestExecutable.kt @@ -4,6 +4,7 @@ import org.gradle.api.Action import org.gradle.api.Task import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.Nested /** * An interface that any test that works with ExecutorService @@ -20,7 +21,7 @@ interface KonanTestExecutable : Task { * Action that configures task or does some workload before the test will be executed. * Could be done as a first step in the test or just as a `doFirst` action in the test task. */ - @get:Input + @get:Nested var doBeforeRun: Action? /** @@ -28,7 +29,7 @@ interface KonanTestExecutable : Task { * Depending on the test task implementation this action is done before the build task * or as its `doFirst` action. */ - @get:Input + @get:Nested var doBeforeBuild: Action? /** diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/KotlinNativeTest.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/KotlinNativeTest.kt index 35a70775fca..5187c4ee473 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/KotlinNativeTest.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/KotlinNativeTest.kt @@ -16,7 +16,6 @@ import org.gradle.language.base.plugins.LifecycleBasePlugin import org.gradle.process.ExecSpec import org.jetbrains.kotlin.konan.exec.Command import org.jetbrains.kotlin.konan.target.HostManager -import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.Family import org.jetbrains.kotlin.konan.target.LinkerOutputKind import java.io.ByteArrayOutputStream diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/LlvmCovReport.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/LlvmCovReport.kt index 04c3e7d8064..a870d80ff0a 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/LlvmCovReport.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/LlvmCovReport.kt @@ -1,6 +1,5 @@ package org.jetbrains.kotlin -import com.google.gson.* import com.google.gson.annotations.* diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/TestDirectives.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/TestDirectives.kt index 583deef3914..6a0bbc40830 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/TestDirectives.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/TestDirectives.kt @@ -9,7 +9,6 @@ import java.nio.file.Path import java.nio.file.Paths import java.util.regex.Matcher import java.util.regex.Pattern -import java.io.File private const val MODULE_DELIMITER = ",\\s*" // These patterns are copies from diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt index 19164ae53f9..cc789464e26 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/Utils.kt @@ -18,8 +18,6 @@ import org.jetbrains.kotlin.konan.properties.saveProperties import org.jetbrains.kotlin.konan.target.* import java.io.File import java.util.concurrent.TimeUnit -import java.net.HttpURLConnection -import java.net.URL import java.nio.file.Path import org.jetbrains.kotlin.konan.file.File as KFile import org.gradle.api.tasks.TaskProvider diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/cpp/CppConsumerPlugin.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/cpp/CppConsumerPlugin.kt index 35ef1bc6680..7e141a2a93d 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/cpp/CppConsumerPlugin.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/cpp/CppConsumerPlugin.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.cpp import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.api.attributes.Attribute import org.gradle.api.attributes.AttributeDisambiguationRule import org.gradle.api.attributes.MultipleCandidatesDetails import org.jetbrains.kotlin.bitcode.CompileToBitcodePlugin diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/kotlin.native.build-tools-conventions.gradle.kts b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/kotlin.native.build-tools-conventions.gradle.kts new file mode 100644 index 00000000000..e69de29bb2d diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/testing/native/RuntimeTestingPlugin.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/testing/native/RuntimeTestingPlugin.kt index 7e3c5ee9688..b29a143a1d4 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/testing/native/RuntimeTestingPlugin.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/testing/native/RuntimeTestingPlugin.kt @@ -13,7 +13,6 @@ import org.gradle.api.provider.Provider import org.gradle.api.tasks.TaskProvider import org.gradle.kotlin.dsl.getByType import org.jetbrains.kotlin.bitcode.CompileToBitcodeExtension -import org.jetbrains.kotlin.bitcode.CompileToBitcodePlugin import org.jetbrains.kotlin.resolve import java.io.File import java.net.URL diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/utils/DFS.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/utils/DFS.kt deleted file mode 100644 index 87438995b56..00000000000 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/utils/DFS.kt +++ /dev/null @@ -1,121 +0,0 @@ -package org.jetbrains.kotlin.utils - -import java.util.* - -// Copied from Kotlin org.jetbrains.kotlin.utils.DFS class -@Suppress("MemberVisibilityCanBePrivate", "MemberVisibilityCanBePrivate", "unused") -object DFS { - fun dfs(nodes: Collection, neighbors: Neighbors, visited: Visited, handler: NodeHandler): R { - for (node in nodes) { - doDfs(node, neighbors, visited, handler) - } - return handler.result() - } - - fun dfs( - nodes: Collection, - neighbors: Neighbors, - handler: NodeHandler - ): R { - return dfs(nodes, neighbors, VisitedWithSet(), handler) - } - - fun ifAny( - nodes: Collection, - neighbors: Neighbors, - predicate: Function1 - ): Boolean { - val result = BooleanArray(1) - return dfs(nodes, neighbors, object : AbstractNodeHandler() { - override fun beforeChildren(current: N): Boolean { - if (predicate.invoke(current)) { - result[0] = true - } - return !result[0] - } - - override fun result(): Boolean { - return result[0] - } - })!! - } - - fun dfsFromNode(node: N, neighbors: Neighbors, visited: Visited, handler: NodeHandler): R { - doDfs(node, neighbors, visited, handler) - return handler.result() - } - - fun dfsFromNode( - node: N, - neighbors: Neighbors, - visited: Visited - ) { - dfsFromNode(node, neighbors, visited, object : AbstractNodeHandler() { - override fun result(): Void? { - return null - } - }) - } - - fun topologicalOrder(nodes: Iterable, neighbors: Neighbors, visited: Visited): List { - val handler = TopologicalOrder() - for (node in nodes) { - doDfs(node, neighbors, visited, handler) - } - return handler.result() - } - - fun topologicalOrder(nodes: Iterable, neighbors: Neighbors): List { - return topologicalOrder(nodes, neighbors, VisitedWithSet()) - } - - fun doDfs(current: N, neighbors: Neighbors, visited: Visited, handler: NodeHandler) { - if (!visited.checkAndMarkVisited(current)) return - if (!handler.beforeChildren(current)) return - for (neighbor in neighbors.getNeighbors(current)) { - doDfs(neighbor, neighbors, visited, handler) - } - handler.afterChildren(current) - } - - interface NodeHandler { - fun beforeChildren(current: N): Boolean - fun afterChildren(current: N) - fun result(): R - } - - interface Neighbors { - fun getNeighbors(current: N): Iterable - } - - interface Visited { - fun checkAndMarkVisited(current: N): Boolean - } - - abstract class AbstractNodeHandler : NodeHandler { - override fun beforeChildren(current: N): Boolean { - return true - } - - override fun afterChildren(current: N) {} - } - - class VisitedWithSet @JvmOverloads constructor(private val visited: MutableSet = HashSet()) : Visited { - override fun checkAndMarkVisited(current: N): Boolean { - return visited.add(current) - } - } - - abstract class CollectingNodeHandler> protected constructor(protected val result: C) : AbstractNodeHandler() { - override fun result(): C { - return result - } - } - - abstract class NodeHandlerWithListResult protected constructor() : CollectingNodeHandler>(LinkedList()) - class TopologicalOrder : NodeHandlerWithListResult() { - override fun afterChildren(current: N) { - result.addFirst(current) - } - } -} \ No newline at end of file diff --git a/kotlin-native/build.gradle b/kotlin-native/build.gradle index 1b3dc52ac28..6ffb26fb2c6 100644 --- a/kotlin-native/build.gradle +++ b/kotlin-native/build.gradle @@ -50,6 +50,8 @@ if (isMac()) { checkXcodeVersion(project) } +apply plugin: "kotlin.native.build-tools-conventions" + ext { distDir = UtilsKt.getKotlinNativeDist(project) dependenciesDir = DependencyProcessor.defaultDependenciesRoot diff --git a/kotlin-native/common/build.gradle.kts b/kotlin-native/common/build.gradle.kts index 61af9206b62..a20286126a7 100644 --- a/kotlin-native/common/build.gradle.kts +++ b/kotlin-native/common/build.gradle.kts @@ -4,6 +4,7 @@ */ plugins { + id("kotlin.native.build-tools-conventions") id("compile-to-bitcode") } diff --git a/kotlin-native/endorsedLibraries/kotlinx.cli/build.gradle.kts b/kotlin-native/endorsedLibraries/kotlinx.cli/build.gradle.kts index 7dd0189890f..d1cf6861ae0 100644 --- a/kotlin-native/endorsedLibraries/kotlinx.cli/build.gradle.kts +++ b/kotlin-native/endorsedLibraries/kotlinx.cli/build.gradle.kts @@ -11,7 +11,8 @@ extra["org.jetbrains.kotlin.native.home"] = konanHome plugins { kotlin("multiplatform") - konan + id("kotlin.native.build-tools-conventions") + id("konan") } kotlin { diff --git a/kotlin-native/klib/build.gradle b/kotlin-native/klib/build.gradle index 273cbddb19f..95805bb9bda 100644 --- a/kotlin-native/klib/build.gradle +++ b/kotlin-native/klib/build.gradle @@ -6,13 +6,13 @@ import org.jetbrains.kotlin.UtilsKt buildscript { apply from: "$rootDir/kotlin-native/gradle/kotlinGradlePlugin.gradle" - - ext.useCustomDist = UtilsKt.getUseCustomDist(project) } apply plugin: 'kotlin' apply plugin: 'konan' +ext.useCustomDist = UtilsKt.getUseCustomDist(project) + konanArtifacts { def testFiles = fileTree('src/test/testData') { include "*.kt" diff --git a/kotlin-native/libclangext/build.gradle.kts b/kotlin-native/libclangext/build.gradle.kts index 3ff984f8b04..cf5e8d10a6b 100644 --- a/kotlin-native/libclangext/build.gradle.kts +++ b/kotlin-native/libclangext/build.gradle.kts @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import org.jetbrains.gradle.plugins.tools.lib -import org.jetbrains.kotlin.* -import org.jetbrains.kotlin.konan.target.Family.* -import java.io.ByteArrayOutputStream -plugins{ - `native` +import org.jetbrains.kotlin.tools.lib +import org.jetbrains.kotlin.* + +plugins { + id("kotlin.native.build-tools-conventions") + id("native") } val libclangextEnabled = org.jetbrains.kotlin.konan.target.HostManager.hostIsMac extra["isEnabled"] = libclangextEnabled diff --git a/kotlin-native/libllvmext/build.gradle.kts b/kotlin-native/libllvmext/build.gradle.kts index bb7f3e8919d..ef2ed20e9ed 100644 --- a/kotlin-native/libllvmext/build.gradle.kts +++ b/kotlin-native/libllvmext/build.gradle.kts @@ -14,14 +14,15 @@ * limitations under the License. */ -import org.jetbrains.gradle.plugins.tools.lib +import org.jetbrains.kotlin.tools.lib import org.jetbrains.kotlin.* import org.jetbrains.kotlin.konan.target.ClangArgs import org.jetbrains.kotlin.konan.target.Family.* import org.jetbrains.kotlin.konan.target.HostManager plugins { - `native` + id("kotlin.native.build-tools-conventions") + id("native") } native { diff --git a/kotlin-native/performance/buildSrc/build.gradle.kts b/kotlin-native/performance/buildSrc/build.gradle.kts index 6d3c3529ef1..221e677b6df 100644 --- a/kotlin-native/performance/buildSrc/build.gradle.kts +++ b/kotlin-native/performance/buildSrc/build.gradle.kts @@ -105,11 +105,11 @@ gradlePlugin { } create("compileToBitcode") { id = "compile-to-bitcode" - implementationClass = "org.jetbrains.kotlin.bitcode.CompileToBitcodePlugin" + implementationClass = "CompileToBitcodePlugin" } create("runtimeTesting") { id = "runtime-testing" - implementationClass = "org.jetbrains.kotlin.testing.native.RuntimeTestingPlugin" + implementationClass = "RuntimeTestingPlugin" } } } diff --git a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativePlatform.kt b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativePlatform.kt index 81b7a62339b..cb07af0c511 100644 --- a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativePlatform.kt +++ b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/experimental/internal/KotlinNativePlatform.kt @@ -18,11 +18,10 @@ import org.gradle.nativeplatform.TargetMachine import org.gradle.nativeplatform.TargetMachineFactory import org.gradle.nativeplatform.platform.NativePlatform import org.gradle.nativeplatform.platform.internal.* -import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.util.visibleName -interface KotlinNativePlatform: NativePlatform { +interface KotlinNativePlatform : NativePlatform { val target: KonanTarget } @@ -38,19 +37,18 @@ fun KonanTarget.getGradleCPU(): ArchitectureInternal = architecture.visibleName. Architectures.forInput(it) } -fun KonanTarget.toTargetMachine(objectFactory: ObjectFactory): TargetMachine = object: TargetMachine { +fun KonanTarget.toTargetMachine(objectFactory: ObjectFactory): TargetMachine = object : TargetMachine { override fun getOperatingSystemFamily(): OperatingSystemFamily = - getGradleOSFamily(objectFactory) + getGradleOSFamily(objectFactory) override fun getArchitecture(): MachineArchitecture = - objectFactory.named(MachineArchitecture::class.java, this@toTargetMachine.architecture.visibleName) + objectFactory.named(MachineArchitecture::class.java, this@toTargetMachine.architecture.visibleName) } -class DefaultKotlinNativePlatform(name: String, override val target: KonanTarget): +class DefaultKotlinNativePlatform(name: String, override val target: KonanTarget) : DefaultNativePlatform(name, target.getGradleOS(), target.getGradleCPU()), - KotlinNativePlatform -{ - constructor(target: KonanTarget): this(target.visibleName, target) + KotlinNativePlatform { + constructor(target: KonanTarget) : this(target.visibleName, target) // TODO: Extend ImmutableDefaultNativePlatform and get rid of these methods after switch to Gradle 4.8 private fun notImplemented(): Nothing = throw NotImplementedError("Not Implemented in Kotlin/Native plugin") @@ -62,50 +60,36 @@ class DefaultKotlinNativePlatform(name: String, override val target: KonanTarget // NativeVariantIdentity constructor was changed in Gradle 5.1 // So we have to use reflection to create instance of this class in earlier versions. internal fun compatibleVariantIdentity( - project: Project, - name: String, - baseName: Provider, - group: Provider, - version: Provider, - debuggable: Boolean, - optimized: Boolean, - target: KonanTarget, - linkUsage: UsageContext?, - runtimeUsage: UsageContext? + project: Project, + name: String, + baseName: Provider, + group: Provider, + version: Provider, + debuggable: Boolean, + optimized: Boolean, + target: KonanTarget, + linkUsage: UsageContext?, + runtimeUsage: UsageContext? ): NativeVariantIdentity = - if (isGradleVersionAtLeast(5, 1)) { - val targetMachineFactory = (project as ProjectInternal).services.get(TargetMachineFactory::class.java) - NativeVariantIdentity( - name, - baseName, - group, - version, - debuggable, - optimized, - targetMachineFactory.os(target.family.name), - linkUsage, - runtimeUsage - ) - } else { NativeVariantIdentity::class.java.getConstructor( - String::class.java, - Provider::class.java, - Provider::class.java, - Provider::class.java, - Boolean::class.javaPrimitiveType, - Boolean::class.javaPrimitiveType, - OperatingSystemFamily::class.java, - UsageContext::class.java, - UsageContext::class.java + String::class.java, + Provider::class.java, + Provider::class.java, + Provider::class.java, + Boolean::class.javaPrimitiveType, + Boolean::class.javaPrimitiveType, + OperatingSystemFamily::class.java, + UsageContext::class.java, + UsageContext::class.java ).newInstance( - name, - baseName, - group, - version, - debuggable, - optimized, - target.getGradleOSFamily(project.objects), - linkUsage, - runtimeUsage + name, + baseName, + group, + version, + debuggable, + optimized, + target.getGradleOSFamily(project.objects), + linkUsage, + runtimeUsage ) - } + diff --git a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt index bad3096ce5c..b20b89f1198 100644 --- a/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt +++ b/kotlin-native/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/konan/KonanPlugin.kt @@ -342,7 +342,7 @@ class KonanPlugin @Inject constructor(private val registry: ToolingModelBuilderR // If the JDK that was set is not available get the JDK 11 as a default service.launcherFor(object : Action { override fun execute(toolchainSpec: JavaToolchainSpec) { - toolchainSpec.languageVersion.set(JavaLanguageVersion.of(JdkMajorVersion.JDK_11_0.majorVersion)) + toolchainSpec.languageVersion.set(JavaLanguageVersion.of(11)) // FIXME: not resolved from buildSrc JdkMajorVersion.JDK_11_0.majorVersion)) } }).get() } diff --git a/settings.gradle b/settings.gradle index 801cab3605e..6dc4f1df0ac 100644 --- a/settings.gradle +++ b/settings.gradle @@ -788,6 +788,7 @@ project(':kotlin-scripting-ide-common').projectDir = "$rootDir/plugins/scripting // Uncomment to use locally built protobuf-relocated // includeBuild("dependencies/protobuf") if (buildProperties.isKotlinNativeEnabled) { + includeBuild("kotlin-native/build-tools") include ':kotlin-native:dependencies' include ':kotlin-native:endorsedLibraries:kotlinx.cli' include ':kotlin-native:endorsedLibraries' @@ -810,7 +811,6 @@ if (buildProperties.isKotlinNativeEnabled) { include ':kotlin-native:backend.native:tests' include ":kotlin-native-compiler-embeddable" project(":kotlin-native-compiler-embeddable").projectDir = "$rootDir/kotlin-native/prepare/kotlin-native-embeddable-compiler" as File - include ':kotlin-native:build-tools' include ':kotlin-native-shared' project(":kotlin-native-shared").projectDir = "$rootDir/kotlin-native/shared" as File }