From: Phillip Wood <phillip.wood123@gmail.com>
To: Patrick Steinhardt <ps@pks.im>, git@vger.kernel.org
Subject: Re: [PATCH 7/8] meson: compile compatibility sources separately
Date: Wed, 11 Mar 2026 14:32:30 +0000 [thread overview]
Message-ID: <a5d1ea70-12dd-461d-b5c5-a1127e017d01@gmail.com> (raw)
In-Reply-To: <20260310-b4-pks-build-infra-improvements-v1-7-ec75d0710d6a@pks.im>
On 10/03/2026 17:52, Patrick Steinhardt wrote:
> In the next commit we're about to introduce a precompiled header for
> "git-compat-util.h". The consequence of this change is that we'll
> implicitly include that header for every compilation unit that uses the
> precompiled headers.
Is that a meson thing? I know it defines precompiled headers on a
per-target basis but does it somehow force each source file to include
the precompiled header? Looking at the gcc documentation it seems like
the precompiled header is only included where the original header is
included. Splitting out the sources that do not depend on
"git-compat-util.h" does mean we get some additional parallelism while
we're precompiling the header which is probably a good thing.
Thanks
Phillip
> This is okay for our "normal" library sources and our builtins. But some
> of our compatibility sources do not include the header on purpose, and
> doing so would cause compileir errors.
>
> Prepare for this change by splitting out compatibility sources into
> their static library. Like this we can selectively enable precompiled
> headers for the library sources.
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> meson.build | 79 +++++++++++++++++++++++++++++++++++--------------------------
> 1 file changed, 45 insertions(+), 34 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 604fe89d2d..cd00be1c23 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -271,6 +271,13 @@ version_gen_environment.set('GIT_VERSION', get_option('version'))
>
> compiler = meson.get_compiler('c')
>
> +compat_sources = [
> + 'compat/nonblock.c',
> + 'compat/obstack.c',
> + 'compat/open.c',
> + 'compat/terminal.c',
> +]
> +
> libgit_sources = [
> 'abspath.c',
> 'add-interactive.c',
> @@ -304,10 +311,6 @@ libgit_sources = [
> 'commit.c',
> 'common-exit.c',
> 'common-init.c',
> - 'compat/nonblock.c',
> - 'compat/obstack.c',
> - 'compat/open.c',
> - 'compat/terminal.c',
> 'compiler-tricks/not-constant.c',
> 'config.c',
> 'connect.c',
> @@ -1163,7 +1166,7 @@ endif
>
> if not has_poll_h and not has_sys_poll_h
> libgit_c_args += '-DNO_POLL'
> - libgit_sources += 'compat/poll/poll.c'
> + compat_sources += 'compat/poll/poll.c'
> libgit_include_directories += 'compat/poll'
> endif
>
> @@ -1179,7 +1182,7 @@ endif
> # implementation to threat things like drive prefixes specially.
> if host_machine.system() == 'windows' or not compiler.has_header('libgen.h')
> libgit_c_args += '-DNO_LIBGEN_H'
> - libgit_sources += 'compat/basename.c'
> + compat_sources += 'compat/basename.c'
> endif
>
> if compiler.has_header('paths.h')
> @@ -1209,7 +1212,7 @@ if host_machine.system() != 'windows'
> foreach symbol : ['inet_ntop', 'inet_pton', 'hstrerror']
> if not compiler.has_function(symbol, dependencies: networking_dependencies)
> libgit_c_args += '-DNO_' + symbol.to_upper()
> - libgit_sources += 'compat/' + symbol + '.c'
> + compat_sources += 'compat/' + symbol + '.c'
> endif
> endforeach
> endif
> @@ -1251,18 +1254,18 @@ else
> endif
>
> if host_machine.system() == 'darwin'
> - libgit_sources += 'compat/precompose_utf8.c'
> + compat_sources += 'compat/precompose_utf8.c'
> libgit_c_args += '-DPRECOMPOSE_UNICODE'
> libgit_c_args += '-DPROTECT_HFS_DEFAULT'
> endif
>
> # Configure general compatibility wrappers.
> if host_machine.system() == 'cygwin'
> - libgit_sources += [
> + compat_sources += [
> 'compat/win32/path-utils.c',
> ]
> elif host_machine.system() == 'windows'
> - libgit_sources += [
> + compat_sources += [
> 'compat/winansi.c',
> 'compat/win32/dirent.c',
> 'compat/win32/flush.c',
> @@ -1289,20 +1292,20 @@ elif host_machine.system() == 'windows'
> libgit_include_directories += 'compat/win32'
> if compiler.get_id() == 'msvc'
> libgit_include_directories += 'compat/vcbuild/include'
> - libgit_sources += 'compat/msvc.c'
> + compat_sources += 'compat/msvc.c'
> else
> - libgit_sources += 'compat/mingw.c'
> + compat_sources += 'compat/mingw.c'
> endif
> endif
>
> if host_machine.system() == 'linux'
> - libgit_sources += 'compat/linux/procinfo.c'
> + compat_sources += 'compat/linux/procinfo.c'
> elif host_machine.system() == 'windows'
> - libgit_sources += 'compat/win32/trace2_win32_process_info.c'
> + compat_sources += 'compat/win32/trace2_win32_process_info.c'
> elif host_machine.system() == 'darwin'
> - libgit_sources += 'compat/darwin/procinfo.c'
> + compat_sources += 'compat/darwin/procinfo.c'
> else
> - libgit_sources += 'compat/stub/procinfo.c'
> + compat_sources += 'compat/stub/procinfo.c'
> endif
>
> if host_machine.system() == 'cygwin' or host_machine.system() == 'windows'
> @@ -1315,13 +1318,13 @@ endif
>
> # Configure the simple-ipc subsystem required fro the fsmonitor.
> if host_machine.system() == 'windows'
> - libgit_sources += [
> + compat_sources += [
> 'compat/simple-ipc/ipc-shared.c',
> 'compat/simple-ipc/ipc-win32.c',
> ]
> libgit_c_args += '-DSUPPORTS_SIMPLE_IPC'
> else
> - libgit_sources += [
> + compat_sources += [
> 'compat/simple-ipc/ipc-shared.c',
> 'compat/simple-ipc/ipc-unix-socket.c',
> ]
> @@ -1339,7 +1342,7 @@ if fsmonitor_backend != ''
> libgit_c_args += '-DHAVE_FSMONITOR_DAEMON_BACKEND'
> libgit_c_args += '-DHAVE_FSMONITOR_OS_SETTINGS'
>
> - libgit_sources += [
> + compat_sources += [
> 'compat/fsmonitor/fsm-health-' + fsmonitor_backend + '.c',
> 'compat/fsmonitor/fsm-ipc-' + fsmonitor_backend + '.c',
> 'compat/fsmonitor/fsm-listen-' + fsmonitor_backend + '.c',
> @@ -1355,7 +1358,7 @@ if not get_option('b_sanitize').contains('address') and get_option('regex').allo
>
> if compiler.get_define('REG_ENHANCED', prefix: '#include <regex.h>') != ''
> libgit_c_args += '-DUSE_ENHANCED_BASIC_REGULAR_EXPRESSIONS'
> - libgit_sources += 'compat/regcomp_enhanced.c'
> + compat_sources += 'compat/regcomp_enhanced.c'
> endif
> elif not get_option('regex').enabled()
> libgit_c_args += [
> @@ -1364,7 +1367,7 @@ elif not get_option('regex').enabled()
> '-DNO_MBSUPPORT',
> ]
> build_options_config.set('NO_REGEX', '1')
> - libgit_sources += 'compat/regex/regex.c'
> + compat_sources += 'compat/regex/regex.c'
> libgit_include_directories += 'compat/regex'
> else
> error('Native regex support requested but not found')
> @@ -1428,7 +1431,7 @@ else
>
> if get_option('b_sanitize').contains('address')
> libgit_c_args += '-DNO_MMAP'
> - libgit_sources += 'compat/mmap.c'
> + compat_sources += 'compat/mmap.c'
> else
> checkfuncs += { 'mmap': ['mmap.c'] }
> endif
> @@ -1438,7 +1441,7 @@ foreach func, impls : checkfuncs
> if not compiler.has_function(func)
> libgit_c_args += '-DNO_' + func.to_upper()
> foreach impl : impls
> - libgit_sources += 'compat/' + impl
> + compat_sources += 'compat/' + impl
> endforeach
> endif
> endforeach
> @@ -1449,13 +1452,13 @@ endif
>
> if not compiler.has_function('strdup')
> libgit_c_args += '-DOVERRIDE_STRDUP'
> - libgit_sources += 'compat/strdup.c'
> + compat_sources += 'compat/strdup.c'
> endif
>
> if not compiler.has_function('qsort')
> libgit_c_args += '-DINTERNAL_QSORT'
> endif
> -libgit_sources += 'compat/qsort_s.c'
> +compat_sources += 'compat/qsort_s.c'
>
> if compiler.has_function('getdelim')
> libgit_c_args += '-DHAVE_GETDELIM'
> @@ -1511,7 +1514,7 @@ if meson.can_run_host_binaries() and compiler.run('''
> }
> ''', name: 'fread reads directories').returncode() == 0
> libgit_c_args += '-DFREAD_READS_DIRECTORIES'
> - libgit_sources += 'compat/fopen.c'
> + compat_sources += 'compat/fopen.c'
> endif
>
> if not meson.is_cross_build() and fs.exists('/dev/tty')
> @@ -1745,14 +1748,22 @@ else
> endif
>
> libgit = declare_dependency(
> - link_with: static_library('git',
> - sources: libgit_sources,
> - c_args: libgit_c_args + [
> - '-DGIT_VERSION_H="' + version_def_h.full_path() + '"',
> - ],
> - dependencies: libgit_dependencies,
> - include_directories: libgit_include_directories,
> - ),
> + link_with: [
> + static_library('compat',
> + sources: compat_sources,
> + c_args: libgit_c_args,
> + dependencies: libgit_dependencies,
> + include_directories: libgit_include_directories,
> + ),
> + static_library('git',
> + sources: libgit_sources,
> + c_args: libgit_c_args + [
> + '-DGIT_VERSION_H="' + version_def_h.full_path() + '"',
> + ],
> + dependencies: libgit_dependencies,
> + include_directories: libgit_include_directories,
> + ),
> + ],
> compile_args: libgit_c_args,
> dependencies: libgit_dependencies,
> include_directories: libgit_include_directories,
>
next prev parent reply other threads:[~2026-03-11 14:32 UTC|newest]
Thread overview: 49+ 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 [this message]
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-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
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=a5d1ea70-12dd-461d-b5c5-a1127e017d01@gmail.com \
--to=phillip.wood123@gmail.com \
--cc=git@vger.kernel.org \
--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