#!/usr/bin/env bash

set -x
set -e
set -u

HERE="$(dirname $0)"
. ${HERE}/buildbot_functions.sh

ROOT=`pwd`
PLATFORM=`uname`
ARCH=`uname -m`
export PATH="/usr/local/bin:$PATH"
export ANDROID_SDK_HOME=$ROOT/../../..

# Always clobber bootstrap build trees.
rm -rf compiler_rt_build llvm_build* symbolizer_build*

USE_CCACHE=
if ccache -s ; then
  USE_CCACHE="-DLLVM_CCACHE_BUILD=ON"
  rm -rf clang_build
fi

SUPPORTS_32_BITS=${SUPPORTS_32_BITS:-1}
MAKE_JOBS=${MAX_MAKE_JOBS:-$(nproc)}
LLVM=$ROOT/llvm
ZLIB=$ROOT/zlib

CMAKE_COMMON_OPTIONS="${CMAKE_COMMON_OPTIONS:-} -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_PARALLEL_LINK_JOBS=10"
ENABLE_LIBCXX_FLAG=
if [ "$PLATFORM" == "Darwin" ]; then
  CMAKE_COMMON_OPTIONS="${CMAKE_COMMON_OPTIONS} -DPYTHON_EXECUTABLE=/usr/bin/python"
  ENABLE_LIBCXX_FLAG="-DLLVM_ENABLE_LIBCXX=ON"
fi

if [ -e /usr/include/plugin-api.h ]; then
  CMAKE_COMMON_OPTIONS="${CMAKE_COMMON_OPTIONS} -DLLVM_BINUTILS_INCDIR=/usr/include"
fi

CMAKE_COMMON_OPTIONS="${CMAKE_COMMON_OPTIONS} -DLLVM_ENABLE_PROJECTS='clang;compiler-rt'"

CHECK_LIBCXX=${CHECK_LIBCXX:-1}
CHECK_SYMBOLIZER=${CHECK_SYMBOLIZER:-$CHECK_LIBCXX}
CHECK_LLD=${CHECK_LLD:-1}
CHECK_ASAN=0
CHECK_HWASAN=0
CHECK_UBSAN=0
CHECK_MSAN=0
CHECK_TSAN=0
CHECK_LSAN=0
CHECK_DFSAN=0
CHECK_SCUDO=0
CHECK_SCUDO_STANDALONE=0
CHECK_CFI=0
case "$ARCH" in
  x86_64)
    CHECK_ASAN=1
    CHECK_HWASAN=1
    CHECK_UBSAN=1
    CHECK_MSAN=1
    CHECK_TSAN=1
    CHECK_LSAN=1
    CHECK_DFSAN=1
    CHECK_SCUDO=1
    CHECK_SCUDO_STANDALONE=1
    CHECK_CFI=1
  ;;
  aarch64)
    CHECK_ASAN=1
    CHECK_UBSAN=1
    CHECK_MSAN=1
    CHECK_TSAN=1
    CHECK_LSAN=1
    CHECK_DFSAN=1
    CHECK_SCUDO=1
  ;;
  mips64*)
    CHECK_ASAN=1
    CHECK_UBSAN=1
    CHECK_MSAN=1
    CHECK_TSAN=1
    CHECK_LSAN=1
    CHECK_DFSAN=1
  ;;
  ppc64*)
    CHECK_ASAN=1
    CHECK_UBSAN=1
    CHECK_MSAN=1
    CHECK_TSAN=1
    CHECK_SCUDO=1
  ;;
  i*86)
    CHECK_UBSAN=1
    CHECK_ASAN=1
  ;;
  mips*)
    CHECK_UBSAN=1
    CHECK_ASAN=1
  ;;
  arm*)
    CHECK_UBSAN=1
    CHECK_ASAN=1
  ;;
  s390x)
    CHECK_UBSAN=1
  ;;
esac

PROJECTS="clang;compiler-rt;libcxx;libcxxabi"
if [[ "$CHECK_LLD" != "0" ]]; then
  PROJECTS="${PROJECTS};lld"
fi
CMAKE_COMMON_OPTIONS="${CMAKE_COMMON_OPTIONS} -DLLVM_ENABLE_PROJECTS='${PROJECTS}'"

if [[ "$CHECK_CFI" == "1" ]]; then
  # We need this after https://reviews.llvm.org/D62050
  CMAKE_COMMON_OPTIONS="$CMAKE_COMMON_OPTIONS -DLLVM_BUILD_LLVM_DYLIB=ON"
fi

CLOBBER="zlib clang_build"
clobber

buildbot_update

COMPILER_RT=$LLVM/../compiler-rt
LIBCXX=$LLVM/../libcxx

echo @@@BUILD_STEP lint@@@
CHECK_LINT=${COMPILER_RT}/lib/sanitizer_common/scripts/check_lint.sh
${CHECK_LINT} || echo @@@STEP_WARNINGS@@@

# Use both gcc and just-built Clang/LLD as a host compiler/linker for sanitizer
# tests. Assume that self-hosted build tree should compile with -Werror.
echo @@@BUILD_STEP build fresh toolchain@@@
if [ ! -d clang_build ]; then
  mkdir clang_build
fi
(cd clang_build && cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ${CMAKE_COMMON_OPTIONS} ${USE_CCACHE} $LLVM ) || (rm -rf clang_build ; echo @@@STEP_FAILURE@@@)

BOOTSTRAP_BUILD_TARGETS="clang"
if [[ "$CHECK_LLD" != "0" ]]; then
  BOOTSTRAP_BUILD_TARGETS="$BOOTSTRAP_BUILD_TARGETS lld"
fi
(cd clang_build && make $BOOTSTRAP_BUILD_TARGETS -j$MAKE_JOBS) || (echo @@@STEP_FAILURE@@@ ; exit 1) || echo @@@STEP_FAILURE@@@

# If we're building with libcxx, install the headers to clang_build/include.
if [ ! -z ${ENABLE_LIBCXX_FLAG} ]; then
(cd clang_build && make -C ${LIBCXX} installheaders \
  HEADER_DIR=${PWD}/include) || echo @@@STEP_FAILURE@@@
fi

# Do a sanity check on Linux: build and test sanitizers using gcc as a host
# compiler.
if [ "$PLATFORM" == "Linux" ]; then
  check_in_gcc() {
    CONDITION=$1
    SANITIZER=$2
    if [ "$CONDITION" == "1" ]; then
      echo @@@BUILD_STEP check-$SANITIZER in gcc build@@@
      (cd clang_build && make -j$MAKE_JOBS check-$SANITIZER) || echo @@@STEP_FAILURE@@@
    fi
  }
  check_in_gcc 1 sanitizer
  check_in_gcc $CHECK_ASAN asan
  check_in_gcc $CHECK_HWASAN hwasan
  check_in_gcc $CHECK_CFI cfi-and-supported
  check_in_gcc $CHECK_DFSAN dfsan
  check_in_gcc $CHECK_LSAN lsan
  check_in_gcc $CHECK_MSAN msan
  check_in_gcc $CHECK_SCUDO scudo
  check_in_gcc $CHECK_SCUDO_STANDALONE scudo_standalone
  LDFLAGS=-no-pie check_in_gcc $CHECK_TSAN tsan
  check_in_gcc $CHECK_UBSAN ubsan
  check_in_gcc $CHECK_UBSAN ubsan-minimal
fi

### From now on we use just-built Clang as a host compiler ###
CLANG_PATH=${ROOT}/clang_build/bin
# Build self-hosted tree with fresh Clang and -Werror.
CMAKE_CLANG_OPTIONS="${CMAKE_COMMON_OPTIONS} -DLLVM_ENABLE_WERROR=ON -DCMAKE_C_COMPILER=${CLANG_PATH}/clang -DCMAKE_CXX_COMPILER=${CLANG_PATH}/clang++ -DCMAKE_C_FLAGS=-gmlt -DCMAKE_CXX_FLAGS=-gmlt"
BUILD_TYPE=Release

echo @@@BUILD_STEP bootstrap clang@@@
if [ ! -d llvm_build64 ]; then
  mkdir llvm_build64
fi
(cd llvm_build64 && cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
    ${CMAKE_CLANG_OPTIONS} -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
    ${ENABLE_LIBCXX_FLAG} $LLVM) || echo @@@STEP_FAILURE@@@

# First, build only Clang.
(cd llvm_build64 && make -j$MAKE_JOBS clang) || echo @@@STEP_FAILURE@@@

# If needed, install the headers to clang_build/include.
if [ ! -z ${ENABLE_LIBCXX_FLAG} ]; then
  (cd llvm_build64 && make -C ${LIBCXX} installheaders \
    HEADER_DIR=${PWD}/include) || echo @@@STEP_FAILURE@@@
fi

# Now build everything else.
(cd llvm_build64 && make -j$MAKE_JOBS) || echo @@@STEP_FAILURE@@@
# Symbolizer dependencies.
(cd llvm_build64 && make -j$MAKE_JOBS llvm-ar llvm-link llvm-tblgen opt) || echo @@@STEP_FAILURE@@@


if [ "$CHECK_CFI" == "1" ]; then
  # FIXME: Make these true dependencies of check-cfi-and-supported when
  # compiler-rt is configured as an external project.
  (cd llvm_build64 && make -j$MAKE_JOBS LLVMgold opt sanstats) || echo @@@STEP_FAILURE@@@
fi

check_64bit() {
  CONDITION=$1
  SANITIZER=$2
  if [ "$CONDITION" == "1" ]; then
    echo @@@BUILD_STEP 64-bit check-$SANITIZER@@@
    (cd llvm_build64 && make -j$MAKE_JOBS check-$SANITIZER) || echo @@@STEP_FAILURE@@@
  fi
}

check_64bit 1 sanitizer
check_64bit $CHECK_ASAN asan
if [ "$PLATFORM" == "Linux" ]; then
  check_64bit $CHECK_ASAN asan-dynamic
  check_64bit $CHECK_HWASAN hwasan
  check_64bit $CHECK_CFI cfi-and-supported
  check_64bit $CHECK_DFSAN dfsan
  check_64bit $CHECK_LSAN lsan
  check_64bit $CHECK_MSAN msan
  # check_64bit $CHECK_SCUDO scudo, No check-scudo target for this config
  check_64bit $CHECK_TSAN tsan
  check_64bit $CHECK_UBSAN ubsan
  check_64bit $CHECK_UBSAN ubsan-minimal
fi

FRESH_CLANG_PATH=${ROOT}/llvm_build64/bin

echo @@@BUILD_STEP build standalone compiler-rt@@@
if [ ! -d compiler_rt_build ]; then
  mkdir compiler_rt_build
fi
(cd compiler_rt_build && cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
  -DCMAKE_C_COMPILER=${FRESH_CLANG_PATH}/clang \
  -DCMAKE_CXX_COMPILER=${FRESH_CLANG_PATH}/clang++ \
  -DCOMPILER_RT_INCLUDE_TESTS=ON \
  -DCOMPILER_RT_ENABLE_WERROR=ON \
  -DLLVM_CONFIG_PATH=${FRESH_CLANG_PATH}/llvm-config \
  $COMPILER_RT) || echo @@@STEP_FAILURE@@@
(cd compiler_rt_build && make -j$MAKE_JOBS) || echo @@@STEP_FAILURE@@@

echo @@@BUILD_STEP test standalone compiler-rt@@@
(cd compiler_rt_build && make -j$MAKE_JOBS check-all) || echo @@@STEP_FAILURE@@@

build_symbolizer() {
  echo @@@BUILD_STEP build $1-bit symbolizer for $2@@@
  if [ ! -d symbolizer_build$1 ]; then
    mkdir symbolizer_build$1
  fi
  (cd symbolizer_build$1 && ZLIB_SRC=$ZLIB FLAGS=-m$1 \
    CLANG=${FRESH_CLANG_PATH}/clang \
    bash -eux $COMPILER_RT/lib/sanitizer_common/symbolizer/scripts/build_symbolizer.sh \
      $(dirname $(find ../$2/ -name libclang_rt.*.a | head -n1)) || echo @@@STEP_FAILURE@@@)
}

if [ "$CHECK_SYMBOLIZER" == "1" ]; then
  echo @@@BUILD_STEP update zlib@@@
  (cd $ZLIB && git pull --rebase) || \
      git clone https://github.com/madler/zlib.git $ZLIB || echo @@@STEP_FAILURE@@@

  build_symbolizer 32 compiler_rt_build
  build_symbolizer 64 compiler_rt_build

  echo @@@BUILD_STEP test standalone compiler-rt with symbolizer@@@
  (cd compiler_rt_build && make -j$MAKE_JOBS check-all) || echo @@@STEP_FAILURE@@@
fi

HAVE_NINJA=${HAVE_NINJA:-1}
if [ "$PLATFORM" == "Linux" -a $HAVE_NINJA == 1 ]; then
  echo @@@BUILD_STEP build with ninja@@@
  if [ ! -d llvm_build_ninja ]; then
    mkdir llvm_build_ninja
  fi
  CMAKE_NINJA_OPTIONS="${CMAKE_CLANG_OPTIONS} -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja"
  (cd llvm_build_ninja && cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
      ${CMAKE_NINJA_OPTIONS} $LLVM) || echo @@@STEP_FAILURE@@@
  ln -sf llvm_build_ninja/compile_commands.json $LLVM
  (cd llvm_build_ninja && ninja) || echo @@@STEP_FAILURE@@@

  check_ninja() {
    CONDITION=$1
    SANITIZER=$2
    if [ "$CONDITION" == "1" ]; then
      echo @@@BUILD_STEP ninja check-$SANITIZER@@@
      (cd llvm_build_ninja && ninja check-$SANITIZER) || echo @@@STEP_FAILURE@@@
    fi
  }

  check_ninja 1 sanitizer
  check_ninja $CHECK_ASAN asan
  check_ninja $CHECK_HWASAN hwasan
  check_ninja $CHECK_CFI cfi-and-supported
  check_ninja $CHECK_DFSAN dfsan
  check_ninja $CHECK_LSAN lsan
  check_ninja $CHECK_MSAN msan
  check_ninja $CHECK_SCUDO scudo
  check_ninja $CHECK_SCUDO_STANDALONE scudo_standalone
  check_ninja $CHECK_TSAN tsan
  check_ninja $CHECK_UBSAN ubsan
  check_ninja $CHECK_UBSAN ubsan-minimal

  if [ "$CHECK_SYMBOLIZER" == "1" ]; then
    build_symbolizer 32 llvm_build_ninja
    build_symbolizer 64 llvm_build_ninja

    check_ninja_with_symbolizer() {
      CONDITION=$1
      SANITIZER=$2
      # Disabled, tests are not working yet.
      if [ "$CONDITION" == "-1" ]; then
        echo @@@BUILD_STEP ninja check-$SANITIZER with symbolizer@@@
        (cd llvm_build_ninja && ninja check-$SANITIZER) || echo @@@STEP_FAILURE@@@
      fi
    }

    check_ninja_with_symbolizer 1 sanitizer
    check_ninja_with_symbolizer $CHECK_ASAN asan
    check_ninja_with_symbolizer $CHECK_HWASAN hwasan
    check_ninja_with_symbolizer $CHECK_CFI cfi-and-supported
    check_ninja_with_symbolizer $CHECK_DFSAN dfsan
    check_ninja_with_symbolizer $CHECK_LSAN lsan
    check_ninja_with_symbolizer $CHECK_MSAN msan
    check_ninja_with_symbolizer $CHECK_SCUDO scudo
    check_ninja_with_symbolizer $CHECK_SCUDO_STANDALONE scudo_standalone
    check_ninja_with_symbolizer $CHECK_TSAN tsan
    check_ninja_with_symbolizer $CHECK_UBSAN ubsan
  fi
fi
