diff options
author | Robert Cohn <robert.s.cohn@intel.com> | 2021-09-24 13:32:06 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-24 10:32:06 -0700 |
commit | 3a48f5f931a3ef7f8b984248ff1cc87868013b3f (patch) | |
tree | 7b078a8c6196145831a437340d453254b693e8e9 | |
parent | 73913a5d51f571b71ba7ed68a5ca5c2105c8a607 (diff) | |
download | spack-3a48f5f931a3ef7f8b984248ff1cc87868013b3f.tar.gz spack-3a48f5f931a3ef7f8b984248ff1cc87868013b3f.tar.bz2 spack-3a48f5f931a3ef7f8b984248ff1cc87868013b3f.tar.xz spack-3a48f5f931a3ef7f8b984248ff1cc87868013b3f.zip |
intel-oneapi-mpi/mkl packages: add ilp64 support (#26045)
-rw-r--r-- | var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py | 21 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py | 36 |
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", |