intel-oneapi-mpi/mkl packages: add ilp64 support (#26045)
This commit is contained in:
parent
73913a5d51
commit
3a48f5f931
2 changed files with 42 additions and 15 deletions
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
||||
|
@ -61,26 +65,36 @@ def setup_dependent_build_environment(self, env, dependent_spec):
|
|||
env.set('MPIF90', join_path(dir, 'mpif90'))
|
||||
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",
|
||||
|
|
Loading…
Reference in a new issue