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

Unified Diff: tools/mb/mb.py

Issue 1880903002: Switch MB to write the GN args to args.gn. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fix_mb_goma
Patch Set: fix unicode handling in gn_helpers Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/gn_helpers.py ('k') | tools/mb/mb_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/mb/mb.py
diff --git a/tools/mb/mb.py b/tools/mb/mb.py
index 1733618715f902660811de782e5601698628c86d..cdf1cc3d46b4b44de7a3e8db6090df0df45b9cd9 100755
--- a/tools/mb/mb.py
+++ b/tools/mb/mb.py
@@ -27,6 +27,13 @@ import urllib2
from collections import OrderedDict
+CHROMIUM_SRC_DIR = os.path.dirname(os.path.dirname(os.path.dirname(
+ os.path.abspath(__file__))))
+sys.path = [os.path.join(CHROMIUM_SRC_DIR, 'build')] + sys.path
+
+import gn_helpers
+
+
def main(args):
mbw = MetaBuildWrapper()
return mbw.Main(args)
@@ -34,11 +41,9 @@ def main(args):
class MetaBuildWrapper(object):
def __init__(self):
- p = os.path
- d = os.path.dirname
- self.chromium_src_dir = p.normpath(d(d(d(p.abspath(__file__)))))
- self.default_config = p.join(self.chromium_src_dir, 'tools', 'mb',
- 'mb_config.pyl')
+ self.chromium_src_dir = CHROMIUM_SRC_DIR
+ self.default_config = os.path.join(self.chromium_src_dir, 'tools', 'mb',
+ 'mb_config.pyl')
self.executable = sys.executable
self.platform = sys.platform
self.sep = os.sep
@@ -255,7 +260,9 @@ class MetaBuildWrapper(object):
def CmdLookup(self):
vals = self.Lookup()
if vals['type'] == 'gn':
- cmd = self.GNCmd('gen', '_path_', vals['gn_args'])
+ cmd = self.GNCmd('gen', '_path_')
+ gn_args = self.GNArgs(vals)
+ self.Print('\nWriting """\\\n%s""" to _path_/args.gn.\n' % gn_args)
env = None
else:
cmd, env = self.GYPCmd('_path_', vals)
@@ -690,7 +697,14 @@ class MetaBuildWrapper(object):
def RunGNGen(self, vals):
build_dir = self.args.path[0]
- cmd = self.GNCmd('gen', build_dir, vals['gn_args'], extra_args=['--check'])
+ cmd = self.GNCmd('gen', build_dir, '--check')
+ gn_args = self.GNArgs(vals)
+
+ # Since GN hasn't run yet, the build directory may not even exist.
+ self.MaybeMakeDirectory(self.ToAbsPath(build_dir))
+
+ gn_args_path = self.ToAbsPath(build_dir, 'args.gn')
+ self.WriteFile(gn_args_path, gn_args)
swarming_targets = []
if getattr(self.args, 'swarming_targets_file', None):
@@ -722,10 +736,6 @@ class MetaBuildWrapper(object):
('//testing/buildbot/gn_isolate_map.pyl', err))
gn_runtime_deps_path = self.ToAbsPath(build_dir, 'runtime_deps')
-
- # Since GN hasn't run yet, the build directory may not even exist.
- self.MaybeMakeDirectory(self.ToAbsPath(build_dir))
-
self.WriteFile(gn_runtime_deps_path, '\n'.join(gn_labels) + '\n')
cmd.append('--runtime-deps-list-file=%s' % gn_runtime_deps_path)
@@ -792,7 +802,7 @@ class MetaBuildWrapper(object):
command, extra_files = self.GetIsolateCommand(target, vals, gn_isolate_map)
label = gn_isolate_map[target_name]['label']
- cmd = self.GNCmd('desc', build_dir, extra_args=[label, 'runtime_deps'])
+ cmd = self.GNCmd('desc', build_dir, label, 'runtime_deps')
ret, out, _ = self.Call(cmd)
if ret:
if out:
@@ -841,23 +851,29 @@ class MetaBuildWrapper(object):
isolate_path + 'd.gen.json',
)
- def GNCmd(self, subcommand, path, gn_args='', extra_args=None):
+ def GNCmd(self, subcommand, path, *args):
if self.platform == 'linux2':
subdir, exe = 'linux64', 'gn'
elif self.platform == 'darwin':
subdir, exe = 'mac', 'gn'
else:
subdir, exe = 'win', 'gn.exe'
+
gn_path = self.PathJoin(self.chromium_src_dir, 'buildtools', subdir, exe)
- cmd = [gn_path, subcommand, path]
+ return [gn_path, subcommand, path] + list(args)
+
+ def GNArgs(self, vals):
+ gn_args = vals['gn_args']
if self.args.goma_dir:
gn_args += ' goma_dir="%s"' % self.args.goma_dir
- if gn_args:
- cmd.append('--args=%s' % gn_args)
- if extra_args:
- cmd.extend(extra_args)
- return cmd
+
+ # Canonicalize the arg string into a sorted, newline-separated list
+ # of key-value pairs, and de-dup the keys if need be so that only
+ # the last instance of each arg is listed.
+ gn_args = gn_helpers.ToGNString(gn_helpers.FromGNArgs(gn_args))
+
+ return gn_args
def RunGYPGen(self, vals):
path = self.args.path[0]
@@ -1086,8 +1102,11 @@ class MetaBuildWrapper(object):
matching_targets = set()
try:
- cmd = self.GNCmd('refs', self.args.path[0]) + [
- '@%s' % response_file.name, '--all', '--as=output']
+ cmd = self.GNCmd('refs',
+ self.args.path[0],
+ '@%s' % response_file.name,
+ '--all',
+ '--as=output')
ret, out, _ = self.Run(cmd, force_verbose=False)
if ret and not 'The input matches no targets' in out:
self.WriteFailureAndRaise('gn refs returned %d: %s' % (ret, out),
@@ -1098,8 +1117,10 @@ class MetaBuildWrapper(object):
if build_output in targets:
matching_targets.add(build_output)
- cmd = self.GNCmd('refs', self.args.path[0]) + [
- '@%s' % response_file.name, '--all']
+ cmd = self.GNCmd('refs',
+ self.args.path[0],
+ '@%s' % response_file.name,
+ '--all')
ret, out, _ = self.Run(cmd, force_verbose=False)
if ret and not 'The input matches no targets' in out:
self.WriteFailureAndRaise('gn refs returned %d: %s' % (ret, out),
« no previous file with comments | « build/gn_helpers.py ('k') | tools/mb/mb_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698