Skip to content

Commit 0de28aa

Browse files
committed
feat: add manylinux armv7l
1 parent 1001c83 commit 0de28aa

11 files changed

+104
-57
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Python wheels are great. Building them across **Mac, Linux, Windows**, on **mult
2222
What does it do?
2323
----------------
2424

25-
| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux<br/>musllinux x86_64 | manylinux<br/>musllinux i686 | manylinux<br/>musllinux aarch64 | manylinux<br/>musllinux ppc64le | manylinux<br/>musllinux s390x | musllinux armv7l | Pyodide |
25+
| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux<br/>musllinux x86_64 | manylinux<br/>musllinux i686 | manylinux<br/>musllinux aarch64 | manylinux<br/>musllinux ppc64le | manylinux<br/>musllinux s390x | manylinux<br/>musllinux armv7l | Pyodide |
2626
|----------------|----|-----|-----|-----|-----|----|-----|----|-----|-----|---|-----|
2727
| CPython 3.6 || N/A ||| N/A ||||||| N/A |
2828
| CPython 3.7 || N/A ||| N/A ||||||| N/A |

bin/generate_schema.py

+3
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@
113113
manylinux-aarch64-image:
114114
type: string
115115
description: Specify alternative manylinux / musllinux container images
116+
manylinux-armv7l-image:
117+
type: string
118+
description: Specify alternative manylinux / musllinux container images
116119
manylinux-i686-image:
117120
type: string
118121
description: Specify alternative manylinux / musllinux container images

bin/update_docker.py

+18
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from pathlib import Path
77

88
import requests
9+
from packaging.version import Version
910

1011
DIR = Path(__file__).parent.resolve()
1112
RESOURCES = DIR.parent / "cibuildwheel/resources"
@@ -53,6 +54,8 @@ class Image:
5354
Image("manylinux_2_28", "s390x", "quay.io/pypa/manylinux_2_28_s390x", None),
5455
Image("manylinux_2_28", "pypy_x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
5556
Image("manylinux_2_28", "pypy_aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
57+
# manylinux_2_31 images
58+
Image("manylinux_2_31", "armv7l", "ghcr.io/mayeut/manylinux_2_31", None),
5659
# musllinux_1_1 images
5760
Image("musllinux_1_1", "x86_64", "quay.io/pypa/musllinux_1_1_x86_64", None),
5861
Image("musllinux_1_1", "i686", "quay.io/pypa/musllinux_1_1_i686", None),
@@ -91,6 +94,21 @@ class Image:
9194
for (name, info) in tags_dict.items()
9295
if info["manifest_digest"] == latest_tag["manifest_digest"]
9396
)
97+
elif image.image_name.startswith("ghcr.io/"):
98+
repository = image.image_name[8:]
99+
response = requests.get(
100+
"https://ghcr.io/token", params={"scope": f"repository:{repository}:pull"}
101+
)
102+
response.raise_for_status()
103+
token = response.json()["token"]
104+
response = requests.get(
105+
f"https://ghcr.io/v2/{repository}/tags/list",
106+
headers={"Authorization": f"Bearer {token}"},
107+
)
108+
response.raise_for_status()
109+
ghcr_tags = [(Version(tag), tag) for tag in response.json()["tags"] if tag != "latest"]
110+
ghcr_tags.sort(reverse=True)
111+
tag_name = ghcr_tags[0][1]
94112
else:
95113
response = requests.get(f"https://hub.docker.com/v2/repositories/{image.image_name}/tags")
96114
response.raise_for_status()

cibuildwheel/logger.py

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"manylinux_aarch64": "manylinux aarch64",
2424
"manylinux_ppc64le": "manylinux ppc64le",
2525
"manylinux_s390x": "manylinux s390x",
26+
"manylinux_armv7l": "manylinux armv7l",
2627
"musllinux_x86_64": "musllinux x86_64",
2728
"musllinux_i686": "musllinux i686",
2829
"musllinux_aarch64": "musllinux aarch64",

cibuildwheel/resources/build-platforms.toml

+9
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@ python_configurations = [
4949
{ identifier = "cp312-manylinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" },
5050
{ identifier = "cp313-manylinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" },
5151
{ identifier = "cp313t-manylinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
52+
{ identifier = "cp36-manylinux_armv7l", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
53+
{ identifier = "cp37-manylinux_armv7l", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
54+
{ identifier = "cp38-manylinux_armv7l", version = "3.8", path_str = "/opt/python/cp38-cp38" },
55+
{ identifier = "cp39-manylinux_armv7l", version = "3.9", path_str = "/opt/python/cp39-cp39" },
56+
{ identifier = "cp310-manylinux_armv7l", version = "3.10", path_str = "/opt/python/cp310-cp310" },
57+
{ identifier = "cp311-manylinux_armv7l", version = "3.11", path_str = "/opt/python/cp311-cp311" },
58+
{ identifier = "cp312-manylinux_armv7l", version = "3.12", path_str = "/opt/python/cp312-cp312" },
59+
{ identifier = "cp313-manylinux_armv7l", version = "3.13", path_str = "/opt/python/cp313-cp313" },
60+
{ identifier = "cp313t-manylinux_armv7l", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
5261
{ identifier = "pp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
5362
{ identifier = "pp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
5463
{ identifier = "pp39-manylinux_aarch64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" },

cibuildwheel/resources/cibuildwheel.schema.json

+11
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,11 @@
272272
"description": "Specify alternative manylinux / musllinux container images",
273273
"title": "CIBW_MANYLINUX_AARCH64_IMAGE"
274274
},
275+
"manylinux-armv7l-image": {
276+
"type": "string",
277+
"description": "Specify alternative manylinux / musllinux container images",
278+
"title": "CIBW_MANYLINUX_ARMV7L_IMAGE"
279+
},
275280
"manylinux-i686-image": {
276281
"type": "string",
277282
"description": "Specify alternative manylinux / musllinux container images",
@@ -523,6 +528,9 @@
523528
"manylinux-aarch64-image": {
524529
"$ref": "#/properties/manylinux-aarch64-image"
525530
},
531+
"manylinux-armv7l-image": {
532+
"$ref": "#/properties/manylinux-armv7l-image"
533+
},
526534
"manylinux-i686-image": {
527535
"$ref": "#/properties/manylinux-i686-image"
528536
},
@@ -614,6 +622,9 @@
614622
"manylinux-aarch64-image": {
615623
"$ref": "#/properties/manylinux-aarch64-image"
616624
},
625+
"manylinux-armv7l-image": {
626+
"$ref": "#/properties/manylinux-armv7l-image"
627+
},
617628
"manylinux-i686-image": {
618629
"$ref": "#/properties/manylinux-i686-image"
619630
},

cibuildwheel/resources/defaults.toml

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ manylinux-i686-image = "manylinux2014"
2828
manylinux-aarch64-image = "manylinux2014"
2929
manylinux-ppc64le-image = "manylinux2014"
3030
manylinux-s390x-image = "manylinux2014"
31+
manylinux-armv7l-image = "manylinux_2_31"
3132
manylinux-pypy_x86_64-image = "manylinux2014"
3233
manylinux-pypy_i686-image = "manylinux2014"
3334
manylinux-pypy_aarch64-image = "manylinux2014"
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,58 @@
11
[x86_64]
22
manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8
33
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
4-
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
4+
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.10.20-1
55
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
6-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.10.07-1
7-
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.10.07-1
8-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.10.07-1
6+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.10.20-1
7+
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.10.20-1
8+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.10.20-1
99

1010
[i686]
1111
manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8
1212
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
13-
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.10.07-1
13+
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.10.20-1
1414
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
15-
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.10.07-1
16-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.10.07-1
15+
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.10.20-1
16+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.10.20-1
1717

1818
[pypy_x86_64]
1919
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
20-
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.10.07-1
20+
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.10.20-1
2121
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
22-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.10.07-1
22+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.10.20-1
2323

2424
[pypy_i686]
2525
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
26-
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.10.07-1
26+
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.10.20-1
2727
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
2828

2929
[aarch64]
30-
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.07-1
30+
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.20-1
3131
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
32-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.07-1
33-
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.10.07-1
34-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.10.07-1
32+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.20-1
33+
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.10.20-1
34+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.10.20-1
3535

3636
[ppc64le]
37-
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.10.07-1
37+
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.10.20-1
3838
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463
39-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.10.07-1
40-
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.10.07-1
41-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.10.07-1
39+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.10.20-1
40+
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.10.20-1
41+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.10.20-1
4242

4343
[s390x]
44-
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.10.07-1
44+
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.10.20-1
4545
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463
46-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.10.07-1
47-
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.10.07-1
48-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.10.07-1
46+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.10.20-1
47+
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.10.20-1
48+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.10.20-1
4949

5050
[pypy_aarch64]
51-
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.07-1
51+
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.10.20-1
5252
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
53-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.07-1
53+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.10.20-1
5454

5555
[armv7l]
56-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.10.07-1
56+
manylinux_2_31 = ghcr.io/mayeut/manylinux_2_31:2024.10.20-2
57+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.10.20-1
5758

cibuildwheel/util.py

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
"aarch64",
7474
"ppc64le",
7575
"s390x",
76+
"armv7l",
7677
"pypy_aarch64",
7778
"pypy_i686",
7879
)

0 commit comments

Comments
 (0)