CI: Detect Android API from the toolchain#5280
Open
10ne1 wants to merge 4 commits into
Open
Conversation
Add "android" to the Versions platform-version detection. Knowing it allows version-gating the Android test skips instead of hardcoding them. The level can appear in two macros: 1. Old clang defines __ANDROID_API__ directly as an integer. 2. Modern clang defines it as an alias of __ANDROID_MIN_SDK_VERSION__. A toolchain whose target triple carries no API level defines neither number, so nothing is parsed and the level stays undetected. An undetected level (android == None) causes its consumers to treat it conservatively: every API-gated skip stays active, as if the toolchain targeted the oldest level possible. Nothing consumes the value yet, so it has no effect on what is tested. Next commits will add users for it. Suggested-by: Trevor Gross <tg@trevorgross.com> Assisted-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
Convert the existing hardcoded "added in API level N" test skips into gates on the detected API level added in the previous commit. Items stay skipped when the toolchain builds below their introduction level (or when no level was detected) and get tested once the toolchain provably targets a high enough level. There are no test coverage changes. Assisted-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
Bionic implements the termios API as static inline functions in <termios.h> until API 28 turns them into real libc.so symbols, so below that level the C-side function address is the header's inline, never matching the symbol Rust links against. Skip the function pointer identity check (the only check ctest generates for a foreign function) for the termios family below API 28. This surfaced when pinning the C test compilation to a real API level (see next commit). At level 24, e.g. on arm, all thirteen termios pointer comparisons fail. It is ordered before the pin commit to keep commits bisectable. Assisted-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
Each CC wrapper's name (e.g. x86_64-linux-android28-clang) tells clang which API to target: clang infers "-target" from the invoked binary name whenever none is given explicitly. Ours said 28 everywhere, which only reflects the NDK's link-time stub level, not the level of the bionic that actually runs the tests: arm emulators and the x86_64 system image android-sysimage.sh installs (from x86_64-24_r07.zip) are all API 24. This mismatch was invisible before because the tests were hardcoded to skip higher API levels regardless of the toolchain; it surfaced after extracting the real API level from the toolchain and wiring in the dynamic skip mechanism (previous commits) instead of hardcoding. With the toolchain matching the runtime, detection resolves and the new gated skips activate. Raising an image's runtime later only needs its own wrapper name bumped. Assisted-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
Collaborator
|
Some changes occurred in an Android module cc @maurer |
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This is a follow-up to PR #5269 to address @tgross35 request to detect the Android API levels from the toolchain instead of hardcoding it in the tests.
The first 2 commits address @tgross35 request, while the last two fix 2 separate pre-existing uncovered issues (details in the commit messages).
A libc-0.2 backport might be desired to get the new Android CI infra there as well, but I'll leave it up to the maintainers / reviewers to decide.
Sources
No library/API changes; this is test-harness and CI-only.
Useful references:
__ANDROID_API__/__ANDROID_MIN_SDK_VERSION__/__ANDROID_API_FUTURE__macros:https://android.googlesource.com/platform/bionic/+/refs/heads/main/libc/include/android/api-level.h
<triple><api>-clang):https://developer.android.com/ndk/guides/other_build_systems
get_compiler()skips adding its own --target when it recognizes this naming convention, pinned at the version this repo'sCargo.locklocks to):https://github.com/rust-lang/cc-rs/blob/cc-v1.2.66/src/lib.rs#L4401
Checklist
CI-only change: no
src/orlibc-test/semvermodifications.Relevant tests in(N/A)libc-test/semverhave been updatedNo placeholder or unstable values(N/A)AI disclosure
This PR was written with the help of Claude Code, but was not vibe-coded. I'm not a fan of vibe-coding.
I used AI to better understand the codebase myself (asked it a lot of questions), review both my code and any code generated by AI, used it especially to detect bugs and corner-cases and suggest fixes, however I very carefully reviewed & edited each code/comment lines, the commit messages and so on, until I was satisfied with the result.
Even this PR description was written entirely by myself and only reviewed by AI for errors.