ccc: Recognize that -M and -MM only run preprocessor.
- Clean up some placement of output args to match gcc more precisely (for testing). llvm-svn: 62566
This commit is contained in:
parent
7dd97b12e7
commit
313e301574
|
@ -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))
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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,
|
||||
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,
|
||||
|
|
Loading…
Reference in New Issue