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]>

Reply via email to