diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/klib/KlibInfoProvider.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/klib/KlibInfoProvider.kt index 4f2cb568e9c..494148e9f7b 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/klib/KlibInfoProvider.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/klib/KlibInfoProvider.kt @@ -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 ) } diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/Distribution.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/Distribution.kt index 5245f66ee9e..2c22e4c53a0 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/Distribution.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/Distribution.kt @@ -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) \ No newline at end of file +fun customerDistribution(konanHome: String) = Distribution(konanHome,false, null) \ No newline at end of file diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt index b670c89381a..f0c887d2cea 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt @@ -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 by lazy { KonanTarget.predefinedTargets.values + configurableSubtargets } @@ -93,7 +101,7 @@ open class HostManager(protected val distribution: Distribution = Distribution() val enabledByHost: Map> 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 - get() = if (experimentalEnabled) enabledRegular + enabledExperimental else enabledRegular + get() = if (experimental) enabledRegular + enabledExperimental else enabledRegular fun isEnabled(target: KonanTarget) = enabled.contains(target) diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/SubTargetProvider.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/SubTargetProvider.kt new file mode 100644 index 00000000000..62a1df4af9a --- /dev/null +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/SubTargetProvider.kt @@ -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 + + object NoSubTargets : SubTargetProvider { + override fun availableSubTarget(genericName: String): List = emptyList() + } +} \ No newline at end of file