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 12set -e 13set -x 14 15here=$(cd `dirname $0`; echo `pwd`) 16cores=48 17 18echo "Bootstrapping CMake" 19pushd $here/../third_party/externals/cmake 20./bootstrap --parallel=$cores 21make -j $cores cmake 22popd 23 24cmake=$here/../third_party/externals/cmake/bin/cmake 25 26echo "Building Clang" 27pushd $here/../third_party/externals/llvm 28mkdir -p out/ 29cd out/ 30rm -f CMakeCache.txt # Force CMake to re-configure, in case DEPS has changed. 31$cmake -DCMAKE_BUILD_TYPE=Release -G Ninja .. 32ninja 33popd 34 35export CC=$here/../third_party/externals/llvm/out/bin/clang 36export CXX=$here/../third_party/externals/llvm/out/bin/clang++ 37$CC --version 38 39if [[ "$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}" 54fi 55export GYP_DEFINES="skia_sanitizer=$1 ${GYP_DEFINES}" 56 57shift 58make $@ 59