[Native] Don't use konan.home to determine a path to the K/N dist

A fix for KT-37550 requires us to stop using system properties when
the compiler is started from Gradle. This patch stops reading the
konan.home property to determine a path to the compiler and requires
this path to be explicitly specified in a constructor of the
Distribution class.

Issue #KT-37550
This commit is contained in:
Ilya Matveev
2020-05-07 14:04:44 +07:00
parent 8e3a62e5fd
commit 5287ffb4a5
4 changed files with 38 additions and 22 deletions
@@ -33,7 +33,7 @@ class KlibInfoProvider(kotlinNativeHome: File) {
private val hostManager by lazy {
HostManager(
distribution = Distribution(konanHomeOverride = kotlinNativeHome.path),
distribution = Distribution(kotlinNativeHome.path),
experimental = true
)
}
@@ -13,22 +13,13 @@ import org.jetbrains.kotlin.konan.util.DependencyDirectories
import org.jetbrains.kotlin.konan.util.visibleName
class Distribution(
private val onlyDefaultProfiles: Boolean = false,
private val konanHomeOverride: String? = null,
private val runtimeFileOverride: String? = null
val konanHome: String,
private val onlyDefaultProfiles: Boolean = false,
private val runtimeFileOverride: String? = null
) {
val localKonanDir = DependencyDirectories.localKonanDir
private fun findKonanHome(): String {
if (konanHomeOverride != null) return konanHomeOverride
val value = System.getProperty("konan.home", "dist")
val path = File(value).absolutePath
return path
}
val konanHome = findKonanHome()
val konanSubdir = "$konanHome/konan"
val mainPropertyFileName = "$konanSubdir/konan.properties"
val experimentalEnabled by lazy {
@@ -99,10 +90,13 @@ class Distribution(
val dependenciesDir = DependencyDirectories.defaultDependenciesRoot.absolutePath
fun availableSubTarget(genericName: String) =
additionalPropertyFiles(genericName).map { it.name }
val subTargetProvider = object: SubTargetProvider {
override fun availableSubTarget(genericName: String) =
additionalPropertyFiles(genericName).map { it.name }
}
}
fun buildDistribution(konanHomeOverride: String? = null) = Distribution(true, konanHomeOverride, null)
// TODO: Move into K/N?
fun buildDistribution(konanHome: String) = Distribution(konanHome,true, null)
fun customerDistribution(konanHomeOverride: String? = null) = Distribution(false, konanHomeOverride, null)
fun customerDistribution(konanHome: String) = Distribution(konanHome,false, null)
@@ -8,12 +8,20 @@ package org.jetbrains.kotlin.konan.target
import org.jetbrains.kotlin.konan.target.KonanTarget.*
import java.lang.Exception
open class HostManager(protected val distribution: Distribution = Distribution(), experimental: Boolean = false) {
// TODO: Consider redesigning experimental targets support (e.g. by getting rid of such separation at all).
open class HostManager(
subTargetProvider: SubTargetProvider = SubTargetProvider.NoSubTargets,
private val experimental: Boolean = false
) {
constructor(
distribution: Distribution,
experimental: Boolean = false,
) : this(distribution.subTargetProvider, experimental || distribution.experimentalEnabled)
fun targetManager(userRequest: String? = null): TargetManager = TargetManagerImpl(userRequest, this)
private val zephyrSubtargets = distribution.availableSubTarget("zephyr").map { ZEPHYR(it) }
private val experimentalEnabled = experimental || distribution.experimentalEnabled
private val zephyrSubtargets = subTargetProvider.availableSubTarget("zephyr").map { ZEPHYR(it) }
private val configurableSubtargets = zephyrSubtargets
val targetValues: List<KonanTarget> by lazy { KonanTarget.predefinedTargets.values + configurableSubtargets }
@@ -93,7 +101,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
val enabledByHost: Map<KonanTarget, Set<KonanTarget>> by lazy {
val result = enabledRegularByHost.toMutableMap()
if (experimentalEnabled) {
if (experimental) {
enabledExperimentalByHost.forEach { (k, v) ->
result.merge(k, v) { old, new -> old + new }
}
@@ -110,7 +118,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
}
val enabled : List<KonanTarget>
get() = if (experimentalEnabled) enabledRegular + enabledExperimental else enabledRegular
get() = if (experimental) enabledRegular + enabledExperimental else enabledRegular
fun isEnabled(target: KonanTarget) = enabled.contains(target)
@@ -0,0 +1,14 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.konan.target
interface SubTargetProvider {
fun availableSubTarget(genericName: String): List<String>
object NoSubTargets : SubTargetProvider {
override fun availableSubTarget(genericName: String): List<String> = emptyList()
}
}