1 #!/bin/bash 2 3 # Build Skia with one of Clang's many sanitizers. 4 # 5 # $ tools/xsan_build {address,thread,undefined,etc.} [any other flags to pass to make...] 6 # 7 # This script assumes the use of Clang >=3.2. 8 # 9 # For more information, see: 10 # http://clang.llvm.org/docs/UsersManual.html#controlling-code-generation 11 12 set -e 13 set -x 14 15 here=$(cd `dirname $0`; echo `pwd`) 16 cores=48 17 18 echo "Bootstrapping CMake" 19 pushd $here/../third_party/externals/cmake 20 ./bootstrap --parallel=$cores 21 make -j $cores cmake 22 popd 23 24 cmake=$here/../third_party/externals/cmake/bin/cmake 25 26 echo "Building Clang" 27 pushd $here/../third_party/externals/llvm 28 mkdir -p out/ 29 cd out/ 30 rm -f CMakeCache.txt # Force CMake to re-configure, in case DEPS has changed. 31 $cmake -DCMAKE_BUILD_TYPE=Release -G Ninja .. 32 ninja 33 popd 34 35 export CC=$here/../third_party/externals/llvm/out/bin/clang 36 export CXX=$here/../third_party/externals/llvm/out/bin/clang++ 37 $CC --version 38 39 if [[ "$1" == "memory" ]]; then 40 echo "Building libc++ with MSAN" 41 pushd $here/../third_party/externals/llvm 42 mkdir -p msan_out/ 43 cd msan_out/ 44 rm -f CMakeCache.txt # Force CMake to re-configure, in case DEPS has changed. 45 $cmake -DLLVM_USE_SANITIZER=MemoryWithOrigins -DCMAKE_BUILD_TYPE=Release -G Ninja .. 46 ninja cxx cxxabi # No need to build all of LLVM+Clang with MSAN, just libc++. 47 popd 48 49 msan_out=$here/../third_party/externals/llvm/msan_out 50 51 export GYP_DEFINES="skia_gpu=0 skia_no_fontconfig=1 skia_freetype_static=1 ${GYP_DEFINES}" 52 export CXXFLAGS="-stdlib=libc++ -I$msan_out/include ${CXX_FLAGS}" 53 export LDFLAGS="-stdlib=libc++ -L$msan_out/lib -Wl,-rpath,$msan_out/lib ${LDFLAGS}" 54 fi 55 export GYP_DEFINES="skia_sanitizer=$1 ${GYP_DEFINES}" 56 57 shift 58 make $@ 59