1from numpy.distutils.cpuinfo import cpu
2from numpy.distutils.fcompiler import FCompiler
3
4compilers = ['MIPSFCompiler']
5
6class MIPSFCompiler(FCompiler):
7
8    compiler_type = 'mips'
9    description = 'MIPSpro Fortran Compiler'
10    version_pattern =  r'MIPSpro Compilers: Version (?P<version>[^\s*,]*)'
11
12    executables = {
13        'version_cmd'  : ["<F90>", "-version"],
14        'compiler_f77' : ["f77", "-f77"],
15        'compiler_fix' : ["f90", "-fixedform"],
16        'compiler_f90' : ["f90"],
17        'linker_so'    : ["f90", "-shared"],
18        'archiver'     : ["ar", "-cr"],
19        'ranlib'       : None
20        }
21    module_dir_switch = None #XXX: fix me
22    module_include_switch = None #XXX: fix me
23    pic_flags = ['-KPIC']
24
25    def get_flags(self):
26        return self.pic_flags + ['-n32']
27    def get_flags_opt(self):
28        return ['-O3']
29    def get_flags_arch(self):
30        opt = []
31        for a in '19 20 21 22_4k 22_5k 24 25 26 27 28 30 32_5k 32_10k'.split():
32            if getattr(cpu, 'is_IP%s'%a)():
33                opt.append('-TARG:platform=IP%s' % a)
34                break
35        return opt
36    def get_flags_arch_f77(self):
37        r = None
38        if cpu.is_r10000(): r = 10000
39        elif cpu.is_r12000(): r = 12000
40        elif cpu.is_r8000(): r = 8000
41        elif cpu.is_r5000(): r = 5000
42        elif cpu.is_r4000(): r = 4000
43        if r is not None:
44            return ['r%s' % (r)]
45        return []
46    def get_flags_arch_f90(self):
47        r = self.get_flags_arch_f77()
48        if r:
49            r[0] = '-' + r[0]
50        return r
51
52if __name__ == '__main__':
53    from numpy.distutils import customized_fcompiler
54    print(customized_fcompiler(compiler='mips').get_version())
55