00_setup_env_native_fuzz_with_msan.sh raw
1 #!/usr/bin/env bash
2 #
3 # Copyright (c) 2020-present The Limenka developers
4 # Distributed under the MIT software license, see the accompanying
5 # file COPYING or http://www.opensource.org/licenses/mit-license.php.
6
7 export LC_ALL=C.UTF-8
8
9 export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:24.04"
10 export APT_LLVM_V="21"
11 LIBCXX_DIR="/cxx_build/"
12 export MSAN_FLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -g -O1 -fno-optimize-sibling-calls"
13 # -lstdc++ to resolve link issues due to upstream packaging
14 LIBCXX_FLAGS="-nostdinc++ -nostdlib++ -isystem ${LIBCXX_DIR}include/c++/v1 -L${LIBCXX_DIR}lib -Wl,-rpath,${LIBCXX_DIR}lib -lc++ -lc++abi -lpthread -Wno-unused-command-line-argument -lstdc++"
15 export MSAN_AND_LIBCXX_FLAGS="${MSAN_FLAGS} ${LIBCXX_FLAGS}"
16
17 export CONTAINER_NAME="ci_native_fuzz_msan"
18 # BDB generates false-positives and will be removed in future
19 export PACKAGES="ninja-build clang-${APT_LLVM_V} llvm-${APT_LLVM_V} llvm-${APT_LLVM_V}-dev libclang-${APT_LLVM_V}-dev libclang-rt-${APT_LLVM_V}-dev"
20 export DEP_OPTS="DEBUG=1 NO_BDB=1 NO_QT=1 CC=clang CXX=clang++ CFLAGS='${MSAN_FLAGS}' CXXFLAGS='${MSAN_AND_LIBCXX_FLAGS}'"
21 export GOAL="all"
22 # Setting CMAKE_{C,CXX}_FLAGS_DEBUG flags to an empty string ensures that the flags set in MSAN_FLAGS remain unaltered.
23 # _FORTIFY_SOURCE is not compatible with MSAN.
24 export LIMENKA_CONFIG="\
25 -DCMAKE_BUILD_TYPE=Debug \
26 -DCMAKE_C_FLAGS_DEBUG='' \
27 -DCMAKE_CXX_FLAGS_DEBUG='' \
28 -DBUILD_FOR_FUZZING=ON \
29 -DSANITIZERS=fuzzer,memory \
30 -DAPPEND_CPPFLAGS='-DBOOST_MULTI_INDEX_ENABLE_SAFE_MODE -U_FORTIFY_SOURCE' \
31 "
32 export USE_INSTRUMENTED_LIBCPP="MemoryWithOrigins"
33 export RUN_UNIT_TESTS="false"
34 export RUN_FUNCTIONAL_TESTS="false"
35 export RUN_FUZZ_TESTS=true
36