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

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

Issue 440163002: Win-Clang update.py: implement more principled search for CMake (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 shutil.copy(src, dst) 92 shutil.copy(src, dst)
93 print "Copying %s to %s" % (src, dst) 93 print "Copying %s to %s" % (src, dst)
94 94
95 def Checkout(name, url, dir): 95 def Checkout(name, url, dir):
96 """Checkout the SVN module at url into dir. Use name for the log message.""" 96 """Checkout the SVN module at url into dir. Use name for the log message."""
97 print "Checking out %s r%s into '%s'" % (name, LLVM_WIN_REVISION, dir) 97 print "Checking out %s r%s into '%s'" % (name, LLVM_WIN_REVISION, dir)
98 RunCommand(['svn', 'checkout', '--force', 98 RunCommand(['svn', 'checkout', '--force',
99 url + '@' + LLVM_WIN_REVISION, dir], tries=2) 99 url + '@' + LLVM_WIN_REVISION, dir], tries=2)
100 100
101 101
102 def AddCmakeToPath():
Nico 2014/08/05 18:48:51 nit: CMake
hans 2014/08/05 18:52:40 Done.
103 """Look for CMake and add it to PATH if it's not there already."""
104 try:
105 # First check if cmake is already on PATH.
106 subprocess.call(['cmake', '--version'])
107 print "Already on path."
Nico 2014/08/05 18:48:51 remove
hans 2014/08/05 18:52:40 Gah! Well, at least now you know I tested it ;)
108 return
109 except OSError as e:
110 if e.errno != os.errno.ENOENT:
111 raise
112
113 cmake_locations = ['C:\\Program Files (x86)\\CMake\\bin',
114 'C:\\Program Files (x86)\\CMake 2.8\\bin']
115 for d in cmake_locations:
116 print "Searching %s" % (d)
Nico 2014/08/05 18:48:51 remove
hans 2014/08/05 18:52:40 Done.
117 if os.path.isdir(d):
118 os.environ['PATH'] = os.environ.get('PATH', '') + os.pathsep + d
119 print "PATH: %s" % (os.environ['PATH'])
Nico 2014/08/05 18:48:51 remove (can be added back temporarily if we need t
hans 2014/08/05 18:52:40 Done.
120 return
121 print 'Failed to find CMake!'
122 sys.exit(1)
123
124
102 vs_version = None 125 vs_version = None
103 def GetVSVersion(): 126 def GetVSVersion():
104 global vs_version 127 global vs_version
105 if not vs_version: 128 if not vs_version:
106 # TODO(hans): Find a less hacky way to find the MSVS installation. 129 # TODO(hans): Find a less hacky way to find the MSVS installation.
107 sys.path.append(os.path.join(CHROMIUM_DIR, 'tools', 'gyp', 'pylib')) 130 sys.path.append(os.path.join(CHROMIUM_DIR, 'tools', 'gyp', 'pylib'))
108 import gyp.MSVSVersion 131 import gyp.MSVSVersion
109 # We request VS 2013 because Clang won't build with 2010, and 2013 will be 132 # We request VS 2013 because Clang won't build with 2010, and 2013 will be
110 # the default for Chromium soon anyway. 133 # the default for Chromium soon anyway.
111 vs_version = gyp.MSVSVersion.SelectVisualStudioVersion('2013') 134 vs_version = gyp.MSVSVersion.SelectVisualStudioVersion('2013')
112 return vs_version 135 return vs_version
113 136
114 137
115 def UpdateClang(): 138 def UpdateClang():
116 print 'Updating Clang to %s...' % (LLVM_WIN_REVISION) 139 print 'Updating Clang to %s...' % (LLVM_WIN_REVISION)
117 if LLVM_WIN_REVISION != 'HEAD' and ReadStampFile() == LLVM_WIN_REVISION: 140 if LLVM_WIN_REVISION != 'HEAD' and ReadStampFile() == LLVM_WIN_REVISION:
118 print 'Already up to date.' 141 print 'Already up to date.'
119 return 0 142 return 0
120 143
144 AddCmakeToPath()
121 ClobberChromiumBuildFiles() 145 ClobberChromiumBuildFiles()
122 146
123 # Reset the stamp file in case the build is unsuccessful. 147 # Reset the stamp file in case the build is unsuccessful.
124 WriteStampFile('') 148 WriteStampFile('')
125 149
126 Checkout('LLVM', LLVM_REPO_URL + '/llvm/trunk', LLVM_DIR) 150 Checkout('LLVM', LLVM_REPO_URL + '/llvm/trunk', LLVM_DIR)
127 Checkout('Clang', LLVM_REPO_URL + '/cfe/trunk', CLANG_DIR) 151 Checkout('Clang', LLVM_REPO_URL + '/cfe/trunk', CLANG_DIR)
128 Checkout('compiler-rt', LLVM_REPO_URL + '/compiler-rt/trunk', COMPILER_RT_DIR) 152 Checkout('compiler-rt', LLVM_REPO_URL + '/compiler-rt/trunk', COMPILER_RT_DIR)
129 153
130 if not os.path.exists(LLVM_BUILD_DIR): 154 if not os.path.exists(LLVM_BUILD_DIR):
131 os.makedirs(LLVM_BUILD_DIR) 155 os.makedirs(LLVM_BUILD_DIR)
132 os.chdir(LLVM_BUILD_DIR) 156 os.chdir(LLVM_BUILD_DIR)
133 157
134 if not re.search(r'cmake', os.environ['PATH'], flags=re.IGNORECASE):
135 # If CMake is not on the path, try looking in a standard location.
136 os.environ['PATH'] += os.pathsep + 'C:\\Program Files (x86)\\CMake 2.8\\bin'
137
138 RunCommand(GetVSVersion().SetupScript('x64') + 158 RunCommand(GetVSVersion().SetupScript('x64') +
139 ['&&', 'cmake', '-GNinja', '-DCMAKE_BUILD_TYPE=Release', 159 ['&&', 'cmake', '-GNinja', '-DCMAKE_BUILD_TYPE=Release',
140 '-DLLVM_ENABLE_ASSERTIONS=ON', LLVM_DIR]) 160 '-DLLVM_ENABLE_ASSERTIONS=ON', LLVM_DIR])
141 RunCommand(GetVSVersion().SetupScript('x64') + ['&&', 'ninja', 'all']) 161 RunCommand(GetVSVersion().SetupScript('x64') + ['&&', 'ninja', 'all'])
142 162
143 # Do an x86 build of compiler-rt to get the 32-bit ASan run-time. 163 # Do an x86 build of compiler-rt to get the 32-bit ASan run-time.
144 # TODO(hans): Remove once the regular build above produces this. 164 # TODO(hans): Remove once the regular build above produces this.
145 if not os.path.exists(COMPILER_RT_BUILD_DIR): 165 if not os.path.exists(COMPILER_RT_BUILD_DIR):
146 os.makedirs(COMPILER_RT_BUILD_DIR) 166 os.makedirs(COMPILER_RT_BUILD_DIR)
147 os.chdir(COMPILER_RT_BUILD_DIR) 167 os.chdir(COMPILER_RT_BUILD_DIR)
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 229
210 if re.search(r'\b(make_clang_dir)=', os.environ.get('GYP_DEFINES', '')): 230 if re.search(r'\b(make_clang_dir)=', os.environ.get('GYP_DEFINES', '')):
211 print 'Skipping Clang update (make_clang_dir= was set in GYP_DEFINES).' 231 print 'Skipping Clang update (make_clang_dir= was set in GYP_DEFINES).'
212 return 0 232 return 0
213 233
214 return UpdateClang() 234 return UpdateClang()
215 235
216 236
217 if __name__ == '__main__': 237 if __name__ == '__main__':
218 sys.exit(main()) 238 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