diff --git a/README.md b/README.md
index 841b4f3a..6b46c70e 100644
--- a/README.md
+++ b/README.md
@@ -102,7 +102,7 @@ Options
|---|--------|-------------|
| **Build selection** | [`CIBW_PLATFORM`](https://cibuildwheel.readthedocs.io/en/stable/options/#platform) | Override the auto-detected target platform |
| | [`CIBW_BUILD`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip)
[`CIBW_SKIP`](https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip) | Choose the Python versions to build |
-| | [`CIBW_ARCHS_LINUX`](https://cibuildwheel.readthedocs.io/en/stable/options/#archs) | Build non-native architectures |
+| | [`CIBW_ARCHS`](https://cibuildwheel.readthedocs.io/en/stable/options/#archs) | Change the architectures built on your machine by default |
| | [`CIBW_PROJECT_REQUIRES_PYTHON`](https://cibuildwheel.readthedocs.io/en/stable/options/#requires-python) | Manually set the Python compatibility of your project |
| **Build customization** | [`CIBW_ENVIRONMENT`](https://cibuildwheel.readthedocs.io/en/stable/options/#environment) | Set environment variables needed during the build |
| | [`CIBW_BEFORE_ALL`](https://cibuildwheel.readthedocs.io/en/stable/options/#before-all) | Execute a shell command on the build system before any wheels are built. |
diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py
index 33a570c7..bebaf1eb 100644
--- a/cibuildwheel/__main__.py
+++ b/cibuildwheel/__main__.py
@@ -80,7 +80,7 @@ def main() -> None:
on this machine. Set this option to build an architecture
via emulation, for example, using binfmt_misc and QEMU.
Default: auto.
- Choices: auto, native, all, {}
+ Choices: auto, auto64, auto32, native, all, {}
'''.format(", ".join(a.name for a in Architecture)))
parser.add_argument('--output-dir',
default=os.environ.get('CIBW_OUTPUT_DIR', 'wheelhouse'),
diff --git a/cibuildwheel/architecture.py b/cibuildwheel/architecture.py
index 63e3a8bc..7aeb7be3 100644
--- a/cibuildwheel/architecture.py
+++ b/cibuildwheel/architecture.py
@@ -4,7 +4,7 @@ import re
from enum import Enum
from typing import Set
-from .typing import PlatformName, assert_never
+from .typing import Literal, PlatformName, assert_never
PRETTY_NAMES = {'linux': 'Linux', 'macos': 'macOS', 'windows': 'Windows'}
@@ -44,6 +44,10 @@ class Architecture(Enum):
result.add(Architecture(platform_module.machine()))
elif arch_str == 'all':
result |= Architecture.all_archs(platform=platform)
+ elif arch_str == 'auto64':
+ result |= Architecture.bitness_archs(platform=platform, bitness="64")
+ elif arch_str == 'auto32':
+ result |= Architecture.bitness_archs(platform=platform, bitness="32")
else:
result.add(Architecture(arch_str))
return result
@@ -77,6 +81,18 @@ class Architecture(Enum):
else:
assert_never(platform)
+ @staticmethod
+ def bitness_archs(platform: PlatformName, bitness: Literal['64', '32']) -> 'Set[Architecture]':
+ archs_32 = {Architecture.i686, Architecture.x86}
+ auto_archs = Architecture.auto_archs(platform)
+
+ if bitness == '64':
+ return auto_archs - archs_32
+ elif bitness == '32':
+ return auto_archs & archs_32
+ else:
+ assert_never(bitness)
+
def allowed_architectures_check(
platform: PlatformName,
diff --git a/docs/options.md b/docs/options.md
index 78ffce92..e55facaf 100644
--- a/docs/options.md
+++ b/docs/options.md
@@ -172,6 +172,8 @@ Options:
- macOS: `x86_64` `arm64` `universal2`
- Windows: `AMD64` `x86`
- `auto`: The default archs for your machine - see the table below.
+ - `auto64`: Just the 64-bit auto archs
+ - `auto32`: Just the 32-bit auto archs
- `native`: the native arch of the build machine - Matches [`platform.machine()`](https://docs.python.org/3/library/platform.html#platform.machine).
- `all` : expands to all the architectures supported on this OS. You may want
to use [CIBW_BUILD](#build-skip) with this option to target specific
@@ -179,18 +181,23 @@ Options:
Default: `auto`
-| Runner | `native` | `auto`
-|---|---|---
-| Linux / Intel | `x86_64` | `x86_64` `i686`
-| Windows / Intel | `AMD64` | `AMD64` `x86`
-| macOS / Intel | `x86_64` | `x86_64`
-| macOS / AppleĀ Silicon | `arm64` | `arm64` `universal2`
+| Runner | `native` | `auto` | `auto64` | `auto32` |
+|---|---|---|---|---|
+| Linux / Intel | `x86_64` | `x86_64` `i686` | `x86_64` | `i686` |
+| Windows / Intel | `AMD64` | `AMD64` `x86` | `AMD64` | `x86` |
+| macOS / Intel | `x86_64` | `x86_64` | `x86_64` | |
+| macOS / AppleĀ Silicon | `arm64` | `arm64` `universal2` | `arm64` `universal2`| |
If not listed above, `auto` is the same as `native`.
[setup-qemu-action]: https://github.com/docker/setup-qemu-action
[binfmt]: https://hub.docker.com/r/tonistiigi/binfmt
+Platform-specific variants also available:
+ `CIBW_ARCHS_MACOS` | `CIBW_ARCHS_WINDOWS` | `CIBW_ARCHS_LINUX`
+
+This option can also be set using the [command-line option](#command-line) `--archs`.
+
#### Examples
```yaml
@@ -203,10 +210,6 @@ CIBW_ARCHS_MACOS: "x86_64 universal2 arm64"
CIBW_ARCHS_LINUX: "auto aarch64"
```
-Platform-specific variants also available:
-`CIBW_ARCHS_MACOS` | `CIBW_ARCHS_WINDOWS` | `CIBW_ARCHS_LINUX`
-
-This option can also be set using the [command-line option](#command-line) `--archs`.
### `CIBW_PROJECT_REQUIRES_PYTHON` {: #requires-python}
> Manually set the Python compatibility of your project
diff --git a/unit_test/main_tests/main_platform_test.py b/unit_test/main_tests/main_platform_test.py
index 98bcfcdd..1b37663e 100644
--- a/unit_test/main_tests/main_platform_test.py
+++ b/unit_test/main_tests/main_platform_test.py
@@ -131,6 +131,39 @@ def test_archs_platform_native(platform, intercepted_build_args, monkeypatch):
assert build_options.architectures == {Architecture.x86_64}
+def test_archs_platform_auto64(platform, intercepted_build_args, monkeypatch):
+ monkeypatch.setenv('CIBW_ARCHS', 'auto64')
+
+ main()
+ build_options = intercepted_build_args.args[0]
+
+ if platform == 'linux':
+ assert build_options.architectures == {Architecture.x86_64}
+ elif platform == 'windows':
+ assert build_options.architectures == {Architecture.AMD64}
+ elif platform == 'macos':
+ assert build_options.architectures == {Architecture.x86_64}
+
+
+def test_archs_platform_auto32(platform, intercepted_build_args, monkeypatch):
+ monkeypatch.setenv('CIBW_ARCHS', 'auto32')
+
+ if platform == 'macos':
+ with pytest.raises(SystemExit) as exit:
+ main()
+ assert exit.value.args == (4,)
+
+ else:
+ main()
+
+ build_options = intercepted_build_args.args[0]
+
+ if platform == 'linux':
+ assert build_options.architectures == {Architecture.i686}
+ elif platform == 'windows':
+ assert build_options.architectures == {Architecture.x86}
+
+
def test_archs_platform_all(platform, intercepted_build_args, monkeypatch):
monkeypatch.setenv('CIBW_ARCHS', 'all')