Index: tools/mb/mb.py |
diff --git a/tools/mb/mb.py b/tools/mb/mb.py |
index 0c3d446913a6a6d972ebbd675afb70f81395248b..a0a312dd4f0e37cf3cd41a7b712dfaa4d5b17d09 100755 |
--- a/tools/mb/mb.py |
+++ b/tools/mb/mb.py |
@@ -89,6 +89,9 @@ class MetaBuildWrapper(object): |
subp = subps.add_parser('gen', |
help='generate a new set of build files') |
AddCommonOptions(subp) |
+ subp.add_argument('--swarming-targets', |
+ help='save runtime dependencies for targets in file ' |
+ '(GN only).') |
subp.add_argument('path', nargs=1, |
help='path to generate build into') |
subp.set_defaults(func=self.CmdGen) |
@@ -336,7 +339,37 @@ class MetaBuildWrapper(object): |
def RunGNGen(self, path, vals): |
cmd = self.GNCmd('gen', path, vals['gn_args']) |
+ |
+ if self.args.swarming_targets: |
+ # We need GN to generate the list of runtime dependencies for |
+ # the compile targets listed (one per line) in the file so |
+ # we can run them via swarming. We use ninja_to_gn.pyl to convert |
+ # the compile targets to the matching GN labels. |
+ contents = self.ReadFile(self.args.swarming_targets) |
+ runtime_deps_targets = contents.splitlines() |
+ ninja_targets_to_labels = ast.literal_eval(self.ReadFile(os.path.join( |
M-A Ruel
2015/06/10 14:53:40
I trick we used in isolate Go is to pre-process th
Dirk Pranke
2015/06/10 16:07:59
That is a good suggestion, but since .pyl / ast.li
|
+ self.chromium_src_dir, 'testing', 'buildbot', 'ninja_to_gn.pyl'))) |
+ gn_labels = [] |
+ for target in runtime_deps_targets: |
+ if not target in ninja_targets_to_label: |
+ raise MBErr('test target "%s" not found in %s' % |
+ (target, "//testing/buildbot/ninja_to_gn.pyl")) |
M-A Ruel
2015/06/10 14:53:40
Use single quotes
Dirk Pranke
2015/06/10 16:07:59
will fix.
|
+ |
+ gn_runtime_deps_path = self.ToAbsPath(os.path.join(path, |
+ 'runtime_deps')) |
+ self.WriteFile(gn_runtime_deps_path, '\n'.join(gn_labels) + '\n') |
+ cmd.append('--runtime-deps-list-file=%s' % gn_runtime_deps_path) |
M-A Ruel
2015/06/10 14:53:40
use two separate args, it works better on Windows.
Dirk Pranke
2015/06/10 16:07:59
I can't; GN only supports --foo=bar style argument
|
+ |
ret, _, _ = self.Run(cmd) |
+ |
+ if self.args.swarming_targets: |
+ for target in swarming_targets: |
M-A Ruel
2015/06/10 14:53:40
Where is this variable defined? I don't see how th
Dirk Pranke
2015/06/10 16:07:59
Whoops, you're right. This should be looping over
|
+ output = os.path.join(path, target + '.runtime_deps') |
+ deps_path = self.ToAbsPath(os.path.join(path, |
+ target + '.runtime_deps')) |
+ if not self.Exists(self.ToAbsPath(output)): |
+ raise MBErr('did not generate %s' % output) |
+ |
return ret |
def GNCmd(self, subcommand, path, gn_args=''): |
@@ -387,7 +420,7 @@ class MetaBuildWrapper(object): |
outp = json.loads(self.ReadFile(self.args.output_path[0])) |
self.Print() |
self.Print('analyze output:') |
- self.PrintJSON(inp) |
+ self.PrintJSON(outp) |
Dirk Pranke
2015/06/10 06:43:17
this is an unrelated bug that pylint revealed :).
|
self.Print() |
return ret |