You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.8 KiB
77 lines
1.8 KiB
8 years ago
|
#!/bin/bash
|
||
|
set -e
|
||
|
|
||
|
# file:///usr/share/doc/clang/html/UsersManual.html#controlling-code-generation
|
||
|
sanitize=${sanitize:-memory}
|
||
|
sanitize_other="bounds,bool,enum,null"
|
||
|
compiler_flags=""
|
||
|
|
||
|
build_dir=build-clang-$sanitize
|
||
|
utils_dir=$(dirname $(readlink -f "$0"))
|
||
|
src_dir=$utils_dir/..
|
||
|
steps=(
|
||
|
clean
|
||
|
cmake
|
||
|
make
|
||
|
run
|
||
|
)
|
||
|
|
||
|
if [ -n "$CLANG_ROOT" ]; then
|
||
|
export PATH=$CLANG_ROOT:$PATH
|
||
|
fi
|
||
|
CXX=${CXX:-clang++}
|
||
|
|
||
|
if [ "$sanitize" == "address" ]; then
|
||
|
sanitize_other="$sanitize_other,address-full,init-order"
|
||
|
|
||
|
export ASAN_SYMBOLIZER_PATH=${ASAN_SYMBOLIZER_PATH:-$(which llvm-symbolizer)}
|
||
|
export ASAN_OPTIONS=${ASAN_OPTIONS:-"detect_leaks=1 detect_stack_use_after_return=1 print_stats=1"}
|
||
|
elif [ "$sanitize" == "memory" ]; then
|
||
|
compiler_flags="$compiler_flags -fsanitize-memory-track-origins"
|
||
|
|
||
|
# from https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/msan/msan.cc
|
||
|
export MSAN_SYMBOLIZER_PATH=${MSAN_SYMBOLIZER_PATH:-$(which llvm-symbolizer)}
|
||
|
export MSAN_OPTIONS=${MSAN_OPTIONS:-"keep_going=1 halt_on_error=0 report_umrs=0"}
|
||
|
elif [ "$sanitize" == "thread" ]; then
|
||
|
echo
|
||
|
fi
|
||
|
|
||
|
echo "=== Using $sanitize sanitizer (directory \"$build_dir\") ==="
|
||
|
|
||
|
step=2
|
||
|
if [ -d "$build_dir" ]; then
|
||
|
echo "Select starting point:"
|
||
|
select step in "${steps[@]}"; do step=$REPLY; break; done
|
||
|
fi
|
||
|
|
||
|
has_step () {
|
||
|
[[ $step -le $1 ]]
|
||
|
}
|
||
|
|
||
|
has_step "${#steps[*]}"
|
||
|
|
||
|
if has_step 1; then
|
||
|
rm -r "$build_dir" || exit 1
|
||
|
fi
|
||
|
|
||
|
mkdir -p "$build_dir"
|
||
|
cd "$build_dir"
|
||
|
|
||
|
if has_step 2; then
|
||
|
cmake \
|
||
|
-DCMAKE_INSTALL_PREFIX="$PWD/install" \
|
||
|
-DCMAKE_CXX_COMPILER="$CXX" \
|
||
|
-DCMAKE_CXX_FLAGS="-fsanitize=$sanitize,$sanitize_other $compiler_flags -fno-omit-frame-pointer" \
|
||
|
-DCMAKE_BUILD_TYPE=Debug \
|
||
|
"$src_dir"
|
||
|
fi
|
||
|
|
||
|
if has_step 3; then
|
||
|
make -j4 install
|
||
|
fi
|
||
|
|
||
|
if has_step 4; then
|
||
|
./copyq -s test1 "$@"
|
||
|
fi
|
||
|
|