From: "SZEDER Gábor" <szeder.dev@gmail.com>
To: phillip.wood@dunelm.org.uk
Cc: Patrick Steinhardt <ps@pks.im>,
git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>
Subject: Re: [PATCH v3 8/8] meson: precompile "git-compat-util.h"
Date: Fri, 10 Apr 2026 18:05:31 +0200 [thread overview]
Message-ID: <adkfy4OgGKlJnd5c@szeder.dev> (raw)
In-Reply-To: <0b67d2fb-3041-4fed-9002-44b7b2e7ecd3@gmail.com>
On Fri, Apr 10, 2026 at 04:46:43PM +0100, Phillip Wood wrote:
>
>
> On 10/04/2026 16:36, SZEDER Gábor wrote:
> > On Thu, Mar 19, 2026 at 06:33:27AM +0100, Patrick Steinhardt wrote:
> > > Every compilation unit in Git is expected to include "git-compat-util.h"
> > > first, either directly or indirectly via "builtin.h". This header papers
> > > over differences between platforms so that we can expect the typical
> > > POSIX functions to exist. Furthermore, it provides functionality that we
> > > end up using everywhere.
> > >
> > > This header is thus quite heavy as a consequence. Preprocessing it as a
> > > standalone unit via `clang -E git-compat-util.h` yields over 23,000
> > > lines of code overall. Naturally, it takes quite some time to compile
> > > all of this.
> > >
> > > Luckily, this is exactly the kind of use case that precompiled headers
> > > aim to solve: instead of recompiling it every single time, we compile it
> > > once and then link the result into the executable. If include guards are
> > > set up properly it means that the file won't need to be reprocessed.
> > >
> > > Set up such a precompiled header for "git-compat-util.h" and wire it up
> > > via Meson. This causes Meson to implicitly include the precompiled
> > > header in all compilation units. With GCC and Clang for example this is
> > > done via the "-include" statement [1].
> > >
> > > This leads to a significant speedup when performing full builds:
> > >
> > > Benchmark 1: ninja (rev = HEAD~)
> > > Time (mean ± σ): 14.467 s ± 0.126 s [User: 248.133 s, System: 31.298 s]
> > > Range (min … max): 14.195 s … 14.633 s 10 runs
> > >
> > > Benchmark 2: ninja (rev = HEAD)
> > > Time (mean ± σ): 10.307 s ± 0.111 s [User: 173.290 s, System: 23.998 s]
> > > Range (min … max): 10.030 s … 10.433 s 10 runs
> > >
> > > Summary
> > > ninja (rev = HEAD) ran
> > > 1.40 ± 0.02 times faster than ninja (rev = HEAD~)
> > >
> > > [1]: https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
> > >
> > > Signed-off-by: Patrick Steinhardt <ps@pks.im>
> > > ---
> > > meson.build | 2 ++
> > > tools/precompiled.h | 1 +
> > > 2 files changed, 3 insertions(+)
> > >
> > > diff --git a/meson.build b/meson.build
> > > index cd00be1c23..2002f4795e 100644
> > > --- a/meson.build
> > > +++ b/meson.build
> > > @@ -1760,6 +1760,7 @@ libgit = declare_dependency(
> > > c_args: libgit_c_args + [
> > > '-DGIT_VERSION_H="' + version_def_h.full_path() + '"',
> > > ],
> > > + c_pch: 'tools/precompiled.h',
> > > dependencies: libgit_dependencies,
> > > include_directories: libgit_include_directories,
> > > ),
> >
> > Well, I don't do meson, but...
> >
> > If I understand this right, this section here compiles all the source
> > files listed in "libgit_sources" using our new precompiled header.
> > But "libgit_sources" contains all source files under "reftable/",
> > which, with the sole exception of "reftable/system.c", don't include
> > "git-compat-util.h".
> >
> > Now, building the reftable sources with "git-compat-util.h" included
> > through the precompiled header apparently didn't cause any compilation
> > errors...
> > But I think that's just accidental, and if a source file doesn't
> > include "git-compat-util.h", then it shouldn't be compiled with the
> > precompiled header.
>
> FWIW I agree it would be better to keep the same includes when building with
> precompiled headers. There is some discussion about this starting at
> https://lore.kernel.org/git/2fe87868-dff5-4b3a-95e3-d4b6376b59ed@gmail.com/
I'm not sure that "oh look, it didn't break, so it must be good" is
the right approach...
And why was this not mentioned in the commit message?! Sigh...
prev parent reply other threads:[~2026-04-10 16:05 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-10 17:52 [PATCH 0/8] Some build system improvements Patrick Steinhardt
2026-03-10 17:52 ` [PATCH 1/8] Introduce new "tools/" directory Patrick Steinhardt
2026-03-10 17:52 ` [PATCH 2/8] contrib: move "coccinelle/" directory into "tools/" Patrick Steinhardt
2026-03-10 17:52 ` [PATCH 3/8] contrib: move "coverage-diff.sh" script " Patrick Steinhardt
2026-03-10 17:52 ` [PATCH 4/8] contrib: move "update-unicode.sh" " Patrick Steinhardt
2026-03-10 17:52 ` [PATCH 5/8] builds: move build scripts " Patrick Steinhardt
2026-03-10 17:52 ` [PATCH 6/8] git-compat-util.h: move warning infra to prepare for PCHs Patrick Steinhardt
2026-03-10 17:52 ` [PATCH 7/8] meson: compile compatibility sources separately Patrick Steinhardt
2026-03-11 14:32 ` Phillip Wood
2026-03-11 14:56 ` Phillip Wood
2026-03-11 23:27 ` SZEDER Gábor
2026-03-12 6:21 ` Patrick Steinhardt
2026-03-13 10:33 ` Phillip Wood
2026-03-16 8:09 ` Patrick Steinhardt
2026-04-10 15:17 ` SZEDER Gábor
2026-03-12 6:22 ` Patrick Steinhardt
2026-03-13 10:33 ` Phillip Wood
2026-03-16 8:09 ` Patrick Steinhardt
2026-03-16 10:52 ` Phillip Wood
2026-03-17 15:38 ` Kristoffer Haugsbakk
2026-03-19 5:32 ` Patrick Steinhardt
2026-03-10 17:52 ` [PATCH 8/8] meson: precompile "git-compat-util.h" Patrick Steinhardt
2026-03-11 14:32 ` Phillip Wood
2026-03-12 6:21 ` Patrick Steinhardt
2026-03-10 18:23 ` [PATCH 0/8] Some build system improvements Junio C Hamano
2026-03-11 7:32 ` Patrick Steinhardt
2026-03-13 22:21 ` Junio C Hamano
2026-03-16 8:09 ` Patrick Steinhardt
2026-03-16 10:07 ` [PATCH v2 " Patrick Steinhardt
2026-03-16 10:07 ` [PATCH v2 1/8] Introduce new "tools/" directory Patrick Steinhardt
2026-03-16 10:07 ` [PATCH v2 2/8] contrib: move "coccinelle/" directory into "tools/" Patrick Steinhardt
2026-03-16 10:07 ` [PATCH v2 3/8] contrib: move "coverage-diff.sh" script " Patrick Steinhardt
2026-03-16 10:07 ` [PATCH v2 4/8] contrib: move "update-unicode.sh" " Patrick Steinhardt
2026-03-16 10:08 ` [PATCH v2 5/8] builds: move build scripts " Patrick Steinhardt
2026-03-16 10:08 ` [PATCH v2 6/8] git-compat-util.h: move warning infra to prepare for PCHs Patrick Steinhardt
2026-03-16 10:08 ` [PATCH v2 7/8] meson: compile compatibility sources separately Patrick Steinhardt
2026-03-16 10:08 ` [PATCH v2 8/8] meson: precompile "git-compat-util.h" Patrick Steinhardt
2026-03-16 10:54 ` [PATCH v2 0/8] Some build system improvements Phillip Wood
2026-03-19 5:33 ` [PATCH v3 " Patrick Steinhardt
2026-03-19 5:33 ` [PATCH v3 1/8] Introduce new "tools/" directory Patrick Steinhardt
2026-03-19 5:33 ` [PATCH v3 2/8] contrib: move "coccinelle/" directory into "tools/" Patrick Steinhardt
2026-03-19 5:33 ` [PATCH v3 3/8] contrib: move "coverage-diff.sh" script " Patrick Steinhardt
2026-03-20 12:15 ` Toon Claes
2026-03-19 5:33 ` [PATCH v3 4/8] contrib: move "update-unicode.sh" " Patrick Steinhardt
2026-03-19 5:33 ` [PATCH v3 5/8] builds: move build scripts " Patrick Steinhardt
2026-03-19 5:33 ` [PATCH v3 6/8] git-compat-util.h: move warning infra to prepare for PCHs Patrick Steinhardt
2026-03-20 12:34 ` Toon Claes
2026-03-19 5:33 ` [PATCH v3 7/8] meson: compile compatibility sources separately Patrick Steinhardt
2026-03-19 5:33 ` [PATCH v3 8/8] meson: precompile "git-compat-util.h" Patrick Steinhardt
2026-03-20 12:37 ` Toon Claes
2026-04-10 15:36 ` SZEDER Gábor
2026-04-10 15:46 ` Phillip Wood
2026-04-10 16:05 ` SZEDER Gábor [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=adkfy4OgGKlJnd5c@szeder.dev \
--to=szeder.dev@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=kristofferhaugsbakk@fastmail.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox