diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/clang/scripts/package.sh | 54 | ||||
-rwxr-xr-x | tools/clang/scripts/update.sh | 30 |
2 files changed, 83 insertions, 1 deletions
diff --git a/tools/clang/scripts/package.sh b/tools/clang/scripts/package.sh new file mode 100755 index 0000000..fa0a575 --- /dev/null +++ b/tools/clang/scripts/package.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# Copyright (c) 2011 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This script will check out llvm and clang, and then package the results up +# to a tgz file. + +THIS_DIR="$(dirname "${0}")" +LLVM_BUILD_DIR="${THIS_DIR}/../../../third_party/llvm-build" +LLVM_BIN_DIR="${LLVM_BUILD_DIR}/Release+Asserts/bin" +LLVM_LIB_DIR="${LLVM_BUILD_DIR}/Release+Asserts/lib" + +set -ex + +# Do a clobber build. +rm -rf "${LLVM_BUILD_DIR}" +"${THIS_DIR}"/update.sh + +R=$("${LLVM_BIN_DIR}/clang" --version | \ + sed -ne 's/clang version .*(trunk \([0-9]*\))/\1/p') + +PDIR=clang-$R +rm -rf $PDIR +mkdir $PDIR +mkdir $PDIR/bin +mkdir $PDIR/lib + +# Copy clang into pdir, symlink clang++ to it. +cp "${LLVM_BIN_DIR}/clang" $PDIR/bin/ +(cd $PDIR/bin && ln -sf clang clang++ && cd -) + +# Copy plugins. Some of the dylibs are pretty big, so copy only the ones we +# care about. +if [ "$(uname -s)" = "Darwin" ]; then + cp "${LLVM_LIB_DIR}/libFindBadConstructs.dylib" $PDIR/lib +else + cp "${LLVM_LIB_DIR}/libFindBadConstructs.so" $PDIR/lib +fi + +# Copy built-in headers (lib/clang/3.0/include). +cp -R "${LLVM_LIB_DIR}/clang" $PDIR/lib + +tar zcf $PDIR.tgz -C $PDIR bin lib + +if [ "$(uname -s)" = "Darwin" ]; then + PLATFORM=Mac +else + PLATFORM=Linux_x64 +fi + +echo To upload, run: +echo gsutil cp -a public-read $PDIR.tgz \ + gs://chromium-browser-clang/$PLATFORM/$PDIR.tgz diff --git a/tools/clang/scripts/update.sh b/tools/clang/scripts/update.sh index 352eff1..27abeab 100755 --- a/tools/clang/scripts/update.sh +++ b/tools/clang/scripts/update.sh @@ -34,11 +34,37 @@ fi # To always force a new build if someone interrupts their build half way. rm -f "${STAMP_FILE}" +# Check if there's a prebuilt binary and if so just fetch that. That's faster, +# and goma relies on having matching binary hashes on client and server too. +CDS_URL=http://commondatastorage.googleapis.com/chromium-browser-clang +CDS_FILE="clang-${CLANG_REVISION}.tgz" +echo Trying to download prebuilt clang +if [ "$(uname -s)" = "Linux" ]; then + wget "${CDS_URL}/Linux_x64/${CDS_FILE}" || rm -f "${CDS_FILE}" +elif [ "$(uname -s)" = "Darwin" ]; then + curl -L --fail -O "${CDS_URL}/Mac/${CDS_FILE}" || rm -f "${CDS_FILE}" +fi +if [ -f "${CDS_FILE}" ]; then + rm -rf "${LLVM_BUILD_DIR}/Release+Asserts" + mkdir -p "${LLVM_BUILD_DIR}/Release+Asserts" + tar -xzf "${CDS_FILE}" -C "${LLVM_BUILD_DIR}/Release+Asserts" + echo clang "${CLANG_REVISION}" unpacked + echo "${CLANG_REVISION}" > "${STAMP_FILE}" + exit 0 +else + echo Did not find prebuilt clang at r"${CLANG_REVISION}", building +fi + if grep -q 'src/third_party/llvm":' "${DEPS_FILE}"; then echo LLVM pulled in through DEPS, skipping LLVM update step else echo Getting LLVM r"${CLANG_REVISION}" in "${LLVM_DIR}" - svn co --force "${LLVM_REPO_URL}/llvm/trunk@${CLANG_REVISION}" "${LLVM_DIR}" + if ! svn co --force "${LLVM_REPO_URL}/llvm/trunk@${CLANG_REVISION}" \ + "${LLVM_DIR}"; then + echo Checkout failed, retrying + rm -rf "${LLVM_DIR}" + svn co --force "${LLVM_REPO_URL}/llvm/trunk@${CLANG_REVISION}" "${LLVM_DIR}" + fi fi if grep -q 'src/third_party/llvm/tools/clang":' "${DEPS_FILE}"; then @@ -59,6 +85,8 @@ cd "${LLVM_BUILD_DIR}" if [ ! -f ./config.status ]; then ../llvm/configure \ --enable-optimized \ + --disable-threads \ + --disable-pthreads \ --without-llvmgcc \ --without-llvmgxx fi |