diff options
Diffstat (limited to 'var')
-rwxr-xr-x | var/spack/repos/builtin/packages/cray-libsci/package.py | 50 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mvapich2/package.py | 30 |
2 files changed, 66 insertions, 14 deletions
diff --git a/var/spack/repos/builtin/packages/cray-libsci/package.py b/var/spack/repos/builtin/packages/cray-libsci/package.py index c0313a1e39..d391f471c3 100755 --- a/var/spack/repos/builtin/packages/cray-libsci/package.py +++ b/var/spack/repos/builtin/packages/cray-libsci/package.py @@ -2,10 +2,9 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) - -from llnl.util.filesystem import LibraryList -from spack import * -import os +from spack.concretize import NoBuildError +from spack.util.module_cmd import module +from spack.util.module_cmd import get_path_args_from_module_line class CrayLibsci(Package): @@ -22,14 +21,53 @@ class CrayLibsci(Package): version("16.06.1") version("16.03.1") + variant("shared", default=True, description="enable shared libs") + variant("openmp", default=False, description="link with openmp") + variant("mpi", default=False, description="link with mpi libs") + provides("blas") provides("lapack") provides("scalapack") - # NOTE: Cray compiler wrappers already include linking for the following + canonical_names = { + 'gcc': 'GNU', + 'cce': 'CRAY', + 'intel': 'INTEL', + } + + @property + def modname(self): + return "cray-libsci/{0}".format(self.version) + + @property + def external_prefix(self): + libsci_module = module("show", self.modname).splitlines() + + for line in libsci_module: + if "CRAY_LIBSCI_PREFIX_DIR" in line: + return get_path_args_from_module_line(line)[0] + @property def blas_libs(self): - return LibraryList(os.path.join(self.prefix.lib, 'libsci.so')) + shared = True if "+shared" in self.spec else False + compiler = self.spec.compiler.name + + if "+openmp" in self.spec and "+mpi" in self.spec: + lib = "libsci_{0}_mpi_mp" + elif "+openmp" in self.spec: + lib = "libsci_{0}_mp" + elif "+mpi" in self.spec: + lib = "libsci_{0}_mpi" + else: + lib = "libsci_{0}" + + libname = lib.format(self.canonical_names[compiler].lower()) + + return find_libraries( + libname, + root=self.prefix.lib, + shared=shared, + recursive=False) @property def lapack_libs(self): diff --git a/var/spack/repos/builtin/packages/mvapich2/package.py b/var/spack/repos/builtin/packages/mvapich2/package.py index f6301a564a..d8398b336d 100644 --- a/var/spack/repos/builtin/packages/mvapich2/package.py +++ b/var/spack/repos/builtin/packages/mvapich2/package.py @@ -208,10 +208,17 @@ class Mvapich2(AutotoolsPackage): env.set('SLURM_MPI_TYPE', 'pmi2') def setup_dependent_build_environment(self, env, dependent_spec): - env.set('MPICC', os.path.join(self.prefix.bin, 'mpicc')) - env.set('MPICXX', os.path.join(self.prefix.bin, 'mpicxx')) - env.set('MPIF77', os.path.join(self.prefix.bin, 'mpif77')) - env.set('MPIF90', os.path.join(self.prefix.bin, 'mpif90')) + # On Cray, the regular compiler wrappers *are* the MPI wrappers. + if 'platform=cray' in self.spec: + env.set('MPICC', spack_cc) + env.set('MPICXX', spack_cxx) + env.set('MPIF77', spack_fc) + env.set('MPIF90', spack_fc) + else: + env.set('MPICC', join_path(self.prefix.bin, 'mpicc')) + env.set('MPICXX', join_path(self.prefix.bin, 'mpicxx')) + env.set('MPIF77', join_path(self.prefix.bin, 'mpif77')) + env.set('MPIF90', join_path(self.prefix.bin, 'mpif90')) env.set('MPICH_CC', spack_cc) env.set('MPICH_CXX', spack_cxx) @@ -220,10 +227,17 @@ class Mvapich2(AutotoolsPackage): env.set('MPICH_FC', spack_fc) def setup_dependent_package(self, module, dependent_spec): - self.spec.mpicc = os.path.join(self.prefix.bin, 'mpicc') - self.spec.mpicxx = os.path.join(self.prefix.bin, 'mpicxx') - self.spec.mpifc = os.path.join(self.prefix.bin, 'mpif90') - self.spec.mpif77 = os.path.join(self.prefix.bin, 'mpif77') + if 'platform=cray' in self.spec: + self.spec.mpicc = spack_cc + self.spec.mpicxx = spack_cxx + self.spec.mpifc = spack_fc + self.spec.mpif77 = spack_f77 + else: + self.spec.mpicc = join_path(self.prefix.bin, 'mpicc') + self.spec.mpicxx = join_path(self.prefix.bin, 'mpicxx') + self.spec.mpifc = join_path(self.prefix.bin, 'mpif90') + self.spec.mpif77 = join_path(self.prefix.bin, 'mpif77') + self.spec.mpicxx_shared_libs = [ os.path.join(self.prefix.lib, 'libmpicxx.{0}'.format(dso_suffix)), os.path.join(self.prefix.lib, 'libmpi.{0}'.format(dso_suffix)) |