[zorg] r224520 - Refactor sanitizer build scripts.

Sergey Matveev earthdok at google.com
Thu Dec 18 06:16:59 PST 2014


Author: smatveev
Date: Thu Dec 18 08:16:58 2014
New Revision: 224520

URL: http://llvm.org/viewvc/llvm-project?rev=224520&view=rev
Log:
Refactor sanitizer build scripts.

- Move common code from buildbot_bootstrap.sh and buildbot_fast.sh to
buildbot_functions.sh.
- Do not capitalize variable names needlessly.
- Use mkdir -p where appropriate instead of "mdkir if directory does not exist".

Modified:
    zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_bootstrap.sh
    zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_fast.sh
    zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_functions.sh

Modified: zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_bootstrap.sh
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_bootstrap.sh?rev=224520&r1=224519&r2=224520&view=diff
==============================================================================
--- zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_bootstrap.sh (original)
+++ zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_bootstrap.sh Thu Dec 18 08:16:58 2014
@@ -11,35 +11,32 @@ ROOT=`pwd`
 PLATFORM=`uname`
 export PATH="/usr/local/bin:$PATH"
 
+STAGE1_DIR=llvm_build0
+STAGE2_ASAN_DIR=llvm_build_asan
+STAGE2_MSAN_DIR=llvm_build_msan
+STAGE2_LIBCXX_MSAN_DIR=libcxx_build_msan
+STAGE2_UBSAN_DIR=llvm_build_ubsan
+STAGE3_ASAN_DIR=llvm_build2_asan
+STAGE3_MSAN_DIR=llvm_build2_msan
+MAKE_JOBS=${MAX_MAKE_JOBS:-16}
+LLVM=$ROOT/llvm
+CMAKE_COMMON_OPTIONS="-GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_PARALLEL_LINK_JOBS=3"
+
 if [ "$BUILDBOT_CLOBBER" != "" ]; then
   echo @@@BUILD_STEP clobber@@@
   rm -rf llvm
-  rm -rf llvm_build0
-fi
-
-MEMORY_SANITIZER_KIND="Memory"
-BUILDBOT_MSAN_ORIGINS=${BUILDBOT_MSAN_ORIGINS:-}
-if [ "$BUILDBOT_MSAN_ORIGINS" != "" ]; then
-    MEMORY_SANITIZER_KIND="MemoryWithOrigins"
+  rm -rf ${STAGE1_DIR}
 fi
 
 # CMake does not notice that the compiler itself has changed.
 # Anyway, incremental builds of stage2 and stage3 compilers don't make sense.
 # Clobber the build trees.
-rm -rf libcxx_build_msan
-rm -rf llvm_build_msan
-rm -rf llvm_build2_msan
-rm -rf llvm_build_asan
-rm -rf llvm_build2_asan
-rm -rf llvm_build_ubsan
-
-MAKE_JOBS=${MAX_MAKE_JOBS:-16}
-LLVM=$ROOT/llvm
-
-type -a gcc
-type -a g++
-CMAKE_COMMON_OPTIONS="-GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_PARALLEL_LINK_JOBS=3"
-CMAKE_STAGE1_OPTIONS="${CMAKE_COMMON_OPTIONS}"
+rm -rf ${STAGE2_LIBCXX_MSAN_DIR}
+rm -rf ${STAGE2_MSAN_DIR}
+rm -rf ${STAGE3_MSAN_DIR}
+rm -rf ${STAGE2_ASAN_DIR}
+rm -rf ${STAGE3_ASAN_DIR}
+rm -rf ${STAGE2_UBSAN_DIR}
 
 echo @@@BUILD_STEP update@@@
 buildbot_update
@@ -47,130 +44,49 @@ buildbot_update
 # Stage 1
 
 echo @@@BUILD_STEP build stage1 clang@@@
-if [ ! -d llvm_build0 ]; then
-  mkdir llvm_build0
-fi
-# Build cxx/cxxabi to fool the compiler check in MSan stage 2.
-(cd llvm_build0 && cmake ${CMAKE_STAGE1_OPTIONS} $LLVM && \
-  ninja clang compiler-rt llvm-symbolizer) || \
-  echo @@@STEP_FAILURE@@@
 
-CLANG_PATH=$ROOT/llvm_build0/bin
-CMAKE_STAGE2_COMMON_OPTIONS="\
-  ${CMAKE_COMMON_OPTIONS} \
-  -DCMAKE_C_COMPILER=${CLANG_PATH}/clang \
-  -DCMAKE_CXX_COMPILER=${CLANG_PATH}/clang++ \
-  "
-LLVM_SYMBOLIZER_PATH=${CLANG_PATH}/llvm-symbolizer
-export ASAN_SYMBOLIZER_PATH=${LLVM_SYMBOLIZER_PATH}
-export MSAN_SYMBOLIZER_PATH=${LLVM_SYMBOLIZER_PATH}
+build_stage1_clang
 
 # Stage 2 / Memory Sanitizer
 
-echo @@@BUILD_STEP build libcxx/msan@@@
-if [ ! -d libcxx_build_msan ]; then
-  mkdir libcxx_build_msan
-fi
-
-(cd libcxx_build_msan && \
-  cmake \
-    ${CMAKE_STAGE2_COMMON_OPTIONS} \
-    -DLLVM_USE_SANITIZER=${MEMORY_SANITIZER_KIND} \
-    $LLVM && \
-  ninja cxx cxxabi) || echo @@@STEP_FAILURE@@@
-
-
-echo @@@BUILD_STEP build clang/msan@@@
-if [ ! -d llvm_build_msan ]; then
-  mkdir llvm_build_msan
-fi
-
-MSAN_LDFLAGS="-lc++abi -Wl,--rpath=${ROOT}/libcxx_build_msan/lib -L${ROOT}/libcxx_build_msan/lib"
-# See http://llvm.org/bugs/show_bug.cgi?id=19071, http://www.cmake.org/Bug/view.php?id=15264
-CMAKE_BUG_WORKAROUND_CFLAGS="$MSAN_LDFLAGS -fsanitize=memory -w"
-MSAN_CFLAGS="-I${ROOT}/libcxx_build_msan/include -I${ROOT}/libcxx_build_msan/include/c++/v1 $CMAKE_BUG_WORKAROUND_CFLAGS"
-
-(cd llvm_build_msan && \
- cmake ${CMAKE_STAGE2_COMMON_OPTIONS} \
-   -DLLVM_USE_SANITIZER=${MEMORY_SANITIZER_KIND} \
-   -DLLVM_ENABLE_LIBCXX=ON \
-   -DCMAKE_C_FLAGS="${MSAN_CFLAGS}" \
-   -DCMAKE_CXX_FLAGS="${MSAN_CFLAGS}" \
-   -DCMAKE_EXE_LINKER_FLAGS="${MSAN_LDFLAGS}" \
-   $LLVM && \
- ninja clang) || echo @@@STEP_FAILURE@@@
-
-echo @@@BUILD_STEP check-llvm msan@@@
-
-(cd llvm_build_msan && ninja check-llvm) || echo @@@STEP_WARNINGS@@@
-
-echo @@@BUILD_STEP check-clang msan@@@
-
-(cd llvm_build_msan && ninja check-clang) || echo @@@STEP_FAILURE@@@
+build_stage2_msan
 
+check_stage2_msan
 
 # Stage 3 / MemorySanitizer
 
 echo @@@BUILD_STEP build stage3/msan clang@@@
 
-if [ ! -d llvm_build2_msan ]; then
-  mkdir llvm_build2_msan
-fi
+mkdir -p ${STAGE3_MSAN_DIR}
 
-CLANG_MSAN_PATH=$ROOT/llvm_build_msan/bin
-CMAKE_STAGE3_MSAN_OPTIONS="${CMAKE_COMMON_OPTIONS} -DCMAKE_C_COMPILER=${CLANG_MSAN_PATH}/clang -DCMAKE_CXX_COMPILER=${CLANG_MSAN_PATH}/clang++ -DLLVM_PARALLEL_COMPILE_JOBS=15"
+clang_msan_path=$ROOT/${STAGE2_MSAN_DIR}/bin
+cmake_stage3_msan_options="${CMAKE_COMMON_OPTIONS} -DCMAKE_C_COMPILER=${clang_msan_path}/clang -DCMAKE_CXX_COMPILER=${clang_msan_path}/clang++ -DLLVM_PARALLEL_COMPILE_JOBS=15"
 
-(cd llvm_build2_msan && cmake ${CMAKE_STAGE3_MSAN_OPTIONS} $LLVM && ninja) || \
+(cd ${STAGE3_MSAN_DIR} && cmake ${cmake_stage3_msan_options} $LLVM && ninja) || \
   echo @@@STEP_FAILURE@@@
 
 
 echo @@@BUILD_STEP check-all stage3/msan@@@
 
-(cd llvm_build2_msan && ninja check-all) || echo @@@STEP_FAILURE@@@
+(cd ${STAGE3_MSAN_DIR} && ninja check-all) || echo @@@STEP_FAILURE@@@
 
 
 # Stage 2 / AddressSanitizer
 
-echo @@@BUILD_STEP build clang/asan@@@
-
-# Turn on init-order checker as ASan runtime option.
-export ASAN_OPTIONS="check_initialization_order=true:detect_stack_use_after_return=1:detect_leaks=1"
-CMAKE_ASAN_OPTIONS=" \
-  ${CMAKE_STAGE2_COMMON_OPTIONS} \
-  -DLLVM_USE_SANITIZER=Address \
-  "
-
-if [ ! -d llvm_build_asan ]; then
-  mkdir llvm_build_asan
-fi
-
-(cd llvm_build_asan && \
- cmake ${CMAKE_ASAN_OPTIONS} $LLVM && \
- ninja clang) || echo @@@STEP_FAILURE@@@
-
-
-echo @@@BUILD_STEP check-llvm asan@@@
-
-(cd llvm_build_asan && ninja check-llvm) || echo @@@STEP_FAILURE@@@
-
-
-echo @@@BUILD_STEP check-clang asan@@@
-
-(cd llvm_build_asan && ninja check-clang) || echo @@@STEP_FAILURE@@@
+build_stage2_asan
 
+check_stage2_asan
 
 # Stage 3 / AddressSanitizer
 
 echo @@@BUILD_STEP build stage3/asan clang@@@
 
-if [ ! -d llvm_build2_asan ]; then
-  mkdir llvm_build2_asan
-fi
+mkdir -p ${STAGE3_ASAN_DIR}
 
-CLANG_ASAN_PATH=$ROOT/llvm_build_asan/bin
-CMAKE_STAGE3_ASAN_OPTIONS="${CMAKE_COMMON_OPTIONS} -DCMAKE_C_COMPILER=${CLANG_ASAN_PATH}/clang -DCMAKE_CXX_COMPILER=${CLANG_ASAN_PATH}/clang++ -DLLVM_PARALLEL_COMPILE_JOBS=10"
+clang_asan_path=$ROOT/${STAGE2_ASAN_DIR}/bin
+cmake_stage3_asan_options="${CMAKE_COMMON_OPTIONS} -DCMAKE_C_COMPILER=${clang_asan_path}/clang -DCMAKE_CXX_COMPILER=${clang_asan_path}/clang++ -DLLVM_PARALLEL_COMPILE_JOBS=10"
 
-(cd llvm_build2_asan && cmake ${CMAKE_STAGE3_ASAN_OPTIONS} $LLVM && ninja) || \
+(cd ${STAGE3_ASAN_DIR} && cmake ${cmake_stage3_asan_options} $LLVM && ninja) || \
   echo @@@STEP_FAILURE@@@
 
 
@@ -178,34 +94,16 @@ echo @@@BUILD_STEP check-all stage3/asan
 
 export ASAN_OPTIONS="check_initialization_order=true:detect_leaks=1"
 
-(cd llvm_build2_asan && ninja check-all) || echo @@@STEP_FAILURE@@@
+(cd ${STAGE3_ASAN_DIR} && ninja check-all) || echo @@@STEP_FAILURE@@@
 
 echo @@@BUILD_STEP check-all stage3/asan-uar@@@
 
 export ASAN_OPTIONS="check_initialization_order=true:detect_stack_use_after_return=1:detect_leaks=1"
 
-(cd llvm_build2_asan && ninja check-all) || echo @@@STEP_FAILURE@@@
+(cd ${STAGE3_ASAN_DIR} && ninja check-all) || echo @@@STEP_FAILURE@@@
 
 # Stage 2 / UndefinedBehaviorSanitizer
-echo @@@BUILD_STEP build clang/ubsan@@@
-
-export UBSAN_OPTIONS="external_symbolizer_path=${LLVM_SYMBOLIZER_PATH}:print_stacktrace=1"
-CMAKE_UBSAN_OPTIONS=" \
-  ${CMAKE_STAGE2_COMMON_OPTIONS} \
-  -DCMAKE_BUILD_TYPE=Debug \
-  -DLLVM_USE_SANITIZER=Undefined \
-  "
-
-if [ ! -d llvm_build_ubsan ]; then
-  mkdir llvm_build_ubsan
-fi
-
-(cd llvm_build_ubsan &&
-  cmake ${CMAKE_UBSAN_OPTIONS} $LLVM && \
-  ninja clang) || echo @@@STEP_FAILURE@@@
 
-echo @@@BUILD_STEP check-llvm ubsan@@@
-(cd llvm_build_ubsan && ninja check-llvm) || echo @@@STEP_WARNINGS@@@
+build_stage2_ubsan
 
-echo @@@BUILD_STEP check-clang ubsan@@@
-(cd llvm_build_ubsan && ninja check-clang) || echo @@@STEP_WARNINGS@@@
+check_stage2_ubsan

Modified: zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_fast.sh
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_fast.sh?rev=224520&r1=224519&r2=224520&view=diff
==============================================================================
--- zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_fast.sh (original)
+++ zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_fast.sh Thu Dec 18 08:16:58 2014
@@ -11,27 +11,20 @@ ROOT=`pwd`
 PLATFORM=`uname`
 export PATH="/usr/local/bin:$PATH"
 
-if [ "$BUILDBOT_CLOBBER" != "" ]; then
-  echo @@@BUILD_STEP clobber@@@
-  rm -rf llvm
-  rm -rf llvm_build0
-fi
-
+STAGE1_DIR=llvm_build0
+STAGE2_ASAN_DIR=llvm_build_asan
+STAGE2_MSAN_DIR=llvm_build_msan
+STAGE2_LIBCXX_MSAN_DIR=libcxx_build_msan
 HOST_CLANG_REVISION=223108
-
-MEMORY_SANITIZER_KIND="Memory"
-BUILDBOT_MSAN_ORIGINS=${BUILDBOT_MSAN_ORIGINS:-}
-if [ "$BUILDBOT_MSAN_ORIGINS" != "" ]; then
-    MEMORY_SANITIZER_KIND="MemoryWithOrigins"
-fi
-
 MAKE_JOBS=${MAX_MAKE_JOBS:-16}
 LLVM=$ROOT/llvm
-
-type -a gcc
-type -a g++
 CMAKE_COMMON_OPTIONS="-GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_PARALLEL_LINK_JOBS=3"
-CMAKE_STAGE1_OPTIONS="${CMAKE_COMMON_OPTIONS}"
+
+if [ "$BUILDBOT_CLOBBER" != "" ]; then
+  echo @@@BUILD_STEP clobber@@@
+  rm -rf llvm
+  rm -rf ${STAGE1_DIR}
+fi
 
 # Stage 1
 
@@ -42,7 +35,7 @@ then
   echo @@@BUILD_STEP using pre-built stage1 clang at r$HOST_CLANG_REVISION@@@
 else
   echo @@@BUILD_STEP sync to r$HOST_CLANG_REVISION@@@
-  REAL_BUILDBOT_REVISION=$BUILDBOT_REVISION
+  local real_buildbot_revision=$BUILDBOT_REVISION
   BUILDBOT_REVISION=$HOST_CLANG_REVISION
   buildbot_update
 
@@ -53,104 +46,28 @@ else
   # CMake does not notice that the compiler itself has changed. Anyway,
   # incremental builds of stage2 don't make sense if stage1 compiler has
   # changed. Clobber the build trees.
-  rm -rf libcxx_build_msan
-  rm -rf llvm_build_msan
-  rm -rf llvm_build_asan
-
-  if [ ! -d llvm_build0 ]; then
-    mkdir llvm_build0
-  fi
-  # Build cxx/cxxabi to fool the compiler check in MSan stage 2.
-  (cd llvm_build0 && cmake ${CMAKE_STAGE1_OPTIONS} $LLVM && \
-    ninja clang compiler-rt llvm-symbolizer)
+  rm -rf ${STAGE2_LIBCXX_MSAN_DIR}
+  rm -rf ${STAGE2_MSAN_DIR}
+  rm -rf ${STAGE2_ASAN_DIR}
+
+  build_stage1_clang
+
   echo $HOST_CLANG_REVISION > host_clang_revision
 
-  BUILDBOT_REVISION=$REAL_BUILDBOT_REVISION
+  BUILDBOT_REVISION=$real_buildbot_revision
 fi
 
 echo @@@BUILD_STEP update@@@
 buildbot_update
 
-CLANG_PATH=$ROOT/llvm_build0/bin
-CMAKE_STAGE2_COMMON_OPTIONS="\
-  ${CMAKE_COMMON_OPTIONS} \
-  -DCMAKE_C_COMPILER=${CLANG_PATH}/clang \
-  -DCMAKE_CXX_COMPILER=${CLANG_PATH}/clang++ \
-  "
-LLVM_SYMBOLIZER_PATH=${CLANG_PATH}/llvm-symbolizer
-export ASAN_SYMBOLIZER_PATH=${LLVM_SYMBOLIZER_PATH}
-export MSAN_SYMBOLIZER_PATH=${LLVM_SYMBOLIZER_PATH}
-
-
 # Stage 2 / Memory Sanitizer
 
-echo @@@BUILD_STEP build libcxx/msan@@@
-if [ ! -d libcxx_build_msan ]; then
-  mkdir libcxx_build_msan
-fi
-
-(cd libcxx_build_msan && \
-  cmake \
-    ${CMAKE_STAGE2_COMMON_OPTIONS} \
-    -DLLVM_USE_SANITIZER=${MEMORY_SANITIZER_KIND} \
-    $LLVM && \
-  ninja cxx cxxabi) || echo @@@STEP_FAILURE@@@
-
-
-echo @@@BUILD_STEP build clang/msan@@@
-if [ ! -d llvm_build_msan ]; then
-  mkdir llvm_build_msan
-fi
-
-MSAN_LDFLAGS="-lc++abi -Wl,--rpath=${ROOT}/libcxx_build_msan/lib -L${ROOT}/libcxx_build_msan/lib"
-# See http://llvm.org/bugs/show_bug.cgi?id=19071, http://www.cmake.org/Bug/view.php?id=15264
-CMAKE_BUG_WORKAROUND_CFLAGS="$MSAN_LDFLAGS -fsanitize=memory -w"
-MSAN_CFLAGS="-I${ROOT}/libcxx_build_msan/include -I${ROOT}/libcxx_build_msan/include/c++/v1 $CMAKE_BUG_WORKAROUND_CFLAGS"
-
-(cd llvm_build_msan && \
- cmake ${CMAKE_STAGE2_COMMON_OPTIONS} \
-   -DLLVM_USE_SANITIZER=${MEMORY_SANITIZER_KIND} \
-   -DLLVM_ENABLE_LIBCXX=ON \
-   -DCMAKE_C_FLAGS="${MSAN_CFLAGS}" \
-   -DCMAKE_CXX_FLAGS="${MSAN_CFLAGS}" \
-   -DCMAKE_EXE_LINKER_FLAGS="${MSAN_LDFLAGS}" \
-   $LLVM && \
- ninja clang) || echo @@@STEP_FAILURE@@@
-
-echo @@@BUILD_STEP check-llvm msan@@@
-
-(cd llvm_build_msan && ninja check-llvm) || echo @@@STEP_WARNINGS@@@
-
-echo @@@BUILD_STEP check-clang msan@@@
-
-(cd llvm_build_msan && ninja check-clang) || echo @@@STEP_FAILURE@@@
+build_stage2_msan
 
+check_stage2_msan
 
 # Stage 2 / AddressSanitizer
 
-echo @@@BUILD_STEP build clang/asan@@@
-
-# Turn on init-order checker as ASan runtime option.
-export ASAN_OPTIONS="check_initialization_order=true:detect_stack_use_after_return=1:detect_leaks=1"
-CMAKE_ASAN_OPTIONS=" \
-  ${CMAKE_STAGE2_COMMON_OPTIONS} \
-  -DLLVM_USE_SANITIZER=Address \
-  "
-
-if [ ! -d llvm_build_asan ]; then
-  mkdir llvm_build_asan
-fi
-
-(cd llvm_build_asan && \
- cmake ${CMAKE_ASAN_OPTIONS} $LLVM && \
- ninja clang) || echo @@@STEP_FAILURE@@@
-
-
-echo @@@BUILD_STEP check-llvm asan@@@
-
-(cd llvm_build_asan && ninja check-llvm) || echo @@@STEP_FAILURE@@@
-
-
-echo @@@BUILD_STEP check-clang asan@@@
+build_stage2_asan
 
-(cd llvm_build_asan && ninja check-clang) || echo @@@STEP_FAILURE@@@
+check_stage2_asan

Modified: zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_functions.sh
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_functions.sh?rev=224520&r1=224519&r2=224520&view=diff
==============================================================================
--- zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_functions.sh (original)
+++ zorg/trunk/zorg/buildbot/builders/sanitizers/buildbot_functions.sh Thu Dec 18 08:16:58 2014
@@ -93,3 +93,115 @@ function gclient_runhooks {
   gclient runhooks
   )
 }
+
+function build_stage1_clang {
+  mkdir -p ${STAGE1_DIR}
+  cmake_stage1_options="${CMAKE_COMMON_OPTIONS}"
+  (cd ${STAGE1_DIR} && cmake ${cmake_stage1_options} $LLVM && \
+    ninja clang compiler-rt llvm-symbolizer)
+}
+
+function common_stage2_variables {
+  local stage1_clang_path=$ROOT/${STAGE1_DIR}/bin
+  cmake_stage2_common_options="\
+    ${CMAKE_COMMON_OPTIONS} \
+    -DCMAKE_C_COMPILER=${stage1_clang_path}/clang \
+    -DCMAKE_CXX_COMPILER=${stage1_clang_path}/clang++ \
+    "
+  llvm_symbolizer_path=${stage1_clang_path}/llvm-symbolizer
+}
+
+function build_stage2_msan {
+  echo @@@BUILD_STEP build libcxx/msan@@@
+  
+  common_stage2_variables
+  export MSAN_SYMBOLIZER_PATH="${llvm_symbolizer_path}"
+  
+  local memory_sanitizer_kind="Memory"
+  BUILDBOT_MSAN_ORIGINS=${BUILDBOT_MSAN_ORIGINS:-}
+  if [ "$BUILDBOT_MSAN_ORIGINS" != "" ]; then
+      memory_sanitizer_kind="MemoryWithOrigins"
+  fi
+
+  mkdir -p ${STAGE2_LIBCXX_MSAN_DIR}
+  (cd ${STAGE2_LIBCXX_MSAN_DIR} && \
+    cmake \
+      ${cmake_stage2_common_options} \
+      -DLLVM_USE_SANITIZER=${memory_sanitizer_kind} \
+      $LLVM && \
+    ninja cxx cxxabi) || echo @@@STEP_FAILURE@@@
+
+  echo @@@BUILD_STEP build clang/msan@@@
+
+  local msan_ldflags="-lc++abi -Wl,--rpath=${ROOT}/${STAGE2_LIBCXX_MSAN_DIR}/lib -L${ROOT}/${STAGE2_LIBCXX_MSAN_DIR}/lib"
+  # See http://llvm.org/bugs/show_bug.cgi?id=19071, http://www.cmake.org/Bug/view.php?id=15264
+  local cmake_bug_workaround_cflags="$msan_ldflags -fsanitize=memory -w"
+  local msan_cflags="-I${ROOT}/${STAGE2_LIBCXX_MSAN_DIR}/include -I${ROOT}/${STAGE2_LIBCXX_MSAN_DIR}/include/c++/v1 $cmake_bug_workaround_cflags"
+  mkdir -p ${STAGE2_MSAN_DIR}
+  (cd ${STAGE2_MSAN_DIR} && \
+   cmake ${cmake_stage2_common_options} \
+     -DLLVM_USE_SANITIZER=${memory_sanitizer_kind} \
+     -DLLVM_ENABLE_LIBCXX=ON \
+     -DCMAKE_C_FLAGS="${msan_cflags}" \
+     -DCMAKE_CXX_FLAGS="${msan_cflags}" \
+     -DCMAKE_EXE_LINKER_FLAGS="${msan_ldflags}" \
+     $LLVM && \
+   ninja clang) || echo @@@STEP_FAILURE@@@
+}
+
+function build_stage2_asan {
+  echo @@@BUILD_STEP build clang/asan@@@
+
+  common_stage2_variables
+  # Turn on init-order checker as ASan runtime option.
+  export ASAN_SYMBOLIZER_PATH="${llvm_symbolizer_path}"
+  export ASAN_OPTIONS="check_initialization_order=true:detect_stack_use_after_return=1:detect_leaks=1"
+  local cmake_asan_options=" \
+    ${cmake_stage2_common_options} \
+    -DLLVM_USE_SANITIZER=Address \
+    "
+  mkdir -p ${STAGE2_ASAN_DIR}
+  (cd ${STAGE2_ASAN_DIR} && \
+   cmake ${cmake_asan_options} $LLVM && \
+   ninja clang) || echo @@@STEP_FAILURE@@@
+}
+
+function build_stage2_ubsan {
+  echo @@@BUILD_STEP build clang/ubsan@@@
+
+  common_stage2_variables
+  export UBSAN_OPTIONS="external_symbolizer_path=${llvm_symbolizer_path}:print_stacktrace=1"
+  local cmake_ubsan_options=" \
+    ${cmake_stage2_common_options} \
+    -DCMAKE_BUILD_TYPE=Debug \
+    -DLLVM_USE_SANITIZER=Undefined \
+    "
+  mkdir -p ${STAGE2_UBSAN_DIR}
+  (cd ${STAGE2_UBSAN_DIR} &&
+    cmake ${cmake_ubsan_options} $LLVM && \
+    ninja clang) || echo @@@STEP_FAILURE@@@
+}
+
+function check_stage2 {
+  local sanitizer_name=$1
+  local build_dir=$2
+  echo @@@BUILD_STEP check-llvm ${sanitizer_name}@@@
+
+  (cd ${build_dir} && ninja check-llvm) || echo @@@STEP_WARNINGS@@@
+
+  echo @@@BUILD_STEP check-clang ${sanitizer_name}@@@
+
+  (cd ${build_dir} && ninja check-clang) || echo @@@STEP_FAILURE@@@
+}
+
+function check_stage2_msan {
+  check_stage2 msan "${STAGE2_MSAN_DIR}"
+}
+
+function check_stage2_asan {
+  check_stage2 asan "${STAGE2_ASAN_DIR}"
+}
+
+function check_stage2_ubsan {
+  check_stage2 ubsan "${STAGE2_UBSAN_DIR}"
+}





More information about the llvm-commits mailing list