[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Emacs build times on Windows

From: Eli Zaretskii
Subject: Re: Emacs build times on Windows
Date: Sat, 21 Apr 2012 10:29:26 +0300

> Date: Fri, 20 Apr 2012 21:50:42 -0600
> From: Christoph Scholtes <address@hidden>
> My personal Jenkins build server tells me that building Emacs on Windows 
> from a clean trunk via `make bootstrap', `make info', `make install-bin' 
> takes around 50 minutes on a fairly recent Centrino Dual Core Laptop.

On my i7 desktop (4 hyper-threaded cores), it takes 9 minutes, if I
use the -j10 switch to Make.  I suggest that you try -j6 in your
builds (if you use anything older than the current CVS of GNU Make,
you will also have to use the XMFLAGS="-j6" kludge as well, see
nt/INSTALL).  A parallel build should be faster.

> Granted that we are doing (unnecessary) rebuilds of code with PURESIZE 
> (which I am trying to eliminate) it is still ridiculously slow.

The extra build with a large PURESIZE is not the problem.  Each one of
the 2 compilations of the Emacs sources takes 20 seconds on my machine
(using "make -j10"), which is negligibly short compared to the
compilation of Lisp files.  ("make -j10 info" takes another 5 seconds,
but only on the trunk, where I recently made the 'info' target of
nt/makefile.w32-in more parallel-friendly.)

> Especially the byte compilation is crawling compared to a GNU/Linux 
> machine. At work I have a decent quad core desktop with GNU/Linux and I 
> can kick off a bootstrap with -j4 and it is done before I come back from 
> getting my coffee. Especially byte compilation stage seems to be a lot 
> faster on GNU/Linux than it is on Windows.
> Any ideas why?

Very simple: the byte compilation on Posix platforms can run in
parallel, because it uses a generic .el.elc rule.  By contrast, on
Windows we compile them sequentially, one after the other, because the
recipe says:

  #     -for %%f in ($(lisp) $(WINS)) do for %%g in (%%f\*.elc) do @attrib -r 
          for %%f in ($(COMPILE_FIRST)) do \
            $(emacs) -l loaddefs $(BYTE_COMPILE_FLAGS) -f 
batch-byte-compile-if-not-done %%f
          for %%f in (. $(WINS)) do for %%g in (%%f/*.el) do \
            $(emacs) -l loaddefs $(BYTE_COMPILE_FLAGS) -f 
batch-byte-compile-if-not-done %%f/%%g

IOW, we use a shell-level loop to compile the files one by one.

So if you are looking for the place to significantly speed up the
bootstrap, the first place to look is to make the byte compilation use
a similar setup to what you see in lisp/Makefile.in.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]