all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Christoph Scholtes <cschol2112@googlemail.com>
Cc: emacs-devel@gnu.org
Subject: Re: Emacs build times on Windows
Date: Sat, 21 Apr 2012 10:29:26 +0300	[thread overview]
Message-ID: <83vckth7ah.fsf@gnu.org> (raw)
In-Reply-To: <4F922E92.8030200@gmail.com>

> Date: Fri, 20 Apr 2012 21:50:42 -0600
> From: Christoph Scholtes <cschol2112@googlemail.com>
> 
> 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:

  compile-CMD:
  #	-for %%f in ($(lisp) $(WINS)) do for %%g in (%%f\*.elc) do @attrib -r %%g
	  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	other threads:[~2012-04-21  7:29 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-21  3:50 Emacs build times on Windows Christoph Scholtes
2012-04-21  7:29 ` Eli Zaretskii [this message]
2012-04-21 12:05   ` Christoph Scholtes
2012-04-21 13:52     ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83vckth7ah.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=cschol2112@googlemail.com \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.