summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--site_scons/site_tools/ninja_next.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/site_scons/site_tools/ninja_next.py b/site_scons/site_tools/ninja_next.py
index 7cdfb9d98af..38a065cf65b 100644
--- a/site_scons/site_tools/ninja_next.py
+++ b/site_scons/site_tools/ninja_next.py
@@ -641,7 +641,16 @@ class NinjaState:
# use for the "real" builder and multiple phony targets that
# match the file names of the remaining outputs. This way any
# build can depend on any output from any build.
- build["outputs"].sort()
+ #
+ # We assume that the first listed output is the 'key'
+ # output and is stably presented to us by SCons. For
+ # instance if -gsplit-dwarf is in play and we are
+ # producing foo.o and foo.dwo, we expect that outputs[0]
+ # from SCons will be the foo.o file and not the dwo
+ # file. If instead we just sorted the whole outputs array,
+ # we would find that the dwo file becomes the
+ # first_output, and this breaks, for instance, header
+ # dependency scanning.
if rule is not None and (rule.get("deps") or rule.get("rspfile")):
first_output, remaining_outputs = (
build["outputs"][0],
@@ -650,7 +659,7 @@ class NinjaState:
if remaining_outputs:
ninja.build(
- outputs=remaining_outputs, rule="phony", implicit=first_output,
+ outputs=sorted(remaining_outputs), rule="phony", implicit=first_output,
)
build["outputs"] = first_output