From 76ad803f25484612da2aa4523565d8b700419dc4 Mon Sep 17 00:00:00 2001 From: Robert Cohn Date: Wed, 24 Nov 2021 14:04:05 -0500 Subject: intel-oneapi-mkl: add cluster libs and option for static linking (#26256) --- lib/spack/spack/build_systems/oneapi.py | 41 ++++++++++++++++++++++++++++++++- lib/spack/spack/pkgkit.py | 6 ++++- 2 files changed, 45 insertions(+), 2 deletions(-) (limited to 'lib') 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 -- cgit v1.2.3-60-g2f50