diff options
author | Ludovic Courtès <ludo@gnu.org> | 2021-06-23 22:43:00 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2021-06-23 23:35:27 +0200 |
commit | ef82ba9dd94369926eb13325d5e7da4306d23dd7 (patch) | |
tree | 7b37fe66dd4088556ad41dcbf7745c6e9b24f501 /build-aux | |
parent | a807d849219c34d45310634ef0cfc94ad9b7025a (diff) | |
download | guix-ef82ba9dd94369926eb13325d5e7da4306d23dd7.tar.gz |
build: Makefile splits Scheme compilation in four steps.
Fixes <https://bugs.gnu.org/48963>. Reported by Julien Lepiller <julien@lepiller.eu>. This reduces peak memory consumption to something less unreasonable. * Makefile.am (make-go): Depend on 'make-*-go' targets; remove body. (guile-compilation-rule): New function. (MODULES_CORE, MODULES_PACKAGES, MODULES_SYSTEM, MODULES_CLI): New variables. <top level>: Call 'guile-compilation-rule' 4 times. * build-aux/compile-all.scm <top level>: Expect "--total" and "--processed". Take them into account when displaying progress reports.
Diffstat (limited to 'build-aux')
-rw-r--r-- | build-aux/compile-all.scm | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/build-aux/compile-all.scm b/build-aux/compile-all.scm index e6982f50fb..9ffbce43ad 100644 --- a/build-aux/compile-all.scm +++ b/build-aux/compile-all.scm @@ -98,26 +98,36 @@ to 'make'." (exit 1))) (match (command-line) - ((_ . files) + ((_ "--total" (= string->number grand-total) + "--completed" (= string->number processed) + . files) + ;; GRAND-TOTAL is the total number of .scm files in the project; PROCESSED + ;; is the total number of .scm files already compiled in previous + ;; invocations of this script. (catch #t (lambda () - (compile-files srcdir (getcwd) - (filter file-needs-compilation? files) - #:workers (parallel-job-count*) - #:host host - #:report-load (lambda (file total completed) - (when file - (format #t "[~3d%] LOAD ~a~%" - (% (+ 1 completed) (* 2 total)) - file) - (force-output))) - #:report-compilation (lambda (file total completed) - (when file - (format #t "[~3d%] GUILEC ~a~%" - (% (+ total completed 1) - (* 2 total)) - (scm->go file)) - (force-output))))) + (let* ((to-build (filter file-needs-compilation? files)) + (processed (+ processed + (- (length files) (length to-build))))) + (compile-files srcdir (getcwd) to-build + #:workers (parallel-job-count*) + #:host host + #:report-load (lambda (file total completed) + (when file + (format #t "[~3d%] LOAD ~a~%" + (% (+ 1 completed + (* 2 processed)) + (* 2 grand-total)) + file) + (force-output))) + #:report-compilation (lambda (file total completed) + (when file + (format #t "[~3d%] GUILEC ~a~%" + (% (+ total completed 1 + (* 2 processed)) + (* 2 grand-total)) + (scm->go file)) + (force-output)))))) (lambda _ (primitive-exit 1)) (lambda args |