diff options
author | Harmen Stoppels <harmenstoppels@gmail.com> | 2022-10-12 23:30:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-12 14:30:00 -0700 |
commit | 5009e3d94a2182c976c4f240caeacf21978300ed (patch) | |
tree | ce6f306613a36a80d55e9e9bfeef3fde1c995ed0 /share | |
parent | 8dbdfbd1eb326c7eb14e0c0b6ca7280642a8e74a (diff) | |
download | spack-5009e3d94a2182c976c4f240caeacf21978300ed.tar.gz spack-5009e3d94a2182c976c4f240caeacf21978300ed.tar.bz2 spack-5009e3d94a2182c976c4f240caeacf21978300ed.tar.xz spack-5009e3d94a2182c976c4f240caeacf21978300ed.zip |
env depfile: allow deps only install (#33245)
* env depfile: allow deps only install
- Refactor `spack env depfile` to use a Jinja template, making it a bit
easier to follow as a human being.
- Add a layer of indirection in the generated Makefile through an
`<prefix>/.install-deps/<hash>` target, which allows one to specify
different options when installing dependencies. For example, only
verbose/debug mode on when installing some particular spec:
```
$ spack -e my_env env depfile -o Makefile --make-target-prefix example
$ make example/.install-deps/<hash> -j16
$ make example/.install/<hash> SPACK="spack -d" SPACK_INSTALL_FLAGS=--verbose -j16
```
This could be used to speed up `spack ci rebuild`:
- Parallel install of dependencies from buildcache
- Better readability of logs, e.g. reducing verbosity when installing
dependencies, and splitting logs into deps.log and current_spec.log
* Silence please!
Diffstat (limited to 'share')
-rw-r--r-- | share/spack/templates/depfile/Makefile | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/share/spack/templates/depfile/Makefile b/share/spack/templates/depfile/Makefile new file mode 100644 index 0000000000..a149951d9f --- /dev/null +++ b/share/spack/templates/depfile/Makefile @@ -0,0 +1,37 @@ +SPACK ?= spack + +.PHONY: {{ all_target }} {{ clean_target }} + +{{ all_target }}: {{ env_target }} + +{{ env_target }}: {{ root_install_targets }} + @touch $@ + +{{ dirs_target }}: + @mkdir -p {{ install_target }} {{ install_deps_target }} + +# The spack install commands are of the form: +# spack -e my_env --no-add --only=package --only=concrete /hash +# This is an involved way of expressing that Spack should only install +# an individual concrete spec from the environment without deps. +{{ install_target }}/%: {{ install_deps_target }}/% | {{ dirs_target }} + $(info Installing $(SPEC)) + {{ jobserver_support }}$(SPACK) -e '{{ environment }}' install $(SPACK_INSTALL_FLAGS) --only-concrete --only=package --no-add /$(notdir $@) + @touch $@ + +# Targets of the form {{ install_deps_target }}/<hash> install dependencies only +{{ install_deps_target }}/%: | {{ dirs_target }} + @touch $@ + +# Set a human-readable SPEC variable for each target that has a hash +{% for (hash, name) in hash_with_name -%} +{{ any_hash_target }}/{{ hash }}: SPEC = {{ name }} +{% endfor %} + +# The Spack DAG expressed in targets: +{% for (target, prereqs) in targets_to_prereqs -%} +{{ target }}: {{prereqs}} +{% endfor %} + +{{ clean_target }}: + rm -rf {{ env_target }} {{ all_install_targets }} {{ all_install_deps_targets }} |