diff options
author | Alan Mackenzie <acm@muc.de> | 2022-01-20 18:40:15 +0000 |
---|---|---|
committer | Alan Mackenzie <acm@muc.de> | 2022-01-20 18:40:15 +0000 |
commit | 10083e788f7349fa363d100687dc3d94bea88f57 (patch) | |
tree | dfa4273d77c00e8b01f279bb408d05461498f99d /lisp/Makefile.in | |
parent | 808917b3fc380d66e9791dc5769298554f41b3dd (diff) | |
download | emacs-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.in | 16 |
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 $< |