summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorHarmen Stoppels <harmenstoppels@gmail.com>2022-10-12 23:30:00 +0200
committerGitHub <noreply@github.com>2022-10-12 14:30:00 -0700
commit5009e3d94a2182c976c4f240caeacf21978300ed (patch)
treece6f306613a36a80d55e9e9bfeef3fde1c995ed0 /share
parent8dbdfbd1eb326c7eb14e0c0b6ca7280642a8e74a (diff)
downloadspack-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/Makefile37
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 }}