1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
|
# http://developer.intel.com/software/products/compilers/flin/
import os
import sys
from cpuinfo import cpu
from fcompiler import FCompiler, dummy_fortran_file
from exec_command import find_executable
class IntelFCompiler(FCompiler):
compiler_type = 'intel'
version_pattern = r'Intel\(R\) Fortran Compiler for 32-bit '\
'applications, Version (?P<version>[^\s*]*)'
for fc_exe in map(find_executable,['ifort','ifc']):
if os.path.isfile(fc_exe):
break
executables = {
'version_cmd' : [fc_exe, "-FI -V -c %(fname)s.f -o %(fname)s.o" \
% {'fname':dummy_fortran_file()}],
'compiler_f77' : [fc_exe,"-72","-w90","-w95"],
'compiler_fix' : [fc_exe,"-FI"],
'compiler_f90' : [fc_exe],
'linker_so' : [fc_exe,"-shared"],
'archiver' : ["ar", "-cr"],
'ranlib' : ["ranlib"]
}
pic_flags = ['-KPIC']
module_dir_switch = '-module ' # Don't remove ending space!
module_include_switch = '-I'
def get_flags(self):
opt = self.pic_flags + ["-cm"]
return opt
def get_flags_free(self):
return ["-FR"]
def get_flags_opt(self):
return ['-O3','-unroll']
def get_flags_arch(self):
opt = []
if cpu.has_fdiv_bug():
opt.append('-fdiv_check')
if cpu.has_f00f_bug():
opt.append('-0f_check')
if cpu.is_PentiumPro() or cpu.is_PentiumII():
opt.extend(['-tpp6','-xi'])
elif cpu.is_PentiumIII():
opt.append('-tpp6')
elif cpu.is_Pentium():
opt.append('-tpp5')
elif cpu.is_PentiumIV() or cpu.is_XEON():
opt.extend(['-tpp7','-xW'])
if cpu.has_mmx():
opt.append('-xM')
return opt
def get_flags_linker_so(self):
opt = FCompiler.get_flags_linker_so(self)
v = self.get_version()
if v and v >= '8.0':
opt.append('-nofor_main')
return opt
class IntelItaniumFCompiler(IntelFCompiler):
compiler_type = 'intele'
version_pattern = r'Intel\(R\) Fortran 90 Compiler Itanium\(TM\) Compiler'\
' for the Itanium\(TM\)-based applications,'\
' Version (?P<version>[^\s*]*)'
for fc_exe in map(find_executable,['efort','efc','ifort']):
if os.path.isfile(fc_exe):
break
executables = {
'version_cmd' : [fc_exe, "-FI -V -c %(fname)s.f -o %(fname)s.o" \
% {'fname':dummy_fortran_file()}],
'compiler_f77' : [fc_exe,"-FI","-w90","-w95"],
'compiler_fix' : [fc_exe,"-FI"],
'compiler_f90' : [fc_exe],
'linker_so' : [fc_exe,"-shared"],
'archiver' : ["ar", "-cr"],
'ranlib' : ["ranlib"]
}
class IntelVisualFCompiler(FCompiler):
compiler_type = 'intelv'
version_pattern = r'Intel\(R\) Fortran Compiler for 32-bit applications, '\
'Version (?P<version>[^\s*]*)'
ar_exe = 'lib.exe'
fc_exe = 'ifl'
if sys.platform=='win32':
from distutils.msvccompiler import MSVCCompiler
ar_exe = MSVCCompiler().lib
executables = {
'version_cmd' : [fc_exe, "-FI -V -c %(fname)s.f -o %(fname)s.o" \
% {'fname':dummy_fortran_file()}],
'compiler_f77' : [fc_exe,"-FI","-w90","-w95"],
'compiler_fix' : [fc_exe,"-FI","-4L72","-w"],
'compiler_f90' : [fc_exe],
'linker_so' : [fc_exe,"-shared"],
'archiver' : [ar_exe, "/verbose", "/OUT:"],
'ranlib' : None
}
compile_switch = '/c '
object_switch = '/Fo' #No space after /Fo!
library_switch = '/OUT:' #No space after /OUT:!
module_dir_switch = '/module:' #No space after /module:
module_include_switch = '/I'
def get_flags(self):
opt = ['/nologo','/MD','/nbs','/Qlowercase','/us']
return opt
def get_flags_free(self):
return ["-FR"]
def get_flags_debug(self):
return ['/4Yb','/d2']
def get_flags_opt(self):
return ['/O3','/Qip','/Qipo','/Qipo_obj']
def get_flags_arch(self):
opt = []
if cpu.is_PentiumPro() or cpu.is_PentiumII():
opt.extend(['/G6','/Qaxi'])
elif cpu.is_PentiumIII():
opt.extend(['/G6','/QaxK'])
elif cpu.is_Pentium():
opt.append('/G5')
elif cpu.is_PentiumIV():
opt.extend(['/G7','/QaxW'])
if cpu.has_mmx():
opt.append('/QaxM')
return opt
class IntelItaniumVisualFCompiler(IntelVisualFCompiler):
compiler_type = 'intelev'
version_pattern = r'Intel\(R\) Fortran 90 Compiler Itanium\(TM\) Compiler'\
' for the Itanium\(TM\)-based applications,'\
' Version (?P<version>[^\s*]*)'
fc_exe = 'efl' # XXX this is a wild guess
ar_exe = IntelVisualFCompiler.ar_exe
executables = {
'version_cmd' : [fc_exe, "-FI -V -c %(fname)s.f -o %(fname)s.o" \
% {'fname':dummy_fortran_file()}],
'compiler_f77' : [fc_exe,"-FI","-w90","-w95"],
'compiler_fix' : [fc_exe,"-FI","-4L72","-w"],
'compiler_f90' : [fc_exe],
'linker_so' : [fc_exe,"-shared"],
'archiver' : [ar_exe, "/verbose", "/OUT:"],
'ranlib' : None
}
if __name__ == '__main__':
from distutils import log
log.set_verbosity(2)
from fcompiler import new_fcompiler
compiler = new_fcompiler(compiler='intel')
compiler.customize()
print compiler.get_version()
|