Use kotlin-native-shared in the Gradle plugin
The kotlin-native-shared artifact includes API allowing us to work with K/N platforms, hosts, distribution etc. This patch replaces a dependency on kotlin-native-utils containing copies of such classes with a dependency on published kotlin-native-shared in the Gradle plugin and bundles kotlin-native-shared into the Gradle plugin jar.
This commit is contained in:
@@ -157,6 +157,7 @@ extra["versions.org.springframework"] = "4.2.0.RELEASE"
|
||||
extra["versions.jflex"] = "1.7.0"
|
||||
extra["versions.markdown"] = "0.1.25"
|
||||
extra["versions.trove4j"] = "1.0.20181211"
|
||||
extra["versions.kotlin-native-shared"] = "1.0-dev-40"
|
||||
|
||||
if (!project.hasProperty("versions.kotlin-native")) {
|
||||
extra["versions.kotlin-native"] = "1.3-dev-9457"
|
||||
@@ -317,6 +318,7 @@ allprojects {
|
||||
maven(protobufRepo)
|
||||
maven(intellijRepo)
|
||||
maven(bootstrapKotlinRepo!!.replace("artifacts/content/maven/", "artifacts/content/internal/repo"))
|
||||
maven(kotlinNativeRepo)
|
||||
}
|
||||
|
||||
configureJvmProject(javaHome!!, jvmTarget!!)
|
||||
|
||||
@@ -99,7 +99,11 @@ val Project.protobufRepo: String
|
||||
fun Project.protobufLite(): String = "org.jetbrains.kotlin:protobuf-lite:$protobufVersion"
|
||||
fun Project.protobufFull(): String = "org.jetbrains.kotlin:protobuf-relocated:$protobufVersion"
|
||||
|
||||
val Project.kotlinNativeRepo: String
|
||||
get() = "https://jetbrains.bintray.com/kotlin-native-dependencies"
|
||||
|
||||
val Project.kotlinNativeVersion: String get() = property("versions.kotlin-native") as String
|
||||
val Project.kotlinNativeSharedVersion: String get() = property("versions.kotlin-native-shared") as String
|
||||
|
||||
fun File.matchMaybeVersionedArtifact(baseName: String) = name.matches(baseName.toMaybeVersionedJarRegex())
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ standardPublicJars()
|
||||
|
||||
dependencies {
|
||||
compile(kotlinStdlib())
|
||||
compile(project(":kotlin-native:kotlin-native-utils"))
|
||||
|
||||
compileOnly(gradleApi())
|
||||
compileOnly("com.android.tools.build:gradle:0.4.2")
|
||||
|
||||
@@ -7,7 +7,7 @@ plugins {
|
||||
dependencies {
|
||||
compile(gradleApi())
|
||||
compile(project(":kotlin-gradle-plugin-api"))
|
||||
compile(project(":kotlin-native:kotlin-native-utils"))
|
||||
compile(commonDep("org.jetbrains.kotlin:kotlin-native-shared")) { isTransitive = false }
|
||||
}
|
||||
|
||||
val generateMppTargetContainerWithPresets by generator(
|
||||
|
||||
@@ -37,7 +37,6 @@ dependencies {
|
||||
compileOnly(project(":compiler:daemon-common"))
|
||||
|
||||
compile(kotlinStdlib())
|
||||
compile(project(":kotlin-native:kotlin-native-utils"))
|
||||
compileOnly(project(":kotlin-reflect-api"))
|
||||
compileOnly(project(":kotlin-android-extensions"))
|
||||
compileOnly(project(":kotlin-build-common"))
|
||||
@@ -68,6 +67,10 @@ dependencies {
|
||||
jarContents(compileOnly(intellijDep()) {
|
||||
includeJars("asm-all", "serviceMessages", "gson", rootProject = rootProject)
|
||||
})
|
||||
|
||||
jarContents(compileOnly(commonDep("org.jetbrains.kotlin:kotlin-native-shared")) {
|
||||
isTransitive = false
|
||||
})
|
||||
|
||||
// com.android.tools.build:gradle has ~50 unneeded transitive dependencies
|
||||
compileOnly("com.android.tools.build:gradle:3.0.0") { isTransitive = false }
|
||||
|
||||
+7
-17
@@ -20,11 +20,11 @@ import org.gradle.api.Named
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.hostManager
|
||||
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
|
||||
import org.jetbrains.kotlin.konan.KonanVersion
|
||||
import org.jetbrains.kotlin.konan.target.HostManager
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import org.jetbrains.kotlin.konan.util.DependencyDirectories
|
||||
import org.jetbrains.kotlin.konan.target.*
|
||||
import org.jetbrains.kotlin.konan.util.DependencyProcessor
|
||||
import java.util.*
|
||||
|
||||
/** Copied from Kotlin/Native repository. */
|
||||
@@ -159,20 +159,10 @@ internal abstract class KonanCliRunner(
|
||||
internal class KonanInteropRunner(project: Project, additionalJvmArgs: List<String> = emptyList()) :
|
||||
KonanCliRunner("cinterop", "Kotlin/Native cinterop tool", project, additionalJvmArgs) {
|
||||
init {
|
||||
if (HostManager.host == KonanTarget.MINGW_X64) {
|
||||
// TODO: Read it from KonanDistribution when it is accessible.
|
||||
val konanProperties = Properties().apply {
|
||||
project.file("${project.konanHome}/konan/konan.properties").inputStream().use(::load)
|
||||
}
|
||||
val toolchainDir = konanProperties.getProperty("targetToolchain.mingw_x64")
|
||||
if (toolchainDir != null) {
|
||||
environment.put(
|
||||
"PATH",
|
||||
DependencyDirectories.defaultDependenciesRoot
|
||||
.resolve("$toolchainDir/bin")
|
||||
.absolutePath + ";${System.getenv("PATH")}"
|
||||
)
|
||||
}
|
||||
if (HostManager.hostIsMingw) {
|
||||
val distribution = Distribution(konanHomeOverride = project.konanHome)
|
||||
val llvmHome = PlatformManager(distribution).hostPlatform.absoluteLlvmHome
|
||||
environment.put("PATH", "$llvmHome/bin;${System.getenv("PATH")}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -31,7 +31,6 @@ import org.jetbrains.kotlin.gradle.scripting.internal.ScriptingGradleSubplugin
|
||||
import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild
|
||||
import org.jetbrains.kotlin.gradle.utils.checkGradleCompatibility
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import org.jetbrains.kotlin.konan.target.HostManager
|
||||
import org.jetbrains.kotlin.konan.target.presetName
|
||||
|
||||
class KotlinMultiplatformPlugin(
|
||||
@@ -138,7 +137,7 @@ class KotlinMultiplatformPlugin(
|
||||
add(KotlinJsTargetPreset(project, kotlinPluginVersion))
|
||||
add(KotlinAndroidTargetPreset(project, kotlinPluginVersion))
|
||||
add(KotlinJvmWithJavaTargetPreset(project, kotlinPluginVersion))
|
||||
HostManager().targets.forEach { _, target ->
|
||||
project.hostManager.targets.forEach { _, target ->
|
||||
add(KotlinNativeTargetPreset(target.presetName, project, target, kotlinPluginVersion))
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ class KotlinNativeTarget(
|
||||
get() = disambiguateName("binaries")
|
||||
|
||||
override val publishable: Boolean
|
||||
get() = konanTarget.enabledOnCurrentHost
|
||||
get() = enabledOnCurrentHost
|
||||
|
||||
// User-visible constants
|
||||
val DEBUG = NativeBuildType.DEBUG
|
||||
|
||||
+4
-4
@@ -58,7 +58,7 @@ open class KotlinNativeTargetConfigurator(
|
||||
producingTask: Task,
|
||||
copy: Boolean = false
|
||||
) {
|
||||
if (!compilation.target.konanTarget.enabledOnCurrentHost) {
|
||||
if (!compilation.target.enabledOnCurrentHost) {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ open class KotlinNativeTargetConfigurator(
|
||||
this.binary = binary
|
||||
group = BasePlugin.BUILD_GROUP
|
||||
description = "Links ${binary.outputKind.description} '${binary.name}' for a target '${target.name}'."
|
||||
enabled = target.konanTarget.enabledOnCurrentHost
|
||||
enabled = target.enabledOnCurrentHost
|
||||
destinationDir = binary.outputDirectory
|
||||
addCompilerPlugins()
|
||||
|
||||
@@ -171,7 +171,7 @@ open class KotlinNativeTargetConfigurator(
|
||||
group = BasePlugin.BUILD_GROUP
|
||||
description = "Compiles a klibrary from the '${compilation.name}' " +
|
||||
"compilation for target '${compilation.platformType.name}'."
|
||||
enabled = compilation.target.konanTarget.enabledOnCurrentHost
|
||||
enabled = compilation.target.enabledOnCurrentHost
|
||||
|
||||
destinationDir = klibOutputDirectory(compilation)
|
||||
addCompilerPlugins()
|
||||
@@ -202,7 +202,7 @@ open class KotlinNativeTargetConfigurator(
|
||||
description = "Generates Kotlin/Native interop library '${interop.name}' " +
|
||||
"for compilation '${compilation.name}'" +
|
||||
"of target '${konanTarget.name}'."
|
||||
enabled = compilation.target.konanTarget.enabledOnCurrentHost
|
||||
enabled = compilation.target.enabledOnCurrentHost
|
||||
|
||||
val interopOutput = project.files(outputFileProvider).builtBy(this)
|
||||
with(compilation) {
|
||||
|
||||
+13
-17
@@ -8,24 +8,16 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.Dependency
|
||||
import org.gradle.api.internal.file.FileResolver
|
||||
import org.gradle.api.plugins.JavaPlugin
|
||||
import org.gradle.internal.reflect.Instantiator
|
||||
import org.jetbrains.kotlin.compilerRunner.KotlinNativeProjectProperty
|
||||
import org.jetbrains.kotlin.compilerRunner.hasProperty
|
||||
import org.jetbrains.kotlin.compilerRunner.konanHome
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinNativeTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset
|
||||
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
|
||||
import org.jetbrains.kotlin.konan.KonanVersion
|
||||
import org.jetbrains.kotlin.konan.target.Distribution
|
||||
import org.jetbrains.kotlin.konan.target.HostManager
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
class KotlinNativeTargetPreset(
|
||||
private val name: String,
|
||||
@@ -93,9 +85,9 @@ class KotlinNativeTargetPreset(
|
||||
}
|
||||
}
|
||||
|
||||
if (!konanTarget.enabledOnCurrentHost) {
|
||||
with(HostManager()) {
|
||||
val supportedHosts = enabledTargetsByHost.filterValues { konanTarget in it }.keys
|
||||
if (!result.enabledOnCurrentHost) {
|
||||
with(project.hostManager) {
|
||||
val supportedHosts = this.enabledByHost.filterValues { konanTarget in it }.keys
|
||||
val supportedHostsString =
|
||||
if (supportedHosts.size == 1)
|
||||
"a ${supportedHosts.single()} host" else
|
||||
@@ -115,11 +107,15 @@ class KotlinNativeTargetPreset(
|
||||
}
|
||||
}
|
||||
|
||||
internal val Project.hostManager: HostManager
|
||||
get() = HostManager(Distribution(konanHomeOverride = konanHome))
|
||||
|
||||
internal val KonanTarget.isCurrentHost: Boolean
|
||||
get() = this == HostManager.host
|
||||
|
||||
internal val KonanTarget.enabledOnCurrentHost
|
||||
get() = HostManager().isEnabled(this)
|
||||
internal val KotlinNativeTarget.enabledOnCurrentHost
|
||||
get() = project.hostManager.isEnabled(konanTarget)
|
||||
|
||||
internal val KotlinNativeCompilation.isMainCompilation: Boolean
|
||||
get() = name == KotlinCompilation.MAIN_COMPILATION_NAME
|
||||
|
||||
|
||||
+3
-3
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.gradle.logging.kotlinInfo
|
||||
import org.jetbrains.kotlin.konan.KonanVersion
|
||||
import org.jetbrains.kotlin.konan.MetaVersion
|
||||
import org.jetbrains.kotlin.konan.target.HostManager
|
||||
import org.jetbrains.kotlin.konan.util.DependencyDirectories
|
||||
import org.jetbrains.kotlin.konan.util.DependencyProcessor
|
||||
import java.io.File
|
||||
|
||||
class NativeCompilerDownloader(
|
||||
@@ -34,7 +34,7 @@ class NativeCompilerDownloader(
|
||||
}
|
||||
|
||||
val compilerDirectory: File
|
||||
get() = DependencyDirectories.localKonanDir.resolve(dependencyNameWithVersion)
|
||||
get() = DependencyProcessor.localKonanDir.resolve(dependencyNameWithVersion)
|
||||
|
||||
private val logger: Logger
|
||||
get() = project.logger
|
||||
@@ -119,7 +119,7 @@ class NativeCompilerDownloader(
|
||||
logger.lifecycleWithDuration("Unpack Kotlin/Native compiler to $compilerDirectory finished,") {
|
||||
project.copy {
|
||||
it.from(archiveFileTree(archive))
|
||||
it.into(DependencyDirectories.localKonanDir)
|
||||
it.into(DependencyProcessor.localKonanDir)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.addExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.hostManager
|
||||
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
||||
import org.jetbrains.kotlin.gradle.tasks.*
|
||||
import org.jetbrains.kotlin.gradle.utils.asValidTaskName
|
||||
@@ -146,7 +147,7 @@ open class KotlinCocoapodsPlugin: Plugin<Project> {
|
||||
}
|
||||
} else {
|
||||
// A requested target doesn't require building a fat framework.
|
||||
createSyncForRegularFramework(project, kotlinExtension, requestedBuildType, HostManager().targetByName(requestedTargetName))
|
||||
createSyncForRegularFramework(project, kotlinExtension, requestedBuildType, project.hostManager.targetByName(requestedTargetName))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user