solver: account for language preferences on reused specs (#51417)
Due to performance and modeling reasons, the specs that are reused in concretization are represented in the ASP problem with their pure build dependencies trimmed.
On
developthis means that any preference of the form:packages: c: prefer: - llvmis “disregarded” for purely reused specs, since the solver is not aware of the compiler nodes used for them.
This commit fixes the semantics of virtual preferences so that they are respected also for reused specs. It does so without representing their compilers as nodes - so the modeling of the DAG is not steered towards different optimal solutions by the missing compilers.
Signed-off-by: Massimiliano Culpo massimiliano.culpo@gmail.com
Getting Started • Config • Community • Contributing • Packaging Guide • Packages
Spack is a multi-platform package manager that builds and installs multiple versions and configurations of software. It works on Linux, macOS, Windows, and many supercomputers. Spack is non-destructive: installing a new version of a package does not break existing installations, so many configurations of the same package can coexist.
Spack offers a simple “spec” syntax that allows users to specify versions and configuration options. Package files are written in pure Python, and specs allow package authors to write a single script for many different builds of the same package. With Spack, you can build your software all the ways you want to.
See the Feature Overview for examples and highlights.
Installation
To install spack, first make sure you have Python & Git. Then:
Documentation
Full documentation is available, or run
spack helporspack help --all.For a cheat sheet on Spack syntax, run
spack help --spec.Tutorial
We maintain a hands-on tutorial. It covers basic to advanced usage, packaging, developer features, and large HPC deployments. You can do all of the exercises on your own laptop using a Docker container.
Feel free to use these materials to teach users at your organization about Spack.
Community
Spack is an open source project. Questions, discussion, and contributions are welcome. Contributions can be anything from new packages to bugfixes, documentation, or even new core features.
Resources:
@mentionus!Contributing
Contributing to Spack is relatively easy. Just send us a pull request.
Most contributors will want to contribute to Spack’s community package recipes. To do that, you should visit the spack-packages repository.
If you want to contribute to Spack itself, you can submit a pull request to the spack repository (this repository).
Your PR must:
developthe destination branch;git commit --signoff. Signoff says that you agree to the Developer Certificate of Origin. Note that this is different from signing commits, which you may also do, but it’s not required.We enforce these guidelines with our continuous integration (CI) process. To run tests locally, and for helpful tips on git, see our Contribution Guide.
Releases
For multi-user site deployments or other use cases that need very stable software installations, we recommend using Spack’s stable releases.
Each Spack release series also has a corresponding branch, e.g.
releases/v0.14has0.14.xversions of Spack, andreleases/v0.13has0.13.xversions. We backport important bug fixes to these branches but we do not advance the package versions or make other changes that would change the way Spack concretizes dependencies within a release branch. So, you can base your Spack deployment on a release branch andgit pullto get fixes, without the package churn that comes withdevelop.The latest release is always available with the
releases/latesttag.See the docs on releases for more details.
Code of Conduct
Please note that Spack has a Code of Conduct. By participating in the Spack community, you agree to abide by its rules.
Authors
Many thanks go to Spack’s contributors.
Spack was created by Todd Gamblin, tgamblin@llnl.gov.
Citing Spack
If you are referencing Spack in a publication, please cite the following paper:
On GitHub, you can copy this citation in APA or BibTeX format via the “Cite this repository” button. Or, see the comments in
CITATION.cfffor the raw BibTeX.License
Spack is distributed under the terms of both the MIT license and the Apache License (Version 2.0). Users may choose either license, at their option.
All new contributions must be made under both the MIT and Apache-2.0 licenses.
See LICENSE-MIT, LICENSE-APACHE, COPYRIGHT, and NOTICE for details.
SPDX-License-Identifier: (Apache-2.0 OR MIT)
LLNL-CODE-811652