diff --git a/build.gradle b/build.gradle index dcb725d7629..30ee99e30d8 100644 --- a/build.gradle +++ b/build.gradle @@ -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() { diff --git a/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy b/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy index 09bb7bbd4bb..c63abc6a7bb 100644 --- a/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy +++ b/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/KonanTest.groovy @@ -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) } diff --git a/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/NativeInteropPlugin.groovy b/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/NativeInteropPlugin.groovy index a17dd8f191f..a1acf8657c0 100644 --- a/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/NativeInteropPlugin.groovy +++ b/buildSrc/plugins/src/main/groovy/org/jetbrains/kotlin/NativeInteropPlugin.groovy @@ -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") } diff --git a/dependencies/build.gradle b/dependencies/build.gradle index 5ee941fc914..4b1be8b08cf 100644 --- a/dependencies/build.gradle +++ b/dependencies/build.gradle @@ -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 dirGetter, @ClosureParams(value = FromString.class, options = "KonanTarget") Closure propertyNameGetter = - {target -> "${getVisibleName(target)}${name.capitalize()}Dir"}) { + {target -> "${target.visibleName}${name.capitalize()}Dir"}) { this.name = name this.dirGetter = dirGetter this.propertyNameGetter = propertyNameGetter diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/VisibleNamed.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/VisibleNamed.kt index 162db6f8dcb..57495a563df 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/VisibleNamed.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/VisibleNamed.kt @@ -17,3 +17,7 @@ package org.jetbrains.kotlin.konan.util val > T.visibleName get() = name.toLowerCase() +interface Named { + val name: String + val visibleName get() = name +} diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt index e280a8b5a55..81b6dee4bc2 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTarget.kt @@ -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() + 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 - 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) } }