#!/bin/bash set -euxo pipefail LLVM_VERSION="${LLVM_VERSION:-21}" MSAN_PREFIX="${MSAN_PREFIX:-$PWD/msan}" JOBS="${JOBS:-$(nproc)}" cd /tmp rm -rf libcxx-msan mkdir libcxx-msan cd libcxx-msan git clone --depth=1 "https://github.com/llvm/llvm-project.git" -b "release/${LLVM_VERSION}.x" cmake -S llvm-project/runtimes -B build_msan \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER="clang++-${LLVM_VERSION}" \ -DCMAKE_C_COMPILER="clang-${LLVM_VERSION}" \ -DCMAKE_INSTALL_PREFIX="${MSAN_PREFIX}" \ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \ -DLLVM_USE_SANITIZER=MemoryWithOrigins cmake --build build_msan -j"${JOBS}" cmake --install build_msan cmake -S llvm-project/runtimes -B build_nomsan \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_COMPILER="clang++-${LLVM_VERSION}" \ -DCMAKE_C_COMPILER="clang-${LLVM_VERSION}" \ -DCMAKE_INSTALL_PREFIX="${MSAN_PREFIX}" \ -DLLVM_ENABLE_RUNTIMES="libunwind" cmake --build build_nomsan -j"${JOBS}" cmake --install build_nomsan VERSION="$(clang-"${LLVM_VERSION}" --version | head -n1 | sed -E 's/.*clang version ([0-9.]+).*/\1/')" TARBALL="msan-toolchain-${VERSION}.tar.zst" tar --zstd -cf "${TARBALL}" -C "${MSAN_PREFIX}" . TARBALL_PATH="$(pwd)/${TARBALL}" echo "Created: ${TARBALL_PATH}"