On Sat, Jan 3, 2026 at 10:39 PM Pierrick Bouvier <[email protected]> wrote: > > On 1/3/26 4:54 AM, Manos Pitsidianakis wrote: > > On Fri, 02 Jan 2026 23:47, Pierrick Bouvier <[email protected]> > > wrote: > >> qemu_common_flags are only checked for c compiler, even though they > >> are applied to c++ and objc. This is a problem when C compiler is gcc, > >> and C++ compiler is clang, creating a possible mismatch. > >> > >> One concrete example is option -fzero-call-used-regs=used-gpr with > >> ubuntu2204 container, which is supported by gcc, but not by clang, thus > >> leading to a failure when compiling a C++ TCG plugin. > >> > >> Reviewed-by: Philippe Mathieu-Daudé <[email protected]> > >> Signed-off-by: Pierrick Bouvier <[email protected]> > >> --- > >> meson.build | 17 +++++++++-------- > >> 1 file changed, 9 insertions(+), 8 deletions(-) > >> > >> diff --git a/meson.build b/meson.build > >> index a8fd8e88225..256cc0cdb21 100644 > >> --- a/meson.build > >> +++ b/meson.build > >> @@ -709,10 +709,7 @@ if cc.compiles('extern struct { void (*cb)(void); } > >> s; void f(void) { s.cb(); }' > >> hardening_flags += '-fzero-call-used-regs=used-gpr' > >> endif > >> > >> -qemu_common_flags += cc.get_supported_arguments(hardening_flags) > >> - > >> -add_global_arguments(qemu_common_flags, native: false, language: > >> all_languages) > >> -add_global_link_arguments(qemu_ldflags, native: false, language: > >> all_languages) > >> +qemu_common_flags += hardening_flags > >> > >> # Collect warning flags we want to set, sorted alphabetically > >> warn_flags = [ > >> @@ -771,15 +768,19 @@ if 'cpp' in all_languages > >> qemu_cxxflags = ['-D__STDC_LIMIT_MACROS', '-D__STDC_CONSTANT_MACROS', > >> '-D__STDC_FORMAT_MACROS'] + qemu_cflags > >> endif > >> > >> -add_project_arguments(qemu_cflags, native: false, language: 'c') > >> -add_project_arguments(cc.get_supported_arguments(warn_flags), native: > >> false, language: 'c') > >> +add_project_arguments(cc.get_supported_arguments(qemu_common_flags + > >> qemu_cflags + warn_flags), > >> + native: false, language: 'c') > >> +add_global_link_arguments(qemu_ldflags, native: false, language: > >> all_languages) > >> + > >> if 'cpp' in all_languages > >> - add_project_arguments(qemu_cxxflags, native: false, language: 'cpp') > >> + add_project_arguments(cxx.get_supported_arguments(qemu_common_flags + > >> qemu_cxxflags), > >> + native: false, language: 'cpp') > > > > This is a subtle behavior change (qemu_cxxflags wasn't filtered through > > cxx.get_supported_arguments previously). Do we care about this? > > > > Sames goes for qemu_c_flags that we now filter also and we applied > directly before. The goal is to have the same code layout in meson.build > between the three languages for code clarity. > My argument for this and qemu_cxxflags is that it should be equivalent, > and if it's not, it should have been raised previously with an > unsupported argument warning at compile time anyway. > > By curiousity, looking at meson source, has_argument is implemented by > compiling a file with the given flag, which is equivalent to what we do > manually. It has different implementations per language: grep > has_multi_arguments. > > Thanks, > Pierrick
Good enough for me Reviewed-by: Manos Pitsidianakis <[email protected]>
