Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2015 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2015 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, and then package the results up | 6 """This script will check out llvm and clang, and then package the results up |
| 7 to a tgz file.""" | 7 to a tgz file.""" |
| 8 | 8 |
| 9 import argparse | 9 import argparse |
| 10 import fnmatch | 10 import fnmatch |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 103 print 'Uploading %s to Google Cloud Storage...' % archive_name | 103 print 'Uploading %s to Google Cloud Storage...' % archive_name |
| 104 exit_code = RunGsutil(gsutil_args) | 104 exit_code = RunGsutil(gsutil_args) |
| 105 if exit_code != 0: | 105 if exit_code != 0: |
| 106 print "gsutil failed, exit_code: %s" % exit_code | 106 print "gsutil failed, exit_code: %s" % exit_code |
| 107 os.exit(exit_code) | 107 os.exit(exit_code) |
| 108 else: | 108 else: |
| 109 print 'To upload, run:' | 109 print 'To upload, run:' |
| 110 print ('gsutil %s' % ' '.join(gsutil_args)) | 110 print ('gsutil %s' % ' '.join(gsutil_args)) |
| 111 | 111 |
| 112 | 112 |
| 113 def UploadPDBToSymbolServer(): | |
| 114 assert sys.platform == 'win32' | |
| 115 # Upload PDB and binary to the symbol server on Windows. Put them into the | |
| 116 # chromium-browser-symsrv bucket, since chrome devs have that in their | |
| 117 # _NT_SYMBOL_PATH already. Executable and PDB must be at paths following a | |
| 118 # certain pattern for the Microsoft debuggers to be able to load them. | |
| 119 # Executable: | |
| 120 # chromium-browser-symsrv/clang-cl.exe/ABCDEFAB01234/clang-cl.exe | |
| 121 # ABCDEFAB is the executable's timestamp in %08X format, 01234 is the | |
| 122 # executable's image size in %x format. tools/symsrc/img_fingerprint.py | |
| 123 # can compute this ABCDEFAB01234 string for us, so use that. | |
| 124 # XXX put at clang-cl.ex_ and compress? Use symstore.exe? | |
| 125 # PDB: | |
| 126 # gs://chromium-browser-symsrv/clang-cl.exe.pdb/AABBCCDD/clang-cl.dll.pd_ | |
| 127 # AABBCCDD here is computed from the output of | |
| 128 # dumpbin /all mybinary.exe | find "Format: RSDS" | |
| 129 # but tools/symsrc/pdb_fingerprint_from_img.py can compute it already, so | |
| 130 # again just use that. | |
| 131 sys.path.insert(0, os.path.join(CHROMIUM_DIR, 'tools', 'symsrc')) | |
| 132 import img_fingerprint, pdb_fingerprint_from_img | |
| 133 | |
| 134 clang_cl_path = 'bin/clang-cl.exe' | |
| 135 clang_cl_id = img_fingerprint.GetImgFingerprint(img_path) | |
| 136 | |
| 137 # The build process builds clang.exe and then copies it to clang-cl.exe | |
| 138 # (both are the same binary and they behave differently on what their | |
| 139 # filename is). Hence, the pdb is at clang.pdb, not at clang-cl.pdb. | |
| 140 clang_pdb_path = 'bin/clang.pdb' | |
| 141 clang_pdb_id, = img_fingerprint.GetImgFingerprint(img_path) | |
| 142 (clang_pdb_id, clang_pdb_path2) = \ | |
| 143 pdb_fingerprint_from_img.GetPDBInfoFromImg(img_path) | |
| 144 assert clang_pdb_path == clang_pdb_path2 # XXX | |
| 145 | |
| 146 # XXX compress | |
| 147 | |
| 148 gsutil_args = ['cp', '-n', '-a', 'public-read', clang_cl_path, | |
| 149 'gs://chromium-browser-symsrv/clang-cl.exe/%s/clang-cl.exe' % | |
| 150 img_id] | |
| 151 if RunGsutil(gsutil_args) != 0: | |
| 152 print "gsutil failed" | |
| 153 os.exit(1) | |
| 154 | |
| 155 gsutil_args = ['cp', '-n', '-a', 'public-read', clang_pdb_path, | |
| 156 'gs://chromium-browser-symsrv/clang.pdb/%s/clang.pdb' % | |
|
Nico
2017/03/08 22:41:12
Should this be clang.pdb/%s/clang.pdb, or clang-cl
| |
| 157 pdb_id] | |
| 158 if RunGsutil(gsutil_args) != 0: | |
| 159 print "gsutil failed" | |
| 160 os.exit(1) | |
| 161 | |
| 113 def main(): | 162 def main(): |
| 114 parser = argparse.ArgumentParser(description='build and package clang') | 163 parser = argparse.ArgumentParser(description='build and package clang') |
| 115 parser.add_argument('--upload', action='store_true', | 164 parser.add_argument('--upload', action='store_true', |
| 116 help='Upload the target archive to Google Cloud Storage.') | 165 help='Upload the target archive to Google Cloud Storage.') |
| 117 args = parser.parse_args() | 166 args = parser.parse_args() |
| 118 | 167 |
| 119 # Check that the script is not going to upload a toolchain built from HEAD. | 168 # Check that the script is not going to upload a toolchain built from HEAD. |
| 120 use_head_revision = 'LLVM_FORCE_HEAD_REVISION' in os.environ | 169 use_head_revision = 'LLVM_FORCE_HEAD_REVISION' in os.environ |
| 121 if args.upload and use_head_revision: | 170 if args.upload and use_head_revision: |
| 122 print ("--upload and LLVM_FORCE_HEAD_REVISION could not be used " | 171 print ("--upload and LLVM_FORCE_HEAD_REVISION could not be used " |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 295 objdumpdir = 'llvmobjdump-' + stamp | 344 objdumpdir = 'llvmobjdump-' + stamp |
| 296 shutil.rmtree(objdumpdir, ignore_errors=True) | 345 shutil.rmtree(objdumpdir, ignore_errors=True) |
| 297 os.makedirs(os.path.join(objdumpdir, 'bin')) | 346 os.makedirs(os.path.join(objdumpdir, 'bin')) |
| 298 shutil.copy(os.path.join(LLVM_RELEASE_DIR, 'bin', 'llvm-objdump' + exe_ext), | 347 shutil.copy(os.path.join(LLVM_RELEASE_DIR, 'bin', 'llvm-objdump' + exe_ext), |
| 299 os.path.join(objdumpdir, 'bin')) | 348 os.path.join(objdumpdir, 'bin')) |
| 300 with tarfile.open(objdumpdir + '.tgz', 'w:gz') as tar: | 349 with tarfile.open(objdumpdir + '.tgz', 'w:gz') as tar: |
| 301 tar.add(os.path.join(objdumpdir, 'bin'), arcname='bin', | 350 tar.add(os.path.join(objdumpdir, 'bin'), arcname='bin', |
| 302 filter=PrintTarProgress) | 351 filter=PrintTarProgress) |
| 303 MaybeUpload(args, objdumpdir, platform) | 352 MaybeUpload(args, objdumpdir, platform) |
| 304 | 353 |
| 354 if sys.platform == 'win32' and args.upload: | |
| 355 UploadPDBToSymbolServer() | |
| 356 | |
| 305 # FIXME: Warn if the file already exists on the server. | 357 # FIXME: Warn if the file already exists on the server. |
| 306 | 358 |
| 307 | 359 |
| 308 if __name__ == '__main__': | 360 if __name__ == '__main__': |
| 309 sys.exit(main()) | 361 sys.exit(main()) |
| OLD | NEW |