|
- #!/usr/bin/env python3
-
- import re
- import os
-
- generic = {
- '7' : 'arm7',
- '8' : 'arm8',
- '9' : 'arm9tdmi',
- 'a' : 'arm10e',
- 'b' : 'mpcore'
- }
-
- specific = {
- '810' : 'arm810',
- '8xx' : 'arm8',
- '920' : 'arm920t',
- '922' : 'arm922t',
- '946' : 'arm946e-s',
- '926' : 'arm926ej-s',
- '966' : 'arm966e-s',
- '968' : 'arm968e-s',
- '940' : 'arm940e',
- '9xx' : 'arm9tdmi',
- 'a20' : 'arm1020e',
- 'a22' : 'arm1022e',
- 'a26' : 'arm1026ej-s',
- 'axx' : 'arm10e',
- 'b36' : 'arm1136j-s',
- 'b56' : 'arm1156t2-s',
- 'b76' : 'arm1176jz-s',
- 'bxx' : 'mpcore',
- 'c05' : 'cortex-a5',
- 'c07' : 'cortex-a7',
- 'c08' : 'cortex-a8',
- 'c09' : 'cortex-a9',
- 'c0d' : 'cortex-a12',
- 'c0f' : 'cortex-a15',
- 'c0e' : 'cortex-a17',
- 'd01' : 'cortex-a32',
- 'd04' : 'cortex-a35',
- 'd03' : 'cortex-a53',
- 'd05' : 'cortex-a55',
- 'd07' : 'cortex-a57',
- 'd08' : 'cortex-a72',
- 'd09' : 'cortex-a73',
- 'd0a' : 'cortex-a75',
- 'c14' : 'cortex-r4',
- 'c15' : 'cortex-r5',
- 'c17' : 'cortex-r7',
- 'c18' : 'cortex-r8',
- 'd21' : 'cortex-m33',
- 'd20' : 'cortex-m23',
- 'c20' : 'cortex-m7',
- 'c24' : 'cortex-m4',
- 'c23' : 'cortex-m3',
- 'c21' : 'cortex-m1',
- 'c20' : 'cortex-m0',
- 'c60' : 'cortex-m0plus'
- }
-
-
- class CPUInfo(object):
-
- ARM='arm'
- Intel='x86'
- Generic='generic'
-
-
- def __init__(self):
- self.architecture=os.uname().machine
- if re.match('arm',self.architecture): self.chip=CPUInfo.ARM
- elif re.match('x86',self.architecture): self.chip=CPUInfo.Intel
- else : self.chip=CPUInfo.Generic
-
- with open('/proc/cpuinfo','r') as proc:
- lines=[l for l in proc]
-
- self.lines=[re.sub('\s+',' ',l) for l in lines]
- f=[re.match('(?:Features|flags) . ([\w ]+)$',l) for l in self.lines]
- f=[m.groups(0)[0] for m in f if m is not None]
- self.features=set()
- for line in f : self.features.update(line.strip().split(' '))
-
- if self.chip==CPUInfo.ARM:
- c=[re.match('CPU part\s:\s+0x([0-9a-f]+)',l) for l in self.lines]
- self.cpu={m.groups(0)[0] for m in c if m is not None}.pop()
- self.model=specific.get(self.cpu,generic.get(self.cpu,'generic'))
- else:
- self.cpu=None
- self.model='generic'
-
-
- def __getitem__(self,key):
- return key in self.features
-
- @property
- def fpuFlags(self):
- if self.chip==CPUInfo.Intel:
- if self['sse'] or self['sse2']:
- return ['-msse','-mfpmath=sse']
- return []
- elif self.chip==CPUInfo.ARM:
- f=[]
- if self['neon']: f=['-mfpu=neon-fp-armv8','-mneon-for-64bits']
- elif self['vfpv4']: f=['-mfpu=neon-vfpv4']
- elif self['vfpv3']: f=['-mfpu=neon-vpfv3']
- elif self['vfpv3d16']: f=['-mfpu=vfpv3-d16']
- elif self['vfp'] or self['vfpv2'] or self['vfpd32']: f=['-mfpu=vfp']
- f.append('-mfloat-abi=hard')
- return f
- else:
- return []
-
- @property
- def modelFlags(self):
- if self.chip==CPUInfo.ARM:
- if self.model=='generic': return ['-mtune=generic']
- else: return ['-mcpu={}'.format(self.model),'-mtune={}'.format(self.model)]
- else:
- return ['-mtune=generic']
-
- @property
- def flags(self):
- f=self.modelFlags
- f.extend(self.fpuFlags)
- return f
-
- try:
- c=CPUInfo()
- print(' '.join(c.flags))
- except Exception as e:
- print('Error : {}'.format(e))
-
-
-
-
-
|