Chromium Code Reviews| 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=217949 | 11 CLANG_REVISION=217949 |
| 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 COMPILER_RT_DIR="${LLVM_DIR}/compiler-rt" | 20 COMPILER_RT_DIR="${LLVM_DIR}/compiler-rt" |
| 21 LIBCXX_DIR="${LLVM_DIR}/projects/libcxx" | 21 LIBCXX_DIR="${LLVM_DIR}/projects/libcxx" |
| 22 LIBCXXABI_DIR="${LLVM_DIR}/projects/libcxxabi" | 22 LIBCXXABI_DIR="${LLVM_DIR}/projects/libcxxabi" |
| 23 ANDROID_NDK_DIR="${THIS_DIR}/../../../third_party/android_tools/ndk" | 23 ANDROID_NDK_DIR="${THIS_DIR}/../../../third_party/android_tools/ndk" |
| 24 STAMP_FILE="${LLVM_DIR}/../llvm-build/cr_build_revision" | 24 STAMP_FILE="${LLVM_DIR}/../llvm-build/cr_build_revision" |
| 25 CHROMIUM_TOOLS_DIR="${THIS_DIR}/.." | |
| 25 | 26 |
| 27 ABS_CHROMIUM_TOOLS_DIR="${PWD}/${CHROMIUM_TOOLS_DIR}" | |
| 26 ABS_LIBCXX_DIR="${PWD}/${LIBCXX_DIR}" | 28 ABS_LIBCXX_DIR="${PWD}/${LIBCXX_DIR}" |
| 27 ABS_LIBCXXABI_DIR="${PWD}/${LIBCXXABI_DIR}" | 29 ABS_LIBCXXABI_DIR="${PWD}/${LIBCXXABI_DIR}" |
| 28 ABS_LLVM_DIR="${PWD}/${LLVM_DIR}" | 30 ABS_LLVM_DIR="${PWD}/${LLVM_DIR}" |
| 29 ABS_LLVM_BUILD_DIR="${PWD}/${LLVM_BUILD_DIR}" | 31 ABS_LLVM_BUILD_DIR="${PWD}/${LLVM_BUILD_DIR}" |
| 30 ABS_COMPILER_RT_DIR="${PWD}/${COMPILER_RT_DIR}" | 32 ABS_COMPILER_RT_DIR="${PWD}/${COMPILER_RT_DIR}" |
| 31 | 33 |
| 32 | 34 |
| 33 # Use both the clang revision and the plugin revisions to test for updates. | 35 # Use both the clang revision and the plugin revisions to test for updates. |
| 34 BLINKGCPLUGIN_REVISION=\ | 36 BLINKGCPLUGIN_REVISION=\ |
| 35 $(grep 'set(LIBRARYNAME' "$THIS_DIR"/../blink_gc_plugin/CMakeLists.txt \ | 37 $(grep 'set(LIBRARYNAME' "$THIS_DIR"/../blink_gc_plugin/CMakeLists.txt \ |
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 423 -nodefaultlibs -current_version 1 -compatibility_version 1 \ | 425 -nodefaultlibs -current_version 1 -compatibility_version 1 \ |
| 424 -lSystem -install_name @executable_path/libc++.dylib \ | 426 -lSystem -install_name @executable_path/libc++.dylib \ |
| 425 -Wl,-unexported_symbols_list,${ABS_LIBCXX_DIR}/lib/libc++unexp.exp \ | 427 -Wl,-unexported_symbols_list,${ABS_LIBCXX_DIR}/lib/libc++unexp.exp \ |
| 426 -Wl,-force_symbols_not_weak_list,${ABS_LIBCXX_DIR}/lib/notweak.exp \ | 428 -Wl,-force_symbols_not_weak_list,${ABS_LIBCXX_DIR}/lib/notweak.exp \ |
| 427 -Wl,-force_symbols_weak_list,${ABS_LIBCXX_DIR}/lib/weak.exp | 429 -Wl,-force_symbols_weak_list,${ABS_LIBCXX_DIR}/lib/weak.exp |
| 428 ln -sf libc++.1.dylib libc++.dylib | 430 ln -sf libc++.1.dylib libc++.dylib |
| 429 popd | 431 popd |
| 430 LDFLAGS+="-stdlib=libc++ -L${PWD}/libcxxbuild" | 432 LDFLAGS+="-stdlib=libc++ -L${PWD}/libcxxbuild" |
| 431 fi | 433 fi |
| 432 | 434 |
| 435 # Hook the Chromium tools into the LLVM build. Several Chromium tools have | |
| 436 # dependencies on LLVM/Clang libraries. The LLVM build detects implicit tools | |
| 437 # in the tools subdirectory, so install a shim CMakeLists.txt that forwards to | |
| 438 # the real directory for the Chromium tools. | |
| 439 # Note that the shim directory name intentionally has no _ or _. The implicit | |
| 440 # tool detection logic munges them in a weird way. | |
| 441 CHROME_TOOLS_SHIM_DIR=${ABS_LLVM_DIR}/tools/chrometools | |
|
hans
2014/10/03 01:23:45
Why aren't we inserting the shim under tools/clang
dcheng
2014/10/03 03:47:51
There's only one call to add_llvm_implicit_externa
hans
2014/10/03 17:07:14
OK. Let's keep it here, then.
| |
| 442 rm -rfv ${CHROME_TOOLS_SHIM_DIR} | |
| 443 mkdir -v ${CHROME_TOOLS_SHIM_DIR} | |
| 444 cat > ${CHROME_TOOLS_SHIM_DIR}/CMakeLists.txt << EOF | |
| 445 # Since tools/clang isn't actually a subdirectory, use the two argument version | |
| 446 # to specify where build artifacts go. CMake doesn't allow reusing the same | |
| 447 # binary dir for multiple source dirs, so the build artifacts have to go into a | |
| 448 # subdirectory... | |
| 449 add_subdirectory(\${CHROMIUM_TOOLS_SRC} \${CMAKE_CURRENT_BINARY_DIR}/a) | |
| 450 EOF | |
| 433 rm -fv CMakeCache.txt | 451 rm -fv CMakeCache.txt |
| 434 MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ | 452 MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ |
| 435 -DCMAKE_BUILD_TYPE=Release \ | 453 -DCMAKE_BUILD_TYPE=Release \ |
| 436 -DLLVM_ENABLE_ASSERTIONS=ON \ | 454 -DLLVM_ENABLE_ASSERTIONS=ON \ |
| 437 -DLLVM_ENABLE_THREADS=OFF \ | 455 -DLLVM_ENABLE_THREADS=OFF \ |
| 438 -DCMAKE_C_COMPILER="${CC}" \ | 456 -DCMAKE_C_COMPILER="${CC}" \ |
| 439 -DCMAKE_CXX_COMPILER="${CXX}" \ | 457 -DCMAKE_CXX_COMPILER="${CXX}" \ |
| 440 -DCMAKE_C_FLAGS="${CFLAGS}" \ | 458 -DCMAKE_C_FLAGS="${CFLAGS}" \ |
| 441 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ | 459 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ |
| 442 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ | 460 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ |
| 443 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ | 461 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ |
| 444 -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}" \ | 462 -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}" \ |
| 463 -DCMAKE_INSTALL_PREFIX="${ABS_LLVM_BUILD_DIR}" \ | |
| 464 -DCHROMIUM_TOOLS_SRC="${ABS_CHROMIUM_TOOLS_DIR}" \ | |
| 465 -DCHROMIUM_TOOLS="${chrome_tools}" \ | |
| 445 "${ABS_LLVM_DIR}" | 466 "${ABS_LLVM_DIR}" |
| 446 env | 467 env |
| 447 | 468 |
| 448 if [[ -n "${gcc_toolchain}" ]]; then | 469 if [[ -n "${gcc_toolchain}" ]]; then |
| 449 # Copy in the right stdlibc++.so.6 so clang can start. | 470 # Copy in the right stdlibc++.so.6 so clang can start. |
| 450 mkdir -p lib | 471 mkdir -p lib |
| 451 cp -v "$(${CXX} ${CXXFLAGS} -print-file-name=libstdc++.so.6)" lib/ | 472 cp -v "$(${CXX} ${CXXFLAGS} -print-file-name=libstdc++.so.6)" lib/ |
| 452 fi | 473 fi |
| 453 | 474 |
| 454 ninja | 475 ninja |
| 476 # If any Chromium tools were built, install those now. | |
| 477 if [[ -n "${chrome_tools}" ]]; then | |
| 478 ninja cr-install | |
| 479 fi | |
| 455 | 480 |
| 456 STRIP_FLAGS= | 481 STRIP_FLAGS= |
| 457 if [ "${OS}" = "Darwin" ]; then | 482 if [ "${OS}" = "Darwin" ]; then |
| 458 # See http://crbug.com/256342 | 483 # See http://crbug.com/256342 |
| 459 STRIP_FLAGS=-x | 484 STRIP_FLAGS=-x |
| 460 | 485 |
| 461 cp libcxxbuild/libc++.1.dylib bin/ | 486 cp libcxxbuild/libc++.1.dylib bin/ |
| 462 fi | 487 fi |
| 463 strip ${STRIP_FLAGS} bin/clang | 488 strip ${STRIP_FLAGS} bin/clang |
| 464 popd | 489 popd |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 521 -DCMAKE_CXX_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../andr oid-toolchain/sysroot -B${PWD}/../android-toolchain" \ | 546 -DCMAKE_CXX_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../andr oid-toolchain/sysroot -B${PWD}/../android-toolchain" \ |
| 522 -DANDROID=1 \ | 547 -DANDROID=1 \ |
| 523 "${ABS_COMPILER_RT_DIR}" | 548 "${ABS_COMPILER_RT_DIR}" |
| 524 ninja clang_rt.asan-arm-android | 549 ninja clang_rt.asan-arm-android |
| 525 | 550 |
| 526 # And copy it into the main build tree. | 551 # And copy it into the main build tree. |
| 527 cp "$(find -name libclang_rt.asan-arm-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/ lib/linux/" | 552 cp "$(find -name libclang_rt.asan-arm-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/ lib/linux/" |
| 528 popd | 553 popd |
| 529 fi | 554 fi |
| 530 | 555 |
| 531 # Build Chrome-specific clang tools. Paths in this list should be relative to | |
| 532 # tools/clang. | |
| 533 TOOL_SRC_DIR="${PWD}/${THIS_DIR}/../" | |
| 534 TOOL_BUILD_DIR="${ABS_LLVM_BUILD_DIR}/tools/clang/tools/chrome-extras" | |
| 535 | |
| 536 rm -rf "${TOOL_BUILD_DIR}" | |
| 537 mkdir -p "${TOOL_BUILD_DIR}" | |
| 538 pushd "${TOOL_BUILD_DIR}" | |
| 539 rm -fv CMakeCache.txt | |
| 540 MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ | |
| 541 -DLLVM_BUILD_DIR="${ABS_LLVM_BUILD_DIR}" \ | |
| 542 -DLLVM_SRC_DIR="${ABS_LLVM_DIR}" \ | |
| 543 -DCMAKE_C_COMPILER="${CC}" \ | |
| 544 -DCMAKE_CXX_COMPILER="${CXX}" \ | |
| 545 -DCMAKE_C_FLAGS="${CFLAGS}" \ | |
| 546 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ | |
| 547 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ | |
| 548 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ | |
| 549 -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}" \ | |
| 550 -DCMAKE_INSTALL_PREFIX="${ABS_LLVM_BUILD_DIR}" \ | |
| 551 -DCHROMIUM_TOOLS="${chrome_tools}" \ | |
| 552 "${TOOL_SRC_DIR}" | |
| 553 popd | |
| 554 ninja -C "${TOOL_BUILD_DIR}" install | |
| 555 | |
| 556 if [[ -n "$run_tests" ]]; then | 556 if [[ -n "$run_tests" ]]; then |
| 557 # Run Chrome tool tests. | 557 # Run Chrome tool tests. |
| 558 ninja -C "${TOOL_BUILD_DIR}" check-all | 558 ninja -C "${LLVM_BUILD_DIR}" cr-check-all |
| 559 # Run the LLVM and Clang tests. | 559 # Run the LLVM and Clang tests. |
| 560 ninja -C "${LLVM_BUILD_DIR}" check-all | 560 ninja -C "${LLVM_BUILD_DIR}" check-all |
| 561 fi | 561 fi |
| 562 | 562 |
| 563 # After everything is done, log success for this revision. | 563 # After everything is done, log success for this revision. |
| 564 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" | 564 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" |
| OLD | NEW |