blob: a12d57295c279c3bae24ae41ee6cf60cccf56fa8 [file] [log] [blame]
Daniel Dunbar43124722009-01-10 02:07:54 +00001import ToolChain
2
Daniel Dunbar9066af82009-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 Dunbar43124722009-01-10 02:07:54 +00008 def __init__(self, driver):
9 self.driver = driver
Daniel Dunbar9066af82009-01-09 01:00:40 +000010
11 def getArchName(self):
12 abstract
13
14 def useDriverDriver(self):
15 abstract
16
Daniel Dunbarbee1f0d2009-01-11 22:06:22 +000017 def getToolChain(self):
18 abstract
19
20 def getToolChainForArch(self, arch):
21 raise RuntimeError,"getToolChainForArch() unsupported on this host."
22
Daniel Dunbar9066af82009-01-09 01:00:40 +000023# Darwin
24
25class DarwinHostInfo(HostInfo):
26 def useDriverDriver(self):
27 return True
28
Daniel Dunbar43124722009-01-10 02:07:54 +000029 def getToolChain(self):
Daniel Dunbarbee1f0d2009-01-11 22:06:22 +000030 return self.getToolChainForArch(self.getArchName())
31
32 def getToolChainForArch(self, arch):
33 if arch in ('i386', 'x86_64'):
Daniel Dunbar9c199a02009-01-11 23:13:15 +000034 return ToolChain.Darwin10_X86_ToolChain(self.driver)
Daniel Dunbarbee1f0d2009-01-11 22:06:22 +000035
36 return ToolChain.Generic_GCC_ToolChain(self.driver)
Daniel Dunbar43124722009-01-10 02:07:54 +000037
Daniel Dunbar9066af82009-01-09 01:00:40 +000038class DarwinPPCHostInfo(DarwinHostInfo):
39 def getArchName(self):
40 return 'ppc'
41
42class DarwinPPC_64HostInfo(DarwinHostInfo):
43 def getArchName(self):
44 return 'ppc64'
45
46class DarwinX86HostInfo(DarwinHostInfo):
47 def getArchName(self):
48 return 'i386'
49
50class DarwinX86_64HostInfo(DarwinHostInfo):
51 def getArchName(self):
52 return 'x86_64'
53
Daniel Dunbara75ea3d2009-01-09 22:21:24 +000054def getDarwinHostInfo(driver):
55 machine = driver.getHostMachine()
56 bits = driver.getHostBits()
Daniel Dunbar9066af82009-01-09 01:00:40 +000057 if machine == 'i386':
58 if bits == '32':
Daniel Dunbar43124722009-01-10 02:07:54 +000059 return DarwinX86HostInfo(driver)
Daniel Dunbar9066af82009-01-09 01:00:40 +000060 if bits == '64':
Daniel Dunbar43124722009-01-10 02:07:54 +000061 return DarwinX86_64HostInfo(driver)
Daniel Dunbar9066af82009-01-09 01:00:40 +000062 elif machine == 'ppc':
63 if bits == '32':
Daniel Dunbar43124722009-01-10 02:07:54 +000064 return DarwinPPCHostInfo(driver)
Daniel Dunbar9066af82009-01-09 01:00:40 +000065 if bits == '64':
Daniel Dunbar43124722009-01-10 02:07:54 +000066 return DarwinPPC_64HostInfo(driver)
Daniel Dunbar9066af82009-01-09 01:00:40 +000067
Daniel Dunbara75ea3d2009-01-09 22:21:24 +000068 raise RuntimeError,'Unrecognized Darwin platform: %r:%r' % (machine, bits)
Daniel Dunbar9066af82009-01-09 01:00:40 +000069
70# Unknown
71
72class UnknownHostInfo(HostInfo):
73 def getArchName(self):
74 raise RuntimeError,'getArchName() unsupported on unknown host.'
75
76 def useDriverDriver(self):
77 return False
78
Daniel Dunbar43124722009-01-10 02:07:54 +000079 def getToolChain(self):
80 return ToolChain.Generic_GCC_ToolChain(self.driver)
81
Daniel Dunbara75ea3d2009-01-09 22:21:24 +000082def getUnknownHostInfo(driver):
Daniel Dunbar43124722009-01-10 02:07:54 +000083 return UnknownHostInfo(driver)
Daniel Dunbar9066af82009-01-09 01:00:40 +000084
85####
86
87kSystems = {
88 'darwin' : getDarwinHostInfo,
89 'unknown' : getUnknownHostInfo,
90 }
91
Daniel Dunbara75ea3d2009-01-09 22:21:24 +000092def getHostInfo(driver):
93 system = driver.getHostSystemName()
Daniel Dunbar9066af82009-01-09 01:00:40 +000094 handler = kSystems.get(system)
95 if handler:
Daniel Dunbara75ea3d2009-01-09 22:21:24 +000096 return handler(driver)
Daniel Dunbar9066af82009-01-09 01:00:40 +000097
98 driver.warning('Unknown host %r, using generic host information.' % system)
Daniel Dunbar43124722009-01-10 02:07:54 +000099 return UnknownHostInfo(driver)