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. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@openoffice.apache.org For additional commands, e-mail: dev-h...@openoffice.apache.org