1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
From 8fb2d6e3307efb15124dc21837bf6039aa6d7fdf Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen <larsi@gnus.org>
Date: Mon, 3 Oct 2022 15:26:04 +0200
Subject: Add 'inhibit-native-compilation'
The following upstream patch has been backported:
Add new variable 'inhibit-native-compilation'
* lisp/startup.el (normal-top-level): Set
inhibit-native-compilation from environment variable.
* lisp/emacs-lisp/comp.el (comp-trampoline-compile): Don't write
trampolines to disk.
* lisp/progmodes/elisp-mode.el
(emacs-lisp-native-compile-and-load): Adjust.
* src/comp.c (syms_of_comp): New variable
inhibit-native-compilation.
(maybe_defer_native_compilation): Use it.
Origin: upstream, commit: 5fec9182dbeffa88cef6651d8c798ef9665d6681
Forwarded: not-needed
---
lisp/emacs-lisp/comp.el | 47 ++++++++++++++++++++++-------------------
lisp/startup.el | 7 ++++--
src/comp.c | 7 ++++++
3 files changed, 37 insertions(+), 24 deletions(-)
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index e2abd6dbc5b..d1182b35cfe 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -3357,28 +3357,31 @@ comp--make-lambda-list-from-subr
(defun comp--trampoline-abs-filename (subr-name)
"Return the absolute filename for a trampoline for SUBR-NAME."
- (cl-loop
- with dirs = (if (stringp native-comp-enable-subr-trampolines)
- (list (expand-file-name native-comp-enable-subr-trampolines
- invocation-directory))
- (if native-compile-target-directory
- (list (expand-file-name comp-native-version-dir
- native-compile-target-directory))
- (comp-eln-load-path-eff)))
- with rel-filename = (comp-trampoline-filename subr-name)
- for dir in dirs
- for abs-filename = (expand-file-name rel-filename dir)
- unless (file-exists-p dir)
- do (ignore-errors
- (make-directory dir t)
- (cl-return abs-filename))
- when (file-writable-p abs-filename)
- do (cl-return abs-filename)
- ;; Default to some temporary directory if no better option was
- ;; found.
- finally (cl-return
- (make-temp-file (file-name-sans-extension rel-filename) nil ".eln"
- nil))))
+ ;; If we've disabled nativecomp, don't write the trampolines to
+ ;; the eln cache (but create them).
+ (and (not inhibit-native-compilation)
+ (cl-loop
+ with dirs = (if (stringp native-comp-enable-subr-trampolines)
+ (list (expand-file-name native-comp-enable-subr-trampolines
+ invocation-directory))
+ (if native-compile-target-directory
+ (list (expand-file-name comp-native-version-dir
+ native-compile-target-directory))
+ (comp-eln-load-path-eff)))
+ with rel-filename = (comp-trampoline-filename subr-name)
+ for dir in dirs
+ for abs-filename = (expand-file-name rel-filename dir)
+ unless (file-exists-p dir)
+ do (ignore-errors
+ (make-directory dir t)
+ (cl-return abs-filename))
+ when (file-writable-p abs-filename)
+ do (cl-return abs-filename)
+ ;; Default to some temporary directory if no better option was
+ ;; found.
+ finally (cl-return
+ (make-temp-file (file-name-sans-extension rel-filename) nil ".eln"
+ nil)))))
;; Called from comp-run.el
;;;###autoload
diff --git a/lisp/startup.el b/lisp/startup.el
index e07e6515991..e5d6bd87cac 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -528,7 +528,7 @@ startup--xdg-or-homedot
(t emacs-d-dir))))
(defvar native-comp-eln-load-path)
-(defvar native-comp-jit-compilation)
+(defvar inhibit-native-compilation)
(defvar native-comp-enable-subr-trampolines)
(defvar startup--original-eln-load-path nil
@@ -589,6 +589,9 @@ normal-top-level
(funcall 'android-enumerate-fonts)
(setq android-fonts-enumerated t))
+ ;; Allow disabling automatic .elc->.eln processing.
+ (setq inhibit-native-compilation (getenv "EMACS_INHIBIT_NATIVE_COMPILATION"))
+
(if command-line-processed
(message internal--top-level-message)
(setq command-line-processed t)
@@ -607,7 +610,7 @@ normal-top-level
;; in this session. This is necessary if libgccjit is not
;; available on MS-Windows, but Emacs was built with
;; native-compilation support.
- (setq native-comp-jit-compilation nil
+ (setq inhibit-native-compilation t
native-comp-enable-subr-trampolines nil))
;; Form `native-comp-eln-load-path'.
diff --git a/src/comp.c b/src/comp.c
index e24f1afb902..ffbc2be106b 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -5201,6 +5201,7 @@ maybe_defer_native_compilation (Lisp_Object function_name,
return;
if (!native_comp_jit_compilation
+ || !NILP (Vinhibit_native_compilation)
|| noninteractive
|| !NILP (Vpurify_flag)
|| !CLOSUREP (definition)
@@ -5688,6 +5689,12 @@ DEFUN ("native-comp-available-p", Fnative_comp_available_p,
syms_of_comp (void)
{
#ifdef HAVE_NATIVE_COMP
+ DEFVAR_LISP ("inhibit-native-compilation", Vinhibit_native_compilation,
+ doc: /* If non-nil, inhibit automatic native compilation of loaded .elc files.
+
+After compilation, each function definition is updated to the native
+compiled one. */);
+ Vinhibit_native_compilation = Qnil;
DEFVAR_BOOL ("native-comp-jit-compilation", native_comp_jit_compilation,
doc: /* If non-nil, compile loaded .elc files asynchronously.
|