summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRobert Cohn <robert.s.cohn@intel.com>2021-11-16 15:55:24 -0500
committerGitHub <noreply@github.com>2021-11-16 12:55:24 -0800
commit67cba372e83379c0c5d27838be6540d9f70daa6b (patch)
tree5b10f130f42bb8df08db0d5a1ab97ef1267df83e /lib
parentb194b957cea39338a1ab6cde169fab2222bdd4e7 (diff)
downloadspack-67cba372e83379c0c5d27838be6540d9f70daa6b.tar.gz
spack-67cba372e83379c0c5d27838be6540d9f70daa6b.tar.bz2
spack-67cba372e83379c0c5d27838be6540d9f70daa6b.tar.xz
spack-67cba372e83379c0c5d27838be6540d9f70daa6b.zip
Intel mpi: allow use of external libfabric (#27292)
Intel mpi comes with an installation of libfabric (which it needs as a dependency). It can use other implementations of libfabric at runtime though, so if you install a package that depends on `mpi` and `libfabric`, you can specify `intel-mpi+external-libfabric` and ensure that the Spack-built instance is used (both by `intel-mpi` and the root). Apply analogous change to intel-oneapi-mpi.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/build_systems/intel.py19
1 files changed, 10 insertions, 9 deletions
diff --git a/lib/spack/spack/build_systems/intel.py b/lib/spack/spack/build_systems/intel.py
index 2c6732c19a..c087596087 100644
--- a/lib/spack/spack/build_systems/intel.py
+++ b/lib/spack/spack/build_systems/intel.py
@@ -994,6 +994,16 @@ class IntelPackage(PackageBase):
libnames,
root=self.component_lib_dir('mpi'),
shared=True, recursive=True) + result
+ # Intel MPI since 2019 depends on libfabric which is not in the
+ # lib directory but in a directory of its own which should be
+ # included in the rpath
+ if self.version_yearlike >= ver('2019'):
+ d = ancestor(self.component_lib_dir('mpi'))
+ if '+external-libfabric' in self.spec:
+ result += self.spec['libfabric'].libs
+ else:
+ result += find_libraries(['libfabric'],
+ os.path.join(d, 'libfabric', 'lib'))
if '^mpi' in self.spec.root and ('+mkl' in self.spec or
self.provides('scalapack')):
@@ -1091,15 +1101,6 @@ class IntelPackage(PackageBase):
# which performs dizzyingly similar but necessarily different
# actions, and (b) function code leaves a bit more breathing
# room within the suffocating corset of flake8 line length.
-
- # Intel MPI since 2019 depends on libfabric which is not in the
- # lib directory but in a directory of its own which should be
- # included in the rpath
- if self.version_yearlike >= ver('2019'):
- d = ancestor(self.component_lib_dir('mpi'))
- libfabrics_path = os.path.join(d, 'libfabric', 'lib')
- env.append_path('SPACK_COMPILER_EXTRA_RPATHS',
- libfabrics_path)
else:
raise InstallError('compilers_of_client arg required for MPI')