Skip to content

Add aarch64 (ARM64) Linux wheel support for netgen-occt, netgen-mesher, and ngsolve #239

@zalo

Description

@zalo

Request

Please add manylinux_2_28_aarch64 wheels for netgen-occt, netgen-mesher, and ngsolve on PyPI. Currently only x86_64 Linux, macOS (x86_64 + arm64), and Windows amd64 wheels are published.

aarch64 Linux is increasingly common — AWS Graviton, Ampere Altra, Raspberry Pi 5, Apple Silicon Linux VMs, and NVIDIA Grace. Projects that depend on netgen/ngsolve (e.g. build123d) cannot support aarch64 Linux users today.

Evidence that it should work

  • macOS arm64 wheels already ship (netgen_occt-7.8.1-py3-none-macosx_11_0_arm64.whl), proving the C++ code compiles and runs on ARM.
  • Arch Linux ARM packages OCCT 7.9.3 for aarch64 as a standard community package.
  • OCCT officially supports ARM targets (Android arm64-v8a, Apple M1).
  • OpenBLAS supports aarch64 and can substitute for Intel MKL.

What would need to change

Based on reviewing the build scripts in this repo:

netgen-occt

The pre-built OCCT shared libraries need to be compiled in a manylinux_2_28_aarch64 container and packaged into a py3-none-manylinux_2_28_aarch64 wheel.

netgen-mesher (tests/build_pip.sh)

  • Use quay.io/pypa/manylinux_2_28_aarch64 Docker image instead of manylinux_2_28_x86_64
  • Fix hardcoded openmpi-x86_64 / mpich-x86_64 include paths → use openmpi-aarch64 / mpich-aarch64
  • Remove or skip NETGEN_ARCH=avx2 (AVX2 is x86-only; setup.py already handles this via env var)
  • Fix x86_64 ccache RPM download → use aarch64 RPM
  • Fix wheel platform tag rename from manylinux_2_17_x86_64manylinux_2_28_aarch64

ngsolve

  • Same Docker image and path fixes as netgen-mesher
  • Replace Intel MKL dependency with OpenBLAS (MKL is x86-only)

CI

  • Add an aarch64 Linux runner (self-hosted, or GitHub Actions ubuntu-24.04-arm, or QEMU emulation in existing CI)

Context

This came up while adding NGSolve interoperability to build123d (PR #1265). build123d's upcoming 0.11.0 release will support aarch64 Linux, but the ngsolve integration cannot work on that platform without these wheels.

Happy to help with testing if aarch64 builds become available.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions