Problem
stim does not publish prebuilt wheels for aarch64 (arm64) Linux (e.g. NVIDIA DGX Spark devices). Users on these platforms currently have to build from source via the sdist.
Suggested fix
.github/workflows/ci.yml's build_dist job matrix only includes manylinux_x86_64 entries for Linux. GitHub now offers native ubuntu-24.04-arm hosted runners, so manylinux_aarch64 wheels can be built without QEMU/binfmt emulation.
No changes are needed in setup.py: it already skips the x86-only SSE2 extension module when built on non-x86 architectures (see _get_extensions()), falling back to the base extension set — so an aarch64 build should produce a working wheel with no other code changes.
A minimal 6-line addition to the matrix would be:
{os: ubuntu-24.04-arm, dist: cp310-manylinux_aarch64},
{os: ubuntu-24.04-arm, dist: cp311-manylinux_aarch64},
{os: ubuntu-24.04-arm, dist: cp312-manylinux_aarch64},
{os: ubuntu-24.04-arm, dist: cp313-manylinux_aarch64},
{os: ubuntu-24.04-arm, dist: cp314-manylinux_aarch64},
placed alongside the existing x86_64 manylinux entries, e.g.:
{os: ubuntu-24.04, dist: cp313-manylinux_x86_64},
{os: ubuntu-24.04, dist: cp314-manylinux_x86_64},
+ {os: ubuntu-24.04-arm, dist: cp310-manylinux_aarch64},
+ {os: ubuntu-24.04-arm, dist: cp311-manylinux_aarch64},
+ {os: ubuntu-24.04-arm, dist: cp312-manylinux_aarch64},
+ {os: ubuntu-24.04-arm, dist: cp313-manylinux_aarch64},
+ {os: ubuntu-24.04-arm, dist: cp314-manylinux_aarch64},
+
# manylinux_i686 disabled because scipy isn't prebuilt and fails to build.
The existing CIBW_BUILD, CIBW_TEST_REQUIRES, CIBW_TEST_COMMAND, and job steps are architecture-agnostic and should work unchanged for the new arm64 runner entries.
Problem
stimdoes not publish prebuilt wheels for aarch64 (arm64) Linux (e.g. NVIDIA DGX Spark devices). Users on these platforms currently have to build from source via the sdist.Suggested fix
.github/workflows/ci.yml'sbuild_distjob matrix only includesmanylinux_x86_64entries for Linux. GitHub now offers nativeubuntu-24.04-armhosted runners, somanylinux_aarch64wheels can be built without QEMU/binfmt emulation.No changes are needed in
setup.py: it already skips the x86-only SSE2 extension module when built on non-x86 architectures (see_get_extensions()), falling back to the base extension set — so an aarch64 build should produce a working wheel with no other code changes.A minimal 6-line addition to the matrix would be:
placed alongside the existing x86_64 manylinux entries, e.g.:
{os: ubuntu-24.04, dist: cp313-manylinux_x86_64}, {os: ubuntu-24.04, dist: cp314-manylinux_x86_64}, + {os: ubuntu-24.04-arm, dist: cp310-manylinux_aarch64}, + {os: ubuntu-24.04-arm, dist: cp311-manylinux_aarch64}, + {os: ubuntu-24.04-arm, dist: cp312-manylinux_aarch64}, + {os: ubuntu-24.04-arm, dist: cp313-manylinux_aarch64}, + {os: ubuntu-24.04-arm, dist: cp314-manylinux_aarch64}, + # manylinux_i686 disabled because scipy isn't prebuilt and fails to build.The existing
CIBW_BUILD,CIBW_TEST_REQUIRES,CIBW_TEST_COMMAND, and job steps are architecture-agnostic and should work unchanged for the new arm64 runner entries.