summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorRobert Cohn <robert.s.cohn@intel.com>2023-06-30 18:38:40 -0400
committerGitHub <noreply@github.com>2023-06-30 18:38:40 -0400
commit0c2b98ca7044588d56e9e4c9c178f411b6dc15c1 (patch)
tree0903be9b80d4f7334920897ae51e5888f5ea332b /var
parent43143b134a761b72fce991a563decec5963aae8a (diff)
downloadspack-0c2b98ca7044588d56e9e4c9c178f411b6dc15c1.tar.gz
spack-0c2b98ca7044588d56e9e4c9c178f411b6dc15c1.tar.bz2
spack-0c2b98ca7044588d56e9e4c9c178f411b6dc15c1.tar.xz
spack-0c2b98ca7044588d56e9e4c9c178f411b6dc15c1.zip
[intel-oneapi-mkl] add openmpi support for +cluster (#38554)
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py31
1 files changed, 20 insertions, 11 deletions
diff --git a/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py b/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py
index 1b2c844833..2a67d87768 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py
@@ -125,7 +125,7 @@ class IntelOneapiMkl(IntelOneApiLibraryPackage):
@property
def libs(self):
- shared = "+shared" in self.spec
+ shared = self.spec.satisfies("+shared")
libs = self._find_mkl_libs(shared)
@@ -145,28 +145,27 @@ class IntelOneapiMkl(IntelOneApiLibraryPackage):
# flags too. We prefer the __INTEL_POST_CFLAGS/__INTEL_POST_FFLAGS flags over
# the PRE ones so that any other RPATHs provided by the users on the command
# line come before and take precedence over the ones we inject here.
- for d in self._find_mkl_libs("+shared" in self.spec).directories:
+ for d in self._find_mkl_libs(self.spec.satisfies("+shared")).directories:
flag = "-Wl,-rpath,{0}".format(d)
env.append_path("__INTEL_POST_CFLAGS", flag, separator=" ")
env.append_path("__INTEL_POST_FFLAGS", flag, separator=" ")
def setup_dependent_build_environment(self, env, dependent_spec):
# Only if environment modifications are desired (default is +envmods)
- if "+envmods" in self.spec:
+ if self.spec.satisfies("+envmods"):
env.set("MKLROOT", self.component_prefix)
env.append_path("PKG_CONFIG_PATH", self.component_prefix.lib.pkgconfig)
def _find_mkl_libs(self, shared):
libs = []
- if "+cluster" in self.spec:
+ if self.spec.satisfies("+cluster"):
libs.extend([self._xlp64_lib("libmkl_scalapack"), "libmkl_cdft_core"])
libs.append(self._xlp64_lib("libmkl_intel"))
-
- if "threads=tbb" in self.spec:
+ if self.spec.satisfies("threads=tbb"):
libs.append("libmkl_tbb_thread")
- elif "threads=openmp" in self.spec:
+ elif self.spec.satisfies("threads=openmp"):
if self.spec.satisfies("%oneapi") or self.spec.satisfies("%intel"):
libs.append("libmkl_intel_thread")
else:
@@ -176,8 +175,18 @@ class IntelOneapiMkl(IntelOneApiLibraryPackage):
libs.append("libmkl_core")
- if "+cluster" in self.spec:
- libs.append(self._xlp64_lib("libmkl_blacs_intelmpi"))
+ if self.spec.satisfies("+cluster"):
+ if any(self.spec.satisfies(m) for m in ["^intel-oneapi-mpi", "^intel-mpi", "^mpich"]):
+ libs.append(self._xlp64_lib("libmkl_blacs_intelmpi"))
+ elif self.spec.satisfies("^openmpi"):
+ libs.append(self._xlp64_lib("libmkl_blacs_openmpi"))
+ else:
+ raise RuntimeError(
+ (
+ "intel-oneapi-mpi +cluster requires one of "
+ "^intel-oneapi-mpi, ^intel-mpi, ^mpich, or ^openmpi"
+ )
+ )
lib_path = self.component_prefix.lib.intel64
lib_path = lib_path if isdir(lib_path) else dirname(lib_path)
@@ -186,12 +195,12 @@ class IntelOneapiMkl(IntelOneApiLibraryPackage):
# Add MPI libraries for cluster support. If MPI is not in the
# spec, then MKL is externally installed and application must
# link with MPI libaries
- if "+cluster" in self.spec and "mpi" in self.spec:
+ if self.spec.satisfies("+cluster ^mpi"):
resolved_libs = resolved_libs + self.spec["mpi"].libs
return resolved_libs
def _xlp64_lib(self, lib):
- return lib + ("_ilp64" if "+ilp64" in self.spec else "_lp64")
+ return lib + ("_ilp64" if self.spec.satisfies("+ilp64") else "_lp64")
@run_after("install")
def fixup_prefix(self):