diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-01-14 01:03:36 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-01-14 01:03:36 +0000 |
commit | a63b7f396ab8167ca12d9bd65e9adc48e3b0408d (patch) | |
tree | a934b996e8d87e3be3cfecaf3b970dbaa403cf72 | |
parent | 4ba36fcc3f4a71f50844a76921fce61ea4618307 (diff) | |
download | bcm5719-llvm-a63b7f396ab8167ca12d9bd65e9adc48e3b0408d.tar.gz bcm5719-llvm-a63b7f396ab8167ca12d9bd65e9adc48e3b0408d.zip |
ccc: Add dummy Clang/Compile tool and use on Darwin/X86 for C files.
llvm-svn: 62204
-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', |