OLD | NEW |
1 #!/usr/bin/env bash | 1 #!/usr/bin/env bash |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 # This script will check out llvm and clang into third_party/llvm and build it. | 6 # This script will check out llvm and clang into third_party/llvm and build it. |
7 | 7 |
8 # Do NOT CHANGE this if you don't know what you're doing -- see | 8 # Do NOT CHANGE this if you don't know what you're doing -- see |
9 # https://code.google.com/p/chromium/wiki/UpdatingClang | 9 # https://code.google.com/p/chromium/wiki/UpdatingClang |
10 # Reverting problematic clang rolls is safe, though. | 10 # Reverting problematic clang rolls is safe, though. |
11 CLANG_REVISION=233105 | 11 CLANG_REVISION=238013 |
12 | 12 |
13 # This is incremented when pushing a new build of Clang at the same revision. | 13 # This is incremented when pushing a new build of Clang at the same revision. |
14 CLANG_SUB_REVISION=2 | 14 CLANG_SUB_REVISION=3 |
15 | 15 |
16 PACKAGE_VERSION="${CLANG_REVISION}-${CLANG_SUB_REVISION}" | 16 PACKAGE_VERSION="${CLANG_REVISION}-${CLANG_SUB_REVISION}" |
17 | 17 |
18 THIS_DIR="$(dirname "${0}")" | 18 THIS_DIR="$(dirname "${0}")" |
19 LLVM_DIR="${THIS_DIR}/../../../third_party/llvm" | 19 LLVM_DIR="${THIS_DIR}/../../../third_party/llvm" |
20 LLVM_BUILD_DIR="${LLVM_DIR}/../llvm-build/Release+Asserts" | 20 LLVM_BUILD_DIR="${LLVM_DIR}/../llvm-build/Release+Asserts" |
21 COMPILER_RT_BUILD_DIR="${LLVM_DIR}/../llvm-build/compiler-rt" | 21 COMPILER_RT_BUILD_DIR="${LLVM_DIR}/../llvm-build/compiler-rt" |
22 LLVM_BOOTSTRAP_DIR="${LLVM_DIR}/../llvm-bootstrap" | 22 LLVM_BOOTSTRAP_DIR="${LLVM_DIR}/../llvm-bootstrap" |
23 LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install" | 23 LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install" |
24 CLANG_DIR="${LLVM_DIR}/tools/clang" | 24 CLANG_DIR="${LLVM_DIR}/tools/clang" |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 fi | 199 fi |
200 export PATH="${LLVM_BUILD_TOOLS_DIR}/cmake310/bin:${PATH}" | 200 export PATH="${LLVM_BUILD_TOOLS_DIR}/cmake310/bin:${PATH}" |
201 fi | 201 fi |
202 fi | 202 fi |
203 | 203 |
204 echo "LLVM_FORCE_HEAD_REVISION was set; using r${CLANG_REVISION}" | 204 echo "LLVM_FORCE_HEAD_REVISION was set; using r${CLANG_REVISION}" |
205 fi | 205 fi |
206 | 206 |
207 if [[ -n "$if_needed" ]]; then | 207 if [[ -n "$if_needed" ]]; then |
208 if [[ "${OS}" == "Darwin" ]]; then | 208 if [[ "${OS}" == "Darwin" ]]; then |
209 # clang is used on Mac. | 209 # clang is always used on Mac. |
| 210 true |
| 211 elif [[ "${OS}" == "Linux" ]]; then |
| 212 # clang is also aways used on Linux. |
210 true | 213 true |
211 elif [[ "$GYP_DEFINES" =~ .*(clang|tsan|asan|lsan|msan)=1.* ]]; then | 214 elif [[ "$GYP_DEFINES" =~ .*(clang|tsan|asan|lsan|msan)=1.* ]]; then |
212 # clang requested via $GYP_DEFINES. | 215 # clang requested via $GYP_DEFINES. |
213 true | 216 true |
214 elif [[ -d "${LLVM_BUILD_DIR}" ]]; then | 217 elif [[ -d "${LLVM_BUILD_DIR}" ]]; then |
215 # clang previously downloaded, remove third_party/llvm-build to prevent | 218 # clang previously downloaded, keep it up-to-date. |
216 # updating. | 219 # If you don't want this, delete third_party/llvm-build on your machine. |
217 true | |
218 elif [[ "${OS}" == "Linux" ]]; then | |
219 # Temporarily use clang on linux. Leave a stamp file behind, so that | |
220 # this script can remove clang again on machines where it was autoinstalled. | |
221 mkdir -p "${LLVM_BUILD_DIR}" | |
222 touch "${LLVM_BUILD_DIR}/autoinstall_stamp" | |
223 true | 220 true |
224 else | 221 else |
225 # clang wasn't needed, not doing anything. | 222 # clang wasn't needed, not doing anything. |
226 exit 0 | 223 exit 0 |
227 fi | 224 fi |
228 fi | 225 fi |
229 | 226 |
230 | 227 |
231 # Check if there's anything to be done, exit early if not. | 228 # Check if there's anything to be done, exit early if not. |
232 if [[ -f "${STAMP_FILE}" ]]; then | 229 if [[ -f "${STAMP_FILE}" ]]; then |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 "${LLVM_DIR}/test/Bindings/Go/go.test" \ | 309 "${LLVM_DIR}/test/Bindings/Go/go.test" \ |
313 "${CLANG_DIR}/lib/Parse/ParseExpr.cpp" \ | 310 "${CLANG_DIR}/lib/Parse/ParseExpr.cpp" \ |
314 "${CLANG_DIR}/lib/Parse/ParseTemplate.cpp" \ | 311 "${CLANG_DIR}/lib/Parse/ParseTemplate.cpp" \ |
315 "${CLANG_DIR}/lib/Sema/SemaDeclCXX.cpp" \ | 312 "${CLANG_DIR}/lib/Sema/SemaDeclCXX.cpp" \ |
316 "${CLANG_DIR}/lib/Sema/SemaExprCXX.cpp" \ | 313 "${CLANG_DIR}/lib/Sema/SemaExprCXX.cpp" \ |
317 "${CLANG_DIR}/test/SemaCXX/default2.cpp" \ | 314 "${CLANG_DIR}/test/SemaCXX/default2.cpp" \ |
318 "${CLANG_DIR}/test/SemaCXX/typo-correction-delayed.cpp" \ | 315 "${CLANG_DIR}/test/SemaCXX/typo-correction-delayed.cpp" \ |
319 "${COMPILER_RT_DIR}/lib/sanitizer_common/sanitizer_stoptheworld_linux_libc
dep.cc" \ | 316 "${COMPILER_RT_DIR}/lib/sanitizer_common/sanitizer_stoptheworld_linux_libc
dep.cc" \ |
320 "${COMPILER_RT_DIR}/test/tsan/signal_segv_handler.cc" \ | 317 "${COMPILER_RT_DIR}/test/tsan/signal_segv_handler.cc" \ |
321 "${COMPILER_RT_DIR}/lib/sanitizer_common/sanitizer_coverage_libcdep.cc" \ | 318 "${COMPILER_RT_DIR}/lib/sanitizer_common/sanitizer_coverage_libcdep.cc" \ |
| 319 "${COMPILER_RT_DIR}/cmake/config-ix.cmake" \ |
| 320 "${COMPILER_RT_DIR}/lib/ubsan/ubsan_platform.h" \ |
322 ; do | 321 ; do |
323 if [[ -e "${i}" ]]; then | 322 if [[ -e "${i}" ]]; then |
324 rm -f "${i}" # For unversioned files. | 323 rm -f "${i}" # For unversioned files. |
325 svn revert "${i}" | 324 svn revert "${i}" |
326 fi; | 325 fi; |
327 done | 326 done |
328 | 327 |
329 echo Remove the Clang tools shim dir | 328 echo Remove the Clang tools shim dir |
330 CHROME_TOOLS_SHIM_DIR=${ABS_LLVM_DIR}/tools/chrometools | 329 CHROME_TOOLS_SHIM_DIR=${ABS_LLVM_DIR}/tools/chrometools |
331 rm -rfv ${CHROME_TOOLS_SHIM_DIR} | 330 rm -rfv ${CHROME_TOOLS_SHIM_DIR} |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 | 393 |
395 -TEST_F(LibclangReparseTest, ReparseWithModule) { | 394 -TEST_F(LibclangReparseTest, ReparseWithModule) { |
396 +TEST_F(LibclangReparseTest, DISABLED_ReparseWithModule) { | 395 +TEST_F(LibclangReparseTest, DISABLED_ReparseWithModule) { |
397 const char *HeaderTop = "#ifndef H\n#define H\nstruct Foo { int bar;"; | 396 const char *HeaderTop = "#ifndef H\n#define H\nstruct Foo { int bar;"; |
398 const char *HeaderBottom = "\n};\n#endif\n"; | 397 const char *HeaderBottom = "\n};\n#endif\n"; |
399 const char *MFile = "#include \"HeaderFile.h\"\nint main() {" | 398 const char *MFile = "#include \"HeaderFile.h\"\nint main() {" |
400 EOF | 399 EOF |
401 patch -p0 | 400 patch -p0 |
402 popd | 401 popd |
403 | 402 |
404 # Cherry-pick r234010 [sancov] Shrink pc array on Android back to 2**24." | |
405 pushd "${COMPILER_RT_DIR}" | |
406 cat << 'EOF' | | |
407 diff --git a/lib/sanitizer_common/sanitizer_coverage_libcdep.cc b/lib/sanitizer_
common/sanitizer_coverage_libcdep.cc | |
408 index 4b976fc..cfd9e7e 100644 | |
409 --- a/lib/sanitizer_common/sanitizer_coverage_libcdep.cc | |
410 +++ b/lib/sanitizer_common/sanitizer_coverage_libcdep.cc | |
411 @@ -109,7 +109,8 @@ class CoverageData { | |
412 | |
413 // Maximal size pc array may ever grow. | |
414 // We MmapNoReserve this space to ensure that the array is contiguous. | |
415 - static const uptr kPcArrayMaxSize = FIRST_32_SECOND_64(1 << 26, 1 << 27); | |
416 + static const uptr kPcArrayMaxSize = | |
417 + FIRST_32_SECOND_64(1 << (SANITIZER_ANDROID ? 24 : 26), 1 << 27); | |
418 // The amount file mapping for the pc array is grown by. | |
419 static const uptr kPcArrayMmapSize = 64 * 1024; | |
420 | |
421 EOF | |
422 patch -p1 | |
423 popd | |
424 | |
425 # This Go bindings test doesn't work after the bootstrap build on Linux. (PR21
552) | 403 # This Go bindings test doesn't work after the bootstrap build on Linux. (PR21
552) |
426 pushd "${LLVM_DIR}" | 404 pushd "${LLVM_DIR}" |
427 cat << 'EOF' | | 405 cat << 'EOF' | |
428 Index: test/Bindings/Go/go.test | 406 Index: test/Bindings/Go/go.test |
429 =================================================================== | 407 =================================================================== |
430 --- test/Bindings/Go/go.test (revision 223109) | 408 --- test/Bindings/Go/go.test (revision 223109) |
431 +++ test/Bindings/Go/go.test (working copy) | 409 +++ test/Bindings/Go/go.test (working copy) |
432 @@ -1,3 +1,3 @@ | 410 @@ -1,3 +1,3 @@ |
433 -; RUN: llvm-go test llvm.org/llvm/bindings/go/llvm | 411 -; RUN: llvm-go test llvm.org/llvm/bindings/go/llvm |
434 +; RUN: true | 412 +; RUN: true |
435 | 413 |
436 ; REQUIRES: shell | 414 ; REQUIRES: shell |
437 EOF | 415 EOF |
438 patch -p0 | 416 patch -p0 |
439 popd | 417 popd |
440 | 418 |
| 419 # The UBSan run-time, which is now bundled with the ASan run-time, doesn't wor
k |
| 420 # on Mac OS X 10.8 (PR23539). |
| 421 pushd "${COMPILER_RT_DIR}" |
| 422 cat << 'EOF' | |
| 423 --- a/cmake/config-ix.cmake |
| 424 +++ b/cmake/config-ix.cmake |
| 425 @@ -319,7 +319,7 @@ else() |
| 426 endif() |
| 427 |
| 428 if (COMPILER_RT_HAS_SANITIZER_COMMON AND UBSAN_SUPPORTED_ARCH AND |
| 429 - OS_NAME MATCHES "Darwin|Linux|FreeBSD") |
| 430 + OS_NAME MATCHES "Linux|FreeBSD") |
| 431 set(COMPILER_RT_HAS_UBSAN TRUE) |
| 432 else() |
| 433 set(COMPILER_RT_HAS_UBSAN FALSE) |
| 434 diff --git a/lib/ubsan/ubsan_platform.h b/lib/ubsan/ubsan_platform.h |
| 435 index 8ba253b..d5dce8d 100644 |
| 436 --- a/lib/ubsan/ubsan_platform.h |
| 437 +++ b/lib/ubsan/ubsan_platform.h |
| 438 @@ -14,7 +14,7 @@ |
| 439 #define UBSAN_PLATFORM_H |
| 440 |
| 441 // Other platforms should be easy to add, and probably work as-is. |
| 442 -#if (defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__)) && \ |
| 443 +#if (defined(__linux__) || defined(__FreeBSD__)) && \ |
| 444 (defined(__x86_64__) || defined(__i386__) || defined(__arm__) || \ |
| 445 defined(__aarch64__) || defined(__mips__) || defined(__powerpc64__)) |
| 446 # define CAN_SANITIZE_UB 1 |
| 447 EOF |
| 448 patch -p1 |
| 449 popd |
441 | 450 |
442 fi | 451 fi |
443 | 452 |
444 # Echo all commands. | 453 # Echo all commands. |
445 set -x | 454 set -x |
446 | 455 |
447 # Set default values for CC and CXX if they're not set in the environment. | 456 # Set default values for CC and CXX if they're not set in the environment. |
448 CC=${CC:-cc} | 457 CC=${CC:-cc} |
449 CXX=${CXX:-c++} | 458 CXX=${CXX:-c++} |
450 | 459 |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
659 tar -c lib/darwin | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv | 668 tar -c lib/darwin | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv |
660 else | 669 else |
661 tar -c lib/linux | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv | 670 tar -c lib/linux | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv |
662 fi | 671 fi |
663 | 672 |
664 popd | 673 popd |
665 | 674 |
666 if [[ -n "${with_android}" ]]; then | 675 if [[ -n "${with_android}" ]]; then |
667 # Make a standalone Android toolchain. | 676 # Make a standalone Android toolchain. |
668 ${ANDROID_NDK_DIR}/build/tools/make-standalone-toolchain.sh \ | 677 ${ANDROID_NDK_DIR}/build/tools/make-standalone-toolchain.sh \ |
669 --platform=android-14 \ | 678 --platform=android-19 \ |
670 --install-dir="${LLVM_BUILD_DIR}/android-toolchain" \ | 679 --install-dir="${LLVM_BUILD_DIR}/android-toolchain" \ |
671 --system=linux-x86_64 \ | 680 --system=linux-x86_64 \ |
672 --stl=libcxx \ | 681 --stl=stlport \ |
673 --toolchain=arm-linux-androideabi-4.9 | 682 --toolchain=arm-linux-androideabi-4.9 |
674 | 683 |
675 # Android NDK r9d copies a broken unwind.h into the toolchain, see | 684 # Android NDK r9d copies a broken unwind.h into the toolchain, see |
676 # http://crbug.com/357890 | 685 # http://crbug.com/357890 |
677 rm -v "${LLVM_BUILD_DIR}"/android-toolchain/include/c++/*/unwind.h | 686 rm -v "${LLVM_BUILD_DIR}"/android-toolchain/include/c++/*/unwind.h |
678 | 687 |
679 # Build ASan runtime for Android in a separate build tree. | 688 # Build ASan runtime for Android in a separate build tree. |
680 mkdir -p ${LLVM_BUILD_DIR}/android | 689 mkdir -p ${LLVM_BUILD_DIR}/android |
681 pushd ${LLVM_BUILD_DIR}/android | 690 pushd ${LLVM_BUILD_DIR}/android |
682 rm -fv CMakeCache.txt | 691 rm -fv CMakeCache.txt |
683 MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ | 692 MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ |
684 -DCMAKE_BUILD_TYPE=Release \ | 693 -DCMAKE_BUILD_TYPE=Release \ |
685 -DLLVM_ENABLE_ASSERTIONS=ON \ | 694 -DLLVM_ENABLE_ASSERTIONS=ON \ |
686 -DLLVM_ENABLE_THREADS=OFF \ | 695 -DLLVM_ENABLE_THREADS=OFF \ |
687 -DCMAKE_C_COMPILER=${PWD}/../bin/clang \ | 696 -DCMAKE_C_COMPILER=${PWD}/../bin/clang \ |
688 -DCMAKE_CXX_COMPILER=${PWD}/../bin/clang++ \ | 697 -DCMAKE_CXX_COMPILER=${PWD}/../bin/clang++ \ |
689 -DLLVM_CONFIG_PATH=${PWD}/../bin/llvm-config \ | 698 -DLLVM_CONFIG_PATH=${PWD}/../bin/llvm-config \ |
690 -DCMAKE_C_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../androi
d-toolchain/sysroot -B${PWD}/../android-toolchain" \ | 699 -DCMAKE_C_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../androi
d-toolchain/sysroot -B${PWD}/../android-toolchain" \ |
691 -DCMAKE_CXX_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../andr
oid-toolchain/sysroot -B${PWD}/../android-toolchain" \ | 700 -DCMAKE_CXX_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../andr
oid-toolchain/sysroot -B${PWD}/../android-toolchain" \ |
692 -DANDROID=1 \ | 701 -DANDROID=1 \ |
693 "${ABS_COMPILER_RT_DIR}" | 702 "${ABS_COMPILER_RT_DIR}" |
694 ninja libclang_rt.asan-arm-android.so | 703 ninja libclang_rt.asan-arm-android.so |
695 | 704 |
696 # And copy it into the main build tree. | 705 # And copy it into the main build tree. |
697 cp "$(find -name libclang_rt.asan-arm-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/
lib/linux/" | 706 cp "$(find -name libclang_rt.asan-arm-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/
lib/linux/" |
698 popd | 707 popd |
699 fi | 708 fi |
700 | 709 |
701 if [[ -n "$run_tests" ]]; then | 710 if [[ -n "$run_tests" || -n "${LLVM_FORCE_HEAD_REVISION:-''}" ]]; then |
702 # Run Chrome tool tests. | 711 # Run Chrome tool tests. |
703 ninja -C "${LLVM_BUILD_DIR}" cr-check-all | 712 ninja -C "${LLVM_BUILD_DIR}" cr-check-all |
| 713 fi |
| 714 if [[ -n "$run_tests" ]]; then |
704 # Run the LLVM and Clang tests. | 715 # Run the LLVM and Clang tests. |
705 ninja -C "${LLVM_BUILD_DIR}" check-all | 716 ninja -C "${LLVM_BUILD_DIR}" check-all |
706 fi | 717 fi |
707 | 718 |
708 # After everything is done, log success for this revision. | 719 # After everything is done, log success for this revision. |
709 echo "${PACKAGE_VERSION}" > "${STAMP_FILE}" | 720 echo "${PACKAGE_VERSION}" > "${STAMP_FILE}" |
OLD | NEW |