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),