Skip to content

ci: build aarch64 manylinux wheels on ubuntu-24.04-arm runners#52

Merged
DanielBok merged 3 commits into
DanielBok:masterfrom
johnnynunez:feat/arm64-wheels
Jul 16, 2026
Merged

ci: build aarch64 manylinux wheels on ubuntu-24.04-arm runners#52
DanielBok merged 3 commits into
DanielBok:masterfrom
johnnynunez:feat/arm64-wheels

Conversation

@johnnynunez

Copy link
Copy Markdown
Contributor

Motivation

nlopt currently ships no aarch64 wheels on PyPI, making it uninstallable (or forcing slow/failing source builds) on ARM Linux hosts — NVIDIA DGX Spark, Jetson Thor, GH200, AWS Graviton, etc. This blocks downstream packages that depend on nlopt (e.g. dex-retargeting, used by NVIDIA Isaac Teleop / LeRobot) on ARM.

GitHub now provides free ubuntu-24.04-arm runners for public repos, so wheels can be built natively — no QEMU, no cross-compilation.

Changes

  1. build_wheels_unix: add ubuntu-24.04-arm to the matrix + CIBW_MANYLINUX_AARCH64_IMAGE: quay.io/pypa/manylinux_2_28_aarch64.
  2. test-wheels: add ubuntu-24.04-arm to the matrix (the existing wheel-discovery logic already handles it: runner.os=Linuxlin, chunk = matrix os).
  3. Bump x86_64 image to manylinux_2_28: numpy no longer publishes manylinux2014 wheels, so CIBW_BEFORE_BUILD: pip install numpy builds numpy from source inside the container and fails manylinux2014's gcc 10.2.1 (NumPy requires GCC >= 10.3). This currently breaks the ubuntu-latest job on master too; manylinux_2_28 ships a modern toolchain and matches the aarch64 image family.

Evidence

Full CI run on my fork — all build + all 25 test jobs green (cp310–cp314 × 5 platforms): https://github.com/johnnynunez/nlopt-python/actions/runs/28717151621

Produced artifacts include nlopt-2.10.0-cp3{10..14}-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

Additionally verified on real ARM hardware (NVIDIA DGX Spark, aarch64, Python 3.12): the cp312 wheel installs with numpy 2.5.1 and solves the NLopt tutorial problem (LD_MMA, two inequality constraints) to the exact optimum (1/3, 8/27).

Note: the Deploy packages job failed only on my fork for the expected reason (no PyPI credentials there); it is release-gated and unaffected by this change.

nlopt ships no aarch64 wheels on PyPI, forcing source builds (or making
installs impossible) on ARM hosts like NVIDIA DGX Spark, Jetson Thor and
GH200. GitHub now provides free ubuntu-24.04-arm runners for public repos,
so add them to the cibuildwheel matrix (manylinux_2_28_aarch64 image) and
to the wheel test matrix. The existing test-step file discovery already
matches (runner.os=Linux -> 'lin', chunk=ubuntu-24.04-arm).
numpy stopped publishing manylinux2014 wheels, so pip builds it from
source inside the cibuildwheel container; manylinux2014's gcc 10.2.1
fails numpy's GCC>=10.3 check. manylinux_2_28 ships a modern toolchain
(same image family already used for aarch64).
@johnnynunez

Copy link
Copy Markdown
Contributor Author

@DanielBok could you review, merge and deploy new version release for all arm users?

@charleysaintNV

Copy link
Copy Markdown
Contributor

@DanielBok can we get the token in this failing job updated

@DanielBok
DanielBok merged commit 35fbd05 into DanielBok:master Jul 16, 2026
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.

3 participants