fix: better cross-platform auto archs
This improves the default arch selection when targetting a different platform. Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import platform as platform_module
|
||||
import sys
|
||||
|
||||
import pytest
|
||||
|
||||
from cibuildwheel.architecture import Architecture
|
||||
|
||||
|
||||
@pytest.fixture(
|
||||
params=[
|
||||
pytest.param(("linux", "linux", "x86_64", "64"), id="linux-64"),
|
||||
pytest.param(("linux", "linux", "i686", "32"), id="linux-32"),
|
||||
pytest.param(("linux", "linux", "aarch64", "arm"), id="linux-arm"),
|
||||
pytest.param(("macos", "darwin", "x86_64", "64"), id="macos-64"),
|
||||
pytest.param(("macos", "darwin", "arm64", "arm"), id="macos-arm"),
|
||||
pytest.param(("windows", "win32", "x86", "32"), id="windows-32"),
|
||||
pytest.param(("windows", "win32", "AMD64", "64"), id="windows-64"),
|
||||
pytest.param(("windows", "win32", "ARM64", "arm"), id="windows-arm"),
|
||||
]
|
||||
)
|
||||
def platform_machine(request, monkeypatch):
|
||||
platform_name, platform_value, machine_value, machine_name = request.param
|
||||
monkeypatch.setattr(sys, "platform", platform_value)
|
||||
monkeypatch.setattr(platform_module, "machine", lambda: machine_value)
|
||||
return platform_name, machine_name
|
||||
|
||||
|
||||
def test_arch_auto(platform_machine):
|
||||
platform_name, machine_name = platform_machine
|
||||
|
||||
arch_set = Architecture.auto_archs("linux")
|
||||
expected = {
|
||||
"32": {Architecture.i686},
|
||||
"64": {Architecture.x86_64, Architecture.i686},
|
||||
"arm": {Architecture.aarch64},
|
||||
}
|
||||
assert arch_set == expected[machine_name]
|
||||
|
||||
arch_set = Architecture.auto_archs("macos")
|
||||
expected = {"32": set(), "64": {Architecture.x86_64}, "arm": {Architecture.arm64}}
|
||||
assert arch_set == expected[machine_name]
|
||||
|
||||
arch_set = Architecture.auto_archs("windows")
|
||||
expected = {
|
||||
"32": {Architecture.x86},
|
||||
"64": {Architecture.AMD64, Architecture.x86},
|
||||
"arm": {Architecture.ARM64},
|
||||
}
|
||||
assert arch_set == expected[machine_name]
|
||||
|
||||
|
||||
def test_arch_auto64(platform_machine):
|
||||
platform_name, machine_name = platform_machine
|
||||
|
||||
arch_set = Architecture.parse_config("auto64", "linux")
|
||||
expected = {"32": set(), "64": {Architecture.x86_64}, "arm": {Architecture.aarch64}}
|
||||
assert arch_set == expected[machine_name]
|
||||
|
||||
arch_set = Architecture.parse_config("auto64", "macos")
|
||||
expected = {"32": set(), "64": {Architecture.x86_64}, "arm": {Architecture.arm64}}
|
||||
assert arch_set == expected[machine_name]
|
||||
|
||||
arch_set = Architecture.parse_config("auto64", "windows")
|
||||
expected = {"32": set(), "64": {Architecture.AMD64}, "arm": {Architecture.ARM64}}
|
||||
assert arch_set == expected[machine_name]
|
||||
|
||||
|
||||
def test_arch_auto32(platform_machine):
|
||||
platform_name, machine_name = platform_machine
|
||||
|
||||
arch_set = Architecture.parse_config("auto32", "linux")
|
||||
expected = {"32": {Architecture.i686}, "64": {Architecture.i686}, "arm": set()}
|
||||
assert arch_set == expected[machine_name]
|
||||
|
||||
arch_set = Architecture.parse_config("auto32", "macos")
|
||||
assert arch_set == set()
|
||||
|
||||
arch_set = Architecture.parse_config("auto32", "windows")
|
||||
expected = {"32": {Architecture.x86}, "64": {Architecture.x86}, "arm": set()}
|
||||
assert arch_set == expected[machine_name]
|
||||
Reference in New Issue
Block a user