blob: 5f681495e1334bf4a67af05f8721a896838d6340 [file] [log] [blame]
Daniel Dunbar08dea462009-01-10 02:07:54 +00001import ToolChain
2
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +00003class HostInfo(object):
4 """HostInfo - Config information about a particular host which may
5 interact with driver behavior. This can be very different from the
6 target(s) of a particular driver invocation."""
7
Daniel Dunbar08dea462009-01-10 02:07:54 +00008 def __init__(self, driver):
9 self.driver = driver
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +000010
11 def getArchName(self):
12 abstract
13
14 def useDriverDriver(self):
15 abstract
16
17# Darwin
18
19class DarwinHostInfo(HostInfo):
20 def useDriverDriver(self):
21 return True
22
Daniel Dunbar08dea462009-01-10 02:07:54 +000023 def getToolChain(self):
24 return ToolChain.Darwin_ToolChain(self.driver)
25
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +000026class DarwinPPCHostInfo(DarwinHostInfo):
27 def getArchName(self):
28 return 'ppc'
29
30class DarwinPPC_64HostInfo(DarwinHostInfo):
31 def getArchName(self):
32 return 'ppc64'
33
34class DarwinX86HostInfo(DarwinHostInfo):
35 def getArchName(self):
36 return 'i386'
37
38class DarwinX86_64HostInfo(DarwinHostInfo):
39 def getArchName(self):
40 return 'x86_64'
41
Daniel Dunbardbc9ee92009-01-09 22:21:24 +000042def getDarwinHostInfo(driver):
43 machine = driver.getHostMachine()
44 bits = driver.getHostBits()
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +000045 if machine == 'i386':
46 if bits == '32':
Daniel Dunbar08dea462009-01-10 02:07:54 +000047 return DarwinX86HostInfo(driver)
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +000048 if bits == '64':
Daniel Dunbar08dea462009-01-10 02:07:54 +000049 return DarwinX86_64HostInfo(driver)
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +000050 elif machine == 'ppc':
51 if bits == '32':
Daniel Dunbar08dea462009-01-10 02:07:54 +000052 return DarwinPPCHostInfo(driver)
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +000053 if bits == '64':
Daniel Dunbar08dea462009-01-10 02:07:54 +000054 return DarwinPPC_64HostInfo(driver)
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +000055
Daniel Dunbardbc9ee92009-01-09 22:21:24 +000056 raise RuntimeError,'Unrecognized Darwin platform: %r:%r' % (machine, bits)
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +000057
58# Unknown
59
60class UnknownHostInfo(HostInfo):
61 def getArchName(self):
62 raise RuntimeError,'getArchName() unsupported on unknown host.'
63
64 def useDriverDriver(self):
65 return False
66
Daniel Dunbar08dea462009-01-10 02:07:54 +000067 def getToolChain(self):
68 return ToolChain.Generic_GCC_ToolChain(self.driver)
69
Daniel Dunbardbc9ee92009-01-09 22:21:24 +000070def getUnknownHostInfo(driver):
Daniel Dunbar08dea462009-01-10 02:07:54 +000071 return UnknownHostInfo(driver)
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +000072
73####
74
75kSystems = {
76 'darwin' : getDarwinHostInfo,
77 'unknown' : getUnknownHostInfo,
78 }
79
Daniel Dunbardbc9ee92009-01-09 22:21:24 +000080def getHostInfo(driver):
81 system = driver.getHostSystemName()
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +000082 handler = kSystems.get(system)
83 if handler:
Daniel Dunbardbc9ee92009-01-09 22:21:24 +000084 return handler(driver)
Daniel Dunbar4ed45ea2009-01-09 01:00:40 +000085
86 driver.warning('Unknown host %r, using generic host information.' % system)
Daniel Dunbar08dea462009-01-10 02:07:54 +000087 return UnknownHostInfo(driver)