forked from 3rdparty/wrf-python
11 changed files with 286 additions and 17 deletions
@ -0,0 +1,17 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
cd ../fortran/build_help |
||||||
|
ifort -o sizes -qopenmp omp_sizes.f90 |
||||||
|
python sub_sizes.py |
||||||
|
|
||||||
|
cd .. |
||||||
|
ifort ompgen.F90 -qopenmp -fpp -save-temps > /dev/null 2>&1 |
||||||
|
mv ompgen.i90 omp.f90 |
||||||
|
f2py *.f90 -m _wrffortran -h wrffortran.pyf --overwrite-signature |
||||||
|
cd .. |
||||||
|
|
||||||
|
python setup.py clean --all |
||||||
|
python setup.py config_fc --f90flags="-xHost -mkl -qopenmp" build_ext --rpath="/glade/u/apps/opt/intel/2017u1/compilers_and_libraries/linux/lib/intel64_lin:/glade/u/apps/opt/intel/2017u1/compilers_and_libraries/linux/mkl/lib/intel64_lin" --library-dirs="/glade/u/apps/opt/intel/2017u1/compilers_and_libraries/linux/lib/intel64_lin:/glade/u/apps/opt/intel/2017u1/compilers_and_libraries/linux/mkl/lib/intel64_lin" --libraries="mkl_intel_ilp64 mkl_intel_thread mkl_core iomp5 pthread m dl" build --compiler=intelem --fcompiler=intelem bdist_wheel |
||||||
|
|
||||||
|
#pip install . |
||||||
|
|
@ -0,0 +1,219 @@ |
|||||||
|
# http://developer.intel.com/software/products/compilers/flin/ |
||||||
|
from __future__ import division, absolute_import, print_function |
||||||
|
|
||||||
|
import sys |
||||||
|
|
||||||
|
from numpy.distutils.ccompiler import simple_version_match |
||||||
|
from numpy.distutils.fcompiler import FCompiler, dummy_fortran_file |
||||||
|
|
||||||
|
compilers = ['IntelFCompiler', 'IntelVisualFCompiler', |
||||||
|
'IntelItaniumFCompiler', 'IntelItaniumVisualFCompiler', |
||||||
|
'IntelEM64VisualFCompiler', 'IntelEM64TFCompiler'] |
||||||
|
|
||||||
|
|
||||||
|
def intel_version_match(type): |
||||||
|
# Match against the important stuff in the version string |
||||||
|
return simple_version_match(start=r'Intel.*?Fortran.*?(?:%s).*?Version' % (type,)) |
||||||
|
|
||||||
|
|
||||||
|
class BaseIntelFCompiler(FCompiler): |
||||||
|
def update_executables(self): |
||||||
|
f = dummy_fortran_file() |
||||||
|
self.executables['version_cmd'] = ['<F77>', '-FI', '-V', '-c', |
||||||
|
f + '.f', '-o', f + '.o'] |
||||||
|
|
||||||
|
def runtime_library_dir_option(self, dir): |
||||||
|
return '-Wl,-rpath="%s"' % dir |
||||||
|
|
||||||
|
|
||||||
|
class IntelFCompiler(BaseIntelFCompiler): |
||||||
|
|
||||||
|
compiler_type = 'intel' |
||||||
|
compiler_aliases = ('ifort',) |
||||||
|
description = 'Intel Fortran Compiler for 32-bit apps' |
||||||
|
version_match = intel_version_match('32-bit|IA-32') |
||||||
|
|
||||||
|
possible_executables = ['ifort', 'ifc'] |
||||||
|
|
||||||
|
executables = { |
||||||
|
'version_cmd' : None, # set by update_executables |
||||||
|
'compiler_f77' : [None, "-72", "-w90", "-w95"], |
||||||
|
'compiler_f90' : [None], |
||||||
|
'compiler_fix' : [None, "-FI"], |
||||||
|
'linker_so' : ["<F90>", "-shared"], |
||||||
|
'archiver' : ["ar", "-cr"], |
||||||
|
'ranlib' : ["ranlib"] |
||||||
|
} |
||||||
|
|
||||||
|
pic_flags = ['-fPIC'] |
||||||
|
module_dir_switch = '-module ' # Don't remove ending space! |
||||||
|
module_include_switch = '-I' |
||||||
|
|
||||||
|
def get_flags_free(self): |
||||||
|
return ['-FR'] |
||||||
|
|
||||||
|
def get_flags(self): |
||||||
|
return ['-fPIC'] |
||||||
|
|
||||||
|
def get_flags_opt(self): # Scipy test failures with -O2 |
||||||
|
v = self.get_version() |
||||||
|
mpopt = '' |
||||||
|
return ['-fp-model strict -O2'] |
||||||
|
|
||||||
|
def get_flags_arch(self): |
||||||
|
return [] |
||||||
|
|
||||||
|
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') |
||||||
|
if sys.platform == 'darwin': |
||||||
|
# Here, it's -dynamiclib |
||||||
|
try: |
||||||
|
idx = opt.index('-shared') |
||||||
|
opt.remove('-shared') |
||||||
|
except ValueError: |
||||||
|
idx = 0 |
||||||
|
opt[idx:idx] = ['-dynamiclib', '-Wl,-undefined,dynamic_lookup'] |
||||||
|
return opt |
||||||
|
|
||||||
|
|
||||||
|
class IntelItaniumFCompiler(IntelFCompiler): |
||||||
|
compiler_type = 'intele' |
||||||
|
compiler_aliases = () |
||||||
|
description = 'Intel Fortran Compiler for Itanium apps' |
||||||
|
|
||||||
|
version_match = intel_version_match('Itanium|IA-64') |
||||||
|
|
||||||
|
possible_executables = ['ifort', 'efort', 'efc'] |
||||||
|
|
||||||
|
executables = { |
||||||
|
'version_cmd' : None, |
||||||
|
'compiler_f77' : [None, "-FI", "-w90", "-w95"], |
||||||
|
'compiler_fix' : [None, "-FI"], |
||||||
|
'compiler_f90' : [None], |
||||||
|
'linker_so' : ['<F90>', "-shared"], |
||||||
|
'archiver' : ["ar", "-cr"], |
||||||
|
'ranlib' : ["ranlib"] |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
class IntelEM64TFCompiler(IntelFCompiler): |
||||||
|
compiler_type = 'intelem' |
||||||
|
compiler_aliases = () |
||||||
|
description = 'Intel Fortran Compiler for 64-bit apps' |
||||||
|
|
||||||
|
version_match = intel_version_match('EM64T-based|Intel\\(R\\) 64|64|IA-64|64-bit') |
||||||
|
|
||||||
|
possible_executables = ['ifort', 'efort', 'efc'] |
||||||
|
|
||||||
|
executables = { |
||||||
|
'version_cmd' : None, |
||||||
|
'compiler_f77' : [None, "-FI"], |
||||||
|
'compiler_fix' : [None, "-FI"], |
||||||
|
'compiler_f90' : [None], |
||||||
|
'linker_so' : ['<F90>', "-shared"], |
||||||
|
'archiver' : ["ar", "-cr"], |
||||||
|
'ranlib' : ["ranlib"] |
||||||
|
} |
||||||
|
|
||||||
|
def get_flags(self): |
||||||
|
return ['-fPIC'] |
||||||
|
|
||||||
|
def get_flags_opt(self): # Scipy test failures with -O2 |
||||||
|
v = self.get_version() |
||||||
|
mpopt = '' |
||||||
|
return ['-fp-model strict -O2'] |
||||||
|
|
||||||
|
def get_flags_arch(self): |
||||||
|
return [''] |
||||||
|
|
||||||
|
# Is there no difference in the version string between the above compilers |
||||||
|
# and the Visual compilers? |
||||||
|
|
||||||
|
|
||||||
|
class IntelVisualFCompiler(BaseIntelFCompiler): |
||||||
|
compiler_type = 'intelv' |
||||||
|
description = 'Intel Visual Fortran Compiler for 32-bit apps' |
||||||
|
version_match = intel_version_match('32-bit|IA-32') |
||||||
|
|
||||||
|
def update_executables(self): |
||||||
|
f = dummy_fortran_file() |
||||||
|
self.executables['version_cmd'] = ['<F77>', '/FI', '/c', |
||||||
|
f + '.f', '/o', f + '.o'] |
||||||
|
|
||||||
|
ar_exe = 'lib.exe' |
||||||
|
possible_executables = ['ifort', 'ifl'] |
||||||
|
|
||||||
|
executables = { |
||||||
|
'version_cmd' : None, |
||||||
|
'compiler_f77' : [None], |
||||||
|
'compiler_fix' : [None], |
||||||
|
'compiler_f90' : [None], |
||||||
|
'linker_so' : [None], |
||||||
|
'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', '/names:lowercase', '/assume:underscore'] |
||||||
|
return opt |
||||||
|
|
||||||
|
def get_flags_free(self): |
||||||
|
return [] |
||||||
|
|
||||||
|
def get_flags_debug(self): |
||||||
|
return ['/4Yb', '/d2'] |
||||||
|
|
||||||
|
def get_flags_opt(self): |
||||||
|
return ['/O1'] # Scipy test failures with /O2 |
||||||
|
|
||||||
|
def get_flags_arch(self): |
||||||
|
return ["/arch:IA32", "/QaxSSE3"] |
||||||
|
|
||||||
|
def runtime_library_dir_option(self, dir): |
||||||
|
raise NotImplementedError |
||||||
|
|
||||||
|
|
||||||
|
class IntelItaniumVisualFCompiler(IntelVisualFCompiler): |
||||||
|
compiler_type = 'intelev' |
||||||
|
description = 'Intel Visual Fortran Compiler for Itanium apps' |
||||||
|
|
||||||
|
version_match = intel_version_match('Itanium') |
||||||
|
|
||||||
|
possible_executables = ['efl'] # XXX this is a wild guess |
||||||
|
ar_exe = IntelVisualFCompiler.ar_exe |
||||||
|
|
||||||
|
executables = { |
||||||
|
'version_cmd' : None, |
||||||
|
'compiler_f77' : [None, "-FI", "-w90", "-w95"], |
||||||
|
'compiler_fix' : [None, "-FI", "-4L72", "-w"], |
||||||
|
'compiler_f90' : [None], |
||||||
|
'linker_so' : ['<F90>', "-shared"], |
||||||
|
'archiver' : [ar_exe, "/verbose", "/OUT:"], |
||||||
|
'ranlib' : None |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
class IntelEM64VisualFCompiler(IntelVisualFCompiler): |
||||||
|
compiler_type = 'intelvem' |
||||||
|
description = 'Intel Visual Fortran Compiler for 64-bit apps' |
||||||
|
|
||||||
|
version_match = simple_version_match(start=r'Intel\(R\).*?64,') |
||||||
|
|
||||||
|
def get_flags_arch(self): |
||||||
|
return [''] |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
from distutils import log |
||||||
|
log.set_verbosity(2) |
||||||
|
from numpy.distutils import customized_fcompiler |
||||||
|
print(customized_fcompiler(compiler='intel').get_version()) |
Loading…
Reference in new issue