summaryrefslogtreecommitdiff
path: root/lisp/Makefile.in
diff options
context:
space:
mode:
authorAlan Mackenzie <acm@muc.de>2022-01-20 18:40:15 +0000
committerAlan Mackenzie <acm@muc.de>2022-01-20 18:40:15 +0000
commit10083e788f7349fa363d100687dc3d94bea88f57 (patch)
treedfa4273d77c00e8b01f279bb408d05461498f99d /lisp/Makefile.in
parent808917b3fc380d66e9791dc5769298554f41b3dd (diff)
downloademacs-10083e788f7349fa363d100687dc3d94bea88f57.tar.gz
In early bootstrap, use byte-compiled compiler to native compile first files
This speeds up a make bootstrap by around 15%. * lisp/Makefile.in (BYTE_COMPILE_FLAGS): set a value specific to compile-first which doesn't contain the setting of Emacs variable load-prefer-newer. Add a new make hunk which byte-compiles (rather then native compiles) when the environment variable ANCIENT is "yes". Set the date of the .elc files built to 1971-01-01 to cause a second compilation of them later. * src/Makefile.in: Add an extra invocation of directory lisp's MAKE with target compile-first and the flag environment variable ANCIENT set to yes. * src/verbose.mk.in: When ANCIENT is yes, output ELC, not ELC+ELN for AM_V_ELC.
Diffstat (limited to 'lisp/Makefile.in')
-rw-r--r--lisp/Makefile.in16
1 files changed, 16 insertions, 0 deletions
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index 3a72034463c..308407a8bf1 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -77,6 +77,8 @@ AUTOGENEL = ${loaddefs} ${srcdir}/cus-load.el ${srcdir}/finder-inf.el \
# Set load-prefer-newer for the benefit of the non-bootstrappers.
BYTE_COMPILE_FLAGS = \
--eval '(setq load-prefer-newer t)' $(BYTE_COMPILE_EXTRA_FLAGS)
+# ... but we must prefer .elc files for those in the early bootstrap.
+compile-first: BYTE_COMPILE_FLAGS = $(BYTE_COMPILE_EXTRA_FLAGS)
# Files to compile before others during a bootstrap. This is done to
# speed up the bootstrap process. They're ordered by size, so we use
@@ -303,9 +305,23 @@ endif
# An old-fashioned suffix rule, which, according to the GNU Make manual,
# cannot have prerequisites.
ifeq ($(HAVE_NATIVE_COMP),yes)
+ifeq ($(ANCIENT),yes)
+# The first compilation of compile-first, using an interpreted compiler:
+# The resulting .elc files get given a date of 1971-01-01 so that their
+# date stamp is earlier than the source files, causing these to be compiled
+# into native code at the second recursive invocation of this $(MAKE),
+# using these .elc's. This is faster than just compiling the native code
+# directly using the interpreted compile-first files. (Note: 1970-01-01
+# fails on some systems.)
+.el.elc:
+ $(AM_V_ELC)$(emacs) $(BYTE_COMPILE_FLAGS) \
+ -l comp -f batch-byte-compile $<
+ touch -t 197101010000 $@
+else
.el.elc:
$(AM_V_ELC)$(emacs) $(BYTE_COMPILE_FLAGS) \
-l comp -f batch-byte+native-compile $<
+endif
else
.el.elc:
$(AM_V_ELC)$(emacs) $(BYTE_COMPILE_FLAGS) -f batch-byte-compile $<