On Wed, 4 Feb 2026, Jakub Jelinek wrote:

> Hi!
> 
> The following patch saves ~ 2.4GiB of disk space in x86_64-linux
> bootstrapped object directory:
> find obj80 -name \*.gch -a -type f | xargs du -shc | grep total
> 3.7G  total
> find obj82 -name \*.gch -a -type f | xargs du -shc | grep total
> 1.3G  total
> and ~ 800MiB for i686-linux:
> find obj81 -name \*.gch -a -type f | xargs du -shc | grep total
> 1.2G  total
> find obj83 -name \*.gch -a -type f | xargs du -shc | grep total
> 409M  total
> by disabling PCH in stage1/stage2/stageprofile builds, so only
> building it in stage3/stagefeedback etc.
> I think in stage1/stage2 it is a pure waste of bootstrap time and disk
> space, for profiledbootstrap I'd say PCH isn't used commonly enough
> in the wild that it is worth training GCC on that (but if you disagree,
> I can surely take out that single line in there).

I didn't know PCH'd stdc++.h is so big!  I'll continue using
--disable-libstdcxx-pch during development to avoid wearing down my
SSD (and avoid the slowdown of make having to rebuild the PCH after
every library header change).

I wonder whether using PCH'd stdc++.h is still faster anymore given how
big the standard library is nowadays.  Is the overhead of deserializing
the entire library AST, keeping it in memory, slowing down parts of the
front end that are >=linear in the size of the TU (including GC which is
frequent in checking mode) less than the overhead of not using PCH
and just parsing the subset of the library that's actually needed, for
our average libstdc++ testcase?

> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
> 
> 2026-02-04  Jakub Jelinek  <[email protected]>
> 
>       * Makefile.tpl (STAGE1_CONFIGURE_FLAGS, STAGE2_CONFIGURE_FLAGS,
>       STAGEprofile_CONFIGURE_FLAGS): Append --disable-libstdcxx-pch if
>       target-libstdc++-v3-bootstrap.
>       * Makefile.in: Regenerate.
> 
> --- Makefile.tpl.jj   2026-01-01 18:33:49.674983619 +0100
> +++ Makefile.tpl      2026-02-03 23:54:37.609444020 +0100
> @@ -556,6 +556,12 @@ STAGE1_CONFIGURE_FLAGS = $(STAGE1_CHECKI
>         --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \
>         --disable-build-format-warnings
>  
> +@if target-libstdc++-v3-bootstrap
> +STAGE1_CONFIGURE_FLAGS += --disable-libstdcxx-pch
> +STAGE2_CONFIGURE_FLAGS += --disable-libstdcxx-pch
> +STAGEprofile_CONFIGURE_FLAGS += --disable-libstdcxx-pch
> +@endif target-libstdc++-v3-bootstrap
> +
>  @if target-libphobos-bootstrap
>  STAGE1_CONFIGURE_FLAGS += --with-libphobos-druntime-only
>  STAGE2_CONFIGURE_FLAGS += --with-libphobos-druntime-only
> --- Makefile.in.jj    2026-01-01 18:33:49.673983636 +0100
> +++ Makefile.in       2026-02-03 23:55:15.755489944 +0100
> @@ -633,6 +633,12 @@ STAGE1_CONFIGURE_FLAGS = $(STAGE1_CHECKI
>         --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \
>         --disable-build-format-warnings
>  
> +@if target-libstdc++-v3-bootstrap
> +STAGE1_CONFIGURE_FLAGS += --disable-libstdcxx-pch
> +STAGE2_CONFIGURE_FLAGS += --disable-libstdcxx-pch
> +STAGEprofile_CONFIGURE_FLAGS += --disable-libstdcxx-pch
> +@endif target-libstdc++-v3-bootstrap
> +
>  @if target-libphobos-bootstrap
>  STAGE1_CONFIGURE_FLAGS += --with-libphobos-druntime-only
>  STAGE2_CONFIGURE_FLAGS += --with-libphobos-druntime-only
> 
>       Jakub
> 
> 

Reply via email to