Putting support for precompiled headers back in
Lubos Lunak
l.lunak at suse.cz
Mon Dec 10 03:54:13 PST 2012
Short version: I'm going to push changes that bring back support for PCH.
Don't let that bother you in any way :).
Long version:
Those building with MSVC might have noticed that going from MSVC2008 to 2010
has a noticeable impact on compile time. I don't remember exactly anymore,
but #6 tinderbox used to do a full rebuild in like 3-4 hours and now it's
more than 5 (and a good deal in both of those is make being busy checking
timestamps, delivering stuff and so on, so the compile time increase itself
is even worse).
The argument for PCH (MSVC2010 non-debug build):
$ time make xmloff ENABLE_PCH=
real 4m52.828s
$ time make xmloff ENABLE_PCH=TRUE
real 2m9.293s
The arguments against PCH seem to be:
- people using non-PCH build breaking PCH build and the other way around - I
did the bulk of the work actually about half a year ago, and just rebased
them now. I didn't need to do a single change in any of the few modules using
PCH, except for removal of includes that no longer work, so it looks that
it's very unlikely that non-PCH -> PCH would break things. The other way
around it's probably more likely (forgetting adding needed #includes), but we
first need those Windows people that'd break the build often enough this way,
and if we get them, then this is worth it (after all, it's a bit like
non-debug people breaking the build).
- conflicts between types/#defines - there are a couple of changes needed to
get things built with PCH, but it's not that many. It seems it's mostly UNO
vs tools (e.g. Date), and it's quite easy to handle.
- lack of a tinderbox to test it - I intend to switch #6 to use it and see how
it works in practice
All in all, it looks to be worth the litle trouble. Also, I modified the PCH
support a bit to make the extra PCH code very non-intrusive (it's just two
extra files in inc/pch and one line in the makefile).
It's considered experimental now, but whoever wants can indeed give it a try
too (MSVC or Clang are supported).
--
Lubos Lunak
l.lunak at suse.cz
More information about the LibreOffice
mailing list