Support experimental targets. (#2681)
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user