Support experimental targets. (#2681)

This commit is contained in:
Nikolay Igotti
2019-02-19 14:23:00 +03:00
committed by GitHub
parent 8c13aade45
commit bf7040a119
11 changed files with 87 additions and 23 deletions
@@ -39,6 +39,9 @@ class Distribution(
val konanHome = findKonanHome()
val konanSubdir = "$konanHome/konan"
val mainPropertyFileName = "$konanSubdir/konan.properties"
val experimentalEnabled by lazy {
File("$konanSubdir/experimentalTargetsEnabled").exists
}
private fun propertyFilesFromConfigDir(configDir: String, genericName: String): List<File> {
val directory = File(configDir, "platforms/$genericName")
@@ -127,7 +127,7 @@ private class TargetManagerImpl(val userRequest: String?, val hostManager: HostM
override val targetSuffix get() = target.name
}
open class HostManager(protected val distribution: Distribution = Distribution()) {
open class HostManager(protected val distribution: Distribution = Distribution(), experimental: Boolean = false) {
fun targetManager(userRequest: String? = null): TargetManager = TargetManagerImpl(userRequest, this)
@@ -142,6 +142,8 @@ open class HostManager(protected val distribution: Distribution = Distribution()
private val zephyrSubtargets = distribution.availableSubTarget("zephyr").map { ZEPHYR(it) }
private val experimentalEnabled = experimental || distribution.experimentalEnabled
private val configurableSubtargets = zephyrSubtargets
val targetValues: List<KonanTarget> by lazy {
@@ -171,7 +173,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
return target
}
val enabled: List<KonanTarget> by lazy {
val enabledRegular: List<KonanTarget> by lazy {
when (host) {
KonanTarget.LINUX_X64 -> listOf(
KonanTarget.LINUX_X64,
@@ -181,7 +183,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
KonanTarget.ANDROID_ARM32,
KonanTarget.ANDROID_ARM64,
KonanTarget.WASM32
) + zephyrSubtargets
)
KonanTarget.MINGW_X64 -> listOf(
KonanTarget.MINGW_X64,
KonanTarget.MINGW_X86,
@@ -191,7 +193,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
// TODO: toolchain to be fixed for that to work.
// KonanTarget.ANDROID_ARM64,
KonanTarget.WASM32
) + zephyrSubtargets
)
KonanTarget.MACOS_X64 -> listOf(
KonanTarget.MACOS_X64,
KonanTarget.IOS_ARM32,
@@ -202,12 +204,29 @@ open class HostManager(protected val distribution: Distribution = Distribution()
KonanTarget.ANDROID_ARM32,
KonanTarget.ANDROID_ARM64,
KonanTarget.WASM32
) + zephyrSubtargets
)
else ->
throw TargetSupportException("Unknown host platform: $host")
}
}
val enabledExperimental: List<KonanTarget> by lazy {
when (host) {
KonanTarget.LINUX_X64 -> listOf(
KonanTarget.MINGW_X86, KonanTarget.MINGW_X64
) + zephyrSubtargets
KonanTarget.MACOS_X64 -> listOf(
KonanTarget.MINGW_X86, KonanTarget.MINGW_X64
) + zephyrSubtargets
KonanTarget.MINGW_X64 -> listOf<KonanTarget>(
) + zephyrSubtargets
else -> throw TargetSupportException("Unknown host platform: $host")
}
}
val enabled : List<KonanTarget>
get() = if (experimentalEnabled) enabledRegular + enabledExperimental else enabledRegular
fun isEnabled(target: KonanTarget) = enabled.contains(target)
companion object {
@@ -303,7 +303,10 @@ open class MingwLinker(targetProperties: MingwConfigurables)
return staticGnuArCommands(ar, executable, objectFiles, libraries)
val dynamic = kind == LinkerOutputKind.DYNAMIC_LIBRARY
return listOf(Command(linker).apply {
return return listOf(when {
HostManager.hostIsMingw -> Command(linker)
else -> Command("wine64", "$linker.exe")
}.apply {
+listOf("-o", executable)
+objectFiles
if (optimize) +linkerOptimizationFlags
@@ -29,7 +29,8 @@ class Platform(val configurables: Configurables)
}
}
class PlatformManager(distribution: Distribution = Distribution()) : HostManager(distribution) {
class PlatformManager(distribution: Distribution = Distribution(), experimental: Boolean = false) :
HostManager(distribution, experimental) {
private val loaders = enabled.map {
it to loadConfigurables(it, distribution.properties, DependencyProcessor.defaultDependenciesRoot.absolutePath)