summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
2024-04-15build(deps): bump black from 24.3.0 to 24.4.0 in /lib/spack/docs (#43642)dependabot[bot]1-1/+1
Bumps [black](https://github.com/psf/black) from 24.3.0 to 24.4.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/24.3.0...24.4.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-12remove hardcoded hipcc (#43644)Chris White1-5/+0
2024-04-12solver: add an integrity constraint for virtual nodes (#43582)Massimiliano Culpo1-0/+6
Upon close inspection of clingo answer sets, in some cases we have "equivalent" (i.e. same hash for the concrete spec) duplicates that differ only because of virtual nodes that are added to the answer set, without any edge using them.
2024-04-11Allow packages to be pushed to build cache after install from source (#42423)Radim JanalĂ­k7-16/+159
This commit adds a property `autopush` to mirrors. When true, every source build is immediately followed by a push to the build cache. This is useful in ephemeral environments such as CI / containers. To enable autopush on existing build caches, use `spack mirror set --autopush <name>`. The same flag can be used in `spack mirror add`.
2024-04-11invalid compiler: warn instead of error (#43491)Greg Becker1-4/+14
2024-04-11Reuse specs built with compilers not in config (#43539)Massimiliano Culpo13-146/+311
Allow reuse of specs that were built with compilers not in the current configuration. This means that specs from build caches don't need to have a matching compiler locally to be reused. Similarly when updating a distro. If a node needs to be built, only available compilers will be considered as candidates.
2024-04-08Windows bugfix: safe rename if renaming file onto itself (#43456)John W. Parent2-5/+113
* Generally use os.replace on Windows and Linux * Windows behavior for os.replace differs when the destination exists and is a symlink to a directory: on Linux the dst is replaced and on Windows this fails - this PR makes Windows behave like Linux (by deleting the dst before doing the rename unless src and dst are the same)
2024-04-06oneapi licenses (#43451)Robert Cohn1-1/+2
2024-04-05Use correct method "append" instead of extend (#43514)John W. Parent1-2/+2
2024-04-05Improve hit-rate on buildcaches (#43272)Massimiliano Culpo15-51/+134
* Relax compiler and target mismatches The mismatch occurs on an edge. Previously it was assigned the parent priority, now it is assigned the child priority. This should make reuse from buildcaches or store more likely, since most mismatches will be counted with "reused" priority. * Optimize version badness for runtimes at very low priority We don't want to e.g. switch other attributes because we cannot reuse an old installed runtime. * Optimize runtime attributes at very low priority This is such that the version of the runtime would not influence whether we should reuse a spec. Compiler mismatches are considered for runtimes, to avoid situations where compiling foo%gcc@9 brings in gcc-runtime%gcc@13 if gcc@13 is among the available compilers * Exclude specs without runtimes from reuse This should ensure that we do not reuse specs that could be broken, as they expect the compiler to be installed in a specific place.
2024-04-05Do not acquire a write lock on the env post install if no views (#43505)Harmen Stoppels1-4/+3
2024-04-04installer.py: compute package_id from spec (#43485)Harmen Stoppels2-39/+37
The installer runs `get_dependent_ids`, which follows edges outside the subdag that's being installed, so it returns a superset of the actual dependents. That's generally fine, except that it calls `s.package` on every dependent, which triggers a package class to be instantiated, which is a lot of work. Instead, compute the package id from the spec, since that's all that's used anyways and does not trigger *lots* of slow and redundant instantiations of package objects.
2024-04-04Msvc: Determine OneAPI_ROOT from fc compiler path (#43131)John W. Parent1-1/+1
If ONEAPI_ROOT is not set as an environment variable, the current approach will raise an error. Instead we can compute the OneAPI_ROOT from the compiler paths like we do with vcvarsall.
2024-04-03remove dpcpp compiler and package (#43418)Greg Becker3-42/+2
`dpcpp` is deprecated by intel and has been superseded by `oneapi` compilers for a very long time. --------- Co-authored-by: becker33 <becker33@users.noreply.github.com>
2024-04-03Convert curl env mod method to a side effect (#43474)psakievich1-3/+4
2024-04-02RADIUSS packages update (Starting over #39613) (#41375)Adrien Bernede1-15/+27
2024-04-01Add handling of custom ssl certs in urllib ops (#42953)psakievich6-4/+163
This PR allows the user to specify a path to a custom cert file (or directory) in Spack's config: ```yaml # This is where custom certs for proxy/firewall are stored. # It can be a path or environment variable. To match ssl env configuration # the default is the environment variable SSL_CERT_FILE ssl_certs: $SSL_CERT_FILE ``` `config:ssl_certs` can be a path to a file or a directory, or it can be and environment variable that resolves to one of those. When it posts to something valid, Spack will update the ssl context to include custom certs, and fetching via `urllib` and `curl` will trust the provided certs. This should resolve many issues with fetching behind corporate firewalls. --------- Co-authored-by: psakievich <psakievich@users.noreply.github.com> Co-authored-by: Alec Scott <alec@bcs.sh>
2024-03-31Concretize `when_possible`: add failure detection and explicit message (#43202)Peter Scheibel5-7/+27
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2024-03-29CI Reproducer on Metal (#43411)kwryankrattiger1-2/+8
* MacOS image remove requires override syntax * Metal reproducer auto start and cross-platform
2024-03-29Don't delete "spack develop" build artifacts after install (#43424)Peter Scheibel6-10/+60
After #41373, where we stopped considering the source directory to be the stage for develop builds, we resumed *deleting* the stage even after a successful build. We don't want this for develop builds because developers need to iterate; we should keep the artifacts unless they explicitly run `spack clean`. Now: - [x] Build artifacts for develop packages are not removed after a successful install - [x] They are also not removed before an install starts, i.e. develop packages always reuse prior artifacts, if available. - [x] They can be deleted in any other context, e.g. by running `spack clean --stage`
2024-03-29spack load: remove --only argument (#42120)Massimiliano Culpo1-17/+0
The argument was deprecated in v0.21 and slated for removal in v0.22.
2024-03-28Add ability to rename environments (#43296)Kyle Knoepfel2-2/+196
2024-03-28CI: fail the rebuild command if buildcache push failed (#40045)kwryankrattiger8-273/+279
2024-03-28spack find: add options for local/upstream only (#42999)Greg Becker4-7/+58
Users requested an option to filter between local/upstream results in `spack find` output. ``` # default behavior, same as without --install-tree argument $ spack find --install-tree all # show only local results $ spack find --install-tree local # show results from all upstreams $ spack find --install-tree upstream # show results from a particular upstream or the local install_tree $ spack find --install-tree /path/to/install/tree/root ``` --------- Co-authored-by: becker33 <becker33@users.noreply.github.com>
2024-03-27Enable ASAN in ROCm packages (#42704)afzpatel1-0/+28
* Initial commit to enable ASAN * fix styling * fix styling * add asan option for hip-tensor and roctracer-dev
2024-03-27Add config option and compiler support to reuse across OS's (#42693)psakievich4-1/+32
* Allow compilers to function across compatible OS's * Add documentation in the default yaml Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com> Co-authored-by: Gregory Becker <becker33@llnl.gov>
2024-03-27Improve fixup macos rpath unit test (#43392)Massimiliano Culpo1-6/+17
Starting from XCode version 15 the linker ignores duplicate rpaths, so the libraries don't need fixing in those cases
2024-03-26Add macos-14 as a runner (Apple M1) (#42728)Massimiliano Culpo1-0/+3
* Add macos-14 as a runner (Apple M1) * Mark a test xfail We need to check later if this test needs modifications on Apple Silicon chips. --------- Co-authored-by: Harmen Stoppels <me@harmenstoppels.nl> Co-authored-by: alalazo <alalazo@users.noreply.github.com>
2024-03-26buildcache sync: manifest-glob with arbitrary destination (#41284)kwryankrattiger2-9/+102
* buildcache sync: manifest-glob with arbitrary destination The current implementation of the --manifest-glob is a bit restrictive requiring the destination to be known by the generation stage of CI. This allows specifying an arbitrary destination mirror URL. * Add unit test for buildcache sync with manifest * Fix test and arguments for manifest-glob with override destination * Add testing path for unused mirror argument
2024-03-26Allow unit test to work on Apple M1/M2 (#43363)Massimiliano Culpo18-448/+278
* Remove a few compilers from static test data These compilers were used only in a bunch of tests, so they are added only there. * Remove clang@3.3 from unit test configuration * Parametrize compilers.yaml * Remove specially named gcc from static data The compilers are used in two tests * Remove apple-clang and macOS compilers from static data The compiler was used only in multimethod tests * Remove clang@3.5 (compiler seems to be unused) * Remove gcc@4.4.0 (compiler seems to be unused) * Exclude x86_64 tests on other architectures * Mark two tests as for clingo only * Update version syntax in compilers.yaml * Parametrize tcl tests on architectures * Parametrize lmod tests on architectures * Substitute gcc@4.5.0 with gcc@4.8.0 so it can be used on aarch64 * Fix a few issues with aarch64 and unit-tests
2024-03-25add command_line scope to help metavar (#42890)Danny McClanahan1-1/+1
It's now possible to add config on the command line with `spack -c <CONFIG_VARS> ...`, but the new `command_line` scope isn't reflected in the help output for `--scope`: ```bash > spack help config ... --scope {defaults,system,site,user}[/PLATFORM] or env:ENVIRONMENT configuration scope to read/modify ... ```
2024-03-25strip url: fix whl suffix, remove exe (#43344)Harmen Stoppels2-8/+7
2024-03-24Add `intel-oneapi-runtime`, allow injecting virtual dependencies (#42062)Massimiliano Culpo5-15/+93
This PR adds: - A new runtime for `%oneapi` compilers, called `intel-oneapi-runtime` - Information to both `gcc-runtime` and `intel-oneapi-runtime`, to ensure that we don't mix compilers using different soname for either `libgfortran` or `libifcore` To do so, the following internal mechanisms have been implemented: - Possibility to inject virtual dependencies from the `runtime_constraints` callback on packages Information has been added to `gcc-runtime` to provide the correct soname under different conditions on its `%gcc`. Rules injected into the solver looks like: ```prolog % Add a dependency on 'gfortran@5' for nodes compiled with gcc@=13.2.0 and using the 'fortran' language attr("dependency_holds", node(ID, Package), "gfortran", "link") :- attr("node", node(ID, Package)), attr("node_compiler", node(ID, Package), "gcc"), attr("node_compiler_version", node(ID, Package), "gcc", "13.2.0"), not external(node(ID, Package)), not runtime(Package), attr("language", node(ID, Package), "fortran"). attr("virtual_node", node(RuntimeID, "gfortran")) :- attr("depends_on", node(ID, Package), ProviderNode, "link"), provider(ProviderNode, node(RuntimeID, "gfortran")), attr("node", node(ID, Package)), attr("node_compiler", node(ID, Package), "gcc"), attr("node_compiler_version", node(ID, Package), "gcc", "13.2.0"), not external(node(ID, Package)), not runtime(Package), attr("language", node(ID, Package), "fortran"). attr("node_version_satisfies", node(RuntimeID, "gfortran"), "5") :- attr("depends_on", node(ID, Package), ProviderNode, "link"), provider(ProviderNode, node(RuntimeID, "gfortran")), attr("node", node(ID, Package)), attr("node_compiler", node(ID, Package), "gcc"), attr("node_compiler_version", node(ID, Package), "gcc", "13.2.0"), not external(node(ID, Package)), not runtime(Package), attr("language", node(ID, Package), "fortran"). ```
2024-03-22Support for prereleases (#43140)Harmen Stoppels10-113/+273
This adds support for prereleases. Alpha, beta and release candidate suffixes are ordered in the intuitive way: ``` 1.2.0-alpha < 1.2.0-alpha.1 < 1.2.0-beta.2 < 1.2.0-rc.3 < 1.2.0 < 1.2.0-xyz ``` Alpha, beta and rc prereleases are defined as follows: split the version string into components like before (on delimiters and string boundaries). If there's a string component `alpha`, `beta` or `rc` followed by an optional numeric component at the end, then the version is prerelease. So `1.2.0-alpha.1 == 1.2.0alpha1 == 1.2.0.alpha1` are all the same, as usual. The strings `alpha`, `beta` and `rc` are chosen because they match semver, they are sufficiently long to be unambiguous, and and all contain at least one non-hex character so distinguish them from shasum/digest type suffixes. The comparison key is now stored as `(release_tuple, prerelease_tuple)`, so in the above example: ``` ((1,2,0),(ALPHA,)) < ((1,2,0),(ALPHA,1)) < ((1,2,0),(BETA,2)) < ((1,2,0),(RC,3)) < ((1,2,0),(FINAL,)) < ((1,2,0,"xyz"), (FINAL,)) ``` The version ranges `@1.2.0:` and `@:1.1` do *not* include prereleases of `1.2.0`. So for packaging, if the `1.2.0alpha` and `1.2.0` versions have the same constraints on dependencies, it's best to write ```python depends_on("x@1:", when="@1.2.0alpha:") ``` However, `@1.2:` does include `1.2.0alpha`. This is because Spack considers `1.2 < 1.2.0` as distinct versions, with `1.2 < 1.2.0alpha < 1.2.0` as a consequence. Alternatively, the above `depends_on` statement can thus be written ```python depends_on("x@1:", when="@1.2:") ``` which can be useful too. A short-hand to include prereleases, but you can still be explicit to exclude the prerelease by specifying the patch version number. ### Concretization Concretization uses a different version order than `<`. Prereleases are ordered between final releases and develop versions. That way, users should not have to set `preferred=True` on every final release if they add just one prerelease to a package. The concretizer is unlikely to pick a prerelease when final releases are possible. ### Limitations 1. You can't express a range that includes all alpha release but excludes all beta releases. Only alternative is good old repeated nines: `@:1.2.0alpha99`. 2. The Python ecosystem defaults to `a`, `b`, `rc` strings, so translation of Python versions to Spack versions requires expansion to `alpha`, `beta`, `rc`. It's mildly annoying, because this means we may need to compute URLs differently (not done in this commit). ### Hash Care is taken not to break hashes of versions that do not have a prerelease suffix.
2024-03-22Spack CI: Refactor process_command for Cross Platform support (#39739)John W. Parent1-164/+192
Generate CI scripts as powershell on Windows. This is intended to output exactly the same bash scripts as before on Linux. Co-authored-by: Ryan Krattiger <ryan.krattiger@kitware.com>
2024-03-22python wheels: do not "expand" (#43317)Harmen Stoppels4-10/+22
2024-03-21Disable interactive editor when --batch if passed to checksum (#43102)Alec Scott1-3/+3
2024-03-21cmd/python: use runpy to allow multiprocessing in scripts (#41789)Tom Scogland2-29/+45
Running a `spack-python` script like this: ```python import spack import multiprocessing def echo(args): print(args) if __name__ == "__main__": pool = multiprocessing.Pool(2) pool.map(echo, range(10)) ``` will fail in `develop` with an error like this: ```console _pickle.PicklingError: Can't pickle <function echo at 0x104865820>: attribute lookup echo on __main__ failed ``` Python expects to be able to look up the method `echo` in `sys.path["__main__"]` in subprocesses spawned by `multiprocessing`, but because we use `InteractiveConsole` to run `spack python`, the executed file isn't considered to be the `__main__` module, and lookups in subprocesses fail. We tried to fake this by setting `__name__` to `__main__` in the `spack python` command, but that doesn't fix the fact that no `__main__` module exists. Another annoyance with `InteractiveConsole` is that `__file__` is not defined in the main script scope, so you can't use it in your scripts. We can use the [runpy.run_path()](https://docs.python.org/3/library/runpy.html#runpy.run_path) function, which has been around since Python 3.2, to fix this. - [x] Use `runpy` module to launch non-interactive `spack python` invocations - [x] Only use `InteractiveConsole` for interactive `spack python`
2024-03-20cray: return false more readily in detection logic (#43150)Greg Becker1-3/+8
Often in containers, the files we use to detect whether a cray system supports new features are not available. Given that the cray containers only support the newer versions, and that these versions have been around for a while at this point and few sites don't support them, this PR changes the logic for detecting cray systems so that: 1. Don't even consider whether something is the `cray` platform if `opt/cray` is not in `MODULEPATH` 2. Only use the `cray` platform if we can read files in /opt/cray/pe and positively detect an older version 3. Otherwise, assume we're *not* on a cray (includes newer Cray PE's, which we treat as Linux)
2024-03-20Target.optimization_flags converts non-numeric versions to numeric (#43179)Greg Becker2-5/+24
2024-03-20Remove optimization criterion on OS mismatches (#43282)Massimiliano Culpo1-20/+0
2024-03-18use directives in some packages (#43238)Harmen Stoppels1-3/+3
2024-03-18Fix CMake generator documentation (#43232)Pieter P1-1/+1
2024-03-18performance: avoid `jinja2` import at startup unless needed (#43237)Todd Gamblin1-2/+2
`jinja2` can be a costly import, and right now it happens at startup every time we run Spack. This slows down `spack --print-shell-vars` a bit, which is needed by `setup-env.*sh`.
2024-03-15build(deps): bump black from 24.2.0 to 24.3.0 in /lib/spack/docs (#43228)dependabot[bot]1-1/+1
Bumps [black](https://github.com/psf/black) from 24.2.0 to 24.3.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/24.2.0...24.3.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-15Allow compilers to be configured in packages.yaml (#42016)Greg Becker8-20/+270
Co-authored-by: becker33 <becker33@users.noreply.github.com>
2024-03-14Clingo bootstrapping: Remove msvc constraint (#43199)John W. Parent1-3/+0
Patch allowing Clingo to build with VS22 has landed both in Spack and Clingo upstream, update Spack's bootstrap constraints to handle this. Additionally, properly scope the patch application in the clingo package to handle upstream patch.
2024-03-14Improve error message when an unknown compiler is requested (#43143)Massimiliano Culpo3-6/+18
Fixes #43141
2024-03-14`spack develop`: stage build artifacts in same root as non-dev builds (#41373)Peter Scheibel8-119/+289
Currently (outside of this PR) when you `spack develop` a path, this path is treated as the staging directory (this means that for example all build artifacts are placed in the develop path). This PR creates a separate staging directory for all `spack develop`ed builds. It looks like ``` # the stage root /the-stage-root-for-all-spack-builds/ spack-stage-<hash> # Spack packages inheriting CMakePackage put their build artifacts here spack-build-<hash>/ ``` Unlike non-develop builds, there is no `spack-src` directory, `source_path` is the provided `dev_path`. Instead, separately, in the `dev_path`, we have: ``` /dev/path/for/foo/ build-{arch}-<hash> -> /the-stage-root-for-all-spack-builds/spack-stage-<hash>/ ``` The main benefit of this is that build artifacts for out-of-source builds that are relative to `Stage.path` are easily identified (and you can delete them with `spack clean`). Other behavior added here: - [x] A symlink is made from the `dev_path` to the stage directory. This symlink name incorporates spec details, so that multiple Spack environments that develop the same path will not conflict with one another - [x] `spack cd` and `spack location` have added a `-c` shorthand for `--source-dir` Spack builds can still change the develop path (in particular to keep track of applied patches), and for in-source builds, this doesn't change much (although logs would not be written into the develop path). Packages inheriting from `CMakePackage` should get this benefit automatically though.
2024-03-14move --deprecated arg to concretizer args (#43177)Greg Becker7-27/+16