From 18cbf0d581162b2d15d66577b1fe08fe22006699 Mon Sep 17 00:00:00 2001 From: Andrew Morrow Date: Thu, 21 May 2020 09:05:22 -0400 Subject: [PATCH] SERVER-48348 Do not sort dwo files in ahead of object files during Ninja generation --- site_scons/site_tools/ninja_next.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/site_scons/site_tools/ninja_next.py b/site_scons/site_tools/ninja_next.py index 507e6685f2b0a..f999b746560c1 100644 --- a/site_scons/site_tools/ninja_next.py +++ b/site_scons/site_tools/ninja_next.py @@ -650,7 +650,16 @@ def generate(self, ninja_file): # 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], @@ -659,7 +668,7 @@ def generate(self, ninja_file): 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