[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:
+1
-1
@@ -33,7 +33,7 @@ class KlibInfoProvider(kotlinNativeHome: File) {
|
|||||||
|
|
||||||
private val hostManager by lazy {
|
private val hostManager by lazy {
|
||||||
HostManager(
|
HostManager(
|
||||||
distribution = Distribution(konanHomeOverride = kotlinNativeHome.path),
|
distribution = Distribution(kotlinNativeHome.path),
|
||||||
experimental = true
|
experimental = true
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,22 +13,13 @@ import org.jetbrains.kotlin.konan.util.DependencyDirectories
|
|||||||
import org.jetbrains.kotlin.konan.util.visibleName
|
import org.jetbrains.kotlin.konan.util.visibleName
|
||||||
|
|
||||||
class Distribution(
|
class Distribution(
|
||||||
private val onlyDefaultProfiles: Boolean = false,
|
val konanHome: String,
|
||||||
private val konanHomeOverride: String? = null,
|
private val onlyDefaultProfiles: Boolean = false,
|
||||||
private val runtimeFileOverride: String? = null
|
private val runtimeFileOverride: String? = null
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val localKonanDir = DependencyDirectories.localKonanDir
|
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 konanSubdir = "$konanHome/konan"
|
||||||
val mainPropertyFileName = "$konanSubdir/konan.properties"
|
val mainPropertyFileName = "$konanSubdir/konan.properties"
|
||||||
val experimentalEnabled by lazy {
|
val experimentalEnabled by lazy {
|
||||||
@@ -99,10 +90,13 @@ class Distribution(
|
|||||||
|
|
||||||
val dependenciesDir = DependencyDirectories.defaultDependenciesRoot.absolutePath
|
val dependenciesDir = DependencyDirectories.defaultDependenciesRoot.absolutePath
|
||||||
|
|
||||||
fun availableSubTarget(genericName: String) =
|
val subTargetProvider = object: SubTargetProvider {
|
||||||
additionalPropertyFiles(genericName).map { it.name }
|
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 org.jetbrains.kotlin.konan.target.KonanTarget.*
|
||||||
import java.lang.Exception
|
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)
|
fun targetManager(userRequest: String? = null): TargetManager = TargetManagerImpl(userRequest, this)
|
||||||
|
|
||||||
private val zephyrSubtargets = distribution.availableSubTarget("zephyr").map { ZEPHYR(it) }
|
private val zephyrSubtargets = subTargetProvider.availableSubTarget("zephyr").map { ZEPHYR(it) }
|
||||||
private val experimentalEnabled = experimental || distribution.experimentalEnabled
|
|
||||||
private val configurableSubtargets = zephyrSubtargets
|
private val configurableSubtargets = zephyrSubtargets
|
||||||
|
|
||||||
val targetValues: List<KonanTarget> by lazy { KonanTarget.predefinedTargets.values + configurableSubtargets }
|
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 enabledByHost: Map<KonanTarget, Set<KonanTarget>> by lazy {
|
||||||
val result = enabledRegularByHost.toMutableMap()
|
val result = enabledRegularByHost.toMutableMap()
|
||||||
if (experimentalEnabled) {
|
if (experimental) {
|
||||||
enabledExperimentalByHost.forEach { (k, v) ->
|
enabledExperimentalByHost.forEach { (k, v) ->
|
||||||
result.merge(k, v) { old, new -> old + new }
|
result.merge(k, v) { old, new -> old + new }
|
||||||
}
|
}
|
||||||
@@ -110,7 +118,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
|
|||||||
}
|
}
|
||||||
|
|
||||||
val enabled : List<KonanTarget>
|
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)
|
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