summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--var/spack/repos/builtin/packages/blaspp/package.py7
-rw-r--r--var/spack/repos/builtin/packages/openblas/package.py9
2 files changed, 15 insertions, 1 deletions
diff --git a/var/spack/repos/builtin/packages/blaspp/package.py b/var/spack/repos/builtin/packages/blaspp/package.py
index 78532c1fb1..2a012c1ec1 100644
--- a/var/spack/repos/builtin/packages/blaspp/package.py
+++ b/var/spack/repos/builtin/packages/blaspp/package.py
@@ -29,8 +29,13 @@ class Blaspp(CMakePackage, CudaPackage):
depends_on('cmake@3.15.0:', type='build')
depends_on('blas')
+ # only supported with clingo solver: virtual dependency preferences
+ # depends_on('openblas threads=openmp', when='+openmp ^openblas')
+
# BLASpp tests will fail when using openblas > 0.3.5 without multithreading support
- conflicts('^openblas@0.3.6: threads=none', msg='BLASpp requires openblas multithreading support')
+ # locking is only supported in openblas 3.7+
+ conflicts('^openblas@0.3.6 threads=none', msg='BLASpp requires a threadsafe openblas')
+ conflicts('^openblas@0.3.7: ~locking', msg='BLASpp requires a threadsafe openblas')
def cmake_args(self):
spec = self.spec
diff --git a/var/spack/repos/builtin/packages/openblas/package.py b/var/spack/repos/builtin/packages/openblas/package.py
index 186630960b..87ac9122e2 100644
--- a/var/spack/repos/builtin/packages/openblas/package.py
+++ b/var/spack/repos/builtin/packages/openblas/package.py
@@ -44,6 +44,7 @@ class Openblas(MakefilePackage):
variant('shared', default=True, description='Build shared libraries')
variant('consistent_fpcsr', default=False, description='Synchronize FP CSR between threads (x86/x86_64 only)')
+ variant('locking', default=True, description='Build with thread safety')
variant(
'threads', default='none',
description='Multithreading support',
@@ -126,6 +127,7 @@ class Openblas(MakefilePackage):
conflicts('+consistent_fpcsr', when='threads=none',
msg='FPCSR consistency only applies to multithreading')
+ conflicts('threads=pthreads', when='~locking', msg='Pthread support requires +locking')
conflicts('threads=openmp', when='%apple-clang', msg="Apple's clang does not support OpenMP")
conflicts('threads=openmp @:0.2.19', when='%clang', msg='OpenBLAS @:0.2.19 does not support OpenMP with clang!')
@@ -255,6 +257,13 @@ class Openblas(MakefilePackage):
if self.spec.satisfies('@0.2.16'):
make_defs += ['BUILD_LAPACK_DEPRECATED=1']
+ # serial, but still thread-safe version
+ if self.spec.satisfies('@0.3.7:'):
+ if '+locking' in self.spec:
+ make_defs += ['USE_LOCKING=1']
+ else:
+ make_defs += ['USE_LOCKING=0']
+
# Add support for multithreading
if self.spec.satisfies('threads=openmp'):
make_defs += ['USE_OPENMP=1', 'USE_THREAD=1']