Skip to content

Add cross-platform wheel builds (macOS ARM64, Linux x86_64/aarch64)#99

Open
skypher wants to merge 16 commits intogoogle:masterfrom
rmc-infosec:add-cross-platform-wheels
Open

Add cross-platform wheel builds (macOS ARM64, Linux x86_64/aarch64)#99
skypher wants to merge 16 commits intogoogle:masterfrom
rmc-infosec:add-cross-platform-wheels

Conversation

@skypher
Copy link

@skypher skypher commented Jan 9, 2026

Summary

Add automated wheel builds for macOS ARM64 and Linux (x86_64 + aarch64), addressing #52.

Platforms

Platform Build Method Status
macOS ARM64 cibuildwheel + Homebrew LLVM Ready
Linux x86_64 Docker (builds LLVM) Ready
Linux aarch64 Docker + QEMU Ready

Known Limitations

  • macOS wheels require Homebrew LLVM at runtime (brew install llvm) due to libc++ linkage. This is documented in README.md.
  • Linux builds are slow (~30-180 min) because LLVM must be built from source in Docker.

Workflow Structure

On tag push (v*):

  1. wheels.yaml - builds macOS ARM64 + sdist
  2. linux-wheels.yaml - builds Linux x86_64 + aarch64
  3. release.yaml - waits for both, then publishes all to PyPI

Changes

  • pyproject.toml - cibuildwheel configuration + build-system requirements
  • .github/workflows/wheels.yaml - macOS ARM64 builds
  • .github/workflows/linux-wheels.yaml - Linux Docker builds
  • .github/workflows/release.yaml - unified PyPI publishing
  • deployment/Dockerfile.aarch64 - ARM64 Linux container
  • README.md - documents macOS Homebrew dependency

Testing

  • macOS ARM64 wheels built and tested on M1 Mac
  • CI workflows pass on PR

Fixes #52

skypher added 16 commits January 9, 2026 02:11
Add support for building wheels on:
- Linux x86_64 (existing)
- Linux aarch64 (new)
- macOS x86_64 (new)
- macOS arm64 (new)

Changes:
- pyproject.toml: Add [build-system] and [tool.cibuildwheel] config
- .github/workflows/wheels.yaml: New workflow for building and publishing
- STATUS.md: Document testing results and implementation plan

Tested on macOS 15.6 ARM64 (M1) with Python 3.12 and 3.13.

Key finding: macOS builds require Homebrew LLVM and must link against
Homebrew's libc++ to avoid symbol mismatch with system libc++.

Addresses google#52
- Add deployment/Dockerfile.aarch64 for ARM64 Linux builds
- Add .github/workflows/linux-wheels.yaml for Docker-based builds
- Linux builds require LLVM from source (~30-60 min x86_64, ~2-3h aarch64)
- Update STATUS.md with workflow documentation
- Add 'wheel' to build-system requires
- Document Homebrew runtime dependency in workflow header
- Remove unused Linux cibuildwheel config (use Docker instead)
- Clean up misleading comments about multi-platform support
- Replace UTF-8 ellipsis character with ASCII '...' in pyproject.toml
- Document macOS ARM64 Homebrew runtime dependency in README
- Pin aarch64 LLVM to same commit as x86_64 (0982db188b...) for
  reproducible builds and consistent libFuzzer versions
- Add tag-push trigger to linux-wheels.yaml so Linux wheels build
  on releases automatically
- Add publish job to linux-wheels.yaml so Linux wheels are uploaded
  to PyPI alongside macOS wheels from the main workflow
- Remove publish jobs from wheels.yaml and linux-wheels.yaml
- Add release.yaml that waits for all build workflows to complete
  before downloading artifacts and publishing to PyPI
- Prevents partial PyPI releases when one workflow fails

On tag push, all three workflows run:
1. wheels.yaml builds macOS + sdist
2. linux-wheels.yaml builds Linux x86_64 + aarch64
3. release.yaml waits for both, then publishes everything
- Add checks:read permission for wait-for-builds job
- Use --commit instead of --branch for gh run list (--branch
  doesn't work for tag refs, would return wrong/no runs)
- Fix stale comment in linux-wheels.yaml header
- Add 240-minute timeout to wait-for-builds job (aarch64 build
  can take up to 180 min, plus buffer for other builds)
- Add skip-existing: true to PyPI publish step so failed releases
  can be retried without manual cleanup
@potiuk
Copy link

potiuk commented Jan 10, 2026

Nice. We really need it in Airfow!

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.

Generate wheels for all platforms via cibuildwheel

2 participants

Comments