Message ID | 20250313034524.3069690-18-richard.henderson@linaro.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | accel/tcg, codebase: Build once patches | expand |
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>
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)
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(-)