Repository: rust-cross/manylinux-cross
Pull request #101: Add riscv64 manylinux_2_31
Author: login: Xeonacid
Created: 2025-04-04T14:30:23Z | Merged: 2025-04-05T09:12:23Z

riscv64 first get supported in auditwheel at manylinux_2_31. [1]

Use Linux 5.4 as the first LTS kernel version which has a working glibc userspace support.

Backport patches [2][3] to get glibc 2.31, binutils 2.40 and gcc 7.5.0 work together.

Although pypa/manylinux has not added riscv64 image yet[4], adding here makes maturin-action to work, and other apps like uv can make use of that to build riscv64 releases! This may become a booster for advancing pypa/manylinux!

[1] https://github.com/pypa/auditwheel/blob/8964d1e5e5daee875c324c2e0b73cc8f3e5af1c9/src/auditwheel/policy/manylinux-policy.json#L326
[2] https://github.com/crosstool-ng/crosstool-ng/pull/2315
[3] https://github.com/crosstool-ng/crosstool-ng/pull/2316
[4] https://github.com/pypa/manylinux/discussions/1426


Diff:
diff --git a/.github/workflows/Build.yml b/.github/workflows/Build.yml
index 2cb4065..39fed43 100644
--- a/.github/workflows/Build.yml
+++ b/.github/workflows/Build.yml
@@ -165,6 +165,8 @@ jobs:
           manylinux: manylinux_2_28
         - arch: ppc64le
           manylinux: manylinux_2_28
+        - arch: riscv64
+          manylinux: manylinux_2_31
         - arch: x86_64
           manylinux: musllinux_1_2
         - arch: i686
diff --git a/README.md b/README.md
index fd99c07..df610b2 100644
--- a/README.md
+++ b/README.md
@@ -2,10 +2,11 @@
 
 [![manylinux2014 Docker Image](https://img.shields.io/docker/pulls/messense/manylinux2014-cross.svg?maxAge=2592000&label=manylinux2014)](https://hub.docker.com/r/messense/manylinux2014-cross/)
 [![manylinux_2_28 Docker Image](https://img.shields.io/docker/pulls/messense/manylinux_2_28-cross.svg?maxAge=2592000&label=manylinux_2_28)](https://hub.docker.com/r/messense/manylinux_2_28-cross/)
+[![manylinux_2_31 Docker Image](https://img.shields.io/docker/pulls/messense/manylinux_2_31-cross.svg?maxAge=2592000&label=manylinux_2_31)](https://hub.docker.com/r/messense/manylinux_2_31-cross/)
 [![Test](https://github.com/rust-cross/manylinux-cross/workflows/Test/badge.svg)](https://github.com/rust-cross/manylinux-cross/actions?query=workflow%3ATest)
 [![Bors enabled](https://bors.tech/images/badge_small.svg)](https://app.bors.tech/repositories/58198)
 
-manylinux2014 and manylinux_2_28 aarch64/armv7l/s390x/ppc64le cross compilation docker images,
+manylinux2014, manylinux_2_28 aarch64/armv7l/s390x/ppc64le and manylinux_2_31 riscv64 cross compilation docker images,
 supports both x86_64(amd64) and aarch64(arm64) architectures.
 
 ## manylinux2014
@@ -34,6 +35,15 @@ Docker image repository: [messense/manylinux_2_28-cross], based on Ubuntu 22.04
 | s390x        | s390x           | `/opt/python/cp3[7-13]`, built from source | Python 3.7 - 3.13      |
 | ppc64le      | ppc64le         | `/opt/python/cp3[7-13]`, built from source | Python 3.7 - 3.13      |
 
+
+## manylinux_2_31
+
+Docker image repository: [messense/manylinux_2_31-cross], based on Ubuntu 22.04 with **GCC 7.5.0**.
+
+| Architecture |      Tag        |          Target Python                     |       Host Python      |
+| ------------ | --------------- | ------------------------------------------ | ---------------------- |
+| riscv64      | riscv64         | `/opt/python/cp3[7-13]`, built from source | Python 3.7 - 3.13      |
+
 ## Environment variables
 
 Following list of environment variables are set:
diff --git a/manylinux_2_31/riscv64/.config b/manylinux_2_31/riscv64/.config
new file mode 100644
index 0000000..3ea3ce9
--- /dev/null
+++ b/manylinux_2_31/riscv64/.config
@@ -0,0 +1,1071 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# crosstool-NG 1.27.0 Configuration
+#
+CT_CONFIGURE_has_static_link=y
+CT_CONFIGURE_has_cxx11=y
+CT_CONFIGURE_has_lzip=y
+CT_CONFIGURE_has_curl=y
+CT_CONFIGURE_has_meson=y
+CT_CONFIGURE_has_ninja=y
+CT_CONFIGURE_has_make_3_81_or_newer=y
+CT_CONFIGURE_has_make_4_0_or_newer=y
+CT_CONFIGURE_has_make_4_4_or_newer=y
+CT_CONFIGURE_has_libtool_2_4_or_newer=y
+CT_CONFIGURE_has_libtoolize_2_4_or_newer=y
+CT_CONFIGURE_has_autoconf_2_65_or_newer=y
+CT_CONFIGURE_has_autoreconf_2_65_or_newer=y
+CT_CONFIGURE_has_automake_1_15_or_newer=y
+CT_CONFIGURE_has_gnu_m4_1_4_12_or_newer=y
+CT_CONFIGURE_has_python_3_4_or_newer=y
+CT_CONFIGURE_has_bison_2_7_or_newer=y
+CT_CONFIGURE_has_bison_3_0_4_or_newer=y
+CT_CONFIGURE_has_python=y
+CT_CONFIGURE_has_git=y
+CT_CONFIGURE_has_md5sum=y
+CT_CONFIGURE_has_sha1sum=y
+CT_CONFIGURE_has_sha256sum=y
+CT_CONFIGURE_has_sha512sum=y
+CT_CONFIGURE_has_install_with_strip_program=y
+CT_VERSION="1.27.0"
+CT_VCHECK=""
+CT_CONFIG_VERSION_ENV="4"
+CT_CONFIG_VERSION_CURRENT="4"
+CT_CONFIG_VERSION="4"
+CT_MODULES=y
+
+#
+# Paths and misc options
+#
+
+#
+# crosstool-NG behavior
+#
+CT_OBSOLETE=y
+CT_EXPERIMENTAL=y
+CT_ALLOW_BUILD_AS_ROOT=y
+CT_ALLOW_BUILD_AS_ROOT_SURE=y
+# CT_ENABLE_EXPERIMENTAL_BUNDLED_PATCHES is not set
+# CT_DEBUG_CT is not set
+
+#
+# Paths
+#
+CT_LOCAL_TARBALLS_DIR=""
+# CT_TARBALLS_BUILDROOT_LAYOUT is not set
+CT_WORK_DIR="${CT_TOP_DIR}/.build"
+CT_BUILD_TOP_DIR="${CT_WORK_DIR:-${CT_TOP_DIR}/.build}/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}"
+CT_BUILD_DIR="${CT_BUILD_TOP_DIR}/build"
+CT_PREFIX_DIR="/usr/${CT_TARGET}"
+CT_RM_RF_PREFIX_DIR=y
+CT_REMOVE_DOCS=y
+CT_INSTALL_LICENSES=y
+# CT_PREFIX_DIR_RO is not set
+CT_STRIP_HOST_TOOLCHAIN_EXECUTABLES=y
+# CT_STRIP_TARGET_TOOLCHAIN_EXECUTABLES is not set
+# CT_TARBALL_RESULT is not set
+
+#
+# Downloading
+#
+CT_DOWNLOAD_AGENT_CURL=y
+# CT_DOWNLOAD_AGENT_NONE is not set
+# CT_FORBID_DOWNLOAD is not set
+# CT_FORCE_DOWNLOAD is not set
+CT_CONNECT_TIMEOUT=10
+CT_DOWNLOAD_CURL_OPTIONS="--location --ftp-pasv --retry 3 --fail --silent"
+# CT_ONLY_DOWNLOAD is not set
+# CT_USE_MIRROR is not set
+CT_VERIFY_DOWNLOAD_DIGEST=y
+CT_VERIFY_DOWNLOAD_DIGEST_SHA512=y
+# CT_VERIFY_DOWNLOAD_DIGEST_SHA256 is not set
+# CT_VERIFY_DOWNLOAD_DIGEST_SHA1 is not set
+# CT_VERIFY_DOWNLOAD_DIGEST_MD5 is not set
+CT_VERIFY_DOWNLOAD_DIGEST_ALG="sha512"
+# CT_VERIFY_DOWNLOAD_SIGNATURE is not set
+
+#
+# Extracting
+#
+# CT_FORCE_EXTRACT is not set
+CT_OVERRIDE_CONFIG_GUESS_SUB=y
+# CT_ONLY_EXTRACT is not set
+CT_PATCH_BUNDLED=y
+# CT_PATCH_LOCAL is not set
+# CT_PATCH_BUNDLED_LOCAL is not set
+# CT_PATCH_LOCAL_BUNDLED is not set
+# CT_PATCH_NONE is not set
+CT_PATCH_ORDER="bundled"
+
+#
+# Build behavior
+#
+CT_PARALLEL_JOBS=0
+CT_LOAD=""
+CT_USE_PIPES=y
+CT_EXTRA_CFLAGS_FOR_BUILD=""
+CT_EXTRA_CXXFLAGS_FOR_BUILD=""
+CT_EXTRA_LDFLAGS_FOR_BUILD=""
+CT_EXTRA_CFLAGS_FOR_HOST=""
+CT_EXTRA_LDFLAGS_FOR_HOST=""
+# CT_CONFIG_SHELL_SH is not set
+# CT_CONFIG_SHELL_ASH is not set
+CT_CONFIG_SHELL_BASH=y
+# CT_CONFIG_SHELL_CUSTOM is not set
+CT_CONFIG_SHELL="${bash}"
+
+#
+# Logging
+#
+# CT_LOG_ERROR is not set
+# CT_LOG_WARN is not set
+# CT_LOG_INFO is not set
+CT_LOG_EXTRA=y
+# CT_LOG_ALL is not set
+# CT_LOG_DEBUG is not set
+CT_LOG_LEVEL_MAX="EXTRA"
+# CT_LOG_SEE_TOOLS_WARN is not set
+# CT_LOG_PROGRESS_BAR is not set
+CT_LOG_TO_FILE=y
+CT_LOG_FILE_COMPRESS=y
+# end of Paths and misc options
+
+#
+# Target options
+#
+# CT_ARCH_ALPHA is not set
+# CT_ARCH_ARC is not set
+# CT_ARCH_ARM is not set
+# CT_ARCH_AVR is not set
+# CT_ARCH_BPF is not set
+# CT_ARCH_C6X is not set
+# CT_ARCH_LM32 is not set
+# CT_ARCH_LOONGARCH is not set
+# CT_ARCH_M68K is not set
+# CT_ARCH_MICROBLAZE is not set
+# CT_ARCH_MIPS is not set
+# CT_ARCH_MOXIE is not set
+# CT_ARCH_MSP430 is not set
+# CT_ARCH_NIOS2 is not set
+# CT_ARCH_OPENRISC is not set
+# CT_ARCH_PARISC is not set
+# CT_ARCH_POWERPC is not set
+# CT_ARCH_PRU is not set
+CT_ARCH_RISCV=y
+# CT_ARCH_S390 is not set
+# CT_ARCH_SH is not set
+# CT_ARCH_SPARC is not set
+# CT_ARCH_TRICORE is not set
+# CT_ARCH_X86 is not set
+# CT_ARCH_XTENSA is not set
+CT_ARCH="riscv"
+CT_ARCH_CHOICE_KSYM="RISCV"
+CT_ARCH_TUNE=""
+CT_ARCH_RISCV_SHOW=y
+
+#
+# Options for riscv
+#
+CT_ARCH_RISCV_PKG_KSYM=""
+CT_ALL_ARCH_CHOICES="ALPHA ARC ARM AVR BPF C6X LM32 LOONGARCH M68K MICROBLAZE MIPS MOXIE MSP430 NIOS2 OPENRISC PARISC POWERPC PRU RISCV S390 SH SPARC TRICORE X86 XTENSA"
+CT_ARCH_SUFFIX=""
+# CT_OMIT_TARGET_VENDOR is not set
+
+#
+# Generic target options
+#
+# CT_MULTILIB is not set
+# CT_DEMULTILIB is not set
+CT_ARCH_SUPPORTS_BOTH_MMU=y
+CT_ARCH_USE_MMU=y
+CT_ARCH_SUPPORTS_LIBSANITIZER=y
+CT_ARCH_SUPPORTS_32=y
+CT_ARCH_SUPPORTS_64=y
+CT_ARCH_DEFAULT_32=y
+CT_ARCH_BITNESS=64
+# CT_ARCH_32 is not set
+CT_ARCH_64=y
+
+#
+# Target optimisations
+#
+CT_ARCH_SUPPORTS_WITH_ARCH=y
+CT_ARCH_SUPPORTS_WITH_ABI=y
+CT_ARCH_SUPPORTS_WITH_TUNE=y
+CT_ARCH_ARCH="rv64gc"
+CT_ARCH_ABI=""
+CT_TARGET_CFLAGS=""
+CT_TARGET_LDFLAGS=""
+# end of Target options
+
+#
+# Toolchain options
+#
+
+#
+# General toolchain options
+#
+CT_USE_SYSROOT=y
+CT_SYSROOT_NAME="sysroot"
+CT_SYSROOT_DIR_PREFIX=""
+CT_WANTS_STATIC_LINK=y
+CT_WANTS_STATIC_LINK_CXX=y
+# CT_STATIC_TOOLCHAIN is not set
+CT_SHOW_CT_VERSION=y
+CT_TOOLCHAIN_PKGVERSION=""
+CT_TOOLCHAIN_BUGURL=""
+
+#
+# Tuple completion and aliasing
+#
+CT_TARGET_VENDOR="unknown"
+CT_TARGET_ALIAS_SED_EXPR=""
+CT_TARGET_ALIAS=""
+
+#
+# Toolchain type
+#
+# CT_NATIVE is not set
+CT_CROSS=y
+# CT_CROSS_NATIVE is not set
+# CT_CANADIAN is not set
+CT_TOOLCHAIN_TYPE="cross"
+
+#
+# Build system
+#
+CT_BUILD=""
+CT_BUILD_PREFIX=""
+CT_BUILD_SUFFIX=""
+
+#
+# Misc options
+#
+# CT_TOOLCHAIN_ENABLE_NLS is not set
+# end of Toolchain options
+
+#
+# Operating System
+#
+CT_KERNEL_SUPPORTS_SHARED_LIBS=y
+# CT_KERNEL_BARE_METAL is not set
+CT_KERNEL_LINUX=y
+CT_KERNEL="linux"
+CT_KERNEL_CHOICE_KSYM="LINUX"
+CT_KERNEL_LINUX_SHOW=y
+
+#
+# Options for linux
+#
+CT_KERNEL_LINUX_PKG_KSYM="LINUX"
+CT_LINUX_DIR_NAME="linux"
+CT_LINUX_PKG_NAME="linux"
+CT_LINUX_SRC_RELEASE=y
+# CT_LINUX_SRC_DEVEL is not set
+# CT_LINUX_SRC_CUSTOM is not set
+CT_LINUX_PATCH_GLOBAL=y
+# CT_LINUX_PATCH_BUNDLED is not set
+# CT_LINUX_PATCH_LOCAL is not set
+# CT_LINUX_PATCH_BUNDLED_LOCAL is not set
+# CT_LINUX_PATCH_LOCAL_BUNDLED is not set
+# CT_LINUX_PATCH_NONE is not set
+CT_LINUX_PATCH_ORDER="global"
+# CT_LINUX_V_6_13 is not set
+# CT_LINUX_V_6_12 is not set
+# CT_LINUX_V_6_11 is not set
+# CT_LINUX_V_6_10 is not set
+# CT_LINUX_V_6_9 is not set
+# CT_LINUX_V_6_8 is not set
+# CT_LINUX_V_6_7 is not set
+# CT_LINUX_V_6_6 is not set
+# CT_LINUX_V_6_5 is not set
+# CT_LINUX_V_6_4 is not set
+# CT_LINUX_V_6_3 is not set
+# CT_LINUX_V_6_2 is not set
+# CT_LINUX_V_6_1 is not set
+# CT_LINUX_V_6_0 is not set
+# CT_LINUX_V_5_19 is not set
+# CT_LINUX_V_5_18 is not set
+# CT_LINUX_V_5_17 is not set
+# CT_LINUX_V_5_16 is not set
+# CT_LINUX_V_5_15 is not set
+# CT_LINUX_V_5_14 is not set
+# CT_LINUX_V_5_13 is not set
+# CT_LINUX_V_5_12 is not set
+# CT_LINUX_V_5_11 is not set
+# CT_LINUX_V_5_10 is not set
+# CT_LINUX_V_5_9 is not set
+# CT_LINUX_V_5_8 is not set
+# CT_LINUX_V_5_7 is not set
+# CT_LINUX_V_5_5 is not set
+CT_LINUX_V_5_4=y
+# CT_LINUX_V_5_3 is not set
+# CT_LINUX_V_5_2 is not set
+# CT_LINUX_V_5_1 is not set
+# CT_LINUX_V_5_0 is not set
+# CT_LINUX_V_4_20 is not set
+# CT_LINUX_V_4_19 is not set
+# CT_LINUX_V_4_18 is not set
+# CT_LINUX_V_4_17 is not set
+# CT_LINUX_V_4_16 is not set
+# CT_LINUX_V_4_15 is not set
+# CT_LINUX_V_4_14 is not set
+# CT_LINUX_V_4_13 is not set
+# CT_LINUX_V_4_12 is not set
+# CT_LINUX_V_4_11 is not set
+# CT_LINUX_V_4_10 is not set
+# CT_LINUX_V_4_9 is not set
+# CT_LINUX_V_4_4 is not set
+# CT_LINUX_V_4_1 is not set
+# CT_LINUX_V_3_18 is not set
+# CT_LINUX_V_3_16 is not set
+# CT_LINUX_V_3_13 is not set
+# CT_LINUX_V_3_12 is not set
+# CT_LINUX_V_3_10 is not set
+# CT_LINUX_V_3_4 is not set
+# CT_LINUX_V_3_2 is not set
+CT_LINUX_VERSION="5.4.289"
+CT_LINUX_MIRRORS="$(CT_Mirrors kernel.org linux ${CT_LINUX_VERSION})"
+CT_LINUX_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_LINUX_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_LINUX_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_LINUX_SIGNATURE_FORMAT="unpacked/.sign"
+CT_LINUX_5_19_or_older=y
+CT_LINUX_older_than_5_19=y
+CT_LINUX_5_12_or_older=y
+CT_LINUX_older_than_5_12=y
+CT_LINUX_5_5_or_older=y
+CT_LINUX_older_than_5_5=y
+CT_LINUX_later_than_5_3=y
+CT_LINUX_5_3_or_later=y
+CT_LINUX_later_than_4_8=y
+CT_LINUX_4_8_or_later=y
+CT_LINUX_later_than_3_7=y
+CT_LINUX_3_7_or_later=y
+CT_LINUX_later_than_3_2=y
+CT_LINUX_3_2_or_later=y
+CT_LINUX_REQUIRE_3_2_or_later=y
+CT_KERNEL_has_rsync=y
+CT_KERNEL_DEP_RSYNC=y
+CT_KERNEL_LINUX_VERBOSITY_0=y
+# CT_KERNEL_LINUX_VERBOSITY_1 is not set
+# CT_KERNEL_LINUX_VERBOSITY_2 is not set
+CT_KERNEL_LINUX_VERBOSE_LEVEL=0
+CT_KERNEL_LINUX_INSTALL_CHECK=y
+CT_ALL_KERNEL_CHOICES="BARE_METAL LINUX WINDOWS"
+
+#
+# Common kernel options
+#
+CT_SHARED_LIBS=y
+# end of Operating System
+
+#
+# Binary utilities
+#
+CT_ARCH_BINFMT_ELF=y
+CT_BINUTILS_BINUTILS=y
+CT_BINUTILS="binutils"
+CT_BINUTILS_CHOICE_KSYM="BINUTILS"
+CT_BINUTILS_BINUTILS_SHOW=y
+
+#
+# Options for binutils
+#
+CT_BINUTILS_BINUTILS_PKG_KSYM="BINUTILS"
+CT_BINUTILS_DIR_NAME="binutils"
+CT_BINUTILS_USE_GNU=y
+# CT_BINUTILS_USE_LINARO is not set
+# CT_BINUTILS_USE_ORACLE is not set
+CT_BINUTILS_USE="BINUTILS"
+CT_BINUTILS_PKG_NAME="binutils"
+CT_BINUTILS_SRC_RELEASE=y
+# CT_BINUTILS_SRC_DEVEL is not set
+# CT_BINUTILS_SRC_CUSTOM is not set
+CT_BINUTILS_PATCH_GLOBAL=y
+# CT_BINUTILS_PATCH_BUNDLED is not set
+# CT_BINUTILS_PATCH_LOCAL is not set
+# CT_BINUTILS_PATCH_BUNDLED_LOCAL is not set
+# CT_BINUTILS_PATCH_LOCAL_BUNDLED is not set
+# CT_BINUTILS_PATCH_NONE is not set
+CT_BINUTILS_PATCH_ORDER="global"
+# CT_BINUTILS_V_2_43 is not set
+# CT_BINUTILS_V_2_42 is not set
+# CT_BINUTILS_V_2_41 is not set
+CT_BINUTILS_V_2_40=y
+# CT_BINUTILS_V_2_39 is not set
+# CT_BINUTILS_V_2_38 is not set
+# CT_BINUTILS_V_2_37 is not set
+# CT_BINUTILS_V_2_36 is not set
+# CT_BINUTILS_V_2_35 is not set
+# CT_BINUTILS_V_2_34 is not set
+# CT_BINUTILS_V_2_33 is not set
+# CT_BINUTILS_V_2_32 is not set
+# CT_BINUTILS_V_2_31 is not set
+# CT_BINUTILS_V_2_30 is not set
+# CT_BINUTILS_V_2_29 is not set
+# CT_BINUTILS_V_2_28 is not set
+# CT_BINUTILS_V_2_27 is not set
+# CT_BINUTILS_V_2_26 is not set
+CT_BINUTILS_VERSION="2.40"
+CT_BINUTILS_MIRRORS="$(CT_Mirrors GNU binutils) $(CT_Mirrors sourceware binutils/releases)"
+CT_BINUTILS_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_BINUTILS_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_BINUTILS_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz"
+CT_BINUTILS_SIGNATURE_FORMAT="packed/.sig"
+CT_BINUTILS_2_41_or_older=y
+CT_BINUTILS_older_than_2_41=y
+CT_BINUTILS_later_than_2_39=y
+CT_BINUTILS_2_39_or_later=y
+CT_BINUTILS_later_than_2_30=y
+CT_BINUTILS_2_30_or_later=y
+CT_BINUTILS_later_than_2_27=y
+CT_BINUTILS_2_27_or_later=y
+CT_BINUTILS_later_than_2_26=y
+CT_BINUTILS_2_26_or_later=y
+
+#
+# GNU binutils
+#
+CT_BINUTILS_FORCE_LD_BFD_DEFAULT=y
+CT_BINUTILS_LINKER_LD=y
+CT_BINUTILS_LINKERS_LIST="ld"
+CT_BINUTILS_LINKER_DEFAULT="bfd"
+# CT_BINUTILS_PLUGINS is not set
+CT_BINUTILS_RELRO=m
+CT_BINUTILS_DETERMINISTIC_ARCHIVES=y
+CT_BINUTILS_EXTRA_CONFIG_ARRAY=""
+# CT_BINUTILS_FOR_TARGET is not set
+CT_ALL_BINUTILS_CHOICES="BINUTILS"
+# end of Binary utilities
+
+#
+# C-library
+#
+CT_LIBC_GLIBC=y
+# CT_LIBC_MUSL is not set
+# CT_LIBC_UCLIBC_NG is not set
+CT_LIBC="glibc"
+CT_LIBC_CHOICE_KSYM="GLIBC"
+CT_LIBC_GLIBC_SHOW=y
+
+#
+# Options for glibc
+#
+CT_LIBC_GLIBC_PKG_KSYM="GLIBC"
+CT_GLIBC_DIR_NAME="glibc"
+CT_GLIBC_USE_GNU=y
+# CT_GLIBC_USE_ORACLE is not set
+CT_GLIBC_USE="GLIBC"
+CT_GLIBC_PKG_NAME="glibc"
+CT_GLIBC_SRC_RELEASE=y
+# CT_GLIBC_SRC_DEVEL is not set
+# CT_GLIBC_SRC_CUSTOM is not set
+CT_GLIBC_PATCH_GLOBAL=y
+# CT_GLIBC_PATCH_BUNDLED is not set
+# CT_GLIBC_PATCH_LOCAL is not set
+# CT_GLIBC_PATCH_BUNDLED_LOCAL is not set
+# CT_GLIBC_PATCH_LOCAL_BUNDLED is not set
+# CT_GLIBC_PATCH_NONE is not set
+CT_GLIBC_PATCH_ORDER="global"
+# CT_GLIBC_V_2_41 is not set
+# CT_GLIBC_V_2_40 is not set
+# CT_GLIBC_V_2_39 is not set
+# CT_GLIBC_V_2_38 is not set
+# CT_GLIBC_V_2_37 is not set
+# CT_GLIBC_V_2_36 is not set
+# CT_GLIBC_V_2_35 is not set
+# CT_GLIBC_V_2_34 is not set
+# CT_GLIBC_V_2_33 is not set
+# CT_GLIBC_V_2_32 is not set
+CT_GLIBC_V_2_31=y
+# CT_GLIBC_V_2_30 is not set
+# CT_GLIBC_V_2_29 is not set
+CT_GLIBC_VERSION="2.31"
+CT_GLIBC_MIRRORS="$(CT_Mirrors GNU glibc)"
+CT_GLIBC_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_GLIBC_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_GLIBC_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz"
+CT_GLIBC_SIGNATURE_FORMAT="packed/.sig"
+CT_GLIBC_2_41_or_older=y
+CT_GLIBC_older_than_2_41=y
+CT_GLIBC_2_38_or_older=y
+CT_GLIBC_older_than_2_38=y
+CT_GLIBC_2_37_or_older=y
+CT_GLIBC_older_than_2_37=y
+CT_GLIBC_2_36_or_older=y
+CT_GLIBC_older_than_2_36=y
+CT_GLIBC_2_34_or_older=y
+CT_GLIBC_older_than_2_34=y
+CT_GLIBC_2_32_or_older=y
+CT_GLIBC_older_than_2_32=y
+CT_GLIBC_2_31_or_later=y
+CT_GLIBC_2_31_or_older=y
+CT_GLIBC_later_than_2_30=y
+CT_GLIBC_2_30_or_later=y
+CT_GLIBC_later_than_2_29=y
+CT_GLIBC_2_29_or_later=y
+CT_GLIBC_REQUIRE_2_29_or_later=y
+CT_GLIBC_later_than_2_28=y
+CT_GLIBC_2_28_or_later=y
+CT_GLIBC_later_than_2_27=y
+CT_GLIBC_2_27_or_later=y
+CT_GLIBC_later_than_2_26=y
+CT_GLIBC_2_26_or_later=y
+CT_GLIBC_later_than_2_25=y
+CT_GLIBC_2_25_or_later=y
+CT_GLIBC_later_than_2_24=y
+CT_GLIBC_2_24_or_later=y
+CT_GLIBC_later_than_2_23=y
+CT_GLIBC_2_23_or_later=y
+CT_GLIBC_later_than_2_20=y
+CT_GLIBC_2_20_or_later=y
+CT_GLIBC_later_than_2_17=y
+CT_GLIBC_2_17_or_later=y
+CT_GLIBC_later_than_2_14=y
+CT_GLIBC_2_14_or_later=y
+CT_GLIBC_DEP_KERNEL_HEADERS_VERSION=y
+CT_GLIBC_DEP_BINUTILS=y
+CT_GLIBC_DEP_GCC=y
+CT_GLIBC_DEP_PYTHON=y
+CT_GLIBC_DEP_MAKE_4_3=y
+CT_THREADS="nptl"
+CT_GLIBC_BUILD_SSP=y
+CT_GLIBC_HAS_LIBIDN_ADDON=y
+# CT_GLIBC_USE_LIBIDN_ADDON is not set
+CT_GLIBC_NO_SPARC_V8=y
+CT_GLIBC_HAS_OBSOLETE_RPC=y
+CT_GLIBC_EXTRA_CONFIG_ARRAY=""
+CT_GLIBC_CONFIGPARMS=""
+CT_GLIBC_ENABLE_DEBUG=y
+CT_GLIBC_EXTRA_CFLAGS=""
+CT_GLIBC_ENABLE_OBSOLETE_RPC=y
+# CT_GLIBC_ENABLE_FORTIFIED_BUILD is not set
+# CT_GLIBC_DISABLE_VERSIONING is not set
+CT_GLIBC_OLDEST_ABI=""
+CT_GLIBC_FORCE_UNWIND=y
+# CT_GLIBC_LOCALES is not set
+# CT_GLIBC_KERNEL_VERSION_NONE is not set
+CT_GLIBC_KERNEL_VERSION_AS_HEADERS=y
+# CT_GLIBC_KERNEL_VERSION_CHOSEN is not set
+CT_GLIBC_MIN_KERNEL="5.4.289"
+CT_GLIBC_SSP_DEFAULT=y
+# CT_GLIBC_SSP_NO is not set
+# CT_GLIBC_SSP_YES is not set
+# CT_GLIBC_SSP_ALL is not set
+# CT_GLIBC_SSP_STRONG is not set
+# CT_GLIBC_ENABLE_COMMON_FLAG is not set
+CT_ALL_LIBC_CHOICES="AVR_LIBC GLIBC MINGW_W64 MOXIEBOX MUSL NEWLIB NONE PICOLIBC UCLIBC_NG"
+CT_LIBC_SUPPORT_THREADS_ANY=y
+CT_LIBC_SUPPORT_THREADS_NATIVE=y
+
+#
+# Common C library options
+#
+CT_THREADS_NATIVE=y
+# CT_CREATE_LDSO_CONF is not set
+CT_LIBC_XLDD=y
+# end of C-library
+
+#
+# C compiler
+#
+CT_CC_CORE_NEEDED=y
+CT_CC_SUPPORT_CXX=y
+CT_CC_SUPPORT_FORTRAN=y
+CT_CC_SUPPORT_ADA=y
+CT_CC_SUPPORT_D=y
+CT_CC_SUPPORT_JIT=y
+CT_CC_SUPPORT_OBJC=y
+CT_CC_SUPPORT_OBJCXX=y
+CT_CC_SUPPORT_GOLANG=y
+CT_CC_GCC=y
+CT_CC="gcc"
+CT_CC_CHOICE_KSYM="GCC"
+CT_CC_GCC_SHOW=y
+
+#
+# Options for gcc
+#
+CT_CC_GCC_PKG_KSYM="GCC"
+CT_GCC_DIR_NAME="gcc"
+CT_GCC_USE_GNU=y
+# CT_GCC_USE_LINARO is not set
+# CT_GCC_USE_ORACLE is not set
+CT_GCC_USE="GCC"
+CT_GCC_PKG_NAME="gcc"
+CT_GCC_SRC_RELEASE=y
+# CT_GCC_SRC_DEVEL is not set
+# CT_GCC_SRC_CUSTOM is not set
+CT_GCC_PATCH_GLOBAL=y
+# CT_GCC_PATCH_BUNDLED is not set
+# CT_GCC_PATCH_LOCAL is not set
+# CT_GCC_PATCH_BUNDLED_LOCAL is not set
+# CT_GCC_PATCH_LOCAL_BUNDLED is not set
+# CT_GCC_PATCH_NONE is not set
+CT_GCC_PATCH_ORDER="global"
+# CT_GCC_V_14 is not set
+# CT_GCC_V_13 is not set
+# CT_GCC_V_12 is not set
+# CT_GCC_V_11 is not set
+# CT_GCC_V_10 is not set
+# CT_GCC_V_9 is not set
+# CT_GCC_V_8 is not set
+CT_GCC_V_7=y
+CT_GCC_VERSION="7.5.0"
+CT_GCC_MIRRORS="$(CT_Mirrors GNU gcc/gcc-${CT_GCC_VERSION}) $(CT_Mirrors sourceware gcc/releases/gcc-${CT_GCC_VERSION})"
+CT_GCC_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_GCC_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_GCC_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_GCC_SIGNATURE_FORMAT=""
+CT_GCC_14_or_older=y
+CT_GCC_older_than_14=y
+CT_GCC_13_or_older=y
+CT_GCC_older_than_13=y
+CT_GCC_12_or_older=y
+CT_GCC_older_than_12=y
+CT_GCC_11_or_older=y
+CT_GCC_older_than_11=y
+CT_GCC_10_or_older=y
+CT_GCC_older_than_10=y
+CT_GCC_9_or_older=y
+CT_GCC_older_than_9=y
+CT_GCC_8_or_older=y
+CT_GCC_older_than_8=y
+CT_GCC_later_than_7=y
+CT_GCC_7_or_later=y
+CT_GCC_REQUIRE_7_or_later=y
+CT_GCC_later_than_6=y
+CT_GCC_6_or_later=y
+CT_GCC_REQUIRE_6_or_later=y
+CT_GCC_later_than_5=y
+CT_GCC_5_or_later=y
+CT_GCC_REQUIRE_5_or_later=y
+CT_GCC_later_than_4_9=y
+CT_GCC_4_9_or_later=y
+CT_GCC_REQUIRE_4_9_or_later=y
+CT_CC_GCC_HAS_LIBMPX=y
+CT_CC_GCC_ENABLE_CXX_FLAGS=""
+CT_CC_GCC_CORE_EXTRA_CONFIG_ARRAY=""
+CT_CC_GCC_EXTRA_CONFIG_ARRAY=""
+CT_CC_GCC_STATIC_LIBSTDCXX=y
+# CT_CC_GCC_SYSTEM_ZLIB is not set
+CT_CC_GCC_CONFIG_TLS=m
+
+#
+# Optimisation features
+#
+CT_CC_GCC_USE_GRAPHITE=y
+CT_CC_GCC_USE_LTO=y
+
+#
+# Settings for libraries running on target
+#
+# CT_CC_GCC_ENABLE_DEFAULT_PIE is not set
+CT_CC_GCC_ENABLE_TARGET_OPTSPACE=y
+CT_CC_GCC_LIBSTDCXX=m
+# CT_CC_GCC_LIBSTDCXX_HOSTED_DISABLE is not set
+# CT_CC_GCC_LIBMUDFLAP is not set
+# CT_CC_GCC_LIBGOMP is not set
+# CT_CC_GCC_LIBSSP is not set
+# CT_CC_GCC_LIBQUADMATH is not set
+# CT_CC_GCC_LIBSANITIZER is not set
+CT_CC_GCC_LIBSTDCXX_VERBOSE=m
+
+#
+# Misc. obscure options.
+#
+CT_CC_CXA_ATEXIT=y
+# CT_CC_GCC_DISABLE_PCH is not set
+CT_CC_GCC_SJLJ_EXCEPTIONS=m
+CT_CC_GCC_LDBL_128=m
+# CT_CC_GCC_BUILD_ID is not set
+CT_CC_GCC_LNK_HASH_STYLE_DEFAULT=y
+# CT_CC_GCC_LNK_HASH_STYLE_SYSV is not set
+# CT_CC_GCC_LNK_HASH_STYLE_GNU is not set
+# CT_CC_GCC_LNK_HASH_STYLE_BOTH is not set
+CT_CC_GCC_LNK_HASH_STYLE=""
+CT_CC_GCC_DEC_FLOATS_AUTO=y
+# CT_CC_GCC_DEC_FLOATS_BID is not set
+# CT_CC_GCC_DEC_FLOATS_DPD is not set
+# CT_CC_GCC_DEC_FLOATS_NO is not set
+CT_CC_GCC_DEC_FLOATS=""
+CT_ALL_CC_CHOICES="GCC"
+
+#
+# Additional supported languages:
+#
+CT_CC_LANG_CXX=y
+# CT_CC_LANG_FORTRAN is not set
+# CT_CC_LANG_JIT is not set
+# CT_CC_LANG_ADA is not set
+# CT_CC_LANG_D is not set
+# CT_CC_LANG_OBJC is not set
+# CT_CC_LANG_OBJCXX is not set
+# CT_CC_LANG_GOLANG is not set
+CT_CC_LANG_OTHERS=""
+# end of C compiler
+
+#
+# Linkers
+#
+
+#
+# BFD enabled in binutils
+#
+# CT_LINKER_MOLD is not set
+CT_ALL_LINKER_CHOICES="MOLD"
+# end of Linkers
+
+#
+# Debug facilities
+#
+# CT_DEBUG_DUMA is not set
+# CT_DEBUG_GDB is not set
+# CT_DEBUG_LTRACE is not set
+# CT_DEBUG_STRACE is not set
+CT_ALL_DEBUG_CHOICES="DUMA GDB LTRACE STRACE"
+# end of Debug facilities
+
+#
+# Companion libraries
+#
+# CT_COMPLIBS_CHECK is not set
+# CT_COMP_LIBS_CLOOG is not set
+CT_COMP_LIBS_EXPAT=y
+CT_COMP_LIBS_EXPAT_PKG_KSYM="EXPAT"
+CT_EXPAT_DIR_NAME="expat"
+CT_EXPAT_PKG_NAME="expat"
+CT_EXPAT_SRC_RELEASE=y
+# CT_EXPAT_SRC_DEVEL is not set
+# CT_EXPAT_SRC_CUSTOM is not set
+CT_EXPAT_PATCH_GLOBAL=y
+# CT_EXPAT_PATCH_BUNDLED is not set
+# CT_EXPAT_PATCH_LOCAL is not set
+# CT_EXPAT_PATCH_BUNDLED_LOCAL is not set
+# CT_EXPAT_PATCH_LOCAL_BUNDLED is not set
+# CT_EXPAT_PATCH_NONE is not set
+CT_EXPAT_PATCH_ORDER="global"
+CT_EXPAT_V_2_5=y
+CT_EXPAT_VERSION="2.5.0"
+CT_EXPAT_MIRRORS="http://downloads.sourceforge.net/project/expat/expat/${CT_EXPAT_VERSION} https://github.com/libexpat/libexpat/releases/download/R_${CT_EXPAT_VERSION//./_}"
+CT_EXPAT_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_EXPAT_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_EXPAT_ARCHIVE_FORMATS=".tar.xz .tar.lz .tar.bz2 .tar.gz"
+CT_EXPAT_SIGNATURE_FORMAT=""
+CT_COMP_LIBS_GETTEXT=y
+CT_COMP_LIBS_GETTEXT_PKG_KSYM="GETTEXT"
+CT_GETTEXT_DIR_NAME="gettext"
+CT_GETTEXT_PKG_NAME="gettext"
+CT_GETTEXT_SRC_RELEASE=y
+# CT_GETTEXT_SRC_DEVEL is not set
+# CT_GETTEXT_SRC_CUSTOM is not set
+CT_GETTEXT_PATCH_GLOBAL=y
+# CT_GETTEXT_PATCH_BUNDLED is not set
+# CT_GETTEXT_PATCH_LOCAL is not set
+# CT_GETTEXT_PATCH_BUNDLED_LOCAL is not set
+# CT_GETTEXT_PATCH_LOCAL_BUNDLED is not set
+# CT_GETTEXT_PATCH_NONE is not set
+CT_GETTEXT_PATCH_ORDER="global"
+# CT_GETTEXT_V_0_23_1 is not set
+# CT_GETTEXT_V_0_22_5 is not set
+CT_GETTEXT_V_0_21=y
+# CT_GETTEXT_V_0_20_1 is not set
+# CT_GETTEXT_V_0_19_8_1 is not set
+CT_GETTEXT_VERSION="0.21"
+CT_GETTEXT_MIRRORS="$(CT_Mirrors GNU gettext)"
+CT_GETTEXT_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_GETTEXT_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_GETTEXT_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_GETTEXT_SIGNATURE_FORMAT="packed/.sig"
+CT_GETTEXT_0_23_or_older=y
+CT_GETTEXT_older_than_0_23=y
+CT_GETTEXT_0_21_or_later=y
+CT_GETTEXT_0_21_or_older=y
+CT_GETTEXT_INCOMPATIBLE_WITH_UCLIBC_NG=y
+
+#
+# This version of gettext is not compatible with uClibc-NG. Select
+#
+
+#
+# a different version if uClibc-NG is used on the target or (in a
+#
+
+#
+# Canadian cross build) on the host.
+#
+CT_COMP_LIBS_GMP=y
+CT_COMP_LIBS_GMP_PKG_KSYM="GMP"
+CT_GMP_DIR_NAME="gmp"
+CT_GMP_PKG_NAME="gmp"
+CT_GMP_SRC_RELEASE=y
+# CT_GMP_SRC_DEVEL is not set
+# CT_GMP_SRC_CUSTOM is not set
+CT_GMP_PATCH_GLOBAL=y
+# CT_GMP_PATCH_BUNDLED is not set
+# CT_GMP_PATCH_LOCAL is not set
+# CT_GMP_PATCH_BUNDLED_LOCAL is not set
+# CT_GMP_PATCH_LOCAL_BUNDLED is not set
+# CT_GMP_PATCH_NONE is not set
+CT_GMP_PATCH_ORDER="global"
+# CT_GMP_V_6_3 is not set
+CT_GMP_V_6_2=y
+# CT_GMP_V_6_1 is not set
+CT_GMP_VERSION="6.2.1"
+CT_GMP_MIRRORS="https://gmplib.org/download/gmp https://gmplib.org/download/gmp/archive $(CT_Mirrors GNU gmp)"
+CT_GMP_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_GMP_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_GMP_ARCHIVE_FORMATS=".tar.xz .tar.lz .tar.bz2"
+CT_GMP_SIGNATURE_FORMAT="packed/.sig"
+CT_COMP_LIBS_ISL=y
+CT_COMP_LIBS_ISL_PKG_KSYM="ISL"
+CT_ISL_DIR_NAME="isl"
+CT_ISL_PKG_NAME="isl"
+CT_ISL_SRC_RELEASE=y
+# CT_ISL_SRC_DEVEL is not set
+# CT_ISL_SRC_CUSTOM is not set
+CT_ISL_PATCH_GLOBAL=y
+# CT_ISL_PATCH_BUNDLED is not set
+# CT_ISL_PATCH_LOCAL is not set
+# CT_ISL_PATCH_BUNDLED_LOCAL is not set
+# CT_ISL_PATCH_LOCAL_BUNDLED is not set
+# CT_ISL_PATCH_NONE is not set
+CT_ISL_PATCH_ORDER="global"
+CT_ISL_V_0_26=y
+# CT_ISL_V_0_25 is not set
+# CT_ISL_V_0_24 is not set
+# CT_ISL_V_0_23 is not set
+# CT_ISL_V_0_22 is not set
+# CT_ISL_V_0_21 is not set
+# CT_ISL_V_0_20 is not set
+# CT_ISL_V_0_19 is not set
+# CT_ISL_V_0_18 is not set
+# CT_ISL_V_0_17 is not set
+# CT_ISL_V_0_16 is not set
+# CT_ISL_V_0_15 is not set
+# CT_ISL_V_0_11 is not set
+CT_ISL_VERSION="0.26"
+CT_ISL_MIRRORS="https://libisl.sourceforge.io"
+CT_ISL_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_ISL_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_ISL_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz"
+CT_ISL_SIGNATURE_FORMAT=""
+CT_ISL_later_than_0_18=y
+CT_ISL_0_18_or_later=y
+CT_ISL_later_than_0_15=y
+CT_ISL_0_15_or_later=y
+# CT_COMP_LIBS_LIBELF is not set
+CT_COMP_LIBS_LIBICONV=y
+CT_COMP_LIBS_LIBICONV_PKG_KSYM="LIBICONV"
+CT_LIBICONV_DIR_NAME="libiconv"
+CT_LIBICONV_PKG_NAME="libiconv"
+CT_LIBICONV_SRC_RELEASE=y
+# CT_LIBICONV_SRC_DEVEL is not set
+# CT_LIBICONV_SRC_CUSTOM is not set
+CT_LIBICONV_PATCH_GLOBAL=y
+# CT_LIBICONV_PATCH_BUNDLED is not set
+# CT_LIBICONV_PATCH_LOCAL is not set
+# CT_LIBICONV_PATCH_BUNDLED_LOCAL is not set
+# CT_LIBICONV_PATCH_LOCAL_BUNDLED is not set
+# CT_LIBICONV_PATCH_NONE is not set
+CT_LIBICONV_PATCH_ORDER="global"
+CT_LIBICONV_V_1_16=y
+# CT_LIBICONV_V_1_15 is not set
+CT_LIBICONV_VERSION="1.16"
+CT_LIBICONV_MIRRORS="$(CT_Mirrors GNU libiconv)"
+CT_LIBICONV_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_LIBICONV_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_LIBICONV_ARCHIVE_FORMATS=".tar.gz"
+CT_LIBICONV_SIGNATURE_FORMAT="packed/.sig"
+CT_COMP_LIBS_MPC=y
+CT_COMP_LIBS_MPC_PKG_KSYM="MPC"
+CT_MPC_DIR_NAME="mpc"
+CT_MPC_PKG_NAME="mpc"
+CT_MPC_SRC_RELEASE=y
+# CT_MPC_SRC_DEVEL is not set
+# CT_MPC_SRC_CUSTOM is not set
+CT_MPC_PATCH_GLOBAL=y
+# CT_MPC_PATCH_BUNDLED is not set
+# CT_MPC_PATCH_LOCAL is not set
+# CT_MPC_PATCH_BUNDLED_LOCAL is not set
+# CT_MPC_PATCH_LOCAL_BUNDLED is not set
+# CT_MPC_PATCH_NONE is not set
+CT_MPC_PATCH_ORDER="global"
+# CT_MPC_V_1_3 is not set
+CT_MPC_V_1_2=y
+CT_MPC_VERSION="1.2.1"
+CT_MPC_MIRRORS="https://www.multiprecision.org/downloads $(CT_Mirrors GNU mpc)"
+CT_MPC_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_MPC_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_MPC_ARCHIVE_FORMATS=".tar.gz"
+CT_MPC_SIGNATURE_FORMAT="packed/.sig"
+CT_MPC_later_than_1_1_0=y
+CT_MPC_1_1_0_or_later=y
+CT_COMP_LIBS_MPFR=y
+CT_COMP_LIBS_MPFR_PKG_KSYM="MPFR"
+CT_MPFR_DIR_NAME="mpfr"
+CT_MPFR_PKG_NAME="mpfr"
+CT_MPFR_SRC_RELEASE=y
+# CT_MPFR_SRC_DEVEL is not set
+# CT_MPFR_SRC_CUSTOM is not set
+CT_MPFR_PATCH_GLOBAL=y
+# CT_MPFR_PATCH_BUNDLED is not set
+# CT_MPFR_PATCH_LOCAL is not set
+# CT_MPFR_PATCH_BUNDLED_LOCAL is not set
+# CT_MPFR_PATCH_LOCAL_BUNDLED is not set
+# CT_MPFR_PATCH_NONE is not set
+CT_MPFR_PATCH_ORDER="global"
+CT_MPFR_V_4_2=y
+CT_MPFR_VERSION="4.2.1"
+CT_MPFR_MIRRORS="https://www.mpfr.org/mpfr-${CT_MPFR_VERSION} $(CT_Mirrors GNU mpfr)"
+CT_MPFR_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_MPFR_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_MPFR_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz .zip"
+CT_MPFR_SIGNATURE_FORMAT="packed/.asc"
+CT_MPFR_later_than_4_0_0=y
+CT_MPFR_4_0_0_or_later=y
+CT_COMP_LIBS_NCURSES=y
+CT_COMP_LIBS_NCURSES_PKG_KSYM="NCURSES"
+CT_NCURSES_DIR_NAME="ncurses"
+CT_NCURSES_PKG_NAME="ncurses"
+CT_NCURSES_SRC_RELEASE=y
+# CT_NCURSES_SRC_DEVEL is not set
+# CT_NCURSES_SRC_CUSTOM is not set
+CT_NCURSES_PATCH_GLOBAL=y
+# CT_NCURSES_PATCH_BUNDLED is not set
+# CT_NCURSES_PATCH_LOCAL is not set
+# CT_NCURSES_PATCH_BUNDLED_LOCAL is not set
+# CT_NCURSES_PATCH_LOCAL_BUNDLED is not set
+# CT_NCURSES_PATCH_NONE is not set
+CT_NCURSES_PATCH_ORDER="global"
+CT_NCURSES_V_6_4=y
+# CT_NCURSES_V_6_2 is not set
+# CT_NCURSES_V_6_1 is not set
+# CT_NCURSES_V_6_0 is not set
+CT_NCURSES_VERSION="6.4"
+CT_NCURSES_MIRRORS="https://invisible-mirror.net/archives/ncurses $(CT_Mirrors GNU ncurses)"
+CT_NCURSES_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_NCURSES_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_NCURSES_ARCHIVE_FORMATS=".tar.gz"
+CT_NCURSES_SIGNATURE_FORMAT="packed/.sig"
+CT_NCURSES_NEW_ABI=y
+CT_NCURSES_HOST_CONFIG_ARGS=""
+CT_NCURSES_HOST_DISABLE_DB=y
+CT_NCURSES_HOST_FALLBACKS="linux,xterm,xterm-color,xterm-256color,vt100"
+CT_NCURSES_TARGET_CONFIG_ARGS=""
+# CT_NCURSES_TARGET_DISABLE_DB is not set
+CT_NCURSES_TARGET_FALLBACKS=""
+CT_COMP_LIBS_ZLIB=y
+CT_COMP_LIBS_ZLIB_PKG_KSYM="ZLIB"
+CT_ZLIB_DIR_NAME="zlib"
+CT_ZLIB_PKG_NAME="zlib"
+CT_ZLIB_SRC_RELEASE=y
+# CT_ZLIB_SRC_DEVEL is not set
+# CT_ZLIB_SRC_CUSTOM is not set
+CT_ZLIB_PATCH_GLOBAL=y
+# CT_ZLIB_PATCH_BUNDLED is not set
+# CT_ZLIB_PATCH_LOCAL is not set
+# CT_ZLIB_PATCH_BUNDLED_LOCAL is not set
+# CT_ZLIB_PATCH_LOCAL_BUNDLED is not set
+# CT_ZLIB_PATCH_NONE is not set
+CT_ZLIB_PATCH_ORDER="global"
+# CT_ZLIB_V_1_3_1 is not set
+CT_ZLIB_V_1_2_13=y
+CT_ZLIB_VERSION="1.2.13"
+CT_ZLIB_MIRRORS="https://github.com/madler/zlib/releases/download/v${CT_ZLIB_VERSION} https://www.zlib.net/"
+CT_ZLIB_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_ZLIB_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_ZLIB_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_ZLIB_SIGNATURE_FORMAT="packed/.asc"
+CT_COMP_LIBS_ZSTD=y
+CT_COMP_LIBS_ZSTD_PKG_KSYM="ZSTD"
+CT_ZSTD_DIR_NAME="zstd"
+CT_ZSTD_PKG_NAME="zstd"
+CT_ZSTD_SRC_RELEASE=y
+# CT_ZSTD_SRC_DEVEL is not set
+# CT_ZSTD_SRC_CUSTOM is not set
+CT_ZSTD_PATCH_GLOBAL=y
+# CT_ZSTD_PATCH_BUNDLED is not set
+# CT_ZSTD_PATCH_LOCAL is not set
+# CT_ZSTD_PATCH_BUNDLED_LOCAL is not set
+# CT_ZSTD_PATCH_LOCAL_BUNDLED is not set
+# CT_ZSTD_PATCH_NONE is not set
+CT_ZSTD_PATCH_ORDER="global"
+# CT_ZSTD_V_1_5_6 is not set
+CT_ZSTD_V_1_5_5=y
+# CT_ZSTD_V_1_5_2 is not set
+CT_ZSTD_VERSION="1.5.5"
+CT_ZSTD_MIRRORS="https://github.com/facebook/zstd/releases/download/v${CT_ZSTD_VERSION} https://www.zstd.net/"
+CT_ZSTD_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_ZSTD_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_ZSTD_ARCHIVE_FORMATS=".tar.gz"
+CT_ZSTD_SIGNATURE_FORMAT="packed/.sig"
+CT_ALL_COMP_LIBS_CHOICES="CLOOG EXPAT GETTEXT GMP GNUPRUMCU ISL LIBELF LIBICONV MPC MPFR NCURSES NEWLIB_NANO PICOLIBC ZLIB ZSTD"
+CT_LIBICONV_NEEDED=y
+CT_GETTEXT_NEEDED=y
+CT_GMP_NEEDED=y
+CT_MPFR_NEEDED=y
+CT_ISL_NEEDED=y
+CT_MPC_NEEDED=y
+CT_NCURSES_NEEDED=y
+CT_ZLIB_NEEDED=y
+CT_ZSTD_NEEDED=y
+CT_LIBICONV=y
+CT_GETTEXT=y
+CT_GMP=y
+CT_MPFR=y
+CT_ISL=y
+CT_MPC=y
+CT_NCURSES=y
+CT_ZLIB=y
+CT_ZSTD=y
+# end of Companion libraries
+
+#
+# Companion tools
+#
+# CT_COMP_TOOLS_FOR_HOST is not set
+# CT_COMP_TOOLS_AUTOCONF is not set
+# CT_COMP_TOOLS_AUTOMAKE is not set
+# CT_COMP_TOOLS_BISON is not set
+# CT_COMP_TOOLS_DTC is not set
+# CT_COMP_TOOLS_LIBTOOL is not set
+# CT_COMP_TOOLS_M4 is not set
+CT_COMP_TOOLS_MAKE=y
+CT_COMP_TOOLS_MAKE_PKG_KSYM="MAKE"
+CT_MAKE_DIR_NAME="make"
+CT_MAKE_PKG_NAME="make"
+CT_MAKE_SRC_RELEASE=y
+# CT_MAKE_SRC_DEVEL is not set
+# CT_MAKE_SRC_CUSTOM is not set
+CT_MAKE_PATCH_GLOBAL=y
+# CT_MAKE_PATCH_BUNDLED is not set
+# CT_MAKE_PATCH_LOCAL is not set
+# CT_MAKE_PATCH_BUNDLED_LOCAL is not set
+# CT_MAKE_PATCH_LOCAL_BUNDLED is not set
+# CT_MAKE_PATCH_NONE is not set
+CT_MAKE_PATCH_ORDER="global"
+CT_MAKE_V_4_3=y
+# CT_MAKE_V_4_2 is not set
+CT_MAKE_VERSION="4.3"
+CT_MAKE_MIRRORS="$(CT_Mirrors GNU make)"
+CT_MAKE_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_MAKE_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_MAKE_ARCHIVE_FORMATS=".tar.lz .tar.gz"
+CT_MAKE_SIGNATURE_FORMAT="packed/.sig"
+CT_MAKE_4_4_or_older=y
+CT_MAKE_older_than_4_4=y
+CT_MAKE_REQUIRE_older_than_4_4=y
+CT_MAKE_4_3_or_later=y
+CT_MAKE_4_3_or_older=y
+# CT_MAKE_GMAKE_SYMLINK is not set
+CT_MAKE_GNUMAKE_SYMLINK=y
+CT_ALL_COMP_TOOLS_CHOICES="AUTOCONF AUTOMAKE BISON DTC LIBTOOL M4 MAKE"
+# end of Companion tools
+
+#
+# Test suite
+#
+# CT_TEST_SUITE_GCC is not set
+# end of Test suite
diff --git a/manylinux_2_31/riscv64/Dockerfile b/manylinux_2_31/riscv64/Dockerfile
new file mode 100644
index 0000000..7f15414
--- /dev/null
+++ b/manylinux_2_31/riscv64/Dockerfile
@@ -0,0 +1,237 @@
+
+FROM ubuntu:22.04 AS toolchain
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update && \
+    apt-get install --no-install-recommends -y \
+    automake \
+    bison \
+    bzip2 \
+    ca-certificates \
+    cmake \
+    curl \
+    file \
+    flex \
+    g++ \
+    gawk \
+    gdb \
+    git \
+    gperf \
+    help2man \
+    libncurses-dev \
+    libssl-dev \
+    libtool-bin \
+    lzip \
+    make \
+    ninja-build \
+    patch \
+    pkg-config \
+    python3 \
+    rsync \
+    sudo \
+    texinfo \
+    unzip \
+    wget \
+    xz-utils \
+    libssl-dev \
+    libffi-dev
+
+# Install crosstool-ng
+# Backport https://github.com/crosstool-ng/crosstool-ng/pull/{2315,2316} to fix build
+RUN curl -Lf https://github.com/crosstool-ng/crosstool-ng/archive/crosstool-ng-1.27.0.tar.gz | tar xzf - && \
+    cd crosstool-ng-crosstool-ng-1.27.0 && \
+    curl -Lf https://github.com/crosstool-ng/crosstool-ng/pull/2315.patch | patch -Np1 && \
+    curl -Lf https://github.com/crosstool-ng/crosstool-ng/pull/2316.patch | patch -Np1 && \
+    ./bootstrap && \
+    ./configure --prefix=/usr/local && \
+    make -j4 && \
+    make install && \
+    cd .. && rm -rf crosstool-ng-*
+
+COPY .config /tmp/toolchain.config
+
+# Build cross compiler
+RUN mkdir build && \
+    cd build && \
+    cp /tmp/toolchain.config .config && \
+    export CT_ALLOW_BUILD_AS_ROOT_SURE=1 && \
+    ct-ng build.2 || { tail -n 500 build.log; exit $ERRCODE; } && \
+    cd .. && \
+    rm -rf build
+
+FROM ubuntu:22.04
+
+# Copy cross toolchain
+COPY --from=toolchain /usr/riscv64-unknown-linux-gnu /usr/riscv64-unknown-linux-gnu
+
+ENV DEBIAN_FRONTEND noninteractive
+ENV PATH=$PATH:/usr/riscv64-unknown-linux-gnu/bin
+
+ENV CC_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-gcc \
+    AR_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-ar \
+    CXX_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-g++
+
+ENV TARGET_CC=riscv64-unknown-linux-gnu-gcc \
+    TARGET_AR=riscv64-unknown-linux-gnu-ar \
+    TARGET_RANLIB=riscv64-unknown-linux-gnu-ranlib \
+    TARGET_CXX=riscv64-unknown-linux-gnu-g++ \
+    TARGET_READELF=riscv64-unknown-linux-gnu-readelf \
+    TARGET_SYSROOT=/usr/riscv64-unknown-linux-gnu/riscv64-unknown-linux-gnu/sysroot/ \
+    TARGET_C_INCLUDE_PATH=/usr/riscv64-unknown-linux-gnu/riscv64-unknown-linux-gnu/sysroot/usr/include/
+
+ENV CARGO_BUILD_TARGET=riscv64-unknown-linux-gnu
+ENV CARGO_TARGET_RISCV64_UNKNOWN_LINUX_GNU_LINKER=riscv64-unknown-linux-gnu-gcc
+RUN echo "set(CMAKE_SYSTEM_NAME Linux)\nset(CMAKE_SYSTEM_PROCESSOR riscv64)\nset(CMAKE_SYSROOT /usr/riscv64-unknown-linux-gnu/riscv64-unknown-linux-gnu/sysroot/)\nset(CMAKE_C_COMPILER riscv64-unknown-linux-gnu-gcc)\nset(CMAKE_CXX_COMPILER riscv64-unknown-linux-gnu-g++)" > /usr/riscv64-unknown-linux-gnu/cmake-toolchain.cmake
+ENV TARGET_CMAKE_TOOLCHAIN_FILE_PATH=/usr/riscv64-unknown-linux-gnu/cmake-toolchain.cmake
+
+
+RUN echo 'Acquire::Retries "3";' > /etc/apt/apt.conf.d/80-retries && \
+    apt-get update && \
+    apt-get install --no-install-recommends -y \
+    curl \
+    git \
+    g++ \
+    make \
+    sudo \
+    wget \
+    software-properties-common \
+    gpg-agent \
+    cmake \
+    llvm-dev \
+    libclang-dev \
+    clang
+
+ENV RISCV64_UNKNOWN_LINUX_GNU_OPENSSL_DIR=/usr/riscv64-unknown-linux-gnu/
+RUN add-apt-repository -y ppa:deadsnakes/ppa && \
+    apt-get update && \
+    apt-get install -y \
+    python3.7 python3.7-venv python3.7-dev \
+    python3.8 python3.8-venv python3.8-dev \
+    python3.9 python3.9-venv python3.9-dev \
+    python3.11 python3.11-venv python3.11-dev \
+    python3.12 python3.12-venv python3.12-dev \
+    python3.13 python3.13-venv python3.13-dev \
+    python3 python3-venv python3-dev python-is-python3
+
+RUN if [ "$(uname -m)" = "x86_64" ]; then export PYPY_ARCH="linux64"; else export PYPY_ARCH="aarch64"; fi && \
+    mkdir -p /usr/local/pypy/pypy3.7 && \
+    curl -sqL https://downloads.python.org/pypy/pypy3.7-v7.3.9-$PYPY_ARCH.tar.bz2 | tar xjf - -C /usr/local/pypy/pypy3.7 --strip-components=1 && \
+    ln -s /usr/local/pypy/pypy3.7/bin/pypy /usr/local/bin/pypy3.7 && \
+    mkdir -p /usr/local/pypy/pypy3.8 && \
+    curl -sqL https://downloads.python.org/pypy/pypy3.8-v7.3.11-$PYPY_ARCH.tar.bz2 | tar xjf - -C /usr/local/pypy/pypy3.8 --strip-components=1 && \
+    ln -s /usr/local/pypy/pypy3.8/bin/pypy /usr/local/bin/pypy3.8 && \
+    mkdir -p /usr/local/pypy/pypy3.9 && \
+    curl -sqL https://downloads.python.org/pypy/pypy3.9-v7.3.12-$PYPY_ARCH.tar.bz2 | tar xjf - -C /usr/local/pypy/pypy3.9 --strip-components=1 && \
+    ln -s /usr/local/pypy/pypy3.9/bin/pypy /usr/local/bin/pypy3.9 && \
+    mkdir -p /usr/local/pypy/pypy3.10 && \
+    curl -sqL https://downloads.python.org/pypy/pypy3.10-v7.3.12-$PYPY_ARCH.tar.bz2 | tar xjf - -C /usr/local/pypy/pypy3.10 --strip-components=1 && \
+    ln -s /usr/local/pypy/pypy3.10/bin/pypy /usr/local/bin/pypy3.10
+
+RUN mkdir -p /opt/python
+
+RUN cd /tmp && \
+    VERS=3.7.17 && PREFIX=/opt/python/cp37-cp37m && \
+    curl -LO https://www.python.org/ftp/python/$VERS/Python-$VERS.tgz && \
+    tar xzf Python-$VERS.tgz && cd Python-$VERS && \
+    ./configure CC=$TARGET_CC AR=$TARGET_AR READELF=$TARGET_READELF --host=riscv64-unknown-linux-gnu --target=riscv64-unknown-linux-gnu --prefix=$PREFIX --disable-shared --with-ensurepip=no --build=$(uname -m)-linux-gnu --disable-ipv6 ac_cv_have_long_long_format=yes ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no && \
+    make -j4 && make -j4 install && \
+    rm -rf Python-$VERS.tgz Python-$VERS $PREFIX/share && \
+    # we don't need libpython*.a, and they're many megabytes
+    find $PREFIX -name '*.a' -print0 | xargs -0 rm -f && \
+    # We do not need the Python test suites
+    find $PREFIX -depth \( -type d -a -name test -o -name tests \) | xargs rm -rf && \
+    # We do not need precompiled .pyc and .pyo files.
+    find $PREFIX -type f -a \( -name '*.pyc' -o -name '*.pyo' \) -delete
+
+RUN cd /tmp && \
+    VERS=3.8.20 && PREFIX=/opt/python/cp38-cp38 && \
+    curl -LO https://www.python.org/ftp/python/$VERS/Python-$VERS.tgz && \
+    tar xzf Python-$VERS.tgz && cd Python-$VERS && \
+    ./configure CC=$TARGET_CC AR=$TARGET_AR READELF=$TARGET_READELF --host=riscv64-unknown-linux-gnu --target=riscv64-unknown-linux-gnu --prefix=$PREFIX --disable-shared --with-ensurepip=no --build=$(uname -m)-linux-gnu --disable-ipv6 ac_cv_have_long_long_format=yes ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no && \
+    make -j4 && make -j4 install && \
+    rm -rf Python-$VERS.tgz Python-$VERS $PREFIX/share && \
+    # we don't need libpython*.a, and they're many megabytes
+    find $PREFIX -name '*.a' -print0 | xargs -0 rm -f && \
+    # We do not need the Python test suites
+    find $PREFIX -depth \( -type d -a -name test -o -name tests \) | xargs rm -rf && \
+    # We do not need precompiled .pyc and .pyo files.
+    find $PREFIX -type f -a \( -name '*.pyc' -o -name '*.pyo' \) -delete
+
+RUN cd /tmp && \
+    VERS=3.9.20 && PREFIX=/opt/python/cp39-cp39 && \
+    curl -LO https://www.python.org/ftp/python/$VERS/Python-$VERS.tgz && \
+    tar xzf Python-$VERS.tgz && cd Python-$VERS && \
+    ./configure CC=$TARGET_CC AR=$TARGET_AR READELF=$TARGET_READELF --host=riscv64-unknown-linux-gnu --target=riscv64-unknown-linux-gnu --prefix=$PREFIX --disable-shared --with-ensurepip=no --build=$(uname -m)-linux-gnu --disable-ipv6 ac_cv_have_long_long_format=yes ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no && \
+    make -j4 && make -j4 install && \
+    rm -rf Python-$VERS.tgz Python-$VERS $PREFIX/share && \
+    # we don't need libpython*.a, and they're many megabytes
+    find $PREFIX -name '*.a' -print0 | xargs -0 rm -f && \
+    # We do not need the Python test suites
+    find $PREFIX -depth \( -type d -a -name test -o -name tests \) | xargs rm -rf && \
+    # We do not need precompiled .pyc and .pyo files.
+    find $PREFIX -type f -a \( -name '*.pyc' -o -name '*.pyo' \) -delete
+
+RUN cd /tmp && \
+    VERS=3.10.15 && PREFIX=/opt/python/cp310-cp310 && \
+    curl -LO https://www.python.org/ftp/python/$VERS/Python-$VERS.tgz && \
+    tar xzf Python-$VERS.tgz && cd Python-$VERS && \
+    ./configure CC=$TARGET_CC AR=$TARGET_AR READELF=$TARGET_READELF --host=riscv64-unknown-linux-gnu --target=riscv64-unknown-linux-gnu --prefix=$PREFIX --disable-shared --with-ensurepip=no --build=$(uname -m)-linux-gnu --disable-ipv6 ac_cv_have_long_long_format=yes ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no && \
+    make -j4 && make -j4 install && \
+    rm -rf Python-$VERS.tgz Python-$VERS $PREFIX/share && \
+    # we don't need libpython*.a, and they're many megabytes
+    find $PREFIX -name '*.a' -print0 | xargs -0 rm -f && \
+    # We do not need the Python test suites
+    find $PREFIX -depth \( -type d -a -name test -o -name tests \) | xargs rm -rf && \
+    # We do not need precompiled .pyc and .pyo files.
+    find $PREFIX -type f -a \( -name '*.pyc' -o -name '*.pyo' \) -delete
+
+RUN cd /tmp && \
+    VERS=3.11.10 && PREFIX=/opt/python/cp311-cp311 && \
+    curl -LO https://www.python.org/ftp/python/$VERS/Python-$VERS.tgz && \
+    tar xzf Python-$VERS.tgz && cd Python-$VERS && \
+    ./configure CC=$TARGET_CC AR=$TARGET_AR READELF=$TARGET_READELF --host=riscv64-unknown-linux-gnu --target=riscv64-unknown-linux-gnu --prefix=$PREFIX  --disable-shared --with-build-python=python3.11 --with-ensurepip=no --build=$(uname -m)-linux-gnu --disable-ipv6 ac_cv_have_long_long_format=yes ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no && \
+    make -j4 && make -j4 install && \
+    rm -rf Python-$VERS.tgz Python-$VERS $PREFIX/share && \
+    # we don't need libpython*.a, and they're many megabytes
+    find $PREFIX -name '*.a' -print0 | xargs -0 rm -f && \
+    # We do not need the Python test suites
+    find $PREFIX -depth \( -type d -a -name test -o -name tests \) | xargs rm -rf && \
+    # We do not need precompiled .pyc and .pyo files.
+    find $PREFIX -type f -a \( -name '*.pyc' -o -name '*.pyo' \) -delete
+
+RUN cd /tmp && \
+    VERS=3.12.7 && PREFIX=/opt/python/cp312-cp312 && \
+    curl -LO https://www.python.org/ftp/python/$VERS/Python-$VERS.tgz && \
+    tar xzf Python-$VERS.tgz && cd Python-$VERS && \
+    ./configure CC=$TARGET_CC AR=$TARGET_AR READELF=$TARGET_READELF --host=riscv64-unknown-linux-gnu --target=riscv64-unknown-linux-gnu --prefix=$PREFIX  --disable-shared --with-build-python=python3.12 --with-ensurepip=no --build=$(uname -m)-linux-gnu --disable-ipv6 ac_cv_have_long_long_format=yes ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no && \
+    make -j4 && make -j4 install && \
+    rm -rf Python-$VERS.tgz Python-$VERS $PREFIX/share && \
+    # we don't need libpython*.a, and they're many megabytes
+    find $PREFIX -name '*.a' -print0 | xargs -0 rm -f && \
+    # We do not need the Python test suites
+    find $PREFIX -depth \( -type d -a -name test -o -name tests \) | xargs rm -rf && \
+    # We do not need precompiled .pyc and .pyo files.
+    find $PREFIX -type f -a \( -name '*.pyc' -o -name '*.pyo' \) -delete
+
+RUN cd /tmp && \
+    VERS=3.13.0 && PREFIX=/opt/python/cp313-cp313 && \
+    curl -LO https://www.python.org/ftp/python/$VERS/Python-$VERS.tgz && \
+    tar xzf Python-$VERS.tgz && cd Python-$VERS && \
+    ./configure CC=$TARGET_CC AR=$TARGET_AR READELF=$TARGET_READELF --host=riscv64-unknown-linux-gnu --target=riscv64-unknown-linux-gnu --prefix=$PREFIX  --disable-shared --with-build-python=python3.13 --with-ensurepip=no --build=$(uname -m)-linux-gnu --disable-ipv6 ac_cv_have_long_long_format=yes ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no ac_cv_libatomic_needed=yes && \
+    make -j4 && make -j4 install && \
+    rm -rf Python-$VERS.tgz Python-$VERS $PREFIX/share && \
+    # we don't need libpython*.a, and they're many megabytes
+    find $PREFIX -name '*.a' -print0 | xargs -0 rm -f && \
+    # We do not need the Python test suites
+    find $PREFIX -depth \( -type d -a -name test -o -name tests \) | xargs rm -rf && \
+    # We do not need precompiled .pyc and .pyo files.
+    find $PREFIX -type f -a \( -name '*.pyc' -o -name '*.pyo' \) -delete
+RUN curl -sS https://bootstrap.pypa.io/pip/3.7/get-pip.py | "python3.7" && \
+    for VER in 3.13 3.12 3.11 3.8 3.9 3.10; do curl -sS https://bootstrap.pypa.io/get-pip.py | "python$VER"; done && \
+    curl -sS https://bootstrap.pypa.io/pip/3.7/get-pip.py | "pypy3.7" && \
+    for VER in 3.8 3.9 3.10; do curl -sS https://bootstrap.pypa.io/get-pip.py | "pypy$VER"; done && \
+    for VER in 3.13 3.12 3.11 3.7 3.8 3.9 3.10; do "python$VER" -m pip install --no-cache-dir cffi; done && \
+    python3 -m pip --version && \
+    python3 -m pip install --no-cache-dir auditwheel patchelf build && \
+    python3 -m pip install --no-cache-dir auditwheel-symbols


Reviews:
user: login: messense
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-05T09:12:02Z
user: login: messense
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-05T09:59:54Z
user: login: messense
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-05T10:02:30Z
user: login: Xeonacid
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-05T10:42:10Z

Review comments:
diff_hunk: @@ -0,0 +1,237 @@
+
+FROM ubuntu:22.04 AS toolchain
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update && \
+    apt-get install --no-install-recommends -y \
+    automake \
+    bison \
+    bzip2 \
+    ca-certificates \
+    cmake \
+    curl \
+    file \
+    flex \
+    g++ \
+    gawk \
+    gdb \
+    git \
+    gperf \
+    help2man \
+    libncurses-dev \
+    libssl-dev \
+    libtool-bin \
+    lzip \
+    make \
+    ninja-build \
+    patch \
+    pkg-config \
+    python3 \
+    rsync \
+    sudo \
+    texinfo \
+    unzip \
+    wget \
+    xz-utils \
+    libssl-dev \
+    libffi-dev
+
+# Install crosstool-ng
+# Backport https://github.com/crosstool-ng/crosstool-ng/pull/{2315,2316} to fix build
+RUN curl -Lf https://github.com/crosstool-ng/crosstool-ng/archive/crosstool-ng-1.27.0.tar.gz | tar xzf - && \
+    cd crosstool-ng-crosstool-ng-1.27.0 && \
+    curl -Lf https://github.com/crosstool-ng/crosstool-ng/pull/2315.patch | patch -Np1 && \
+    curl -Lf https://github.com/crosstool-ng/crosstool-ng/pull/2316.patch | patch -Np1 && \
+    ./bootstrap && \
+    ./configure --prefix=/usr/local && \
+    make -j4 && \
+    make install && \
+    cd .. && rm -rf crosstool-ng-*
+
+COPY .config /tmp/toolchain.config
+
+# Build cross compiler
+RUN mkdir build && \
+    cd build && \
+    cp /tmp/toolchain.config .config && \
+    export CT_ALLOW_BUILD_AS_ROOT_SURE=1 && \
+    ct-ng build.2 || { tail -n 500 build.log; exit $ERRCODE; } && \
+    cd .. && \
+    rm -rf build
+
+FROM ubuntu:22.04
+
+# Copy cross toolchain
+COPY --from=toolchain /usr/riscv64-unknown-linux-gnu /usr/riscv64-unknown-linux-gnu
+
+ENV DEBIAN_FRONTEND noninteractive
+ENV PATH=$PATH:/usr/riscv64-unknown-linux-gnu/bin
+
+ENV CC_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-gcc \
+    AR_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-ar \
+    CXX_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-g++
+
+ENV TARGET_CC=riscv64-unknown-linux-gnu-gcc \
+    TARGET_AR=riscv64-unknown-linux-gnu-ar \
+    TARGET_RANLIB=riscv64-unknown-linux-gnu-ranlib \
+    TARGET_CXX=riscv64-unknown-linux-gnu-g++ \
+    TARGET_READELF=riscv64-unknown-linux-gnu-readelf \
+    TARGET_SYSROOT=/usr/riscv64-unknown-linux-gnu/riscv64-unknown-linux-gnu/sysroot/ \
+    TARGET_C_INCLUDE_PATH=/usr/riscv64-unknown-linux-gnu/riscv64-unknown-linux-gnu/sysroot/usr/include/
+
+ENV CARGO_BUILD_TARGET=riscv64-unknown-linux-gnu
path: manylinux_2_31/riscv64/Dockerfile
user: login: messense
body: just noticed, the rust target should be [riscv64gc-unknown-linux-gnu](https://doc.rust-lang.org/rustc/platform-support/riscv64gc-unknown-linux-gnu.html#riscv64gc-unknown-linux-gnu)?
created_at: 2025-04-05T09:59:54Z
author_association: MEMBER
diff_hunk: @@ -0,0 +1,237 @@
+
+FROM ubuntu:22.04 AS toolchain
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update && \
+    apt-get install --no-install-recommends -y \
+    automake \
+    bison \
+    bzip2 \
+    ca-certificates \
+    cmake \
+    curl \
+    file \
+    flex \
+    g++ \
+    gawk \
+    gdb \
+    git \
+    gperf \
+    help2man \
+    libncurses-dev \
+    libssl-dev \
+    libtool-bin \
+    lzip \
+    make \
+    ninja-build \
+    patch \
+    pkg-config \
+    python3 \
+    rsync \
+    sudo \
+    texinfo \
+    unzip \
+    wget \
+    xz-utils \
+    libssl-dev \
+    libffi-dev
+
+# Install crosstool-ng
+# Backport https://github.com/crosstool-ng/crosstool-ng/pull/{2315,2316} to fix build
+RUN curl -Lf https://github.com/crosstool-ng/crosstool-ng/archive/crosstool-ng-1.27.0.tar.gz | tar xzf - && \
+    cd crosstool-ng-crosstool-ng-1.27.0 && \
+    curl -Lf https://github.com/crosstool-ng/crosstool-ng/pull/2315.patch | patch -Np1 && \
+    curl -Lf https://github.com/crosstool-ng/crosstool-ng/pull/2316.patch | patch -Np1 && \
+    ./bootstrap && \
+    ./configure --prefix=/usr/local && \
+    make -j4 && \
+    make install && \
+    cd .. && rm -rf crosstool-ng-*
+
+COPY .config /tmp/toolchain.config
+
+# Build cross compiler
+RUN mkdir build && \
+    cd build && \
+    cp /tmp/toolchain.config .config && \
+    export CT_ALLOW_BUILD_AS_ROOT_SURE=1 && \
+    ct-ng build.2 || { tail -n 500 build.log; exit $ERRCODE; } && \
+    cd .. && \
+    rm -rf build
+
+FROM ubuntu:22.04
+
+# Copy cross toolchain
+COPY --from=toolchain /usr/riscv64-unknown-linux-gnu /usr/riscv64-unknown-linux-gnu
+
+ENV DEBIAN_FRONTEND noninteractive
+ENV PATH=$PATH:/usr/riscv64-unknown-linux-gnu/bin
+
+ENV CC_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-gcc \
+    AR_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-ar \
+    CXX_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-g++
+
+ENV TARGET_CC=riscv64-unknown-linux-gnu-gcc \
+    TARGET_AR=riscv64-unknown-linux-gnu-ar \
+    TARGET_RANLIB=riscv64-unknown-linux-gnu-ranlib \
+    TARGET_CXX=riscv64-unknown-linux-gnu-g++ \
+    TARGET_READELF=riscv64-unknown-linux-gnu-readelf \
+    TARGET_SYSROOT=/usr/riscv64-unknown-linux-gnu/riscv64-unknown-linux-gnu/sysroot/ \
+    TARGET_C_INCLUDE_PATH=/usr/riscv64-unknown-linux-gnu/riscv64-unknown-linux-gnu/sysroot/usr/include/
+
+ENV CARGO_BUILD_TARGET=riscv64-unknown-linux-gnu
path: manylinux_2_31/riscv64/Dockerfile
user: login: messense
body: Fixed in 474db27e0a710ffd8b4a6006cd7914db538bd196
created_at: 2025-04-05T10:02:30Z
author_association: MEMBER
diff_hunk: @@ -0,0 +1,237 @@
+
+FROM ubuntu:22.04 AS toolchain
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update && \
+    apt-get install --no-install-recommends -y \
+    automake \
+    bison \
+    bzip2 \
+    ca-certificates \
+    cmake \
+    curl \
+    file \
+    flex \
+    g++ \
+    gawk \
+    gdb \
+    git \
+    gperf \
+    help2man \
+    libncurses-dev \
+    libssl-dev \
+    libtool-bin \
+    lzip \
+    make \
+    ninja-build \
+    patch \
+    pkg-config \
+    python3 \
+    rsync \
+    sudo \
+    texinfo \
+    unzip \
+    wget \
+    xz-utils \
+    libssl-dev \
+    libffi-dev
+
+# Install crosstool-ng
+# Backport https://github.com/crosstool-ng/crosstool-ng/pull/{2315,2316} to fix build
+RUN curl -Lf https://github.com/crosstool-ng/crosstool-ng/archive/crosstool-ng-1.27.0.tar.gz | tar xzf - && \
+    cd crosstool-ng-crosstool-ng-1.27.0 && \
+    curl -Lf https://github.com/crosstool-ng/crosstool-ng/pull/2315.patch | patch -Np1 && \
+    curl -Lf https://github.com/crosstool-ng/crosstool-ng/pull/2316.patch | patch -Np1 && \
+    ./bootstrap && \
+    ./configure --prefix=/usr/local && \
+    make -j4 && \
+    make install && \
+    cd .. && rm -rf crosstool-ng-*
+
+COPY .config /tmp/toolchain.config
+
+# Build cross compiler
+RUN mkdir build && \
+    cd build && \
+    cp /tmp/toolchain.config .config && \
+    export CT_ALLOW_BUILD_AS_ROOT_SURE=1 && \
+    ct-ng build.2 || { tail -n 500 build.log; exit $ERRCODE; } && \
+    cd .. && \
+    rm -rf build
+
+FROM ubuntu:22.04
+
+# Copy cross toolchain
+COPY --from=toolchain /usr/riscv64-unknown-linux-gnu /usr/riscv64-unknown-linux-gnu
+
+ENV DEBIAN_FRONTEND noninteractive
+ENV PATH=$PATH:/usr/riscv64-unknown-linux-gnu/bin
+
+ENV CC_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-gcc \
+    AR_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-ar \
+    CXX_riscv64_unknown_linux_gnu=riscv64-unknown-linux-gnu-g++
+
+ENV TARGET_CC=riscv64-unknown-linux-gnu-gcc \
+    TARGET_AR=riscv64-unknown-linux-gnu-ar \
+    TARGET_RANLIB=riscv64-unknown-linux-gnu-ranlib \
+    TARGET_CXX=riscv64-unknown-linux-gnu-g++ \
+    TARGET_READELF=riscv64-unknown-linux-gnu-readelf \
+    TARGET_SYSROOT=/usr/riscv64-unknown-linux-gnu/riscv64-unknown-linux-gnu/sysroot/ \
+    TARGET_C_INCLUDE_PATH=/usr/riscv64-unknown-linux-gnu/riscv64-unknown-linux-gnu/sysroot/usr/include/
+
+ENV CARGO_BUILD_TARGET=riscv64-unknown-linux-gnu
path: manylinux_2_31/riscv64/Dockerfile
user: login: Xeonacid
body: > just noticed, the rust target should be [riscv64gc-unknown-linux-gnu](https://doc.rust-lang.org/rustc/platform-support/riscv64gc-unknown-linux-gnu.html#riscv64gc-unknown-linux-gnu)?

Oops. Nice catch!
created_at: 2025-04-05T10:42:10Z
author_association: CONTRIBUTOR

PR comments:
user: login: Xeonacid
created_at: 2025-04-05T09:16:19Z
body: Hi @messense, could you please release it to the Docker Hub? Thank you very much!
author_association: CONTRIBUTOR
user: login: messense
created_at: 2025-04-05T09:16:30Z
body: Do we need to add these patches in this repo before crosstool-ng release a new version? Quoting https://crosstool-ng.github.io/docs/configuration/

> CT_TOP_DIR: The top directory where crosstool-NG is running. You shouldn’t need it in most cases. One case where you may need it is if you have local patches or config files and you store them in your current working directory, you can refer to them by using CT_TOP_DIR, such as: ${CT_TOP_DIR}/patches.myproject.
author_association: MEMBER
user: login: messense
created_at: 2025-04-05T09:17:36Z
body: > Hi @messense, could you please release it to the Docker Hub? Thank you very much!

https://github.com/rust-cross/manylinux-cross/actions/runs/14280472662

It's running, not sure whether it will succeed though.
author_association: MEMBER
user: login: Xeonacid
created_at: 2025-04-05T10:43:00Z
body: > Do we need to add these patches in this repo before crosstool-ng release a new version? Quoting https://crosstool-ng.github.io/docs/configuration/
> 
> > CT_TOP_DIR: The top directory where crosstool-NG is running. You shouldn’t need it in most cases. One case where you may need it is if you have local patches or config files and you store them in your current working directory, you can refer to them by using CT_TOP_DIR, such as: ${CT_TOP_DIR}/patches.myproject.

Thanks for the information. I'm new to the variable and will look into it. 🧐
author_association: CONTRIBUTOR