Add Family.TVOS, Family.WATCHOS and KonanTarget.ANDROID_X86, KonanTarget.WATCHOS_X86, KonanTarget.WATCHOS_ARM32.

This commit is contained in:
Sergey Bogolepov
2019-09-03 18:44:02 +07:00
committed by Sergey Bogolepov
parent 5bd88f3191
commit ac3864543c
5 changed files with 83 additions and 15 deletions
@@ -14,11 +14,19 @@ enum class Family(val exeSuffix:String, val dynamicPrefix: String, val dynamicSu
val staticPrefix: String, val staticSuffix: String) { val staticPrefix: String, val staticSuffix: String) {
OSX ("kexe", "lib", "dylib", "lib", "a"), OSX ("kexe", "lib", "dylib", "lib", "a"),
IOS ("kexe", "lib", "dylib", "lib", "a"), IOS ("kexe", "lib", "dylib", "lib", "a"),
TVOS ("kexe", "lib", "dylib", "lib", "a"),
WATCHOS ("kexe", "lib", "dylib", "lib", "a"),
LINUX ("kexe", "lib", "so" , "lib", "a"), LINUX ("kexe", "lib", "so" , "lib", "a"),
MINGW ("exe" , "" , "dll" , "lib", "a"), MINGW ("exe" , "" , "dll" , "lib", "a"),
ANDROID ("so" , "lib", "so" , "lib", "a"), ANDROID ("so" , "lib", "so" , "lib", "a"),
WASM ("wasm", "" , "wasm" , "", "wasm"), WASM ("wasm", "" , "wasm" , "", "wasm"),
ZEPHYR ("o" , "lib", "a" , "lib", "a") ZEPHYR ("o" , "lib", "a" , "lib", "a");
val isAppleFamily: Boolean
get() = this == OSX
|| this == IOS
|| this == TVOS
|| this == WATCHOS
} }
enum class Architecture(val bitness: Int) { enum class Architecture(val bitness: Int) {
@@ -33,15 +41,18 @@ enum class Architecture(val bitness: Int) {
sealed class KonanTarget(override val name: String, val family: Family, val architecture: Architecture) : Named { sealed class KonanTarget(override val name: String, val family: Family, val architecture: Architecture) : Named {
object ANDROID_X64 : KonanTarget( "android_x64", Family.ANDROID, Architecture.X64) object ANDROID_X64 : KonanTarget( "android_x64", Family.ANDROID, Architecture.X64)
object ANDROID_X86 : KonanTarget( "android_x86", Family.ANDROID, Architecture.X86)
object ANDROID_ARM32 : KonanTarget( "android_arm32", Family.ANDROID, Architecture.ARM32) object ANDROID_ARM32 : KonanTarget( "android_arm32", Family.ANDROID, Architecture.ARM32)
object ANDROID_ARM64 : KonanTarget( "android_arm64", Family.ANDROID, Architecture.ARM64) object ANDROID_ARM64 : KonanTarget( "android_arm64", Family.ANDROID, Architecture.ARM64)
object IOS_ARM32 : KonanTarget( "ios_arm32", Family.IOS, Architecture.ARM32) object IOS_ARM32 : KonanTarget( "ios_arm32", Family.IOS, Architecture.ARM32)
object IOS_ARM64 : KonanTarget( "ios_arm64", Family.IOS, Architecture.ARM64) object IOS_ARM64 : KonanTarget( "ios_arm64", Family.IOS, Architecture.ARM64)
object IOS_X64 : KonanTarget( "ios_x64", Family.IOS, Architecture.X64) object IOS_X64 : KonanTarget( "ios_x64", Family.IOS, Architecture.X64)
object WATCHOS_ARM64 : KonanTarget( "watchos_arm64", Family.IOS, Architecture.ARM64) object WATCHOS_ARM32 : KonanTarget( "watchos_arm32", Family.WATCHOS, Architecture.ARM32)
object WATCHOS_X64 : KonanTarget( "watchos_x64", Family.IOS, Architecture.X64) object WATCHOS_ARM64 : KonanTarget( "watchos_arm64", Family.WATCHOS, Architecture.ARM64)
object TVOS_ARM64 : KonanTarget( "tvos_arm64", Family.IOS, Architecture.ARM64) object WATCHOS_X86 : KonanTarget( "watchos_x86", Family.WATCHOS, Architecture.X86)
object TVOS_X64 : KonanTarget( "tvos_x64", Family.IOS, Architecture.X64) object WATCHOS_X64 : KonanTarget( "watchos_x64", Family.WATCHOS, Architecture.X64)
object TVOS_ARM64 : KonanTarget( "tvos_arm64", Family.TVOS, Architecture.ARM64)
object TVOS_X64 : KonanTarget( "tvos_x64", Family.TVOS, Architecture.X64)
object LINUX_X64 : KonanTarget( "linux_x64", Family.LINUX, Architecture.X64) object LINUX_X64 : KonanTarget( "linux_x64", Family.LINUX, Architecture.X64)
object MINGW_X86 : KonanTarget( "mingw_x86", Family.MINGW, Architecture.X86) object MINGW_X86 : KonanTarget( "mingw_x86", Family.MINGW, Architecture.X86)
object MINGW_X64 : KonanTarget( "mingw_x64", Family.MINGW, Architecture.X64) object MINGW_X64 : KonanTarget( "mingw_x64", Family.MINGW, Architecture.X64)
@@ -127,11 +138,12 @@ open class HostManager(protected val distribution: Distribution = Distribution()
// TODO: need a better way to enumerated predefined targets. // TODO: need a better way to enumerated predefined targets.
private val predefinedTargets = listOf( private val predefinedTargets = listOf(
ANDROID_ARM32, ANDROID_ARM64, ANDROID_X64, ANDROID_ARM32, ANDROID_ARM64, ANDROID_X86, ANDROID_X64,
IOS_ARM32, IOS_ARM64, IOS_X64, IOS_ARM32, IOS_ARM64, IOS_X64,
WATCHOS_ARM64, WATCHOS_X64, WATCHOS_ARM32, WATCHOS_ARM64,
WATCHOS_X86, WATCHOS_X64,
TVOS_ARM64, TVOS_X64, TVOS_ARM64, TVOS_X64,
LINUX_X64, LINUX_ARM32_HFP, LINUX_ARM64, LINUX_MIPS32, LINUX_MIPSEL32, LINUX_X64, LINUX_ARM32_HFP, LINUX_ARM64, LINUX_MIPS32, LINUX_MIPSEL32,
MINGW_X64, MINGW_X86, MINGW_X64, MINGW_X86,
MACOS_X64, MACOS_X64,
WASM32) WASM32)
@@ -176,6 +188,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
LINUX_ARM64, LINUX_ARM64,
LINUX_MIPS32, LINUX_MIPS32,
LINUX_MIPSEL32, LINUX_MIPSEL32,
ANDROID_X86,
ANDROID_X64, ANDROID_X64,
ANDROID_ARM32, ANDROID_ARM32,
ANDROID_ARM64, ANDROID_ARM64,
@@ -187,6 +200,7 @@ open class HostManager(protected val distribution: Distribution = Distribution()
LINUX_X64, LINUX_X64,
LINUX_ARM32_HFP, LINUX_ARM32_HFP,
LINUX_ARM64, LINUX_ARM64,
ANDROID_X86,
ANDROID_X64, ANDROID_X64,
ANDROID_ARM32, ANDROID_ARM32,
ANDROID_ARM64, ANDROID_ARM64,
@@ -197,13 +211,16 @@ open class HostManager(protected val distribution: Distribution = Distribution()
IOS_ARM32, IOS_ARM32,
IOS_ARM64, IOS_ARM64,
IOS_X64, IOS_X64,
WATCHOS_ARM32,
WATCHOS_ARM64, WATCHOS_ARM64,
WATCHOS_X86,
WATCHOS_X64, WATCHOS_X64,
TVOS_ARM64, TVOS_ARM64,
TVOS_X64, TVOS_X64,
LINUX_X64, LINUX_X64,
LINUX_ARM32_HFP, LINUX_ARM32_HFP,
LINUX_ARM64, LINUX_ARM64,
ANDROID_X86,
ANDROID_X64, ANDROID_X64,
ANDROID_ARM32, ANDROID_ARM32,
ANDROID_ARM64, ANDROID_ARM64,
@@ -331,6 +348,7 @@ val KonanTarget.presetName: String
get() = when (this) { get() = when (this) {
ANDROID_ARM32 -> "androidNativeArm32" ANDROID_ARM32 -> "androidNativeArm32"
ANDROID_ARM64 -> "androidNativeArm64" ANDROID_ARM64 -> "androidNativeArm64"
ANDROID_X86 -> "androidNativeX86"
ANDROID_X64 -> "androidNativeX64" ANDROID_X64 -> "androidNativeX64"
else -> evaluatePresetName(this.name) else -> evaluatePresetName(this.name)
} }
@@ -91,6 +91,21 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP
fun androidNativeArm64(name: String, configure: Closure<*>) = androidNativeArm64(name) { ConfigureUtil.configure(configure, this) } fun androidNativeArm64(name: String, configure: Closure<*>) = androidNativeArm64(name) { ConfigureUtil.configure(configure, this) }
fun androidNativeArm64(configure: Closure<*>) = androidNativeArm64 { ConfigureUtil.configure(configure, this) } fun androidNativeArm64(configure: Closure<*>) = androidNativeArm64 { ConfigureUtil.configure(configure, this) }
fun androidNativeX86(
name: String = "androidNativeX86",
configure: KotlinNativeTarget.() -> Unit = { }
): KotlinNativeTarget =
configureOrCreate(
name,
presets.getByName("androidNativeX86") as KotlinNativeTargetPreset,
configure
)
fun androidNativeX86() = androidNativeX86("androidNativeX86") { }
fun androidNativeX86(name: String) = androidNativeX86(name) { }
fun androidNativeX86(name: String, configure: Closure<*>) = androidNativeX86(name) { ConfigureUtil.configure(configure, this) }
fun androidNativeX86(configure: Closure<*>) = androidNativeX86 { ConfigureUtil.configure(configure, this) }
fun androidNativeX64( fun androidNativeX64(
name: String = "androidNativeX64", name: String = "androidNativeX64",
configure: KotlinNativeTarget.() -> Unit = { } configure: KotlinNativeTarget.() -> Unit = { }
@@ -151,6 +166,21 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP
fun iosX64(name: String, configure: Closure<*>) = iosX64(name) { ConfigureUtil.configure(configure, this) } fun iosX64(name: String, configure: Closure<*>) = iosX64(name) { ConfigureUtil.configure(configure, this) }
fun iosX64(configure: Closure<*>) = iosX64 { ConfigureUtil.configure(configure, this) } fun iosX64(configure: Closure<*>) = iosX64 { ConfigureUtil.configure(configure, this) }
fun watchosArm32(
name: String = "watchosArm32",
configure: KotlinNativeTarget.() -> Unit = { }
): KotlinNativeTarget =
configureOrCreate(
name,
presets.getByName("watchosArm32") as KotlinNativeTargetPreset,
configure
)
fun watchosArm32() = watchosArm32("watchosArm32") { }
fun watchosArm32(name: String) = watchosArm32(name) { }
fun watchosArm32(name: String, configure: Closure<*>) = watchosArm32(name) { ConfigureUtil.configure(configure, this) }
fun watchosArm32(configure: Closure<*>) = watchosArm32 { ConfigureUtil.configure(configure, this) }
fun watchosArm64( fun watchosArm64(
name: String = "watchosArm64", name: String = "watchosArm64",
configure: KotlinNativeTarget.() -> Unit = { } configure: KotlinNativeTarget.() -> Unit = { }
@@ -166,6 +196,21 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP
fun watchosArm64(name: String, configure: Closure<*>) = watchosArm64(name) { ConfigureUtil.configure(configure, this) } fun watchosArm64(name: String, configure: Closure<*>) = watchosArm64(name) { ConfigureUtil.configure(configure, this) }
fun watchosArm64(configure: Closure<*>) = watchosArm64 { ConfigureUtil.configure(configure, this) } fun watchosArm64(configure: Closure<*>) = watchosArm64 { ConfigureUtil.configure(configure, this) }
fun watchosX86(
name: String = "watchosX86",
configure: KotlinNativeTarget.() -> Unit = { }
): KotlinNativeTarget =
configureOrCreate(
name,
presets.getByName("watchosX86") as KotlinNativeTargetPreset,
configure
)
fun watchosX86() = watchosX86("watchosX86") { }
fun watchosX86(name: String) = watchosX86(name) { }
fun watchosX86(name: String, configure: Closure<*>) = watchosX86(name) { ConfigureUtil.configure(configure, this) }
fun watchosX86(configure: Closure<*>) = watchosX86 { ConfigureUtil.configure(configure, this) }
fun watchosX64( fun watchosX64(
name: String = "watchosX64", name: String = "watchosX64",
configure: KotlinNativeTarget.() -> Unit = { } configure: KotlinNativeTarget.() -> Unit = { }
@@ -57,7 +57,7 @@ enum class NativeOutputKind(
description = "a framework" description = "a framework"
) { ) {
override fun availableFor(target: KonanTarget) = override fun availableFor(target: KonanTarget) =
target.family == Family.OSX || target.family == Family.IOS target.family.isAppleFamily
}; };
open fun availableFor(target: KonanTarget) = true open fun availableFor(target: KonanTarget) = true
@@ -47,7 +47,7 @@ open class KotlinCocoapodsPlugin: Plugin<Project> {
private fun KotlinMultiplatformExtension.supportedTargets() = targets private fun KotlinMultiplatformExtension.supportedTargets() = targets
.withType(KotlinNativeTarget::class.java) .withType(KotlinNativeTarget::class.java)
.matching { it.konanTarget.family == Family.IOS || it.konanTarget.family == Family.OSX } .matching { it.konanTarget.family.isAppleFamily }
/** /**
* Splits a string using a whitespace characters as delimiters. * Splits a string using a whitespace characters as delimiters.
@@ -133,9 +133,14 @@ open class KotlinCocoapodsPlugin: Plugin<Project> {
val requestedBuildType = project.findProperty(CONFIGURATION_PROPERTY)?.toString()?.toUpperCase() ?: return@whenEvaluated val requestedBuildType = project.findProperty(CONFIGURATION_PROPERTY)?.toString()?.toUpperCase() ?: return@whenEvaluated
if (requestedTargetName == KOTLIN_TARGET_FOR_DEVICE) { if (requestedTargetName == KOTLIN_TARGET_FOR_DEVICE) {
// We create a fat framework only for device platforms: iosArm64, iosArm32, watchosArm64 and tvosArm64. // We create a fat framework only for device platforms: iosArm64, iosArm32, watchosArm32, watchosArm64 and tvosArm64.
val devicePlatforms = listOf(KonanTarget.IOS_ARM64, KonanTarget.IOS_ARM32, val devicePlatforms = listOf(
KonanTarget.WATCHOS_ARM64, KonanTarget.TVOS_ARM64) KonanTarget.IOS_ARM64,
KonanTarget.IOS_ARM32,
KonanTarget.WATCHOS_ARM32,
KonanTarget.WATCHOS_ARM64,
KonanTarget.TVOS_ARM64
)
val deviceTargets = devicePlatforms.flatMap { kotlinExtension.targetsForPlatform(it) } val deviceTargets = devicePlatforms.flatMap { kotlinExtension.targetsForPlatform(it) }
if (deviceTargets.size == 1) { if (deviceTargets.size == 1) {
@@ -170,8 +170,8 @@ open class FatFrameworkTask: DefaultTask() {
KonanTarget.IOS_X64 -> "iPhoneSimulator" KonanTarget.IOS_X64 -> "iPhoneSimulator"
KonanTarget.TVOS_ARM64 -> "appletvos" KonanTarget.TVOS_ARM64 -> "appletvos"
KonanTarget.TVOS_X64 -> "appletvsimulator" KonanTarget.TVOS_X64 -> "appletvsimulator"
KonanTarget.WATCHOS_ARM64 -> "watchos" KonanTarget.WATCHOS_ARM32, KonanTarget.WATCHOS_ARM64 -> "watchos"
KonanTarget.WATCHOS_X64 -> "watchsimulator" KonanTarget.WATCHOS_X86, KonanTarget.WATCHOS_X64 -> "watchsimulator"
else -> error("Fat frameworks are not supported for target `${target.konanTarget.visibleName}`") else -> error("Fat frameworks are not supported for target `${target.konanTarget.visibleName}`")
} }