Skip to content

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

Open
johnnynunez wants to merge 2 commits into
DanielBok:masterfrom
johnnynunez:feat/arm64-wheels
Open

ci: build aarch64 manylinux wheels on ubuntu-24.04-arm runners#52
johnnynunez wants to merge 2 commits into
DanielBok:masterfrom
johnnynunez:feat/arm64-wheels

Conversation

@johnnynunez

Copy link
Copy Markdown

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
Author

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

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.

2 participants