ccc: Darwin: Implement some important general argument translations
for the Darwin tool chain.
 - Ideally we would localize these to tool specific argument
   processing but for now this matches gcc closely.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62181 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/ccc/ccclib/ToolChain.py b/tools/ccc/ccclib/ToolChain.py
index 07ac926..1cb55fa 100644
--- a/tools/ccc/ccclib/ToolChain.py
+++ b/tools/ccc/ccclib/ToolChain.py
@@ -74,6 +74,46 @@
         assert isinstance(action, Phases.JobAction)
         return self.toolMap[action.phase.__class__]
 
+    def translateArgs(self, args, arch):
+        args = super(Darwin_X86_ToolChain, self).translateArgs(args, arch)
+        
+        # If arch hasn't been bound we don't need to do anything yet.
+        if not arch:
+            return args
+
+        al = Arguments.DerivedArgList(args)
+        if not args.getLastArg(args.parser.m_macosxVersionMinOption):
+            al.append(al.makeJoinedArg(self.getMacosxVersionMin(),
+                                       args.parser.m_macosxVersionMinOption))
+        for arg in args:
+            if arg.opt is args.parser.f_constantCfstringsOption:
+                al.append(al.makeFlagArg(args.parser.m_constantCfstringsOption))
+            elif arg.opt is args.parser.f_noConstantCfstringsOption:
+                al.append(al.makeFlagArg(args.parser.m_noConstantCfstringsOption))
+            elif arg.opt is args.parser.WnonportableCfstringsOption:
+                al.append(al.makeFlagArg(args.parser.m_warnNonportableCfstringsOption))
+            elif arg.opt is args.parser.WnoNonportableCfstringsOption:
+                al.append(al.makeFlagArg(args.parser.m_noWarnNonportableCfstringsOption))
+            elif arg.opt is args.parser.f_pascalStringsOption:
+                al.append(al.makeFlagArg(args.parser.m_pascalStringsOption))
+            elif arg.opt is args.parser.f_noPascalStringsOption:
+                al.append(al.makeFlagArg(args.parser.m_noPascalStringsOption))
+            else:
+                al.append(arg)
+
+        # FIXME: Actually, gcc always adds this, but it is filtered
+        # for duplicates somewhere. This also changes the order of
+        # things, so look it up.
+        if arch and args.getValue(arch) == 'x86_64':
+            if not args.getLastArg(args.parser.m_64Option):
+                al.append(al.makeFlagArg(args.parser.m_64Option))
+
+        if not args.getLastArg(args.parser.m_tuneOption):
+            al.append(al.makeJoinedArg('core2',
+                                       args.parser.m_tuneOption))
+
+        return al
+
 class Generic_GCC_ToolChain(ToolChain):
     """Generic_GCC_ToolChain - A tool chain using the 'gcc' command to
     perform all subcommands; this relies on gcc translating the