#!/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 \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER="clang-${LLVM_VERSION}" \ -DCMAKE_CXX_COMPILER="clang++-${LLVM_VERSION}" \ -DLLVM_USE_SANITIZER=MemoryWithOrigins \ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \ -DLLVM_TARGETS_TO_BUILD=Native \ -DCMAKE_INSTALL_PREFIX="${MSAN_PREFIX}" \ -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \ -DLIBCXX_USE_COMPILER_RT=ON \ -DLIBCXXABI_USE_COMPILER_RT=ON \ -DLIBUNWIND_USE_COMPILER_RT=ON \ -DLIBCXX_INCLUDE_TESTS=OFF \ -DLIBCXXABI_INCLUDE_TESTS=OFF \ -DLIBUNWIND_INCLUDE_TESTS=OFF \ -DLIBCXX_ENABLE_CLANG_TIDY=OFF cmake --build build -j"${JOBS}" cmake --install build 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}"