summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2023-12-13perl-mock-config: New package (#41647)Arne Becker1-0/+28
2023-12-13perl-ref-util: New package (#41648)Arne Becker1-0/+28
2023-12-13Improve parsing of quoted flags and variants in specs (#41529)Todd Gamblin7-188/+198
This PR does several things: - [x] Allow any character to appear in the quoted values of variants and flags. - [x] Allow easier passing of quoted flags on the command line, e.g. `cflags="-O2 -g"`. - [x] Handle quoting better in spec output, using single quotes around double quotes and vice versa. - [x] Disallow spaces around `=` and `==` when parsing variants and flags. ## Motivation This PR is motivated by the issues above and by ORNL's [tips for launching at scale on Frontier](https://docs.olcf.ornl.gov/systems/frontier_user_guide.html#tips-for-launching-at-scale). ORNL recommends using `sbcast --send-libs` to broadcast executables and their libraries to compute nodes when running large jobs (e.g., 80k ranks). For an executable named `exe`, `sbcast --send-libs` stores the needed libraries in a directory alongside the executable called `exe_libs`. ORNL recommends pointing `LD_LIBRARY_PATH` at that directory so that `exe` will find the local libraries and not overwhelm the filesystem. There are other ways to mitigate this problem: * You could build with `RUNPATH` using `spack config add config:shared_linking:type:runpath`, which would make `LD_LIBRARY_PATH` take precedence over Spack's `RUNPATHs`. I don't recommend this one because `RUNPATH` can cause many other things to go wrong. * You could use `spack config add config:shared_linking:bind:true`, added in #31948, which will greatly reduce the filesystem load for large jobs by pointing `DT_NEEDED` entries in ELF *directly* at the needed `.so` files instead of relying on `RPATH` search via soname. I have not experimented with this at 80,000 ranks, but it should help quite a bit. * You could use [Spindle](https://github.com/hpc/Spindle) (as LLNL does on its machines) which should transparently fix this without any changes to your executable and without any need to use `sbcast` or other tools. But we want to support the `sbcast` use case as well. ## `sbcast` and Spack Spack's `RPATHs` break the `sbcast` fix because they're considered with higher precedence than `LD_LIBRARY_PATH`. So Spack applications will still end up hitting the shared filesystem when searching for libraries. We can avoid this by injecting some `ldflags` in to the build, e.g., if were were going to launch, say, `LAMMPS` at scale, we could add another `RPATH` specifically for use with `sbcast`: spack install lammps ldflags='-Wl,-rpath=$ORIGIN/lmp_libs' This will put the `lmp_libs` directory alongside `LAMMPS`'s `lmp` executable first in the `RPATH`, so it will be searched before any directories on the shared filesystem. ## Issues with quoting Before this PR, the command above would've errored out for two reasons: 1. `$` wasn't an allowed character in our spec parser. 2. You would've had to double quote the flags to get them to pass through correctly: spack install lammps ldflags='"-Wl,-rpath=$ORIGIN/lmp_libs"' This is ugly and I don't think many users will easily figure it out. The behavior was added in #29282, and it improved parsing of specs passed as a single string, e.g.: spack install 'lammps ldflags="-Wl,-rpath=$ORIGIN/lmp_libs"' but a lot of users are naturally going to try to quote arguments *directly* on the command line, without quoting their entire spec. #29282 used a heuristic to detect unquoted flags and warn the user, but the warning could be confusing. In particular, if you wrote `cflags="-O2 -g"` on the command line, it would break the flags up, warn, and tell you that you could fix the issue by writing `cflags="-O2 -g"` even though you just wrote that. It's telling you to *quote* that value, but the user has to know to double quote. ## New heuristic for quoted arguments from the CLI There are only two places where we allow arbitrary quoted strings in specs: flags and variant values, so this PR adds a simpler heuristic to the CLI parser: if an argument in `sys.argv` starts with `name=...`, then we assume the whole argument is quoted. This means you can write: spack install bzip2 cflags="-O2 -g" directly on the command line, without multiple levels of quoting. This also works: spack install 'bzip2 cflags="-O2 -g"' The only place where this heuristic runs into ambiguity is if you attempt to pass anonymous specs that start with `name=...` as one large string. e.g., this will be interpreted as one large flag value: spack find 'cflags="-O2 -g" ~bar +baz' This sets `cflags` to `"-O2 -g" ~bar +baz`, which is likely not what you wanted. You can fix this easily by either removing the quotes: spack find cflags="-O2 -g" ~bar +baz Or by adding a space at the start, which has the same effect: spack find ' cflags="-O2 -g" ~bar +baz' You may wonder why we don't just look for quotes inside of flag arguments, and the reason is that you *might* want them there. If you are passing arguments like: spack install zlib cppflags="-D DEBUG_MSG1='quick fox' -D DEBUG_MSG2='lazy dog'" You *need* the quotes there. So we've opted for one potentially confusing, but easily fixed outcome vs. limiting what you can put in your quoted strings. ## Quotes in formatted spec output In addition to being more lenient about characters accepted in quoted strings, this PR fixes up spec formatting a bit. We now format quoted strings in specs with single quotes, unless the string has a single quote in it, in which case we JSON-escape the string (i.e., we add `\` before `"` and `\`). zlib cflags='-D FOO="bar"' zlib cflags="-D FOO='bar'" zlib cflags="-D FOO='bar' BAR=\"baz\""
2023-12-13camp: fixing build issue (#41400)yizeyi182-0/+26
* adding necessary headers, to fix https://github.com/spack/spack/issues/41398 * deleting something imported by accident * [@spackbot] updating style on behalf of yizeyi18 * undo commit 7688fed according to suggestion from @msimberg * patching camp@:2022.10.1 for compatibility with gcc-13 * adding the patch * fixing paths in the patch * [@spackbot] updating style on behalf of yizeyi18 * Update camp patch using LLNL/camp@05e1c35 Co-authored-by: Mikael Simberg <mikael.simberg@iki.fi> * changing patch name --------- Co-authored-by: Mikael Simberg <mikael.simberg@iki.fi>
2023-12-13python: don't run mkdirp in `setup_dependent_package` (#41603)Harmen Stoppels2-5/+2
`setup_dependent_package` is not a build phase, it should just set globals for a package. It's called during setup of runtime environment of packages, and there have been reports of it actually failing due to a read only file system (not sure under what exact conditions that is possible).
2023-12-13perl-config-tiny: New package (#41584)Arne Becker1-0/+28
2023-12-13perl-b-cow: New package (#41596)Arne Becker1-0/+28
2023-12-13perl-throwable: New package (#41597)Arne Becker1-0/+31
2023-12-13perl-scope-guard: New package (#41598)Arne Becker1-0/+28
2023-12-13perl-test-sharedfork: New package (#41599)Arne Becker1-0/+29
2023-12-13perl-safe-isa: New package (#41600)Arne Becker1-0/+28
2023-12-13perl-proc-processtable: New package (#41601)Arne Becker1-0/+28
2023-12-13perl-net-ip: New package (#41606)Arne Becker1-0/+26
2023-12-13perl-any-uri-escape: New package (#41607)Arne Becker1-0/+28
2023-12-13perl-term-table: New package (#41608)Arne Becker1-0/+28
2023-12-13perl-test-pod: New package (#41609)Arne Becker1-0/+28
2023-12-13perl-spiffy: New package (#41610)Arne Becker1-0/+28
2023-12-13perl-ipc-system-simple: New package (#41611)Arne Becker1-0/+28
2023-12-13perl-mime-types: New package (#41612)Arne Becker1-0/+26
2023-12-13perl-convert-nls-date-format: New package (#41613)Arne Becker1-0/+29
2023-12-13perl-module-pluggable: New package (#41614)Arne Becker1-0/+28
2023-12-13perl-email-date-format: New package (#41617)Arne Becker1-0/+28
2023-12-13perl-heap: New package (#41618)Arne Becker1-0/+26
2023-12-13spack mirror create --all: include patches (#41579)Harmen Stoppels1-26/+25
2023-12-13perl-log-any: New package (#41619)Arne Becker1-0/+26
2023-12-13perl-http-cookiejar: New package (#41620)Arne Becker1-0/+32
2023-12-13Revert "[protobuf] New versions, explicit cxxstd variant (#41459)" (#41635)Harmen Stoppels1-32/+5
This reverts commit b82bd8e6b630e477396b9a51b56c66194fb52c9d.
2023-12-13mysql: add v8.0.35, fix build (#41602)Massimiliano Culpo1-10/+40
2023-12-13Add pic variant when building the library (#41631)Taillefumier Mathieu1-0/+6
* Add pic variant when building the library * make pretty * Probably better approach
2023-12-13hepmc3: fix from_variant -> self.define (#41605)Wouter Deconinck1-2/+2
* hepmc3: fix from_variant -> self.define * hepmc3: str on versions
2023-12-12perl-getopt-argvfile: add new package with version 1.11 (#41625)Christopher Christofi1-0/+15
2023-12-12perl-parselex: add new package with version 2.21 (#41626)Christopher Christofi1-0/+15
2023-12-12Remove MCT license annotation (#41593)Aiden Grossman1-3/+3
This license annotation is currently invalid as it specifies a URL rather than an SPDX expression. Remove it for now until we have a consensus on how to represent this case.
2023-12-12pastix: new release v6.3.2 (#41585)fpruvost1-1/+2
2023-12-12perl-clone-pp: New package (#41586)Arne Becker1-0/+28
2023-12-12kakoune: add v2023.08.05 (#41443)James Taliaferro1-0/+5
2023-12-12perl-ipc-run3: New package (#41583)Arne Becker1-0/+26
2023-12-12Update bioconductor packages (#41227)pabloaledo8-4/+135
Signed-off-by: Pablo <pablo.aledo@seqera.io>
2023-12-12New package Model Coupling Toolkit (MCT) (#41564)Dom Heinzeller1-0/+26
* New package Model Coupling Toolkit (MCT) * Remove ~mpi variant from mct, build is not working correctly * Remove boilerplate stuff from var/spack/repos/builtin/packages/mct/package.py
2023-12-12py-pyvista: add v0.42.3 (#41246)Adam J. Stewart1-1/+6
2023-12-12mysql: fix issue when using old core API call (#41573)Massimiliano Culpo2-4/+2
MySQL was performing a core API call to `Spec.flat_dependencies` when setting up the build environment. This function is an implementation detail of the old concretizer, where multiple nodes from the same package are not allowed. This PR uses a more idiomatic way to check if "python" is in the DAG. For reference, see #11356 to check why the call was introduced.
2023-12-12genfit: Add latest tags and update root dependency (#41572)Thomas Madlener1-7/+15
2023-12-12bowtie2 add latest version (#41580)James Beal1-0/+1
Co-authored-by: James Beal <jb23@sanger.ac.uk>
2023-12-12perl-type-tiny: New package (#41582)Arne Becker1-0/+29
2023-12-12gcc: simplify patch when range (#41587)Harmen Stoppels1-2/+2
2023-12-12NVIDIA HPC SDK: add v23.11 (#41125)jmuddnv1-0/+14
2023-12-12clingo-bootstrap: use new Spack API for environment modifications (#41574)Stephen Sachs1-2/+3
2023-12-12exago: Add v1.2.0 and patches for builds without python or tests. (#41350)Cameron Rutherford4-0/+104
Co-authored-by: Satish Balay <balay@mcs.anl.gov>
2023-12-12fmt: Add patch to allow compilation with clang in CUDA mode (#41578)Mikael Simberg1-0/+7
2023-12-11[protobuf] New versions, explicit cxxstd variant (#41459)Chris Green1-5/+32
* [protobuf] New versions, explicit cxxstd variant * New versions 3.15.8, 3.25.0, 3.25.1. * New explicit variant `cxxstd` with support for older Protobuf versions. * Support testing. * Use Protobuf's `protobuf_BUILD_SHARED_LIBS` instead of `BUILD_SHARED_LIBS`. * Support building with LLVM/Clang's `libc++`. * Address audit issue * Variant default does not honor `when` clause * Use `self.spec.satisfies()` instead of `with when()` * Fix silliness; improve consistency * Today was apparently a go-back-to-bed day