feat: support armeabi-v7a for Python 3.13/3.14#87
Merged
Conversation
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.
Companion to flet-dev/python-build#25, which added
armeabi-v7a(32-bit ARM) runtimes for Python 3.13/3.14. That release (20260629) now ships["arm64-v8a", "x86_64", "armeabi-v7a"]for all three minors, and dropsx86(32-bit Intel) everywhere.This PR teaches mobile-forge to consume that: it makes the Android ABI set manifest-driven here too, so the same single source of truth flows across both repos and a future ABI change upstream needs only a release-pin bump here — no hardcoded list to keep in sync.
Net effect: forge now builds armeabi-v7a wheels for 3.13/3.14 (it already did for 3.12), and stops building the now-unshipped x86.
Changes
setup.shPYTHON_BUILD_RELEASE20260614→20260629.resolve_android_abis()— readspythons.<minor>.android_abisfrom the pinned release's manifest using the same 3-tier parser asresolve_full_version(jq → python3 → scoped sed, cached underdownloads/). ExportsANDROID_ABIS(env-overridable for thePYTHON_BUILD_RUN_IDbranch-validation path; also pushed toGITHUB_ENV).$ANDROID_ABISinstead of the hardcodedminor < 13 → check armeabi+x86gate.src/forge/cross.py—ANDROID_HOST_ARCHSreads$ANDROID_ABIS(falls back to("arm64-v8a", "armeabi-v7a", "x86_64")when forge runs without sourcing setup.sh), replacing the>=3.13 → 64-bit-onlyversion gate.make_dep_wheels.py—get_targets("android")reads$ANDROID_ABIStoo, so the support-tree dep wheels (openssl/libffi/sqlite/xz/…) get produced for armeabi-v7a on 3.13/3.14..github/workflows/build-wheels-version.yml— drop the now-deadi686-linux-androidRust target (arm-linux-androideabifor armeabi was already present).No change needed elsewhere:
cross.pyalready maps armeabi-v7a →android-arm(3.13+ official-build naming) and the wheel tag is the version-independentandroid_24_armeabi_v7a; the CI matrix keys onandroid/iOS(per-ABI fan-out happens inside forge); the support-tree dep-wheel drop step is ABI-agnostic.Behavioral note: x86 is dropped
20260629ships nox86runtime for any minor (the mobile-forge tarball istar install supportright afterbuild-all.sh, which builds only the manifest's ABIs). So bumping the pin necessarily stops x86 wheel production for 3.12 too. Already-published 3.12 x86 wheels become orphaned on the index — harmless, since flet/serious_python don't ship 32-bit Intel.Validation
Verified locally:
arm64-v8a x86_64 armeabi-v7afor 3.12/3.13/3.14 against the real 20260629 manifest.ANDROID_HOST_ARCHS/get_targetshonor$ANDROID_ABISand fall back correctly._platform_identifierandroid-arm, tagandroid_24_armeabi_v7a.install/android/<abi>/python-<full>/bin/python<minor>) matches the tarball layout.bash -n+py_compileclean; no new lint/format findings.Full validation comes via the follow-up
packages=ALLbuild across python versions.