From: Daniel Dunbar Date: Wed, 14 Jan 2009 01:03:36 +0000 (+0000) Subject: ccc: Add dummy Clang/Compile tool and use on Darwin/X86 for C files. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=33a5d6136687359ad8d3d66872fb3e274e73a891;p=clang ccc: Add dummy Clang/Compile tool and use on Darwin/X86 for C files. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62204 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/ccc/ccclib/Driver.py b/tools/ccc/ccclib/Driver.py index 429142cb66..5d73a985aa 100644 --- a/tools/ccc/ccclib/Driver.py +++ b/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/tools/ccc/ccclib/HostInfo.py b/tools/ccc/ccclib/HostInfo.py index d976138eec..7c94cbaf50 100644 --- a/tools/ccc/ccclib/HostInfo.py +++ b/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/tools/ccc/ccclib/ToolChain.py b/tools/ccc/ccclib/ToolChain.py index 1cb55fa2cf..13dc114a97 100644 --- a/tools/ccc/ccclib/ToolChain.py +++ b/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/tools/ccc/ccclib/Tools.py b/tools/ccc/ccclib/Tools.py index bc10081dc1..f47d3aa6a5 100644 --- a/tools/ccc/ccclib/Tools.py +++ b/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',