[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:
@@ -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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user