diff --git a/barretenberg/cpp/CMakePresets.json b/barretenberg/cpp/CMakePresets.json index c6c2a0e2eb8..f1383e932a1 100644 --- a/barretenberg/cpp/CMakePresets.json +++ b/barretenberg/cpp/CMakePresets.json @@ -159,11 +159,15 @@ "description": "Build with thread sanitizer on clang16 with debugging information", "inherits": "clang16-dbg", "binaryDir": "build-msan", - "generator": "Unix Makefiles", "environment": { "CFLAGS": "-fsanitize=memory", "CXXFLAGS": "-fsanitize=memory", "LDFLAGS": "-fsanitize=memory" + }, + "cacheVariables": { + "HAVE_STD_REGEX": "ON", + "CMAKE_CXX_FLAGS": "$env{MSAN_CFLAGS}", + "CMAKE_EXE_LINKER_FLAGS": "$env{MSAN_LFLAGS}" } }, { diff --git a/barretenberg/cpp/dockerfiles/interactive/Dockerfile.msan.ubuntu b/barretenberg/cpp/dockerfiles/interactive/Dockerfile.msan.ubuntu new file mode 100644 index 00000000000..725dac7689d --- /dev/null +++ b/barretenberg/cpp/dockerfiles/interactive/Dockerfile.msan.ubuntu @@ -0,0 +1,43 @@ +FROM ubuntu:lunar + +RUN apt update && apt install -y \ + build-essential \ + curl \ + git \ + cmake \ + lsb-release \ + wget \ + software-properties-common \ + gnupg \ + ninja-build \ + npm \ + libssl-dev \ + jq \ + bash \ + libstdc++6 + +RUN wget https://apt.llvm.org/llvm.sh && chmod +x llvm.sh && ./llvm.sh 16 + +ENV CXX=clang++-16 +ENV CC=clang-16 + +RUN git clone --depth 1 -b release/16.x https://github.com/llvm/llvm-project + +RUN cd llvm-project + +RUN mkdir llvm-project/build + +RUN cmake -G Ninja -S llvm-project/runtimes -B llvm-project/build \ + -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \ + -DLLVM_USE_SANITIZER=MemoryWithOrigins \ + -DCMAKE_INSTALL_PREFIX=/opt + +RUN ninja -C llvm-project/build cxx cxxabi +RUN ninja -C llvm-project/build install-cxx install-cxxabi + +ENV MSAN_CFLAGS="-std=c++20 -fsanitize=memory -nostdinc++ -I/opt/include -I/opt/include/c++/v1" +ENV MSAN_LFLAGS="-fsanitize=memory -stdlib=libc++ -L/opt/lib -lc++abi -Wl,-rpath,/opt/lib" + +WORKDIR /usr/src/barretenberg/cpp + +CMD ["/bin/bash"] diff --git a/barretenberg/cpp/scripts/docker_interactive.sh b/barretenberg/cpp/scripts/docker_interactive.sh index 2a38b1530cd..65349d14b7b 100755 --- a/barretenberg/cpp/scripts/docker_interactive.sh +++ b/barretenberg/cpp/scripts/docker_interactive.sh @@ -9,8 +9,8 @@ # Enter script directory. set -eu cd $(dirname $0) -# allows for 'alpine' or 'ubuntu' +# allows for 'alpine', 'ubuntu' or 'msan.ubuntu' ENVIRONMENT_KIND="${1:-alpine}" DOCKERFILE="../dockerfiles/interactive/Dockerfile.$ENVIRONMENT_KIND" docker build -t "env-$ENVIRONMENT_KIND" -f "$DOCKERFILE" . -docker run -it --mount type=bind,source=$(pwd)/..,target=/usr/src/barretenberg/cpp "env-$ENVIRONMENT_KIND" \ No newline at end of file +docker run -it --mount type=bind,source=$(pwd)/..,target=/usr/src/barretenberg/cpp "env-$ENVIRONMENT_KIND"