diff --git a/README.md b/README.md
index 05bf7ef5..ef2372f6 100644
--- a/README.md
+++ b/README.md
@@ -28,20 +28,17 @@ What does it do?
| CPython 3.6 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ |
| CPython 3.7 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ |
| CPython 3.8 | ✅ | ✅ | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ |
-| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅³ | ✅ | ✅ | ✅ | ✅ |
+| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ |
| CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ |
| CPython 3.11 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ |
-| CPython 3.12⁵ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ |
+| CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ |
| PyPy 3.7 v7.3 | ✅ | N/A | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
-| PyPy 3.8 v7.3 | ✅ | ✅⁴ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
-| PyPy 3.9 v7.3 | ✅ | ✅⁴ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
-| PyPy 3.10 v7.3 | ✅ | ✅⁴ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
+| PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
+| PyPy 3.9 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
+| PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
¹ PyPy is only supported for manylinux wheels.
² Windows arm64 support is experimental.
-³ Alpine 3.14 and very briefly 3.15's default python3 [was not able to load](https://github.com/pypa/cibuildwheel/issues/934) musllinux wheels. This has been fixed; please upgrade the python package if using Alpine from before the fix.
-⁴ Cross-compilation not supported with PyPy - to build these wheels you need to run cibuildwheel on an Apple Silicon machine.
-⁵ CPython 3.12 is built by default using Python RCs, starting with cibuildwheel 2.15.
- Builds manylinux, musllinux, macOS 10.9+, and Windows wheels for CPython and PyPy
- Works on GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, CircleCI, GitLab CI, and Cirrus CI
@@ -57,18 +54,16 @@ Usage
| | Linux | macOS | Windows | Linux ARM | macOS ARM | Windows ARM |
|-----------------|-------|-------|---------|-----------|-----------|-------------|
-| GitHub Actions | ✅ | ✅ | ✅ | ✅¹ | ✅² | ✅⁴ |
-| Azure Pipelines | ✅ | ✅ | ✅ | | ✅² | ✅⁴ |
+| GitHub Actions | ✅ | ✅ | ✅ | ✅¹ | ✅ | ✅² |
+| Azure Pipelines | ✅ | ✅ | ✅ | | ✅ | ✅² |
| Travis CI | ✅ | | ✅ | ✅ | | |
-| AppVeyor | ✅ | ✅ | ✅ | | ✅² | ✅⁴ |
-| CircleCI | ✅ | ✅ | | ✅ | ✅² | |
+| AppVeyor | ✅ | ✅ | ✅ | | ✅ | ✅² |
+| CircleCI | ✅ | ✅ | | ✅ | ✅ | |
| Gitlab CI | ✅ | | ✅ | ✅¹ | | |
-| Cirrus CI | ✅ | ✅³ | ✅ | ✅ | ✅ | |
+| Cirrus CI | ✅ | ✅ | ✅ | ✅ | ✅ | |
¹ [Requires emulation](https://cibuildwheel.readthedocs.io/en/stable/faq/#emulation), distributed separately. Other services may also support Linux ARM through emulation or third-party build hosts, but these are not tested in our CI.
-² [Uses cross-compilation](https://cibuildwheel.readthedocs.io/en/stable/faq/#universal2). It is not possible to test `arm64` and the `arm64` part of a `universal2` wheel on this CI platform.
-³ [Uses cross-compilation](https://cibuildwheel.readthedocs.io/en/stable/faq/#universal2). Thanks to Rosetta 2 emulation, it is possible to test `x86_64` and both parts of a `universal2` wheel on this CI platform.
-⁴ [Uses cross-compilation](https://cibuildwheel.readthedocs.io/en/stable/faq/#windows-arm64). It is not possible to test `arm64` on this CI platform.
+² [Uses cross-compilation](https://cibuildwheel.readthedocs.io/en/stable/faq/#windows-arm64). It is not possible to test `arm64` on this CI platform.
@@ -88,7 +83,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- os: [ubuntu-20.04, windows-2019, macOS-11]
+ os: [ubuntu-latest, windows-latest, macOS-12, macOS-14]
steps:
- uses: actions/checkout@v4
diff --git a/docs/extra.css b/docs/extra.css
index eac0a193..d5308174 100644
--- a/docs/extra.css
+++ b/docs/extra.css
@@ -255,7 +255,7 @@ h1, h2, h3, h4, h5, h6 {
border: none;
color: inherit;
background-color: #f0f1f1;
- font-size: 100%;
+ font-size: 80%;
}
diff --git a/docs/faq.md b/docs/faq.md
index f6ca4b3a..8a4e1f78 100644
--- a/docs/faq.md
+++ b/docs/faq.md
@@ -20,11 +20,11 @@ Linux wheels are built in [`manylinux`/`musllinux` containers](https://github.co
### Building macOS wheels for Apple Silicon {: #apple-silicon}
-`cibuildwheel` supports cross-compiling `universal2` and `arm64` wheels on `x86_64` runners.
+`cibuildwheel` supports both native builds and cross-compiling between `arm64` (Apple Silicon) and `x86_64` (Intel) architectures, including the cross-compatible `universal2` format.
#### Overview of Mac architectures
-With the introduction of Apple Silicon, you now have several choices for wheels for Python 3.8+:
+You have several choices for wheels for Python 3.8+:
##### `x86_64`
@@ -68,43 +68,26 @@ Opinions vary on which of arch-specific or `universal2` wheels are best - some p
See [GitHub issue 1333](https://github.com/pypa/cibuildwheel/issues/1333) for more discussion.
-#### How to cross-compile
+#### How?
-With the exception of Cirrus CI, macOS CI runners are still Intel-based, and Apple Silicon wheels are not built by default on Intel runners. However, cross-compilation can be enabled by adding extra archs to the [`CIBW_ARCHS_MACOS` option](options.md#archs) - e.g. `x86_64 arm64`. Cross-compilation is provided by the Xcode toolchain.
+It's easiest to build `x86_64` wheels on `x86_64` runners, and `arm64` wheels on `arm64` runners.
-!!! important
- When cross-compiling on Intel, it is not possible to test `arm64` and the `arm64` part of a `universal2` wheel.
+On GitHub Actions, `macos-14` runners are `arm64`, and `macos-12` runners are `x86_64`. So all you need to do is ensure both are in your build matrix.
- `cibuildwheel` will raise a warning to notify you of this - these warnings be be silenced by skipping testing on these platforms: `CIBW_TEST_SKIP: "*_arm64 *_universal2:arm64"`.
+#### Cross-compiling
-!!! note
- Your runner needs Xcode Command Line Tools 12.2 or later to build `universal2` or `arm64`.
+If your CI provider doesn't offer arm64 runners yet, or you want to create `universal2`, you'll have to cross-compile. Cross-compilation can be enabled by adding extra archs to the [`CIBW_ARCHS_MACOS` option](options.md#archs) - e.g. `CIBW_ARCHS_MACOS="x86_64 universal2"`. Cross-compilation is provided by Xcode toolchain v12.2+.
- Only CPython 3.8 and newer support `universal2` and `arm64` wheels.
+Regarding testing,
+
+- On an arm64 runner, it is possible to test x86_64 wheels an and both parts of a universal2 wheel using Rosetta 2 emulation.
+- On an x86_64 runner, arm64 code can be compiled but it can't be tested. `cibuildwheel` will raise a warning to notify you of this - these warnings be be silenced by skipping testing on these platforms: `CIBW_TEST_SKIP: "*_arm64 *_universal2:arm64"`.
!!! note
If your project uses **Poetry** as a build backend, cross-compiling on macOS [does not currently work](https://github.com/python-poetry/poetry/issues/7107). In some cases arm64 wheels can be built but their tags will be incorrect, with the platform tag showing `x86_64` instead of `arm64`.
As a workaround, the tag can be fixed before running delocate to repair the wheel. The [`wheel tags`](https://wheel.readthedocs.io/en/stable/reference/wheel_tags.html) command is ideal for this. See [this workflow](https://gist.github.com/anderssonjohan/49f07e33fc5cb2420515a8ac76dc0c95#file-build-pendulum-wheels-yml-L39-L53) for an example usage of `wheel tags`.
-Hopefully, cross-compilation is a temporary situation. Once we have widely available Apple Silicon CI runners, we can build `arm64` wheels natively. Until then, cross-compiling `arm64` or `universal2` wheels requires opt-in by setting `CIBW_ARCHS_MACOS` on Intel runners.
-
-Here's an example GitHub Actions workflow with a job that builds for Apple Silicon:
-
-> .github/workflows/build_macos.yml
-
-```yml
-{% include "../examples/github-apple-silicon.yml" %}
-```
-
-Here's an example Cirrus CI workflow with a job that builds for macOS Intel through Rosetta 2 emulation and for Apple Silicon natively:
-
-> .cirrus.yml
-
-```yml
-{% include "../examples/cirrus-ci-intel-mac.yml" %}
-```
-
### Building Linux wheels for non-native archs using emulation {: #emulation}
cibuildwheel supports building non-native architectures on Linux, via
diff --git a/docs/options.md b/docs/options.md
index f7f058f1..8c439659 100644
--- a/docs/options.md
+++ b/docs/options.md
@@ -343,8 +343,8 @@ See the [cibuildwheel 1 documentation](https://cibuildwheel.readthedocs.io/en/1.
A list of architectures to build.
-On macOS, this option can be used to cross-compile between `x86_64`,
-`universal2` and `arm64` for Apple Silicon support.
+On macOS, this option can be used to [cross-compile](faq.md#cross-compiling)
+between `x86_64`, `universal2` and `arm64`.
On Linux, this option can be used to build non-native architectures under
emulation. See [this guide](faq.md#emulation) for more information.
diff --git a/docs/setup.md b/docs/setup.md
index cddf46a2..267d7f40 100644
--- a/docs/setup.md
+++ b/docs/setup.md
@@ -178,7 +178,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
runs-on: ${{ matrix.os }}
strategy:
matrix:
- os: [ubuntu-20.04, windows-2019, macos-11]
+ os: [ubuntu-20.04, windows-2019, macos-12, macos-14]
steps:
- uses: actions/checkout@v4
@@ -210,7 +210,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
runs-on: ${{ matrix.os }}
strategy:
matrix:
- os: [ubuntu-20.04, windows-2019, macos-11]
+ os: [ubuntu-20.04, windows-2019, macos-12, macos-14]
steps:
- uses: actions/checkout@v4
diff --git a/examples/github-apple-silicon.yml b/examples/github-apple-silicon.yml
deleted file mode 100644
index dbae89c2..00000000
--- a/examples/github-apple-silicon.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: Build
-
-on: [push, pull_request]
-
-jobs:
- build_wheels_macos:
- name: Build wheels on macos-11
- runs-on: macos-11
- steps:
- - uses: actions/checkout@v4
-
- - name: Build wheels
- uses: pypa/cibuildwheel@v2.16.2
- env:
- CIBW_ARCHS_MACOS: x86_64 arm64
-
- - uses: actions/upload-artifact@v3
- with:
- path: ./wheelhouse/*.whl
diff --git a/examples/github-deploy.yml b/examples/github-deploy.yml
index 1210da9b..a9825548 100644
--- a/examples/github-deploy.yml
+++ b/examples/github-deploy.yml
@@ -16,7 +16,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- os: [ubuntu-22.04, windows-2022, macos-11]
+ os: [ubuntu-22.04, windows-2022, macos-12, macos-14]
steps:
- uses: actions/checkout@v4
diff --git a/examples/github-minimal.yml b/examples/github-minimal.yml
index 1d43ad7e..67273e21 100644
--- a/examples/github-minimal.yml
+++ b/examples/github-minimal.yml
@@ -8,7 +8,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- os: [ubuntu-20.04, windows-2019, macos-11]
+ os: [ubuntu-20.04, windows-2019, macos-12, macos-14]
steps:
- uses: actions/checkout@v4
diff --git a/examples/github-with-qemu.yml b/examples/github-with-qemu.yml
index 494109a3..6f7c5359 100644
--- a/examples/github-with-qemu.yml
+++ b/examples/github-with-qemu.yml
@@ -8,7 +8,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- os: [ubuntu-20.04, windows-2019, macos-11]
+ os: [ubuntu-20.04, windows-2019, macos-12, macos-14]
steps:
- uses: actions/checkout@v4