From fce72bc19c775b71edc21a2a710a9d7f02251aa6 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Tue, 20 Jan 2009 01:53:54 +0000 Subject: [PATCH] ccc: Recognize that -M and -MM only run preprocessor. - Clean up some placement of output args to match gcc more precisely (for testing). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62566 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/ccc/ccclib/Arguments.py | 19 +++++++++--------- tools/ccc/ccclib/Driver.py | 8 ++++---- tools/ccc/ccclib/Tools.py | 36 ++++++++++++++++++----------------- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/tools/ccc/ccclib/Arguments.py b/tools/ccc/ccclib/Arguments.py index ba48417dc6..04dfbbf1e2 100644 --- a/tools/ccc/ccclib/Arguments.py +++ b/tools/ccc/ccclib/Arguments.py @@ -539,15 +539,16 @@ class OptionParser: #### # Bring on the random garbage. - self.MOption = self.addOption(FlagOption('-M')) - self.MDOption = self.addOption(FlagOption('-MD')) - self.MGOption = self.addOption(FlagOption('-MG')) - self.MMDOption = self.addOption(FlagOption('-MMD')) - self.MPOption = self.addOption(FlagOption('-MP')) - self.MMOption = self.addOption(FlagOption('-MM')) - self.MFOption = self.addOption(JoinedOrSeparateOption('-MF')) - self.MTOption = self.addOption(JoinedOrSeparateOption('-MT')) - self.MQOption = self.addOption(JoinedOrSeparateOption('-MQ')) + self.MGroup = OptionGroup('-M') + self.MOption = self.addOption(FlagOption('-M', self.MGroup)) + self.MDOption = self.addOption(FlagOption('-MD', self.MGroup)) + self.MGOption = self.addOption(FlagOption('-MG', self.MGroup)) + self.MMDOption = self.addOption(FlagOption('-MMD', self.MGroup)) + self.MPOption = self.addOption(FlagOption('-MP', self.MGroup)) + self.MMOption = self.addOption(FlagOption('-MM', self.MGroup)) + self.MFOption = self.addOption(JoinedOrSeparateOption('-MF', self.MGroup)) + self.MTOption = self.addOption(JoinedOrSeparateOption('-MT', self.MGroup)) + self.MQOption = self.addOption(JoinedOrSeparateOption('-MQ', self.MGroup)) self.MachOption = self.addOption(FlagOption('-Mach')) self.uGroup = OptionGroup('-u') self.undefOption = self.addOption(FlagOption('-undef', self.uGroup)) diff --git a/tools/ccc/ccclib/Driver.py b/tools/ccc/ccclib/Driver.py index e52640e252..96225664f4 100644 --- a/tools/ccc/ccclib/Driver.py +++ b/tools/ccc/ccclib/Driver.py @@ -338,6 +338,8 @@ class Driver(object): hasDashC = args.getLastArg(self.parser.cOption) hasDashE = args.getLastArg(self.parser.EOption) hasDashS = args.getLastArg(self.parser.SOption) + hasDashM = args.getLastArg(self.parser.MOption) + hasDashMM = args.getLastArg(self.parser.MMOption) inputType = None inputTypeOpt = None @@ -401,7 +403,7 @@ class Driver(object): finalPhaseOpt = None # Determine what compilation mode we are in. - if hasDashE: + if hasDashE or hasDashM or hasDashMM: finalPhase = Phases.Phase.eOrderPreprocess finalPhaseOpt = hasDashE elif hasSyntaxOnly: @@ -520,14 +522,12 @@ class Driver(object): # FIXME: We need to handle canonicalization of the specified arch. archs = [] - hasDashM = None + hasDashM = args.getLastArg(self.parser.MGroup) hasSaveTemps = (args.getLastArg(self.parser.saveTempsOption) or args.getLastArg(self.parser.saveTempsOption2)) for arg in args: if arg.opt is self.parser.archOption: archs.append(arg) - elif arg.opt.name.startswith('-M'): - hasDashM = arg if not archs: archs.append(args.makeSeparateArg(self.hostInfo.getArchName(args), diff --git a/tools/ccc/ccclib/Tools.py b/tools/ccc/ccclib/Tools.py index 94f2b60bfd..ab9ad7b5a8 100644 --- a/tools/ccc/ccclib/Tools.py +++ b/tools/ccc/ccclib/Tools.py @@ -425,27 +425,21 @@ class Darwin_X86_CC1Tool(Tool): def getOutputArgs(self, arglist, output, isCPP=False): if isinstance(output, Jobs.PipedJob): if isCPP: - output_args = [] + return [] else: - output_args = ['-o', '-'] + return ['-o', '-'] elif output is None: - output_args = ['-o', '/dev/null'] + return ['-o', '/dev/null'] else: - output_args = arglist.render(output) - - # There is no need for this level of compatibility, but it - # makes diffing easier. - if (not arglist.getLastArg(arglist.parser.syntaxOnlyOption) and - not arglist.getLastArg(arglist.parser.SOption)): - return [], output_args - else: - return output_args, [] + return arglist.render(output) def addCPPOptionsArgs(self, cmd_args, arch, arglist, inputs, output_args, isCXX): # Derived from cpp_options. self.addCPPUniqueOptionsArgs(cmd_args, arch, arglist, inputs) + cmd_args.extend(output_args) + self.addCC1Args(cmd_args, arch, arglist) # NOTE: The code below has some commonality with cpp_options, @@ -598,11 +592,10 @@ class Darwin_X86_PreprocessTool(Darwin_X86_CC1Tool): arglist.getLastArg(arglist.parser.traditionalCPPOption)): cmd_args.append('-traditional-cpp') - early_output_args, end_output_args = self.getOutputArgs(arglist, output, - isCPP=True) + output_args = self.getOutputArgs(arglist, output, + isCPP=True) self.addCPPOptionsArgs(cmd_args, arch, arglist, inputs, - early_output_args, isCXX) - cmd_args.extend(end_output_args) + output_args, isCXX) arglist.addAllArgs(cmd_args, arglist.parser.dGroup) @@ -629,7 +622,16 @@ class Darwin_X86_CompileTool(Darwin_X86_CC1Tool): arglist.getLastArg(arglist.parser.f_traditionalOption)): raise Arguments.InvalidArgumentsError("-traditional is not supported without -E") - early_output_args, end_output_args = self.getOutputArgs(arglist, output) + output_args = self.getOutputArgs(arglist, output) + + # There is no need for this level of compatibility, but it + # makes diffing easier. + if (not arglist.getLastArg(arglist.parser.syntaxOnlyOption) and + not arglist.getLastArg(arglist.parser.SOption)): + early_output_args, end_output_args = [], output_args + else: + early_output_args, end_output_args = output_args, [] + if usePP: self.addCPPUniqueOptionsArgs(cmd_args, arch, arglist, inputs) self.addCC1OptionsArgs(cmd_args, arch, arglist, inputs, -- 2.40.0