From 6c43d7f0d5b599a0d0f231a7a20d519813d22647 Mon Sep 17 00:00:00 2001 From: mayeut Date: Sun, 2 Feb 2025 13:27:26 +0100 Subject: [PATCH] custom-check --- bin/create_armv7l_check_exe.sh | 18 ++++++++++++++++++ cibuildwheel/architecture.py | 9 +++------ cibuildwheel/resources/linux_armv7l_check | Bin 0 -> 9216 bytes cibuildwheel/util/resources.py | 1 + unit_test/architecture_test.py | 6 ++++-- 5 files changed, 26 insertions(+), 8 deletions(-) create mode 100755 bin/create_armv7l_check_exe.sh create mode 100755 cibuildwheel/resources/linux_armv7l_check diff --git a/bin/create_armv7l_check_exe.sh b/bin/create_armv7l_check_exe.sh new file mode 100755 index 000000000..dc7e0ef03 --- /dev/null +++ b/bin/create_armv7l_check_exe.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +set -eux + +SCRIPT_DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd -P)" +RESOURCES_DIR="${SCRIPT_DIR}/../cibuildwheel/resources" + +docker run --platform linux/arm/v7 -i --rm -v "${RESOURCES_DIR}:/resources" alpine:3.21 << "EOFD" +apk add build-base +gcc -s -Os -static -x c -o/resources/linux_armv7l_check - << "EOF" +#include + +int main(int argc, char* argv[]) { + puts("armv7l"); + return 0; +} +EOF +EOFD diff --git a/cibuildwheel/architecture.py b/cibuildwheel/architecture.py index 43fa4bdb5..5c7f63db4 100644 --- a/cibuildwheel/architecture.py +++ b/cibuildwheel/architecture.py @@ -3,7 +3,6 @@ import functools import platform as platform_module import re -import shutil import subprocess import sys from collections.abc import Set @@ -11,6 +10,7 @@ from typing import Final, Literal, assert_never from .typing import PlatformName +from .util.resources import LINUX_ARM7L_CHECK PRETTY_NAMES: Final[dict[PlatformName, str]] = { "linux": "Linux", @@ -32,11 +32,8 @@ def _check_aarch32_el0() -> bool: return False if platform_module.machine() != "aarch64": return False - executable = shutil.which("linux32") - if executable is None: - return False - check = subprocess.run([executable, "uname", "-m"], check=False, capture_output=True, text=True) - return check.returncode == 0 and check.stdout.startswith("armv") + check = subprocess.run([LINUX_ARM7L_CHECK], check=False, capture_output=True, text=True) + return check.returncode == 0 and check.stdout.strip() == "armv7l" @functools.total_ordering diff --git a/cibuildwheel/resources/linux_armv7l_check b/cibuildwheel/resources/linux_armv7l_check new file mode 100755 index 0000000000000000000000000000000000000000..70f2a2fdfd0b226899c74cbab8e1cf45eddc9a54 GIT binary patch literal 9216 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 WF&!3I%<4>r&qRQSlK|tS-v0qQTR#y1 literal 0 HcmV?d00001 diff --git a/cibuildwheel/util/resources.py b/cibuildwheel/util/resources.py index 781f92db9..5f8f25ad9 100644 --- a/cibuildwheel/util/resources.py +++ b/cibuildwheel/util/resources.py @@ -16,6 +16,7 @@ CONSTRAINTS: Final[Path] = PATH / "constraints.txt" VIRTUALENV: Final[Path] = PATH / "virtualenv.toml" CIBUILDWHEEL_SCHEMA: Final[Path] = PATH / "cibuildwheel.schema.json" +LINUX_ARM7L_CHECK: Final[Path] = PATH / "linux_arm7l_check" def read_python_configs(config: PlatformName) -> list[dict[str, str]]: diff --git a/unit_test/architecture_test.py b/unit_test/architecture_test.py index c1b23a5fd..341555c68 100644 --- a/unit_test/architecture_test.py +++ b/unit_test/architecture_test.py @@ -1,7 +1,7 @@ from __future__ import annotations import platform as platform_module -import shutil +import subprocess import sys import pytest @@ -88,7 +88,9 @@ def test_arch_auto32(platform_machine): def test_arch_auto_no_aarch32(monkeypatch): monkeypatch.setattr(sys, "platform", "linux") monkeypatch.setattr(platform_module, "machine", lambda: "aarch64") - monkeypatch.setattr(shutil, "which", lambda *args, **kwargs: None) + monkeypatch.setattr( + subprocess, "run", lambda args, **kwargs: subprocess.CompletedProcess(args, 1) + ) arch_set = Architecture.parse_config("auto", "linux") assert arch_set == {Architecture.aarch64}