[K/N] Fix build-tools project compilation

Add necessary subprojects and dependencies
Add OptIn annotation for experimental stdlib methods in 1.5
Fix compilation errors and cleanup
diff --git a/kotlin-native/build-tools/build.gradle.kts b/kotlin-native/build-tools/build.gradle.kts
index 4990093..f254986 100644
--- a/kotlin-native/build-tools/build.gradle.kts
+++ b/kotlin-native/build-tools/build.gradle.kts
@@ -52,22 +52,25 @@
 repositories {
     maven("https://cache-redirector.jetbrains.com/maven-central")
     mavenCentral()
+    gradlePluginPortal()
 }
 
 dependencies {
-    compileOnly(gradleApi())
+    api(gradleApi())
 
-    implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
-    implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
-    implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion")
+    api(kotlinStdlib())
+    implementation(project(":kotlin-gradle-plugin"))
+    implementation(project(":kotlin-reflect"))
+    implementation("org.jetbrains.kotlin:kotlin-build-gradle-plugin:${kotlinBuildProperties.buildGradlePluginVersion}")
+
     implementation("com.ullink.slack:simpleslackapi:$slackApiVersion") {
         exclude(group = "com.google.code.gson", module = "gson") // Workaround for Gradle dependency resolution error
     }
-    val versionPropertiesFile = project.rootProject.projectDir.resolve("gradle/versions.properties")
     val versionProperties = Properties()
-    versionPropertiesFile.inputStream().use { propInput ->
+    project.rootProject.projectDir.resolve("gradle/versions.properties").inputStream().use { propInput ->
         versionProperties.load(propInput)
     }
+    implementation(commonDependency("com.google.code.gson:gson"))
     configurations.all {
         resolutionStrategy.eachDependency {
             if (requested.group == "com.google.code.gson" && requested.name == "gson") {
@@ -82,12 +85,10 @@
     implementation("io.ktor:ktor-client-cio:$ktorVersion")
 
     api(project(":native:kotlin-native-utils"))
-
-    // Located in <repo root>/shared and always provided by the composite build.
-//    api("org.jetbrains.kotlin:kotlin-native-shared:$kotlinVersion")
-//    implementation("gradle.plugin.com.github.johnrengelman:shadow:$shadowVersion")
-//
-//    implementation("org.jetbrains.kotlinx:kotlinx-metadata-klib:$metadataVersion")
+    api(project(":kotlin-native:shared"))
+    api(project(":kotlinx-metadata-klib"))
+    api(project(":kotlin-util-klib"))
+    implementation("gradle.plugin.com.github.johnrengelman:shadow:${rootProject.extra["versions.shadow"]}")
 }
 
 sourceSets["main"].withConvention(KotlinSourceSet::class) {
@@ -98,8 +99,12 @@
 val compileGroovy: GroovyCompile by tasks
 
 compileKotlin.apply {
-    kotlinOptions.jvmTarget = "1.8"
-    kotlinOptions.freeCompilerArgs += "-Xskip-prerelease-check"
+    kotlinOptions {
+        languageVersion = "1.4"
+        apiVersion = "1.4"
+        jvmTarget = "1.8"
+        freeCompilerArgs += "-Xskip-prerelease-check"
+    }
 }
 
 // Add Kotlin classes to a classpath for the Groovy compiler
diff --git a/kotlin-native/build-tools/settings.gradle.kts b/kotlin-native/build-tools/settings.gradle.kts
index 0f14aff9..865f1d2 100644
--- a/kotlin-native/build-tools/settings.gradle.kts
+++ b/kotlin-native/build-tools/settings.gradle.kts
@@ -15,8 +15,4 @@
             }
         }
     }
-}
-
-rootProject.name = "kotlin-native-build-tools"
-
-includeBuild("../shared")
+}
\ No newline at end of file
diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/EndorsedLibraryInfo.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/EndorsedLibraryInfo.kt
index 02e722e..1c21ce4 100644
--- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/EndorsedLibraryInfo.kt
+++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/EndorsedLibraryInfo.kt
@@ -1,7 +1,7 @@
 package org.jetbrains.kotlin
 
 import org.gradle.api.Project
-
+@OptIn(ExperimentalStdlibApi::class)
 data class EndorsedLibraryInfo(val project: Project, val name: String) {
 
     val projectName: String
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 9149c32..8dfc934 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
@@ -10,8 +10,6 @@
 import org.gradle.api.Project
 import org.gradle.api.Task
 import org.gradle.api.tasks.*
-import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompileProgramTask
-import org.jetbrains.kotlin.gradle.plugin.tasks.KonanCompileTask
 import org.jetbrains.kotlin.konan.target.*
 import java.io.File
 import java.nio.file.Path
diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt
index 62fb0f7..9a436b4 100644
--- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt
+++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt
@@ -28,6 +28,7 @@
  * @property swiftSources  Swift-language test sources that use a given framework
  * @property frameworks names of frameworks
  */
+@OptIn(ExperimentalStdlibApi::class)
 open class FrameworkTest : DefaultTask(), KonanTestExecutable {
     @Input
     lateinit var swiftSources: List<String>
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 8c524c7..be7ccff 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
@@ -2,6 +2,7 @@
  * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
  * that can be found in the LICENSE file.
  */
+@file:OptIn(ExperimentalStdlibApi::class)
 
 package org.jetbrains.kotlin
 
diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/benchmark/BenchmarkingPlugin.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/benchmark/BenchmarkingPlugin.kt
index 5f84ca7..8743846 100644
--- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/benchmark/BenchmarkingPlugin.kt
+++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/benchmark/BenchmarkingPlugin.kt
@@ -209,6 +209,7 @@
     protected open fun Project.collectCodeSize(applicationName: String) =
             getCodeSizeBenchmark(applicationName, nativeExecutable)
 
+    @OptIn(ExperimentalStdlibApi::class)
     protected open fun Project.configureKonanJsonTask(nativeTarget: KotlinNativeTarget): Task {
         return tasks.create("konanJsonReport") {
             group = BENCHMARKING_GROUP
diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcode.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcode.kt
index b79636d..ac9cd51 100644
--- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcode.kt
+++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcode.kt
@@ -13,7 +13,6 @@
 import java.io.File
 import javax.inject.Inject
 import kotlinBuildProperties
-import isNativeRuntimeDebugInfoEnabled
 import org.gradle.api.Project
 import org.gradle.api.model.ObjectFactory
 import org.gradle.process.ExecOperations
@@ -133,7 +132,7 @@
     val compilerFlags: List<String>
         get() {
             val commonFlags = listOfNotNull(
-                    "-gdwarf-2".takeIf { project.kotlinBuildProperties.isNativeRuntimeDebugInfoEnabled },
+                    "-gdwarf-2".takeIf { project.kotlinBuildProperties.getBoolean("kotlin.native.isNativeRuntimeDebugInfoEnabled", false) },
                     "-c", "-emit-llvm") + headersDirs.map { "-I$it" }
             val sanitizerFlags = when (sanitizer) {
                 null -> listOf()
diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt
index 9eeafe2..1427bcd 100644
--- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt
+++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/bitcode/CompileToBitcodePlugin.kt
@@ -201,6 +201,7 @@
 
         private const val COMPILATION_DATABASE_TASK_NAME = "CompilationDatabase"
 
+        @OptIn(ExperimentalStdlibApi::class)
         private val String.capitalized: String
             get() = replaceFirstChar { it.uppercase() }
 
diff --git a/kotlin-native/shared/build.gradle.kts b/kotlin-native/shared/build.gradle.kts
index de15561..bf11d59 100644
--- a/kotlin-native/shared/build.gradle.kts
+++ b/kotlin-native/shared/build.gradle.kts
@@ -15,7 +15,6 @@
  */
 @file:Suppress("UnstableApiUsage")
 
-import org.jetbrains.kotlin.VersionGenerator
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
 
@@ -26,46 +25,31 @@
 val rootBuildDirectory by extra(file(".."))
 apply(from="../gradle/loadRootProperties.gradle")
 
-val konanVersion: String by extra
+val kotlinVersion = project.bootstrapKotlinVersion
 
 group = "org.jetbrains.kotlin"
-version = konanVersion
 
 repositories {
     maven("https://cache-redirector.jetbrains.com/maven-central")
     mavenCentral()
 }
 
-// FIXME(ddol): KLIB-REFACTORING-CLEANUP: drop generation of KonanVersion!
-val generateCompilerVersion by tasks.registering(VersionGenerator::class) {}
-
 sourceSets["main"].withConvention(KotlinSourceSet::class) {
     kotlin.srcDir("src/main/kotlin")
     kotlin.srcDir("src/library/kotlin")
-    kotlin.srcDir(generateCompilerVersion.get().versionSourceDirectory)
 }
 
 tasks.withType<KotlinCompile> {
-    dependsOn(generateCompilerVersion)
     kotlinOptions.jvmTarget = "1.8"
     kotlinOptions.freeCompilerArgs = listOf("-Xskip-prerelease-check")
 }
 
-tasks.clean {
-    doFirst {
-        val versionSourceDirectory = generateCompilerVersion.get().versionSourceDirectory
-        if (versionSourceDirectory.exists()) {
-            versionSourceDirectory.delete()
-        }
-    }
-}
-
 tasks.jar {
     archiveFileName.set("shared.jar")
 }
 
 dependencies {
-    kotlinCompilerClasspath("org.jetbrains.kotlin:kotlin-compiler-embeddable:${project.bootstrapKotlinVersion}")
+    kotlinCompilerClasspath("org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinVersion")
 
     implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
     implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion")
diff --git a/settings.gradle b/settings.gradle
index 0844348..6c828c0 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -806,4 +806,5 @@
     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'
 }