@@ -66,13 +66,17 @@ def _set_fftw_variables(self):
6666 else :
6767 raise EasyBuildError ("Not using Intel compilers, PGI nor GCC, don't know compiler suffix for FFTW libraries." )
6868
69- fftw_libs = ["fftw3xc%s%s" % (compsuff , picsuff )]
70- if self .options ['usempi' ]:
69+ interface_lib = "fftw3xc%s%s" % (compsuff , picsuff )
70+ fftw_libs = [interface_lib ]
71+ cluster_interface_lib = None
72+ if self .options .get ('usempi' , False ):
7173 # add cluster interface for recent imkl versions
72- if LooseVersion (imklver ) >= LooseVersion ("11.0.2" ):
73- fftw_libs .append ("fftw3x_cdft%s%s" % (bitsuff , picsuff ))
74- elif LooseVersion (imklver ) >= LooseVersion ("10.3" ):
75- fftw_libs .append ("fftw3x_cdft%s" % picsuff )
74+ if LooseVersion (imklver ) >= LooseVersion ('10.3' ):
75+ suff = picsuff
76+ if LooseVersion (imklver ) >= LooseVersion ('11.0.2' ):
77+ suff = bitsuff + suff
78+ cluster_interface_lib = 'fftw3x_cdft%s' % suff
79+ fftw_libs .append (cluster_interface_lib )
7680 fftw_libs .append ("mkl_cdft_core" ) # add cluster dft
7781 fftw_libs .extend (self .variables ['LIBBLACS' ].flatten ()) # add BLACS; use flatten because ListOfList
7882
@@ -90,6 +94,13 @@ def _set_fftw_variables(self):
9094 # filter out libraries from list of FFTW libraries to check for if they are not provided by Intel MKL
9195 check_fftw_libs = [lib for lib in fftw_libs if lib not in ['dl' , 'gfortran' ]]
9296 fftw_lib_exists = lambda x : any ([os .path .exists (os .path .join (d , "lib%s.a" % x )) for d in fft_lib_dirs ])
97+ if not fftw_lib_exists (interface_lib ) and LooseVersion (imklver ) >= LooseVersion ("10.2" ):
98+ # interface libs can be optional:
99+ # MKL >= 10.2 include fftw3xc and fftw3xf interfaces in LIBBLAS=libmkl_gf/libmkl_intel
100+ # See https://software.intel.com/en-us/articles/intel-mkl-main-libraries-contain-fftw3-interfaces
101+ # The cluster interface libs (libfftw3x_cdft*) can be omitted if the toolchain does not provide MPI-FFTW
102+ # interfaces.
103+ check_fftw_libs = [l for l in check_fftw_libs if l not in [interface_lib , cluster_interface_lib ]]
93104 if all ([fftw_lib_exists (lib ) for lib in check_fftw_libs ]):
94105 self .FFT_LIB = fftw_libs
95106 else :
0 commit comments