Moved KonanTarget to be a sealed class rather than enum.

This commit is contained in:
Alexander Gorshenev
2018-01-29 14:51:04 +03:00
committed by alexander-gorshenev
parent 8324bb67f5
commit a5bc23d706
6 changed files with 42 additions and 26 deletions
+4 -5
View File
@@ -17,7 +17,6 @@ import groovy.io.FileType
import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.properties.*
import org.jetbrains.kotlin.konan.util.*
import static org.jetbrains.kotlin.konan.util.VisibleNamedKt.*
defaultTasks 'clean', 'dist'
@@ -68,7 +67,7 @@ allprojects {
void setupHostAndTarget() {
ext.hostName = TargetManager.hostName
ext.targetList = TargetManager.enabled.collect { getVisibleName(it) } as List
ext.targetList = TargetManager.enabled.collect { it.visibleName } as List
}
void setupClang(Project project) {
@@ -136,15 +135,15 @@ void loadCommandLineProperties() {
class PlatformInfo {
boolean isMac() {
return TargetManager.host == KonanTarget.MACBOOK
return TargetManager.hostIsMac
}
boolean isWindows() {
return TargetManager.host == KonanTarget.MINGW
return TargetManager.hostIsMingw
}
boolean isLinux() {
return TargetManager.host == KonanTarget.LINUX
return TargetManager.hostIsLinux
}
Throwable unsupportedPlatformException() {
@@ -22,7 +22,6 @@ import org.gradle.api.tasks.TaskAction
import org.gradle.process.ExecResult
import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.properties.*
import static org.jetbrains.kotlin.konan.util.VisibleNamedKt.*
import javax.inject.Inject
import java.util.regex.Pattern
@@ -113,7 +112,7 @@ abstract class KonanTest extends JavaExec {
*moreArgs,
*project.globalTestArgs]
if (project.testTarget) {
args "-target", getVisibleName(target)
args "-target", target.visibleName
}
if (enableKonanAssertions) {
args "-ea"
@@ -486,7 +485,7 @@ class RunDriverKonanTest extends KonanTest {
*moreArgs,
*project.globalTestArgs]
if (project.testTarget) {
args "-target", getVisibleName(target)
args "-target", target.visibleName
}
if (enableKonanAssertions) {
args "-ea"
@@ -508,7 +507,7 @@ class RunInteropKonanTest extends KonanTest {
void setInterop(String value) {
this.interop = value
this.interopConf = project.kotlinNativeInterop[value]
this.interopConf.target = getVisibleName(target)
this.interopConf.target = target.visibleName
this.dependsOn(this.interopConf.genTask)
}
@@ -30,7 +30,6 @@ import org.gradle.api.tasks.TaskDependency
import org.gradle.internal.reflect.Instantiator
import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.util.*
import static org.jetbrains.kotlin.konan.util.VisibleNamedKt.*
class NamedNativeInteropConfig implements Named {
@@ -148,7 +147,7 @@ class NamedNativeInteropConfig implements Named {
}
File getNativeLibsDir() {
def target = getVisibleName(new TargetManager(target).target)
def target = new TargetManager(target).target.visibleName
return new File(project.buildDir, "nativelibs/$target")
}
+2 -2
View File
@@ -22,7 +22,7 @@ import groovy.transform.stc.FromString
import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.konan.util.DependencyProcessor
import static org.jetbrains.kotlin.konan.target.KonanTarget.*
import static org.jetbrains.kotlin.konan.util.VisibleNamedKt.*
import org.jetbrains.kotlin.konan.util.Named
import org.jetbrains.kotlin.konan.properties.KonanPropertiesLoader
import org.jetbrains.kotlin.konan.properties.*
@@ -216,7 +216,7 @@ enum DependencyKind {
DependencyKind(String name,
@ClosureParams(value = FromString.class, options = "KonanPropertiesLoader") Closure<String> dirGetter,
@ClosureParams(value = FromString.class, options = "KonanTarget") Closure<String> propertyNameGetter =
{target -> "${getVisibleName(target)}${name.capitalize()}Dir"}) {
{target -> "${target.visibleName}${name.capitalize()}Dir"}) {
this.name = name
this.dirGetter = dirGetter
this.propertyNameGetter = propertyNameGetter
@@ -17,3 +17,7 @@
package org.jetbrains.kotlin.konan.util
val <T : Enum<T>> T.visibleName get() = name.toLowerCase()
interface Named {
val name: String
val visibleName get() = name
}
@@ -17,6 +17,8 @@
package org.jetbrains.kotlin.konan.target
import org.jetbrains.kotlin.konan.util.visibleName
import org.jetbrains.kotlin.konan.util.Named
import org.jetbrains.kotlin.konan.target.KonanTarget.*
enum class Family(val exeSuffix:String, val dynamicPrefix: String, val dynamicSuffix: String) {
OSX ("kexe", "lib", "dylib"),
@@ -36,18 +38,27 @@ enum class Architecture(val bitness: Int) {
WASM32(32);
}
enum class KonanTarget(val family: Family, val architecture: Architecture, val detailedName: String, var enabled: Boolean = false) {
ANDROID_ARM32( Family.ANDROID, Architecture.ARM32, "android_arm32"),
ANDROID_ARM64( Family.ANDROID, Architecture.ARM64, "android_arm64"),
IPHONE( Family.IOS, Architecture.ARM64, "ios"),
IPHONE_SIM( Family.IOS, Architecture.X64, "ios_sim"),
LINUX( Family.LINUX, Architecture.X64, "linux"),
MINGW( Family.WINDOWS, Architecture.X64, "mingw"),
MACBOOK( Family.OSX, Architecture.X64, "osx"),
RASPBERRYPI( Family.LINUX, Architecture.ARM32, "raspberrypi"),
LINUX_MIPS32( Family.LINUX, Architecture.MIPS32, "linux_mips32"),
LINUX_MIPSEL32( Family.LINUX, Architecture.MIPSEL32, "linux_mipsel32"),
WASM32( Family.WASM, Architecture.WASM32, "wasm32");
sealed class KonanTarget(override val name: String, val family: Family, val architecture: Architecture, val detailedName: String, var enabled: Boolean = false) : Named {
object ANDROID_ARM32 : KonanTarget( "android_arm32", Family.ANDROID, Architecture.ARM32, "android_arm32")
object ANDROID_ARM64 : KonanTarget( "android_arm64", Family.ANDROID, Architecture.ARM64, "android_arm64")
object IPHONE : KonanTarget( "iphone", Family.IOS, Architecture.ARM64, "ios")
object IPHONE_SIM : KonanTarget( "iphone_sim", Family.IOS, Architecture.X64, "ios_sim")
object LINUX : KonanTarget( "linux", Family.LINUX, Architecture.X64, "linux")
object MINGW : KonanTarget( "mingw", Family.WINDOWS, Architecture.X64, "mingw")
object MACBOOK : KonanTarget( "macbook", Family.OSX, Architecture.X64, "osx")
object RASPBERRYPI : KonanTarget( "raspberrypi", Family.LINUX, Architecture.ARM32, "raspberrypi")
object LINUX_MIPS32 : KonanTarget( "linux_mips32", Family.LINUX, Architecture.MIPS32, "linux_mips32")
object LINUX_MIPSEL32 : KonanTarget( "linux_mipsel32", Family.LINUX, Architecture.MIPSEL32, "linux_mipsel32")
object WASM32 : KonanTarget( "wasm32", Family.WASM, Architecture.WASM32, "wasm32")
companion object {
protected val memberObjects = mutableListOf<KonanTarget>()
fun values() = memberObjects
}
init {
memberObjects.add(this)
}
}
fun hostTargetSuffix(host: KonanTarget, target: KonanTarget) =
@@ -194,7 +205,11 @@ class TargetManager(val userRequest: String? = null) {
@JvmStatic
val enabled: List<KonanTarget>
get() = KonanTarget.values().asList().filter { it.enabled }
get() = KonanTarget.values().filter { it.enabled }
val hostIsMac = (host == KonanTarget.MACBOOK)
val hostIsLinux = (host == KonanTarget.LINUX)
val hostIsMingw = (host == KonanTarget.MINGW)
}
}