summary refs log tree commit diff
path: root/pkgs/applications/editors/emacs/generic.nix
diff options
context:
space:
mode:
authorMauricio Collares <mauricio@collares.org>2021-02-19 17:15:59 -0300
committerMauricio Collares <mauricio@collares.org>2021-02-19 19:35:07 -0300
commit4d60e14ad247a134822b05b0bce29f5641d1ee6f (patch)
tree61237c23f22d3e282e669c8f5bbe13a42d8d90bb /pkgs/applications/editors/emacs/generic.nix
parent44864cd2efcce00eea1ee36f7265ab0b7d74f8a2 (diff)
downloadnixpkgs-4d60e14ad247a134822b05b0bce29f5641d1ee6f.tar
nixpkgs-4d60e14ad247a134822b05b0bce29f5641d1ee6f.tar.gz
nixpkgs-4d60e14ad247a134822b05b0bce29f5641d1ee6f.tar.bz2
nixpkgs-4d60e14ad247a134822b05b0bce29f5641d1ee6f.tar.lz
nixpkgs-4d60e14ad247a134822b05b0bce29f5641d1ee6f.tar.xz
nixpkgs-4d60e14ad247a134822b05b0bce29f5641d1ee6f.tar.zst
nixpkgs-4d60e14ad247a134822b05b0bce29f5641d1ee6f.zip
emacs: precompile trampolines in parallel
Diffstat (limited to 'pkgs/applications/editors/emacs/generic.nix')
-rw-r--r--pkgs/applications/editors/emacs/generic.nix12
1 files changed, 8 insertions, 4 deletions
diff --git a/pkgs/applications/editors/emacs/generic.nix b/pkgs/applications/editors/emacs/generic.nix
index 619bde59874..70e253dd6df 100644
--- a/pkgs/applications/editors/emacs/generic.nix
+++ b/pkgs/applications/editors/emacs/generic.nix
@@ -159,10 +159,14 @@ let emacs = stdenv.mkDerivation (lib.optionalAttrs nativeComp {
   '' + lib.optionalString (nativeComp && withNS) ''
     ln -snf $out/lib/emacs/*/native-lisp $out/Applications/Emacs.app/Contents/native-lisp
   '' + lib.optionalString nativeComp ''
-    $out/bin/emacs --batch \
-      -l comp --eval "(mapatoms (lambda (s) \
-                        (when (subr-primitive-p (symbol-function s)) \
-                          (comp-trampoline-compile s))))"
+    echo "Generating native-compiled trampolines..."
+    # precompile trampolines in parallel, but avoid spawning one process per trampoline.
+    # 1000 is a rough lower bound on the number of trampolines compiled.
+    $out/bin/emacs --batch --eval "(mapatoms (lambda (s) \
+      (when (subr-primitive-p (symbol-function s)) (print s))))" \
+      | xargs -n $((1000/NIX_BUILD_CORES + 1)) -P $NIX_BUILD_CORES \
+        $out/bin/emacs --batch -l comp --eval "(while argv \
+          (comp-trampoline-compile (intern (pop argv))))"
     mkdir -p $out/share/emacs/native-lisp
     $out/bin/emacs --batch \
       --eval "(add-to-list 'comp-eln-load-path \"$out/share/emacs/native-lisp\")" \