rust-lang / compiler-builtins

Porting `compiler-rt` intrinsics to Rust
https://github.com/rust-lang/rust/issues/35437
Other
374 stars 211 forks source link

"was built for iOS 16.4" warning #650

Open Augustyniak opened 3 months ago

Augustyniak commented 3 months ago

Seeing the following type of errors after upgrading from rust 1.79 to 1.80:

ld: warning: object file (external/Capture/Capture.xcframework/ios-arm64/Capture.framework/Capture[441](ee9320b67fe2b8d4-lse_ldadd8_acq.o)) was built for newer 'iOS' version (16.4) than being linked (15.0)
ld: warning: object file (external/Capture/Capture.xcframework/ios-arm64/Capture.framework/Capture[442](ee9320b67fe2b8d4-lse_ldadd8_rel.o)) was built for newer 'iOS' version (16.4) than being linked (15.0)
ld: warning: object file (external/Capture/Capture.xcframework/ios-arm64/Capture.framework/Capture[443](ee9320b67fe2b8d4-lse_ldadd8_acq_rel.o)) was built for newer 'iOS' version (16.4) than being linked (15.0)
ld: warning: object file (external/Capture/Capture.xcframework/ios-arm64/Capture.framework/Capture[444](ee9320b67fe2b8d4-lse_ldclr1_relax.o)) was built for newer 'iOS' version (16.4) than being linked (15.0)
ld: warning: object file (external/Capture/Capture.xcframework/ios-arm64/Capture.framework/Capture[445](ee9320b67fe2b8d4-lse_ldclr1_acq.o)) was built for newer 'iOS' version (16.4) than being linked (15.0)
ld: warning: object file (external/Capture/Capture.xcframework/ios-arm64/Capture.framework/Capture[446](ee9320b67fe2b8d4-lse_ldclr1_rel.o)) was built for newer 'iOS' version (16.4) than being linked (15.0)
The full list of problematic `.o` files ``` lse_cas1_relax.o lse_cas1_acq.o lse_cas1_rel.o lse_cas1_acq_rel.o lse_cas2_relax.o lse_cas2_acq.o lse_cas2_rel.o lse_cas2_acq_rel.o lse_cas4_relax.o lse_cas4_acq.o lse_cas4_rel.o lse_cas4_acq_rel.o lse_cas8_relax.o lse_cas8_acq.o lse_cas8_rel.o lse_cas8_acq_rel.o lse_cas16_relax.o lse_cas16_acq.o lse_cas16_rel.o lse_cas16_acq_rel.o lse_swp1_relax.o lse_swp1_acq.o lse_swp1_rel.o lse_swp1_acq_rel.o lse_swp2_relax.o lse_swp2_acq.o lse_swp2_rel.o lse_swp2_acq_rel.o lse_swp4_relax.o lse_swp4_acq.o lse_swp4_rel.o lse_swp4_acq_rel.o lse_swp8_relax.o lse_swp8_acq.o lse_swp8_rel.o lse_swp8_acq_rel.o lse_ldadd1_relax.o lse_ldadd1_acq.o lse_ldadd1_rel.o lse_ldadd1_acq_rel.o lse_ldadd2_relax.o lse_ldadd2_acq.o lse_ldadd2_rel.o lse_ldadd2_acq_rel.o lse_ldadd4_relax.o lse_ldadd4_acq.o lse_ldadd4_rel.o lse_ldadd4_acq_rel.o lse_ldadd8_relax.o lse_ldadd8_acq.o lse_ldadd8_rel.o lse_ldadd8_acq_rel.o lse_ldclr1_relax.o lse_ldclr1_acq.o lse_ldclr1_rel.o lse_ldclr1_acq_rel.o lse_ldclr2_relax.o lse_ldclr2_acq.o lse_ldclr2_rel.o lse_ldclr2_acq_rel.o lse_ldclr4_relax.o lse_ldclr4_acq.o lse_ldclr4_rel.o lse_ldclr4_acq_rel.o lse_ldclr8_relax.o lse_ldclr8_acq.o lse_ldclr8_rel.o lse_ldclr8_acq_rel.o lse_ldeor1_relax.o lse_ldeor1_acq.o lse_ldeor1_rel.o lse_ldeor1_acq_rel.o lse_ldeor2_relax.o lse_ldeor2_acq.o lse_ldeor2_rel.o lse_ldeor2_acq_rel.o lse_ldeor4_relax.o lse_ldeor4_acq.o lse_ldeor4_rel.o lse_ldeor4_acq_rel.o lse_ldeor8_relax.o lse_ldeor8_acq.o lse_ldeor8_rel.o lse_ldeor8_acq_rel.o lse_ldset1_relax.o lse_ldset1_acq.o lse_ldset1_rel.o lse_ldset1_acq_rel.o lse_ldset2_relax.o lse_ldset2_acq.o lse_ldset2_rel.o lse_ldset2_acq_rel.o lse_ldset4_relax.o lse_ldset4_acq.o lse_ldset4_rel.o lse_ldset4_acq_rel.o lse_ldset8_relax.o lse_ldset8_acq.o lse_ldset8_rel.o lse_ldset8_acq_rel.o aarch64.o absvdi2.o absvsi2.o addtf3.o addvdi3.o addvsi3.o clzdi2.o clzsi2.o cmpdi2.o comparetf2.o ctzdi2.o ctzsi2.o divdc3.o divsc3.o divtf3.o extenddftf2.o extendhfsf2.o extendsftf2.o fp_mode.o fixtfdi.o fixtfsi.o fixtfti.o fixunstfdi.o fixunstfsi.o fixunstfti.o floatditf.o floatsitf.o floatunditf.o floatunsitf.o int_util.o muldc3.o mulsc3.o multc3.o multf3.o mulvdi3.o mulvsi3.o negdf2.o negdi2.o negsf2.o negvdi2.o negvsi2.o paritydi2.o paritysi2.o popcountdi2.o popcountsi2.o powitf2.o subtf3.o subvdi3.o subvsi3.o truncdfhf2.o truncsfhf2.o trunctfdf2.o trunctfsf2.o ucmpdi2.o atomic_flag_clear.o atomic_flag_clear_explicit.o atomic_flag_test_and_set.o atomic_flag_test_and_set_explicit.o atomic_signal_fence.o atomic_thread_fence.o ```
tgross35 commented 3 months ago

Hm, could you open this issue in the main rust repo at https://github.com/rust-lang/rust? Those files may have originated from compiler-builtins but nothing version-dependent should have changed in this repo.

(unless https://github.com/rust-lang/compiler-builtins/pull/590 had something to do with it? Or the weak linkage change)

Augustyniak commented 3 months ago

Thanks for the suggestion. I updated the description of the issue with more details and opened https://github.com/rust-lang/rust/issues/128419.

tgross35 commented 3 months ago

Those PRs I linked also didn't get into rust-lang/rust until a couple days ago so wouldn't be in 1.80. I don't think there is a compiler-builtins update between 1.79 and 1.80 (but will have to double check).

Reflejo commented 3 months ago

Narrowed down the problem. The problem is that after this change cc-rs stopped looking at rustc deployment target (e.g. rustc --target aarch64-apple-ios-sim --print deployment-target) in favor of just defaulting to the hosts' platform version (e.g. xcrun --show-sdk-platform-version --sdk iphonesimulator) when IPHONEOS_DEPLOYMENT_TARGET is not set.

So even if the rest of rust is doing the right thing defaulting to 10.0, when std includes compiler-builtins with the c feature, the units in the compiled libcompiler-rt.a archive have minos equal to your host tooling and when included, the whole library now is assumed to have that min deploy target.

I can think on two options here:

  1. Set IPHONEOS_DEPLOYMENT_TARGET in the ci job that builds the assets to 14.0 (this is the minimum cc-rs would take). or
  2. Bump rustc min targets to something more realistic and get cc-rs back to check those numbers.