Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"was built for iOS 16.4" warning #650

Open
Augustyniak opened this issue Jul 31, 2024 · 4 comments · May be fixed by rust-lang/rust#133092
Open

"was built for iOS 16.4" warning #650

Augustyniak opened this issue Jul 31, 2024 · 4 comments · May be fixed by rust-lang/rust#133092

Comments

@Augustyniak
Copy link

Augustyniak commented Jul 31, 2024

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
Copy link
Contributor

tgross35 commented Jul 31, 2024

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)

@Augustyniak
Copy link
Author

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

@Augustyniak Augustyniak changed the title "was built for iOS 16.4 error" error "was built for iOS 16.4" warning Jul 31, 2024
@tgross35
Copy link
Contributor

tgross35 commented Jul 31, 2024

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
Copy link

Reflejo commented Aug 4, 2024

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.

Zalathar added a commit to Zalathar/rust that referenced this issue Nov 29, 2024
…t, r=Mark-Simulacrum

Always set the deployment target when building std

`cc` has [a bug/feature](rust-lang/cc-rs#1171) (I guess depending on how you look at it) where the default deployment target is taken from the SDK instead of from `rustc`. This causes `compiler-builtins` to build `compiler-rt` with the wrong deployment target on iOS.

I've been meaning to change how `cc` works in this regard, but that's a lengthy process, so let's fix it in bootstrap for now.

The behaviour be seen locally with `./x build library --set build.optimized-compiler-builtins=true` for various target triples, and then inspecting with `otool -l build/host/stage1/lib/rustlib/*/lib/libcompiler_builtins-*.rlib | rg 'minos|version'`. I have added a rmake test that ensures that we now have the same version everywhere.

Fixes rust-lang#128419
Fixes rust-lang/compiler-builtins#650
See also rust-lang/cargo#13115

`@rustbot` label O-apple
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants