@@ -190,10 +190,23 @@ endif
# Compiler flags #
##################
-qemu_cflags = config_host['QEMU_CFLAGS'].split()
+qemu_common_flags = []
+qemu_cflags = []
+foreach arg : config_host['QEMU_CFLAGS'].split()
+ if arg.startswith('-W')
+ qemu_cflags += arg
+ else
+ qemu_common_flags += arg
+ endif
+endforeach
qemu_objcflags = config_host['QEMU_OBJCFLAGS'].split()
qemu_ldflags = config_host['QEMU_LDFLAGS'].split()
+if get_option('gprof')
+ qemu_common_flags += ['-p']
+ qemu_ldflags += ['-p']
+endif
+
if get_option('prefer_static')
qemu_ldflags += get_option('b_pie') ? '-static-pie' : '-static'
endif
@@ -207,10 +220,9 @@ if targetos == 'windows'
qemu_ldflags += cc.get_supported_link_arguments('-Wl,--dynamicbase', '-Wl,--high-entropy-va')
endif
-if get_option('gprof')
- qemu_cflags += ['-p']
- qemu_objcflags += ['-p']
- qemu_ldflags += ['-p']
+# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
+if targetos != 'sunos' and not config_host.has_key('CONFIG_TSAN')
+ qemu_ldflags += cc.get_supported_link_arguments('-Wl,--warn-common')
endif
# Specify linker-script with add_project_link_arguments so that it is not placed
@@ -226,8 +238,7 @@ if get_option('fuzzing')
name: '-fsanitize-coverage-allowlist=/dev/null',
args: ['-fsanitize-coverage-allowlist=/dev/null',
'-fsanitize-coverage=trace-pc'] )
- add_global_arguments('-fsanitize-coverage-allowlist=instrumentation-filter',
- native: false, language: all_languages)
+ qemu_common_flags += ['-fsanitize-coverage-allowlist=instrumentation-filter']
endif
if get_option('fuzzing_engine') == ''
@@ -235,10 +246,8 @@ if get_option('fuzzing')
# compiled code. To build non-fuzzer binaries with --enable-fuzzing, link
# everything with fsanitize=fuzzer-no-link. Otherwise, the linker will be
# unable to bind the fuzzer-related callbacks added by instrumentation.
- add_global_arguments('-fsanitize=fuzzer-no-link',
- native: false, language: all_languages)
- add_global_link_arguments('-fsanitize=fuzzer-no-link',
- native: false, language: all_languages)
+ qemu_common_flags += ['-fsanitize=fuzzer-no-link']
+ qemu_ldflags += ['-fsanitize=fuzzer-no-link']
# For the actual fuzzer binaries, we need to link against the libfuzzer
# library. They need to be configurable, to support OSS-Fuzz
fuzz_exe_ldflags = ['-fsanitize=fuzzer']
@@ -249,6 +258,9 @@ if get_option('fuzzing')
endif
endif
+add_global_arguments(qemu_common_flags, native: false, language: all_languages)
+add_global_link_arguments(qemu_ldflags, native: false, language: all_languages)
+
# Check that the C++ compiler exists and works with the C compiler.
link_language = 'c'
linker = cc
@@ -272,16 +284,9 @@ if 'cpp' in all_languages
endif
endif
-# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
-if targetos != 'sunos' and not config_host.has_key('CONFIG_TSAN')
- qemu_ldflags += linker.get_supported_link_arguments('-Wl,--warn-common')
-endif
-
-add_global_link_arguments(qemu_ldflags, native: false, language: all_languages)
-
-add_global_arguments(qemu_cflags, native: false, language: 'c')
-add_global_arguments(qemu_cxxflags, native: false, language: 'cpp')
-add_global_arguments(qemu_objcflags, native: false, language: 'objc')
+add_project_arguments(qemu_cflags, native: false, language: 'c')
+add_project_arguments(qemu_cxxflags, native: false, language: 'cpp')
+add_project_arguments(qemu_objcflags, native: false, language: 'objc')
if targetos == 'linux'
add_project_arguments('-isystem', meson.current_source_dir() / 'linux-headers',
'-isystem', 'linux-headers',
@@ -3841,12 +3846,12 @@ link_args = get_option(link_language + '_link_args')
if link_args.length() > 0
summary_info += {'LDFLAGS': ' '.join(link_args)}
endif
-summary_info += {'QEMU_CFLAGS': ' '.join(qemu_cflags)}
+summary_info += {'QEMU_CFLAGS': ' '.join(qemu_common_flags + qemu_cflags)}
if 'cpp' in all_languages
- summary_info += {'QEMU_CXXFLAGS': ' '.join(qemu_cxxflags)}
+ summary_info += {'QEMU_CXXFLAGS': ' '.join(qemu_common_flags + qemu_cxxflags)}
endif
if 'objc' in all_languages
- summary_info += {'QEMU_OBJCFLAGS': ' '.join(qemu_objcflags)}
+ summary_info += {'QEMU_OBJCFLAGS': ' '.join(qemu_common_flags + qemu_objcflags)}
endif
summary_info += {'QEMU_LDFLAGS': ' '.join(qemu_ldflags)}
summary_info += {'profiler': get_option('profiler')}