Documentation for external packages.
This commit is contained in:
parent
18f0b24a7f
commit
fac4428766
@ -54,6 +54,79 @@ more elements to the list to indicate where your own site's temporary
|
||||
directory is.
|
||||
|
||||
|
||||
External Packages
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
It's possible for Spack to use certain externally-installed
|
||||
packages rather than always rebuilding packages. This may be desirable
|
||||
if machines ship with system packages, such as a customized MPI
|
||||
that should be used instead of Spack building its own MPI.
|
||||
|
||||
External packages are configured through the ``packages.yaml`` file found
|
||||
in a Spack installation's ``etc/spack/`` or a user's ``~/.spack/``
|
||||
directory. Here's an example of an external configuration::
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
packages:
|
||||
- openmpi@1.4.3%gcc@4.4.7=chaos_5_x86_64_ib:
|
||||
path: /opt/openmpi-1.4.3
|
||||
- openmpi@1.4.3%gcc@4.4.7=chaos_5_x86_64_ib+debug:
|
||||
path: /opt/openmpi-1.4.3-debug
|
||||
- openmpi@1.6.5%intel@10.1=chaos_5_x86_64_ib:
|
||||
path: /opt/openmpi-1.6.5-intel
|
||||
|
||||
This example lists three installations of OpenMPI, one built with gcc,
|
||||
one built with gcc and debug information, and another built with OpenMPI.
|
||||
If Spack is asked to build a package that uses one of these MPIs as a
|
||||
dependency, it link the package to the pre-installed OpenMPI in
|
||||
the given directory.
|
||||
|
||||
Each ``packages.yaml`` should begin with a ``packages:`` token, followed
|
||||
by a list of package specs. Specs in the ``packages.yaml`` have at most
|
||||
one ``path`` tag, which specifies the top-level directory where the
|
||||
spec is installed.
|
||||
|
||||
Each spec should be as well-defined as reasonably possible. If a
|
||||
package lacks a spec component, such as missing a compiler or
|
||||
package version, then Spack will guess the missing component based
|
||||
on its most-favored packages, and it may guess incorrectly.
|
||||
|
||||
All package versions and compilers listed in ``packages.yaml`` should
|
||||
have entries in Spack's packages and compiler configuration, even
|
||||
the package and compiler may not actually be used.
|
||||
|
||||
The packages configuration can tell Spack to use an external location
|
||||
for certain package versions, but it does not restrict Spack to using
|
||||
external packages. In the above example, if an OpenMPI 1.8.4 became
|
||||
available Spack may choose to start building and linking with that version
|
||||
rather than continue using the pre-installed OpenMPI versions.
|
||||
|
||||
To prevent this, the ``packages.yaml`` configuration also allows packages
|
||||
to be flagged as non-buildable. The previous example could be modified to
|
||||
be::
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
packages:
|
||||
- openmpi:
|
||||
nobuild: True
|
||||
- openmpi@1.4.3%gcc@4.4.7=chaos_5_x86_64_ib:
|
||||
path: /opt/openmpi-1.4.3
|
||||
- openmpi@1.4.3%gcc@4.4.7=chaos_5_x86_64_ib+debug:
|
||||
path: /opt/openmpi-1.4.3-debug
|
||||
- openmpi@1.6.5%intel@10.1=chaos_5_x86_64_ib:
|
||||
path: /opt/openmpi-1.6.5-intel
|
||||
|
||||
The addition of the ``nobuild`` flag tells Spack that it should never build
|
||||
its own version of OpenMPI, and it will instead always rely on a pre-built
|
||||
OpenMPI. Similar to ``path``, ``nobuild`` is specified as a property under
|
||||
a spec and will prevent building of anything that satisfies that spec.
|
||||
|
||||
The ``nobuild`` does not need to be paired with external packages.
|
||||
It could also be used alone to forbid versions of packages that may be
|
||||
buggy or otherwise undesirable.
|
||||
|
||||
|
||||
Profiling
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user