Goal
Contribute riscv64 wheel support upstream to jcrist/msgspec so that pip install msgspec works out of the box on RISC-V 64-bit Linux systems without building from source.
Current State
- This fork ships a prebuilt
linux_riscv64 wheel (v0.20.0) built natively on a BananaPi F3 (SpacemiT K1, rv64imafdcv, 8 cores @ 1.6 GHz)
- Upstream (jcrist/msgspec) does not publish riscv64 wheels on PyPI
- Users on riscv64 must either build from source (C (setuptools/meson), can take 2-60 min depending on package) or use our PEP 503 index
Upstream Approach
The preferred path is adding riscv64 to the upstream project's CI wheel build matrix. Two main strategies:
Option A: cibuildwheel with QEMU (recommended for most projects)
- Add
linux_riscv64 to the CIBW_ARCHS_LINUX list in the existing cibuildwheel config
- Uses QEMU emulation on GitHub Actions runners (x86_64 host)
- Supported since cibuildwheel 2.21+ with
manylinux_2_39_riscv64 images
- Slower than native (~5-20x) but requires no hardware
Option B: Self-hosted native runners
- Use actual riscv64 hardware as GitHub Actions runners
- Faster builds, tests run on real hardware
- Requires runner infrastructure (we have two BananaPi F3 boards available)
Option C: Cross-compilation
- For Rust/maturin packages:
maturin build --target riscv64gc-unknown-linux-gnu
- For C/C++ packages: cross-compile with riscv64 GCC toolchain
- Fastest CI time but may miss runtime issues
What We Can Provide in the Upstream PR
Context
- PyPI riscv64 wheel ecosystem is growing:
manylinux_2_39_riscv64 landed in pypa/manylinux (2025), auditwheel supports riscv64, and cibuildwheel can target it
- Several major packages already ship riscv64 wheels: aiohttp, yarl, regex, markupsafe, charset-normalizer, rpds-py
- RISC-V hardware is shipping (SiFive, SpacemiT, Sophgo SG2044) with users running Python workloads
- This fork is part of a set of 32 forks building riscv64 wheels for the Python ML/AI stack: https://github.com/gounthar/riscv64-python-wheels
References
Goal
Contribute riscv64 wheel support upstream to jcrist/msgspec so that
pip install msgspecworks out of the box on RISC-V 64-bit Linux systems without building from source.Current State
linux_riscv64wheel (v0.20.0) built natively on a BananaPi F3 (SpacemiT K1, rv64imafdcv, 8 cores @ 1.6 GHz)Upstream Approach
The preferred path is adding
riscv64to the upstream project's CI wheel build matrix. Two main strategies:Option A: cibuildwheel with QEMU (recommended for most projects)
linux_riscv64to theCIBW_ARCHS_LINUXlist in the existing cibuildwheel configmanylinux_2_39_riscv64imagesOption B: Self-hosted native runners
Option C: Cross-compilation
maturin build --target riscv64gc-unknown-linux-gnuWhat We Can Provide in the Upstream PR
Context
manylinux_2_39_riscv64landed in pypa/manylinux (2025), auditwheel supports riscv64, and cibuildwheel can target itReferences