Age | Commit message (Collapse) | Author | Files | Lines | |
---|---|---|---|---|---|
2023-12-13 | perl-cpanel-json-xs: New package (#41646) | Arne Becker | 1 | -0/+26 | |
2023-12-13 | perl-mock-config: New package (#41647) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-ref-util: New package (#41648) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | Improve parsing of quoted flags and variants in specs (#41529) | Todd Gamblin | 7 | -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-13 | camp: fixing build issue (#41400) | yizeyi18 | 2 | -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-13 | python: don't run mkdirp in `setup_dependent_package` (#41603) | Harmen Stoppels | 2 | -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-13 | perl-config-tiny: New package (#41584) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-b-cow: New package (#41596) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-throwable: New package (#41597) | Arne Becker | 1 | -0/+31 | |
2023-12-13 | perl-scope-guard: New package (#41598) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-test-sharedfork: New package (#41599) | Arne Becker | 1 | -0/+29 | |
2023-12-13 | perl-safe-isa: New package (#41600) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-proc-processtable: New package (#41601) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-net-ip: New package (#41606) | Arne Becker | 1 | -0/+26 | |
2023-12-13 | perl-any-uri-escape: New package (#41607) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-term-table: New package (#41608) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-test-pod: New package (#41609) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-spiffy: New package (#41610) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-ipc-system-simple: New package (#41611) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-mime-types: New package (#41612) | Arne Becker | 1 | -0/+26 | |
2023-12-13 | perl-convert-nls-date-format: New package (#41613) | Arne Becker | 1 | -0/+29 | |
2023-12-13 | perl-module-pluggable: New package (#41614) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-email-date-format: New package (#41617) | Arne Becker | 1 | -0/+28 | |
2023-12-13 | perl-heap: New package (#41618) | Arne Becker | 1 | -0/+26 | |
2023-12-13 | spack mirror create --all: include patches (#41579) | Harmen Stoppels | 1 | -26/+25 | |
2023-12-13 | perl-log-any: New package (#41619) | Arne Becker | 1 | -0/+26 | |
2023-12-13 | perl-http-cookiejar: New package (#41620) | Arne Becker | 1 | -0/+32 | |
2023-12-13 | Revert "[protobuf] New versions, explicit cxxstd variant (#41459)" (#41635) | Harmen Stoppels | 1 | -32/+5 | |
This reverts commit b82bd8e6b630e477396b9a51b56c66194fb52c9d. | |||||
2023-12-13 | mysql: add v8.0.35, fix build (#41602) | Massimiliano Culpo | 1 | -10/+40 | |
2023-12-13 | Add pic variant when building the library (#41631) | Taillefumier Mathieu | 1 | -0/+6 | |
* Add pic variant when building the library * make pretty * Probably better approach | |||||
2023-12-13 | hepmc3: fix from_variant -> self.define (#41605) | Wouter Deconinck | 1 | -2/+2 | |
* hepmc3: fix from_variant -> self.define * hepmc3: str on versions | |||||
2023-12-12 | perl-getopt-argvfile: add new package with version 1.11 (#41625) | Christopher Christofi | 1 | -0/+15 | |
2023-12-12 | perl-parselex: add new package with version 2.21 (#41626) | Christopher Christofi | 1 | -0/+15 | |
2023-12-12 | Remove MCT license annotation (#41593) | Aiden Grossman | 1 | -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-12 | pastix: new release v6.3.2 (#41585) | fpruvost | 1 | -1/+2 | |
2023-12-12 | perl-clone-pp: New package (#41586) | Arne Becker | 1 | -0/+28 | |
2023-12-12 | kakoune: add v2023.08.05 (#41443) | James Taliaferro | 1 | -0/+5 | |
2023-12-12 | perl-ipc-run3: New package (#41583) | Arne Becker | 1 | -0/+26 | |
2023-12-12 | Update bioconductor packages (#41227) | pabloaledo | 8 | -4/+135 | |
Signed-off-by: Pablo <pablo.aledo@seqera.io> | |||||
2023-12-12 | New package Model Coupling Toolkit (MCT) (#41564) | Dom Heinzeller | 1 | -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-12 | py-pyvista: add v0.42.3 (#41246) | Adam J. Stewart | 1 | -1/+6 | |
2023-12-12 | mysql: fix issue when using old core API call (#41573) | Massimiliano Culpo | 2 | -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-12 | genfit: Add latest tags and update root dependency (#41572) | Thomas Madlener | 1 | -7/+15 | |
2023-12-12 | bowtie2 add latest version (#41580) | James Beal | 1 | -0/+1 | |
Co-authored-by: James Beal <jb23@sanger.ac.uk> | |||||
2023-12-12 | perl-type-tiny: New package (#41582) | Arne Becker | 1 | -0/+29 | |
2023-12-12 | gcc: simplify patch when range (#41587) | Harmen Stoppels | 1 | -2/+2 | |
2023-12-12 | NVIDIA HPC SDK: add v23.11 (#41125) | jmuddnv | 1 | -0/+14 | |
2023-12-12 | clingo-bootstrap: use new Spack API for environment modifications (#41574) | Stephen Sachs | 1 | -2/+3 | |
2023-12-12 | exago: Add v1.2.0 and patches for builds without python or tests. (#41350) | Cameron Rutherford | 4 | -0/+104 | |
Co-authored-by: Satish Balay <balay@mcs.anl.gov> | |||||
2023-12-12 | fmt: Add patch to allow compilation with clang in CUDA mode (#41578) | Mikael Simberg | 1 | -0/+7 | |