Age | Commit message (Collapse) | Author | Files | Lines |
|
If the spec is external, it has extra attributes. If not, we know
which names are used. In both cases we don't need to search again
for executables.
Signed-off-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
|
|
|
|
* gptune: don't make `git` attribute an Executable
* gptune: fine, I'll fix style myself then
|
|
Signed-off-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
|
|
|
|
|
|
* Ensure no space in HDF5 lib variable.
* QE patch fix
|
|
|
|
* Replace if ... in spec with spec.satisfies in h* packages
* Replace if ... in spec with spec.satisfies in i* packages
|
|
Continuing the work started in #40326, his changes the structure
of Variant metadata on Packages from a single variant definition
per name with a list of `when` specs:
```
name: (Variant, [when_spec, ...])
```
to a Variant definition per `when_spec` per name:
```
when_spec: { name: Variant }
```
With this change, everything on a package *except* versions is
keyed by `when` spec. This:
1. makes things consistent, in that conditional things are (nearly)
all modeled in the same way; and
2. fixes an issue where we would lose information about multiple
variant definitions in a package (see #38302). We can now have,
e.g., different defaults for the same variant in different
versions of a package.
Some notes:
1. This required some pretty deep changes to the solver. Previously,
the solver's job was to select value(s) for a single variant definition
per name per package. Now, the solver needs to:
a. Determine which variant definition should be used for a given node,
which can depend on the node's version, compiler, target, other variants, etc.
b. Select valid value(s) for variants for each node based on the selected
variant definition.
When multiple variant definitions are enabled via their `when=` clause, we will
always prefer the *last* matching definition, by declaration order in packages. This
is implemented by adding a `precedence` to each variant at definition time, and we
ensure they are added to the solver in order of precedence.
This has the effect that variant definitions from derived classes are preferred over
definitions from superclasses, and the last definition within the same class sticks.
This matches python semantics. Some examples:
```python
class ROCmPackage(PackageBase):
variant("amdgpu_target", ..., when="+rocm")
class Hipblas(ROCmPackage):
variant("amdgpu_target", ...)
```
The global variant in `hipblas` will always supersede the `when="+rocm"` variant in
`ROCmPackage`. If `hipblas`'s variant was also conditional on `+rocm` (as it probably
should be), we would again filter out the definition from `ROCmPackage` because it
could never be activated. If you instead have:
```python
class ROCmPackage(PackageBase):
variant("amdgpu_target", ..., when="+rocm")
class Hipblas(ROCmPackage):
variant("amdgpu_target", ..., when="+rocm+foo")
```
The variant on `hipblas` will win for `+rocm+foo` but the one on `ROCmPackage` will
win with `rocm~foo`.
So, *if* we can statically determine if a variant is overridden, we filter it out.
This isn't strictly necessary, as the solver can handle many definitions fine, but
this reduces the complexity of the problem instance presented to `clingo`, and
simplifies output in `spack info` for derived packages. e.g., `spack info hipblas`
now shows only one definition of `amdgpu_target` where before it showed two, one of
which would never be used.
2. Nearly all access to the `variants` dictionary on packages has been refactored to
use the following class methods on `PackageBase`:
* `variant_names(cls) -> List[str]`: get all variant names for a package
* `has_variant(cls, name) -> bool`: whether a package has a variant with a given name
* `variant_definitions(cls, name: str) -> List[Tuple[Spec, Variant]]`: all definitions
of variant `name` that are possible, along with their `when` specs.
* `variant_items() -> `: iterate over `pkg.variants.items()`, with impossible variants
filtered out.
Consolidating to these methods seems to simplify the code a lot.
3. The solver does a lot more validation on variant values at setup time now. In
particular, it checks whether a variant value on a spec is valid given the other
constraints on that spec. This allowed us to remove the crufty logic in
`update_variant_validate`, which was needed because we previously didn't *know* after
a solve which variant definition had been used. Now, variant values from solves are
constructed strictly based on which variant definition was selected -- no more
heuristics.
4. The same prevalidation can now be done in package audits, and you can run:
```
spack audit packages --strict-variants
```
This turns up around 18 different places where a variant specification isn't valid
given the conditions on variant definitions in packages. I haven't fixed those here
but will open a separate PR to iterate on them. I plan to make strict checking the
defaults once all existing package issues are resolved. It's not clear to me that
strict checking should be the default for the prevalidation done at solve time.
There are a few other changes here that might be of interest:
1. The `generator` variant in `CMakePackage` is now only defined when `build_system=cmake`.
2. `spack info` has been updated to support the new metadata layout.
3. split out variant propagation into its own `.lp` file in the `solver` code.
4. Add better typing and clean up code for variant types in `variant.py`.
5. Add tests for new variant behavior.
|
|
|
|
* kokkos, kokkos-kernels, kokkos-nvcc-wrapper: add v4.4.01
* trilinos: update @[master,develop] dependency on kokkos
==> Error: InstallError: For Trilinos@[master,develop], ^kokkos version in spec must match version in Trilinos source code. Specify ^kokkos@4.4.01 for trilinos@[master,develop] instead of ^kokkos@4.4.00.
|
|
|
|
|
|
* libxslt: add through v1.1.42 (now at gnome.org)
* libxslt: add v1.1.35 (apparently forgotten)
|
|
|
|
|
|
* add master branch to rocfft and ensure its dependency on that branch for hip and rocm-cmake
* ensure hipfft@master uses rocm-cmake@master
|
|
|
|
* duckdb: add v1.0.0, v0.10.3
* Adding issue reference
* duckdb: add v1.1.0
---------
Signed-off-by: Teague Sterling <teaguesterling@gmail.com>
|
|
|
|
|
|
(#46211)
* openblas: fix flag_handler to respect flags
* arpack-ng: fix flag_handler to respect flags
* czmq: fix flag_handler to respect flags
* flex: fix flag_handler to respect flags
* json-c: fix flag_handler to respect flags
* mpifileutils: fix flag_handler to respect flags
* netlib-scalapack: fix flag_handler to respect flags
* sed: fix flag_handler to respect flags
---------
Co-authored-by: Harmen Stoppels <me@harmenstoppels.nl>
|
|
|
|
|
|
* petsc: configure requires rocm-core/rocm_version.h to detect ROCM_VERSION_MAJOR.ROCM_VERSION_MINOR.ROCM_VERSION_PATCH
* mfem: add dependency on rocprim (as needed via petsc dependency)
In file included from linalg/petsc.cpp:19:
In file included from linalg/linalg.hpp:65:
In file included from linalg/petsc.hpp:48:
In file included from /scratch/svcpetsc/spack.x/opt/spack/linux-ubuntu22.04-x86_64/gcc-11.4.0/petsc-3.22.0-7dsxwizo24ycnqvwnsscupuh4i7yusrh/include/petscsystypes.h:530:
In file included from /scratch/svcpetsc/spack.x/opt/spack/linux-ubuntu22.04-x86_64/gcc-11.4.0/rocthrust-6.1.2-ux5nmi4utw27oaqmz3sfjmhb6hyt5zed/include/thrust/complex.h:30:
/scratch/svcpetsc/spack.x/opt/spack/linux-ubuntu22.04-x86_64/gcc-11.4.0/rocthrust-6.1.2-ux5nmi4utw27oaqmz3sfjmhb6hyt5zed/include/thrust/detail/type_traits.h:29:10: fatal error: 'rocprim/detail/match_result_type.hpp' file not found
29 | #include <rocprim/detail/match_result_type.hpp>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
* updated HyPar repo links
* updated configure args with and without MPI
* updated checksum for zipped source
|
|
* py-awkward: add v2.6.6 and py-awkward-cpp v35
* Add dependencies on python and numpy
* Add a conflict with GCC 14
* Move conflict to py-awkward-cpp
* py-awkward: 2.1.1 depends on py-awkward-cpp@12
---------
Co-authored-by: jmcarcell <jmcarcell@users.noreply.github.com>
Co-authored-by: Wouter Deconinck <wdconinc@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
* texlive: use https
* texlive: add 20230313 and 20240312 versions
|
|
* py-pydantic-core: new package
* [py-pydantic-core] fixed licence(checked_by)
* [py-pydantic-core] removed unnecessary python dependency
---------
Co-authored-by: Alex C Leute <acl2809@rit.edu>
|
|
* [py-pypdf] New package
* [py-pypdf] added webpage
|
|
* Update seacas package.py
Adding libcatalyst variant to seacas package
When seacas is installed with "seacas +libcatalyst"
then a dependency on the spack package "libcatalyst"
(which is catalyst api 2 from kitware) is added, and
the appropriage cmake variable for the catalyst TPL
is set. The mpi variant option in catalyst (i.e. build
with mpi or build without mpi) is passed on to
libcatalyst. The default of the libcatalyst variant
is false/off, so if seacas is installed without the
"+libcatalyst" in the spec it will behave exactly as
it did before the introduction of this variant.
* shortened line 202 to comply with < 100 characters per line style requirement
|
|
* nasm: add v2.16.03
* nasm: don't need 2.16.02
|
|
Co-authored-by: jmcarcell <jmcarcell@users.noreply.github.com>
|
|
|
|
|
|
* e4s rocm external ci stack: upgrade to rocm v6.2.0
* magma: add rocm 6.2.0
|
|
|
|
* fastjet: avoid plugins=all,cxx combinations
* fastjet: depends_on fortran when plugins=all or plugins=pxcone
|
|
* tl-expected: add v1.1.0; deprecated calver version
* tl-expected: fix url
|
|
* py-httpx: New version
* [py-httpx] fix when for dependencies
* [py-httpx] organized dependencies
* [py-httpx] added version 0.27.2
---------
Co-authored-by: Alex C Leute <aclrc@rit.edu>
|
|
* emacs: add v29.4
* confirmed license
* emacs: update git link for https clones
---------
Co-authored-by: Wouter Deconinck <wdconinc@gmail.com>
|
|
|
|
* fd: add v10.2.0
* fd: add rust build dependency constraint
|
|
|