summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/docs/packaging_guide.rst53
1 files changed, 41 insertions, 12 deletions
diff --git a/lib/spack/docs/packaging_guide.rst b/lib/spack/docs/packaging_guide.rst
index e400272e59..402de6d8ed 100644
--- a/lib/spack/docs/packaging_guide.rst
+++ b/lib/spack/docs/packaging_guide.rst
@@ -2518,25 +2518,54 @@ is handy when a package supports additional variants like
variant('openmp', default=True, description="Enable OpenMP support.")
-^^^^^^^^^^^^^^^^^^^^^^^^^
-Blas and Lapack libraries
-^^^^^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Blas, Lapack and ScaLapack libraries
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Multiple packages provide implementations of ``Blas`` and ``Lapack``
+Multiple packages provide implementations of ``Blas``, ``Lapack`` and ``ScaLapack``
routines. The names of the resulting static and/or shared libraries
differ from package to package. In order to make the ``install()`` method
independent of the choice of ``Blas`` implementation, each package which
-provides it sets up ``self.spec.blas_libs`` to point to the correct
-``Blas`` libraries. The same applies to packages which provide
-``Lapack``. Package developers are advised to use these variables, for
-example ``spec['blas'].blas_libs.joined()`` instead of hard-coding them:
+provides it implements ``@property def blas_libs(self):`` to return an object
+of
+`LibraryList <http://spack.readthedocs.io/en/latest/llnl.util.html#llnl.util.filesystem.LibraryList>`_
+type which simplifies usage of a set of libraries.
+The same applies to packages which provide ``Lapack`` and ``ScaLapack``.
+Package developers are requested to use this interface. Common usage cases are:
+
+1. Space separated list of full paths
.. code-block:: python
- if 'openblas' in spec:
- libs = join_path(spec['blas'].prefix.lib, 'libopenblas.so')
- elif 'intel-mkl' in spec:
- ...
+ lapack_blas = spec['lapack'].libs + spec['blas'].libs
+ options.append(
+ '--with-blas-lapack-lib={0}'.format(lapack_blas.joined())
+ )
+
+2. Names of libraries and directories which contain them
+
+.. code-block:: python
+
+ blas = spec['blas'].libs
+ options.extend([
+ '-DBLAS_LIBRARY_NAMES={0}'.format(';'.join(blas.names)),
+ '-DBLAS_LIBRARY_DIRS={0}'.format(';'.join(blas.directories))
+ ])
+
+3. Search and link flags
+
+.. code-block:: python
+
+ math_libs = spec['scalapack'].libs + spec['lapack'].libs + spec['blas'].libs
+ options.append(
+ '-DMATH_LIBS:STRING={0}'.format(math_libs.ld_flags)
+ )
+
+
+For more information, see documentation of
+`LibraryList <http://spack.readthedocs.io/en/latest/llnl.util.html#llnl.util.filesystem.LibraryList>`_
+class.
+
.. _prefix-objects: