summaryrefslogtreecommitdiff
path: root/guix/build/utils.scm
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2020-09-19 00:20:47 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2020-10-08 12:27:02 -0400
commit5a0997ef7f3968d216328b8c63a6e36dd29a5ab8 (patch)
treea0921f2dc7435c96cbecac724a254ec654461e72 /guix/build/utils.scm
parent7102c18678dc02d5ee6c77a9a70ae344482af841 (diff)
downloadguix-patches-5a0997ef7f3968d216328b8c63a6e36dd29a5ab8.tar
guix-patches-5a0997ef7f3968d216328b8c63a6e36dd29a5ab8.tar.gz
packages, scripts, utils: Enable multi-threaded xz compression.
xz compression is slow; using the multi-thread mode of xz can make it more than 6 times faster, for example when compressing the large linux-libre source. * guix/build/utils.scm (%xz-parallel-args): New procedure. * guix/packages.scm (patch-and-repack): Specify the required above xz arguments by setting the XZ_DEFAULTS environment variable. * guix/scripts/pack.scm (%compressors, bootstrap-xz): Modify the commands Gexps so they do not need to be quoted. This allows lazily evaluating the arguments on the builder's side. Specify the required xz arguments. (self-contained-tarball): Do not quote the compressor command value. (docker-image): Likewise. * guix/utils.scm (decompressed-port, compressed-port) (compressed-output-port): Specify the required above xz arguments.
Diffstat (limited to 'guix/build/utils.scm')
-rw-r--r--guix/build/utils.scm15
1 files changed, 14 insertions, 1 deletions
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index 533b740896..fe2d82c99e 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -113,7 +113,9 @@
make-desktop-entry-file
- locale-category->string))
+ locale-category->string
+
+ %xz-parallel-args))
;;;
@@ -1484,6 +1486,17 @@ returned."
LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE
LC_TIME)))
+
+;;;
+;;; Others.
+;;;
+
+(define (%xz-parallel-args)
+ "The xz arguments required to enable bit-reproducible, multi-threaded
+compression."
+ (list "--memlimit=50%"
+ (format #f "--threads=~a" (max 2 (parallel-job-count)))))
+
;;; Local Variables:
;;; eval: (put 'call-with-output-file/atomic 'scheme-indent-function 1)
;;; eval: (put 'call-with-ascii-input-file 'scheme-indent-function 1)