diff --git a/build.gradle.kts b/build.gradle.kts index a18423763dd..c5b92332f9c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -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!!) diff --git a/buildSrc/src/main/kotlin/dependencies.kt b/buildSrc/src/main/kotlin/dependencies.kt index 50ee3688300..139733abc1d 100644 --- a/buildSrc/src/main/kotlin/dependencies.kt +++ b/buildSrc/src/main/kotlin/dependencies.kt @@ -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()) diff --git a/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts index 98021054c4b..c6bba6b061b 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts @@ -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") diff --git a/libraries/tools/kotlin-gradle-plugin-dsl-codegen/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-dsl-codegen/build.gradle.kts index 0f76de14378..0319564ac95 100644 --- a/libraries/tools/kotlin-gradle-plugin-dsl-codegen/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-dsl-codegen/build.gradle.kts @@ -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( diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts index ae6c5cbb03c..74ce3f993af 100644 --- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts @@ -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 } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt index 7cd6c5b22e9..00e932dc9fc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt @@ -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 = 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")}") } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index b139a42fa47..028522bf044 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -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)) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt index 179531d357f..a7dddf22842 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt @@ -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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index e8274853b87..a95c53e881b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -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) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt index f1dd4715899..88dab6e2f22 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt @@ -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 + diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt index 9652cba26ac..a1bc4d5b791 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt @@ -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) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt index d2cb59bc452..5220ebe2e6a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt @@ -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 { } } 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)) } }