[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Speeding up the bootstrap build - a quick hack.
From: |
Alan Mackenzie |
Subject: |
Re: Speeding up the bootstrap build - a quick hack. |
Date: |
Tue, 18 Jan 2022 11:56:38 +0000 |
Hello, Stefan.
Thanks for the detailled feedback.
On Mon, Jan 17, 2022 at 15:55:26 -0500, Stefan Monnier wrote:
> > The following may go some way to fixing this slowdown. Its idea is to
> > build the lisp directory first by compiling the byte compiler and then
> > using this to build the native compiler, rather than building the native
> > compiler directly from interpreted list.
> Thanks, that's pretty much what I suggested we should do (tho I wasn't
> too sure *how* to do that ;-)
:-)
> > This patch is at the stage of being a crude hack, and it has been tried
> > only on GNU. It might work on other systems, though.
> It looks pretty good and clean, actually.
Oh, thanks!
> I of course have some comments/questions:
> > +COMPILE_ZEROTH = \
> > + $(lisp)/emacs-lisp/macroexp.elc0 \
> > + $(lisp)/emacs-lisp/cconv.elc0 \
> > + $(lisp)/emacs-lisp/byte-opt.elc0 \
> > + $(lisp)/emacs-lisp/bytecomp.elc0 \
> > + $(lisp)/emacs-lisp/comp-cstr.elc0 \
> > + $(lisp)/emacs-lisp/comp.elc0
> > +
> > COMPILE_FIRST = \
> > $(lisp)/emacs-lisp/macroexp.elc \
> > $(lisp)/emacs-lisp/cconv.elc \
> Can't COMPILE_ZEROTH be made directly from COMPILE_FIRST so we don't
> need to maintain two different lists?
It can, yes. There's no reason for them to be different files at the
moment, so I've done this.
> > # An old-fashioned suffix rule, which, according to the GNU Make manual,
> > # cannot have prerequisites.
> > ifeq ($(HAVE_NATIVE_COMP),yes)
> > -.el.elc:
> > +.el.elc0:
> > + $(AM_V_ELC)$(emacs) $(BYTE_COMPILE_FLAGS) \
> > + --exec "(setq load-suffixes '(\".elc0\" \".el\"))" \
> > + -f batch-byte-compile $<
> > + mv $<c $@
> The indentation looks wrong here, tho maybe it's a question of taste
> (or it's a problem in the TAB/SPC transfer through email).
I think it's just the TAB going to column 8 whatever.
> > +%.elc : %.el $(COMPILE_ZEROTH)
> > $(AM_V_ELC)$(emacs) $(BYTE_COMPILE_FLAGS) \
> > + --exec "(setq load-suffixes '(\".elc0\" \".elc\" \".el\"))" \
> > -l comp -f batch-byte+native-compile $<
> Shouldn't this list have `.elc` before `.elc0` so we use the
> native-compiled compiler when available?
I think so, yes. I've changed this now.
> > -.PHONY: compile-first compile-main compile compile-always
> > +.PHONY: compile-zeroth compile-first compile-main compile compile-always
> > -compile-first: $(COMPILE_FIRST)
> > +compile-zeroth: $(COMPILE_ZEROTH)
> > +compile-first: compile-zeroth $(COMPILE_FIRST)
> Is this necessary, or is it just helpful to debug the Makefile?
I'm not sure. I'm a little confused, still.
Could I ask you to give the latest version, below, a quick eyeballing,
please? Maybe I could install this.
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index 3a72034463..7df58af05e 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -96,6 +96,10 @@ COMPILE_FIRST +=
endif
COMPILE_FIRST += $(lisp)/emacs-lisp/autoload.elc
+ifeq ($(HAVE_NATIVE_COMP),yes)
+COMPILE_ZEROTH = $(COMPILE_FIRST:.elc=.elc0)
+endif
+
# Files to compile early in compile-main. Works around bug#25556.
MAIN_FIRST = ./emacs-lisp/eieio.el ./emacs-lisp/eieio-base.el \
./cedet/semantic/db.el ./emacs-lisp/cconv.el
@@ -298,22 +302,30 @@ $(THEFILE)n:
# subdirectories, to make sure require's and load's in the files being
# compiled find the right files.
-.SUFFIXES: .elc .el
+.SUFFIXES: .elc0 .elc .el
# An old-fashioned suffix rule, which, according to the GNU Make manual,
# cannot have prerequisites.
ifeq ($(HAVE_NATIVE_COMP),yes)
-.el.elc:
+.el.elc0:
+ $(AM_V_ELC0)$(emacs) $(BYTE_COMPILE_FLAGS) \
+ --exec "(setq load-suffixes '(\".elc0\" \".el\"))" \
+ -f batch-byte-compile $<
+ mv $<c $@
+
+%.elc: %.el $(COMPILE_ZEROTH)
$(AM_V_ELC)$(emacs) $(BYTE_COMPILE_FLAGS) \
+ --exec "(setq load-suffixes '(\".elc\" \".elc0\" \".el\"))" \
-l comp -f batch-byte+native-compile $<
else
.el.elc:
$(AM_V_ELC)$(emacs) $(BYTE_COMPILE_FLAGS) -f batch-byte-compile $<
endif
-.PHONY: compile-first compile-main compile compile-always
+.PHONY: compile-zeroth compile-first compile-main compile compile-always
-compile-first: $(COMPILE_FIRST)
+compile-zeroth: $(COMPILE_ZEROTH)
+compile-first: compile-zeroth $(COMPILE_FIRST)
# In 'compile-main' we could directly do
# ... | xargs $(MAKE)
@@ -492,7 +504,7 @@ $(CAL_DIR)/hol-loaddefs.el:
.PHONY: bootstrap-clean distclean maintainer-clean
bootstrap-clean:
- find $(lisp) -name '*.elc' $(FIND_DELETE)
+ find $(lisp) \( -name '*.elc' -o -name '*.elc0' \) $(FIND_DELETE)
rm -f $(AUTOGENEL)
distclean:
diff --git a/src/verbose.mk.in b/src/verbose.mk.in
index e3f5678303..a8081ee55a 100644
--- a/src/verbose.mk.in
+++ b/src/verbose.mk.in
@@ -26,6 +26,7 @@ AM_V_CC =
AM_V_CXX =
AM_V_CCLD =
AM_V_CXXLD =
+AM_V_ELC0 =
AM_V_ELC =
AM_V_ELN =
AM_V_GEN =
@@ -41,13 +42,16 @@ AM_V_CCLD = @$(info $ CCLD $@)
AM_V_CXXLD = @$(info $ CXXLD $@)
ifeq ($(HAVE_NATIVE_COMP),yes)
ifeq ($(NATIVE_DISABLED),1)
+AM_V_ELC0 = @$(info $ ELC0 $@)
AM_V_ELC = @$(info $ ELC $@)
AM_V_ELN =
else
+AM_V_ELC0 = @$(info $ ELC0 $@)
AM_V_ELC = @$(info $ ELC+ELN $@)
AM_V_ELN = @$(info $ ELN $@)
endif
else
+AM_V_ELC0 =
AM_V_ELC = @$(info $ ELC $@)
AM_V_ELN =
endif
> Stefan
--
Alan Mackenzie (Nuremberg, Germany).
- Speeding up the bootstrap build - a quick hack., Alan Mackenzie, 2022/01/17
- Re: Speeding up the bootstrap build - a quick hack., Stefan Monnier, 2022/01/17
- Re: Speeding up the bootstrap build - a quick hack.,
Alan Mackenzie <=
- Re: Speeding up the bootstrap build - a quick hack., Stefan Monnier, 2022/01/18
- Re: Speeding up the bootstrap build - a quick hack., Alan Mackenzie, 2022/01/18
- Re: Speeding up the bootstrap build - a quick hack., Stefan Monnier, 2022/01/18
- Re: Speeding up the bootstrap build - a quick hack., Alan Mackenzie, 2022/01/19
- Re: Speeding up the bootstrap build - a quick hack., Stefan Monnier, 2022/01/19
- Re: Speeding up the bootstrap build - a quick hack., Stefan Monnier, 2022/01/19
- Re: Speeding up the bootstrap build - a quick hack., Robert Pluim, 2022/01/18
- Re: Speeding up the bootstrap build - a quick hack., Alan Mackenzie, 2022/01/18
- Re: Speeding up the bootstrap build - a quick hack., Robert Pluim, 2022/01/18
- Re: Speeding up the bootstrap build - a quick hack., Stefan Monnier, 2022/01/18