| OLD | NEW | 
|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python | 
| 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 is used to download prebuilt clang binaries. | 6 """This script is used to download prebuilt clang binaries. | 
| 7 | 7 | 
| 8 It is also used by package.py to build the prebuilt clang binaries.""" | 8 It is also used by package.py to build the prebuilt clang binaries.""" | 
| 9 | 9 | 
| 10 import argparse | 10 import argparse | 
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 213   if subprocess.call(command, env=env, shell=True) == 0: | 213   if subprocess.call(command, env=env, shell=True) == 0: | 
| 214     return True | 214     return True | 
| 215   print 'Failed.' | 215   print 'Failed.' | 
| 216   if fail_hard: | 216   if fail_hard: | 
| 217     sys.exit(1) | 217     sys.exit(1) | 
| 218   return False | 218   return False | 
| 219 | 219 | 
| 220 | 220 | 
| 221 def CopyFile(src, dst): | 221 def CopyFile(src, dst): | 
| 222   """Copy a file from src to dst.""" | 222   """Copy a file from src to dst.""" | 
|  | 223   print "Copying %s to %s" % (src, dst) | 
| 223   shutil.copy(src, dst) | 224   shutil.copy(src, dst) | 
| 224   print "Copying %s to %s" % (src, dst) |  | 
| 225 | 225 | 
| 226 | 226 | 
| 227 def CopyDirectoryContents(src, dst, filename_filter=None): | 227 def CopyDirectoryContents(src, dst, filename_filter=None): | 
| 228   """Copy the files from directory src to dst | 228   """Copy the files from directory src to dst | 
| 229   with an optional filename filter.""" | 229   with an optional filename filter.""" | 
| 230   dst = os.path.realpath(dst)  # realpath() in case dst ends in /.. | 230   dst = os.path.realpath(dst)  # realpath() in case dst ends in /.. | 
| 231   EnsureDirExists(dst) | 231   EnsureDirExists(dst) | 
| 232   for root, _, files in os.walk(src): | 232   for root, _, files in os.walk(src): | 
| 233     for f in files: | 233     for f in files: | 
| 234       if filename_filter and not re.match(filename_filter, f): | 234       if filename_filter and not re.match(filename_filter, f): | 
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 344 | 344 | 
| 345   # Use gyp to find the MSVS installation, either in depot_tools as per above, | 345   # Use gyp to find the MSVS installation, either in depot_tools as per above, | 
| 346   # or a system-wide installation otherwise. | 346   # or a system-wide installation otherwise. | 
| 347   sys.path.append(os.path.join(CHROMIUM_DIR, 'tools', 'gyp', 'pylib')) | 347   sys.path.append(os.path.join(CHROMIUM_DIR, 'tools', 'gyp', 'pylib')) | 
| 348   import gyp.MSVSVersion | 348   import gyp.MSVSVersion | 
| 349   vs_version = gyp.MSVSVersion.SelectVisualStudioVersion( | 349   vs_version = gyp.MSVSVersion.SelectVisualStudioVersion( | 
| 350       vs_toolchain.GetVisualStudioVersion()) | 350       vs_toolchain.GetVisualStudioVersion()) | 
| 351   return vs_version | 351   return vs_version | 
| 352 | 352 | 
| 353 | 353 | 
|  | 354 def CopyDiaDllTo(target_dir): | 
|  | 355   # This script always wants to use the 64-bit msdia*.dll. | 
|  | 356   dia_path = os.path.join(GetVSVersion().Path(), 'DIA SDK', 'bin', 'amd64') | 
|  | 357   dia_dll = os.path.join(dia_path, 'msdia140.dll')  # Bump after VC updates. | 
|  | 358   CopyFile(dia_dll, target_dir) | 
|  | 359 | 
|  | 360 | 
| 354 def UpdateClang(args): | 361 def UpdateClang(args): | 
| 355   print 'Updating Clang to %s...' % PACKAGE_VERSION | 362   print 'Updating Clang to %s...' % PACKAGE_VERSION | 
| 356 | 363 | 
| 357   need_gold_plugin = 'LLVM_DOWNLOAD_GOLD_PLUGIN' in os.environ or ( | 364   need_gold_plugin = 'LLVM_DOWNLOAD_GOLD_PLUGIN' in os.environ or ( | 
| 358       sys.platform.startswith('linux') and | 365       sys.platform.startswith('linux') and | 
| 359       'buildtype=Official' in os.environ.get('GYP_DEFINES', '') and | 366       'buildtype=Official' in os.environ.get('GYP_DEFINES', '') and | 
| 360       'branding=Chrome' in os.environ.get('GYP_DEFINES', '')) | 367       'branding=Chrome' in os.environ.get('GYP_DEFINES', '')) | 
| 361 | 368 | 
| 362   if ReadStampFile() == PACKAGE_VERSION and not args.force_local_build: | 369   if ReadStampFile() == PACKAGE_VERSION and not args.force_local_build: | 
| 363     print 'Clang is already up to date.' | 370     print 'Clang is already up to date.' | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 377     else: | 384     else: | 
| 378       assert sys.platform.startswith('linux') | 385       assert sys.platform.startswith('linux') | 
| 379       cds_full_url = CDS_URL + '/Linux_x64/' + cds_file | 386       cds_full_url = CDS_URL + '/Linux_x64/' + cds_file | 
| 380 | 387 | 
| 381     print 'Downloading prebuilt clang' | 388     print 'Downloading prebuilt clang' | 
| 382     if os.path.exists(LLVM_BUILD_DIR): | 389     if os.path.exists(LLVM_BUILD_DIR): | 
| 383       RmTree(LLVM_BUILD_DIR) | 390       RmTree(LLVM_BUILD_DIR) | 
| 384     try: | 391     try: | 
| 385       DownloadAndUnpack(cds_full_url, LLVM_BUILD_DIR) | 392       DownloadAndUnpack(cds_full_url, LLVM_BUILD_DIR) | 
| 386       print 'clang %s unpacked' % PACKAGE_VERSION | 393       print 'clang %s unpacked' % PACKAGE_VERSION | 
|  | 394       if sys.platform == 'win32': | 
|  | 395         CopyDiaDllTo(os.path.join(LLVM_BUILD_DIR, 'bin')) | 
| 387       # Download the gold plugin if requested to by an environment variable. | 396       # Download the gold plugin if requested to by an environment variable. | 
| 388       # This is used by the CFI ClusterFuzz bot, and it's required for official | 397       # This is used by the CFI ClusterFuzz bot, and it's required for official | 
| 389       # builds on linux. | 398       # builds on linux. | 
| 390       if need_gold_plugin: | 399       if need_gold_plugin: | 
| 391         RunCommand(['python', CHROMIUM_DIR+'/build/download_gold_plugin.py']) | 400         RunCommand(['python', CHROMIUM_DIR+'/build/download_gold_plugin.py']) | 
| 392       WriteStampFile(PACKAGE_VERSION) | 401       WriteStampFile(PACKAGE_VERSION) | 
| 393       return 0 | 402       return 0 | 
| 394     except urllib2.URLError: | 403     except urllib2.URLError: | 
| 395       print 'Failed to download prebuilt clang %s' % cds_file | 404       print 'Failed to download prebuilt clang %s' % cds_file | 
| 396       print 'Use --force-local-build if you want to build locally.' | 405       print 'Use --force-local-build if you want to build locally.' | 
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 469         '-DCMAKE_INSTALL_PREFIX=' + LLVM_BOOTSTRAP_INSTALL_DIR, | 478         '-DCMAKE_INSTALL_PREFIX=' + LLVM_BOOTSTRAP_INSTALL_DIR, | 
| 470         '-DCMAKE_C_FLAGS=' + ' '.join(cflags), | 479         '-DCMAKE_C_FLAGS=' + ' '.join(cflags), | 
| 471         '-DCMAKE_CXX_FLAGS=' + ' '.join(cxxflags), | 480         '-DCMAKE_CXX_FLAGS=' + ' '.join(cxxflags), | 
| 472         ] | 481         ] | 
| 473     if cc is not None:  bootstrap_args.append('-DCMAKE_C_COMPILER=' + cc) | 482     if cc is not None:  bootstrap_args.append('-DCMAKE_C_COMPILER=' + cc) | 
| 474     if cxx is not None: bootstrap_args.append('-DCMAKE_CXX_COMPILER=' + cxx) | 483     if cxx is not None: bootstrap_args.append('-DCMAKE_CXX_COMPILER=' + cxx) | 
| 475     RmCmakeCache('.') | 484     RmCmakeCache('.') | 
| 476     RunCommand(['cmake'] + bootstrap_args + [LLVM_DIR], msvc_arch='x64') | 485     RunCommand(['cmake'] + bootstrap_args + [LLVM_DIR], msvc_arch='x64') | 
| 477     RunCommand(['ninja'], msvc_arch='x64') | 486     RunCommand(['ninja'], msvc_arch='x64') | 
| 478     if args.run_tests: | 487     if args.run_tests: | 
|  | 488       if sys.platform == 'win32': | 
|  | 489         CopyDiaDllTo(os.path.join(LLVM_BOOTSTRAP_DIR, 'bin')) | 
| 479       RunCommand(['ninja', 'check-all'], msvc_arch='x64') | 490       RunCommand(['ninja', 'check-all'], msvc_arch='x64') | 
| 480     RunCommand(['ninja', 'install'], msvc_arch='x64') | 491     RunCommand(['ninja', 'install'], msvc_arch='x64') | 
| 481     if args.gcc_toolchain: | 492     if args.gcc_toolchain: | 
| 482       # Copy that gcc's stdlibc++.so.6 to the build dir, so the bootstrap | 493       # Copy that gcc's stdlibc++.so.6 to the build dir, so the bootstrap | 
| 483       # compiler can start. | 494       # compiler can start. | 
| 484       CopyFile(libstdcpp, os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'lib')) | 495       CopyFile(libstdcpp, os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'lib')) | 
| 485 | 496 | 
| 486     if sys.platform == 'win32': | 497     if sys.platform == 'win32': | 
| 487       cc = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'clang-cl.exe') | 498       cc = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'clang-cl.exe') | 
| 488       cxx = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'clang-cl.exe') | 499       cxx = os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'bin', 'clang-cl.exe') | 
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 753       runtime = 'libclang_rt.asan-%s-android.so' % target_arch | 764       runtime = 'libclang_rt.asan-%s-android.so' % target_arch | 
| 754       for root, _, files in os.walk(build_dir): | 765       for root, _, files in os.walk(build_dir): | 
| 755         if runtime in files: | 766         if runtime in files: | 
| 756           shutil.copy(os.path.join(root, runtime), asan_rt_lib_dst_dir) | 767           shutil.copy(os.path.join(root, runtime), asan_rt_lib_dst_dir) | 
| 757 | 768 | 
| 758   # Run tests. | 769   # Run tests. | 
| 759   if args.run_tests or use_head_revision: | 770   if args.run_tests or use_head_revision: | 
| 760     os.chdir(LLVM_BUILD_DIR) | 771     os.chdir(LLVM_BUILD_DIR) | 
| 761     RunCommand(['ninja', 'cr-check-all'], msvc_arch='x64') | 772     RunCommand(['ninja', 'cr-check-all'], msvc_arch='x64') | 
| 762   if args.run_tests: | 773   if args.run_tests: | 
|  | 774     if sys.platform == 'win32': | 
|  | 775       CopyDiaDllTo(os.path.join(LLVM_BUILD_DIR, 'bin')) | 
| 763     os.chdir(LLVM_BUILD_DIR) | 776     os.chdir(LLVM_BUILD_DIR) | 
| 764     RunCommand(['ninja', 'check-all'], msvc_arch='x64') | 777     RunCommand(['ninja', 'check-all'], msvc_arch='x64') | 
| 765 | 778 | 
| 766   WriteStampFile(PACKAGE_VERSION) | 779   WriteStampFile(PACKAGE_VERSION) | 
| 767   print 'Clang update was successful.' | 780   print 'Clang update was successful.' | 
| 768   return 0 | 781   return 0 | 
| 769 | 782 | 
| 770 | 783 | 
| 771 def main(): | 784 def main(): | 
| 772   parser = argparse.ArgumentParser(description='Build Clang.') | 785   parser = argparse.ArgumentParser(description='Build Clang.') | 
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 848     args.force_local_build = True | 861     args.force_local_build = True | 
| 849     if 'OS=android' not in os.environ.get('GYP_DEFINES', ''): | 862     if 'OS=android' not in os.environ.get('GYP_DEFINES', ''): | 
| 850       # Only build the Android ASan rt on ToT bots when targetting Android. | 863       # Only build the Android ASan rt on ToT bots when targetting Android. | 
| 851       args.with_android = False | 864       args.with_android = False | 
| 852 | 865 | 
| 853   return UpdateClang(args) | 866   return UpdateClang(args) | 
| 854 | 867 | 
| 855 | 868 | 
| 856 if __name__ == '__main__': | 869 if __name__ == '__main__': | 
| 857   sys.exit(main()) | 870   sys.exit(main()) | 
| OLD | NEW | 
|---|