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/ToolChain.py b/tools/ccc/ccclib/ToolChain.py
index 698b1bf..07ac926 100644
--- a/tools/ccc/ccclib/ToolChain.py
+++ b/tools/ccc/ccclib/ToolChain.py
@@ -1,3 +1,4 @@
+import Arguments
 import Phases
 import Tools
 
@@ -14,6 +15,32 @@
         some particular action."""
         abstract
 
+    def translateArgs(self, args, arch):
+        """translateArgs - Callback to allow argument translation for
+        an entire toolchain."""
+
+        # FIXME: Would be nice to move arch handling out of generic
+        # code.
+        if arch:
+            archName = args.getValue(arch)
+            al = Arguments.DerivedArgList(args)
+            for arg in args.args:
+                if arg.opt is args.parser.archOption:
+                    if arg is arch:
+                        al.append(arg)
+                elif arg.opt is args.parser.XarchOption:
+                    if args.getJoinedValue(arg) == archName:
+                        # FIXME: Fix this.
+                        arg = args.parser.lookupOptForArg(Arguments.InputIndex(0, arg.index.pos + 1),
+                                                          args.getSeparateValue(arg),
+                                                          iter([]))
+                        al.append(arg)
+                else:
+                    al.append(arg)
+            return al
+        else:
+            return args
+
 class Darwin_X86_ToolChain(ToolChain):
     def __init__(self, driver, darwinVersion, gccVersion):
         super(Darwin_X86_ToolChain, self).__init__(driver)
@@ -24,7 +51,7 @@
 
         self.toolMap = {
             Phases.PreprocessPhase : Tools.GCC_PreprocessTool(),
-            Phases.CompilePhase : Tools.GCC_CompileTool(),
+            Phases.CompilePhase : Tools.Darwin_X86_CompileTool(self),
             Phases.PrecompilePhase : Tools.GCC_PrecompileTool(),
             Phases.AssemblePhase : Tools.Darwin_AssembleTool(self),
             Phases.LinkPhase : Tools.Darwin_X86_LinkTool(self),