diff options
| -rw-r--r-- | clang/tools/ccc/ccclib/Driver.py | 13 | ||||
| -rw-r--r-- | clang/tools/ccc/ccclib/HostInfo.py | 3 | ||||
| -rw-r--r-- | clang/tools/ccc/ccclib/ToolChain.py | 12 | ||||
| -rw-r--r-- | clang/tools/ccc/ccclib/Tools.py | 13 | 
4 files changed, 37 insertions, 4 deletions
diff --git a/clang/tools/ccc/ccclib/Driver.py b/clang/tools/ccc/ccclib/Driver.py index 429142cb669..5d73a985aad 100644 --- a/clang/tools/ccc/ccclib/Driver.py +++ b/clang/tools/ccc/ccclib/Driver.py @@ -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': diff --git a/clang/tools/ccc/ccclib/HostInfo.py b/clang/tools/ccc/ccclib/HostInfo.py index d976138eec0..7c94cbaf50c 100644 --- a/clang/tools/ccc/ccclib/HostInfo.py +++ b/clang/tools/ccc/ccclib/HostInfo.py @@ -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) diff --git a/clang/tools/ccc/ccclib/ToolChain.py b/clang/tools/ccc/ccclib/ToolChain.py index 1cb55fa2cfe..13dc114a97b 100644 --- a/clang/tools/ccc/ccclib/ToolChain.py +++ b/clang/tools/ccc/ccclib/ToolChain.py @@ -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): diff --git a/clang/tools/ccc/ccclib/Tools.py b/clang/tools/ccc/ccclib/Tools.py index bc10081dc10..f47d3aa6a5b 100644 --- a/clang/tools/ccc/ccclib/Tools.py +++ b/clang/tools/ccc/ccclib/Tools.py @@ -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',  | 

