Skip to content

feat: support armeabi-v7a for Python 3.13/3.14#87

Merged
ndonkoHenri merged 3 commits into
mainfrom
armeabi-v7a
Jun 29, 2026
Merged

feat: support armeabi-v7a for Python 3.13/3.14#87
ndonkoHenri merged 3 commits into
mainfrom
armeabi-v7a

Conversation

@ndonkoHenri

Copy link
Copy Markdown

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 drops x86 (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.sh
    • Bump PYTHON_BUILD_RELEASE 2026061420260629.
    • New resolve_android_abis() — reads pythons.<minor>.android_abis from the pinned release's manifest using the same 3-tier parser as resolve_full_version (jq → python3 → scoped sed, cached under downloads/). Exports ANDROID_ABIS (env-overridable for the PYTHON_BUILD_RUN_ID branch-validation path; also pushed to GITHUB_ENV).
    • Android support-tree verification now loops $ANDROID_ABIS instead of the hardcoded minor < 13 → check armeabi+x86 gate.
  • src/forge/cross.pyANDROID_HOST_ARCHS reads $ANDROID_ABIS (falls back to
    ("arm64-v8a", "armeabi-v7a", "x86_64") when forge runs without sourcing setup.sh), replacing the >=3.13 → 64-bit-only version gate.
  • make_dep_wheels.pyget_targets("android") reads $ANDROID_ABIS too, 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-dead i686-linux-android Rust target (arm-linux-androideabi for armeabi was already present).

No change needed elsewhere: cross.py already maps armeabi-v7a → android-arm (3.13+ official-build naming) and the wheel tag is the version-independent android_24_armeabi_v7a; the CI matrix keys on android/iOS (per-ABI fan-out happens inside forge); the support-tree dep-wheel drop step is ABI-agnostic.

Behavioral note: x86 is dropped

20260629 ships no x86 runtime for any minor (the mobile-forge tarball is tar install support right after build-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:

  • All three manifest-parser tiers (jq / python3 / sed) return arm64-v8a x86_64 armeabi-v7a for 3.12/3.13/3.14 against the real 20260629 manifest.
  • ANDROID_HOST_ARCHS / get_targets honor $ANDROID_ABIS and fall back correctly.
  • armeabi-v7a → _platform_identifier android-arm, tag android_24_armeabi_v7a.
  • The support-tree binary path the verify loop checks (install/android/<abi>/python-<full>/bin/python<minor>) matches the tarball layout.
  • bash -n + py_compile clean; no new lint/format findings.

Full validation comes via the follow-up packages=ALL build across python versions.

@ndonkoHenri ndonkoHenri merged commit 0c0af3b into main Jun 29, 2026
15 of 33 checks passed
@ndonkoHenri ndonkoHenri deleted the armeabi-v7a branch June 29, 2026 22:25
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 this pull request may close these issues.

1 participant