blob: db8dd0e414aa5ab6a753e731af1cb89f288a4ed2 [file] [log] [blame]
Daniel Dunbar43124722009-01-10 02:07:54 +00001import Phases
2import Tools
3
4###
5
6class ToolChain(object):
7 """ToolChain - Provide mappings of Actions to Tools."""
8
9 def __init__(self, driver):
10 self.driver = driver
11
12 def selectTool(self, action):
13 """selectTool - Return a Tool instance to use for handling
14 some particular action."""
15 abstract
16
Daniel Dunbar9c257c32009-01-12 04:21:12 +000017class Darwin_X86_ToolChain(ToolChain):
18 def __init__(self, driver, darwinVersion, gccVersion):
19 super(Darwin_X86_ToolChain, self).__init__(driver)
Daniel Dunbar43124722009-01-10 02:07:54 +000020 self.toolMap = {
21 Phases.PreprocessPhase : Tools.GCC_PreprocessTool(),
22 Phases.CompilePhase : Tools.GCC_CompileTool(),
23 Phases.PrecompilePhase : Tools.GCC_PrecompileTool(),
24 Phases.AssemblePhase : Tools.DarwinAssembleTool(),
Daniel Dunbar9c257c32009-01-12 04:21:12 +000025 Phases.LinkPhase : Tools.Darwin_X86_LinkTool(darwinVersion,
26 gccVersion),
Daniel Dunbar43124722009-01-10 02:07:54 +000027 Phases.LipoPhase : Tools.LipoTool(),
28 }
29
30 def selectTool(self, action):
31 assert isinstance(action, Phases.JobAction)
32 return self.toolMap[action.phase.__class__]
33
34class Generic_GCC_ToolChain(ToolChain):
35 """Generic_GCC_ToolChain - A tool chain using the 'gcc' command to
36 perform all subcommands; this relies on gcc translating the
37 options appropriately."""
38
39 def __init__(self, driver):
40 super(Generic_GCC_ToolChain, self).__init__(driver)
41 self.toolMap = {
42 Phases.PreprocessPhase : Tools.GCC_PreprocessTool(),
43 Phases.CompilePhase : Tools.GCC_CompileTool(),
44 Phases.PrecompilePhase : Tools.GCC_PrecompileTool(),
45 Phases.AssemblePhase : Tools.GCC_AssembleTool(),
46 Phases.LinkPhase : Tools.GCC_LinkTool(),
47 }
48
49 def selectTool(self, action):
50 assert isinstance(action, Phases.JobAction)
51 return self.toolMap[action.phase.__class__]