Index: tools/clang/scripts/update.py |
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py |
index 3571d3159462e951e913a72eb89ca1e4cba98652..725fd6a82505e1b545c489efd998767e22dd049b 100755 |
--- a/tools/clang/scripts/update.py |
+++ b/tools/clang/scripts/update.py |
@@ -27,7 +27,7 @@ import zipfile |
# Do NOT CHANGE this if you don't know what you're doing -- see |
# https://chromium.googlesource.com/chromium/src/+/master/docs/updating_clang.md |
# Reverting problematic clang rolls is safe, though. |
-CLANG_REVISION = '303369' |
+CLANG_REVISION = '303370' |
use_head_revision = 'LLVM_FORCE_HEAD_REVISION' in os.environ |
if use_head_revision: |
@@ -73,6 +73,7 @@ BFD_PLUGINS_DIR = os.path.join(BINUTILS_LIB_DIR, 'bfd-plugins') |
VERSION = '5.0.0' |
ANDROID_NDK_DIR = os.path.join( |
CHROMIUM_DIR, 'third_party', 'android_tools', 'ndk') |
+FUCHSIA_SDK_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'fuchsia-sdk') |
# URL for pre-built binaries. |
CDS_URL = os.environ.get('CDS_CLANG_BUCKET_OVERRIDE', |
@@ -186,6 +187,7 @@ def RmTree(dir): |
def RmCmakeCache(dir): |
"""Delete CMake cache related files from dir.""" |
+ return |
for dirpath, dirs, files in os.walk(dir): |
if 'CMakeCache.txt' in files: |
os.remove(os.path.join(dirpath, 'CMakeCache.txt')) |
@@ -448,6 +450,16 @@ def UpdateClang(args): |
print 'for how to install the NDK, or pass --without-android.' |
return 1 |
+ if args.with_fuchsia and not os.path.exists(FUCHSIA_SDK_DIR): |
+ print 'Fuchsia SDK not found at ' + FUCHSIA_SDK_DIR |
+ print 'The Fuchsia SDK is needed to build libclang_rt for Fuchsia.' |
+ print 'Install the Fuchsia SDK by adding fuchsia to the ' |
+ print 'target_os section in your .gclient and running hooks, ' |
+ print 'or pass --without-fuchsia.' |
+ # TODO(thakis): Link to "chromium/fuchsia build instructions" page once it |
+ # exists. |
+ return 1 |
+ |
DownloadHostGcc(args) |
AddCMakeToPath() |
AddGnuWinToPath() |
@@ -694,9 +706,9 @@ def UpdateClang(args): |
# TODO(hans): Remove once the regular build above produces this. |
# On Mac and Linux, this is used to get the regular 64-bit run-time. |
# Do a clobbered build due to cmake changes. |
- if os.path.isdir(COMPILER_RT_BUILD_DIR): |
- RmTree(COMPILER_RT_BUILD_DIR) |
- os.makedirs(COMPILER_RT_BUILD_DIR) |
+ #if os.path.isdir(COMPILER_RT_BUILD_DIR): |
+ #RmTree(COMPILER_RT_BUILD_DIR) |
+ #os.makedirs(COMPILER_RT_BUILD_DIR) |
os.chdir(COMPILER_RT_BUILD_DIR) |
# TODO(thakis): Add this once compiler-rt can build with clang-cl (see |
# above). |
@@ -824,6 +836,43 @@ def UpdateClang(args): |
for root, _, files in os.walk(build_dir): |
if runtime in files: |
shutil.copy(os.path.join(root, runtime), asan_rt_lib_dst_dir) |
+ if args.with_fuchsia: |
+ # Fuchsia links against libclang_rt.builtins-<arch>.a instead of libgcc.a. |
+ for target_arch in ['aarch64', 'x86_64']: |
+ toolchain_dir = os.path.join( |
+ FUCHSIA_SDK_DIR, 'sysroot', '%s-fuchsia' % target_arch) |
+ # Build clang_rt runtime for Fuchsia in a separate build tree. |
+ build_dir = os.path.join(LLVM_BUILD_DIR, 'fuchsia-' + target_arch) |
+ if not os.path.exists(build_dir): |
+ os.mkdir(os.path.join(build_dir)) |
+ os.chdir(build_dir) |
+ # TODO(thakis): Might have to pass -B here once sysroot contains |
+ # binaries (e.g. gas for arm64?) |
+ cflags = ['--target=%s-fuchsia' % target_arch, |
+ '--sysroot=%s' % toolchain_dir] |
+ ldflags = ['--sysroot=%s' % toolchain_dir] |
+ fuchsia_args = base_cmake_args + [ |
+ '-DLLVM_ENABLE_THREADS=OFF', |
+ '-DCMAKE_C_COMPILER=' + os.path.join(LLVM_BUILD_DIR, 'bin/clang'), |
+ '-DCMAKE_CXX_COMPILER=' + os.path.join(LLVM_BUILD_DIR, 'bin/clang++'), |
+ '-DLLVM_CONFIG_PATH=' + os.path.join(LLVM_BUILD_DIR, 'bin/llvm-config'), |
+ '-DCMAKE_C_FLAGS=' + ' '.join(cflags), |
+ '-DCMAKE_CXX_FLAGS=' + ' '.join(cflags), |
+ '-DCMAKE_EXE_LINKER_FLAGS=' + ' '.join(ldflags), |
+ '-DCMAKE_SHARED_LINKER_FLAGS=' + ' '.join(ldflags), |
+ '-DCMAKE_MODULE_LINKER_FLAGS=' + ' '.join(ldflags), |
+ ] |
+ RmCmakeCache('.') |
+ RunCommand(['cmake'] + fuchsia_args + [COMPILER_RT_DIR]) |
+ RunCommand(['ninja', 'libclang_rt.builtins-%s.a' % target_arch]) |
+ |
+ # And copy it into the main build tree. |
+ fuchsia_lib_dst_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang', |
+ VERSION, 'lib', 'fuchsia') |
+ runtime = 'libclang_rt.builtins-%s.a' % target_arch |
+ for root, _, files in os.walk(build_dir): |
+ if runtime in files: |
+ shutil.copy(os.path.join(root, runtime), fuchsia_lib_dst_dir) |
# Run tests. |
if args.run_tests or use_head_revision: |
@@ -868,6 +917,10 @@ def main(): |
help='don\'t build Android ASan runtime (linux only)', |
dest='with_android', |
default=sys.platform.startswith('linux')) |
+ parser.add_argument('--without-fuchsia', action='store_false', |
+ help='don\'t build Fuchsia clang_rt runtime (linux only)', |
+ dest='with_fuchsia', |
+ default=sys.platform.startswith('linux')) |
args = parser.parse_args() |
if args.lto_gold_plugin and not args.bootstrap: |
@@ -915,6 +968,8 @@ def main(): |
if 'OS=android' not in os.environ.get('GYP_DEFINES', ''): |
# Only build the Android ASan rt on ToT bots when targetting Android. |
args.with_android = False |
+ # Don't build fuchsia runtime on ToT bots at all. |
+ args.with_fuchsia = False |
return UpdateClang(args) |