On Sat, Aug 27, 2016 at 8:26 PM, Don Lewis <truck...@apache.org> wrote:

> On 17 Aug, To: dev@openoffice.apache.org wrote:
> > On 16 Aug, Don Lewis wrote:
> >> On  7 Aug, Damjan Jovanovic wrote:
> >>> Hi
> >>>
> >>> branches/gbuild-reintegration has been merged to trunk. It has > 136
> >>> patches and makes many changes throughout the code, so you probably
> need to
> >>> "dmake clean" before rebuilding.
> >>>
> >>> I haven't fixed the Windows build performance regression caused by
> issue
> >>> #117845, so if you're building on Windows use --disable-pch which only
> >>> extends your build time by around 2 hours instead of 6. If you aren't
> happy
> >>> with this, please help me figure out the problem.
> >>
> >> I did some sleuthing ...
> >>
> >> I compared build logs between --enable-pch and --disable-pch builds. The
> >> compiler command line for the --enable-pch build has the additional
> >> option
> >>      -DPRECOMPILED_HEADERS
> >> which causes precompiled_foo.hxx to pull in a whole wad of headers even
> >> if they aren't needed to compile an individual .cxx file.  That's why
> >> the build is taking longer.  A precompiled version of
> >> precompiled_foo.hxx is build beforehand by passing
> >> -Ycprecompiled_foo.hxx to the compiler, but gbuild neglects to tell the
> >> compiler to use it when building all the .cxx files because it never
> >> passes -Yuprecompiled_foo.hxx to the compiler.
> >>
> >> That option is supposed to come from
> >> gb_PrecompiledHeader_get_enableflags or
> >> gb_NoexPrecompiledHeader_get_enableflags in LinkTarget.mk, but for some
> >> reason that isn't getting activated.
> >>
> >> I don't see any obvious recent changes that might have broken this.
> >
> > More digging ...
> >
> > LinkTarget.mk contains some logic to that only enables the use of
> > precompiled headers when the compiler flags that were used to build the
> > precompiled header match the flags used to compile the target source
> > file.  If I compare the compiler flags used to build the precompiled
> > header with the flags used to compile one of the source files, I see
> > these differences:
> >
> > @@ -33,7 +33,6 @@
> >  -D_DLL_
> >  -DPRECOMPILED_HEADERS
> >  -DSW_DLLIMPLEMENTATION
> > --DSW_DLLIMPLEMENTATION
> >  -Gd
> >  -GR
> >  -Gs
> > @@ -78,13 +77,13 @@
> >  -wd4826
> >  -Zc:wchar_t-
> >  -Zm500
> > +-DEXCEPTIONS_ON
> > +-EHa
> >  -Ob1
> >  -Oxs
> >  -Oy-
> > --DEXCEPTIONS_ON
> > --EHa
> > --Fd$W/LinkTarget/pdb/Library/isw.lib.pdb
> > --I$S/sw/inc/pch/
> > +-Fd
> > +-I$S/sw/source/core/access/
> >  -IC:/aoo/aoo-trunk/main/solver/420/wntmsci12.pro/inc/stl
> >  -I$S/sw/source/core/inc
> >  -I$S/sw/source/filter/inc
> > @@ -108,7 +107,5 @@
> >  -I$O/inc/udkapi
> >  -I$O/inc/offapi
> >  -c
> > -$S/sw/inc/pch/precompiled_sw.cxx
> > --Ycprecompiled_sw.hxx
> > --Fp$W/PrecompiledHeader/nodebug/precompiled_sw.hxx.pch
> > --Fo$W/PrecompiledHeader/nodebug/precompiled_sw.hxx.pch.obj
> > +$S/sw/source/core/access/acccell.cxx
> > +-Fo$W/CxxObject/sw/source/core/access/acccell.o
> >
> > The potentially important differences are:
> >
> >   * When building the precompiled header, -DSW_DLLIMPLEMENTATION is
> >     repeated
> >
> >   * These flags are used when building the precompiled header:
> >     -Fd$W/LinkTarget/pdb/Library/isw.lib.pdb -I$S/sw/inc/pch/
> >     whereas these flags are used when building the target:
> >     -Fd -I$S/sw/source/core/access/
> >
> > Another observation is that if an override of the compiler flags for
> > a particular target disables the use of precompiled headers, then
> > -DPRECOMPILED_HEADERS should not be passed to the compiler if -Yu is
> > not.  That would avoid the pessimization of including all of those extra
> > headers that are not used.
>
> The answer turns out to be none of the above.  I didn't find the cause
> for the duplication of -DSW_DLLIMPLEMENTATION, but it doesn't matter
> because the duplicate is squashed by the comparison which uses
> $(sort ...).  I don't think the latter difference is part of the
> comparison.
>
> The cause turns out to be that $(PCH_NAME) is not inherited by the
> compile, so the -Yu compile flag is not used.  I've fixed this in
> r1758061.
>
> Doing "build --all -P2 -- -P2" on a two-core machine now takes:
>         377 minutes with --disable-pch
>         278 minutes with --enable-pch
>
>
Fantastic work Don, thank you so much!

Damjan

Reply via email to