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') add_project_arguments(cxx.get_supported_arguments(warn_flags), native: false, language: 'cpp') endif if 'objc' in all_languages # Note sanitizer flags are not applied to Objective-C sources! - add_project_arguments(objc.get_supported_arguments(warn_flags), native: false, language: 'objc') + add_project_arguments(objc.get_supported_arguments(qemu_common_flags + warn_flags), + native: false, language: 'objc') endif if host_os == 'linux' add_project_arguments('-isystem', meson.current_source_dir() / 'linux-headers', -- 2.47.3
