Skip to content

Commit e3872aa

Browse files
committed
ci: build with clang instead of gcc
1 parent bc2bea5 commit e3872aa

File tree

2 files changed

+97
-2
lines changed

2 files changed

+97
-2
lines changed

pyproject.toml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,23 @@ select = "*-macos*"
117117
inherit.environment = "append"
118118
environment = { MACOSX_DEPLOYMENT_TARGET = "10.9" }
119119

120+
[[tool.cibuildwheel.overrides]]
121+
select = "*-*linux*"
122+
before-all = "./scripts/install-static-clang.sh"
123+
inherit.environment = "append"
124+
environment = { CC = "/opt/clang/bin/clang", CXX = "/opt/clang/bin/clang++", LDFLAGS = "-fuse-ld=lld" }
125+
inherit.environment-pass = "append"
126+
environment-pass = ["RUNNER_ARCH"]
127+
120128
[[tool.cibuildwheel.overrides]]
121129
select = "*-musllinux_*"
122130
inherit.environment = "append"
123-
environment = { LDFLAGS = "-static-libstdc++ -static-libgcc" }
131+
environment = { LDFLAGS = "-fuse-ld=lld -static-libstdc++ -static-libgcc -lssp_nonshared" }
124132

125133
[[tool.cibuildwheel.overrides]]
126134
select = "*-musllinux_{ppc64le,s390x,riscv64}"
127135
build-frontend = "pip" # uv not available
128136
inherit.test-command = "prepend"
129-
inherit.config-settings = "append"
130137
test-command = "pip check"
131138

132139
# Doesn't account for endianness in 1.13.0 https://github.com/ninja-build/ninja/issues/2614

scripts/install-static-clang.sh

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
#!/bin/bash
2+
3+
# Stop at any error, show all commands
4+
set -exuo pipefail
5+
6+
TOOLCHAIN_PATH=/opt/clang
7+
8+
# Download static-clang
9+
DEFAULT_ARCH="$(uname -m)"
10+
if [ "${STATIC_CLANG_ARCH:-}" == "" ]; then
11+
STATIC_CLANG_ARCH="${RUNNER_ARCH:-${DEFAULT_ARCH}}"
12+
fi
13+
case "${STATIC_CLANG_ARCH}" in
14+
ARM64|aarch64|arm64|arm64/*) GO_ARCH=arm64;;
15+
ARM|armv7l|armv8l|arm|arm/v7) GO_ARCH=arm;; # assume arm/v7 for arm
16+
X64|x86_64|amd64|amd64/*) GO_ARCH=amd64;;
17+
X86|i686|386) GO_ARCH=386;;
18+
ppc64le) GO_ARCH=ppc64le;;
19+
riscv64) GO_ARCH=riscv64;;
20+
s390x) GO_ARCH=s390x;;
21+
*) echo "No static-clang toolchain for ${CLANG_ARCH}">2; exit 1;;
22+
esac
23+
STATIC_CLANG_VERSION=20.1.8.0
24+
STATIC_CLANG_FILENAME="static-clang-linux-${GO_ARCH}.tar.xz"
25+
STATIC_CLANG_URL="https://github.com/mayeut/static-clang-images/releases/download/v${STATIC_CLANG_VERSION}/${STATIC_CLANG_FILENAME}"
26+
pushd /tmp
27+
cat<<'EOF' | grep "${STATIC_CLANG_FILENAME}" > "${STATIC_CLANG_FILENAME}.sha256"
28+
5ef070163055340d5bbf11263e60396b4f221c7dab90e167424e1b9b68a6048e static-clang-linux-386.tar.xz
29+
3a25cb4eae724cad96d7e504ce7669a824f61d57d27716fd47d0a9f1fe2d8fdf static-clang-linux-amd64.tar.xz
30+
250e5cc18fb7b6f7a4a0d8fe63ddf8a885f7351c4be7e4a164f4c04dfbee5a7f static-clang-linux-arm.tar.xz
31+
da56c2b13a0c3e676e010d61a87753a975de18ae9eaa65247ca6a6d22bb95ab4 static-clang-linux-arm64.tar.xz
32+
466af6ca1be0cd4f2ae6704ce5ae0f86a1648e999756def1680b639bc63d2916 static-clang-linux-ppc64le.tar.xz
33+
8078365b22f1d5290db7e60501daa80c91da8d530720d3fc974ab3f81e56bae5 static-clang-linux-riscv64.tar.xz
34+
97e933c45a35c827530888e1c2f6b6eee0140ccb2089fdfdf9f99454d4c470e0 static-clang-linux-s390x.tar.xz
35+
EOF
36+
curl -fsSLO "${STATIC_CLANG_URL}"
37+
sha256sum -c "${STATIC_CLANG_FILENAME}.sha256"
38+
tar -C /opt -xf "${STATIC_CLANG_FILENAME}"
39+
popd
40+
41+
# configure target triple
42+
case "${AUDITWHEEL_POLICY}-${AUDITWHEEL_ARCH}" in
43+
manylinux*-armv7l) TARGET_TRIPLE=armv7-unknown-linux-gnueabihf;;
44+
musllinux*-armv7l) TARGET_TRIPLE=armv7-alpine-linux-musleabihf;;
45+
manylinux*-ppc64le) TARGET_TRIPLE=powerpc64le-unknown-linux-gnu;;
46+
musllinux*-ppc64le) TARGET_TRIPLE=powerpc64le-alpine-linux-musl;;
47+
manylinux*-*) TARGET_TRIPLE=${AUDITWHEEL_ARCH}-unknown-linux-gnu;;
48+
musllinux*-*) TARGET_TRIPLE=${AUDITWHEEL_ARCH}-alpine-linux-musl;;
49+
esac
50+
case "${AUDITWHEEL_ARCH}" in
51+
riscv64) M_ARCH="-march=rv64gc";;
52+
x86_64) M_ARCH="-march=x86-64";;
53+
armv7l) M_ARCH="-march=armv7a";;
54+
i686) M_ARCH="-march=i686";;
55+
esac
56+
GCC_TRIPLE=$(gcc -dumpmachine)
57+
58+
cat<<EOF >"${TOOLCHAIN_PATH}/bin/${AUDITWHEEL_PLAT}.cfg"
59+
-target ${TARGET_TRIPLE}
60+
${M_ARCH:-}
61+
--gcc-toolchain=${DEVTOOLSET_ROOTPATH:-}/usr
62+
--gcc-triple=${GCC_TRIPLE}
63+
EOF
64+
65+
cat<<EOF >"${TOOLCHAIN_PATH}/bin/clang.cfg"
66+
@${AUDITWHEEL_PLAT}.cfg
67+
EOF
68+
69+
cat<<EOF >"${TOOLCHAIN_PATH}/bin/clang++.cfg"
70+
@${AUDITWHEEL_PLAT}.cfg
71+
EOF
72+
73+
cat<<EOF >"${TOOLCHAIN_PATH}/bin/clang-cpp.cfg"
74+
@${AUDITWHEEL_PLAT}.cfg
75+
EOF
76+
77+
# override entrypoint to add the toolchain to PATH
78+
mv /usr/local/bin/manylinux-entrypoint /usr/local/bin/manylinux-entrypoint-org
79+
cat<<EOF >/usr/local/bin/manylinux-entrypoint
80+
#!/bin/bash
81+
82+
set -eu
83+
84+
export PATH="${TOOLCHAIN_PATH}/bin:\${PATH}"
85+
exec /usr/local/bin/manylinux-entrypoint-org "\$@"
86+
EOF
87+
88+
chmod +x /usr/local/bin/manylinux-entrypoint

0 commit comments

Comments
 (0)