diff --git a/konan/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt b/konan/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt index 3c5aa053d0a..bdeb32550a6 100644 --- a/konan/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt +++ b/konan/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt @@ -32,11 +32,16 @@ enum class Architecture(val bitness: Int) { } 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_ARM32 : KonanTarget( "android_arm32", Family.ANDROID, Architecture.ARM32) object ANDROID_ARM64 : KonanTarget( "android_arm64", Family.ANDROID, Architecture.ARM64) object IOS_ARM32 : KonanTarget( "ios_arm32", Family.IOS, Architecture.ARM32) object IOS_ARM64 : KonanTarget( "ios_arm64", Family.IOS, Architecture.ARM64) object IOS_X64 : KonanTarget( "ios_x64", Family.IOS, Architecture.X64) + object WATCHOS_ARM64 : KonanTarget( "watchos_arm64", Family.IOS, Architecture.ARM64) + object WATCHOS_X64 : KonanTarget( "watchos_x64", Family.IOS, Architecture.X64) + object TVOS_ARM64 : KonanTarget( "tvos_arm64", Family.IOS, Architecture.ARM64) + object TVOS_X64 : KonanTarget( "tvos_x64", Family.IOS, Architecture.X64) object LINUX_X64 : KonanTarget( "linux_x64", Family.LINUX, Architecture.X64) object MINGW_X86 : KonanTarget( "mingw_x86", Family.MINGW, Architecture.X86) object MINGW_X64 : KonanTarget( "mingw_x64", Family.MINGW, Architecture.X64) @@ -122,9 +127,11 @@ open class HostManager(protected val distribution: Distribution = Distribution() // TODO: need a better way to enumerated predefined targets. private val predefinedTargets = listOf( - ANDROID_ARM32, ANDROID_ARM64, + ANDROID_ARM32, ANDROID_ARM64, ANDROID_X64, IOS_ARM32, IOS_ARM64, IOS_X64, - LINUX_X64, LINUX_ARM32_HFP, LINUX_ARM64, LINUX_MIPS32, LINUX_MIPSEL32, + WATCHOS_ARM64, WATCHOS_X64, + TVOS_ARM64, TVOS_X64, + LINUX_X64, LINUX_ARM32_HFP, LINUX_ARM64, LINUX_MIPS32, LINUX_MIPSEL32, MINGW_X64, MINGW_X86, MACOS_X64, WASM32) @@ -169,6 +176,7 @@ open class HostManager(protected val distribution: Distribution = Distribution() LINUX_ARM64, LINUX_MIPS32, LINUX_MIPSEL32, + ANDROID_X64, ANDROID_ARM32, ANDROID_ARM64, WASM32 @@ -179,6 +187,7 @@ open class HostManager(protected val distribution: Distribution = Distribution() LINUX_X64, LINUX_ARM32_HFP, LINUX_ARM64, + ANDROID_X64, ANDROID_ARM32, ANDROID_ARM64, WASM32 @@ -188,9 +197,14 @@ open class HostManager(protected val distribution: Distribution = Distribution() IOS_ARM32, IOS_ARM64, IOS_X64, + WATCHOS_ARM64, + WATCHOS_X64, + TVOS_ARM64, + TVOS_X64, LINUX_X64, LINUX_ARM32_HFP, LINUX_ARM64, + ANDROID_X64, ANDROID_ARM32, ANDROID_ARM64, WASM32 @@ -317,6 +331,7 @@ val KonanTarget.presetName: String get() = when (this) { ANDROID_ARM32 -> "androidNativeArm32" ANDROID_ARM64 -> "androidNativeArm64" + ANDROID_X64 -> "androidNativeX64" else -> evaluatePresetName(this.name) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt index 7dfd5623b15..c8f43a8ea74 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetContainerWithPresetFunctions.kt @@ -91,6 +91,21 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP fun androidNativeArm64(name: String, configure: Closure<*>) = androidNativeArm64(name) { ConfigureUtil.configure(configure, this) } fun androidNativeArm64(configure: Closure<*>) = androidNativeArm64 { ConfigureUtil.configure(configure, this) } + fun androidNativeX64( + name: String = "androidNativeX64", + configure: KotlinNativeTarget.() -> Unit = { } + ): KotlinNativeTarget = + configureOrCreate( + name, + presets.getByName("androidNativeX64") as KotlinNativeTargetPreset, + configure + ) + + fun androidNativeX64() = androidNativeX64("androidNativeX64") { } + fun androidNativeX64(name: String) = androidNativeX64(name) { } + fun androidNativeX64(name: String, configure: Closure<*>) = androidNativeX64(name) { ConfigureUtil.configure(configure, this) } + fun androidNativeX64(configure: Closure<*>) = androidNativeX64 { ConfigureUtil.configure(configure, this) } + fun iosArm32( name: String = "iosArm32", configure: KotlinNativeTarget.() -> Unit = { } @@ -136,6 +151,66 @@ interface KotlinTargetContainerWithPresetFunctions : KotlinTargetsContainerWithP fun iosX64(name: String, configure: Closure<*>) = iosX64(name) { ConfigureUtil.configure(configure, this) } fun iosX64(configure: Closure<*>) = iosX64 { ConfigureUtil.configure(configure, this) } + fun watchosArm64( + name: String = "watchosArm64", + configure: KotlinNativeTarget.() -> Unit = { } + ): KotlinNativeTarget = + configureOrCreate( + name, + presets.getByName("watchosArm64") as KotlinNativeTargetPreset, + configure + ) + + fun watchosArm64() = watchosArm64("watchosArm64") { } + fun watchosArm64(name: String) = watchosArm64(name) { } + fun watchosArm64(name: String, configure: Closure<*>) = watchosArm64(name) { ConfigureUtil.configure(configure, this) } + fun watchosArm64(configure: Closure<*>) = watchosArm64 { ConfigureUtil.configure(configure, this) } + + fun watchosX64( + name: String = "watchosX64", + configure: KotlinNativeTarget.() -> Unit = { } + ): KotlinNativeTarget = + configureOrCreate( + name, + presets.getByName("watchosX64") as KotlinNativeTargetPreset, + configure + ) + + fun watchosX64() = watchosX64("watchosX64") { } + fun watchosX64(name: String) = watchosX64(name) { } + fun watchosX64(name: String, configure: Closure<*>) = watchosX64(name) { ConfigureUtil.configure(configure, this) } + fun watchosX64(configure: Closure<*>) = watchosX64 { ConfigureUtil.configure(configure, this) } + + fun tvosArm64( + name: String = "tvosArm64", + configure: KotlinNativeTarget.() -> Unit = { } + ): KotlinNativeTarget = + configureOrCreate( + name, + presets.getByName("tvosArm64") as KotlinNativeTargetPreset, + configure + ) + + fun tvosArm64() = tvosArm64("tvosArm64") { } + fun tvosArm64(name: String) = tvosArm64(name) { } + fun tvosArm64(name: String, configure: Closure<*>) = tvosArm64(name) { ConfigureUtil.configure(configure, this) } + fun tvosArm64(configure: Closure<*>) = tvosArm64 { ConfigureUtil.configure(configure, this) } + + fun tvosX64( + name: String = "tvosX64", + configure: KotlinNativeTarget.() -> Unit = { } + ): KotlinNativeTarget = + configureOrCreate( + name, + presets.getByName("tvosX64") as KotlinNativeTargetPreset, + configure + ) + + fun tvosX64() = tvosX64("tvosX64") { } + fun tvosX64(name: String) = tvosX64(name) { } + fun tvosX64(name: String, configure: Closure<*>) = tvosX64(name) { ConfigureUtil.configure(configure, this) } + fun tvosX64(configure: Closure<*>) = tvosX64 { ConfigureUtil.configure(configure, this) } + fun linuxX64( name: String = "linuxX64", configure: KotlinNativeTarget.() -> Unit = { } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt index d2cb59bc452..f53e1820307 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt @@ -133,8 +133,9 @@ open class KotlinCocoapodsPlugin: Plugin { val requestedBuildType = project.findProperty(CONFIGURATION_PROPERTY)?.toString()?.toUpperCase() ?: return@whenEvaluated if (requestedTargetName == KOTLIN_TARGET_FOR_DEVICE) { - // We create a fat framework only for device platforms: iosArm64 and iosArm32. - val devicePlatforms = listOf(KonanTarget.IOS_ARM64, KonanTarget.IOS_ARM32) + // We create a fat framework only for device platforms: iosArm64, iosArm32, watchosArm64 and tvosArm64. + val devicePlatforms = listOf(KonanTarget.IOS_ARM64, KonanTarget.IOS_ARM32, + KonanTarget.WATCHOS_ARM64, KonanTarget.TVOS_ARM64) val deviceTargets = devicePlatforms.flatMap { kotlinExtension.targetsForPlatform(it) } if (deviceTargets.size == 1) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt index a71a8af0129..20cff949af3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt @@ -168,6 +168,10 @@ open class FatFrameworkTask: DefaultTask() { get() = when(target.konanTarget) { KonanTarget.IOS_ARM32, KonanTarget.IOS_ARM64 -> "iPhoneOS" KonanTarget.IOS_X64 -> "iPhoneSimulator" + KonanTarget.TVOS_ARM64 -> "appletvos" + KonanTarget.TVOS_X64 -> "appletvsimulator" + KonanTarget.WATCHOS_ARM64 -> "watchos" + KonanTarget.WATCHOS_X64 -> "watchsimulator" else -> error("Fat frameworks are not supported for target `${target.konanTarget.visibleName}`") }