| #!/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 $@ |