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=214024 |
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" |
16 COMPILER_RT_BUILD_DIR="${LLVM_DIR}/../llvm-build/compiler-rt" | |
17 LLVM_BOOTSTRAP_DIR="${LLVM_DIR}/../llvm-bootstrap" | 16 LLVM_BOOTSTRAP_DIR="${LLVM_DIR}/../llvm-bootstrap" |
18 LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install" | 17 LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install" |
19 CLANG_DIR="${LLVM_DIR}/tools/clang" | 18 CLANG_DIR="${LLVM_DIR}/tools/clang" |
20 CLANG_TOOLS_EXTRA_DIR="${CLANG_DIR}/tools/extra" | 19 CLANG_TOOLS_EXTRA_DIR="${CLANG_DIR}/tools/extra" |
21 COMPILER_RT_DIR="${LLVM_DIR}/compiler-rt" | 20 COMPILER_RT_DIR="${LLVM_DIR}/projects/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="${LLVM_DIR}/../android_tools/ndk" |
25 STAMP_FILE="${LLVM_DIR}/../llvm-build/cr_build_revision" | 24 STAMP_FILE="${LLVM_BUILD_DIR}/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}" | |
30 ABS_LLVM_BUILD_DIR="${PWD}/${LLVM_BUILD_DIR}" | |
31 ABS_COMPILER_RT_DIR="${PWD}/${COMPILER_RT_DIR}" | |
32 | 28 |
33 | 29 |
34 # Use both the clang revision and the plugin revisions to test for updates. | 30 # Use both the clang revision and the plugin revisions to test for updates. |
35 BLINKGCPLUGIN_REVISION=\ | 31 BLINKGCPLUGIN_REVISION=\ |
36 $(grep 'set(LIBRARYNAME' "$THIS_DIR"/../blink_gc_plugin/CMakeLists.txt \ | 32 $(grep LIBRARYNAME "$THIS_DIR"/../blink_gc_plugin/Makefile \ |
37 | cut -d ' ' -f 2 | tr -cd '[0-9]') | 33 | cut -d '_' -f 2) |
38 CLANG_AND_PLUGINS_REVISION="${CLANG_REVISION}-${BLINKGCPLUGIN_REVISION}" | 34 CLANG_AND_PLUGINS_REVISION="${CLANG_REVISION}-${BLINKGCPLUGIN_REVISION}" |
39 | 35 |
40 # ${A:-a} returns $A if it's set, a else. | 36 # ${A:-a} returns $A if it's set, a else. |
41 LLVM_REPO_URL=${LLVM_URL:-https://llvm.org/svn/llvm-project} | 37 LLVM_REPO_URL=${LLVM_URL:-https://llvm.org/svn/llvm-project} |
42 | 38 |
43 if [[ -z "$GYP_DEFINES" ]]; then | 39 if [[ -z "$GYP_DEFINES" ]]; then |
44 GYP_DEFINES= | 40 GYP_DEFINES= |
45 fi | 41 fi |
46 if [[ -z "$GYP_GENERATORS" ]]; then | 42 if [[ -z "$GYP_GENERATORS" ]]; then |
47 GYP_GENERATORS= | 43 GYP_GENERATORS= |
(...skipping 10 matching lines...) Expand all Loading... |
58 force_local_build= | 54 force_local_build= |
59 run_tests= | 55 run_tests= |
60 bootstrap= | 56 bootstrap= |
61 with_android=yes | 57 with_android=yes |
62 chrome_tools="plugins blink_gc_plugin" | 58 chrome_tools="plugins blink_gc_plugin" |
63 gcc_toolchain= | 59 gcc_toolchain= |
64 | 60 |
65 if [[ "${OS}" = "Darwin" ]]; then | 61 if [[ "${OS}" = "Darwin" ]]; then |
66 with_android= | 62 with_android= |
67 fi | 63 fi |
| 64 if [ "${OS}" = "FreeBSD" ]; then |
| 65 MAKE=gmake |
| 66 else |
| 67 MAKE=make |
| 68 fi |
68 | 69 |
69 while [[ $# > 0 ]]; do | 70 while [[ $# > 0 ]]; do |
70 case $1 in | 71 case $1 in |
71 --bootstrap) | 72 --bootstrap) |
72 bootstrap=yes | 73 bootstrap=yes |
73 ;; | 74 ;; |
74 --if-needed) | 75 --if-needed) |
75 if_needed=yes | 76 if_needed=yes |
76 ;; | 77 ;; |
77 --force-local-build) | 78 --force-local-build) |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 if which curl > /dev/null; then | 191 if which curl > /dev/null; then |
191 curl -L --fail "${CDS_FULL_URL}" -o "${CDS_OUTPUT}" || \ | 192 curl -L --fail "${CDS_FULL_URL}" -o "${CDS_OUTPUT}" || \ |
192 rm -rf "${CDS_OUT_DIR}" | 193 rm -rf "${CDS_OUT_DIR}" |
193 elif which wget > /dev/null; then | 194 elif which wget > /dev/null; then |
194 wget "${CDS_FULL_URL}" -O "${CDS_OUTPUT}" || rm -rf "${CDS_OUT_DIR}" | 195 wget "${CDS_FULL_URL}" -O "${CDS_OUTPUT}" || rm -rf "${CDS_OUT_DIR}" |
195 else | 196 else |
196 echo "Neither curl nor wget found. Please install one of these." | 197 echo "Neither curl nor wget found. Please install one of these." |
197 exit 1 | 198 exit 1 |
198 fi | 199 fi |
199 if [ -f "${CDS_OUTPUT}" ]; then | 200 if [ -f "${CDS_OUTPUT}" ]; then |
200 rm -rf "${LLVM_BUILD_DIR}" | 201 rm -rf "${LLVM_BUILD_DIR}/Release+Asserts" |
201 mkdir -p "${LLVM_BUILD_DIR}" | 202 mkdir -p "${LLVM_BUILD_DIR}/Release+Asserts" |
202 tar -xzf "${CDS_OUTPUT}" -C "${LLVM_BUILD_DIR}" | 203 tar -xzf "${CDS_OUTPUT}" -C "${LLVM_BUILD_DIR}/Release+Asserts" |
203 echo clang "${CLANG_REVISION}" unpacked | 204 echo clang "${CLANG_REVISION}" unpacked |
204 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" | 205 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" |
205 rm -rf "${CDS_OUT_DIR}" | 206 rm -rf "${CDS_OUT_DIR}" |
206 exit 0 | 207 exit 0 |
207 else | 208 else |
208 echo Did not find prebuilt clang at r"${CLANG_REVISION}", building | 209 echo Did not find prebuilt clang at r"${CLANG_REVISION}", building |
209 fi | 210 fi |
210 fi | 211 fi |
211 | 212 |
212 if [[ -n "${with_android}" ]] && ! [[ -d "${ANDROID_NDK_DIR}" ]]; then | 213 if [[ -n "${with_android}" ]] && ! [[ -d "${ANDROID_NDK_DIR}" ]]; then |
213 echo "Android NDK not found at ${ANDROID_NDK_DIR}" | 214 echo "Android NDK not found at ${ANDROID_NDK_DIR}" |
214 echo "The Android NDK is needed to build a Clang whose -fsanitize=address" | 215 echo "The Android NDK is needed to build a Clang whose -fsanitize=address" |
215 echo "works on Android. See " | 216 echo "works on Android. See " |
216 echo "http://code.google.com/p/chromium/wiki/AndroidBuildInstructions for how" | 217 echo "http://code.google.com/p/chromium/wiki/AndroidBuildInstructions for how" |
217 echo "to install the NDK, or pass --without-android." | 218 echo "to install the NDK, or pass --without-android." |
218 exit 1 | 219 exit 1 |
219 fi | 220 fi |
220 | 221 |
221 # Check that cmake and ninja are available. | |
222 if ! which cmake > /dev/null; then | |
223 echo "CMake needed to build clang; please install" | |
224 exit 1 | |
225 fi | |
226 if ! which ninja > /dev/null; then | |
227 echo "ninja needed to build clang, please install" | |
228 exit 1 | |
229 fi | |
230 | |
231 echo Getting LLVM r"${CLANG_REVISION}" in "${LLVM_DIR}" | 222 echo Getting LLVM r"${CLANG_REVISION}" in "${LLVM_DIR}" |
232 if ! svn co --force "${LLVM_REPO_URL}/llvm/trunk@${CLANG_REVISION}" \ | 223 if ! svn co --force "${LLVM_REPO_URL}/llvm/trunk@${CLANG_REVISION}" \ |
233 "${LLVM_DIR}"; then | 224 "${LLVM_DIR}"; then |
234 echo Checkout failed, retrying | 225 echo Checkout failed, retrying |
235 rm -rf "${LLVM_DIR}" | 226 rm -rf "${LLVM_DIR}" |
236 svn co --force "${LLVM_REPO_URL}/llvm/trunk@${CLANG_REVISION}" "${LLVM_DIR}" | 227 svn co --force "${LLVM_REPO_URL}/llvm/trunk@${CLANG_REVISION}" "${LLVM_DIR}" |
237 fi | 228 fi |
238 | 229 |
239 echo Getting clang r"${CLANG_REVISION}" in "${CLANG_DIR}" | 230 echo Getting clang r"${CLANG_REVISION}" in "${CLANG_DIR}" |
240 svn co --force "${LLVM_REPO_URL}/cfe/trunk@${CLANG_REVISION}" "${CLANG_DIR}" | 231 svn co --force "${LLVM_REPO_URL}/cfe/trunk@${CLANG_REVISION}" "${CLANG_DIR}" |
241 | 232 |
242 # We have moved from building compiler-rt in the LLVM tree, to a separate | |
243 # directory. Nuke any previous checkout to avoid building it. | |
244 rm -rf "${LLVM_DIR}/projects/compiler-rt" | |
245 | |
246 echo Getting compiler-rt r"${CLANG_REVISION}" in "${COMPILER_RT_DIR}" | 233 echo Getting compiler-rt r"${CLANG_REVISION}" in "${COMPILER_RT_DIR}" |
247 svn co --force "${LLVM_REPO_URL}/compiler-rt/trunk@${CLANG_REVISION}" \ | 234 svn co --force "${LLVM_REPO_URL}/compiler-rt/trunk@${CLANG_REVISION}" \ |
248 "${COMPILER_RT_DIR}" | 235 "${COMPILER_RT_DIR}" |
249 | 236 |
250 # clang needs a libc++ checkout, else -stdlib=libc++ won't find includes | 237 # clang needs a libc++ checkout, else -stdlib=libc++ won't find includes |
251 # (i.e. this is needed for bootstrap builds). | 238 # (i.e. this is needed for bootstrap builds). |
252 if [ "${OS}" = "Darwin" ]; then | 239 if [ "${OS}" = "Darwin" ]; then |
253 echo Getting libc++ r"${CLANG_REVISION}" in "${LIBCXX_DIR}" | 240 echo Getting libc++ r"${CLANG_REVISION}" in "${LIBCXX_DIR}" |
254 svn co --force "${LLVM_REPO_URL}/libcxx/trunk@${CLANG_REVISION}" \ | 241 svn co --force "${LLVM_REPO_URL}/libcxx/trunk@${CLANG_REVISION}" \ |
255 "${LIBCXX_DIR}" | 242 "${LIBCXX_DIR}" |
256 fi | 243 fi |
257 | 244 |
258 # While we're bundling our own libc++ on OS X, we need to compile libc++abi | 245 # While we're bundling our own libc++ on OS X, we need to compile libc++abi |
259 # into it too (since OS X 10.6 doesn't have libc++abi.dylib either). | 246 # into it too (since OS X 10.6 doesn't have libc++abi.dylib either). |
260 if [ "${OS}" = "Darwin" ]; then | 247 if [ "${OS}" = "Darwin" ]; then |
261 echo Getting libc++abi r"${CLANG_REVISION}" in "${LIBCXXABI_DIR}" | 248 echo Getting libc++abi r"${CLANG_REVISION}" in "${LIBCXXABI_DIR}" |
262 svn co --force "${LLVM_REPO_URL}/libcxxabi/trunk@${CLANG_REVISION}" \ | 249 svn co --force "${LLVM_REPO_URL}/libcxxabi/trunk@${CLANG_REVISION}" \ |
263 "${LIBCXXABI_DIR}" | 250 "${LIBCXXABI_DIR}" |
264 fi | 251 fi |
265 | 252 |
266 # Apply patch for tests failing with --disable-pthreads (llvm.org/PR11974) | 253 # Apply patch for test failing with --disable-pthreads (llvm.org/PR11974) |
267 pushd "${CLANG_DIR}" | 254 pushd "${CLANG_DIR}" |
268 svn revert test/Index/crash-recovery-modules.m | 255 svn revert test/Index/crash-recovery-modules.m |
269 cat << 'EOF' | | 256 cat << 'EOF' | |
270 --- third_party/llvm/tools/clang/test/Index/crash-recovery-modules.m (revisio
n 202554) | 257 --- third_party/llvm/tools/clang/test/Index/crash-recovery-modules.m (revisio
n 202554) |
271 +++ third_party/llvm/tools/clang/test/Index/crash-recovery-modules.m (working
copy) | 258 +++ third_party/llvm/tools/clang/test/Index/crash-recovery-modules.m (working
copy) |
272 @@ -12,6 +12,8 @@ | 259 @@ -12,6 +12,8 @@ |
273 | 260 |
274 // REQUIRES: crash-recovery | 261 // REQUIRES: crash-recovery |
275 // REQUIRES: shell | 262 // REQUIRES: shell |
276 +// XFAIL: * | 263 +// XFAIL: * |
277 +// (PR11974) | 264 +// (PR11974) |
278 | 265 |
279 @import Crash; | 266 @import Crash; |
280 EOF | 267 EOF |
281 patch -p4 | 268 patch -p4 |
282 popd | 269 popd |
283 | 270 |
284 pushd "${CLANG_DIR}" | |
285 svn revert unittests/libclang/LibclangTest.cpp | |
286 cat << 'EOF' | | |
287 --- unittests/libclang/LibclangTest.cpp (revision 215949) | |
288 +++ unittests/libclang/LibclangTest.cpp (working copy) | |
289 @@ -431,7 +431,7 @@ | |
290 EXPECT_EQ(0U, clang_getNumDiagnostics(ClangTU)); | |
291 } | |
292 | |
293 -TEST_F(LibclangReparseTest, ReparseWithModule) { | |
294 +TEST_F(LibclangReparseTest, DISABLED_ReparseWithModule) { | |
295 const char *HeaderTop = "#ifndef H\n#define H\nstruct Foo { int bar;"; | |
296 const char *HeaderBottom = "\n};\n#endif\n"; | |
297 const char *MFile = "#include \"HeaderFile.h\"\nint main() {" | |
298 EOF | |
299 patch -p0 | |
300 popd | |
301 | |
302 # Apply r216684 to fix ASan array cookie instrumentation problem. | |
303 # (See https://code.google.com/p/chromium/issues/detail?id=400849#c17) | |
304 pushd "${COMPILER_RT_DIR}" | |
305 svn revert lib/asan/asan_rtl.cc | |
306 cat << 'EOF' | | |
307 --- a/lib/asan/asan_rtl.cc | |
308 +++ b/lib/asan/asan_rtl.cc | |
309 @@ -269,7 +269,7 @@ void InitializeFlags(Flags *f, const char *env) { | |
310 f->allow_reexec = true; | |
311 f->print_full_thread_history = true; | |
312 f->poison_heap = true; | |
313 - f->poison_array_cookie = true; | |
314 + f->poison_array_cookie = false; | |
315 f->poison_partial = true; | |
316 // Turn off alloc/dealloc mismatch checker on Mac and Windows for now. | |
317 // https://code.google.com/p/address-sanitizer/issues/detail?id=131 | |
318 diff --git a/test/asan/TestCases/Linux/new_array_cookie_test.cc b/test/asan/Test
Cases/Linux/new_array_cookie_test.cc | |
319 index 339120b..49545f0 100644 | |
320 --- a/test/asan/TestCases/Linux/new_array_cookie_test.cc | |
321 +++ b/test/asan/TestCases/Linux/new_array_cookie_test.cc | |
322 @@ -1,6 +1,6 @@ | |
323 // REQUIRES: asan-64-bits | |
324 -// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s | |
325 -// RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s | |
326 +// RUN: %clangxx_asan -O3 %s -o %t | |
327 +// RUN %run %t | |
328 // RUN: ASAN_OPTIONS=poison_array_cookie=1 not %run %t 2>&1 | FileCheck %s | |
329 // RUN: ASAN_OPTIONS=poison_array_cookie=0 %run %t | |
330 #include <stdio.h> | |
331 EOF | |
332 patch -p1 | |
333 popd | |
334 | |
335 # Echo all commands. | 271 # Echo all commands. |
336 set -x | 272 set -x |
337 | 273 |
338 # Set default values for CC and CXX if they're not set in the environment. | 274 NUM_JOBS=3 |
339 CC=${CC:-cc} | 275 if [[ "${OS}" = "Linux" ]]; then |
340 CXX=${CXX:-c++} | 276 NUM_JOBS="$(grep -c "^processor" /proc/cpuinfo)" |
| 277 elif [ "${OS}" = "Darwin" -o "${OS}" = "FreeBSD" ]; then |
| 278 NUM_JOBS="$(sysctl -n hw.ncpu)" |
| 279 fi |
341 | 280 |
342 if [[ -n "${gcc_toolchain}" ]]; then | 281 if [[ -n "${gcc_toolchain}" ]]; then |
343 # Use the specified gcc installation for building. | 282 # Use the specified gcc installation for building. |
344 CC="$gcc_toolchain/bin/gcc" | 283 export CC="$gcc_toolchain/bin/gcc" |
345 CXX="$gcc_toolchain/bin/g++" | 284 export CXX="$gcc_toolchain/bin/g++" |
346 # Set LD_LIBRARY_PATH to make auxiliary targets (tablegen, bootstrap compiler, | 285 # Set LD_LIBRARY_PATH to make auxiliary targets (tablegen, bootstrap compiler, |
347 # etc.) find the .so. | 286 # etc.) find the .so. |
348 export LD_LIBRARY_PATH="$(dirname $(${CXX} -print-file-name=libstdc++.so.6))" | 287 export LD_LIBRARY_PATH="$(dirname $(${CXX} -print-file-name=libstdc++.so.6))" |
349 fi | 288 fi |
350 | 289 |
351 CFLAGS="" | 290 export CFLAGS="" |
352 CXXFLAGS="" | 291 export CXXFLAGS="" |
353 LDFLAGS="" | |
354 # LLVM uses C++11 starting in llvm 3.5. On Linux, this means libstdc++4.7+ is | 292 # 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++ | 293 # 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 | 294 # 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. | 295 # OS X versions as old as 10.7. |
358 # TODO(thakis): Some bots are still on 10.6, so for now bundle libc++.dylib. | 296 # 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 | 297 # 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. | 298 # change all MACOSX_DEPLOYMENT_TARGET values to 10.7. |
361 if [ "${OS}" = "Darwin" ]; then | 299 if [ "${OS}" = "Darwin" ]; then |
362 # When building on 10.9, /usr/include usually doesn't exist, and while | 300 # 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. | 301 # Xcode's clang automatically sets a sysroot, self-built clangs don't. |
364 CFLAGS="-isysroot $(xcrun --show-sdk-path)" | 302 export CFLAGS="-isysroot $(xcrun --show-sdk-path)" |
365 CPPFLAGS="${CFLAGS}" | 303 export CPPFLAGS="${CFLAGS}" |
366 CXXFLAGS="-stdlib=libc++ -nostdinc++ -I${ABS_LIBCXX_DIR}/include ${CFLAGS}" | 304 export CXXFLAGS="-stdlib=libc++ -nostdinc++ -I${ABS_LIBCXX_DIR}/include ${CFLA
GS}" |
367 fi | 305 fi |
368 | 306 |
369 # Build bootstrap clang if requested. | 307 # Build bootstrap clang if requested. |
370 if [[ -n "${bootstrap}" ]]; then | 308 if [[ -n "${bootstrap}" ]]; then |
371 ABS_INSTALL_DIR="${PWD}/${LLVM_BOOTSTRAP_INSTALL_DIR}" | 309 ABS_INSTALL_DIR="${PWD}/${LLVM_BOOTSTRAP_INSTALL_DIR}" |
372 echo "Building bootstrap compiler" | 310 echo "Building bootstrap compiler" |
373 mkdir -p "${LLVM_BOOTSTRAP_DIR}" | 311 mkdir -p "${LLVM_BOOTSTRAP_DIR}" |
374 pushd "${LLVM_BOOTSTRAP_DIR}" | 312 pushd "${LLVM_BOOTSTRAP_DIR}" |
375 | 313 if [[ ! -f ./config.status ]]; then |
376 cmake -GNinja \ | 314 # The bootstrap compiler only needs to be able to build the real compiler, |
377 -DCMAKE_BUILD_TYPE=Release \ | 315 # so it needs no cross-compiler output support. In general, the host |
378 -DLLVM_ENABLE_ASSERTIONS=ON \ | 316 # compiler should be as similar to the final compiler as possible, so do |
379 -DLLVM_TARGETS_TO_BUILD=host \ | 317 # keep --disable-threads & co. |
380 -DLLVM_ENABLE_THREADS=OFF \ | 318 ../llvm/configure \ |
381 -DCMAKE_INSTALL_PREFIX="${ABS_INSTALL_DIR}" \ | 319 --enable-optimized \ |
382 -DCMAKE_C_COMPILER="${CC}" \ | 320 --enable-targets=host-only \ |
383 -DCMAKE_CXX_COMPILER="${CXX}" \ | 321 --enable-libedit=no \ |
384 -DCMAKE_C_FLAGS="${CFLAGS}" \ | 322 --disable-threads \ |
385 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ | 323 --disable-pthreads \ |
386 ../llvm | 324 --without-llvmgcc \ |
387 | 325 --without-llvmgxx \ |
388 ninja | 326 --prefix="${ABS_INSTALL_DIR}" |
389 if [[ -n "${run_tests}" ]]; then | |
390 ninja check-all | |
391 fi | 327 fi |
392 | 328 |
393 ninja install | 329 ${MAKE} -j"${NUM_JOBS}" |
| 330 if [[ -n "${run_tests}" ]]; then |
| 331 ${MAKE} check-all |
| 332 fi |
| 333 |
| 334 ${MAKE} install |
394 if [[ -n "${gcc_toolchain}" ]]; then | 335 if [[ -n "${gcc_toolchain}" ]]; then |
395 # Copy that gcc's stdlibc++.so.6 to the build dir, so the bootstrap | 336 # Copy that gcc's stdlibc++.so.6 to the build dir, so the bootstrap |
396 # compiler can start. | 337 # compiler can start. |
397 cp -v "$(${CXX} -print-file-name=libstdc++.so.6)" \ | 338 cp -v "$(${CXX} -print-file-name=libstdc++.so.6)" \ |
398 "${ABS_INSTALL_DIR}/lib/" | 339 "${ABS_INSTALL_DIR}/lib/" |
399 fi | 340 fi |
400 | 341 |
401 popd | 342 popd |
402 CC="${ABS_INSTALL_DIR}/bin/clang" | 343 export CC="${ABS_INSTALL_DIR}/bin/clang" |
403 CXX="${ABS_INSTALL_DIR}/bin/clang++" | 344 export CXX="${ABS_INSTALL_DIR}/bin/clang++" |
404 | 345 |
405 if [[ -n "${gcc_toolchain}" ]]; then | 346 if [[ -n "${gcc_toolchain}" ]]; then |
406 # Tell the bootstrap compiler to use a specific gcc prefix to search | 347 # Tell the bootstrap compiler to use a specific gcc prefix to search |
407 # for standard library headers and shared object file. | 348 # for standard library headers and shared object file. |
408 CFLAGS="--gcc-toolchain=${gcc_toolchain}" | 349 export CFLAGS="--gcc-toolchain=${gcc_toolchain}" |
409 CXXFLAGS="--gcc-toolchain=${gcc_toolchain}" | 350 export CXXFLAGS="--gcc-toolchain=${gcc_toolchain}" |
410 fi | 351 fi |
411 | 352 |
412 echo "Building final compiler" | 353 echo "Building final compiler" |
413 fi | 354 fi |
414 | 355 |
415 # Build clang (in a separate directory). | 356 # Build clang (in a separate directory). |
416 # The clang bots have this path hardcoded in built/scripts/slave/compile.py, | 357 # The clang bots have this path hardcoded in built/scripts/slave/compile.py, |
417 # so if you change it you also need to change these links. | 358 # so if you change it you also need to change these links. |
418 mkdir -p "${LLVM_BUILD_DIR}" | 359 mkdir -p "${LLVM_BUILD_DIR}" |
419 pushd "${LLVM_BUILD_DIR}" | 360 pushd "${LLVM_BUILD_DIR}" |
(...skipping 17 matching lines...) Expand all Loading... |
437 | 378 |
438 pushd libcxxbuild | 379 pushd libcxxbuild |
439 ${CC:-cc} libcxx/*.o libcxxabi/*.o -o libc++.1.dylib -dynamiclib \ | 380 ${CC:-cc} libcxx/*.o libcxxabi/*.o -o libc++.1.dylib -dynamiclib \ |
440 -nodefaultlibs -current_version 1 -compatibility_version 1 \ | 381 -nodefaultlibs -current_version 1 -compatibility_version 1 \ |
441 -lSystem -install_name @executable_path/libc++.dylib \ | 382 -lSystem -install_name @executable_path/libc++.dylib \ |
442 -Wl,-unexported_symbols_list,${ABS_LIBCXX_DIR}/lib/libc++unexp.exp \ | 383 -Wl,-unexported_symbols_list,${ABS_LIBCXX_DIR}/lib/libc++unexp.exp \ |
443 -Wl,-force_symbols_not_weak_list,${ABS_LIBCXX_DIR}/lib/notweak.exp \ | 384 -Wl,-force_symbols_not_weak_list,${ABS_LIBCXX_DIR}/lib/notweak.exp \ |
444 -Wl,-force_symbols_weak_list,${ABS_LIBCXX_DIR}/lib/weak.exp | 385 -Wl,-force_symbols_weak_list,${ABS_LIBCXX_DIR}/lib/weak.exp |
445 ln -sf libc++.1.dylib libc++.dylib | 386 ln -sf libc++.1.dylib libc++.dylib |
446 popd | 387 popd |
447 LDFLAGS+="-stdlib=libc++ -L${PWD}/libcxxbuild" | 388 export LDFLAGS+="-stdlib=libc++ -L${PWD}/libcxxbuild" |
448 fi | 389 fi |
449 | 390 |
450 if [[ ! -f ./CMakeCache.txt ]]; then | 391 if [[ ! -f ./config.status ]]; then |
451 MACOSX_DEPLOYMENT_TARGET=10.6 cmake -GNinja \ | 392 ../llvm/configure \ |
452 -DCMAKE_BUILD_TYPE=Release \ | 393 --enable-optimized \ |
453 -DLLVM_ENABLE_ASSERTIONS=ON \ | 394 --enable-libedit=no \ |
454 -DLLVM_ENABLE_THREADS=OFF \ | 395 --disable-threads \ |
455 -DCMAKE_C_COMPILER="${CC}" \ | 396 --disable-pthreads \ |
456 -DCMAKE_CXX_COMPILER="${CXX}" \ | 397 --without-llvmgcc \ |
457 -DCMAKE_C_FLAGS="${CFLAGS}" \ | 398 --without-llvmgxx |
458 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ | |
459 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ | |
460 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ | |
461 "${ABS_LLVM_DIR}" | |
462 env | |
463 fi | 399 fi |
464 | 400 |
465 if [[ -n "${gcc_toolchain}" ]]; then | 401 if [[ -n "${gcc_toolchain}" ]]; then |
466 # Copy in the right stdlibc++.so.6 so clang can start. | 402 # Copy in the right stdlibc++.so.6 so clang can start. |
467 mkdir -p lib | 403 mkdir -p Release+Asserts/lib |
468 cp -v "$(${CXX} ${CXXFLAGS} -print-file-name=libstdc++.so.6)" lib/ | 404 cp -v "$(${CXX} ${CXXFLAGS} -print-file-name=libstdc++.so.6)" \ |
| 405 Release+Asserts/lib/ |
469 fi | 406 fi |
470 | 407 MACOSX_DEPLOYMENT_TARGET=10.5 ${MAKE} -j"${NUM_JOBS}" |
471 ninja | |
472 | |
473 STRIP_FLAGS= | 408 STRIP_FLAGS= |
474 if [ "${OS}" = "Darwin" ]; then | 409 if [ "${OS}" = "Darwin" ]; then |
475 # See http://crbug.com/256342 | 410 # See http://crbug.com/256342 |
476 STRIP_FLAGS=-x | 411 STRIP_FLAGS=-x |
477 | 412 |
478 cp libcxxbuild/libc++.1.dylib bin/ | 413 cp libcxxbuild/libc++.1.dylib Release+Asserts/bin |
479 fi | 414 fi |
480 strip ${STRIP_FLAGS} bin/clang | 415 strip ${STRIP_FLAGS} Release+Asserts/bin/clang |
481 popd | |
482 | |
483 # Build compiler-rt out-of-tree. | |
484 mkdir -p "${COMPILER_RT_BUILD_DIR}" | |
485 pushd "${COMPILER_RT_BUILD_DIR}" | |
486 | |
487 MACOSX_DEPLOYMENT_TARGET=10.6 cmake -GNinja \ | |
488 -DCMAKE_BUILD_TYPE=Release \ | |
489 -DLLVM_ENABLE_ASSERTIONS=ON \ | |
490 -DLLVM_ENABLE_THREADS=OFF \ | |
491 -DCMAKE_C_COMPILER="${CC}" \ | |
492 -DCMAKE_CXX_COMPILER="${CXX}" \ | |
493 -DLLVM_CONFIG_PATH="${ABS_LLVM_BUILD_DIR}/bin/llvm-config" \ | |
494 "${ABS_COMPILER_RT_DIR}" | |
495 | |
496 ninja | |
497 | |
498 # Copy selected output to the main tree. | |
499 # Darwin doesn't support cp --parents, so pipe through tar instead. | |
500 CLANG_VERSION=$("${ABS_LLVM_BUILD_DIR}/bin/clang" --version | \ | |
501 sed -ne 's/clang version \([0-9]\.[0-9]\.[0-9]\).*/\1/p') | |
502 ABS_LLVM_CLANG_LIB_DIR="${ABS_LLVM_BUILD_DIR}/lib/clang/${CLANG_VERSION}" | |
503 tar -c *blacklist.txt | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv | |
504 tar -c include/sanitizer | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv | |
505 if [[ "${OS}" = "Darwin" ]]; then | |
506 tar -c lib/darwin | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv | |
507 else | |
508 tar -c lib/linux | tar -C ${ABS_LLVM_CLANG_LIB_DIR} -xv | |
509 fi | |
510 | |
511 popd | 416 popd |
512 | 417 |
513 if [[ -n "${with_android}" ]]; then | 418 if [[ -n "${with_android}" ]]; then |
514 # Make a standalone Android toolchain. | 419 # Make a standalone Android toolchain. |
515 ${ANDROID_NDK_DIR}/build/tools/make-standalone-toolchain.sh \ | 420 ${ANDROID_NDK_DIR}/build/tools/make-standalone-toolchain.sh \ |
516 --platform=android-14 \ | 421 --platform=android-14 \ |
517 --install-dir="${LLVM_BUILD_DIR}/android-toolchain" \ | 422 --install-dir="${LLVM_BUILD_DIR}/android-toolchain" \ |
518 --system=linux-x86_64 \ | 423 --system=linux-x86_64 \ |
519 --stl=stlport | 424 --stl=stlport |
520 | 425 |
521 # Android NDK r9d copies a broken unwind.h into the toolchain, see | 426 # Android NDK r9d copies a broken unwind.h into the toolchain, see |
522 # http://crbug.com/357890 | 427 # http://crbug.com/357890 |
523 rm -v "${LLVM_BUILD_DIR}"/android-toolchain/include/c++/*/unwind.h | 428 rm -v "${LLVM_BUILD_DIR}"/android-toolchain/include/c++/*/unwind.h |
524 | 429 |
525 # Build ASan runtime for Android in a separate build tree. | 430 # Build ASan runtime for Android. |
526 mkdir -p ${LLVM_BUILD_DIR}/android | 431 # Note: LLVM_ANDROID_TOOLCHAIN_DIR is not relative to PWD, but to where we |
527 pushd ${LLVM_BUILD_DIR}/android | 432 # build the runtime, i.e. third_party/llvm/projects/compiler-rt. |
528 MACOSX_DEPLOYMENT_TARGET=10.6 cmake -GNinja \ | 433 pushd "${LLVM_BUILD_DIR}" |
529 -DCMAKE_BUILD_TYPE=Release \ | 434 ${MAKE} -C tools/clang/runtime/ \ |
530 -DLLVM_ENABLE_ASSERTIONS=ON \ | 435 LLVM_ANDROID_TOOLCHAIN_DIR="../../../llvm-build/android-toolchain" |
531 -DLLVM_ENABLE_THREADS=OFF \ | |
532 -DCMAKE_C_COMPILER=${PWD}/../bin/clang \ | |
533 -DCMAKE_CXX_COMPILER=${PWD}/../bin/clang++ \ | |
534 -DLLVM_CONFIG_PATH=${PWD}/../bin/llvm-config \ | |
535 -DCMAKE_C_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../androi
d-toolchain/sysroot -B${PWD}/../android-toolchain" \ | |
536 -DCMAKE_CXX_FLAGS="--target=arm-linux-androideabi --sysroot=${PWD}/../andr
oid-toolchain/sysroot -B${PWD}/../android-toolchain" \ | |
537 -DANDROID=1 \ | |
538 "${ABS_COMPILER_RT_DIR}" | |
539 ninja clang_rt.asan-arm-android | |
540 | |
541 # And copy it into the main build tree. | |
542 cp "$(find -name libclang_rt.asan-arm-android.so)" "${ABS_LLVM_CLANG_LIB_DIR}/
lib/linux/" | |
543 popd | 436 popd |
544 fi | 437 fi |
545 | 438 |
546 # Build Chrome-specific clang tools. Paths in this list should be relative to | 439 # Build Chrome-specific clang tools. Paths in this list should be relative to |
547 # tools/clang. | 440 # tools/clang. |
548 # For each tool directory, copy it into the clang tree and use clang's build | 441 # For each tool directory, copy it into the clang tree and use clang's build |
549 # system to compile it. | 442 # system to compile it. |
550 for CHROME_TOOL_DIR in ${chrome_tools}; do | 443 for CHROME_TOOL_DIR in ${chrome_tools}; do |
551 TOOL_SRC_DIR="${PWD}/${THIS_DIR}/../${CHROME_TOOL_DIR}" | 444 TOOL_SRC_DIR="${THIS_DIR}/../${CHROME_TOOL_DIR}" |
552 TOOL_BUILD_DIR="${ABS_LLVM_BUILD_DIR}/tools/clang/tools/chrome-${CHROME_TOOL_D
IR}" | 445 TOOL_DST_DIR="${LLVM_DIR}/tools/clang/tools/chrome-${CHROME_TOOL_DIR}" |
553 | 446 TOOL_BUILD_DIR="${LLVM_BUILD_DIR}/tools/clang/tools/chrome-${CHROME_TOOL_DIR}" |
| 447 rm -rf "${TOOL_DST_DIR}" |
| 448 cp -R "${TOOL_SRC_DIR}" "${TOOL_DST_DIR}" |
554 rm -rf "${TOOL_BUILD_DIR}" | 449 rm -rf "${TOOL_BUILD_DIR}" |
555 mkdir -p "${TOOL_BUILD_DIR}" | 450 mkdir -p "${TOOL_BUILD_DIR}" |
556 pushd "${TOOL_BUILD_DIR}" | 451 cp "${TOOL_SRC_DIR}/Makefile" "${TOOL_BUILD_DIR}" |
557 MACOSX_DEPLOYMENT_TARGET=10.6 cmake -GNinja \ | 452 MACOSX_DEPLOYMENT_TARGET=10.5 ${MAKE} -j"${NUM_JOBS}" -C "${TOOL_BUILD_DIR}" |
558 -DLLVM_BUILD_DIR="${ABS_LLVM_BUILD_DIR}" \ | |
559 -DLLVM_SRC_DIR="${ABS_LLVM_DIR}" \ | |
560 -DCMAKE_C_COMPILER="${CC}" \ | |
561 -DCMAKE_CXX_COMPILER="${CXX}" \ | |
562 -DCMAKE_C_FLAGS="${CFLAGS}" \ | |
563 -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ | |
564 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \ | |
565 -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \ | |
566 "${TOOL_SRC_DIR}" | |
567 ninja | |
568 cp -v "${TOOL_BUILD_DIR}/lib"/* "${ABS_LLVM_BUILD_DIR}/lib/" | |
569 popd | |
570 done | 453 done |
571 | 454 |
572 if [[ -n "$run_tests" ]]; then | 455 if [[ -n "$run_tests" ]]; then |
573 # Run the tests for each chrome tool. | 456 # Run a few tests. |
574 for CHROME_TOOL_DIR in ${chrome_tools}; do | 457 for CHROME_TOOL_DIR in ${chrome_tools}; do |
575 TOOL_SRC_DIR="${THIS_DIR}/../${CHROME_TOOL_DIR}" | 458 TOOL_SRC_DIR="${THIS_DIR}/../${CHROME_TOOL_DIR}" |
576 TOOL_BUILD_DIR="${ABS_LLVM_BUILD_DIR}/tools/clang/tools/chrome-${CHROME_TOOL
_DIR}" | |
577 if [[ -f "${TOOL_SRC_DIR}/tests/test.sh" ]]; then | 459 if [[ -f "${TOOL_SRC_DIR}/tests/test.sh" ]]; then |
578 "${TOOL_SRC_DIR}/tests/test.sh" "${ABS_LLVM_BUILD_DIR}/bin/clang" "${TOOL_
BUILD_DIR}/lib"/* | 460 "${TOOL_SRC_DIR}/tests/test.sh" "${LLVM_BUILD_DIR}/Release+Asserts" |
579 fi | 461 fi |
580 done | 462 done |
581 # Run the LLVM and Clang tests. | 463 pushd "${LLVM_BUILD_DIR}" |
582 ninja -C "${LLVM_BUILD_DIR}" check-all | 464 ${MAKE} check-all |
| 465 popd |
583 fi | 466 fi |
584 | 467 |
585 # After everything is done, log success for this revision. | 468 # After everything is done, log success for this revision. |
586 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" | 469 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" |
OLD | NEW |