|
| 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