Change:
Building project using should just work, but instead it fails to link to the and symbols. The exact error is: : This worked with , I'll try to bisect it myself. label O-watchos
Ugh, don't you just love it when the culprit is yourself? It's

Discussion:
Terminate, } <del> /// 32-bit Apple ARM uses SjLj exceptions, except for watchOS. </del> <ins> /// 32-bit ARM Darwin platforms uses SjLj exceptions. </ins> /// <del> /// I.e. iOS and tvOS, as those are the only Apple OSes that used 32-bit ARM /// devices. </del> <ins> /// The exception is watchOS armv7k (specifically that subarchitecture), which /// instead uses DWARF Call Frame Information (CFI) unwinding. </ins> /// /// <https://github.com/llvm/llvm-project/blob/llvmorg-18.1.4/clang/lib/Driver/ToolChains/Darwin.cpp#L3107-L3119> pub const USING_SJLJ_EXCEPTIONS: bool =

cfg_if::cfg_if! { if #[cfg(all( <del> target_arch = "arm", not(all(target_vendor = "apple", not(target_os = "watchos"))), not(target_os = "netbsd"), ))] { </del> <ins> target_arch = "arm", not(target_vendor = "apple"), not(target_os = "netbsd"), ))] { </ins> /// personality fn called by [ARM EHABI][armeabi-eh] /// <del> /// Apple 32-bit ARM (but not watchOS) uses the default routine instead /// since it uses "setjmp-longjmp" unwinding. </del> <ins> /// 32-bit ARM on iOS/tvOS/watchOS does not use ARM EHABI, it uses /// either "setjmp-longjmp" unwinding or DWARF CFI unwinding, which is /// handled by the default routine. </ins> /// /// [armeabi-eh]: https://web.archive.org/web/20190728160938/https://infocenter.arm.com/help/topic/com.arm.doc.ihi0038b/IHI0038B_ehabi.pdf #[lang = "eh_personality"]

#[cfg(all(target_arch = "x86_64", target_os = "windows"))] pub const unwinder_private_data_size: usize = 6; <del> #[cfg(all(target_arch = "arm", not(all(target_vendor = "apple", not(target_os = "watchos")))))] </del> <ins> #[cfg(all(target_arch = "arm", not(target_vendor = "apple")))] </ins> pub const unwinder_private_data_size: usize = 20; <del> #[cfg(all(target_arch = "arm", all(target_vendor = "apple", not(target_os = "watchos"))))] </del> <ins> #[cfg(all(target_arch = "arm", target_vendor = "apple"))] </ins> pub const unwinder_private_data_size: usize = 5; #[cfg(all(target_arch = "aarch64", target_pointer_width = "64", not(target_os = "windows")))]

} cfg_if::cfg_if! { <del> if #[cfg(any(all(target_vendor = "apple", not(target_os = "watchos")), target_os = "netbsd", not(target_arch = "arm")))] { </del> <ins> if #[cfg(any(target_vendor = "apple", target_os = "netbsd", not(target_arch = "arm")))] { </ins> // Not ARM EHABI <ins> // // 32-bit ARM on iOS/tvOS/watchOS use either DWARF/Compact unwinding or // "setjmp-longjmp" / SjLj unwinding. </ins> #[repr(C)] #[derive(Copy, Clone, PartialEq)] pub enum _Unwind_Action {

cfg_if::cfg_if! { if #[cfg(all(target_vendor = "apple", not(target_os = "watchos"), target_arch = "arm"))] { <del> // 32-bit ARM Apple (except for watchOS) uses SjLj and does not provide // _Unwind_Backtrace() </del> <ins> // 32-bit ARM Apple (except for watchOS armv7k specifically) uses SjLj and // does not provide _Unwind_Backtrace() </ins> extern "C-unwind" { pub fn _Unwind_SjLj_RaiseException(e: *mut _Unwind_Exception) -> _Unwind_Reason_Code; }