| 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. |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 CC="$gcc_toolchain/bin/gcc" | 344 CC="$gcc_toolchain/bin/gcc" |
| 345 CXX="$gcc_toolchain/bin/g++" | 345 CXX="$gcc_toolchain/bin/g++" |
| 346 # Set LD_LIBRARY_PATH to make auxiliary targets (tablegen, bootstrap compiler, | 346 # Set LD_LIBRARY_PATH to make auxiliary targets (tablegen, bootstrap compiler, |
| 347 # etc.) find the .so. | 347 # etc.) find the .so. |
| 348 export LD_LIBRARY_PATH="$(dirname $(${CXX} -print-file-name=libstdc++.so.6))" | 348 export LD_LIBRARY_PATH="$(dirname $(${CXX} -print-file-name=libstdc++.so.6))" |
| 349 fi | 349 fi |
| 350 | 350 |
| 351 CFLAGS="" | 351 CFLAGS="" |
| 352 CXXFLAGS="" | 352 CXXFLAGS="" |
| 353 LDFLAGS="" | 353 LDFLAGS="" |
| 354 |
| 354 # LLVM uses C++11 starting in llvm 3.5. On Linux, this means libstdc++4.7+ is | 355 # LLVM uses C++11 starting in llvm 3.5. On Linux, this means libstdc++4.7+ is |
| 355 # needed, on OS X it requires libc++. clang only automatically links to libc++ | 356 # needed, on OS X it requires libc++. clang only automatically links to libc++ |
| 356 # when targeting OS X 10.9+, so add stdlib=libc++ explicitly so clang can run on | 357 # when targeting OS X 10.9+, so add stdlib=libc++ explicitly so clang can run on |
| 357 # OS X versions as old as 10.7. | 358 # OS X versions as old as 10.7. |
| 358 # TODO(thakis): Some bots are still on 10.6, so for now bundle libc++.dylib. | 359 # TODO(thakis): Some bots are still on 10.6, so for now bundle libc++.dylib. |
| 359 # Remove this once all bots are on 10.7+, then use --enable-libcpp=yes and | 360 # Remove this once all bots are on 10.7+, then use --enable-libcpp=yes and |
| 360 # change all MACOSX_DEPLOYMENT_TARGET values to 10.7. | 361 # change deployment_target to 10.7. |
| 362 deployment_target="" |
| 363 |
| 361 if [ "${OS}" = "Darwin" ]; then | 364 if [ "${OS}" = "Darwin" ]; then |
| 362 # When building on 10.9, /usr/include usually doesn't exist, and while | 365 # When building on 10.9, /usr/include usually doesn't exist, and while |
| 363 # Xcode's clang automatically sets a sysroot, self-built clangs don't. | 366 # Xcode's clang automatically sets a sysroot, self-built clangs don't. |
| 364 CFLAGS="-isysroot $(xcrun --show-sdk-path)" | 367 CFLAGS="-isysroot $(xcrun --show-sdk-path)" |
| 365 CPPFLAGS="${CFLAGS}" | 368 CPPFLAGS="${CFLAGS}" |
| 366 CXXFLAGS="-stdlib=libc++ -nostdinc++ -I${ABS_LIBCXX_DIR}/include ${CFLAGS}" | 369 CXXFLAGS="-stdlib=libc++ -nostdinc++ -I${ABS_LIBCXX_DIR}/include ${CFLAGS}" |
| 370 |
| 371 if [[ -n "${bootstrap}" ]]; then |
| 372 deployment_target=10.6 |
| 373 fi |
| 367 fi | 374 fi |
| 368 | 375 |
| 369 # Build bootstrap clang if requested. | 376 # Build bootstrap clang if requested. |
| 370 if [[ -n "${bootstrap}" ]]; then | 377 if [[ -n "${bootstrap}" ]]; then |
| 371 ABS_INSTALL_DIR="${PWD}/${LLVM_BOOTSTRAP_INSTALL_DIR}" | 378 ABS_INSTALL_DIR="${PWD}/${LLVM_BOOTSTRAP_INSTALL_DIR}" |
| 372 echo "Building bootstrap compiler" | 379 echo "Building bootstrap compiler" |
| 373 mkdir -p "${LLVM_BOOTSTRAP_DIR}" | 380 mkdir -p "${LLVM_BOOTSTRAP_DIR}" |
| 374 pushd "${LLVM_BOOTSTRAP_DIR}" | 381 pushd "${LLVM_BOOTSTRAP_DIR}" |
| 375 | 382 |
| 376 cmake -GNinja \ | 383 cmake -GNinja \ |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 -nodefaultlibs -current_version 1 -compatibility_version 1 \ | 447 -nodefaultlibs -current_version 1 -compatibility_version 1 \ |
| 441 -lSystem -install_name @executable_path/libc++.dylib \ | 448 -lSystem -install_name @executable_path/libc++.dylib \ |
| 442 -Wl,-unexported_symbols_list,${ABS_LIBCXX_DIR}/lib/libc++unexp.exp \ | 449 -Wl,-unexported_symbols_list,${ABS_LIBCXX_DIR}/lib/libc++unexp.exp \ |
| 443 -Wl,-force_symbols_not_weak_list,${ABS_LIBCXX_DIR}/lib/notweak.exp \ | 450 -Wl,-force_symbols_not_weak_list,${ABS_LIBCXX_DIR}/lib/notweak.exp \ |
| 444 -Wl,-force_symbols_weak_list,${ABS_LIBCXX_DIR}/lib/weak.exp | 451 -Wl,-force_symbols_weak_list,${ABS_LIBCXX_DIR}/lib/weak.exp |
| 445 ln -sf libc++.1.dylib libc++.dylib | 452 ln -sf libc++.1.dylib libc++.dylib |
| 446 popd | 453 popd |
| 447 LDFLAGS+="-stdlib=libc++ -L${PWD}/libcxxbuild" | 454 LDFLAGS+="-stdlib=libc++ -L${PWD}/libcxxbuild" |
| 448 fi | 455 fi |
| 449 | 456 |
| 450 if [[ ! -f ./CMakeCache.txt ]]; then | 457 rm -fv CMakeCache.txt |
| 451 MACOSX_DEPLOYMENT_TARGET=10.6 cmake -GNinja \ | 458 MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ |
| 452 -DCMAKE_BUILD_TYPE=Release \ | 459 -DCMAKE_BUILD_TYPE=Release \ |
| 453 -DLLVM_ENABLE_ASSERTIONS=ON \ | 460 -DLLVM_ENABLE_ASSERTIONS=ON \ |
| 454 -DLLVM_ENABLE_THREADS=OFF \ | 461 -DLLVM_ENABLE_THREADS=OFF \ |
| 455 -DCMAKE_C_COMPILER="${CC}" \ | 462 -DCMAKE_C_COMPILER="${CC}" \ |
| 456 -DCMAKE_CXX_COMPILER="${CXX}" \ | 463 -DCMAKE_CXX_COMPILER="${CXX}" \ |
| 457 -DCMAKE_C_FLAGS="${CFLAGS}" \ | 464 -DCMAKE_C_FLAGS="${CFLAGS}" \ |
| 458 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ | 465 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ |
| 459 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ | 466 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ |
| 460 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ | 467 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ |
| 461 -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}" \ | 468 -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}" \ |
| 462 "${ABS_LLVM_DIR}" | 469 "${ABS_LLVM_DIR}" |
| 463 env | 470 env |
| 464 fi | |
| 465 | 471 |
| 466 if [[ -n "${gcc_toolchain}" ]]; then | 472 if [[ -n "${gcc_toolchain}" ]]; then |
| 467 # Copy in the right stdlibc++.so.6 so clang can start. | 473 # Copy in the right stdlibc++.so.6 so clang can start. |
| 468 mkdir -p lib | 474 mkdir -p lib |
| 469 cp -v "$(${CXX} ${CXXFLAGS} -print-file-name=libstdc++.so.6)" lib/ | 475 cp -v "$(${CXX} ${CXXFLAGS} -print-file-name=libstdc++.so.6)" lib/ |
| 470 fi | 476 fi |
| 471 | 477 |
| 472 ninja | 478 ninja |
| 473 | 479 |
| 474 STRIP_FLAGS= | 480 STRIP_FLAGS= |
| 475 if [ "${OS}" = "Darwin" ]; then | 481 if [ "${OS}" = "Darwin" ]; then |
| 476 # See http://crbug.com/256342 | 482 # See http://crbug.com/256342 |
| 477 STRIP_FLAGS=-x | 483 STRIP_FLAGS=-x |
| 478 | 484 |
| 479 cp libcxxbuild/libc++.1.dylib bin/ | 485 cp libcxxbuild/libc++.1.dylib bin/ |
| 480 fi | 486 fi |
| 481 strip ${STRIP_FLAGS} bin/clang | 487 strip ${STRIP_FLAGS} bin/clang |
| 482 popd | 488 popd |
| 483 | 489 |
| 484 # Build compiler-rt out-of-tree. | 490 # Build compiler-rt out-of-tree. |
| 485 mkdir -p "${COMPILER_RT_BUILD_DIR}" | 491 mkdir -p "${COMPILER_RT_BUILD_DIR}" |
| 486 pushd "${COMPILER_RT_BUILD_DIR}" | 492 pushd "${COMPILER_RT_BUILD_DIR}" |
| 487 | 493 |
| 488 MACOSX_DEPLOYMENT_TARGET=10.6 cmake -GNinja \ | 494 rm -fv CMakeCache.txt |
| 495 MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ |
| 489 -DCMAKE_BUILD_TYPE=Release \ | 496 -DCMAKE_BUILD_TYPE=Release \ |
| 490 -DLLVM_ENABLE_ASSERTIONS=ON \ | 497 -DLLVM_ENABLE_ASSERTIONS=ON \ |
| 491 -DLLVM_ENABLE_THREADS=OFF \ | 498 -DLLVM_ENABLE_THREADS=OFF \ |
| 492 -DCMAKE_C_COMPILER="${CC}" \ | 499 -DCMAKE_C_COMPILER="${CC}" \ |
| 493 -DCMAKE_CXX_COMPILER="${CXX}" \ | 500 -DCMAKE_CXX_COMPILER="${CXX}" \ |
| 494 -DLLVM_CONFIG_PATH="${ABS_LLVM_BUILD_DIR}/bin/llvm-config" \ | 501 -DLLVM_CONFIG_PATH="${ABS_LLVM_BUILD_DIR}/bin/llvm-config" \ |
| 495 "${ABS_COMPILER_RT_DIR}" | 502 "${ABS_COMPILER_RT_DIR}" |
| 496 | 503 |
| 497 ninja | 504 ninja |
| 498 | 505 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 519 --system=linux-x86_64 \ | 526 --system=linux-x86_64 \ |
| 520 --stl=stlport | 527 --stl=stlport |
| 521 | 528 |
| 522 # Android NDK r9d copies a broken unwind.h into the toolchain, see | 529 # Android NDK r9d copies a broken unwind.h into the toolchain, see |
| 523 # http://crbug.com/357890 | 530 # http://crbug.com/357890 |
| 524 rm -v "${LLVM_BUILD_DIR}"/android-toolchain/include/c++/*/unwind.h | 531 rm -v "${LLVM_BUILD_DIR}"/android-toolchain/include/c++/*/unwind.h |
| 525 | 532 |
| 526 # Build ASan runtime for Android in a separate build tree. | 533 # Build ASan runtime for Android in a separate build tree. |
| 527 mkdir -p ${LLVM_BUILD_DIR}/android | 534 mkdir -p ${LLVM_BUILD_DIR}/android |
| 528 pushd ${LLVM_BUILD_DIR}/android | 535 pushd ${LLVM_BUILD_DIR}/android |
| 529 MACOSX_DEPLOYMENT_TARGET=10.6 cmake -GNinja \ | 536 rm -fv CMakeCache.txt |
| 537 MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ |
| 530 -DCMAKE_BUILD_TYPE=Release \ | 538 -DCMAKE_BUILD_TYPE=Release \ |
| 531 -DLLVM_ENABLE_ASSERTIONS=ON \ | 539 -DLLVM_ENABLE_ASSERTIONS=ON \ |
| 532 -DLLVM_ENABLE_THREADS=OFF \ | 540 -DLLVM_ENABLE_THREADS=OFF \ |
| 533 -DCMAKE_C_COMPILER=${PWD}/../bin/clang \ | 541 -DCMAKE_C_COMPILER=${PWD}/../bin/clang \ |
| 534 -DCMAKE_CXX_COMPILER=${PWD}/../bin/clang++ \ | 542 -DCMAKE_CXX_COMPILER=${PWD}/../bin/clang++ \ |
| 535 -DLLVM_CONFIG_PATH=${PWD}/../bin/llvm-config \ | 543 -DLLVM_CONFIG_PATH=${PWD}/../bin/llvm-config \ |
| 536 -DCMAKE_C_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../androi
d-toolchain/sysroot -B${PWD}/../android-toolchain" \ | 544 -DCMAKE_C_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../androi
d-toolchain/sysroot -B${PWD}/../android-toolchain" \ |
| 537 -DCMAKE_CXX_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../andr
oid-toolchain/sysroot -B${PWD}/../android-toolchain" \ | 545 -DCMAKE_CXX_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../andr
oid-toolchain/sysroot -B${PWD}/../android-toolchain" \ |
| 538 -DANDROID=1 \ | 546 -DANDROID=1 \ |
| 539 "${ABS_COMPILER_RT_DIR}" | 547 "${ABS_COMPILER_RT_DIR}" |
| 540 ninja clang_rt.asan-arm-android | 548 ninja clang_rt.asan-arm-android |
| 541 | 549 |
| 542 # And copy it into the main build tree. | 550 # And copy it into the main build tree. |
| 543 cp "$(find -name libclang_rt.asan-arm-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/
lib/linux/" | 551 cp "$(find -name libclang_rt.asan-arm-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/
lib/linux/" |
| 544 popd | 552 popd |
| 545 fi | 553 fi |
| 546 | 554 |
| 547 # Build Chrome-specific clang tools. Paths in this list should be relative to | 555 # Build Chrome-specific clang tools. Paths in this list should be relative to |
| 548 # tools/clang. | 556 # tools/clang. |
| 549 TOOL_SRC_DIR="${PWD}/${THIS_DIR}/../" | 557 TOOL_SRC_DIR="${PWD}/${THIS_DIR}/../" |
| 550 TOOL_BUILD_DIR="${ABS_LLVM_BUILD_DIR}/tools/clang/tools/chrome-extras" | 558 TOOL_BUILD_DIR="${ABS_LLVM_BUILD_DIR}/tools/clang/tools/chrome-extras" |
| 551 | 559 |
| 552 rm -rf "${TOOL_BUILD_DIR}" | 560 rm -rf "${TOOL_BUILD_DIR}" |
| 553 mkdir -p "${TOOL_BUILD_DIR}" | 561 mkdir -p "${TOOL_BUILD_DIR}" |
| 554 pushd "${TOOL_BUILD_DIR}" | 562 pushd "${TOOL_BUILD_DIR}" |
| 555 MACOSX_DEPLOYMENT_TARGET=10.6 cmake -GNinja \ | 563 rm -fv CMakeCache.txt |
| 564 MACOSX_DEPLOYMENT_TARGET=${deployment_target} cmake -GNinja \ |
| 556 -DLLVM_BUILD_DIR="${ABS_LLVM_BUILD_DIR}" \ | 565 -DLLVM_BUILD_DIR="${ABS_LLVM_BUILD_DIR}" \ |
| 557 -DLLVM_SRC_DIR="${ABS_LLVM_DIR}" \ | 566 -DLLVM_SRC_DIR="${ABS_LLVM_DIR}" \ |
| 558 -DCMAKE_C_COMPILER="${CC}" \ | 567 -DCMAKE_C_COMPILER="${CC}" \ |
| 559 -DCMAKE_CXX_COMPILER="${CXX}" \ | 568 -DCMAKE_CXX_COMPILER="${CXX}" \ |
| 560 -DCMAKE_C_FLAGS="${CFLAGS}" \ | 569 -DCMAKE_C_FLAGS="${CFLAGS}" \ |
| 561 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ | 570 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ |
| 562 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ | 571 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ |
| 563 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ | 572 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ |
| 564 -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}" \ | 573 -DCMAKE_MODULE_LINKER_FLAGS="${LDFLAGS}" \ |
| 565 -DCMAKE_INSTALL_PREFIX="${ABS_LLVM_BUILD_DIR}" \ | 574 -DCMAKE_INSTALL_PREFIX="${ABS_LLVM_BUILD_DIR}" \ |
| 566 -DCHROMIUM_TOOLS="${chrome_tools}" \ | 575 -DCHROMIUM_TOOLS="${chrome_tools}" \ |
| 567 "${TOOL_SRC_DIR}" | 576 "${TOOL_SRC_DIR}" |
| 568 popd | 577 popd |
| 569 ninja -C "${TOOL_BUILD_DIR}" install | 578 ninja -C "${TOOL_BUILD_DIR}" install |
| 570 | 579 |
| 571 if [[ -n "$run_tests" ]]; then | 580 if [[ -n "$run_tests" ]]; then |
| 572 # Run Chrome tool tests. | 581 # Run Chrome tool tests. |
| 573 ninja -C "${TOOL_BUILD_DIR}" check-all | 582 ninja -C "${TOOL_BUILD_DIR}" check-all |
| 574 # Run the LLVM and Clang tests. | 583 # Run the LLVM and Clang tests. |
| 575 ninja -C "${LLVM_BUILD_DIR}" check-all | 584 ninja -C "${LLVM_BUILD_DIR}" check-all |
| 576 fi | 585 fi |
| 577 | 586 |
| 578 # After everything is done, log success for this revision. | 587 # After everything is done, log success for this revision. |
| 579 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" | 588 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" |
| OLD | NEW |