From 68f693b7cf44012d3099983b41eee6da55f5452f Mon Sep 17 00:00:00 2001 From: Nazir Bilal Yavuz Date: Wed, 12 Mar 2025 10:44:46 +0300 Subject: [PATCH v9 6/6] meson: Add LLVM bitcode emission for backend sources Since generated backend sources may have their own compilation flags and must also be included in the postgres.index.bc, the way to make it work with current code was to create a new variable, called `bc_generated_backend_sources`, which is a list of dictionaries, each one having an optional 'additional_flags' and a `srclist` pointing to the list of custom_target generated sources. An example of a possible structure of bitcode_modules which is processed by the main meson llvm bitcode emission file src/backend/jit/llvm/bitcode/meson.build: ``` bitcode_modules = [ { 'name': 'postgres', 'target': postgres_lib, 'src_file': backend_sources, 'gen_srcfiles': [ { 'additional_flags': [ '-I/path/postgresl/src/backend/parser', '-I/path/postgresl/build/src/backend/parser', ], 'srcfiles': [ , ] } ] } ] ``` Author: Diego Fronza Author: Nazir Bilal Yavuz Discussion: https://postgr.es/m/206b001d-1884-4081-bd02-bed5c92f02ba%40eisentraut.org --- src/backend/bootstrap/meson.build | 2 ++ src/backend/meson.build | 2 ++ src/backend/parser/meson.build | 8 ++++++++ src/backend/replication/meson.build | 4 ++++ src/backend/utils/fmgr/meson.build | 1 + 5 files changed, 17 insertions(+) diff --git a/src/backend/bootstrap/meson.build b/src/backend/bootstrap/meson.build index 2f9115fc97c..f49e27f3889 100644 --- a/src/backend/bootstrap/meson.build +++ b/src/backend/bootstrap/meson.build @@ -13,6 +13,7 @@ bootscanner = custom_target('bootscanner', ) generated_sources += bootscanner boot_parser_sources += bootscanner +bc_generated_backend_sources += {'srcfiles': [bootscanner]} bootparse = custom_target('bootparse', input: 'bootparse.y', @@ -20,6 +21,7 @@ bootparse = custom_target('bootparse', ) generated_sources += bootparse.to_list() boot_parser_sources += bootparse +bc_generated_backend_sources += {'srcfiles': [bootparse[0]]} boot_parser = static_library('boot_parser', boot_parser_sources, diff --git a/src/backend/meson.build b/src/backend/meson.build index e41e278dbc0..109741a9dca 100644 --- a/src/backend/meson.build +++ b/src/backend/meson.build @@ -5,6 +5,7 @@ backend_sources = [] backend_link_with = [pgport_srv, common_srv] generated_backend_sources = [] +bc_generated_backend_sources = [] post_export_backend_sources = [] subdir('access') @@ -144,6 +145,7 @@ bitcode_modules += { 'name': 'postgres', 'target': postgres_lib, 'srcfiles': backend_sources, + 'gen_sources': bc_generated_backend_sources, } pg_mod_c_args = cflags_mod diff --git a/src/backend/parser/meson.build b/src/backend/parser/meson.build index 924ee87a453..177b57496c0 100644 --- a/src/backend/parser/meson.build +++ b/src/backend/parser/meson.build @@ -42,6 +42,14 @@ backend_parser = custom_target('gram', generated_sources += backend_parser.to_list() parser_sources += backend_parser +bc_generated_backend_sources += { + 'additional_flags': [ + '-I@0@'.format(meson.current_build_dir()), + '-I@0@'.format(meson.current_source_dir()), + ], + 'srcfiles': [backend_scanner, backend_parser[0]], +} + parser = static_library('parser', parser_sources, dependencies: [backend_code], diff --git a/src/backend/replication/meson.build b/src/backend/replication/meson.build index ce9be4117ad..a4789f1f86f 100644 --- a/src/backend/replication/meson.build +++ b/src/backend/replication/meson.build @@ -19,6 +19,7 @@ repl_scanner = custom_target('repl_scanner', ) generated_sources += repl_scanner repl_parser_sources += repl_scanner +bc_generated_backend_sources += {'srcfiles': [repl_scanner]} repl_gram = custom_target('repl_gram', input: 'repl_gram.y', @@ -26,6 +27,7 @@ repl_gram = custom_target('repl_gram', ) generated_sources += repl_gram.to_list() repl_parser_sources += repl_gram +bc_generated_backend_sources += {'srcfiles': [repl_gram[0]]} syncrep_scanner = custom_target('syncrep_scanner', input: 'syncrep_scanner.l', @@ -34,6 +36,7 @@ syncrep_scanner = custom_target('syncrep_scanner', ) generated_sources += syncrep_scanner repl_parser_sources += syncrep_scanner +bc_generated_backend_sources += {'srcfiles': [syncrep_scanner]} syncrep_gram = custom_target('syncrep_gram', input: 'syncrep_gram.y', @@ -41,6 +44,7 @@ syncrep_gram = custom_target('syncrep_gram', ) generated_sources += syncrep_gram.to_list() repl_parser_sources += syncrep_gram +bc_generated_backend_sources += {'srcfiles': [syncrep_gram[0]]} repl_parser = static_library('repl_parser', repl_parser_sources, diff --git a/src/backend/utils/fmgr/meson.build b/src/backend/utils/fmgr/meson.build index 3a90deba979..71dad370d1d 100644 --- a/src/backend/utils/fmgr/meson.build +++ b/src/backend/utils/fmgr/meson.build @@ -8,3 +8,4 @@ backend_sources += files( # fmgrtab.c generated_backend_sources += fmgrtab_target[2] +bc_generated_backend_sources += {'srcfiles': [fmgrtab_target[2]]} -- 2.47.3