Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Side by Side Diff: tools/clang/scripts/package.py

Issue 2793343002: Add --enable-pgo option to build clang with PGO
Patch Set: Add --enable-pgo option to build clang with PGO Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 exit_code = RunGsutil(gsutil_args) 156 exit_code = RunGsutil(gsutil_args)
157 if exit_code != 0: 157 if exit_code != 0:
158 print "gsutil failed, exit_code: %s" % exit_code 158 print "gsutil failed, exit_code: %s" % exit_code
159 sys.exit(exit_code) 159 sys.exit(exit_code)
160 160
161 161
162 def main(): 162 def main():
163 parser = argparse.ArgumentParser(description='build and package clang') 163 parser = argparse.ArgumentParser(description='build and package clang')
164 parser.add_argument('--upload', action='store_true', 164 parser.add_argument('--upload', action='store_true',
165 help='Upload the target archive to Google Cloud Storage.') 165 help='Upload the target archive to Google Cloud Storage.')
166 parser.add_argument('--enable-pgo', action='store_true',
167 help='Build clang with GO enabled.')
Nico 2017/04/07 15:58:53 Typo GO. Also, why have a flag for this? Shouldn'
matthewtff.asm 2017/04/11 12:14:43 I believe it should be default. Made a flag just i
166 args = parser.parse_args() 168 args = parser.parse_args()
167 169
168 # Check that the script is not going to upload a toolchain built from HEAD. 170 # Check that the script is not going to upload a toolchain built from HEAD.
169 use_head_revision = 'LLVM_FORCE_HEAD_REVISION' in os.environ 171 use_head_revision = 'LLVM_FORCE_HEAD_REVISION' in os.environ
170 if args.upload and use_head_revision: 172 if args.upload and use_head_revision:
171 print ("--upload and LLVM_FORCE_HEAD_REVISION could not be used " 173 print ("--upload and LLVM_FORCE_HEAD_REVISION could not be used "
172 "at the same time.") 174 "at the same time.")
173 return 1 175 return 1
174 176
175 expected_stamp = GetExpectedStamp() 177 expected_stamp = GetExpectedStamp()
176 pdir = 'clang-' + expected_stamp 178 pdir = 'clang-' + expected_stamp
177 golddir = 'llvmgold-' + expected_stamp 179 golddir = 'llvmgold-' + expected_stamp
178 print pdir 180 print pdir
179 181
180 if sys.platform == 'darwin': 182 if sys.platform == 'darwin':
181 platform = 'Mac' 183 platform = 'Mac'
182 elif sys.platform == 'win32': 184 elif sys.platform == 'win32':
183 platform = 'Win' 185 platform = 'Win'
184 else: 186 else:
185 platform = 'Linux_x64' 187 platform = 'Linux_x64'
186 188
187 # Check if Google Cloud Storage already has the artifacts we want to build. 189 # Check if Google Cloud Storage already has the artifacts we want to build.
188 if (args.upload and GsutilArchiveExists(pdir, platform) and 190 if (args.upload and GsutilArchiveExists(pdir, platform) and
189 not sys.platform.startswith('linux') or 191 (not sys.platform.startswith('linux') or
190 GsutilArchiveExists(golddir, platform)): 192 GsutilArchiveExists(golddir, platform))):
Nico 2017/04/07 15:58:53 This looks like a good change, but also unrelated.
191 print ('Desired toolchain revision %s is already available ' 193 print ('Desired toolchain revision %s is already available '
192 'in Google Cloud Storage:') % expected_stamp 194 'in Google Cloud Storage:') % expected_stamp
193 print 'gs://chromium-browser-clang-staging/%s/%s.tgz' % (platform, pdir) 195 print 'gs://chromium-browser-clang-staging/%s/%s.tgz' % (platform, pdir)
194 if sys.platform.startswith('linux'): 196 if sys.platform.startswith('linux'):
195 print 'gs://chromium-browser-clang-staging/%s/%s.tgz' % (platform, 197 print 'gs://chromium-browser-clang-staging/%s/%s.tgz' % (platform,
196 golddir) 198 golddir)
197 return 0 199 return 0
198 200
199 with open('buildlog.txt', 'w') as log: 201 with open('buildlog.txt', 'w') as log:
200 Tee('Diff in llvm:\n', log) 202 Tee('Diff in llvm:\n', log)
(...skipping 21 matching lines...) Expand all
222 Tee('Starting build\n', log) 224 Tee('Starting build\n', log)
223 225
224 # Do a clobber build. 226 # Do a clobber build.
225 shutil.rmtree(LLVM_BOOTSTRAP_DIR, ignore_errors=True) 227 shutil.rmtree(LLVM_BOOTSTRAP_DIR, ignore_errors=True)
226 shutil.rmtree(LLVM_BOOTSTRAP_INSTALL_DIR, ignore_errors=True) 228 shutil.rmtree(LLVM_BOOTSTRAP_INSTALL_DIR, ignore_errors=True)
227 shutil.rmtree(LLVM_BUILD_DIR, ignore_errors=True) 229 shutil.rmtree(LLVM_BUILD_DIR, ignore_errors=True)
228 230
229 opt_flags = [] 231 opt_flags = []
230 if sys.platform.startswith('linux'): 232 if sys.platform.startswith('linux'):
231 opt_flags += ['--lto-gold-plugin'] 233 opt_flags += ['--lto-gold-plugin']
234
235 if sys.platform != 'win32' and args.enable_pgo:
236 opt_flags += ['--enable-pgo']
237 else:
238 opt_flags += ['--bootstrap']
239
232 build_cmd = [sys.executable, os.path.join(THIS_DIR, 'update.py'), 240 build_cmd = [sys.executable, os.path.join(THIS_DIR, 'update.py'),
233 '--bootstrap', '--force-local-build', 241 '--force-local-build', '--run-tests'] + opt_flags
234 '--run-tests'] + opt_flags
235 TeeCmd(build_cmd, log) 242 TeeCmd(build_cmd, log)
236 243
244 if args.enable_pgo:
245 global LLVM_RELEASE_DIR
246 LLVM_RELEASE_DIR = os.path.join(LLVM_RELEASE_DIR, 'tools', 'clang',
247 'stage2-instrumented-bins', 'tools', 'clang', 'stage2-bins')
248
237 stamp = open(STAMP_FILE).read().rstrip() 249 stamp = open(STAMP_FILE).read().rstrip()
238 if stamp != expected_stamp: 250 if stamp != expected_stamp:
239 print 'Actual stamp (%s) != expected stamp (%s).' % (stamp, expected_stamp) 251 print 'Actual stamp (%s) != expected stamp (%s).' % (stamp, expected_stamp)
240 return 1 252 return 1
241 253
242 shutil.rmtree(pdir, ignore_errors=True) 254 shutil.rmtree(pdir, ignore_errors=True)
243 255
244 # Copy a whitelist of files to the directory we're going to tar up. 256 # Copy a whitelist of files to the directory we're going to tar up.
245 # This supports the same patterns that the fnmatch module understands. 257 # This supports the same patterns that the fnmatch module understands.
246 exe_ext = '.exe' if sys.platform == 'win32' else '' 258 exe_ext = '.exe' if sys.platform == 'win32' else ''
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 # Set up symlinks. 324 # Set up symlinks.
313 if sys.platform != 'win32': 325 if sys.platform != 'win32':
314 os.symlink('clang', os.path.join(pdir, 'bin', 'clang++')) 326 os.symlink('clang', os.path.join(pdir, 'bin', 'clang++'))
315 os.symlink('clang', os.path.join(pdir, 'bin', 'clang-cl')) 327 os.symlink('clang', os.path.join(pdir, 'bin', 'clang-cl'))
316 328
317 if sys.platform.startswith('linux'): 329 if sys.platform.startswith('linux'):
318 os.symlink('lld', os.path.join(pdir, 'bin', 'ld.lld')) 330 os.symlink('lld', os.path.join(pdir, 'bin', 'ld.lld'))
319 331
320 # Copy libc++ headers. 332 # Copy libc++ headers.
321 if sys.platform == 'darwin': 333 if sys.platform == 'darwin':
322 shutil.copytree(os.path.join(LLVM_BOOTSTRAP_INSTALL_DIR, 'include', 'c++'), 334 install_dir = LLVM_RELEASE_DIR if args.enable_pgo else \
335 LLVM_BOOTSTRAP_INSTALL_DIR
336 shutil.copytree(os.path.join(install_dir, 'include', 'c++'),
323 os.path.join(pdir, 'include', 'c++')) 337 os.path.join(pdir, 'include', 'c++'))
324 338
325 # Copy buildlog over. 339 # Copy buildlog over.
326 shutil.copy('buildlog.txt', pdir) 340 shutil.copy('buildlog.txt', pdir)
327 341
328 # Create archive. 342 # Create archive.
329 tar_entries = ['bin', 'lib', 'buildlog.txt'] 343 tar_entries = ['bin', 'lib', 'buildlog.txt']
330 if sys.platform == 'darwin': 344 if sys.platform == 'darwin':
331 tar_entries += ['include'] 345 tar_entries += ['include']
332 with tarfile.open(pdir + '.tgz', 'w:gz') as tar: 346 with tarfile.open(pdir + '.tgz', 'w:gz') as tar:
(...skipping 25 matching lines...) Expand all
358 MaybeUpload(args, objdumpdir, platform) 372 MaybeUpload(args, objdumpdir, platform)
359 373
360 if sys.platform == 'win32' and args.upload: 374 if sys.platform == 'win32' and args.upload:
361 UploadPDBToSymbolServer() 375 UploadPDBToSymbolServer()
362 376
363 # FIXME: Warn if the file already exists on the server. 377 # FIXME: Warn if the file already exists on the server.
364 378
365 379
366 if __name__ == '__main__': 380 if __name__ == '__main__':
367 sys.exit(main()) 381 sys.exit(main())
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698