]> granicus.if.org Git - clang/commitdiff
ccc: Implement the rest of Darwin/Assembler argument translation.
authorDaniel Dunbar <daniel@zuster.org>
Mon, 12 Jan 2009 07:40:25 +0000 (07:40 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Mon, 12 Jan 2009 07:40:25 +0000 (07:40 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62081 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 0e8d05350da2df33b5e0f5c92eadd02584453ba2..c563f3b1fc3eaaedcbb0d0022505fd277e662c8f 100644 (file)
@@ -146,6 +146,9 @@ class ValueArg(Arg):
     def getValue(self, args):
         abstract
 
+    def getValues(self, args):
+        return [self.getValue(args)]
+
 class PositionalArg(ValueArg):
     """PositionalArg - A simple positional argument."""
 
@@ -262,6 +265,16 @@ class ArgList:
             if arg.opt is option:
                 yield arg
 
+    def getArgs2(self, optionA, optionB):
+        """getArgs2 - Iterate over all arguments for two options, in
+        the order they were specified."""
+        # As long as getArgs is efficient, we can easily make this
+        # efficient by iterating both at once and always taking the
+        # earlier arg.
+        for arg in self.args:
+            if arg.opt in (optionA, optionB):
+                yield arg
+
     def getLastArg(self, option):
         return self.lastArgs.get(option)
 
@@ -430,8 +443,8 @@ class OptionParser:
 
         # Blanket pass-through options.
 
-        self.addOption(CommaJoinedOption('-Wa,'))
-        self.addOption(SeparateOption('-Xassembler'))
+        self.WaOption = self.addOption(CommaJoinedOption('-Wa,'))
+        self.XassemblerOption = self.addOption(SeparateOption('-Xassembler'))
 
         self.addOption(CommaJoinedOption('-Wp,'))
         self.addOption(SeparateOption('-Xpreprocessor'))
@@ -600,8 +613,12 @@ class OptionParser:
         # FIXME: Naming convention.
         self.dOption = self.addOption(FlagOption('-d'))
         self.addOption(JoinedOption('-d'))
-        self.addOption(JoinedOption('-g'))
 
+        # Take care on extension, the Darwin assembler wants to add a
+        # flag for any -g* option.
+        self.gOption = self.addOption(JoinedOption('-g'))
+
+        self.f_appleKextOption = self.addOption(FlagOption('-fapple-kext'))
         self.f_exceptionsOption = self.addOption(FlagOption('-fexceptions'))
         self.f_objcOption = self.addOption(FlagOption('-fobjc'))
         self.f_openmpOption = self.addOption(FlagOption('-fopenmp'))
@@ -619,6 +636,7 @@ class OptionParser:
         self.m_64Option = self.addOption(FlagOption('-m64'))
         self.m_iphoneosVersionMinOption = self.addOption(JoinedOption('-miphoneos-version-min='))
         self.m_macosxVersionMinOption = self.addOption(JoinedOption('-mmacosx-version-min='))
+        self.m_kernelOption = self.addOption(FlagOption('-mkernel'))
 
         # Ugh. Need to disambiguate our naming convetion. -m x goes to
         # the linker sometimes, wheres -mxxxx is used for a variety of
index 7f3b0cf6300512fef5da056b534888bc363204a5..a9209821488851117a1c7be9af7e9d27327e0d42 100644 (file)
@@ -112,14 +112,32 @@ class DarwinAssembleTool(Tool):
         input = inputs[0]
 
         cmd_args = []
+        
+        if arglist.getLastArg(arglist.parser.gOption):
+            cmd_args.append('--gstabs')
+
+        # Derived from asm spec.
         if arch:
             cmd_args.extend(arglist.render(arch))
         cmd_args.append('-force_cpusubtype_ALL')
         cmd_args.extend(arglist.render(output))
+        if (arglist.getLastArg(arglist.parser.m_kernelOption) or
+            arglist.getLastArg(arglist.parser.staticOption) or
+            arglist.getLastArg(arglist.parser.f_appleKextOption)):
+            if not arglist.getLastArg(arglist.parser.ZdynamicOption):
+                cmd_args.append('-static')
+
+        for arg in arglist.getArgs2(arglist.parser.WaOption,
+                                    arglist.parser.XassemblerOption):
+            cmd_args.extend(arglist.getValues(arg))
+
         if isinstance(input.source, Jobs.PipedJob):
             cmd_args.append('-')
         else:
             cmd_args.extend(arglist.renderAsInput(input.source))
+            
+        # asm_final spec is empty.
+
         jobs.addJob(Jobs.Command('as', cmd_args))
 
 class GCC_AssembleTool(GCC_Common_Tool):