summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRobert Cohn <rscohn2@gmail.com>2021-11-24 14:04:05 -0500
committerGitHub <noreply@github.com>2021-11-24 11:04:05 -0800
commit76ad803f25484612da2aa4523565d8b700419dc4 (patch)
treecb5087df6fba9830ee39b5139fb013618795d6f1 /lib
parentdbf67d912c0ce7d2a26a67626154f3e2bd17a19b (diff)
downloadspack-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.py41
-rw-r--r--lib/spack/spack/pkgkit.py6
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