| Index: tools/clang/scripts/update.sh
|
| diff --git a/tools/clang/scripts/update.sh b/tools/clang/scripts/update.sh
|
| index 10aa5c1a24704cc7c87ad827e5354b679e0110fb..14ae60f20597da2a41dbd1e6f1c9edcb4ffe96a2 100755
|
| --- a/tools/clang/scripts/update.sh
|
| +++ b/tools/clang/scripts/update.sh
|
| @@ -8,10 +8,10 @@
|
| # Do NOT CHANGE this if you don't know what you're doing -- see
|
| # https://code.google.com/p/chromium/wiki/UpdatingClang
|
| # Reverting problematic clang rolls is safe, though.
|
| -CLANG_REVISION=238013
|
| +CLANG_REVISION=259396
|
|
|
| # This is incremented when pushing a new build of Clang at the same revision.
|
| -CLANG_SUB_REVISION=3
|
| +CLANG_SUB_REVISION=1
|
|
|
| PACKAGE_VERSION="${CLANG_REVISION}-${CLANG_SUB_REVISION}"
|
|
|
| @@ -49,7 +49,16 @@ fi
|
| if [[ -z "$GYP_GENERATORS" ]]; then
|
| GYP_GENERATORS=
|
| fi
|
| +if [[ -z "$LLVM_DOWNLOAD_GOLD_PLUGIN" ]]; then
|
| + LLVM_DOWNLOAD_GOLD_PLUGIN=
|
| +fi
|
|
|
| +if [[ "${OS}" == "Linux" ]] && \
|
| + [[ "$GYP_DEFINES" =~ .*buildtype=Official.* ]] && \
|
| + [[ "$GYP_DEFINES" =~ .*branding=Chrome.* ]] ; then
|
| + # LLVM Gold plugin is required to build with this configuration.
|
| + LLVM_DOWNLOAD_GOLD_PLUGIN=1
|
| +fi
|
|
|
| # Die if any command dies, error on undefined variable expansions.
|
| set -eu
|
| @@ -206,20 +215,17 @@ fi
|
|
|
| if [[ -n "$if_needed" ]]; then
|
| if [[ "${OS}" == "Darwin" ]]; then
|
| - # clang is used on Mac.
|
| + # clang is always used on Mac.
|
| + true
|
| + elif [[ "${OS}" == "Linux" ]]; then
|
| + # clang is also aways used on Linux.
|
| true
|
| elif [[ "$GYP_DEFINES" =~ .*(clang|tsan|asan|lsan|msan)=1.* ]]; then
|
| # clang requested via $GYP_DEFINES.
|
| true
|
| elif [[ -d "${LLVM_BUILD_DIR}" ]]; then
|
| - # clang previously downloaded, remove third_party/llvm-build to prevent
|
| - # updating.
|
| - true
|
| - elif [[ "${OS}" == "Linux" ]]; then
|
| - # Temporarily use clang on linux. Leave a stamp file behind, so that
|
| - # this script can remove clang again on machines where it was autoinstalled.
|
| - mkdir -p "${LLVM_BUILD_DIR}"
|
| - touch "${LLVM_BUILD_DIR}/autoinstall_stamp"
|
| + # clang previously downloaded, keep it up-to-date.
|
| + # If you don't want this, delete third_party/llvm-build on your machine.
|
| true
|
| else
|
| # clang wasn't needed, not doing anything.
|
| @@ -235,7 +241,10 @@ if [[ -f "${STAMP_FILE}" ]]; then
|
| [[ "${PREVIOUSLY_BUILT_REVISON}" = \
|
| "${PACKAGE_VERSION}" ]]; then
|
| echo "Clang already at ${PACKAGE_VERSION}"
|
| - exit 0
|
| + if [[ -z "${LLVM_DOWNLOAD_GOLD_PLUGIN}" ]] || \
|
| + [[ -f "${LLVM_BUILD_DIR}/lib/LLVMgold.so" ]]; then
|
| + exit 0
|
| + fi
|
| fi
|
| fi
|
| # To always force a new build if someone interrupts their build half way.
|
| @@ -270,6 +279,11 @@ if [[ -z "$force_local_build" ]]; then
|
| echo clang "${PACKAGE_VERSION}" unpacked
|
| echo "${PACKAGE_VERSION}" > "${STAMP_FILE}"
|
| rm -rf "${CDS_OUT_DIR}"
|
| + # Download the gold plugin if requested to by an environment variable.
|
| + # This is used by the CFI ClusterFuzz bot.
|
| + if [[ -n "${LLVM_DOWNLOAD_GOLD_PLUGIN}" ]]; then
|
| + ${THIS_DIR}/../../../build/download_gold_plugin.py
|
| + fi
|
| exit 0
|
| else
|
| echo Did not find prebuilt clang "${PACKAGE_VERSION}", building
|
| @@ -319,6 +333,9 @@ for i in \
|
| "${COMPILER_RT_DIR}/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc" \
|
| "${COMPILER_RT_DIR}/test/tsan/signal_segv_handler.cc" \
|
| "${COMPILER_RT_DIR}/lib/sanitizer_common/sanitizer_coverage_libcdep.cc" \
|
| + "${COMPILER_RT_DIR}/cmake/config-ix.cmake" \
|
| + "${COMPILER_RT_DIR}/CMakeLists.txt" \
|
| + "${COMPILER_RT_DIR}/lib/ubsan/ubsan_platform.h" \
|
| ; do
|
| if [[ -e "${i}" ]]; then
|
| rm -f "${i}" # For unversioned files.
|
| @@ -366,79 +383,8 @@ if [ "${OS}" = "Darwin" ]; then
|
| fi
|
|
|
| if [[ -n "$with_patches" ]]; then
|
| -
|
| - # Apply patch for tests failing with --disable-pthreads (llvm.org/PR11974)
|
| - pushd "${CLANG_DIR}"
|
| - cat << 'EOF' |
|
| ---- third_party/llvm/tools/clang/test/Index/crash-recovery-modules.m (revision 202554)
|
| -+++ third_party/llvm/tools/clang/test/Index/crash-recovery-modules.m (working copy)
|
| -@@ -12,6 +12,8 @@
|
| -
|
| - // REQUIRES: crash-recovery
|
| - // REQUIRES: shell
|
| -+// XFAIL: *
|
| -+// (PR11974)
|
| -
|
| - @import Crash;
|
| -EOF
|
| -patch -p4
|
| -popd
|
| -
|
| -pushd "${CLANG_DIR}"
|
| -cat << 'EOF' |
|
| ---- unittests/libclang/LibclangTest.cpp (revision 215949)
|
| -+++ unittests/libclang/LibclangTest.cpp (working copy)
|
| -@@ -431,7 +431,7 @@
|
| - EXPECT_EQ(0U, clang_getNumDiagnostics(ClangTU));
|
| - }
|
| -
|
| --TEST_F(LibclangReparseTest, ReparseWithModule) {
|
| -+TEST_F(LibclangReparseTest, DISABLED_ReparseWithModule) {
|
| - const char *HeaderTop = "#ifndef H\n#define H\nstruct Foo { int bar;";
|
| - const char *HeaderBottom = "\n};\n#endif\n";
|
| - const char *MFile = "#include \"HeaderFile.h\"\nint main() {"
|
| -EOF
|
| - patch -p0
|
| - popd
|
| -
|
| - # Cherry-pick r234010 [sancov] Shrink pc array on Android back to 2**24."
|
| - pushd "${COMPILER_RT_DIR}"
|
| - cat << 'EOF' |
|
| -diff --git a/lib/sanitizer_common/sanitizer_coverage_libcdep.cc b/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
|
| -index 4b976fc..cfd9e7e 100644
|
| ---- a/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
|
| -+++ b/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
|
| -@@ -109,7 +109,8 @@ class CoverageData {
|
| -
|
| - // Maximal size pc array may ever grow.
|
| - // We MmapNoReserve this space to ensure that the array is contiguous.
|
| -- static const uptr kPcArrayMaxSize = FIRST_32_SECOND_64(1 << 26, 1 << 27);
|
| -+ static const uptr kPcArrayMaxSize =
|
| -+ FIRST_32_SECOND_64(1 << (SANITIZER_ANDROID ? 24 : 26), 1 << 27);
|
| - // The amount file mapping for the pc array is grown by.
|
| - static const uptr kPcArrayMmapSize = 64 * 1024;
|
| -
|
| -EOF
|
| - patch -p1
|
| - popd
|
| -
|
| - # This Go bindings test doesn't work after the bootstrap build on Linux. (PR21552)
|
| - pushd "${LLVM_DIR}"
|
| - cat << 'EOF' |
|
| -Index: test/Bindings/Go/go.test
|
| -===================================================================
|
| ---- test/Bindings/Go/go.test (revision 223109)
|
| -+++ test/Bindings/Go/go.test (working copy)
|
| -@@ -1,3 +1,3 @@
|
| --; RUN: llvm-go test llvm.org/llvm/bindings/go/llvm
|
| -+; RUN: true
|
| -
|
| - ; REQUIRES: shell
|
| -EOF
|
| - patch -p0
|
| - popd
|
| -
|
| -
|
| + # No patches.
|
| + true
|
| fi
|
|
|
| # Echo all commands.
|
| @@ -465,16 +411,15 @@ LDFLAGS=""
|
| # needed, on OS X it requires libc++. clang only automatically links to libc++
|
| # when targeting OS X 10.9+, so add stdlib=libc++ explicitly so clang can run on
|
| # OS X versions as old as 10.7.
|
| -# TODO(thakis): Some bots are still on 10.6, so for now bundle libc++.dylib.
|
| -# Remove this once all bots are on 10.7+, then use --enable-libcpp=yes and
|
| -# change deployment_target to 10.7.
|
| +# TODO(thakis): Some bots are still on 10.6 (nacl...), so for now bundle
|
| +# libc++.dylib. Remove this once all bots are on 10.7+, then use
|
| +# -DLLVM_ENABLE_LIBCXX=ON and change deployment_target to 10.7.
|
| deployment_target=""
|
|
|
| if [ "${OS}" = "Darwin" ]; then
|
| # When building on 10.9, /usr/include usually doesn't exist, and while
|
| # Xcode's clang automatically sets a sysroot, self-built clangs don't.
|
| CFLAGS="-isysroot $(xcrun --show-sdk-path)"
|
| - CPPFLAGS="${CFLAGS}"
|
| CXXFLAGS="-stdlib=libc++ -nostdinc++ -I${ABS_LIBCXX_DIR}/include ${CFLAGS}"
|
|
|
| if [[ -n "${bootstrap}" ]]; then
|
| @@ -520,7 +465,7 @@ if [[ -n "${bootstrap}" ]]; then
|
|
|
| if [[ -n "${gcc_toolchain}" ]]; then
|
| # Tell the bootstrap compiler to use a specific gcc prefix to search
|
| - # for standard library headers and shared object file.
|
| + # for standard library headers and shared object files.
|
| CFLAGS="--gcc-toolchain=${gcc_toolchain}"
|
| CXXFLAGS="--gcc-toolchain=${gcc_toolchain}"
|
| fi
|
| @@ -561,6 +506,16 @@ if [ "${OS}" = "Darwin" ]; then
|
| ln -sf libc++.1.dylib libc++.dylib
|
| popd
|
| LDFLAGS+="-stdlib=libc++ -L${PWD}/libcxxbuild"
|
| +
|
| + if [[ -n "${bootstrap}" ]]; then
|
| + # Now that the libc++ headers have been installed and libc++.dylib is built,
|
| + # delete the libc++ checkout again so that it's not part of the main
|
| + # build below -- the libc++(abi) tests don't pass on OS X in bootstrap
|
| + # builds (http://llvm.org/PR24068)
|
| + rm -rf "${ABS_LIBCXX_DIR}"
|
| + rm -rf "${ABS_LIBCXXABI_DIR}"
|
| + CXXFLAGS="-stdlib=libc++ -nostdinc++ -I${ABS_INSTALL_DIR}/include/c++/v1 ${CFLAGS}"
|
| + fi
|
| fi
|
|
|
| # Find the binutils include dir for the gold plugin.
|
| @@ -596,6 +551,7 @@ MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \
|
| -DCMAKE_BUILD_TYPE=Release \
|
| -DLLVM_ENABLE_ASSERTIONS=ON \
|
| -DLLVM_ENABLE_THREADS=OFF \
|
| + -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \
|
| -DLLVM_BINUTILS_INCDIR="${BINUTILS_INCDIR}" \
|
| -DCMAKE_C_COMPILER="${CC}" \
|
| -DCMAKE_CXX_COMPILER="${CXX}" \
|
| @@ -633,16 +589,19 @@ strip ${STRIP_FLAGS} bin/clang
|
| popd
|
|
|
| # Build compiler-rt out-of-tree.
|
| +# Do a clobbered build due to cmake changes.
|
| +rm -rf "${COMPILER_RT_BUILD_DIR}"
|
| mkdir -p "${COMPILER_RT_BUILD_DIR}"
|
| pushd "${COMPILER_RT_BUILD_DIR}"
|
|
|
| rm -fv CMakeCache.txt
|
| -MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \
|
| +MACOSX_DEPLOYMENT_TARGET=${deployment_target} CC="" CXX="" cmake -GNinja \
|
| -DCMAKE_BUILD_TYPE=Release \
|
| -DLLVM_ENABLE_ASSERTIONS=ON \
|
| -DLLVM_ENABLE_THREADS=OFF \
|
| - -DCMAKE_C_COMPILER="${CC}" \
|
| - -DCMAKE_CXX_COMPILER="${CXX}" \
|
| + -DCMAKE_C_COMPILER="${ABS_LLVM_BUILD_DIR}/bin/clang" \
|
| + -DCMAKE_CXX_COMPILER="${ABS_LLVM_BUILD_DIR}/bin/clang++" \
|
| + -DSANITIZER_MIN_OSX_VERSION="10.7" \
|
| -DLLVM_CONFIG_PATH="${ABS_LLVM_BUILD_DIR}/bin/llvm-config" \
|
| "${ABS_COMPILER_RT_DIR}"
|
|
|
| @@ -666,41 +625,53 @@ popd
|
| if [[ -n "${with_android}" ]]; then
|
| # Make a standalone Android toolchain.
|
| ${ANDROID_NDK_DIR}/build/tools/make-standalone-toolchain.sh \
|
| - --platform=android-14 \
|
| - --install-dir="${LLVM_BUILD_DIR}/android-toolchain" \
|
| + --platform=android-19 \
|
| + --install-dir="${LLVM_BUILD_DIR}/android-toolchain-arm" \
|
| --system=linux-x86_64 \
|
| - --stl=libcxx \
|
| + --stl=stlport \
|
| --toolchain=arm-linux-androideabi-4.9
|
|
|
| - # Android NDK r9d copies a broken unwind.h into the toolchain, see
|
| - # http://crbug.com/357890
|
| - rm -v "${LLVM_BUILD_DIR}"/android-toolchain/include/c++/*/unwind.h
|
| -
|
| - # Build ASan runtime for Android in a separate build tree.
|
| - mkdir -p ${LLVM_BUILD_DIR}/android
|
| - pushd ${LLVM_BUILD_DIR}/android
|
| - rm -fv CMakeCache.txt
|
| - MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \
|
| - -DCMAKE_BUILD_TYPE=Release \
|
| - -DLLVM_ENABLE_ASSERTIONS=ON \
|
| - -DLLVM_ENABLE_THREADS=OFF \
|
| - -DCMAKE_C_COMPILER=${PWD}/../bin/clang \
|
| - -DCMAKE_CXX_COMPILER=${PWD}/../bin/clang++ \
|
| - -DLLVM_CONFIG_PATH=${PWD}/../bin/llvm-config \
|
| - -DCMAKE_C_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../android-toolchain/sysroot -B${PWD}/../android-toolchain" \
|
| - -DCMAKE_CXX_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../android-toolchain/sysroot -B${PWD}/../android-toolchain" \
|
| - -DANDROID=1 \
|
| - "${ABS_COMPILER_RT_DIR}"
|
| - ninja libclang_rt.asan-arm-android.so
|
| -
|
| - # And copy it into the main build tree.
|
| - cp "$(find -name libclang_rt.asan-arm-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/lib/linux/"
|
| - popd
|
| + # Do the same for x86.
|
| + ${ANDROID_NDK_DIR}/build/tools/make-standalone-toolchain.sh \
|
| + --platform=android-19 \
|
| + --install-dir="${LLVM_BUILD_DIR}/android-toolchain-i686" \
|
| + --system=linux-x86_64 \
|
| + --stl=stlport \
|
| + --toolchain=x86-4.9
|
| +
|
| + for target_arch in "arm" "i686"; do
|
| + # Android NDK r9d copies a broken unwind.h into the toolchain, see
|
| + # http://crbug.com/357890
|
| + rm -v "${LLVM_BUILD_DIR}"/android-toolchain-${target_arch}/include/c++/*/unwind.h
|
| +
|
| + # Build ASan runtime for Android in a separate build tree.
|
| + mkdir -p ${LLVM_BUILD_DIR}/android-${target_arch}
|
| + pushd ${LLVM_BUILD_DIR}/android-${target_arch}
|
| + rm -fv CMakeCache.txt
|
| + MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \
|
| + -DCMAKE_BUILD_TYPE=Release \
|
| + -DLLVM_ENABLE_ASSERTIONS=ON \
|
| + -DLLVM_ENABLE_THREADS=OFF \
|
| + -DCMAKE_C_COMPILER=${PWD}/../bin/clang \
|
| + -DCMAKE_CXX_COMPILER=${PWD}/../bin/clang++ \
|
| + -DLLVM_CONFIG_PATH=${PWD}/../bin/llvm-config \
|
| + -DCMAKE_C_FLAGS="--target=${target_arch}-linux-androideabi --sysroot=${PWD}/../android-toolchain-${target_arch}/sysroot -B${PWD}/../android-toolchain-${target_arch}" \
|
| + -DCMAKE_CXX_FLAGS="--target=${target_arch}-linux-androideabi --sysroot=${PWD}/../android-toolchain-${target_arch}/sysroot -B${PWD}/../android-toolchain-${target_arch}" \
|
| + -DANDROID=1 \
|
| + "${ABS_COMPILER_RT_DIR}"
|
| + ninja libclang_rt.asan-${target_arch}-android.so
|
| +
|
| + # And copy it into the main build tree.
|
| + cp "$(find -name libclang_rt.asan-${target_arch}-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/lib/linux/"
|
| + popd
|
| + done
|
| fi
|
|
|
| -if [[ -n "$run_tests" ]]; then
|
| +if [[ -n "$run_tests" || -n "${LLVM_FORCE_HEAD_REVISION:-''}" ]]; then
|
| # Run Chrome tool tests.
|
| ninja -C "${LLVM_BUILD_DIR}" cr-check-all
|
| +fi
|
| +if [[ -n "$run_tests" ]]; then
|
| # Run the LLVM and Clang tests.
|
| ninja -C "${LLVM_BUILD_DIR}" check-all
|
| fi
|
|
|