diff --git a/python/mozbuild/mozbuild/backend/recursivemake.py b/python/mozbuild/mozbuild/backend/recursivemake.py index 2e146bf5a25..1ee71ff8ae6 100644 --- a/python/mozbuild/mozbuild/backend/recursivemake.py +++ b/python/mozbuild/mozbuild/backend/recursivemake.py @@ -664,7 +664,9 @@ class RecursiveMakeBackend(CommonBackend): # the autogenerated one automatically. self.backend_input_files.add(makefile_in) - for skiplist in self._may_skip.values(): + for tier, skiplist in self._may_skip.items(): + if tier in ('compile', 'binaries'): + continue if bf.relobjdir in skiplist: skiplist.remove(bf.relobjdir) else: @@ -679,8 +681,6 @@ class RecursiveMakeBackend(CommonBackend): with self._write_file(makefile) as fh: bf.environment.create_makefile(fh, stub=stub) - self._fill_root_mk() - # Write out a master list of all IPDL source files. ipdl_dir = os.path.join(self.environment.topobjdir, 'ipc', 'ipdl') mk = mozmakeutil.Makefile() @@ -711,6 +711,8 @@ class RecursiveMakeBackend(CommonBackend): with self._write_file(os.path.join(ipdl_dir, 'ipdlsrcs.mk')) as ipdls: mk.dump(ipdls, removal_guard=False) + self._may_skip['compile'] -= set(['ipc/ipdl']) + # Write out master lists of WebIDL source files. bindings_dir = os.path.join(self.environment.topobjdir, 'dom', 'bindings') @@ -744,6 +746,10 @@ class RecursiveMakeBackend(CommonBackend): with self._write_file(os.path.join(bindings_dir, 'webidlsrcs.mk')) as webidls: mk.dump(webidls, removal_guard=False) + self._may_skip['compile'] -= set(['dom/bindings', 'dom/bindings/test']) + + self._fill_root_mk() + # Write out a dependency file used to determine whether a config.status # re-run is needed. inputs = sorted(p.replace(os.sep, '/') for p in self.backend_input_files) @@ -868,6 +874,10 @@ class RecursiveMakeBackend(CommonBackend): return affected_tiers = set(obj.affected_tiers) + # Until all SOURCES are really in moz.build, consider all directories + # building binaries to require a pass at compile, too. + if 'binaries' in affected_tiers: + affected_tiers.add('compile') if 'compile' in affected_tiers or 'binaries' in affected_tiers: affected_tiers.add('libs') if obj.is_tool_dir and 'libs' in affected_tiers: