| #!/bin/bash | |
| # ignore-tidy-linelength | |
| # This script installs clang on the local machine. Note that we don't install | |
| # clang on Linux since its compiler story is just so different. Each container | |
| # has its own toolchain configured appropriately already. | |
| set -euo pipefail | |
| IFS=$'\n\t' | |
| source "$(cd "$(dirname "$0")" && pwd)/../shared.sh" | |
| # Update Windows's tarballs when bumping the version here. | |
| # Try to keep this in sync with src/ci/docker/scripts/build-clang.sh | |
| LLVM_VERSION="20.1.3" | |
| if isWindows && ! isKnownToBeMingwBuild; then | |
| # If we're compiling for MSVC then we, like most other distribution builders, | |
| # switch to clang as the compiler. This'll allow us eventually to enable LTO | |
| # amongst LLVM and rustc. Note that we only do this on MSVC as I don't think | |
| # clang has an output mode compatible with MinGW that we need. If it does we | |
| # should switch to clang for MinGW as well! | |
| # | |
| # The LLVM installer is an NSIS installer, which we can extract with 7z. We | |
| # don't want to run the installer directly; extracting it is more reliable | |
| # in CI environments. | |
| mkdir -p citools/clang-rust | |
| cd citools | |
| if [[ "${CI_JOB_NAME}" = *aarch64* ]]; then | |
| suffix=woa64 | |
| # On Arm64, the Ring crate requires that Clang be on the PATH. | |
| # https://github.com/briansmith/ring/blob/main/BUILDING.md | |
| ciCommandAddPath "$(cygpath -m "$(pwd)/clang-rust/bin")" | |
| else | |
| suffix=win64 | |
| fi | |
| retry curl -f "${MIRRORS_BASE}/LLVM-${LLVM_VERSION}-${suffix}.exe" \ | |
| -o "LLVM-${LLVM_VERSION}-${suffix}.exe" | |
| 7z x -oclang-rust/ "LLVM-${LLVM_VERSION}-${suffix}.exe" | |
| ciCommandSetEnv RUST_CONFIGURE_ARGS \ | |
| "${RUST_CONFIGURE_ARGS} --set llvm.clang-cl=$(pwd)/clang-rust/bin/clang-cl.exe" | |
| # Disable downloading CI LLVM on this builder; | |
| # setting up clang-cl just above conflicts with the default if-unchanged option. | |
| ciCommandSetEnv NO_DOWNLOAD_CI_LLVM 1 | |
| fi | |
| if isWindows; then | |
| # GitHub image 20210928.2 added LLVM, but it is broken (and we don't want | |
| # to use it anyways). | |
| rm -rf /c/Program\ Files/LLVM | |
| fi |