meson: add and use stamp files for generated headers

Without using stamp files, meson lists the generated headers as the dependency
for every .c file, bloating build.ninja by more than 2x. Processing all the
dependencies also increases the time to generate build.ninja.

The immediate benefit is that this makes re-configuring and clean builds a bit
faster. The main motivation however is that I have other patches that
introduce additional build targets that further would increase the size of
build.ninja, making re-configuring more noticeably slower.

Reviewed-by: Nazir Bilal Yavuz <byavuz81@gmail.com>
Discussion: https://postgr.es/m/cgkdgvzdpinkacf4v33mky7tbmk467oda5dd4dlmucjjockxzi@xkqfvjoq4uiy
pull/239/head
Andres Freund 1 month ago
parent 71ea0d6795
commit 01d6832c10
  1. 16
      meson.build
  2. 2
      src/backend/meson.build
  3. 2
      src/fe_utils/meson.build
  4. 21
      src/include/meson.build

@ -3133,6 +3133,8 @@ gen_export_kwargs = {
'install': false, 'install': false,
} }
# command to create stamp files on all OSs
stamp_cmd = [python, '-c', 'import sys; open(sys.argv[1], "w")', '@OUTPUT0@']
### ###
@ -3250,14 +3252,14 @@ subdir('src/port')
frontend_common_code = declare_dependency( frontend_common_code = declare_dependency(
compile_args: ['-DFRONTEND'], compile_args: ['-DFRONTEND'],
include_directories: [postgres_inc], include_directories: [postgres_inc],
sources: generated_headers, sources: generated_headers_stamp,
dependencies: [os_deps, zlib, zstd, lz4], dependencies: [os_deps, zlib, zstd, lz4],
) )
backend_common_code = declare_dependency( backend_common_code = declare_dependency(
compile_args: ['-DBUILDING_DLL'], compile_args: ['-DBUILDING_DLL'],
include_directories: [postgres_inc], include_directories: [postgres_inc],
sources: generated_headers, sources: generated_headers_stamp,
dependencies: [os_deps, zlib, zstd], dependencies: [os_deps, zlib, zstd],
) )
@ -3272,7 +3274,7 @@ shlib_code = declare_dependency(
frontend_stlib_code = declare_dependency( frontend_stlib_code = declare_dependency(
include_directories: [postgres_inc], include_directories: [postgres_inc],
link_with: [common_static, pgport_static], link_with: [common_static, pgport_static],
sources: generated_headers, sources: generated_headers_stamp,
dependencies: [os_deps, libintl], dependencies: [os_deps, libintl],
) )
@ -3280,7 +3282,7 @@ frontend_stlib_code = declare_dependency(
frontend_shlib_code = declare_dependency( frontend_shlib_code = declare_dependency(
include_directories: [postgres_inc], include_directories: [postgres_inc],
link_with: [common_shlib, pgport_shlib], link_with: [common_shlib, pgport_shlib],
sources: generated_headers, sources: generated_headers_stamp,
dependencies: [shlib_code, os_deps, libintl], dependencies: [shlib_code, os_deps, libintl],
) )
@ -3290,7 +3292,7 @@ frontend_shlib_code = declare_dependency(
frontend_no_fe_utils_code = declare_dependency( frontend_no_fe_utils_code = declare_dependency(
include_directories: [postgres_inc], include_directories: [postgres_inc],
link_with: [common_static, pgport_static], link_with: [common_static, pgport_static],
sources: generated_headers, sources: generated_headers_stamp,
dependencies: [os_deps, libintl], dependencies: [os_deps, libintl],
) )
@ -3317,7 +3319,7 @@ subdir('src/interfaces/libpq-oauth')
frontend_code = declare_dependency( frontend_code = declare_dependency(
include_directories: [postgres_inc], include_directories: [postgres_inc],
link_with: [fe_utils, common_static, pgport_static], link_with: [fe_utils, common_static, pgport_static],
sources: generated_headers, sources: generated_headers_stamp,
dependencies: [os_deps, libintl], dependencies: [os_deps, libintl],
) )
@ -3347,7 +3349,7 @@ backend_code = declare_dependency(
include_directories: [postgres_inc], include_directories: [postgres_inc],
link_args: ldflags_be, link_args: ldflags_be,
link_with: [], link_with: [],
sources: generated_headers + generated_backend_headers, sources: generated_backend_headers_stamp,
dependencies: os_deps + backend_both_deps + backend_deps, dependencies: os_deps + backend_both_deps + backend_deps,
) )

@ -169,7 +169,7 @@ backend_mod_code = declare_dependency(
compile_args: pg_mod_c_args, compile_args: pg_mod_c_args,
include_directories: postgres_inc, include_directories: postgres_inc,
link_args: pg_mod_link_args, link_args: pg_mod_link_args,
sources: generated_headers + generated_backend_headers, sources: generated_backend_headers_stamp,
dependencies: backend_mod_deps, dependencies: backend_mod_deps,
) )

@ -29,7 +29,7 @@ generated_sources += psqlscan
fe_utils_sources += psqlscan fe_utils_sources += psqlscan
fe_utils = static_library('libpgfeutils', fe_utils = static_library('libpgfeutils',
fe_utils_sources + generated_headers, fe_utils_sources,
c_pch: pch_postgres_fe_h, c_pch: pch_postgres_fe_h,
include_directories: [postgres_inc, libpq_inc], include_directories: [postgres_inc, libpq_inc],
c_args: host_system == 'windows' ? ['-DFD_SETSIZE=1024'] : [], c_args: host_system == 'windows' ? ['-DFD_SETSIZE=1024'] : [],

@ -177,3 +177,24 @@ install_subdir('catalog',
# autoconf generates the file there, ensure we get a conflict # autoconf generates the file there, ensure we get a conflict
generated_sources_ac += {'src/include': ['stamp-h']} generated_sources_ac += {'src/include': ['stamp-h']}
# Instead of having targets depending directly on a list of all generated
# headers, have them depend on a stamp files for all of them. Dependencies on
# headers are implemented as order-only dependencies in meson (and then using
# compiler generated dependencies during incremental rebuilds ). The benefit
# of using a stamp file is that it makes ninja.build considerably smaller and
# meson setup faster, as otherwise the list of headers is repeated for every C
# file, bloating build.ninja by ~2x.
generated_headers_stamp = custom_target('generated-headers-stamp.h',
output: 'generated-headers-stamp.h',
input: generated_headers,
command: stamp_cmd,
)
generated_backend_headers_stamp = custom_target('generated-backend-headers-stamp.h',
output: 'generated-backend-headers-stamp.h',
input: generated_backend_headers,
depends: generated_headers_stamp,
command: stamp_cmd,
)

Loading…
Cancel
Save