5151from easybuild .tools .filetools import read_file , symlink , write_file , which
5252from easybuild .tools .py2vs3 import string_type
5353from easybuild .tools .run import run_cmd
54+ from easybuild .tools .systemtools import get_shared_lib_ext
5455from easybuild .tools .toolchain .mpi import get_mpi_cmd_template
5556from easybuild .tools .toolchain .toolchain import env_vars_external_module
5657from easybuild .tools .toolchain .utilities import get_toolchain , search_toolchain
@@ -1448,11 +1449,15 @@ def test_old_new_iccifort(self):
14481449 self .setup_sandbox_for_intel_fftw (self .test_prefix , imklver = '10.2.6.038' )
14491450 self .modtool .prepend_module_path (self .test_prefix )
14501451
1452+ shlib_ext = get_shared_lib_ext ()
1453+
14511454 # incl. -lguide
14521455 libblas_mt_intel3 = "-Wl,-Bstatic -Wl,--start-group -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core"
14531456 libblas_mt_intel3 += " -Wl,--end-group -Wl,-Bdynamic -liomp5 -lguide -lpthread"
14541457
14551458 # no -lguide
1459+ blas_static_libs_intel4 = 'libmkl_intel_lp64.a,libmkl_sequential.a,libmkl_core.a'
1460+ blas_shared_libs_intel4 = blas_static_libs_intel4 .replace ('.a' , '.' + shlib_ext )
14561461 libblas_intel4 = "-Wl,-Bstatic -Wl,--start-group -lmkl_intel_lp64 -lmkl_sequential -lmkl_core"
14571462 libblas_intel4 += " -Wl,--end-group -Wl,-Bdynamic"
14581463 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):
14691474 libscalack_intel4 = "-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_intel_lp64 -lmkl_sequential "
14701475 libscalack_intel4 += "-lmkl_core"
14711476
1472- libblas_mt_fosscuda = "-lopenblas -lgfortran -lpthread"
1477+ blas_static_libs_fosscuda = "libopenblas.a,libgfortran.a"
1478+ blas_shared_libs_fosscuda = blas_static_libs_fosscuda .replace ('.a' , '.' + shlib_ext )
1479+ blas_mt_static_libs_fosscuda = blas_static_libs_fosscuda + ",libpthread.a"
1480+ blas_mt_shared_libs_fosscuda = blas_mt_static_libs_fosscuda .replace ('.a' , '.' + shlib_ext )
1481+ libblas_fosscuda = "-lopenblas -lgfortran"
1482+ libblas_mt_fosscuda = libblas_fosscuda + " -lpthread"
1483+
1484+ fft_static_libs_fosscuda = "libfftw3.a"
1485+ fft_shared_libs_fosscuda = fft_static_libs_fosscuda .replace ('.a' , '.' + shlib_ext )
1486+ fft_mt_static_libs_fosscuda = "libfftw3.a,libpthread.a"
1487+ fft_mt_shared_libs_fosscuda = fft_mt_static_libs_fosscuda .replace ('.a' , '.' + shlib_ext )
1488+ fft_mt_static_libs_fosscuda_omp = "libfftw3_omp.a,libfftw3.a,libpthread.a"
1489+ fft_mt_shared_libs_fosscuda_omp = fft_mt_static_libs_fosscuda_omp .replace ('.a' , '.' + shlib_ext )
1490+ libfft_fosscuda = "-lfftw3"
1491+ libfft_mt_fosscuda = libfft_fosscuda + " -lpthread"
1492+ libfft_mt_fosscuda_omp = "-lfftw3_omp " + libfft_fosscuda + " -lpthread"
1493+
1494+ lapack_static_libs_fosscuda = "libopenblas.a,libgfortran.a"
1495+ lapack_shared_libs_fosscuda = lapack_static_libs_fosscuda .replace ('.a' , '.' + shlib_ext )
1496+ lapack_mt_static_libs_fosscuda = lapack_static_libs_fosscuda + ",libpthread.a"
1497+ lapack_mt_shared_libs_fosscuda = lapack_mt_static_libs_fosscuda .replace ('.a' , '.' + shlib_ext )
1498+ liblapack_fosscuda = "-lopenblas -lgfortran"
1499+ liblapack_mt_fosscuda = liblapack_fosscuda + " -lpthread"
1500+
14731501 libscalack_fosscuda = "-lscalapack -lopenblas -lgfortran"
1474- libfft_mt_fosscuda = "-lfftw3_omp -lfftw3 -lpthread"
1502+ libscalack_mt_fosscuda = libscalack_fosscuda + " -lpthread"
1503+ scalapack_static_libs_fosscuda = "libscalapack.a,libopenblas.a,libgfortran.a"
1504+ scalapack_shared_libs_fosscuda = scalapack_static_libs_fosscuda .replace ('.a' , '.' + shlib_ext )
1505+ scalapack_mt_static_libs_fosscuda = "libscalapack.a,libopenblas.a,libgfortran.a,libpthread.a"
1506+ scalapack_mt_shared_libs_fosscuda = scalapack_mt_static_libs_fosscuda .replace ('.a' , '.' + shlib_ext )
14751507
14761508 tc = self .get_toolchain ('fosscuda' , version = '2018a' )
14771509 tc .prepare ()
1510+ self .assertEqual (os .environ ['BLAS_SHARED_LIBS' ], blas_shared_libs_fosscuda )
1511+ self .assertEqual (os .environ ['BLAS_STATIC_LIBS' ], blas_static_libs_fosscuda )
1512+ self .assertEqual (os .environ ['BLAS_MT_SHARED_LIBS' ], blas_mt_shared_libs_fosscuda )
1513+ self .assertEqual (os .environ ['BLAS_MT_STATIC_LIBS' ], blas_mt_static_libs_fosscuda )
1514+ self .assertEqual (os .environ ['LIBBLAS' ], libblas_fosscuda )
14781515 self .assertEqual (os .environ ['LIBBLAS_MT' ], libblas_mt_fosscuda )
1516+
1517+ self .assertEqual (os .environ ['LAPACK_SHARED_LIBS' ], lapack_shared_libs_fosscuda )
1518+ self .assertEqual (os .environ ['LAPACK_STATIC_LIBS' ], lapack_static_libs_fosscuda )
1519+ self .assertEqual (os .environ ['LAPACK_MT_SHARED_LIBS' ], lapack_mt_shared_libs_fosscuda )
1520+ self .assertEqual (os .environ ['LAPACK_MT_STATIC_LIBS' ], lapack_mt_static_libs_fosscuda )
1521+ self .assertEqual (os .environ ['LIBLAPACK' ], liblapack_fosscuda )
1522+ self .assertEqual (os .environ ['LIBLAPACK_MT' ], liblapack_mt_fosscuda )
1523+
1524+ self .assertEqual (os .environ ['BLAS_LAPACK_SHARED_LIBS' ], blas_shared_libs_fosscuda )
1525+ self .assertEqual (os .environ ['BLAS_LAPACK_STATIC_LIBS' ], blas_static_libs_fosscuda )
1526+ self .assertEqual (os .environ ['BLAS_LAPACK_MT_SHARED_LIBS' ], blas_mt_shared_libs_fosscuda )
1527+ self .assertEqual (os .environ ['BLAS_LAPACK_MT_STATIC_LIBS' ], blas_mt_static_libs_fosscuda )
1528+
1529+ self .assertEqual (os .environ ['FFT_SHARED_LIBS' ], fft_shared_libs_fosscuda )
1530+ self .assertEqual (os .environ ['FFT_STATIC_LIBS' ], fft_static_libs_fosscuda )
1531+ self .assertEqual (os .environ ['FFT_SHARED_LIBS_MT' ], fft_mt_shared_libs_fosscuda )
1532+ self .assertEqual (os .environ ['FFT_STATIC_LIBS_MT' ], fft_mt_static_libs_fosscuda )
1533+ self .assertEqual (os .environ ['FFTW_SHARED_LIBS' ], fft_shared_libs_fosscuda )
1534+ self .assertEqual (os .environ ['FFTW_STATIC_LIBS' ], fft_static_libs_fosscuda )
1535+ self .assertEqual (os .environ ['FFTW_SHARED_LIBS_MT' ], fft_mt_shared_libs_fosscuda )
1536+ self .assertEqual (os .environ ['FFTW_STATIC_LIBS_MT' ], fft_mt_static_libs_fosscuda )
1537+ self .assertEqual (os .environ ['LIBFFT' ], libfft_fosscuda )
1538+ self .assertEqual (os .environ ['LIBFFT_MT' ], libfft_mt_fosscuda )
1539+
14791540 self .assertEqual (os .environ ['LIBSCALAPACK' ], libscalack_fosscuda )
1541+ self .assertEqual (os .environ ['LIBSCALAPACK_MT' ], libscalack_mt_fosscuda )
1542+ self .assertEqual (os .environ ['SCALAPACK_SHARED_LIBS' ], scalapack_shared_libs_fosscuda )
1543+ self .assertEqual (os .environ ['SCALAPACK_STATIC_LIBS' ], scalapack_static_libs_fosscuda )
1544+ self .assertEqual (os .environ ['SCALAPACK_MT_SHARED_LIBS' ], scalapack_mt_shared_libs_fosscuda )
1545+ self .assertEqual (os .environ ['SCALAPACK_MT_STATIC_LIBS' ], scalapack_mt_static_libs_fosscuda )
14801546 self .modtool .purge ()
14811547
14821548 tc = self .get_toolchain ('intel' , version = '2018a' )
14831549 tc .prepare ()
1550+ self .assertEqual (os .environ .get ('BLAS_SHARED_LIBS' , "(not set)" ), blas_shared_libs_intel4 )
1551+ self .assertEqual (os .environ .get ('BLAS_STATIC_LIBS' , "(not set)" ), blas_static_libs_intel4 )
1552+ self .assertEqual (os .environ .get ('LAPACK_SHARED_LIBS' , "(not set)" ), blas_shared_libs_intel4 )
1553+ self .assertEqual (os .environ .get ('LAPACK_STATIC_LIBS' , "(not set)" ), blas_static_libs_intel4 )
14841554 self .assertEqual (os .environ .get ('LIBBLAS' , "(not set)" ), libblas_intel4 )
14851555 self .assertEqual (os .environ .get ('LIBBLAS_MT' , "(not set)" ), libblas_mt_intel4 )
14861556 self .assertEqual (os .environ .get ('LIBFFT' , "(not set)" ), libfft_intel4 )
@@ -1517,9 +1587,42 @@ def test_old_new_iccifort(self):
15171587 tc = self .get_toolchain ('fosscuda' , version = '2018a' )
15181588 tc .set_options ({'openmp' : True })
15191589 tc .prepare ()
1590+ self .assertEqual (os .environ ['BLAS_SHARED_LIBS' ], blas_shared_libs_fosscuda )
1591+ self .assertEqual (os .environ ['BLAS_STATIC_LIBS' ], blas_static_libs_fosscuda )
1592+ self .assertEqual (os .environ ['BLAS_MT_SHARED_LIBS' ], blas_mt_shared_libs_fosscuda )
1593+ self .assertEqual (os .environ ['BLAS_MT_STATIC_LIBS' ], blas_mt_static_libs_fosscuda )
1594+ self .assertEqual (os .environ ['LIBBLAS' ], libblas_fosscuda )
15201595 self .assertEqual (os .environ ['LIBBLAS_MT' ], libblas_mt_fosscuda )
1521- self .assertEqual (os .environ ['LIBFFT_MT' ], libfft_mt_fosscuda )
1596+
1597+ self .assertEqual (os .environ ['LAPACK_SHARED_LIBS' ], lapack_shared_libs_fosscuda )
1598+ self .assertEqual (os .environ ['LAPACK_STATIC_LIBS' ], lapack_static_libs_fosscuda )
1599+ self .assertEqual (os .environ ['LAPACK_MT_SHARED_LIBS' ], lapack_mt_shared_libs_fosscuda )
1600+ self .assertEqual (os .environ ['LAPACK_MT_STATIC_LIBS' ], lapack_mt_static_libs_fosscuda )
1601+ self .assertEqual (os .environ ['LIBLAPACK' ], liblapack_fosscuda )
1602+ self .assertEqual (os .environ ['LIBLAPACK_MT' ], liblapack_mt_fosscuda )
1603+
1604+ self .assertEqual (os .environ ['BLAS_LAPACK_SHARED_LIBS' ], blas_shared_libs_fosscuda )
1605+ self .assertEqual (os .environ ['BLAS_LAPACK_STATIC_LIBS' ], blas_static_libs_fosscuda )
1606+ self .assertEqual (os .environ ['BLAS_LAPACK_MT_SHARED_LIBS' ], blas_mt_shared_libs_fosscuda )
1607+ self .assertEqual (os .environ ['BLAS_LAPACK_MT_STATIC_LIBS' ], blas_mt_static_libs_fosscuda )
1608+
1609+ self .assertEqual (os .environ ['FFT_SHARED_LIBS' ], fft_shared_libs_fosscuda )
1610+ self .assertEqual (os .environ ['FFT_STATIC_LIBS' ], fft_static_libs_fosscuda )
1611+ self .assertEqual (os .environ ['FFT_SHARED_LIBS_MT' ], fft_mt_shared_libs_fosscuda_omp )
1612+ self .assertEqual (os .environ ['FFT_STATIC_LIBS_MT' ], fft_mt_static_libs_fosscuda_omp )
1613+ self .assertEqual (os .environ ['FFTW_SHARED_LIBS' ], fft_shared_libs_fosscuda )
1614+ self .assertEqual (os .environ ['FFTW_STATIC_LIBS' ], fft_static_libs_fosscuda )
1615+ self .assertEqual (os .environ ['FFTW_SHARED_LIBS_MT' ], fft_mt_shared_libs_fosscuda_omp )
1616+ self .assertEqual (os .environ ['FFTW_STATIC_LIBS_MT' ], fft_mt_static_libs_fosscuda_omp )
1617+ self .assertEqual (os .environ ['LIBFFT' ], libfft_fosscuda )
1618+ self .assertEqual (os .environ ['LIBFFT_MT' ], libfft_mt_fosscuda_omp )
1619+
15221620 self .assertEqual (os .environ ['LIBSCALAPACK' ], libscalack_fosscuda )
1621+ self .assertEqual (os .environ ['LIBSCALAPACK_MT' ], libscalack_mt_fosscuda )
1622+ self .assertEqual (os .environ ['SCALAPACK_SHARED_LIBS' ], scalapack_shared_libs_fosscuda )
1623+ self .assertEqual (os .environ ['SCALAPACK_STATIC_LIBS' ], scalapack_static_libs_fosscuda )
1624+ self .assertEqual (os .environ ['SCALAPACK_MT_SHARED_LIBS' ], scalapack_mt_shared_libs_fosscuda )
1625+ self .assertEqual (os .environ ['SCALAPACK_MT_STATIC_LIBS' ], scalapack_mt_static_libs_fosscuda )
15231626
15241627 def test_standalone_iccifort (self ):
15251628 """Test whether standalone installation of iccifort matches the iccifort toolchain definition."""
0 commit comments