Skip to content

Commit e545e68

Browse files
committed
feat: manylinux_2_39_aarch64, manylinux_2_39_riscv64 & musllinux_1_2_riscv64
1 parent 66987ed commit e545e68

File tree

7 files changed

+53
-8
lines changed

7 files changed

+53
-8
lines changed

.github/workflows/build.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ jobs:
4646
import json
4747
reduced = [
4848
("x86_64", "ubuntu-24.04", ("manylinux2014", "manylinux_2_28", "manylinux_2_34", "musllinux_1_2")),
49-
("aarch64", "ubuntu-24.04-arm", ("manylinux2014", "manylinux_2_28", "manylinux_2_34", "musllinux_1_2")),
49+
("aarch64", "ubuntu-24.04-arm", ("manylinux2014", "manylinux_2_28", "manylinux_2_34", "manylinux_2_39", "musllinux_1_2")),
5050
("i686", "ubuntu-24.04", ("manylinux2014", "manylinux_2_28", "manylinux_2_34", "musllinux_1_2")),
5151
("armv7l", "ubuntu-24.04-arm", ("manylinux_2_31", "musllinux_1_2")),
52+
("riscv64", "ubuntu-24.04", ("manylinux_2_39", "musllinux_1_2")),
5253
("s390x", "ubuntu-24.04", ("musllinux_1_2",)),
5354
]
5455
expanded = [{"policy": policy, "platform": platform, "runner": runner} for platform, runner, policies in reduced for policy in policies]
@@ -79,7 +80,7 @@ jobs:
7980
fetch-depth: 50
8081

8182
- name: Set up QEMU
82-
if: matrix.platform == 's390x'
83+
if: matrix.platform == 's390x' || matrix.platform == 'riscv64'
8384
uses: docker/setup-qemu-action@v3
8485

8586
- name: Set up Docker Buildx

README.rst

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ The manylinux project supports:
3838

3939
- ``manylinux_2_34`` images for ``x86_64``, ``i686``, ``aarch64``, ``ppc64le`` and ``s390x``.
4040

41+
- ``manylinux_2_39`` images for ``aarch64`` and ``riscv64``.
42+
4143
- ``musllinux_1_2`` images for ``x86_64``, ``i686``, ``aarch64``, ``ppc64le``, ``s390x`` and ``armv7l``.
4244

4345

@@ -93,6 +95,23 @@ etc., we provide `Docker <https://docker.com/>`_ images where we've
9395
done the work for you. The images are uploaded to `quay.io`_ and are tagged
9496
for repeatable builds.
9597

98+
manylinux_2_39 (AlmaLinux/RockyLinux 10 based) - ALPHA
99+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
100+
101+
Toolchain: GCC 14
102+
103+
- aarch64 image: ``quay.io/pypa/manylinux_2_39_aarch64``
104+
- riscv64 image: ``quay.io/pypa/manylinux_2_39_riscv64``
105+
106+
Built wheels are also expected to be compatible with other
107+
distros using glibc 2.39 or later, including:
108+
109+
- Debian 13+
110+
- Ubuntu 24.04+
111+
- Fedora 40+
112+
- CentOS/RHEL 10+
113+
114+
96115
manylinux_2_34 (AlmaLinux 9 based) - ALPHA
97116
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
98117

@@ -121,7 +140,6 @@ distros using glibc 2.34 or later, including:
121140
- CentOS/RHEL 9+
122141

123142

124-
125143
manylinux_2_31 (Ubuntu 20.04 based) - armv7l only - BETA
126144
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
127145

build.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,19 @@ elif [ "${POLICY}" == "manylinux_2_35" ]; then
5353
DEVTOOLSET_ROOTPATH=
5454
PREPEND_PATH=
5555
LD_LIBRARY_PATH_ARG=
56+
elif [ "${POLICY}" == "manylinux_2_39" ]; then
57+
BASEIMAGE="quay.io/almalinuxorg/almalinux:10"
58+
case "${PLATFORM}" in
59+
x86_64) GOARCH="amd64/v2";;
60+
riscv64) BASEIMAGE="rockylinux/rockylinux:10";;
61+
esac
62+
# TODO enable gcc-toolset-15 once available (probably in 10.1)
63+
# DEVTOOLSET_ROOTPATH="/opt/rh/gcc-toolset-15/root"
64+
# PREPEND_PATH="/usr/local/bin:${DEVTOOLSET_ROOTPATH}/usr/bin:"
65+
# LD_LIBRARY_PATH_ARG="${DEVTOOLSET_ROOTPATH}/usr/lib64:${DEVTOOLSET_ROOTPATH}/usr/lib:${DEVTOOLSET_ROOTPATH}/usr/lib64/dyninst:${DEVTOOLSET_ROOTPATH}/usr/lib/dyninst"
66+
DEVTOOLSET_ROOTPATH=
67+
PREPEND_PATH=
68+
LD_LIBRARY_PATH_ARG=
5669
elif [ "${POLICY}" == "musllinux_1_2" ]; then
5770
BASEIMAGE="alpine:3.22"
5871
DEVTOOLSET_ROOTPATH=

deploy_multiarch.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
set -euo pipefail
44

5-
IMAGES=(manylinux2014 manylinux_2_28 manylinux_2_31 manylinux_2_34 musllinux_1_2)
5+
IMAGES=(manylinux2014 manylinux_2_28 manylinux_2_31 manylinux_2_34 manylinux_2_39 musllinux_1_2)
66

77
podman login -u "${QUAY_USERNAME}" -p "${QUAY_PASSWORD}" quay.io
88

@@ -32,7 +32,8 @@ for IMAGE in "${IMAGES[@]}"; do
3232

3333
case ${IMAGE} in
3434
manylinux_2_31) ARCHS=("armv7l");;
35-
musllinux_1_2) ARCHS=("x86_64" "i686" "aarch64" "armv7l" "ppc64le" "s390x");;
35+
manylinux_2_39) ARCHS=("aarch64" "riscv64");;
36+
musllinux_1_2) ARCHS=("x86_64" "i686" "aarch64" "armv7l" "ppc64le" "s390x" "riscv64");;
3637
*) ARCHS=("x86_64" "i686" "aarch64" "ppc64le" "s390x");;
3738
esac
3839

docker/build_scripts/finalize.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@ for TOOL_PATH in "${MY_DIR}/requirements-tools/"*; do
8686
case ${AUDITWHEEL_PLAT}-${TOOL} in
8787
musllinux*_ppc64le-uv) continue;; # uv doesn't provide musl ppc64le wheels due to Rust issues
8888
musllinux*_s390x-uv) continue;; # uv doesn't provide musl s390x wheels due to Rust issues
89+
*_riscv64-uv) continue;; # no uv for riscv64
90+
*_riscv64-cmake|*_riscv64-swig) manylinux_pkg_install "${TOOL}";;
91+
*_riscv64-patchelf)
92+
manylinux_pkg_install cmake
93+
pipx install patchelf==0.17.2.2
94+
;;
8995
*) pipx install --pip-args="--require-hashes -r ${TOOL_PATH} --only-binary" "${TOOL}";;
9096
esac
9197
done

docker/build_scripts/install-runtime-packages.sh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ elif [ "${OS_ID_LIKE}" == "rhel" ]; then
121121
echo "tsflags=nodocs" >> /etc/dnf/dnf.conf
122122
dnf -y upgrade
123123
EPEL=epel-release
124-
if [ "${AUDITWHEEL_ARCH}" == "i686" ]; then
124+
if [ "${AUDITWHEEL_ARCH}" == "i686" ] || [ "${AUDITWHEEL_ARCH}" == "riscv64" ]; then
125125
EPEL=
126126
fi
127127
dnf -y install dnf-plugins-core ${EPEL}
@@ -130,7 +130,13 @@ elif [ "${OS_ID_LIKE}" == "rhel" ]; then
130130
else
131131
dnf config-manager --set-enabled crb
132132
fi
133-
TOOLCHAIN_DEPS=(gcc-toolset-14-binutils gcc-toolset-14-gcc gcc-toolset-14-gcc-c++ gcc-toolset-14-gcc-gfortran gcc-toolset-14-libatomic-devel)
133+
if [ "${AUDITWHEEL_POLICY}" == "manylinux_2_28" ] || [ "${AUDITWHEEL_POLICY}" == "manylinux_2_34" ]; then
134+
TOOLCHAIN_DEPS=(gcc-toolset-14-binutils gcc-toolset-14-gcc gcc-toolset-14-gcc-c++ gcc-toolset-14-gcc-gfortran gcc-toolset-14-libatomic-devel)
135+
else
136+
# TODO enable gcc-toolset-15 once available (probably in 10.1)
137+
# TOOLCHAIN_DEPS=(gcc-toolset-15-binutils gcc-toolset-15-gcc gcc-toolset-15-gcc-c++ gcc-toolset-15-gcc-gfortran gcc-toolset-15-libatomic-devel)
138+
TOOLCHAIN_DEPS=(binutils gcc gcc-c++ gcc-gfortran libatomic)
139+
fi
134140
if [ "${AUDITWHEEL_ARCH}" == "x86_64" ]; then
135141
TOOLCHAIN_DEPS+=(yasm)
136142
fi

docker/tests/ctest/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 4.0)
1+
cmake_minimum_required(VERSION 3.30)
22
project(manylinux_ctest)
33
include(CTest)
44

0 commit comments

Comments
 (0)