-
Notifications
You must be signed in to change notification settings - Fork 0
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
android: Set SDK/API level via version-suffxed --target
triple
#24
Conversation
* Initial support for x86_64-linux-android targets. * Improve target selection for clang link phase. * Only add clang target if it differs from the host.
This seems to work on small test-apps, but fails on our main app with:
I did not run into that before testing, perhaps because I upgraded the |
A lot of chasing later, I got this figured out. Wasn't going to settle for a I couldn't initially reproduce this with Searching for it, it's supposedly an intended change where ELF TLS is automatically enabled for SDK level Via golang/go#69109 (comment) we also see that the I don't know if we can opt-out of this with a compiler flag, but there are a few things we can do:
|
I would be fine with the git reference fix so that we can move on and actually get further into our certification process. Would be good to also share this information with the xbuild issue to get some outside eyes on it (if anyone even does that 👀 ).
I'm unsure what kind of impact this would have but could be an option as well, I'll leave the decision up to you. |
@maxded thanks, that's the way I'm leaning too. Using that commit is quite a divergence so I might just cherry-pick it to an |
@maxded note that this repository is public (it is our fork of I'm only opening the PR here and on the upstream side because we have quite a divergent branch where none of the new features have been written/PRd against upstream. I would have to go through everything that was pushed and PR it upstream so that we can get rid of it, or at the very least rebase when all these fixes land upstream. |
We haven't set the SDK/API level via the `__ANDROID_API__` define for a very long time and so far got away with it. However, while debugging why `backtrace` (and by extension Rust `std` which reuses that crate) wasn't generating symbolicated stacktraces in `panic_log`, and why `findshlibs` wasn't providing the list of loaded libraries to `sentry`, we found that both rely on expanding the `__ANDROID_API__` define via compiling a small C file via `cc` to make the code conditional on SDK/API >= 21: gimli-rs/findshlibs#65 rust-lang/backtrace-rs#415 (It would have been lovely if these crates emitted a `cargo:warning` when the define wasn't set at all, indicating an "incomplete" cross-compiler setup, and/or looked at the runtime Android API version via something like rust-mobile/ndk#479.) Note that `backtrace 0.3.74` / Rust 1.82 (rust-lang/rust@0763a3a) no longer rely on this because Rust 1.82 bumped the minimum SDK/API level to 21: rust-lang/backtrace-rs#656 We could set this define directly, or rely on `clang` to set it for us by appending the SDK/API level to the target triple, of the form `<arch>-linux-android<sdk level>`. The latter is more common. Keep in mind that the `cc` crate adds an unversioned `--target=<arch>-linux-android` to the command line arguments as well, but clang seems to deduplicate them (or look at the latter `--target` which contains our version). Note that this effectively reverts rust-mobile@32efed6 because we must now always pass the SDK level via the triple again, even if the host also happens to be Android with the same architecture.
We don't use the template and its `wry` feature in this fork. Remove it now that `ubuntu-latest` no longer has the necessary packages which requires a tedious and complicated upgrade of the `wry` "nonsense". This is attempted upstream at: https://togithub.com/rust-mobile/xbuild/pull/210
bb87df9
to
2df97d7
Compare
Fixes https://github.com/Traverse-Research/evolve/issues/1058. Our version of rust-mobile#209, see that PR for all details.