Update environment variables for Android cross-compilation support#2825
Merged
Update environment variables for Android cross-compilation support#2825
Conversation
messense
reviewed
Nov 13, 2025
messense
reviewed
Nov 13, 2025
…_dir is already specified in the generated pyo3 config; Co-authored-by: messense <messense@icloud.com>
Co-authored-by: messense <messense@icloud.com>
This was referenced Dec 22, 2025
Merged
messense
pushed a commit
that referenced
this pull request
Dec 30, 2025
## Motivation Enhancement #2803 #2825 fixed a bug so that Maturin can now compile a wheel for Android. However, the generated wheel's tag name is incorrect. This is because Maturin lacks support for Android tags and treats Android as Linux, generating a Linux tag. Python's Android wheel tags are strictly defined. See [PEP738](https://peps.python.org/pep-0738/#packaging) This is Log. https://github.com/ririv/android-wheels/actions/runs/20456436296/job/58779454736 At the end of the wheel building process, we can see: `Successfully built XXXXX-linux_aarch64.whl` It must be renamed manually or by setting the `_PYTHON_HOST_PLATFORM `environment variable to obtain the correct tag name. ## Changes - **Android Platform Tag Support**: Implemented the `android_{api}_{arch}` platform tag generation logic within the Linux match arm of `get_platform_tag` in `src/build_context.rs`. - **Automatic API Level Detection**: - Implemented a prioritized search for the Android API level: 1. `ANDROID_API_LEVEL` environment variable. 2. `linker` path resolution via `cargo-config2` (handling `.cargo/config.toml` and `CARGO_TARGET_<TRIPLE>_LINKER`). 3. `CC_<TARGET>` and `CC` environment variables. - Utilizes regex `android(\d+)` to accurately extract the version number from toolchain paths. - Explicit error reporting if no API level can be determined. - **Strict Architecture Mapping**: - Maps Rust target architectures to standard Android ABIs: `armeabi_v7a`, `arm64_v8a`, `x86`, and `x86_64`. - Return a `bail!` error to prevent incorrect tag generation for unsupported architectures.
bmwiedemann
pushed a commit
to bmwiedemann/openSUSE
that referenced
this pull request
Jan 8, 2026
https://build.opensuse.org/request/show/1325799 by user mia + anag_factory - Update to version 1.11.2 (version bump only) - Changes in 1.11.1: * Fix compiled artifacts being excluded by source path matching gh#PyO3/maturin#2910 * Better error reporting for missing interpreters gh#PyO3/maturin#2918 * Ignore unreadable excluded directories gh#PyO3/maturin#2916 - Changes in 1.11.0: * Correct tagging for x86_64 iOS simulator wheels. gh#PyO3/maturin#2851 * Bump MSRV to 1.85.0 and use Rust 2024 edition gh#PyO3/maturin#2850 * Upgrade goblin to 0.10 gh#PyO3/maturin#2853 * Set entry type when adding to the tar file gh#PyO3/maturin#2859 * Split up module_writer.rs code for code organization gh#PyO3/maturin#2857 * Update environment variables for Android cross-compilation support gh#PyO3/maturin#2825 * Upgrade some
13 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.
Fix #2810
Enhancement #2803
In fact, to successfully compile Python extension modules written with PYO3 on Android,
we must not only set
PYO3_CROSS_LIB_DIR(refer to PEP738),but also configure environment variables for the Android NDK and related utilities like rustup and cargo.
rustup target add aarch64-linux-androidlinkervariable to point to the Android NDK's clang.ccmay also need configuration.However, this is not an inherent issue with Maturin itself. These environment variables can be configured externally, and Cargo within Maturin will read them.
This fix ensures that after properly configuring the relevant environment variables, we can successfully cross-compile to an Android-targeted wheel.