rust-lang/compiler-builtins

"was built for iOS 16.4" warning

Augustyniak opened this issue · 6 comments

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

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 #590 had something to do with it? Or the weak linkage change)

Thanks for the suggestion. I updated the description of the issue with more details and opened rust-lang/rust#128419.

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).

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.