From: Lars Ingebrigtsen Date: Mon, 3 Oct 2022 13:26:04 +0000 (+0200) Subject: Add 'inhibit-native-compilation' X-Git-Tag: archive/raspbian/1%29.2+1-2+rpi1~1^2~40^2~9 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=654428b65ae1036deb4cc6f02461074c84671648;p=emacs.git 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 --- diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index 8a3429c9b67..37abd886b49 100644 --- a/lisp/emacs-lisp/comp.el +++ b/lisp/emacs-lisp/comp.el @@ -3793,22 +3793,25 @@ Return the trampoline if found or nil otherwise." (lexical-binding t)) (comp--native-compile form nil - (cl-loop - for dir in (if native-compile-target-directory - (list (expand-file-name comp-native-version-dir - native-compile-target-directory)) - (comp-eln-load-path-eff)) - for f = (expand-file-name - (comp-trampoline-filename subr-name) - dir) - unless (file-exists-p dir) - do (ignore-errors - (make-directory dir t) - (cl-return f)) - when (file-writable-p f) - do (cl-return f) - finally (error "Cannot find suitable directory for output in \ -`native-comp-eln-load-path'"))))) + ;; If we've disabled nativecomp, don't write the trampolines to + ;; the eln cache (but create them). + (and (not inhibit-native-compilation) + (cl-loop + for dir in (if native-compile-target-directory + (list (expand-file-name comp-native-version-dir + native-compile-target-directory)) + (comp-eln-load-path-eff)) + for f = (expand-file-name + (comp-trampoline-filename subr-name) + dir) + unless (file-exists-p dir) + do (ignore-errors + (make-directory dir t) + (cl-return f)) + when (file-writable-p f) + do (cl-return f) + finally (error "Cannot find suitable directory for output in \ +`native-comp-eln-load-path'")))))) ;; Some entry point support code. diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index bdd7751fc0c..2af174ff752 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -218,7 +218,7 @@ All commands in `lisp-mode-shared-map' are inherited by this map.") Load the compiled code when finished. Use `emacs-lisp-byte-compile-and-load' in combination with -`native-comp-deferred-compilation' set to t to achieve asynchronous +`inhibit-native-compilation' set to nil to achieve asynchronous native compilation." (interactive nil emacs-lisp-mode) (emacs-lisp--before-compile-buffer) diff --git a/lisp/startup.el b/lisp/startup.el index 0f5de5affc3..9e09a051c53 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -524,7 +524,7 @@ DIRS are relative." (t emacs-d-dir)))) (defvar native-comp-eln-load-path) -(defvar native-comp-deferred-compilation) +(defvar inhibit-native-compilation) (defvar comp-enable-subr-trampolines) (defun normal-top-level () @@ -532,6 +532,9 @@ DIRS are relative." It sets `command-line-processed', processes the command-line, reads the initialization files, etc. It is the default value of the variable `top-level'." + ;; 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) @@ -550,7 +553,7 @@ It is the default value of the variable `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-deferred-compilation nil + (setq inhibit-native-compilation t comp-enable-subr-trampolines nil)) ;; Form `native-comp-eln-load-path'. diff --git a/src/comp.c b/src/comp.c index dc0359acdae..5600339581a 100644 --- a/src/comp.c +++ b/src/comp.c @@ -4826,6 +4826,7 @@ maybe_defer_native_compilation (Lisp_Object function_name, return; if (!native_comp_deferred_compilation + || !NILP (Vinhibit_native_compilation) || noninteractive || !NILP (Vpurify_flag) || !COMPILEDP (definition) @@ -5336,6 +5337,13 @@ syms_of_comp (void) { #ifdef HAVE_NATIVE_COMP /* Compiler control customizes. */ + 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-deferred-compilation", native_comp_deferred_compilation, doc: /* If non-nil compile loaded .elc files asynchronously.