diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt index 8e0776fb526..48fc3c761bb 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt @@ -1610,7 +1610,8 @@ private fun Context.is64BitNSInteger(): Boolean = when (val target = this.config KonanTarget.IOS_ARM64, KonanTarget.TVOS_ARM64, KonanTarget.TVOS_X64, - KonanTarget.MACOS_X64 -> true + KonanTarget.MACOS_X64, + KonanTarget.WATCHOS_X64 -> true KonanTarget.WATCHOS_ARM64, KonanTarget.WATCHOS_ARM32, KonanTarget.WATCHOS_X86, @@ -1628,10 +1629,9 @@ private fun Context.is64BitNSInteger(): Boolean = when (val target = this.config KonanTarget.LINUX_MIPSEL32, KonanTarget.WASM32, is KonanTarget.ZEPHYR -> error("Target $target has no support for NSInteger type.") - KonanTarget.WATCHOS_X64 -> error("Target $target is not supported.") } -internal fun Context.is64BitLong(): Boolean = when (val target = this.config.target) { +internal fun Context.is64BitLong(): Boolean = when (this.config.target) { KonanTarget.IOS_X64, KonanTarget.IOS_ARM64, KonanTarget.TVOS_ARM64, @@ -1641,7 +1641,8 @@ internal fun Context.is64BitLong(): Boolean = when (val target = this.config.tar KonanTarget.LINUX_ARM64, KonanTarget.MINGW_X64, KonanTarget.LINUX_X64, - KonanTarget.MACOS_X64 -> true + KonanTarget.MACOS_X64, + KonanTarget.WATCHOS_X64 -> true KonanTarget.WATCHOS_ARM64, KonanTarget.WATCHOS_ARM32, KonanTarget.ANDROID_X86, @@ -1654,5 +1655,4 @@ internal fun Context.is64BitLong(): Boolean = when (val target = this.config.tar KonanTarget.WASM32, is KonanTarget.ZEPHYR, KonanTarget.IOS_ARM32 -> false - KonanTarget.WATCHOS_X64 -> error("Target $target is not supported.") } diff --git a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecutorService.kt b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecutorService.kt index 95bcacc4fd0..8f6b6d83e51 100644 --- a/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecutorService.kt +++ b/kotlin-native/build-tools/src/main/kotlin/org/jetbrains/kotlin/ExecutorService.kt @@ -246,7 +246,7 @@ private fun simulator(project: Project): ExecutorService = object : ExecutorServ private val device = project.findProperty("iosDevice")?.toString() ?: when (target) { KonanTarget.TVOS_X64 -> "Apple TV 4K" KonanTarget.IOS_X64 -> "iPhone 8" - KonanTarget.WATCHOS_X64, + KonanTarget.WATCHOS_X64 -> "Apple Watch Series 6 - 40mm" KonanTarget.WATCHOS_X86 -> "Apple Watch Series 4 - 40mm" else -> error("Unexpected simulation target: $target") } diff --git a/kotlin-native/build.gradle b/kotlin-native/build.gradle index 5db054a5cca..281800d9324 100644 --- a/kotlin-native/build.gradle +++ b/kotlin-native/build.gradle @@ -139,7 +139,7 @@ allprojects { void setupHostAndTarget() { ext.hostName = platformManager.hostName - ext.targetList = platformManager.filteredOutEnabledButNotSupported.collect { it.visibleName } as List + ext.targetList = platformManager.enabled.collect { it.visibleName } as List ext.konanTargetList = platformManager.enabled as List } diff --git a/kotlin-native/dependencies/build.gradle b/kotlin-native/dependencies/build.gradle index 6e467ac4448..2f134c6da08 100644 --- a/kotlin-native/dependencies/build.gradle +++ b/kotlin-native/dependencies/build.gradle @@ -78,7 +78,7 @@ enum DependencyKind { def platformManager = rootProject.ext.platformManager -platformManager.filteredOutEnabledButNotSupported.each { target -> +platformManager.enabled.each { target -> def loader = platformManager.loader(target) task "${target}Dependencies"(type: NativeDep) { diff --git a/kotlin-native/konan/konan.properties b/kotlin-native/konan/konan.properties index 82ce3b85643..72c055dee17 100644 --- a/kotlin-native/konan/konan.properties +++ b/kotlin-native/konan/konan.properties @@ -337,6 +337,33 @@ osVersionMin.watchos_x86 = 5.0 runtimeDefinitions.watchos_x86 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS=1 KONAN_NO_64BIT_ATOMIC=1 \ KONAN_X86=1 KONAN_CORE_SYMBOLICATION=1 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 +# watchOS x86_64 simulator. +targetToolchain.macos_x64-watchos_x64 = target-toolchain-xcode_12_0-macos_x64 +dependencies.macos_x64-watchos_x64 = \ + libffi-3.2.1-3-darwin-macos + +target-sysroot-xcode_12_0-watchos_x64.default = \ + remote:internal + +arch.watchos_x64 = x86_64 +targetSysRoot.watchos_x64 = target-sysroot-xcode_12_0-watchos_x86 +targetCpu.watchos_x64 = core2 +clangFlags.watchos_x64 = -cc1 -emit-obj -disable-llvm-passes -x ir -target-cpu $targetCpu.watchos_x64 +clangNooptFlags.watchos_x64 = -O1 +clangOptFlags.watchos_x64 = -O3 +clangDebugFlags.watchos_x64 = -O0 +clangDynamicFlags.watchos_x64 = + +linkerKonanFlags.watchos_x64 = -lSystem -lc++ -lobjc -framework Foundation -sdk_version 7.0 +linkerOptimizationFlags.watchos_x64 = -dead_strip +linkerNoDebugFlags.watchos_x64 = -S +linkerDynamicFlags.watchos_x64 = -dylib +osVersionMinFlagLd.watchos_x64 = -watchos_simulator_version_min +osVersionMinFlagClang.watchos_x64 = -mwatchos-simulator-version-min +osVersionMin.watchos_x64 = 7.0 +runtimeDefinitions.watchos_x64 = KONAN_OBJC_INTEROP=1 KONAN_WATCHOS=1 \ + KONAN_X64=1 KONAN_CORE_SYMBOLICATION=1 KONAN_HAS_CXX11_EXCEPTION_FUNCTIONS=1 + # Linux x86-64. llvmHome.linux_x64 = $llvm.linux_x64.dev libffiDir.linux_x64 = libffi-3.2.1-2-linux-x86-64 diff --git a/kotlin-native/platformLibs/src/platform/watchos/set_depends.sh b/kotlin-native/platformLibs/src/platform/watchos/set_depends.sh index 78e459849bd..8e43a0db23d 100755 --- a/kotlin-native/platformLibs/src/platform/watchos/set_depends.sh +++ b/kotlin-native/platformLibs/src/platform/watchos/set_depends.sh @@ -2,8 +2,7 @@ ../../../../dist/bin/run_konan defFileDependencies \ -target watchos_arm32 \ -target watchos_x86 \ + -target watchos_arm64 \ + -target watchos_x64 \ *.def -#TODO: Reenable targets -# -target watchos_arm64 \ -# -target watchos_x64 \ diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt index 0628d57271b..9216ffcda4e 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/ClangArgs.kt @@ -104,7 +104,8 @@ class ClangArgs(private val configurables: Configurables) : Configurables by con KonanTarget.WATCHOS_X86 -> listOf("-stdlib=libc++", "-arch", "i386", "-isysroot", absoluteTargetSysRoot, "-mwatchos-simulator-version-min=$osVersionMin") - KonanTarget.WATCHOS_X64 -> TODO("implement me") + KonanTarget.WATCHOS_X64 -> + listOf("-stdlib=libc++", "-isysroot", absoluteTargetSysRoot, "-mwatchos-simulator-version-min=$osVersionMin") KonanTarget.ANDROID_ARM32, KonanTarget.ANDROID_ARM64, KonanTarget.ANDROID_X86, KonanTarget.ANDROID_X64 -> { diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Platform.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Platform.kt index 18bff4655bb..6d790f607e7 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Platform.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/Platform.kt @@ -34,7 +34,7 @@ class PlatformManager(private val distribution: Distribution, experimental: Bool constructor(konanHome: String, experimental: Boolean = false): this(Distribution(konanHome), experimental) - private val loaders = filteredOutEnabledButNotSupported.map { + private val loaders = enabled.map { it to loadConfigurables(it, distribution.properties, DependencyProcessor.defaultDependenciesRoot.absolutePath) }.toMap() @@ -46,11 +46,5 @@ class PlatformManager(private val distribution: Distribution, experimental: Bool val hostPlatform = platforms.getValue(host) fun loader(target: KonanTarget) = loaders.getValue(target) - - /** - * TODO: Don't forget to delete this field and replace all its usages to `enabled`. - */ - val filteredOutEnabledButNotSupported - get() = enabled.filterNot { it == KonanTarget.WATCHOS_X64 } } diff --git a/kotlin-native/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/PathSpecification.groovy b/kotlin-native/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/PathSpecification.groovy index 19b576aa078..901525e68d4 100644 --- a/kotlin-native/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/PathSpecification.groovy +++ b/kotlin-native/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/PathSpecification.groovy @@ -32,7 +32,7 @@ class PathSpecification extends BaseKonanSpecification { expect: def project = KonanProject.createEmpty( projectDirectory, - platformManager.filteredOutEnabledButNotSupported.collect { t -> t.visibleName } + platformManager.enabled.collect { t -> t.visibleName } ) { KonanProject it -> it.generateSrcFile("main.kt") it.generateDefFile("interop.def", "")