diff --git a/easybuild/toolchains/fft/fftw.py b/easybuild/toolchains/fft/fftw.py index 4b6c32dcb9..ece375253a 100644 --- a/easybuild/toolchains/fft/fftw.py +++ b/easybuild/toolchains/fft/fftw.py @@ -71,7 +71,7 @@ def _set_fft_variables(self): # TODO can these be replaced with the FFT ones? self.variables.join('FFTW_INC_DIR', 'FFT_INC_DIR') self.variables.join('FFTW_LIB_DIR', 'FFT_LIB_DIR') - if 'FFT_STATIC_LIBS' in self.variables: - self.variables.join('FFTW_STATIC_LIBS', 'FFT_STATIC_LIBS') - if 'FFT_STATIC_LIBS_MT' in self.variables: - self.variables.join('FFTW_STATIC_LIBS_MT', 'FFT_STATIC_LIBS_MT') + + for key in ('SHARED_LIBS', 'SHARED_LIBS_MT', 'STATIC_LIBS', 'STATIC_LIBS_MT'): + if 'FFT_' + key in self.variables: + self.variables.join('FFTW_' + key, 'FFT_' + key) diff --git a/easybuild/tools/toolchain/constants.py b/easybuild/tools/toolchain/constants.py index 307827dd1e..b334d17ae9 100644 --- a/easybuild/tools/toolchain/constants.py +++ b/easybuild/tools/toolchain/constants.py @@ -30,8 +30,8 @@ """ from easybuild.tools.variables import AbsPathList -from easybuild.tools.toolchain.variables import LinkLibraryPaths, IncludePaths, CommandFlagList, CommaStaticLibs -from easybuild.tools.toolchain.variables import FlagList, LibraryList +from easybuild.tools.toolchain.variables import CommandFlagList, CommaSharedLibs, CommaStaticLibs +from easybuild.tools.toolchain.variables import FlagList, IncludePaths, LibraryList, LinkLibraryPaths COMPILER_VARIABLES = [ @@ -114,6 +114,10 @@ ('LIBBLAS', 'BLAS libraries'), ('LIBBLAS_MT', 'multithreaded BLAS libraries'), ], + CommaSharedLibs: [ + ('BLAS_SHARED_LIBS', 'Comma-separated list of shared BLAS libraries'), + ('BLAS_MT_SHARED_LIBS', 'Comma-separated list of shared multithreaded BLAS libraries'), + ], CommaStaticLibs: [ ('BLAS_STATIC_LIBS', 'Comma-separated list of static BLAS libraries'), ('BLAS_MT_STATIC_LIBS', 'Comma-separated list of static multithreaded BLAS libraries'), @@ -132,6 +136,12 @@ ('LIBLAPACK', 'LAPACK libraries'), ('LIBLAPACK_MT', 'multithreaded LAPACK libraries'), ], + CommaSharedLibs: [ + ('LAPACK_SHARED_LIBS', 'Comma-separated list of shared LAPACK libraries'), + ('LAPACK_MT_SHARED_LIBS', 'Comma-separated list of shared LAPACK libraries'), + ('BLAS_LAPACK_SHARED_LIBS', 'Comma-separated list of shared BLAS and LAPACK libraries'), + ('BLAS_LAPACK_MT_SHARED_LIBS', 'Comma-separated list of shared BLAS and LAPACK libraries'), + ], CommaStaticLibs: [ ('LAPACK_STATIC_LIBS', 'Comma-separated list of static LAPACK libraries'), ('LAPACK_MT_STATIC_LIBS', 'Comma-separated list of static LAPACK libraries'), @@ -166,6 +176,10 @@ ('LIBSCALAPACK', 'SCALAPACK libraries'), ('LIBSCALAPACK_MT', 'multithreaded SCALAPACK libraries'), ], + CommaSharedLibs: [ + ('SCALAPACK_SHARED_LIBS', 'Comma-separated list of shared SCALAPACK libraries'), + ('SCALAPACK_MT_SHARED_LIBS', 'Comma-separated list of shared SCALAPACK libraries'), + ], CommaStaticLibs: [ ('SCALAPACK_STATIC_LIBS', 'Comma-separated list of static SCALAPACK libraries'), ('SCALAPACK_MT_STATIC_LIBS', 'Comma-separated list of static SCALAPACK libraries'), @@ -181,6 +195,10 @@ ('LIBFFT', 'FFT libraries'), ('LIBFFT_MT', 'Multithreaded FFT libraries'), ], + CommaSharedLibs: [ + ('FFT_SHARED_LIBS', 'Comma-separated list of shared FFT libraries'), + ('FFT_SHARED_LIBS_MT', 'Comma-separated list of shared multithreaded FFT libraries'), + ], CommaStaticLibs: [ ('FFT_STATIC_LIBS', 'Comma-separated list of static FFT libraries'), ('FFT_STATIC_LIBS_MT', 'Comma-separated list of static multithreaded FFT libraries'), @@ -192,6 +210,10 @@ ('FFTW_LIB_DIR', 'FFTW library directory'), ('FFTW_INC_DIR', 'FFTW include directory'), ], + CommaSharedLibs: [ + ('FFTW_SHARED_LIBS', 'Comma-separated list of shared FFTW libraries'), + ('FFTW_SHARED_LIBS_MT', 'Comma-separated list of shared multithreaded FFTW libraries'), + ], CommaStaticLibs: [ ('FFTW_STATIC_LIBS', 'Comma-separated list of static FFTW libraries'), ('FFTW_STATIC_LIBS_MT', 'Comma-separated list of static multithreaded FFTW libraries'), diff --git a/easybuild/tools/toolchain/fft.py b/easybuild/tools/toolchain/fft.py index 4facafc7c2..1e39953ba7 100644 --- a/easybuild/tools/toolchain/fft.py +++ b/easybuild/tools/toolchain/fft.py @@ -68,7 +68,9 @@ def _set_fft_variables(self): if getattr(self, 'LIB_MULTITHREAD', None) is not None: self.variables.nappend('LIBFFT_MT', self.LIB_MULTITHREAD) + self.variables.join('FFT_SHARED_LIBS', 'LIBFFT') self.variables.join('FFT_STATIC_LIBS', 'LIBFFT') + self.variables.join('FFT_SHARED_LIBS_MT', 'LIBFFT_MT') self.variables.join('FFT_STATIC_LIBS_MT', 'LIBFFT_MT') for root in self.get_software_root(self.FFT_MODULE_NAME): diff --git a/easybuild/tools/toolchain/linalg.py b/easybuild/tools/toolchain/linalg.py index 7d27350996..2e1a46db41 100644 --- a/easybuild/tools/toolchain/linalg.py +++ b/easybuild/tools/toolchain/linalg.py @@ -127,7 +127,9 @@ def _set_blas_variables(self): self.variables.nappend('LIBBLAS', self.LIB_EXTRA, position=20) self.variables.nappend('LIBBLAS_MT', self.LIB_EXTRA, position=20) + self.variables.join('BLAS_SHARED_LIBS', 'LIBBLAS') self.variables.join('BLAS_STATIC_LIBS', 'LIBBLAS') + self.variables.join('BLAS_MT_SHARED_LIBS', 'LIBBLAS_MT') self.variables.join('BLAS_MT_STATIC_LIBS', 'LIBBLAS_MT') for root in self.get_software_root(self.BLAS_MODULE_NAME): self.variables.append_exists('BLAS_LIB_DIR', root, self.BLAS_LIB_DIR) @@ -147,7 +149,9 @@ def _set_lapack_variables(self): self.variables.join('LIBLAPACK_MT_ONLY', 'LIBBLAS_MT') self.variables.join('LIBLAPACK', 'LIBBLAS') self.variables.join('LIBLAPACK_MT', 'LIBBLAS_MT') + self.variables.join('LAPACK_SHARED_LIBS', 'BLAS_SHARED_LIBS') self.variables.join('LAPACK_STATIC_LIBS', 'BLAS_STATIC_LIBS') + self.variables.join('LAPACK_MT_SHARED_LIBS', 'BLAS_MT_SHARED_LIBS') self.variables.join('LAPACK_MT_STATIC_LIBS', 'BLAS_MT_STATIC_LIBS') self.variables.join('LAPACK_LIB_DIR', 'BLAS_LIB_DIR') self.variables.join('LAPACK_INC_DIR', 'BLAS_INC_DIR') @@ -183,7 +187,9 @@ def _set_lapack_variables(self): self.variables.nappend('LIBLAPACK', self.LIB_EXTRA, position=20) self.variables.nappend('LIBLAPACK_MT', self.LIB_EXTRA, position=20) + self.variables.join('LAPACK_SHARED_LIBS', 'LIBLAPACK') self.variables.join('LAPACK_STATIC_LIBS', 'LIBLAPACK') + self.variables.join('LAPACK_MT_SHARED_LIBS', 'LIBLAPACK_MT') self.variables.join('LAPACK_MT_STATIC_LIBS', 'LIBLAPACK_MT') for root in self.get_software_root(self.LAPACK_MODULE_NAME): @@ -192,7 +198,9 @@ def _set_lapack_variables(self): self.variables.join('BLAS_LAPACK_LIB_DIR', 'LAPACK_LIB_DIR', 'BLAS_LIB_DIR') self.variables.join('BLAS_LAPACK_INC_DIR', 'LAPACK_INC_DIR', 'BLAS_INC_DIR') + self.variables.join('BLAS_LAPACK_SHARED_LIBS', 'LAPACK_SHARED_LIBS', 'BLAS_SHARED_LIBS') self.variables.join('BLAS_LAPACK_STATIC_LIBS', 'LAPACK_STATIC_LIBS', 'BLAS_STATIC_LIBS') + self.variables.join('BLAS_LAPACK_MT_SHARED_LIBS', 'LAPACK_MT_SHARED_LIBS', 'BLAS_MT_SHARED_LIBS') self.variables.join('BLAS_LAPACK_MT_STATIC_LIBS', 'LAPACK_MT_STATIC_LIBS', 'BLAS_MT_STATIC_LIBS') # add general dependency variables @@ -293,7 +301,9 @@ def _set_scalapack_variables(self): self.variables.nappend('LIBSCALAPACK', self.LIB_EXTRA, position=20) self.variables.nappend('LIBSCALAPACK_MT', self.LIB_EXTRA, position=20) + self.variables.join('SCALAPACK_SHARED_LIBS', 'LIBSCALAPACK') self.variables.join('SCALAPACK_STATIC_LIBS', 'LIBSCALAPACK') + self.variables.join('SCALAPACK_MT_SHARED_LIBS', 'LIBSCALAPACK_MT') self.variables.join('SCALAPACK_MT_STATIC_LIBS', 'LIBSCALAPACK_MT') for root in self.get_software_root(self.SCALAPACK_MODULE_NAME): self.variables.append_exists('SCALAPACK_LIB_DIR', root, self.SCALAPACK_LIB_DIR) diff --git a/easybuild/tools/toolchain/variables.py b/easybuild/tools/toolchain/variables.py index 30a365ad5b..6758af24de 100644 --- a/easybuild/tools/toolchain/variables.py +++ b/easybuild/tools/toolchain/variables.py @@ -30,6 +30,7 @@ """ from easybuild.tools.build_log import EasyBuildError +from easybuild.tools.systemtools import get_shared_lib_ext from easybuild.tools.variables import StrList, AbsPathList @@ -111,8 +112,16 @@ def change(self, separator=None, separator_begin_end=None, prefix=None, prefix_b self.END.PREFIX = prefix_begin_end +class CommaSharedLibs(LibraryList): + """Comma-separated list of shared libraries""" + SEPARATOR = ',' + + PREFIX = 'lib' + SUFFIX = '.' + get_shared_lib_ext() + + class CommaStaticLibs(LibraryList): - """Comma-separated list""" + """Comma-separated list of static libraries""" SEPARATOR = ',' PREFIX = 'lib' diff --git a/test/framework/toolchain.py b/test/framework/toolchain.py index 0fa2ff2d56..0bf963857c 100644 --- a/test/framework/toolchain.py +++ b/test/framework/toolchain.py @@ -51,6 +51,7 @@ from easybuild.tools.filetools import read_file, symlink, write_file, which from easybuild.tools.py2vs3 import string_type from easybuild.tools.run import run_cmd +from easybuild.tools.systemtools import get_shared_lib_ext from easybuild.tools.toolchain.mpi import get_mpi_cmd_template from easybuild.tools.toolchain.toolchain import env_vars_external_module from easybuild.tools.toolchain.utilities import get_toolchain, search_toolchain @@ -1448,11 +1449,15 @@ def test_old_new_iccifort(self): self.setup_sandbox_for_intel_fftw(self.test_prefix, imklver='10.2.6.038') self.modtool.prepend_module_path(self.test_prefix) + shlib_ext = get_shared_lib_ext() + # incl. -lguide libblas_mt_intel3 = "-Wl,-Bstatic -Wl,--start-group -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core" libblas_mt_intel3 += " -Wl,--end-group -Wl,-Bdynamic -liomp5 -lguide -lpthread" # no -lguide + blas_static_libs_intel4 = 'libmkl_intel_lp64.a,libmkl_sequential.a,libmkl_core.a' + blas_shared_libs_intel4 = blas_static_libs_intel4.replace('.a', '.' + shlib_ext) libblas_intel4 = "-Wl,-Bstatic -Wl,--start-group -lmkl_intel_lp64 -lmkl_sequential -lmkl_core" libblas_intel4 += " -Wl,--end-group -Wl,-Bdynamic" libblas_mt_intel4 = "-Wl,-Bstatic -Wl,--start-group -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core" @@ -1469,18 +1474,83 @@ def test_old_new_iccifort(self): libscalack_intel4 = "-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_intel_lp64 -lmkl_sequential " libscalack_intel4 += "-lmkl_core" - libblas_mt_fosscuda = "-lopenblas -lgfortran -lpthread" + blas_static_libs_fosscuda = "libopenblas.a,libgfortran.a" + blas_shared_libs_fosscuda = blas_static_libs_fosscuda.replace('.a', '.' + shlib_ext) + blas_mt_static_libs_fosscuda = blas_static_libs_fosscuda + ",libpthread.a" + blas_mt_shared_libs_fosscuda = blas_mt_static_libs_fosscuda.replace('.a', '.' + shlib_ext) + libblas_fosscuda = "-lopenblas -lgfortran" + libblas_mt_fosscuda = libblas_fosscuda + " -lpthread" + + fft_static_libs_fosscuda = "libfftw3.a" + fft_shared_libs_fosscuda = fft_static_libs_fosscuda.replace('.a', '.' + shlib_ext) + fft_mt_static_libs_fosscuda = "libfftw3.a,libpthread.a" + fft_mt_shared_libs_fosscuda = fft_mt_static_libs_fosscuda.replace('.a', '.' + shlib_ext) + fft_mt_static_libs_fosscuda_omp = "libfftw3_omp.a,libfftw3.a,libpthread.a" + fft_mt_shared_libs_fosscuda_omp = fft_mt_static_libs_fosscuda_omp.replace('.a', '.' + shlib_ext) + libfft_fosscuda = "-lfftw3" + libfft_mt_fosscuda = libfft_fosscuda + " -lpthread" + libfft_mt_fosscuda_omp = "-lfftw3_omp " + libfft_fosscuda + " -lpthread" + + lapack_static_libs_fosscuda = "libopenblas.a,libgfortran.a" + lapack_shared_libs_fosscuda = lapack_static_libs_fosscuda.replace('.a', '.' + shlib_ext) + lapack_mt_static_libs_fosscuda = lapack_static_libs_fosscuda + ",libpthread.a" + lapack_mt_shared_libs_fosscuda = lapack_mt_static_libs_fosscuda.replace('.a', '.' + shlib_ext) + liblapack_fosscuda = "-lopenblas -lgfortran" + liblapack_mt_fosscuda = liblapack_fosscuda + " -lpthread" + libscalack_fosscuda = "-lscalapack -lopenblas -lgfortran" - libfft_mt_fosscuda = "-lfftw3_omp -lfftw3 -lpthread" + libscalack_mt_fosscuda = libscalack_fosscuda + " -lpthread" + scalapack_static_libs_fosscuda = "libscalapack.a,libopenblas.a,libgfortran.a" + scalapack_shared_libs_fosscuda = scalapack_static_libs_fosscuda.replace('.a', '.' + shlib_ext) + scalapack_mt_static_libs_fosscuda = "libscalapack.a,libopenblas.a,libgfortran.a,libpthread.a" + scalapack_mt_shared_libs_fosscuda = scalapack_mt_static_libs_fosscuda.replace('.a', '.' + shlib_ext) tc = self.get_toolchain('fosscuda', version='2018a') tc.prepare() + self.assertEqual(os.environ['BLAS_SHARED_LIBS'], blas_shared_libs_fosscuda) + self.assertEqual(os.environ['BLAS_STATIC_LIBS'], blas_static_libs_fosscuda) + self.assertEqual(os.environ['BLAS_MT_SHARED_LIBS'], blas_mt_shared_libs_fosscuda) + self.assertEqual(os.environ['BLAS_MT_STATIC_LIBS'], blas_mt_static_libs_fosscuda) + self.assertEqual(os.environ['LIBBLAS'], libblas_fosscuda) self.assertEqual(os.environ['LIBBLAS_MT'], libblas_mt_fosscuda) + + self.assertEqual(os.environ['LAPACK_SHARED_LIBS'], lapack_shared_libs_fosscuda) + self.assertEqual(os.environ['LAPACK_STATIC_LIBS'], lapack_static_libs_fosscuda) + self.assertEqual(os.environ['LAPACK_MT_SHARED_LIBS'], lapack_mt_shared_libs_fosscuda) + self.assertEqual(os.environ['LAPACK_MT_STATIC_LIBS'], lapack_mt_static_libs_fosscuda) + self.assertEqual(os.environ['LIBLAPACK'], liblapack_fosscuda) + self.assertEqual(os.environ['LIBLAPACK_MT'], liblapack_mt_fosscuda) + + self.assertEqual(os.environ['BLAS_LAPACK_SHARED_LIBS'], blas_shared_libs_fosscuda) + self.assertEqual(os.environ['BLAS_LAPACK_STATIC_LIBS'], blas_static_libs_fosscuda) + self.assertEqual(os.environ['BLAS_LAPACK_MT_SHARED_LIBS'], blas_mt_shared_libs_fosscuda) + self.assertEqual(os.environ['BLAS_LAPACK_MT_STATIC_LIBS'], blas_mt_static_libs_fosscuda) + + self.assertEqual(os.environ['FFT_SHARED_LIBS'], fft_shared_libs_fosscuda) + self.assertEqual(os.environ['FFT_STATIC_LIBS'], fft_static_libs_fosscuda) + self.assertEqual(os.environ['FFT_SHARED_LIBS_MT'], fft_mt_shared_libs_fosscuda) + self.assertEqual(os.environ['FFT_STATIC_LIBS_MT'], fft_mt_static_libs_fosscuda) + self.assertEqual(os.environ['FFTW_SHARED_LIBS'], fft_shared_libs_fosscuda) + self.assertEqual(os.environ['FFTW_STATIC_LIBS'], fft_static_libs_fosscuda) + self.assertEqual(os.environ['FFTW_SHARED_LIBS_MT'], fft_mt_shared_libs_fosscuda) + self.assertEqual(os.environ['FFTW_STATIC_LIBS_MT'], fft_mt_static_libs_fosscuda) + self.assertEqual(os.environ['LIBFFT'], libfft_fosscuda) + self.assertEqual(os.environ['LIBFFT_MT'], libfft_mt_fosscuda) + self.assertEqual(os.environ['LIBSCALAPACK'], libscalack_fosscuda) + self.assertEqual(os.environ['LIBSCALAPACK_MT'], libscalack_mt_fosscuda) + self.assertEqual(os.environ['SCALAPACK_SHARED_LIBS'], scalapack_shared_libs_fosscuda) + self.assertEqual(os.environ['SCALAPACK_STATIC_LIBS'], scalapack_static_libs_fosscuda) + self.assertEqual(os.environ['SCALAPACK_MT_SHARED_LIBS'], scalapack_mt_shared_libs_fosscuda) + self.assertEqual(os.environ['SCALAPACK_MT_STATIC_LIBS'], scalapack_mt_static_libs_fosscuda) self.modtool.purge() tc = self.get_toolchain('intel', version='2018a') tc.prepare() + self.assertEqual(os.environ.get('BLAS_SHARED_LIBS', "(not set)"), blas_shared_libs_intel4) + self.assertEqual(os.environ.get('BLAS_STATIC_LIBS', "(not set)"), blas_static_libs_intel4) + self.assertEqual(os.environ.get('LAPACK_SHARED_LIBS', "(not set)"), blas_shared_libs_intel4) + self.assertEqual(os.environ.get('LAPACK_STATIC_LIBS', "(not set)"), blas_static_libs_intel4) self.assertEqual(os.environ.get('LIBBLAS', "(not set)"), libblas_intel4) self.assertEqual(os.environ.get('LIBBLAS_MT', "(not set)"), libblas_mt_intel4) self.assertEqual(os.environ.get('LIBFFT', "(not set)"), libfft_intel4) @@ -1517,9 +1587,42 @@ def test_old_new_iccifort(self): tc = self.get_toolchain('fosscuda', version='2018a') tc.set_options({'openmp': True}) tc.prepare() + self.assertEqual(os.environ['BLAS_SHARED_LIBS'], blas_shared_libs_fosscuda) + self.assertEqual(os.environ['BLAS_STATIC_LIBS'], blas_static_libs_fosscuda) + self.assertEqual(os.environ['BLAS_MT_SHARED_LIBS'], blas_mt_shared_libs_fosscuda) + self.assertEqual(os.environ['BLAS_MT_STATIC_LIBS'], blas_mt_static_libs_fosscuda) + self.assertEqual(os.environ['LIBBLAS'], libblas_fosscuda) self.assertEqual(os.environ['LIBBLAS_MT'], libblas_mt_fosscuda) - self.assertEqual(os.environ['LIBFFT_MT'], libfft_mt_fosscuda) + + self.assertEqual(os.environ['LAPACK_SHARED_LIBS'], lapack_shared_libs_fosscuda) + self.assertEqual(os.environ['LAPACK_STATIC_LIBS'], lapack_static_libs_fosscuda) + self.assertEqual(os.environ['LAPACK_MT_SHARED_LIBS'], lapack_mt_shared_libs_fosscuda) + self.assertEqual(os.environ['LAPACK_MT_STATIC_LIBS'], lapack_mt_static_libs_fosscuda) + self.assertEqual(os.environ['LIBLAPACK'], liblapack_fosscuda) + self.assertEqual(os.environ['LIBLAPACK_MT'], liblapack_mt_fosscuda) + + self.assertEqual(os.environ['BLAS_LAPACK_SHARED_LIBS'], blas_shared_libs_fosscuda) + self.assertEqual(os.environ['BLAS_LAPACK_STATIC_LIBS'], blas_static_libs_fosscuda) + self.assertEqual(os.environ['BLAS_LAPACK_MT_SHARED_LIBS'], blas_mt_shared_libs_fosscuda) + self.assertEqual(os.environ['BLAS_LAPACK_MT_STATIC_LIBS'], blas_mt_static_libs_fosscuda) + + self.assertEqual(os.environ['FFT_SHARED_LIBS'], fft_shared_libs_fosscuda) + self.assertEqual(os.environ['FFT_STATIC_LIBS'], fft_static_libs_fosscuda) + self.assertEqual(os.environ['FFT_SHARED_LIBS_MT'], fft_mt_shared_libs_fosscuda_omp) + self.assertEqual(os.environ['FFT_STATIC_LIBS_MT'], fft_mt_static_libs_fosscuda_omp) + self.assertEqual(os.environ['FFTW_SHARED_LIBS'], fft_shared_libs_fosscuda) + self.assertEqual(os.environ['FFTW_STATIC_LIBS'], fft_static_libs_fosscuda) + self.assertEqual(os.environ['FFTW_SHARED_LIBS_MT'], fft_mt_shared_libs_fosscuda_omp) + self.assertEqual(os.environ['FFTW_STATIC_LIBS_MT'], fft_mt_static_libs_fosscuda_omp) + self.assertEqual(os.environ['LIBFFT'], libfft_fosscuda) + self.assertEqual(os.environ['LIBFFT_MT'], libfft_mt_fosscuda_omp) + self.assertEqual(os.environ['LIBSCALAPACK'], libscalack_fosscuda) + self.assertEqual(os.environ['LIBSCALAPACK_MT'], libscalack_mt_fosscuda) + self.assertEqual(os.environ['SCALAPACK_SHARED_LIBS'], scalapack_shared_libs_fosscuda) + self.assertEqual(os.environ['SCALAPACK_STATIC_LIBS'], scalapack_static_libs_fosscuda) + self.assertEqual(os.environ['SCALAPACK_MT_SHARED_LIBS'], scalapack_mt_shared_libs_fosscuda) + self.assertEqual(os.environ['SCALAPACK_MT_STATIC_LIBS'], scalapack_mt_static_libs_fosscuda) def test_standalone_iccifort(self): """Test whether standalone installation of iccifort matches the iccifort toolchain definition."""