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

Side by Side Diff: build/gyp_chromium

Issue 457003004: Make landmines work on local builds too (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: reland: handle clean pull and ios 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 | « build/get_landmines.py ('k') | build/gyp_environment.py » ('j') | 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 2
3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 # This script is wrapper for Chromium that adds some support for how GYP 7 # This script is wrapper for Chromium that adds some support for how GYP
8 # is invoked by Chromium beyond what can be done in the gclient hooks. 8 # is invoked by Chromium beyond what can be done in the gclient hooks.
9 9
10 import glob 10 import glob
11 import gyp_helper 11 import gyp_environment
12 import os 12 import os
13 import re 13 import re
14 import shlex 14 import shlex
15 import subprocess 15 import subprocess
16 import string 16 import string
17 import sys 17 import sys
18 import vs_toolchain 18 import vs_toolchain
19 19
20 script_dir = os.path.dirname(os.path.realpath(__file__)) 20 script_dir = os.path.dirname(os.path.realpath(__file__))
21 chrome_src = os.path.abspath(os.path.join(script_dir, os.pardir)) 21 chrome_src = os.path.abspath(os.path.join(script_dir, os.pardir))
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 args = sys.argv[1:] 190 args = sys.argv[1:]
191 191
192 use_analyzer = len(args) and args[0] == '--analyzer' 192 use_analyzer = len(args) and args[0] == '--analyzer'
193 if use_analyzer: 193 if use_analyzer:
194 args.pop(0) 194 args.pop(0)
195 os.environ['GYP_GENERATORS'] = 'analyzer' 195 os.environ['GYP_GENERATORS'] = 'analyzer'
196 args.append('-Gconfig_path=' + args.pop(0)) 196 args.append('-Gconfig_path=' + args.pop(0))
197 args.append('-Ganalyzer_output_path=' + args.pop(0)) 197 args.append('-Ganalyzer_output_path=' + args.pop(0))
198 198
199 if int(os.environ.get('GYP_CHROMIUM_NO_ACTION', 0)): 199 if int(os.environ.get('GYP_CHROMIUM_NO_ACTION', 0)):
200 # Check for landmines (reasons to clobber the build) in any case.
201 print 'Running build/landmines.py...'
202 subprocess.check_call(
203 [sys.executable, os.path.join(script_dir, 'landmines.py')])
204 print 'Skipping gyp_chromium due to GYP_CHROMIUM_NO_ACTION env var.' 200 print 'Skipping gyp_chromium due to GYP_CHROMIUM_NO_ACTION env var.'
205 sys.exit(0) 201 sys.exit(0)
206 202
207 # Use the Psyco JIT if available. 203 # Use the Psyco JIT if available.
208 if psyco: 204 if psyco:
209 psyco.profile() 205 psyco.profile()
210 print "Enabled Psyco JIT." 206 print "Enabled Psyco JIT."
211 207
212 # Fall back on hermetic python if we happen to get run under cygwin. 208 # Fall back on hermetic python if we happen to get run under cygwin.
213 # TODO(bradnelson): take this out once this issue is fixed: 209 # TODO(bradnelson): take this out once this issue is fixed:
214 # http://code.google.com/p/gyp/issues/detail?id=177 210 # http://code.google.com/p/gyp/issues/detail?id=177
215 if sys.platform == 'cygwin': 211 if sys.platform == 'cygwin':
216 import find_depot_tools 212 import find_depot_tools
217 depot_tools_path = find_depot_tools.add_depot_tools_to_path() 213 depot_tools_path = find_depot_tools.add_depot_tools_to_path()
218 python_dir = sorted(glob.glob(os.path.join(depot_tools_path, 214 python_dir = sorted(glob.glob(os.path.join(depot_tools_path,
219 'python2*_bin')))[-1] 215 'python2*_bin')))[-1]
220 env = os.environ.copy() 216 env = os.environ.copy()
221 env['PATH'] = python_dir + os.pathsep + env.get('PATH', '') 217 env['PATH'] = python_dir + os.pathsep + env.get('PATH', '')
222 p = subprocess.Popen( 218 p = subprocess.Popen(
223 [os.path.join(python_dir, 'python.exe')] + sys.argv, 219 [os.path.join(python_dir, 'python.exe')] + sys.argv,
224 env=env, shell=False) 220 env=env, shell=False)
225 p.communicate() 221 p.communicate()
226 sys.exit(p.returncode) 222 sys.exit(p.returncode)
227 223
228 gyp_helper.apply_chromium_gyp_env()
229
230 # This could give false positives since it doesn't actually do real option 224 # This could give false positives since it doesn't actually do real option
231 # parsing. Oh well. 225 # parsing. Oh well.
232 gyp_file_specified = False 226 gyp_file_specified = False
233 for arg in args: 227 for arg in args:
234 if arg.endswith('.gyp'): 228 if arg.endswith('.gyp'):
235 gyp_file_specified = True 229 gyp_file_specified = True
236 break 230 break
237 231
232 gyp_environment.SetEnvironment()
233
238 # If we didn't get a file, check an env var, and then fall back to 234 # If we didn't get a file, check an env var, and then fall back to
239 # assuming 'all.gyp' from the same directory as the script. 235 # assuming 'all.gyp' from the same directory as the script.
240 if not gyp_file_specified: 236 if not gyp_file_specified:
241 gyp_file = os.environ.get('CHROMIUM_GYP_FILE') 237 gyp_file = os.environ.get('CHROMIUM_GYP_FILE')
242 if gyp_file: 238 if gyp_file:
243 # Note that CHROMIUM_GYP_FILE values can't have backslashes as 239 # Note that CHROMIUM_GYP_FILE values can't have backslashes as
244 # path separators even on Windows due to the use of shlex.split(). 240 # path separators even on Windows due to the use of shlex.split().
245 args.extend(shlex.split(gyp_file)) 241 args.extend(shlex.split(gyp_file))
246 else: 242 else:
247 args.append(os.path.join(script_dir, 'all.gyp')) 243 args.append(os.path.join(script_dir, 'all.gyp'))
248 244
249 # There shouldn't be a circular dependency relationship between .gyp files, 245 # There shouldn't be a circular dependency relationship between .gyp files,
250 # but in Chromium's .gyp files, on non-Mac platforms, circular relationships 246 # but in Chromium's .gyp files, on non-Mac platforms, circular relationships
251 # currently exist. The check for circular dependencies is currently 247 # currently exist. The check for circular dependencies is currently
252 # bypassed on other platforms, but is left enabled on the Mac, where a 248 # bypassed on other platforms, but is left enabled on the Mac, where a
253 # violation of the rule causes Xcode to misbehave badly. 249 # violation of the rule causes Xcode to misbehave badly.
254 # TODO(mark): Find and kill remaining circular dependencies, and remove this 250 # TODO(mark): Find and kill remaining circular dependencies, and remove this
255 # option. http://crbug.com/35878. 251 # option. http://crbug.com/35878.
256 # TODO(tc): Fix circular dependencies in ChromiumOS then add linux2 to the 252 # TODO(tc): Fix circular dependencies in ChromiumOS then add linux2 to the
257 # list. 253 # list.
258 if sys.platform not in ('darwin',): 254 if sys.platform not in ('darwin',):
259 args.append('--no-circular-check') 255 args.append('--no-circular-check')
260 256
261 # We explicitly don't support the make gyp generator (crbug.com/348686). Be 257 # We explicitly don't support the make gyp generator (crbug.com/348686). Be
262 # nice and fail here, rather than choking in gyp. 258 # nice and fail here, rather than choking in gyp.
263 if re.search(r'(^|,|\s)make($|,|\s)', os.environ.get('GYP_GENERATORS', '')): 259 if re.search(r'(^|,|\s)make($|,|\s)', os.environ.get('GYP_GENERATORS', '')):
264 print 'Error: make gyp generator not supported (check GYP_GENERATORS).' 260 print 'Error: make gyp generator not supported (check GYP_GENERATORS).'
265 sys.exit(1) 261 sys.exit(1)
266 262
267 # Default to ninja on linux and windows, but only if no generator has
268 # explicitly been set.
269 # Also default to ninja on mac, but only when not building chrome/ios.
270 # . -f / --format has precedence over the env var, no need to check for it
271 # . set the env var only if it hasn't been set yet
272 # . chromium.gyp_env has been applied to os.environ at this point already
273 if sys.platform.startswith(('linux', 'win', 'freebsd')) and \
274 not os.environ.get('GYP_GENERATORS'):
275 os.environ['GYP_GENERATORS'] = 'ninja'
276 elif sys.platform == 'darwin' and not os.environ.get('GYP_GENERATORS') and \
277 not 'OS=ios' in os.environ.get('GYP_DEFINES', []):
278 os.environ['GYP_GENERATORS'] = 'ninja'
279
280 vs2013_runtime_dll_dirs = vs_toolchain.SetEnvironmentAndGetRuntimeDllDirs()
281
282 # If CHROMIUM_GYP_SYNTAX_CHECK is set to 1, it will invoke gyp with --check 263 # If CHROMIUM_GYP_SYNTAX_CHECK is set to 1, it will invoke gyp with --check
283 # to enfore syntax checking. 264 # to enfore syntax checking.
284 syntax_check = os.environ.get('CHROMIUM_GYP_SYNTAX_CHECK') 265 syntax_check = os.environ.get('CHROMIUM_GYP_SYNTAX_CHECK')
285 if syntax_check and int(syntax_check): 266 if syntax_check and int(syntax_check):
286 args.append('--check') 267 args.append('--check')
287 268
288 supplemental_includes = GetSupplementalFiles() 269 supplemental_includes = GetSupplementalFiles()
289 gyp_vars_dict = GetGypVars(supplemental_includes) 270 gyp_vars_dict = GetGypVars(supplemental_includes)
290 271
291 # TODO(dmikurube): Remove these checks and messages after a while. 272 # TODO(dmikurube): Remove these checks and messages after a while.
(...skipping 23 matching lines...) Expand all
315 args.extend(['-D', 'gyp_output_dir=' + GetOutputDirectory()]) 296 args.extend(['-D', 'gyp_output_dir=' + GetOutputDirectory()])
316 297
317 if not use_analyzer: 298 if not use_analyzer:
318 print 'Updating projects from gyp files...' 299 print 'Updating projects from gyp files...'
319 sys.stdout.flush() 300 sys.stdout.flush()
320 301
321 # Off we go... 302 # Off we go...
322 gyp_rc = gyp.main(args) 303 gyp_rc = gyp.main(args)
323 304
324 if not use_analyzer: 305 if not use_analyzer:
325 # Check for landmines (reasons to clobber the build). This must be run here, 306 vs2013_runtime_dll_dirs = vs_toolchain.SetEnvironmentAndGetRuntimeDllDirs()
326 # rather than a separate runhooks step so that any environment modifications
327 # from above are picked up.
328 print 'Running build/landmines.py...'
329 subprocess.check_call(
330 [sys.executable, os.path.join(script_dir, 'landmines.py')])
331
332 if vs2013_runtime_dll_dirs: 307 if vs2013_runtime_dll_dirs:
333 x64_runtime, x86_runtime = vs2013_runtime_dll_dirs 308 x64_runtime, x86_runtime = vs2013_runtime_dll_dirs
334 vs_toolchain.CopyVsRuntimeDlls( 309 vs_toolchain.CopyVsRuntimeDlls(
335 os.path.join(chrome_src, GetOutputDirectory()), 310 os.path.join(chrome_src, GetOutputDirectory()),
336 (x86_runtime, x64_runtime)) 311 (x86_runtime, x64_runtime))
337 312
338 sys.exit(gyp_rc) 313 sys.exit(gyp_rc)
OLDNEW
« no previous file with comments | « build/get_landmines.py ('k') | build/gyp_environment.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698