diff options
author | Robert Cohn <rscohn2@gmail.com> | 2021-11-24 14:04:05 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-24 11:04:05 -0800 |
commit | 76ad803f25484612da2aa4523565d8b700419dc4 (patch) | |
tree | cb5087df6fba9830ee39b5139fb013618795d6f1 /lib | |
parent | dbf67d912c0ce7d2a26a67626154f3e2bd17a19b (diff) | |
download | spack-76ad803f25484612da2aa4523565d8b700419dc4.tar.gz spack-76ad803f25484612da2aa4523565d8b700419dc4.tar.bz2 spack-76ad803f25484612da2aa4523565d8b700419dc4.tar.xz spack-76ad803f25484612da2aa4523565d8b700419dc4.zip |
intel-oneapi-mkl: add cluster libs and option for static linking (#26256)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/spack/spack/build_systems/oneapi.py | 41 | ||||
-rw-r--r-- | lib/spack/spack/pkgkit.py | 6 |
2 files changed, 45 insertions, 2 deletions
diff --git a/lib/spack/spack/build_systems/oneapi.py b/lib/spack/spack/build_systems/oneapi.py index 0ff77d729b..e50e921915 100644 --- a/lib/spack/spack/build_systems/oneapi.py +++ b/lib/spack/spack/build_systems/oneapi.py @@ -99,7 +99,13 @@ class IntelOneApiPackage(Package): class IntelOneApiLibraryPackage(IntelOneApiPackage): - """Base class for Intel oneAPI library packages.""" + """Base class for Intel oneAPI library packages. + + Contains some convenient default implementations for libraries. + Implement the method directly in the package if something + different is needed. + + """ @property def headers(self): @@ -111,3 +117,36 @@ class IntelOneApiLibraryPackage(IntelOneApiPackage): lib_path = join_path(self.component_path, 'lib', 'intel64') lib_path = lib_path if isdir(lib_path) else dirname(lib_path) return find_libraries('*', root=lib_path, shared=True, recursive=True) + + +class IntelOneApiStaticLibraryList(object): + """Provides ld_flags when static linking is needed + + Oneapi puts static and dynamic libraries in the same directory, so + -l will default to finding the dynamic library. Use absolute + paths, as recommended by oneapi documentation. + + Allow both static and dynamic libraries to be supplied by the + package. + """ + + def __init__(self, static_libs, dynamic_libs): + self.static_libs = static_libs + self.dynamic_libs = dynamic_libs + + @property + def directories(self): + return self.dynamic_libs.directories + + @property + def search_flags(self): + return self.dynamic_libs.search_flags + + @property + def link_flags(self): + return '-Wl,--start-group {0} -Wl,--end-group {1}'.format( + ' '.join(self.static_libs.libraries), self.dynamic_libs.link_flags) + + @property + def ld_flags(self): + return '{0} {1}'.format(self.search_flags, self.link_flags) diff --git a/lib/spack/spack/pkgkit.py b/lib/spack/spack/pkgkit.py index fc056f14ad..19c5fac500 100644 --- a/lib/spack/spack/pkgkit.py +++ b/lib/spack/spack/pkgkit.py @@ -29,7 +29,11 @@ from spack.build_systems.makefile import MakefilePackage from spack.build_systems.maven import MavenPackage from spack.build_systems.meson import MesonPackage from spack.build_systems.octave import OctavePackage -from spack.build_systems.oneapi import IntelOneApiLibraryPackage, IntelOneApiPackage +from spack.build_systems.oneapi import ( + IntelOneApiLibraryPackage, + IntelOneApiPackage, + IntelOneApiStaticLibraryList, +) from spack.build_systems.perl import PerlPackage from spack.build_systems.python import PythonPackage from spack.build_systems.qmake import QMakePackage |