]> granicus.if.org Git - clang/commitdiff
ccc: Add dummy Clang/Compile tool and use on Darwin/X86 for C files.
authorDaniel Dunbar <daniel@zuster.org>
Wed, 14 Jan 2009 01:03:36 +0000 (01:03 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 14 Jan 2009 01:03:36 +0000 (01:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62204 91177308-0d34-0410-b5e6-96231b3b80d8

tools/ccc/ccclib/Driver.py
tools/ccc/ccclib/HostInfo.py
tools/ccc/ccclib/ToolChain.py
tools/ccc/ccclib/Tools.py

index 429142cb669b1276b7ec6ce1696416ba84af46c9..5d73a985aad0b1b9c505e451d15b0d2279710d01 100644 (file)
@@ -29,6 +29,11 @@ class Driver(object):
     def __init__(self):
         self.hostInfo = None
         self.parser = Arguments.OptionParser()
+        self.cccHostBits = self.cccHostMachine = None
+        self.cccHostSystem = self.cccHostRelease = None
+        self.cccCXX = False
+        self.cccClang = False
+        self.cccFallback = False
 
     # Host queries which can be forcibly over-riden by the user for
     # testing purposes.
@@ -80,8 +85,6 @@ class Driver(object):
 
         # FIXME: How to handle override of host? ccc specific options?
         # Abuse -b?
-        self.cccHostBits = self.cccHostMachine = None
-        self.cccHostSystem = self.cccHostRelease = None
         while argv and argv[0].startswith('-ccc-'):
             opt,argv = argv[0][5:],argv[1:]
 
@@ -89,6 +92,12 @@ class Driver(object):
                 cccPrintOptions = True
             elif opt == 'print-phases':
                 cccPrintPhases = True
+            elif opt == 'cxx':
+                self.cccCXX = True
+            elif opt == 'clang':
+                self.cccClang = True
+            elif opt == 'fallback':
+                self.cccFallback = True
             elif opt == 'host-bits':
                 self.cccHostBits,argv = argv[0],argv[1:]
             elif opt == 'host-machine':
index d976138eec095738ec41362a3bd5875684644499..7c94cbaf50c42e585f83e8efdafe50e0048620a6 100644 (file)
@@ -44,7 +44,8 @@ class DarwinHostInfo(HostInfo):
         if arch in ('i386', 'x86_64'):
             return ToolChain.Darwin_X86_ToolChain(self.driver,
                                                   self.darwinVersion,
-                                                  self.gccVersion)
+                                                  self.gccVersion,
+                                                  arch)
 
         return ToolChain.Generic_GCC_ToolChain(self.driver)
 
index 1cb55fa2cfe705bdebdeb39b0fd368d71689bd60..13dc114a97b293493b6e61d08f30fa0ebd9ba2de 100644 (file)
@@ -1,6 +1,7 @@
 import Arguments
 import Phases
 import Tools
+import Types
 
 ###
 
@@ -42,12 +43,13 @@ class ToolChain(object):
             return args
 
 class Darwin_X86_ToolChain(ToolChain):
-    def __init__(self, driver, darwinVersion, gccVersion):
+    def __init__(self, driver, darwinVersion, gccVersion, archName):
         super(Darwin_X86_ToolChain, self).__init__(driver)
         assert isinstance(darwinVersion, tuple) and len(darwinVersion) == 3
         assert isinstance(gccVersion, tuple) and len(gccVersion) == 3
         self.darwinVersion = darwinVersion
         self.gccVersion = gccVersion
+        self.archName = archName
 
         self.toolMap = {
             Phases.PreprocessPhase : Tools.GCC_PreprocessTool(),
@@ -57,6 +59,7 @@ class Darwin_X86_ToolChain(ToolChain):
             Phases.LinkPhase : Tools.Darwin_X86_LinkTool(self),
             Phases.LipoPhase : Tools.LipoTool(),
             }
+        self.clangTool = Tools.Clang_CompileTool()
 
     def getToolChainDir(self):
         return 'i686-apple-darwin%d/%s' % (self.darwinVersion[0],
@@ -72,6 +75,13 @@ class Darwin_X86_ToolChain(ToolChain):
 
     def selectTool(self, action):
         assert isinstance(action, Phases.JobAction)
+        
+        if (self.driver.cccClang and
+            self.archName == 'i386' and
+            action.inputs[0].type in (Types.CType, Types.CTypeNoPP) and
+            isinstance(action.phase, Phases.CompilePhase)):
+            return self.clangTool
+
         return self.toolMap[action.phase.__class__]
 
     def translateArgs(self, args, arch):
index bc10081dc10dd1be65da71a9568336751f85e4b9..f47d3aa6a5b103283d853524efb5f05f9d72dc8a 100644 (file)
@@ -172,6 +172,19 @@ class GCC_LinkTool(GCC_Common_Tool):
                                                       output, outputType, arglist,
                                                       [])
 
+class Clang_CompileTool(GCC_Common_Tool):
+    def __init__(self):
+        super(Clang_CompileTool, self).__init__('clang',
+                                              (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'])
+
 class Darwin_X86_CompileTool(Tool):
     def __init__(self, toolChain):
         super(Darwin_X86_CompileTool, self).__init__('cc1',