ccc: Add dummy Clang/Compile tool and use on Darwin/X86 for C files.
llvm-svn: 62204
This commit is contained in:
parent
4ba36fcc3f
commit
a63b7f396a
|
|
@ -29,6 +29,11 @@ class Driver(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.hostInfo = None
|
self.hostInfo = None
|
||||||
self.parser = Arguments.OptionParser()
|
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
|
# Host queries which can be forcibly over-riden by the user for
|
||||||
# testing purposes.
|
# testing purposes.
|
||||||
|
|
@ -80,8 +85,6 @@ class Driver(object):
|
||||||
|
|
||||||
# FIXME: How to handle override of host? ccc specific options?
|
# FIXME: How to handle override of host? ccc specific options?
|
||||||
# Abuse -b?
|
# Abuse -b?
|
||||||
self.cccHostBits = self.cccHostMachine = None
|
|
||||||
self.cccHostSystem = self.cccHostRelease = None
|
|
||||||
while argv and argv[0].startswith('-ccc-'):
|
while argv and argv[0].startswith('-ccc-'):
|
||||||
opt,argv = argv[0][5:],argv[1:]
|
opt,argv = argv[0][5:],argv[1:]
|
||||||
|
|
||||||
|
|
@ -89,6 +92,12 @@ class Driver(object):
|
||||||
cccPrintOptions = True
|
cccPrintOptions = True
|
||||||
elif opt == 'print-phases':
|
elif opt == 'print-phases':
|
||||||
cccPrintPhases = True
|
cccPrintPhases = True
|
||||||
|
elif opt == 'cxx':
|
||||||
|
self.cccCXX = True
|
||||||
|
elif opt == 'clang':
|
||||||
|
self.cccClang = True
|
||||||
|
elif opt == 'fallback':
|
||||||
|
self.cccFallback = True
|
||||||
elif opt == 'host-bits':
|
elif opt == 'host-bits':
|
||||||
self.cccHostBits,argv = argv[0],argv[1:]
|
self.cccHostBits,argv = argv[0],argv[1:]
|
||||||
elif opt == 'host-machine':
|
elif opt == 'host-machine':
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,8 @@ class DarwinHostInfo(HostInfo):
|
||||||
if arch in ('i386', 'x86_64'):
|
if arch in ('i386', 'x86_64'):
|
||||||
return ToolChain.Darwin_X86_ToolChain(self.driver,
|
return ToolChain.Darwin_X86_ToolChain(self.driver,
|
||||||
self.darwinVersion,
|
self.darwinVersion,
|
||||||
self.gccVersion)
|
self.gccVersion,
|
||||||
|
arch)
|
||||||
|
|
||||||
return ToolChain.Generic_GCC_ToolChain(self.driver)
|
return ToolChain.Generic_GCC_ToolChain(self.driver)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import Arguments
|
import Arguments
|
||||||
import Phases
|
import Phases
|
||||||
import Tools
|
import Tools
|
||||||
|
import Types
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
|
|
@ -42,12 +43,13 @@ class ToolChain(object):
|
||||||
return args
|
return args
|
||||||
|
|
||||||
class Darwin_X86_ToolChain(ToolChain):
|
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)
|
super(Darwin_X86_ToolChain, self).__init__(driver)
|
||||||
assert isinstance(darwinVersion, tuple) and len(darwinVersion) == 3
|
assert isinstance(darwinVersion, tuple) and len(darwinVersion) == 3
|
||||||
assert isinstance(gccVersion, tuple) and len(gccVersion) == 3
|
assert isinstance(gccVersion, tuple) and len(gccVersion) == 3
|
||||||
self.darwinVersion = darwinVersion
|
self.darwinVersion = darwinVersion
|
||||||
self.gccVersion = gccVersion
|
self.gccVersion = gccVersion
|
||||||
|
self.archName = archName
|
||||||
|
|
||||||
self.toolMap = {
|
self.toolMap = {
|
||||||
Phases.PreprocessPhase : Tools.GCC_PreprocessTool(),
|
Phases.PreprocessPhase : Tools.GCC_PreprocessTool(),
|
||||||
|
|
@ -57,6 +59,7 @@ class Darwin_X86_ToolChain(ToolChain):
|
||||||
Phases.LinkPhase : Tools.Darwin_X86_LinkTool(self),
|
Phases.LinkPhase : Tools.Darwin_X86_LinkTool(self),
|
||||||
Phases.LipoPhase : Tools.LipoTool(),
|
Phases.LipoPhase : Tools.LipoTool(),
|
||||||
}
|
}
|
||||||
|
self.clangTool = Tools.Clang_CompileTool()
|
||||||
|
|
||||||
def getToolChainDir(self):
|
def getToolChainDir(self):
|
||||||
return 'i686-apple-darwin%d/%s' % (self.darwinVersion[0],
|
return 'i686-apple-darwin%d/%s' % (self.darwinVersion[0],
|
||||||
|
|
@ -72,6 +75,13 @@ class Darwin_X86_ToolChain(ToolChain):
|
||||||
|
|
||||||
def selectTool(self, action):
|
def selectTool(self, action):
|
||||||
assert isinstance(action, Phases.JobAction)
|
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__]
|
return self.toolMap[action.phase.__class__]
|
||||||
|
|
||||||
def translateArgs(self, args, arch):
|
def translateArgs(self, args, arch):
|
||||||
|
|
|
||||||
|
|
@ -172,6 +172,19 @@ class GCC_LinkTool(GCC_Common_Tool):
|
||||||
output, outputType, arglist,
|
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):
|
class Darwin_X86_CompileTool(Tool):
|
||||||
def __init__(self, toolChain):
|
def __init__(self, toolChain):
|
||||||
super(Darwin_X86_CompileTool, self).__init__('cc1',
|
super(Darwin_X86_CompileTool, self).__init__('cc1',
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue