summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Corallo <andrea.corallo@arm.com>2022-10-11 21:17:55 +0200
committerAndrea Corallo <andrea.corallo@arm.com>2022-10-11 21:19:21 +0200
commit37447209042e174f4e95c8d0166418d2aef018ed (patch)
tree19d01aa53747137f14bb59337ef89339db0cd46f
parent61b6da5acef2d550022c664e628346539ba1852f (diff)
downloademacs-37447209042e174f4e95c8d0166418d2aef018ed.tar.gz
Add trampoline AOT compilation target (bug#58318)
* Makefile.in (trampolines): New target. * lisp/Makefile.in (trampolines): Likewise. * lisp/emacs-lisp/comp.el (comp-compile-all-trampolines): New function.
-rw-r--r--Makefile.in5
-rw-r--r--lisp/Makefile.in6
-rw-r--r--lisp/emacs-lisp/comp.el11
3 files changed, 22 insertions, 0 deletions
diff --git a/Makefile.in b/Makefile.in
index 741a4c5538a..2d617e2294d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -530,6 +530,11 @@ lisp: src
lib lib-src lisp nt: Makefile
$(MAKE) -C $@ all
+trampolines: src lisp
+ifeq ($(HAVE_NATIVE_COMP),yes)
+ $(MAKE) -C lisp trampolines
+endif
+
# Pass an unexpanded $srcdir to src's Makefile, which then
# expands it using its own value of srcdir (which points to the
# source directory of src/).
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index 256017f6c5b..338814fdda2 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -430,6 +430,12 @@ compile-always:
find $(lisp) -name '*.elc' $(FIND_DELETE)
$(MAKE) compile
+.PHONY: trampolines
+trampolines: compile
+ifeq ($(HAVE_NATIVE_COMP),yes)
+ $(emacs) -l comp -f comp-compile-all-trampolines
+endif
+
.PHONY: backup-compiled-files compile-after-backup
# Backup compiled Lisp files in elc.tar.gz. If that file already
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 6656b7e57c1..889bffa3f5c 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -4204,6 +4204,17 @@ bytecode definition was not changed in the meantime)."
;;; Compiler entry points.
+(defun comp-compile-all-trampolines ()
+ "Pre-compile AOT all trampolines."
+ (let ((comp-running-batch-compilation t)
+ ;; We want to target only the 'native-lisp' directory.
+ (native-compile-target-directory
+ (car (last native-comp-eln-load-path))))
+ (mapatoms (lambda (f)
+ (when (subr-primitive-p (symbol-function f))
+ (message "Compiling trampoline for: %s" f)
+ (comp-trampoline-compile f))))))
+
;;;###autoload
(defun comp-lookup-eln (filename)
"Given a Lisp source FILENAME return the corresponding .eln file if found.