| #!/bin/bash |
| |
| # Build Skia with one of Clang's many sanitizers. |
| # |
| # $ tools/xsan_build {address,thread,undefined,etc.} [any other flags to pass to make...] |
| # |
| # This script assumes the use of Clang >=3.2. |
| # |
| # For more information, see: |
| # http://clang.llvm.org/docs/UsersManual.html#controlling-code-generation |
| |
| set -e |
| set -x |
| |
| here=$(cd `dirname $0`; echo `pwd`) |
| cores=48 |
| |
| echo "Bootstrapping CMake" |
| pushd $here/../third_party/externals/cmake |
| ./bootstrap --parallel=$cores |
| make -j $cores cmake |
| popd |
| |
| cmake=$here/../third_party/externals/cmake/bin/cmake |
| |
| echo "Building Clang" |
| pushd $here/../third_party/externals/llvm |
| mkdir -p out/ |
| cd out/ |
| rm -f CMakeCache.txt # Force CMake to re-configure, in case DEPS has changed. |
| $cmake -DCMAKE_BUILD_TYPE=Release -G Ninja .. |
| ninja |
| popd |
| |
| export CC=$here/../third_party/externals/llvm/out/bin/clang |
| export CXX=$here/../third_party/externals/llvm/out/bin/clang++ |
| $CC --version |
| |
| if [[ "$1" == "memory" ]]; then |
| echo "Building libc++ with MSAN" |
| pushd $here/../third_party/externals/llvm |
| mkdir -p msan_out/ |
| cd msan_out/ |
| rm -f CMakeCache.txt # Force CMake to re-configure, in case DEPS has changed. |
| $cmake -DLLVM_USE_SANITIZER=MemoryWithOrigins -DCMAKE_BUILD_TYPE=Release -G Ninja .. |
| ninja cxx cxxabi # No need to build all of LLVM+Clang with MSAN, just libc++. |
| popd |
| |
| msan_out=$here/../third_party/externals/llvm/msan_out |
| |
| export GYP_DEFINES="skia_gpu=0 skia_no_fontconfig=1 skia_freetype_static=1 ${GYP_DEFINES}" |
| export CXXFLAGS="-stdlib=libc++ -I$msan_out/include ${CXX_FLAGS}" |
| export LDFLAGS="-stdlib=libc++ -L$msan_out/lib -Wl,-rpath,$msan_out/lib ${LDFLAGS}" |
| fi |
| export GYP_DEFINES="skia_sanitizer=$1 ${GYP_DEFINES}" |
| |
| shift |
| make $@ |