summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorRobert Cohn <robert.s.cohn@intel.com>2021-09-24 13:32:06 -0400
committerGitHub <noreply@github.com>2021-09-24 10:32:06 -0700
commit3a48f5f931a3ef7f8b984248ff1cc87868013b3f (patch)
tree7b078a8c6196145831a437340d453254b693e8e9 /var
parent73913a5d51f571b71ba7ed68a5ca5c2105c8a607 (diff)
downloadspack-3a48f5f931a3ef7f8b984248ff1cc87868013b3f.tar.gz
spack-3a48f5f931a3ef7f8b984248ff1cc87868013b3f.tar.bz2
spack-3a48f5f931a3ef7f8b984248ff1cc87868013b3f.tar.xz
spack-3a48f5f931a3ef7f8b984248ff1cc87868013b3f.zip
intel-oneapi-mpi/mkl packages: add ilp64 support (#26045)
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py21
-rw-r--r--var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py36
2 files changed, 42 insertions, 15 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 6d9ee6dd91..1df2451588 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py
@@ -30,6 +30,9 @@ class IntelOneapiMkl(IntelOneApiLibraryPackage):
sha256='818b6bd9a6c116f4578cda3151da0612ec9c3ce8b2c8a64730d625ce5b13cc0c',
expand=False)
+ variant('ilp64', default=False,
+ description='Build with ILP64 support')
+
depends_on('intel-oneapi-tbb')
provides('fftw-api@3')
@@ -42,10 +45,20 @@ class IntelOneapiMkl(IntelOneApiLibraryPackage):
def component_dir(self):
return 'mkl'
+ def xlp64_lib(self, lib):
+ return lib + ('_ilp64'
+ if '+ilp64' in self.spec
+ else '_lp64')
+
+ @property
+ def headers(self):
+ include_path = join_path(self.component_path, 'include')
+ return find_headers('*', include_path)
+
@property
def libs(self):
- lib_path = join_path(self.component_path, 'lib', 'intel64')
- mkl_libs = ['libmkl_intel_lp64', 'libmkl_sequential', 'libmkl_core']
- libs = find_libraries(mkl_libs, root=lib_path, shared=True, recursive=False)
- libs += find_system_libraries(['libpthread', 'libm', 'libdl'], shared=True)
+ mkl_libs = [self.xlp64_lib('libmkl_intel'), 'libmkl_sequential', 'libmkl_core']
+ libs = find_libraries(mkl_libs,
+ join_path(self.component_path, 'lib', 'intel64'))
+ libs += find_system_libraries(['libpthread', 'libm', 'libdl'])
return libs
diff --git a/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py b/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py
index 05e1401842..4f712dcd3f 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py
@@ -4,6 +4,7 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+import glob
import platform
import subprocess
@@ -31,7 +32,10 @@ class IntelOneapiMpi(IntelOneApiLibraryPackage):
sha256='8b7693a156c6fc6269637bef586a8fd3ea6610cac2aae4e7f48c1fbb601625fe',
expand=False)
- provides('mpi@:3')
+ variant('ilp64', default=False,
+ description='Build with ILP64 support')
+
+ provides('mpi@:3.1')
depends_on('patchelf', type='build')
@@ -62,25 +66,35 @@ class IntelOneapiMpi(IntelOneApiLibraryPackage):
env.set('MPIFC', join_path(dir, 'mpifc'))
@property
+ def headers(self):
+ include_path = join_path(self.component_path, 'include')
+ headers = find_headers('*', include_path)
+ if '+ilp64' in self.spec:
+ headers += find_headers('*', join_path(include_path, 'ilp64'))
+ return headers
+
+ @property
def libs(self):
+ lib_dir = join_path(self.component_path, 'lib')
+ release_lib_dir = join_path(lib_dir, 'release')
libs = []
- for dir in [join_path('lib', 'release_mt'),
- 'lib',
- join_path('libfabric', 'lib')]:
- lib_path = join_path(self.component_path, dir)
- ldir = find_libraries('*', root=lib_path, shared=True, recursive=False)
- libs += ldir
+ if '+ilp64' in self.spec:
+ libs += find_libraries('libmpi_ilp64', release_lib_dir)
+ libs += find_libraries(['libmpicxx', 'libmpifort'], lib_dir)
+ libs += find_libraries('libmpi', release_lib_dir)
+ libs += find_system_libraries(['libdl', 'librt', 'libpthread'])
return libs
def install(self, spec, prefix):
super(IntelOneapiMpi, self).install(spec, prefix)
- # need to patch libmpi.so so it can always find libfabric
+ # Patch libmpi.so rpath so it can find libfabric
libfabric_rpath = join_path(self.component_path, 'libfabric', 'lib')
- for lib_version in ['debug', 'release', 'release_mt', 'debug_mt']:
- file = join_path(self.component_path, 'lib', lib_version, 'libmpi.so')
- subprocess.call(['patchelf', '--set-rpath', libfabric_rpath, file])
+ for libmpi in glob.glob(join_path(self.component_path,
+ 'lib', '**', 'libmpi*.so')):
+ subprocess.call(['patchelf', '--set-rpath', libfabric_rpath, libmpi])
+ # When spack builds from source
# fix I_MPI_SUBSTITUTE_INSTALLDIR and
# __EXEC_PREFIX_TO_BE_FILLED_AT_INSTALL_TIME__
scripts = ["mpif77", "mpif90", "mpigcc", "mpigxx", "mpiicc", "mpiicpc",