Add build_msan_toolchain.sh to produce a tarball containing an MSan-instrumented libc++/libc++abi/libunwind toolchain, and add an msan CI job that downloads the tarball and runs the test suite under MSan. Also add USE_MSAN CMake option that disables conflicting sanitizers, switches to lld, and propagates -fsanitize=memory to the shared library and fuzz_driver targets.
44 lines
1.2 KiB
Bash
Executable File
44 lines
1.2 KiB
Bash
Executable File
#!/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}"
|