diff --git a/kotlin-native/konan/konan.properties b/kotlin-native/konan/konan.properties index abf9a00e01e..42c8b50694c 100644 --- a/kotlin-native/konan/konan.properties +++ b/kotlin-native/konan/konan.properties @@ -405,6 +405,26 @@ linkerDynamicFlags.watchos_arm64 = -dylib osVersionMinFlagLd.watchos_arm64 = -watchos_version_min osVersionMin.watchos_arm64 = 5.0 +# watchOS arm64 +targetToolchain.macos_x64-watchos_device_arm64 = target-toolchain-xcode_14_rc +targetToolchain.macos_arm64-watchos_device_arm64 = target-toolchain-xcode_14_rc + +targetTriple.watchos_device_arm64 = arm64-apple-watchos +targetSysRoot.watchos_device_arm64 = target-sysroot-xcode_14_rc-watchos +targetCpu.watchos_device_arm64 = apple-a7 +clangFlags.watchos_device_arm64 = -cc1 -emit-obj -disable-llvm-passes -x ir +clangNooptFlags.watchos_device_arm64 = -O1 +clangOptFlags.watchos_device_arm64 = -O3 +clangDebugFlags.watchos_device_arm64 = -O0 -mllvm -fast-isel=false -mllvm -global-isel=false + +linkerKonanFlags.watchos_device_arm64 = -lSystem -lc++ -lobjc -framework Foundation -sdk_version 9.0 +linkerOptimizationFlags.watchos_device_arm64 = -dead_strip +linkerNoDebugFlags.watchos_device_arm64 = -S +stripFlags.watchos_device_arm64 = -S +linkerDynamicFlags.watchos_device_arm64 = -dylib +osVersionMinFlagLd.watchos_device_arm64 = -watchos_version_min +osVersionMin.watchos_device_arm64 = 9.0 + # Apple's watchOS i386 simulator. targetToolchain.macos_x64-watchos_x86 = target-toolchain-xcode_14_rc diff --git a/kotlin-native/platformLibs/src/platform/watchos/posix.def b/kotlin-native/platformLibs/src/platform/watchos/posix.def index 76f55c20b67..c4709671634 100644 --- a/kotlin-native/platformLibs/src/platform/watchos/posix.def +++ b/kotlin-native/platformLibs/src/platform/watchos/posix.def @@ -21,6 +21,7 @@ excludedFunctions = acl_valid_link_np pfctlinput profil unwhiteout zopen getdire getcontext makecontext setcontext swapcontext excludedFunctions.watchos_arm32 = longjmperror excludedFunctions.watchos_arm64 = longjmperror +excludedFunctions.watchos_device_arm64 = longjmperror excludedFunctions.watchos_simulator_arm64 = longjmperror \ openat_dprotected_np mkfifoat mknodat openat_authenticated_np excludedFunctions.watchos_x64 = openat_dprotected_np mkfifoat mknodat openat_authenticated_np diff --git a/kotlin-native/platformLibs/src/platform/watchos/set_depends.sh b/kotlin-native/platformLibs/src/platform/watchos/set_depends.sh index 3b27463bb1d..2fd57f12ebd 100755 --- a/kotlin-native/platformLibs/src/platform/watchos/set_depends.sh +++ b/kotlin-native/platformLibs/src/platform/watchos/set_depends.sh @@ -5,5 +5,6 @@ -target watchos_arm64 \ -target watchos_x64 \ -target watchos_simulator_arm64 \ + -target watchos_device_arm64 \ *.def diff --git a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTargetExtenstions.kt b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTargetExtenstions.kt index a24c35dd5b4..40e310f59c9 100644 --- a/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTargetExtenstions.kt +++ b/kotlin-native/shared/src/main/kotlin/org/jetbrains/kotlin/konan/target/KonanTargetExtenstions.kt @@ -63,6 +63,10 @@ fun KonanTarget.supportsMimallocAllocator(): Boolean = is KonanTarget.ANDROID_X86, is KonanTarget.ANDROID_ARM32 -> false // aren't tested. is KonanTarget.LINUX_MIPS32, is KonanTarget.LINUX_MIPSEL32 -> false // need linking with libatomic. is KonanTarget.WASM32, is KonanTarget.ZEPHYR -> false // likely not supported + // Funny thing is we can neither access WATCHOS_DEVICE_ARM64, nor omit it explicitly due to the + // build's quirks. Workaround by using else clause. + // TODO: Add explicit WATCHOS_DEVICE_ARM64 after compiler update. + else -> false } fun KonanTarget.supportsLibBacktrace(): Boolean = @@ -71,6 +75,7 @@ fun KonanTarget.supportsLibBacktrace(): Boolean = (this.family == Family.LINUX && this.architecture !in listOf(Architecture.MIPS32, Architecture.MIPSEL32)) || this.family == Family.ANDROID +// TODO: Add explicit WATCHOS_DEVICE_ARM64 after compiler update. fun KonanTarget.supportsCoreSymbolication(): Boolean = this in listOf( KonanTarget.MACOS_X64, KonanTarget.MACOS_ARM64, KonanTarget.IOS_X64, @@ -117,6 +122,7 @@ fun KonanTarget.supports64BitMulOverflow(): Boolean = when (this) { else -> true } +// TODO: Add explicit WATCHOS_DEVICE_ARM64 after compiler update. fun KonanTarget.supportsIosCrashLog(): Boolean = when (this) { KonanTarget.IOS_ARM32 -> true KonanTarget.IOS_ARM64 -> true diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt index 6c644eda142..0a55b6703e8 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/HostManager.kt @@ -73,6 +73,7 @@ open class HostManager( WATCHOS_X86, WATCHOS_X64, WATCHOS_SIMULATOR_ARM64, + WATCHOS_DEVICE_ARM64, TVOS_ARM64, TVOS_X64, TVOS_SIMULATOR_ARM64, diff --git a/native/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt b/native/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt index 9a20be528f7..90a9f2333bd 100644 --- a/native/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt +++ b/native/utils/src/org/jetbrains/kotlin/konan/target/KonanTarget.kt @@ -22,6 +22,7 @@ sealed class KonanTarget(override val name: String, val family: Family, val arch object WATCHOS_X86 : KonanTarget("watchos_x86", Family.WATCHOS, Architecture.X86) object WATCHOS_X64 : KonanTarget("watchos_x64", Family.WATCHOS, Architecture.X64) object WATCHOS_SIMULATOR_ARM64 : KonanTarget("watchos_simulator_arm64", Family.WATCHOS, Architecture.ARM64) + object WATCHOS_DEVICE_ARM64 : KonanTarget("watchos_device_arm64", Family.WATCHOS, Architecture.ARM64) object TVOS_ARM64 : KonanTarget("tvos_arm64", Family.TVOS, Architecture.ARM64) object TVOS_X64 : KonanTarget("tvos_x64", Family.TVOS, Architecture.X64) object TVOS_SIMULATOR_ARM64 : KonanTarget("tvos_simulator_arm64", Family.TVOS, Architecture.ARM64) @@ -49,7 +50,7 @@ sealed class KonanTarget(override val name: String, val family: Family, val arch ANDROID_X64, ANDROID_X86, ANDROID_ARM32, ANDROID_ARM64, IOS_ARM32, IOS_ARM64, IOS_X64, IOS_SIMULATOR_ARM64, WATCHOS_ARM32, WATCHOS_ARM64, WATCHOS_X86, WATCHOS_X64, - WATCHOS_SIMULATOR_ARM64, + WATCHOS_SIMULATOR_ARM64, WATCHOS_DEVICE_ARM64, TVOS_ARM64, TVOS_X64, TVOS_SIMULATOR_ARM64, LINUX_X64, MINGW_X86, MINGW_X64,