ccc: Allow internal tool chain specific argument translation.
 - Pulled -Xarch processing into this.

 - Get rid of manual creation of forwarding arg array.

 - Use Darwin/CC1 instead of generic GCC cc1 on X86.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62172 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/ccc/ccclib/Tools.py b/tools/ccc/ccclib/Tools.py
index 989b472..1713a14 100644
--- a/tools/ccc/ccclib/Tools.py
+++ b/tools/ccc/ccclib/Tools.py
@@ -25,9 +25,14 @@
 
 class GCC_Common_Tool(Tool):
     def constructJob(self, phase, arch, jobs, inputs, 
-                     output, outputType, args, arglist,
+                     output, outputType, arglist,
                      extraArgs):
-        cmd_args = sum(map(arglist.render, args),[]) + extraArgs
+        cmd_args = []
+        for arg in arglist.args:
+            if arg.opt.forwardToGCC():
+                cmd_args.extend(arglist.render(arg))
+
+        cmd_args.extend(extraArgs)
         if arch:
             cmd_args.extend(arglist.render(arch))
         if isinstance(output, Jobs.PipedJob):
@@ -70,9 +75,9 @@
                                                   Tool.eFlagsPipedOutput))
 
     def constructJob(self, phase, arch, jobs, inputs, 
-                     output, outputType, args, arglist):
+                     output, outputType, arglist):
         return super(GCC_PreprocessTool, self).constructJob(phase, arch, jobs, inputs,
-                                                            output, outputType, args, arglist,
+                                                            output, outputType, arglist,
                                                             ['-E'])
 
 class GCC_CompileTool(GCC_Common_Tool):
@@ -83,9 +88,9 @@
                                                Tool.eFlagsIntegratedCPP))
 
     def constructJob(self, phase, arch, jobs, inputs, 
-                     output, outputType, args, arglist):
+                     output, outputType, arglist):
         return super(GCC_CompileTool, self).constructJob(phase, arch, jobs, inputs,
-                                                         output, outputType, args, arglist,
+                                                         output, outputType, arglist,
                                                          ['-S'])
 
 class GCC_PrecompileTool(GCC_Common_Tool):
@@ -95,9 +100,9 @@
                                                   Tool.eFlagsIntegratedCPP))
 
     def constructJob(self, phase, arch, jobs, inputs, 
-                     output, outputType, args, arglist):
+                     output, outputType, arglist):
         return super(GCC_PrecompileTool, self).constructJob(phase, arch, jobs, inputs,
-                                                            output, outputType, args, arglist,
+                                                            output, outputType, arglist,
                                                             [])
 
 class Darwin_AssembleTool(Tool):
@@ -107,7 +112,7 @@
         self.toolChain = toolChain
 
     def constructJob(self, phase, arch, jobs, inputs, 
-                     output, outputType, args, arglist):
+                     output, outputType, arglist):
         assert len(inputs) == 1
         assert outputType is Types.ObjectType
 
@@ -152,9 +157,9 @@
         super(GCC_AssembleTool, self).__init__('gcc (as)')
 
     def constructJob(self, phase, arch, jobs, inputs, 
-                     output, outputType, args, arglist):
+                     output, outputType, arglist):
         return super(GCC_AssembleTool, self).constructJob(phase, arch, jobs, inputs,
-                                                          output, outputType, args, arglist,
+                                                          output, outputType, arglist,
                                                           ['-c'])
 
 class GCC_LinkTool(GCC_Common_Tool):
@@ -162,9 +167,9 @@
         super(GCC_LinkTool, self).__init__('gcc (ld)')
 
     def constructJob(self, phase, arch, jobs, inputs, 
-                     output, outputType, args, arglist):
+                     output, outputType, arglist):
         return super(GCC_LinkTool, self).constructJob(phase, arch, jobs, inputs,
-                                                      output, outputType, args, arglist,
+                                                      output, outputType, arglist,
                                                       [])
 
 class Darwin_X86_CompileTool(Tool):
@@ -217,7 +222,7 @@
         # FIXME: Remove mcpu=G4
         # FIXME: Remove mcpu=G5
 
-        if (arglist.getLastArg(arglist.parser.gOption) and
+        if (arglist.getLastArg(arglist.parser.gGroup) and
             not arglist.getLastArg(arglist.parser.f_noEliminateUnusedDebugSymbolsOption)):
             cmd_args.append('-feliminate-unused-debug-symbols')
 
@@ -231,7 +236,7 @@
         return os.path.splitext(self.getBaseInputName(inputs, arglist))[0]
 
     def constructJob(self, phase, arch, jobs, inputs, 
-                     output, outputType, args, arglist):
+                     output, outputType, arglist):
         inputType = inputs[0].type
         assert not [i for i in inputs if i.type != inputType]
 
@@ -705,7 +710,7 @@
         arglist.addLastArg(cmd_args, arglist.parser.MachOption)
 
     def constructJob(self, phase, arch, jobs, inputs,
-                     output, outputType, args, arglist):
+                     output, outputType, arglist):
         assert outputType is Types.ImageType
 
         # The logic here is derived from gcc's behavior; most of which
@@ -896,7 +901,7 @@
         super(LipoTool, self).__init__('lipo')
 
     def constructJob(self, phase, arch, jobs, inputs,
-                     output, outputType, args, arglist):
+                     output, outputType, arglist):
         assert outputType is Types.ImageType
 
         cmd_args = ['-create']