[PATCH 17/37] meson: Introduce top-level libuser_ss and libsystem_ss

Richard Henderson posted 37 patches 8 months, 1 week ago
There is a newer version of this series
[PATCH 17/37] meson: Introduce top-level libuser_ss and libsystem_ss
Posted by Richard Henderson 8 months, 1 week ago
We already have two subdirectories for which we need
to build files twice, for user vs system modes.
Move this handling to the top level.

This cannot be combined with user_ss or system_ss,
because the formulation has not been extended to support
configuration symbols.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 gdbstub/meson.build | 32 ++++++++------------------------
 meson.build         | 22 ++++++++++++++++++++++
 tcg/meson.build     | 23 ++---------------------
 3 files changed, 32 insertions(+), 45 deletions(-)

diff --git a/gdbstub/meson.build b/gdbstub/meson.build
index dff741ddd4..0e8099ae9c 100644
--- a/gdbstub/meson.build
+++ b/gdbstub/meson.build
@@ -4,32 +4,16 @@
 # types such as hwaddr.
 #
 
-# We need to build the core gdb code via a library to be able to tweak
-# cflags so:
-
-gdb_user_ss = ss.source_set()
-gdb_system_ss = ss.source_set()
-
 # We build two versions of gdbstub, one for each mode
-gdb_user_ss.add(files('gdbstub.c', 'user.c'))
-gdb_system_ss.add(files('gdbstub.c', 'system.c'))
+libuser_ss.add(files(
+  'gdbstub.c',
+  'user.c'
+))
 
-gdb_user_ss = gdb_user_ss.apply({})
-gdb_system_ss = gdb_system_ss.apply({})
-
-libgdb_user = static_library('gdb_user',
-                             gdb_user_ss.sources() + genh,
-                             c_args: '-DCONFIG_USER_ONLY',
-                             build_by_default: false)
-
-libgdb_system = static_library('gdb_system',
-                                gdb_system_ss.sources() + genh,
-                                build_by_default: false)
-
-gdb_user = declare_dependency(objects: libgdb_user.extract_all_objects(recursive: false))
-user_ss.add(gdb_user)
-gdb_system = declare_dependency(objects: libgdb_system.extract_all_objects(recursive: false))
-system_ss.add(gdb_system)
+libsystem_ss.add(files(
+  'gdbstub.c',
+  'system.c'
+))
 
 common_ss.add(files('syscalls.c'))
 
diff --git a/meson.build b/meson.build
index 9d9c11731f..3869e5bfbc 100644
--- a/meson.build
+++ b/meson.build
@@ -3655,12 +3655,14 @@ io_ss = ss.source_set()
 qmp_ss = ss.source_set()
 qom_ss = ss.source_set()
 system_ss = ss.source_set()
+libsystem_ss = ss.source_set()
 specific_fuzz_ss = ss.source_set()
 specific_ss = ss.source_set()
 rust_devices_ss = ss.source_set()
 stub_ss = ss.source_set()
 trace_ss = ss.source_set()
 user_ss = ss.source_set()
+libuser_ss = ss.source_set()
 util_ss = ss.source_set()
 
 # accel modules
@@ -4038,6 +4040,26 @@ common_ss.add(qom, qemuutil)
 common_ss.add_all(when: 'CONFIG_SYSTEM_ONLY', if_true: [system_ss])
 common_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss)
 
+libuser_ss = libuser_ss.apply({})
+libuser = static_library('user',
+                         libuser_ss.sources() + genh,
+                         c_args: '-DCONFIG_USER_ONLY',
+                         dependencies: libuser_ss.dependencies(),
+                         build_by_default: false)
+libuser = declare_dependency(objects: libuser.extract_all_objects(recursive: false),
+                             dependencies: libuser_ss.dependencies())
+common_ss.add(when: 'CONFIG_USER_ONLY', if_true: libuser)
+
+libsystem_ss = libsystem_ss.apply({})
+libsystem = static_library('system',
+                           libsystem_ss.sources() + genh,
+                           c_args: '-DCONFIG_SOFTMMU',
+                           dependencies: libsystem_ss.dependencies(),
+                           build_by_default: false)
+libsystem = declare_dependency(objects: libsystem.extract_all_objects(recursive: false),
+                               dependencies: libsystem_ss.dependencies())
+common_ss.add(when: 'CONFIG_SYSTEM_ONLY', if_true: libsystem)
+
 # Note that this library is never used directly (only through extract_objects)
 # and is not built by default; therefore, source files not used by the build
 # configuration will be in build.ninja, but are never built by default.
diff --git a/tcg/meson.build b/tcg/meson.build
index 69ebb4908a..7df378d773 100644
--- a/tcg/meson.build
+++ b/tcg/meson.build
@@ -27,24 +27,5 @@ if host_os == 'linux'
   tcg_ss.add(files('perf.c'))
 endif
 
-tcg_ss = tcg_ss.apply({})
-
-libtcg_user = static_library('tcg_user',
-                             tcg_ss.sources() + genh,
-                             dependencies: tcg_ss.dependencies(),
-                             c_args: '-DCONFIG_USER_ONLY',
-                             build_by_default: false)
-
-tcg_user = declare_dependency(objects: libtcg_user.extract_all_objects(recursive: false),
-                              dependencies: tcg_ss.dependencies())
-user_ss.add(tcg_user)
-
-libtcg_system = static_library('tcg_system',
-                                tcg_ss.sources() + genh,
-                                dependencies: tcg_ss.dependencies(),
-                                c_args: '-DCONFIG_SOFTMMU',
-                                build_by_default: false)
-
-tcg_system = declare_dependency(objects: libtcg_system.extract_all_objects(recursive: false),
-                                dependencies: tcg_ss.dependencies())
-system_ss.add(tcg_system)
+libuser_ss.add_all(tcg_ss)
+libsystem_ss.add_all(tcg_ss)
-- 
2.43.0
Re: [PATCH 17/37] meson: Introduce top-level libuser_ss and libsystem_ss
Posted by Pierrick Bouvier 8 months, 1 week ago
On 3/12/25 20:44, Richard Henderson wrote:
> We already have two subdirectories for which we need
> to build files twice, for user vs system modes.
> Move this handling to the top level.
> 
> This cannot be combined with user_ss or system_ss,
> because the formulation has not been extended to support
> configuration symbols.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>   gdbstub/meson.build | 32 ++++++++------------------------
>   meson.build         | 22 ++++++++++++++++++++++
>   tcg/meson.build     | 23 ++---------------------
>   3 files changed, 32 insertions(+), 45 deletions(-)
> 
> diff --git a/gdbstub/meson.build b/gdbstub/meson.build
> index dff741ddd4..0e8099ae9c 100644
> --- a/gdbstub/meson.build
> +++ b/gdbstub/meson.build
> @@ -4,32 +4,16 @@
>   # types such as hwaddr.
>   #
>   
> -# We need to build the core gdb code via a library to be able to tweak
> -# cflags so:
> -
> -gdb_user_ss = ss.source_set()
> -gdb_system_ss = ss.source_set()
> -
>   # We build two versions of gdbstub, one for each mode
> -gdb_user_ss.add(files('gdbstub.c', 'user.c'))
> -gdb_system_ss.add(files('gdbstub.c', 'system.c'))
> +libuser_ss.add(files(
> +  'gdbstub.c',
> +  'user.c'
> +))
>   
> -gdb_user_ss = gdb_user_ss.apply({})
> -gdb_system_ss = gdb_system_ss.apply({})
> -
> -libgdb_user = static_library('gdb_user',
> -                             gdb_user_ss.sources() + genh,
> -                             c_args: '-DCONFIG_USER_ONLY',
> -                             build_by_default: false)
> -
> -libgdb_system = static_library('gdb_system',
> -                                gdb_system_ss.sources() + genh,
> -                                build_by_default: false)
> -
> -gdb_user = declare_dependency(objects: libgdb_user.extract_all_objects(recursive: false))
> -user_ss.add(gdb_user)
> -gdb_system = declare_dependency(objects: libgdb_system.extract_all_objects(recursive: false))
> -system_ss.add(gdb_system)
> +libsystem_ss.add(files(
> +  'gdbstub.c',
> +  'system.c'
> +))
>   
>   common_ss.add(files('syscalls.c'))
>   
> diff --git a/meson.build b/meson.build
> index 9d9c11731f..3869e5bfbc 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -3655,12 +3655,14 @@ io_ss = ss.source_set()
>   qmp_ss = ss.source_set()
>   qom_ss = ss.source_set()
>   system_ss = ss.source_set()
> +libsystem_ss = ss.source_set()
>   specific_fuzz_ss = ss.source_set()
>   specific_ss = ss.source_set()
>   rust_devices_ss = ss.source_set()
>   stub_ss = ss.source_set()
>   trace_ss = ss.source_set()
>   user_ss = ss.source_set()
> +libuser_ss = ss.source_set()
>   util_ss = ss.source_set()
>   
>   # accel modules
> @@ -4038,6 +4040,26 @@ common_ss.add(qom, qemuutil)
>   common_ss.add_all(when: 'CONFIG_SYSTEM_ONLY', if_true: [system_ss])
>   common_ss.add_all(when: 'CONFIG_USER_ONLY', if_true: user_ss)
>   
> +libuser_ss = libuser_ss.apply({})
> +libuser = static_library('user',
> +                         libuser_ss.sources() + genh,
> +                         c_args: '-DCONFIG_USER_ONLY',
> +                         dependencies: libuser_ss.dependencies(),
> +                         build_by_default: false)
> +libuser = declare_dependency(objects: libuser.extract_all_objects(recursive: false),
> +                             dependencies: libuser_ss.dependencies())
> +common_ss.add(when: 'CONFIG_USER_ONLY', if_true: libuser)
> +
> +libsystem_ss = libsystem_ss.apply({})
> +libsystem = static_library('system',
> +                           libsystem_ss.sources() + genh,
> +                           c_args: '-DCONFIG_SOFTMMU',
> +                           dependencies: libsystem_ss.dependencies(),
> +                           build_by_default: false)
> +libsystem = declare_dependency(objects: libsystem.extract_all_objects(recursive: false),
> +                               dependencies: libsystem_ss.dependencies())
> +common_ss.add(when: 'CONFIG_SYSTEM_ONLY', if_true: libsystem)
> +
>   # Note that this library is never used directly (only through extract_objects)
>   # and is not built by default; therefore, source files not used by the build
>   # configuration will be in build.ninja, but are never built by default.
> diff --git a/tcg/meson.build b/tcg/meson.build
> index 69ebb4908a..7df378d773 100644
> --- a/tcg/meson.build
> +++ b/tcg/meson.build
> @@ -27,24 +27,5 @@ if host_os == 'linux'
>     tcg_ss.add(files('perf.c'))
>   endif
>   
> -tcg_ss = tcg_ss.apply({})
> -
> -libtcg_user = static_library('tcg_user',
> -                             tcg_ss.sources() + genh,
> -                             dependencies: tcg_ss.dependencies(),
> -                             c_args: '-DCONFIG_USER_ONLY',
> -                             build_by_default: false)
> -
> -tcg_user = declare_dependency(objects: libtcg_user.extract_all_objects(recursive: false),
> -                              dependencies: tcg_ss.dependencies())
> -user_ss.add(tcg_user)
> -
> -libtcg_system = static_library('tcg_system',
> -                                tcg_ss.sources() + genh,
> -                                dependencies: tcg_ss.dependencies(),
> -                                c_args: '-DCONFIG_SOFTMMU',
> -                                build_by_default: false)
> -
> -tcg_system = declare_dependency(objects: libtcg_system.extract_all_objects(recursive: false),
> -                                dependencies: tcg_ss.dependencies())
> -system_ss.add(tcg_system)
> +libuser_ss.add_all(tcg_ss)
> +libsystem_ss.add_all(tcg_ss)

Good move,
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>