diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2019-03-09 23:19:10 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2019-05-09 11:01:38 +0200 |
commit | a3e92f9bcf72ebe94da181c0b1dd873ebbc2c9cc (patch) | |
tree | 8b0f555ff82a2070e2d2d0a17830a4adeef0a601 /configure.ac | |
parent | a0ff28ea8c10a4a897330c64aa3db6af88285994 (diff) |
support different levels of PCH usage
There are now 4 levels of PCH support, the previous 'full' level
adding to PCH whatever the update_pch script finds useful,
and new levels 'system', which adds only external headers,
'base', which is 'system' and LO basic headers (sal, osl, rtl, vcl)
and 'normal', which is 'full' without headers from the module
built itself.
With Clang/GCC even 'system' still saves some time (10-15%) and since external
headers should rarely if even change, it should be without most
of the disadvantages of PCH. And even 'base' should be pretty easy
to use, as those headers should be rarely changed while developing,
thus avoiding the need for massive rebuilds. Using 'normal' or 'full'
does not seem to be worth it with Clang or GCC, but with MSVC that still
makes a difference, so keep(?) 'full' the default there.
The update_pch script unfortunately does not include as many system
headers as it could, since it includes only what is directly included
by the .cxx, but not what's included indirectly by .hxx files.
https://lists.freedesktop.org/archives/libreoffice/2019-May/082685.html
Change-Id: If83a07a1fc9b77d0134502b0d89348944f82806b
Reviewed-on: https://gerrit.libreoffice.org/71580
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 68 |
1 files changed, 54 insertions, 14 deletions
diff --git a/configure.ac b/configure.ac index 14249897ba02..8ed51262b391 100644 --- a/configure.ac +++ b/configure.ac @@ -1075,8 +1075,11 @@ AC_ARG_ENABLE(fuzzers, ) libo_FUZZ_ARG_ENABLE(pch, - AS_HELP_STRING([--enable-pch], - [Enables precompiled header support for C++. Forced default on Windows/VC build]) + AS_HELP_STRING([--enable-pch=<yes/no/system/base/normal/full>], + [Enables precompiled header support for C++. Forced default on Windows/VC build. + Using 'system' will include only external headers, 'basic' will add also headers + from base modules, 'normal' will also add all headers except from the module built, + 'full' will use all suitable headers even from a module itself.]) ) libo_FUZZ_ARG_ENABLE(epm, @@ -5028,24 +5031,61 @@ AC_SUBST(HYPH_SYSTEM_DIR) AC_SUBST(THES_SYSTEM_DIR) dnl =================================================================== -dnl enable pch by default on windows -dnl enable it explicitly otherwise +dnl Precompiled headers. ENABLE_PCH="" AC_MSG_CHECKING([whether to enable pch feature]) -if test "$enable_pch" != "no"; then +if test -z "$enable_pch"; then if test "$_os" = "WINNT"; then - ENABLE_PCH="TRUE" - AC_MSG_RESULT([yes]) - elif test -n "$enable_pch" && test "$GCC" = "yes"; then - ENABLE_PCH="TRUE" - AC_MSG_RESULT([yes]) - elif test -n "$enable_pch"; then - AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler]) + # Enabled by default on Windows. + enable_pch=yes + else + enable_pch=no + fi +fi +if test "$enable_pch" != "no" -a "$_os" != "WINNT" -a "$GCC" != "yes" ; then + AC_MSG_ERROR([Precompiled header not yet supported for your platform/compiler]) +fi +if test "$enable_pch" = "system"; then + ENABLE_PCH="1" + AC_MSG_RESULT([yes (system headers)]) +elif test "$enable_pch" = "base"; then + ENABLE_PCH="2" + AC_MSG_RESULT([yes (system and base headers)]) +elif test "$enable_pch" = "normal"; then + ENABLE_PCH="3" + AC_MSG_RESULT([yes (normal)]) +elif test "$enable_pch" = "full"; then + ENABLE_PCH="4" + AC_MSG_RESULT([yes (full)]) +elif test "$enable_pch" = "yes"; then + # Pick a suitable default. + if test "$GCC" = "yes"; then + # With Clang and GCC higher levels do not seem to make a noticeable improvement, + # while making the PCHs larger and rebuilds more likely. + ENABLE_PCH="2" + AC_MSG_RESULT([yes (system and base headers)]) else - AC_MSG_RESULT([no]) + # With MSVC the highest level makes a significant difference, + # and it was the default when there used to be no PCH levels. + ENABLE_PCH="4" + AC_MSG_RESULT([yes (full)]) fi -else +elif test "$enable_pch" = "no"; then AC_MSG_RESULT([no]) +else + AC_MSG_ERROR([Unknown value for --enable-pch]) +fi +if test -n "$ENABLE_PCH"; then + if test -n "$CCACHE"; then + if ! echo "$CCACHE_SLOPPINESS" | grep -q pch_defines | grep -q time_macros; then + AC_MSG_WARN([PCH with ccache requires CCACHE_SLOPPINESS to include 'pch_defines,time_macros']) + add_warning "PCH with ccache requires CCACHE_SLOPPINESS to include 'pch_defines,time_macros'" + fi + if test -z "$CCACHE_PCH_EXTSUM"; then + AC_MSG_WARN([It is recommended to set CCACHE_PCH_EXTSUM=1 for PCH with ccache.]) + add_warning "It is recommended to set CCACHE_PCH_EXTSUM=1 for PCH with ccache." + fi + fi fi AC_SUBST(ENABLE_PCH) |