Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: warning when building macOS arm64 wheels #1312

Merged
merged 2 commits into from Oct 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 6 additions & 4 deletions cibuildwheel/macos.py
Expand Up @@ -207,13 +207,15 @@ def setup_python(
)
sys.exit(1)

# Set MACOSX_DEPLOYMENT_TARGET to 10.9, if the user didn't set it.
# PyPy defaults to 10.7, causing inconsistencies if it's left unset.
env.setdefault("MACOSX_DEPLOYMENT_TARGET", "10.9")

config_is_arm64 = python_configuration.identifier.endswith("arm64")
config_is_universal2 = python_configuration.identifier.endswith("universal2")

# Set MACOSX_DEPLOYMENT_TARGET, if the user didn't set it.
# For arm64, the minimal deployment target is 11.0.
# On x86_64 (or universal2), use 10.9 as a default.
# PyPy defaults to 10.7, causing inconsistencies if it's left unset.
env.setdefault("MACOSX_DEPLOYMENT_TARGET", "11.0" if config_is_arm64 else "10.9")

if python_configuration.version not in {"3.6", "3.7"}:
if config_is_arm64:
# macOS 11 is the first OS with arm64 support, so the wheels
Expand Down
27 changes: 27 additions & 0 deletions test/test_macos_archs.py
Expand Up @@ -14,6 +14,8 @@
*utils.expected_wheels("spam", "0.1.0", machine_arch="arm64", include_universal2=True),
}

DEPLOYMENT_TARGET_TOO_LOW_WARNING = "[WARNING] MACOSX_DEPLOYMENT_TARGET is set to a lower value"


def get_xcode_version() -> tuple[int, int]:
output = subprocess.run(
Expand Down Expand Up @@ -66,11 +68,14 @@ def test_cross_compiled_test(tmp_path, capfd, build_universal2):
"CIBW_BUILD": "cp39-*",
"CIBW_TEST_COMMAND": '''python -c "import platform; print('running tests on ' + platform.machine())"''',
"CIBW_ARCHS": "universal2" if build_universal2 else "x86_64 arm64",
"CIBW_BUILD_VERBOSITY": "3",
},
)

captured = capfd.readouterr()

assert DEPLOYMENT_TARGET_TOO_LOW_WARNING not in captured.err

if platform.machine() == "x86_64":
# ensure that tests were run on only x86_64
assert "running tests on x86_64" in captured.out
Expand All @@ -97,6 +102,28 @@ def test_cross_compiled_test(tmp_path, capfd, build_universal2):
assert set(actual_wheels) == set(expected_wheels)


def test_deployment_target_warning_is_firing(tmp_path, capfd):
# force the warning to check that we can detect it if it happens
if utils.platform != "macos":
pytest.skip("this test is only relevant to macos")

project_dir = tmp_path / "project"
basic_project.generate(project_dir)

utils.cibuildwheel_run(
project_dir,
add_env={
"CIBW_BUILD": "cp39-*",
"CIBW_ARCHS": "x86_64",
"MACOSX_DEPLOYMENT_TARGET": "10.8",
"CIBW_BUILD_VERBOSITY": "3",
},
)

captured = capfd.readouterr()
assert DEPLOYMENT_TARGET_TOO_LOW_WARNING in captured.err


@pytest.mark.parametrize("skip_arm64_test", [False, True])
def test_universal2_testing(tmp_path, capfd, skip_arm64_test):
if utils.platform != "macos":
Expand Down