ccc: (Darwin) Start implementing argument translation for
Darwin/Compile tool.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62085 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/ccc/ccclib/Tools.py b/tools/ccc/ccclib/Tools.py
index c850ef1..6edb2a3 100644
--- a/tools/ccc/ccclib/Tools.py
+++ b/tools/ccc/ccclib/Tools.py
@@ -1,3 +1,4 @@
+import os
import sys # FIXME: Shouldn't be needed.
import Arguments
@@ -114,7 +115,8 @@
cmd_args = []
- if arglist.getLastArg(arglist.parser.gOption):
+ if (arglist.getLastArg(arglist.parser.gOption) or
+ arglist.getLastArg(arglist.parser.g3Option)):
cmd_args.append('--gstabs')
# Derived from asm spec.
@@ -164,6 +166,159 @@
output, outputType, args, arglist,
[])
+class Darwin_X86_CompileTool(Tool):
+ def __init__(self, toolChain):
+ super(Darwin_X86_CompileTool, self).__init__('cc1',
+ (Tool.eFlagsPipedInput |
+ Tool.eFlagsPipedOutput |
+ Tool.eFlagsIntegratedCPP))
+ self.toolChain = toolChain
+
+ def constructJob(self, phase, arch, jobs, inputs,
+ output, outputType, args, arglist):
+ inputType = inputs[0].type
+ assert not [i for i in inputs if i.type != inputType]
+
+ usePP = False
+ if inputType is Types.CType:
+ cc1Name = 'cc1'
+ usePP = True
+ elif inputType is Types.CTypeNoPP:
+ cc1Name = 'cc1'
+ usePP = False
+ elif inputType is Types.ObjCType:
+ cc1Name = 'cc1obj'
+ usePP = True
+ elif inputType is Types.ObjCTypeNoPP:
+ cc1Name = 'cc1obj'
+ usePP = False
+ elif inputType is Types.CXXType:
+ cc1Name = 'cc1plus'
+ usePP = True
+ elif inputType is Types.CXXTypeNoPP:
+ cc1Name = 'cc1plus'
+ usePP = False
+ elif inputType is Types.ObjCXXType:
+ cc1Name = 'cc1objplus'
+ usePP = True
+ elif inputType is Types.ObjCXXTypeNoPP:
+ cc1Name = 'cc1objplus'
+ usePP = False
+ else:
+ raise RuntimeError,"Unexpected input type for Darwin compile tool."
+
+ cmd_args = []
+ if (arglist.getLastArg(arglist.parser.traditionalOption) or
+ arglist.getLastArg(arglist.parser.f_traditionalOption)):
+ raise ValueError,"-traditional is not supported without -E"
+
+ if usePP:
+ # Derived from cpp_unique_options.
+
+ if (arglist.getLastArg(arglist.parser.COption) or
+ arglist.getLastArg(arglist.parser.CCOption)):
+ if not arglist.getLastArg(arglist.parser.EOption):
+ raise ValueError,"-C or -CC is not supported without -E"
+ if not arglist.getLastArg(arglist.parser.QOption):
+ cmd_args.append('-quiet')
+ arglist.addAllArgs(cmd_args, arglist.parser.nostdincOption)
+ arglist.addLastArg(cmd_args, arglist.parser.vOption)
+ arglist.addAllArgs2(cmd_args, arglist.parser.IOption, arglist.parser.FOption)
+ arglist.addLastArg(cmd_args, arglist.parser.POption)
+
+ # FIXME: Handle %I properly.
+ if arglist.getValue(arch) == 'x86_64':
+ cmd_args.append('-imultilib')
+ cmd_args.append('x86_64')
+
+ if arglist.getLastArg(arglist.parser.MDOption):
+ cmd_args.append('-MD')
+ outputOpt = arglist.getLastArg(arglist.parser.oOption)
+ if outputOpt:
+ base,ext = os.path.splitext(arglist.getValue(outputOpt))
+ cmd_args.append(base+'.d')
+ else:
+ # FIXME: Get correct basename.
+ cmd_args.append('FIXME.d')
+ if arglist.getLastArg(arglist.parser.MMDOption):
+ cmd_args.append('-MMD')
+ outputOpt = arglist.getLastArg(arglist.parser.oOption)
+ if outputOpt:
+ base,ext = os.path.splitext(arglist.getValue(outputOpt))
+ cmd_args.append(base+'.d')
+ else:
+ # FIXME: Get correct basename.
+ cmd_args.append('FIXME.d')
+ arglist.addLastArg(cmd_args, arglist.parser.MOption)
+ arglist.addLastArg(cmd_args, arglist.parser.MMOption)
+ arglist.addAllArgs(cmd_args, arglist.parser.MFOption)
+ arglist.addLastArg(cmd_args, arglist.parser.MGOption)
+ arglist.addLastArg(cmd_args, arglist.parser.MPOption)
+ arglist.addAllArgs(cmd_args, arglist.parser.MQOption)
+ arglist.addAllArgs(cmd_args, arglist.parser.MTOption)
+ if (not arglist.getLastArg(arglist.parser.MOption) and
+ not arglist.getLastArg(arglist.parser.MMOption) and
+ (arglist.getLastArg(arglist.parser.MDOption) or
+ arglist.getLastArg(arglist.parser.MMDOption))):
+ outputOpt = arglist.getLastArg(arglist.parser.oOption)
+ if outputOpt:
+ cmd_args.append('-MQ')
+ cmd_args.append(arglist.getValue(outputOpt))
+
+ arglist.addLastArg(cmd_args, arglist.parser.remapOption)
+ if arglist.getLastArg(arglist.parser.g3Option):
+ cmd_args.append('-dD')
+ arglist.addLastArg(cmd_args, arglist.parser.HOption)
+
+ # FIXME: %C
+
+ arglist.addAllArgs3(cmd_args,
+ arglist.parser.DOption,
+ arglist.parser.UOption,
+ arglist.parser.AOption)
+
+ # FIXME: Add i*
+
+ # FIXME: %Z
+
+ # FIXME: %i
+
+ if arglist.getLastArg(arglist.parser.f_mudflapOption):
+ cmd_args.append('-D_MUDFLAP')
+ cmd_args.append('-include')
+ cmd_args.append('mf-runtime.h')
+
+ if arglist.getLastArg(arglist.parser.f_mudflapthOption):
+ cmd_args.append('-D_MUDFLAP')
+ cmd_args.append('-D_MUDFLAPTH')
+ cmd_args.append('-include')
+ cmd_args.append('mf-runtime.h')
+ else:
+ cmd_args.append('-fpreprocessed')
+ # FIXME: There is a spec command to remove
+ # -fpredictive-compilation args here. Investigate.
+
+ # FIXME: cc1_options
+
+ if arch:
+ cmd_args.extend(arglist.render(arch))
+ if isinstance(output, Jobs.PipedJob):
+ cmd_args.extend(['-o', '-'])
+ elif output is None:
+ cmd_args.append('-fsyntax-only')
+ else:
+ cmd_args.extend(arglist.render(output))
+
+ for input in inputs:
+ if isinstance(input.source, Jobs.PipedJob):
+ cmd_args.append('-')
+ else:
+ cmd_args.extend(arglist.renderAsInput(input.source))
+
+ jobs.addJob(Jobs.Command(self.toolChain.getProgramPath(cc1Name),
+ cmd_args))
+
+
class Darwin_X86_LinkTool(Tool):
def __init__(self, toolChain):
super(Darwin_X86_LinkTool, self).__init__('collect2')
@@ -181,7 +336,7 @@
try:
return tuple(map(int, components))
except:
- raise ArgumentError,"invalid version number %r" % version
+ raise ValueError,"invalid version number %r" % version
else:
major,minor,minorminor = self.toolChain.darwinVersion
return (10, major-4, minor)