]> granicus.if.org Git - clang/commitdiff
ccc: Implement argument translation for clang.
authorDaniel Dunbar <daniel@zuster.org>
Wed, 14 Jan 2009 01:50:15 +0000 (01:50 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 14 Jan 2009 01:50:15 +0000 (01:50 +0000)
 - This is what ccc (old) currently handles.

 - Clang accepts some more things that aren't getting forwarded...

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62210 91177308-0d34-0410-b5e6-96231b3b80d8

tools/ccc/ccclib/Arguments.py
tools/ccc/ccclib/Tools.py

index 9471e4fced88027dddb0f885705ab31e5fe9e08c..103bc70fe71c44fa95d1f1bcf2db8b491e4a646f 100644 (file)
@@ -727,7 +727,11 @@ class OptionParser:
         self.f_noEliminateUnusedDebugSymbolsOption = self.addOption(FlagOption('-fno-eliminate-unused-debug-symbols', self.fGroup))
         self.f_exceptionsOption = self.addOption(FlagOption('-fexceptions', self.fGroup))
         self.f_objcOption = self.addOption(FlagOption('-fobjc', self.fGroup))
+        self.f_objcGcOption = self.addOption(FlagOption('-fobjc-gc', self.fGroup))
+        self.f_objcGcOnlyOption = self.addOption(FlagOption('-fobjc-gc-only', self.fGroup))
         self.f_openmpOption = self.addOption(FlagOption('-fopenmp', self.fGroup))
+        self.f_gnuRuntimeOption = self.addOption(FlagOption('-fgnu-runtime', self.fGroup))
+        self.f_nextRuntimeOption = self.addOption(FlagOption('-fnext-runtime', self.fGroup))
         self.f_constantCfstringsOption = self.addOption(FlagOption('-fconstant-cfstrings', self.fGroup))
         self.f_noConstantCfstringsOption = self.addOption(FlagOption('-fno-constant-cfstrings', self.fGroup))
         self.f_pascalStringsOption = self.addOption(FlagOption('-fpascal-strings', self.fGroup))
index f47d3aa6a5b103283d853524efb5f05f9d72dc8a..26200f1b9fc8818fce98c61752fe811807c9b304 100644 (file)
@@ -172,18 +172,60 @@ class GCC_LinkTool(GCC_Common_Tool):
                                                       output, outputType, arglist,
                                                       [])
 
-class Clang_CompileTool(GCC_Common_Tool):
+class Clang_CompileTool(Tool):
     def __init__(self):
         super(Clang_CompileTool, self).__init__('clang',
-                                              (Tool.eFlagsPipedInput |
-                                               Tool.eFlagsPipedOutput |
-                                               Tool.eFlagsIntegratedCPP))
+                                   (Tool.eFlagsPipedInput |
+                                    Tool.eFlagsPipedOutput |
+                                    Tool.eFlagsIntegratedCPP))
 
     def constructJob(self, phase, arch, jobs, inputs, 
                      output, outputType, arglist):
-        return super(Clang_CompileTool, self).constructJob(phase, arch, jobs, inputs,
-                                                           output, outputType, arglist,
-                                                           ['-S'])
+        cmd_args = []
+
+        if output is None:
+            cmd_args.append('-fsyntax-only')
+        elif outputType is Types.AsmTypeNoPP:
+            cmd_args.append('-S')
+        else:
+            raise ValueError,"Unexpected output type for clang tool."
+
+        arglist.addAllArgs(cmd_args, arglist.parser.vOption)
+        arglist.addAllArgs(cmd_args, arglist.parser.f_objcGcOption)
+        arglist.addAllArgs(cmd_args, arglist.parser.f_objcGcOnlyOption)
+        arglist.addAllArgs(cmd_args, arglist.parser.f_nextRuntimeOption)
+        arglist.addAllArgs(cmd_args, arglist.parser.f_gnuRuntimeOption)
+        arglist.addAllArgs2(cmd_args, arglist.parser.DOption, arglist.parser.UOption)
+        arglist.addAllArgs2(cmd_args, arglist.parser.IOption, arglist.parser.FOption)
+        arglist.addAllArgs(cmd_args, arglist.parser.stdOption)
+        arglist.addAllArgs(cmd_args, arglist.parser.m_macosxVersionMinOption)
+
+        # Special case debug options to only pass -g to clang. This is
+        # wrong.
+        if arglist.getLastArg(arglist.parser.gGroup):
+            cmd_args.append('-g')
+
+        # FIXME: Clang isn't going to accept just anything here.
+        arglist.addAllArgs(cmd_args, arglist.parser.iGroup)
+
+        # FIXME: Dehardcode this.
+        cmd_args.append('-fblocks')
+
+        if arch is not None:
+            cmd_args.extend(arglist.render(arch))
+
+        cmd_args.extend(arglist.render(output))
+
+        for input in inputs:
+            cmd_args.append('-x')
+            cmd_args.append(input.type.name)
+            if isinstance(input.source, Jobs.PipedJob):
+                cmd_args.append('-')
+            else:
+                cmd_args.extend(arglist.renderAsInput(input.source))
+            
+        jobs.addJob(Jobs.Command('clang', cmd_args))
+        
 
 class Darwin_X86_CompileTool(Tool):
     def __init__(self, toolChain):