summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/openblas/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/openblas/package.py')
-rw-r--r--var/spack/repos/builtin/packages/openblas/package.py58
1 files changed, 53 insertions, 5 deletions
diff --git a/var/spack/repos/builtin/packages/openblas/package.py b/var/spack/repos/builtin/packages/openblas/package.py
index 781a1e2ec8..4522130ccc 100644
--- a/var/spack/repos/builtin/packages/openblas/package.py
+++ b/var/spack/repos/builtin/packages/openblas/package.py
@@ -1,30 +1,78 @@
from spack import *
import sys
+import os
class Openblas(Package):
"""OpenBLAS: An optimized BLAS library"""
homepage = "http://www.openblas.net"
url = "http://github.com/xianyi/OpenBLAS/archive/v0.2.15.tar.gz"
+ version('0.2.17', '664a12807f2a2a7cda4781e3ab2ae0e1')
version('0.2.16', 'fef46ab92463bdbb1479dcec594ef6dc')
version('0.2.15', 'b1190f3d3471685f17cfd1ec1d252ac9')
+ variant('shared', default=True, description="Build shared libraries as well as static libs.")
+ variant('openmp', default=True, description="Enable OpenMP support.")
+
# virtual dependency
provides('blas')
provides('lapack')
+
def install(self, spec, prefix):
- make('libs', 'netlib', 'shared', 'CC=cc', 'FC=f77')
- make('install', "PREFIX='%s'" % prefix)
+ # Openblas is picky about compilers. Configure fails with
+ # FC=/abs/path/to/f77, whereas FC=f77 works fine.
+ # To circumvent this, provide basename only:
+ make_defs = ['CC=%s' % os.path.basename(spack_cc),
+ 'FC=%s' % os.path.basename(spack_f77)]
+
+ make_targets = ['libs', 'netlib']
+
+ # Build shared if variant is set.
+ if '+shared' in spec:
+ make_targets += ['shared']
+ else:
+ make_defs += ['NO_SHARED=1']
+
+ # fix missing _dggsvd_ and _sggsvd_
+ if spec.satisfies('@0.2.16'):
+ make_defs += ['BUILD_LAPACK_DEPRECATED=1']
+
+ # Add support for OpenMP
+ # Note: Make sure your compiler supports OpenMP
+ if '+openmp' in spec:
+ make_defs += ['USE_OPENMP=1']
+
+ make_args = make_defs + make_targets
+ make(*make_args)
+
+ make("tests", *make_defs)
+
+ # no quotes around prefix (spack doesn't use a shell)
+ make('install', "PREFIX=%s" % prefix, *make_defs)
- lib_dsuffix = 'dylib' if sys.platform == 'darwin' else 'so'
# Blas virtual package should provide blas.a and libblas.a
with working_dir(prefix.lib):
symlink('libopenblas.a', 'blas.a')
symlink('libopenblas.a', 'libblas.a')
- symlink('libopenblas.%s' % lib_dsuffix, 'libblas.%s' % lib_dsuffix)
+ if '+shared' in spec:
+ symlink('libopenblas.%s' % dso_suffix, 'libblas.%s' % dso_suffix)
# Lapack virtual package should provide liblapack.a
with working_dir(prefix.lib):
symlink('libopenblas.a', 'liblapack.a')
- symlink('libopenblas.%s' % lib_dsuffix, 'liblapack.%s' % lib_dsuffix)
+ if '+shared' in spec:
+ symlink('libopenblas.%s' % dso_suffix, 'liblapack.%s' % dso_suffix)
+
+
+ def setup_dependent_package(self, module, dspec):
+ # This is WIP for a prototype interface for virtual packages.
+ # We can update this as more builds start depending on BLAS/LAPACK.
+ libdir = find_library_path('libopenblas.a', self.prefix.lib64, self.prefix.lib)
+
+ self.spec.blas_static_lib = join_path(libdir, 'libopenblas.a')
+ self.spec.lapack_static_lib = self.spec.blas_static_lib
+
+ if '+shared' in self.spec:
+ self.spec.blas_shared_lib = join_path(libdir, 'libopenblas.%s' % dso_suffix)
+ self.spec.lapack_shared_lib = self.spec.blas_shared_lib