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

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

Issue 341963002: Use a faster rolling fixed Clang revision for ASan on Windows (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 """Windows can't run .sh files, so this is a Python implementation of 6 """Windows can't run .sh files, so this is a Python implementation of
7 update.sh. This script should replace update.sh on all platforms eventually.""" 7 update.sh. This script should replace update.sh on all platforms eventually."""
8 8
9 import os 9 import os
10 import re 10 import re
11 import shutil 11 import shutil
12 import subprocess 12 import subprocess
13 import sys 13 import sys
14 14
15 # Do NOT CHANGE this if you don't know what you're doing -- see 15 # Do NOT CHANGE this if you don't know what you're doing -- see
16 # https://code.google.com/p/chromium/wiki/UpdatingClang 16 # https://code.google.com/p/chromium/wiki/UpdatingClang
17 # Reverting problematic clang rolls is safe, though. 17 # Reverting problematic clang rolls is safe, though.
18 # Note: this revision is only used for Windows. Other platforms use update.sh. 18 # Note: this revision is only used for Windows. Other platforms use update.sh.
19 LLVM_WIN_REVISION = 'HEAD' 19 CLANG_REVISION = os.environ.get('LLVM_WIN_REVISION', '209387')
Nico 2014/06/18 17:56:57 The bots should continue building HEAD, right? So
Reid Kleckner 2014/06/18 19:44:33 Yes. They have LLVM_WIN_REVISION=HEAD in the envi
Nico 2014/06/18 19:54:01 Yes, that's a long-term goal. It's strange to put
Reid Kleckner 2014/06/18 20:11:26 OK, I'll do that.
20
21 # Use a more quickly rolling Clang revision for ASan on Windows.
Nico 2014/06/18 17:56:57 I'd say something like # ASan on Windows is usefu
Reid Kleckner 2014/06/18 19:44:33 I'll do this if we decide to go back to 'HEAD' as
22 # TODO(timurrrr): Use the standard Clang revision above when ASan on Windows has
23 # stabilized.
24 if (sys.platform in ['win32', 'cygwin'] and
25 re.search(r'\b(asan)=1', os.environ.get('GYP_DEFINES', ''))):
26 CLANG_REVISION = '210586'
20 27
21 # Path constants. (All of these should be absolute paths.) 28 # Path constants. (All of these should be absolute paths.)
22 THIS_DIR = os.path.abspath(os.path.dirname(__file__)) 29 THIS_DIR = os.path.abspath(os.path.dirname(__file__))
23 CHROMIUM_DIR = os.path.abspath(os.path.join(THIS_DIR, '..', '..', '..')) 30 CHROMIUM_DIR = os.path.abspath(os.path.join(THIS_DIR, '..', '..', '..'))
24 LLVM_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm') 31 LLVM_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm')
25 LLVM_BUILD_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm-build', 32 LLVM_BUILD_DIR = os.path.join(CHROMIUM_DIR, 'third_party', 'llvm-build',
26 'Release+Asserts') 33 'Release+Asserts')
27 COMPILER_RT_BUILD_DIR = os.path.join(LLVM_BUILD_DIR, '32bit-compiler-rt') 34 COMPILER_RT_BUILD_DIR = os.path.join(LLVM_BUILD_DIR, '32bit-compiler-rt')
28 CLANG_DIR = os.path.join(LLVM_DIR, 'tools', 'clang') 35 CLANG_DIR = os.path.join(LLVM_DIR, 'tools', 'clang')
29 COMPILER_RT_DIR = os.path.join(LLVM_DIR, 'projects', 'compiler-rt') 36 COMPILER_RT_DIR = os.path.join(LLVM_DIR, 'projects', 'compiler-rt')
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 print 'Failed.' 88 print 'Failed.'
82 sys.exit(1) 89 sys.exit(1)
83 90
84 def CopyFile(src, dst): 91 def CopyFile(src, dst):
85 """Copy a file from src to dst.""" 92 """Copy a file from src to dst."""
86 shutil.copy(src, dst) 93 shutil.copy(src, dst)
87 print "Copying %s to %s" % (src, dst) 94 print "Copying %s to %s" % (src, dst)
88 95
89 def Checkout(name, url, dir): 96 def Checkout(name, url, dir):
90 """Checkout the SVN module at url into dir. Use name for the log message.""" 97 """Checkout the SVN module at url into dir. Use name for the log message."""
91 print "Checking out %s r%s into '%s'" % (name, LLVM_WIN_REVISION, dir) 98 print "Checking out %s r%s into '%s'" % (name, CLANG_REVISION, dir)
92 RunCommand(['svn', 'checkout', '--force', 99 RunCommand(['svn', 'checkout', '--force',
93 url + '@' + LLVM_WIN_REVISION, dir], tries=2) 100 url + '@' + CLANG_REVISION, dir], tries=2)
94 101
95 102
96 vs_version = None 103 vs_version = None
97 def GetVSVersion(): 104 def GetVSVersion():
98 global vs_version 105 global vs_version
99 if not vs_version: 106 if not vs_version:
100 # TODO(hans): Find a less hacky way to find the MSVS installation. 107 # TODO(hans): Find a less hacky way to find the MSVS installation.
101 sys.path.append(os.path.join(CHROMIUM_DIR, 'tools', 'gyp', 'pylib')) 108 sys.path.append(os.path.join(CHROMIUM_DIR, 'tools', 'gyp', 'pylib'))
102 import gyp.MSVSVersion 109 import gyp.MSVSVersion
103 # We request VS 2013 because Clang won't build with 2010, and 2013 will be 110 # We request VS 2013 because Clang won't build with 2010, and 2013 will be
104 # the default for Chromium soon anyway. 111 # the default for Chromium soon anyway.
105 vs_version = gyp.MSVSVersion.SelectVisualStudioVersion('2013') 112 vs_version = gyp.MSVSVersion.SelectVisualStudioVersion('2013')
106 return vs_version 113 return vs_version
107 114
108 115
109 def UpdateClang(): 116 def UpdateClang():
110 print 'Updating Clang to %s...' % (LLVM_WIN_REVISION) 117 print 'Updating Clang to %s...' % CLANG_REVISION
111 if LLVM_WIN_REVISION != 'HEAD' and ReadStampFile() == LLVM_WIN_REVISION: 118 if CLANG_REVISION != 'HEAD' and ReadStampFile() == CLANG_REVISION:
112 print 'Already up to date.' 119 print 'Already up to date.'
113 return 0 120 return 0
114 121
115 ClobberChromiumBuildFiles() 122 ClobberChromiumBuildFiles()
116 123
117 # Reset the stamp file in case the build is unsuccessful. 124 # Reset the stamp file in case the build is unsuccessful.
118 WriteStampFile('') 125 WriteStampFile('')
119 126
120 Checkout('LLVM', LLVM_REPO_URL + '/llvm/trunk', LLVM_DIR) 127 Checkout('LLVM', LLVM_REPO_URL + '/llvm/trunk', LLVM_DIR)
121 Checkout('Clang', LLVM_REPO_URL + '/cfe/trunk', CLANG_DIR) 128 Checkout('Clang', LLVM_REPO_URL + '/cfe/trunk', CLANG_DIR)
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 aux_sanitizer_include_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang', 174 aux_sanitizer_include_dir = os.path.join(LLVM_BUILD_DIR, 'lib', 'clang',
168 '3.5.0', 'include_sanitizer', 175 '3.5.0', 'include_sanitizer',
169 'sanitizer') 176 'sanitizer')
170 if not os.path.exists(aux_sanitizer_include_dir): 177 if not os.path.exists(aux_sanitizer_include_dir):
171 os.makedirs(aux_sanitizer_include_dir) 178 os.makedirs(aux_sanitizer_include_dir)
172 for _, _, files in os.walk(sanitizer_include_dir): 179 for _, _, files in os.walk(sanitizer_include_dir):
173 for f in files: 180 for f in files:
174 CopyFile(os.path.join(sanitizer_include_dir, f), 181 CopyFile(os.path.join(sanitizer_include_dir, f),
175 aux_sanitizer_include_dir) 182 aux_sanitizer_include_dir)
176 183
177 WriteStampFile(LLVM_WIN_REVISION) 184 WriteStampFile(CLANG_REVISION)
178 print 'Clang update was successful.' 185 print 'Clang update was successful.'
179 return 0 186 return 0
180 187
181 188
182 def main(): 189 def main():
183 if not sys.platform in ['win32', 'cygwin']: 190 if not sys.platform in ['win32', 'cygwin']:
184 # For non-Windows, fall back to update.sh. 191 # For non-Windows, fall back to update.sh.
185 # TODO(hans): Make update.py replace update.sh completely. 192 # TODO(hans): Make update.py replace update.sh completely.
186 193
187 # This script is called by gclient. gclient opens its hooks subprocesses 194 # This script is called by gclient. gclient opens its hooks subprocesses
(...skipping 15 matching lines...) Expand all
203 210
204 if re.search(r'\b(make_clang_dir)=', os.environ.get('GYP_DEFINES', '')): 211 if re.search(r'\b(make_clang_dir)=', os.environ.get('GYP_DEFINES', '')):
205 print 'Skipping Clang update (make_clang_dir= was set in GYP_DEFINES).' 212 print 'Skipping Clang update (make_clang_dir= was set in GYP_DEFINES).'
206 return 0 213 return 0
207 214
208 return UpdateClang() 215 return UpdateClang()
209 216
210 217
211 if __name__ == '__main__': 218 if __name__ == '__main__':
212 sys.exit(main()) 219 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698