summary refs log tree commit diff
path: root/Makefile.am
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-07-18 16:05:21 +0200
committerLudovic Courtès <ludo@gnu.org>2021-07-18 19:50:01 +0200
commit0e47fcced442d8e7c1b05184fdc1c14f10ed04ec (patch)
tree4ae844bc0ec3c670f8697bdc24362c122fa718ad /Makefile.am
parente4b70bc55a538569465bcedee19d1f2607308e65 (diff)
parent8b1bde7bb3936a64244824500ffe60f123704437 (diff)
downloadguix-0e47fcced442d8e7c1b05184fdc1c14f10ed04ec.tar.gz
Merge branch 'master' into core-updates
Diffstat (limited to 'Makefile.am')
-rw-r--r--Makefile.am61
1 files changed, 52 insertions, 9 deletions
diff --git a/Makefile.am b/Makefile.am
index 8f44c888e3..2fef3b05ab 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -220,6 +220,7 @@ MODULES =					\
   guix/build/linux-module-build-system.scm	\
   guix/build/store-copy.scm			\
   guix/build/json.scm				\
+  guix/build/pack.scm				\
   guix/build/utils.scm				\
   guix/build/union.scm				\
   guix/build/profiles.scm			\
@@ -366,6 +367,10 @@ AUX_FILES =						\
   gnu/packages/aux-files/chromium/master-preferences.json		\
   gnu/packages/aux-files/emacs/guix-emacs.el		\
   gnu/packages/aux-files/guix.vim			\
+  gnu/packages/aux-files/linux-libre/5.13-arm.conf	\
+  gnu/packages/aux-files/linux-libre/5.13-arm64.conf	\
+  gnu/packages/aux-files/linux-libre/5.13-i686.conf	\
+  gnu/packages/aux-files/linux-libre/5.13-x86_64.conf	\
   gnu/packages/aux-files/linux-libre/5.12-arm.conf	\
   gnu/packages/aux-files/linux-libre/5.12-arm64.conf	\
   gnu/packages/aux-files/linux-libre/5.12-i686.conf	\
@@ -667,15 +672,53 @@ CLEANFILES =					\
 # the whole thing.  Likewise, set 'XDG_CACHE_HOME' to avoid loading possibly
 # stale files from ~/.cache/guile/ccache.
 %.go: make-go ; @:
-make-go: $(MODULES) guix/config.scm $(dist_noinst_DATA)
-	$(AM_V_at)echo "Compiling Scheme modules..." ;			\
-	unset GUILE_LOAD_COMPILED_PATH ;				\
-	XDG_CACHE_HOME=/nowhere						\
-	host=$(host) srcdir="$(top_srcdir)"				\
-	$(top_builddir)/pre-inst-env					\
-	$(GUILE) -L "$(top_builddir)" -L "$(top_srcdir)"		\
-	  --no-auto-compile 						\
-	  -s "$(top_srcdir)"/build-aux/compile-all.scm $^
+make-go: make-core-go make-packages-go make-system-go make-cli-go
+
+# Define a rule to build a subset of the .go files.
+define guile-compilation-rule
+
+$(1): $(2)
+	$(AM_V_at)echo "Compiling Scheme modules..." ;		\
+	unset GUILE_LOAD_COMPILED_PATH ;			\
+	XDG_CACHE_HOME=/nowhere					\
+	host=$(host) srcdir="$(top_srcdir)"			\
+	$(top_builddir)/pre-inst-env				\
+	$(GUILE) -L "$(top_builddir)" -L "$(top_srcdir)"	\
+	  --no-auto-compile					\
+	  -s "$(top_srcdir)"/build-aux/compile-all.scm		\
+	  --total $(words $(MODULES))				\
+	  --completed $(3)					\
+	  $$(filter %.scm,$$^)
+
+.PHONY: $(1)
+
+endef
+
+# Split compilation in several steps, each of which building a subset of
+# $(MODULES).  The main goal is to reduce peak memory consumption, as reported
+# in <https://issues.guix.gnu.org/48963>.  Each 'eval' call below creates a
+# 'make-*-go' phony target that builds the corresponding subset.
+
+MODULES_CORE     = guix.scm $(filter-out guix/scripts/%,$(filter guix/%,$(MODULES)))
+MODULES_PACKAGES = $(filter gnu/packages/%,$(MODULES))
+MODULES_SYSTEM   = gnu.scm $(filter-out gnu/packages/%,$(filter gnu/%,$(MODULES)))
+MODULES_CLI      = $(filter guix/scripts/%,$(MODULES))
+
+$(eval $(call guile-compilation-rule,make-core-go,	\
+  $(MODULES_CORE) guix/config.scm $(dist_noinst_DATA),	\
+  0))
+
+$(eval $(call guile-compilation-rule,make-packages-go,	\
+  $(MODULES_PACKAGES) make-core-go,			\
+  $(words $(MODULES_CORE))))
+
+$(eval $(call guile-compilation-rule,make-system-go,	\
+  $(MODULES_SYSTEM) make-packages-go make-core-go,	\
+  $(words $(MODULES_CORE) $(MODULES_PACKAGES))))
+
+$(eval $(call guile-compilation-rule,make-cli-go,			\
+  $(MODULES_CLI) make-system-go make-packages-go make-core-go,		\
+  $(words $(MODULES_CORE) $(MODULES_PACKAGES) $(MODULES_SYSTEM))))
 
 SUFFIXES = .go