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>