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=216630 | 11 CLANG_REVISION=216630 |
12 | 12 |
13 THIS_DIR="$(dirname "${0}")" | 13 THIS_DIR="$(dirname "${0}")" |
14 LLVM_DIR="${THIS_DIR}/../../../third_party/llvm" | 14 LLVM_DIR="${THIS_DIR}/../../../third_party/llvm" |
15 LLVM_BUILD_DIR="${LLVM_DIR}/../llvm-build/Release+Asserts" | 15 LLVM_BUILD_DIR="${LLVM_DIR}/../llvm-build/Release+Asserts" |
16 COMPILER_RT_BUILD_DIR="${LLVM_DIR}/../llvm-build/compiler-rt" | 16 COMPILER_RT_BUILD_DIR="${LLVM_DIR}/../llvm-build/compiler-rt" |
17 LLVM_BOOTSTRAP_DIR="${LLVM_DIR}/../llvm-bootstrap" | 17 LLVM_BOOTSTRAP_DIR="${LLVM_DIR}/../llvm-bootstrap" |
18 LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install" | 18 LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install" |
19 CLANG_DIR="${LLVM_DIR}/tools/clang" | 19 CLANG_DIR="${LLVM_DIR}/tools/clang" |
20 CLANG_TOOLS_EXTRA_DIR="${CLANG_DIR}/tools/extra" | |
21 COMPILER_RT_DIR="${LLVM_DIR}/compiler-rt" | 20 COMPILER_RT_DIR="${LLVM_DIR}/compiler-rt" |
22 LIBCXX_DIR="${LLVM_DIR}/projects/libcxx" | 21 LIBCXX_DIR="${LLVM_DIR}/projects/libcxx" |
23 LIBCXXABI_DIR="${LLVM_DIR}/projects/libcxxabi" | 22 LIBCXXABI_DIR="${LLVM_DIR}/projects/libcxxabi" |
24 ANDROID_NDK_DIR="${THIS_DIR}/../../../third_party/android_tools/ndk" | 23 ANDROID_NDK_DIR="${THIS_DIR}/../../../third_party/android_tools/ndk" |
25 STAMP_FILE="${LLVM_DIR}/../llvm-build/cr_build_revision" | 24 STAMP_FILE="${LLVM_DIR}/../llvm-build/cr_build_revision" |
26 | 25 |
27 ABS_LIBCXX_DIR="${PWD}/${LIBCXX_DIR}" | 26 ABS_LIBCXX_DIR="${PWD}/${LIBCXX_DIR}" |
28 ABS_LIBCXXABI_DIR="${PWD}/${LIBCXXABI_DIR}" | 27 ABS_LIBCXXABI_DIR="${PWD}/${LIBCXXABI_DIR}" |
29 ABS_LLVM_DIR="${PWD}/${LLVM_DIR}" | 28 ABS_LLVM_DIR="${PWD}/${LLVM_DIR}" |
30 ABS_LLVM_BUILD_DIR="${PWD}/${LLVM_BUILD_DIR}" | 29 ABS_LLVM_BUILD_DIR="${PWD}/${LLVM_BUILD_DIR}" |
(...skipping 21 matching lines...) Expand all Loading... |
52 set -eu | 51 set -eu |
53 | 52 |
54 OS="$(uname -s)" | 53 OS="$(uname -s)" |
55 | 54 |
56 # Parse command line options. | 55 # Parse command line options. |
57 if_needed= | 56 if_needed= |
58 force_local_build= | 57 force_local_build= |
59 run_tests= | 58 run_tests= |
60 bootstrap= | 59 bootstrap= |
61 with_android=yes | 60 with_android=yes |
62 chrome_tools="plugins blink_gc_plugin" | 61 chrome_tools="plugins;blink_gc_plugin" |
63 gcc_toolchain= | 62 gcc_toolchain= |
64 | 63 |
65 if [[ "${OS}" = "Darwin" ]]; then | 64 if [[ "${OS}" = "Darwin" ]]; then |
66 with_android= | 65 with_android= |
67 fi | 66 fi |
68 | 67 |
69 while [[ $# > 0 ]]; do | 68 while [[ $# > 0 ]]; do |
70 case $1 in | 69 case $1 in |
71 --bootstrap) | 70 --bootstrap) |
72 bootstrap=yes | 71 bootstrap=yes |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 | 111 |
113 --help) | 112 --help) |
114 echo "usage: $0 [--force-local-build] [--if-needed] [--run-tests] " | 113 echo "usage: $0 [--force-local-build] [--if-needed] [--run-tests] " |
115 echo "--bootstrap: First build clang with CC, then with itself." | 114 echo "--bootstrap: First build clang with CC, then with itself." |
116 echo "--force-local-build: Don't try to download prebuilt binaries." | 115 echo "--force-local-build: Don't try to download prebuilt binaries." |
117 echo "--if-needed: Download clang only if the script thinks it is needed." | 116 echo "--if-needed: Download clang only if the script thinks it is needed." |
118 echo "--run-tests: Run tests after building. Only for local builds." | 117 echo "--run-tests: Run tests after building. Only for local builds." |
119 echo "--print-revision: Print current clang revision and exit." | 118 echo "--print-revision: Print current clang revision and exit." |
120 echo "--without-android: Don't build ASan Android runtime library." | 119 echo "--without-android: Don't build ASan Android runtime library." |
121 echo "--with-chrome-tools: Select which chrome tools to build." \ | 120 echo "--with-chrome-tools: Select which chrome tools to build." \ |
122 "Defaults to plugins." | 121 "Defaults to plugins;blink_gc_plugin." |
123 echo " Example: --with-chrome-tools 'plugins empty-string'" | 122 echo " Example: --with-chrome-tools plugins;empty-string" |
124 echo "--gcc-toolchain: Set the prefix for which GCC version should" | 123 echo "--gcc-toolchain: Set the prefix for which GCC version should" |
125 echo " be used for building. For example, to use gcc in" | 124 echo " be used for building. For example, to use gcc in" |
126 echo " /opt/foo/bin/gcc, use '--gcc-toolchain '/opt/foo" | 125 echo " /opt/foo/bin/gcc, use '--gcc-toolchain '/opt/foo" |
127 echo | 126 echo |
128 exit 1 | 127 exit 1 |
129 ;; | 128 ;; |
130 *) | 129 *) |
131 echo "Unknown argument: '$1'." | 130 echo "Unknown argument: '$1'." |
132 echo "Use --help for help." | 131 echo "Use --help for help." |
133 exit 1 | 132 exit 1 |
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
540 "${ABS_COMPILER_RT_DIR}" | 539 "${ABS_COMPILER_RT_DIR}" |
541 ninja clang_rt.asan-arm-android | 540 ninja clang_rt.asan-arm-android |
542 | 541 |
543 # And copy it into the main build tree. | 542 # And copy it into the main build tree. |
544 cp "$(find -name libclang_rt.asan-arm-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/
lib/linux/" | 543 cp "$(find -name libclang_rt.asan-arm-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/
lib/linux/" |
545 popd | 544 popd |
546 fi | 545 fi |
547 | 546 |
548 # Build Chrome-specific clang tools. Paths in this list should be relative to | 547 # Build Chrome-specific clang tools. Paths in this list should be relative to |
549 # tools/clang. | 548 # tools/clang. |
550 # For each tool directory, copy it into the clang tree and use clang's build | 549 TOOL_SRC_DIR="${PWD}/${THIS_DIR}/../" |
551 # system to compile it. | 550 TOOL_BUILD_DIR="${ABS_LLVM_BUILD_DIR}/tools/clang/tools/chrome-extras" |
552 for CHROME_TOOL_DIR in ${chrome_tools}; do | |
553 TOOL_SRC_DIR="${PWD}/${THIS_DIR}/../${CHROME_TOOL_DIR}" | |
554 TOOL_BUILD_DIR="${ABS_LLVM_BUILD_DIR}/tools/clang/tools/chrome-${CHROME_TOOL_D
IR}" | |
555 | 551 |
556 rm -rf "${TOOL_BUILD_DIR}" | 552 rm -rf "${TOOL_BUILD_DIR}" |
557 mkdir -p "${TOOL_BUILD_DIR}" | 553 mkdir -p "${TOOL_BUILD_DIR}" |
558 pushd "${TOOL_BUILD_DIR}" | 554 pushd "${TOOL_BUILD_DIR}" |
559 MACOSX_DEPLOYMENT_TARGET=10.6 cmake -GNinja \ | 555 MACOSX_DEPLOYMENT_TARGET=10.6 cmake -GNinja \ |
560 -DLLVM_BUILD_DIR="${ABS_LLVM_BUILD_DIR}" \ | 556 -DLLVM_BUILD_DIR="${ABS_LLVM_BUILD_DIR}" \ |
561 -DLLVM_SRC_DIR="${ABS_LLVM_DIR}" \ | 557 -DLLVM_SRC_DIR="${ABS_LLVM_DIR}" \ |
562 -DCMAKE_C_COMPILER="${CC}" \ | 558 -DCMAKE_C_COMPILER="${CC}" \ |
563 -DCMAKE_CXX_COMPILER="${CXX}" \ | 559 -DCMAKE_CXX_COMPILER="${CXX}" \ |
564 -DCMAKE_C_FLAGS="${CFLAGS}" \ | 560 -DCMAKE_C_FLAGS="${CFLAGS}" \ |
565 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ | 561 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ |
566 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ | 562 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ |
567 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ | 563 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ |
568 -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}" \ | 564 -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}" \ |
569 "${TOOL_SRC_DIR}" | 565 -DCMAKE_INSTALL_PREFIX="${ABS_LLVM_BUILD_DIR}" \ |
570 ninja | 566 -DCHROMIUM_TOOLS="${chrome_tools}" \ |
571 cp -v "${TOOL_BUILD_DIR}/lib"/* "${ABS_LLVM_BUILD_DIR}/lib/" | 567 "${TOOL_SRC_DIR}" |
572 popd | 568 popd |
573 done | 569 ninja -C "${TOOL_BUILD_DIR}" install |
574 | 570 |
575 if [[ -n "$run_tests" ]]; then | 571 if [[ -n "$run_tests" ]]; then |
576 # Run the tests for each chrome tool. | 572 # Run Chrome tool tests. |
577 for CHROME_TOOL_DIR in ${chrome_tools}; do | 573 ninja -C "${TOOL_BUILD_DIR}" check-all |
578 TOOL_SRC_DIR="${THIS_DIR}/../${CHROME_TOOL_DIR}" | |
579 TOOL_BUILD_DIR="${ABS_LLVM_BUILD_DIR}/tools/clang/tools/chrome-${CHROME_TOOL
_DIR}" | |
580 LIBNAME=$(basename $(ls "${TOOL_BUILD_DIR}/lib/")) | |
581 if [[ -f "${TOOL_SRC_DIR}/tests/test.sh" ]]; then | |
582 "${TOOL_SRC_DIR}/tests/test.sh" "${ABS_LLVM_BUILD_DIR}/bin/clang" \ | |
583 "${ABS_LLVM_BUILD_DIR}/lib/${LIBNAME}" | |
584 fi | |
585 done | |
586 # Run the LLVM and Clang tests. | 574 # Run the LLVM and Clang tests. |
587 ninja -C "${LLVM_BUILD_DIR}" check-all | 575 ninja -C "${LLVM_BUILD_DIR}" check-all |
588 fi | 576 fi |
589 | 577 |
590 # After everything is done, log success for this revision. | 578 # After everything is done, log success for this revision. |
591 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" | 579 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" |
OLD | NEW |