
Supersedes #46792. Closes #40018. Closes #31026. Closes #2700. There were a number of feature requests for os-specific config. This enables os-specific config without adding a lot of special sub-scopes. Support `include:` as an independent configuration schema, allowing users to include configuration scopes from files or directories. Includes can be: * conditional (similar to definitions in environments), and/or * optional (i.e., the include will be skipped if it does not exist). Includes can be paths or URLs (`ftp`, `https`, `http` or `file`). Paths can be absolute or relative . Environments can include configuration files using the same schema. Remote includes must be checked by `sha256`. Includes can also be recursive, and this modifies the config system accordingly so that we push included configuration scopes on the stack *before* their including scopes, and we remove configuration scopes from the stack when their including scopes are removed. For example, you could have an `include.yaml` file (e.g., under `$HOME/.spack`) to specify global includes: ``` include: - ./enable_debug.yaml - path: https://github.com/spack/spack-configs/blob/main/NREL/configs/mac/config.yaml sha256: 37f982915b03de18cc4e722c42c5267bf04e46b6a6d6e0ef3a67871fcb1d258b ``` Or an environment `spack.yaml`: ``` spack: include: - path: "/path/to/a/config-dir-or-file" when: os == "ventura" - ./path/relative/to/containing/file/that/is/required - path: "/path/with/spack/variables/$os/$target" optional: true - path: https://raw.githubusercontent.com/spack/spack-configs/refs/heads/main/path/to/required/raw/config.yaml sha256: 26e871804a92cd07bb3d611b31b4156ae93d35b6a6d6e0ef3a67871fcb1d258b ``` Updated TODO: - [x] Get existing unit tests to pass with Todd's changes - [x] Resolve new (or old) circular imports - [x] Ensure remote includes (global) work - [x] Ensure remote includes for environments work (note: caches remote files under user cache root) - [x] add sha256 field to include paths, validate, and require for remote includes - [x] add sha256 remote file unit tests - [x] revisit how diamond includes should work - [x] support recursive includes - [x] add recursive include unit tests - [x] update docs and unit test to indicate ordering of recursive includes with conflicting options is deferred to follow-on work --------- Signed-off-by: Todd Gamblin <tgamblin@llnl.gov> Co-authored-by: Peter Scheibel <scheibel1@llnl.gov> Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
114 lines
2.9 KiB
ReStructuredText
114 lines
2.9 KiB
ReStructuredText
.. Copyright Spack Project Developers. See COPYRIGHT file for details.
|
|
|
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
.. Spack documentation master file, created by
|
|
sphinx-quickstart on Mon Dec 9 15:32:41 2013.
|
|
You can adapt this file completely to your liking, but it should at least
|
|
contain the root `toctree` directive.
|
|
|
|
===================
|
|
Spack
|
|
===================
|
|
|
|
Spack is a package management tool designed to support multiple
|
|
versions and configurations of software on a wide variety of platforms
|
|
and environments. It was designed for large supercomputing centers,
|
|
where many users and application teams share common installations of
|
|
software on clusters with exotic architectures, using libraries that
|
|
do not have a standard ABI. Spack is non-destructive: installing a
|
|
new version does not break existing installations, so many
|
|
configurations can coexist on the same system.
|
|
|
|
Most importantly, Spack is *simple*. It offers a simple *spec* syntax
|
|
so that users can specify versions and configuration options
|
|
concisely. Spack is also simple for package authors: package files
|
|
are written in pure Python, and specs allow package authors to
|
|
maintain a single file for many different builds of the same package.
|
|
|
|
See the :doc:`features` for examples and highlights.
|
|
|
|
Get spack from the `github repository
|
|
<https://github.com/spack/spack>`_ and install your first
|
|
package:
|
|
|
|
.. code-block:: console
|
|
|
|
$ git clone -c feature.manyFiles=true --depth=2 https://github.com/spack/spack.git
|
|
$ cd spack/bin
|
|
$ ./spack install libelf
|
|
|
|
.. note::
|
|
``-c feature.manyFiles=true`` improves git's performance on repositories with 1,000+ files.
|
|
|
|
``--depth=2`` prunes the git history to reduce the size of the Spack installation.
|
|
|
|
If you're new to spack and want to start using it, see :doc:`getting_started`,
|
|
or refer to the full manual below.
|
|
|
|
|
|
.. toctree::
|
|
:maxdepth: 2
|
|
:caption: Basics
|
|
|
|
features
|
|
getting_started
|
|
basic_usage
|
|
replace_conda_homebrew
|
|
frequently_asked_questions
|
|
|
|
.. toctree::
|
|
:maxdepth: 2
|
|
:caption: Links
|
|
|
|
Tutorial (spack-tutorial.rtfd.io) <https://spack-tutorial.readthedocs.io>
|
|
Packages (packages.spack.io) <https://packages.spack.io>
|
|
Binaries (binaries.spack.io) <https://cache.spack.io>
|
|
|
|
.. toctree::
|
|
:maxdepth: 2
|
|
:caption: Reference
|
|
|
|
configuration
|
|
config_yaml
|
|
include_yaml
|
|
packages_yaml
|
|
build_settings
|
|
environments
|
|
containers
|
|
mirrors
|
|
module_file_support
|
|
repositories
|
|
binary_caches
|
|
bootstrapping
|
|
command_index
|
|
chain
|
|
extensions
|
|
pipelines
|
|
signing
|
|
gpu_configuration
|
|
|
|
.. toctree::
|
|
:maxdepth: 2
|
|
:caption: Contributing
|
|
|
|
contribution_guide
|
|
packaging_guide
|
|
build_systems
|
|
developer_guide
|
|
|
|
.. toctree::
|
|
:maxdepth: 2
|
|
:caption: API Docs
|
|
|
|
Spack API Docs <spack>
|
|
LLNL API Docs <llnl>
|
|
|
|
==================
|
|
Indices and tables
|
|
==================
|
|
|
|
* :ref:`genindex`
|
|
* :ref:`modindex`
|
|
* :ref:`search`
|