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


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@openoffice.apache.org
For additional commands, e-mail: dev-h...@openoffice.apache.org

Reply via email to