meson: prepare move of QEMU_CFLAGS to meson
Clean up the handling of compiler flags in meson.build, splitting the general flags that should be included in subprojects as well, from warning flags that only apply to QEMU itself. The two were mixed in both configure tests and meson tests. This split makes it easier to move the compiler tests piecewise from configure to Meson. Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
6002711c66
commit
d67212d47f
53
meson.build
53
meson.build
@ -190,10 +190,23 @@ endif
|
|||||||
# Compiler flags #
|
# 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_objcflags = config_host['QEMU_OBJCFLAGS'].split()
|
||||||
qemu_ldflags = config_host['QEMU_LDFLAGS'].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')
|
if get_option('prefer_static')
|
||||||
qemu_ldflags += get_option('b_pie') ? '-static-pie' : '-static'
|
qemu_ldflags += get_option('b_pie') ? '-static-pie' : '-static'
|
||||||
endif
|
endif
|
||||||
@ -207,10 +220,9 @@ if targetos == 'windows'
|
|||||||
qemu_ldflags += cc.get_supported_link_arguments('-Wl,--dynamicbase', '-Wl,--high-entropy-va')
|
qemu_ldflags += cc.get_supported_link_arguments('-Wl,--dynamicbase', '-Wl,--high-entropy-va')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if get_option('gprof')
|
# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
|
||||||
qemu_cflags += ['-p']
|
if targetos != 'sunos' and not config_host.has_key('CONFIG_TSAN')
|
||||||
qemu_objcflags += ['-p']
|
qemu_ldflags += cc.get_supported_link_arguments('-Wl,--warn-common')
|
||||||
qemu_ldflags += ['-p']
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Specify linker-script with add_project_link_arguments so that it is not placed
|
# 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',
|
name: '-fsanitize-coverage-allowlist=/dev/null',
|
||||||
args: ['-fsanitize-coverage-allowlist=/dev/null',
|
args: ['-fsanitize-coverage-allowlist=/dev/null',
|
||||||
'-fsanitize-coverage=trace-pc'] )
|
'-fsanitize-coverage=trace-pc'] )
|
||||||
add_global_arguments('-fsanitize-coverage-allowlist=instrumentation-filter',
|
qemu_common_flags += ['-fsanitize-coverage-allowlist=instrumentation-filter']
|
||||||
native: false, language: all_languages)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if get_option('fuzzing_engine') == ''
|
if get_option('fuzzing_engine') == ''
|
||||||
@ -235,10 +246,8 @@ if get_option('fuzzing')
|
|||||||
# compiled code. To build non-fuzzer binaries with --enable-fuzzing, link
|
# compiled code. To build non-fuzzer binaries with --enable-fuzzing, link
|
||||||
# everything with fsanitize=fuzzer-no-link. Otherwise, the linker will be
|
# everything with fsanitize=fuzzer-no-link. Otherwise, the linker will be
|
||||||
# unable to bind the fuzzer-related callbacks added by instrumentation.
|
# unable to bind the fuzzer-related callbacks added by instrumentation.
|
||||||
add_global_arguments('-fsanitize=fuzzer-no-link',
|
qemu_common_flags += ['-fsanitize=fuzzer-no-link']
|
||||||
native: false, language: all_languages)
|
qemu_ldflags += ['-fsanitize=fuzzer-no-link']
|
||||||
add_global_link_arguments('-fsanitize=fuzzer-no-link',
|
|
||||||
native: false, language: all_languages)
|
|
||||||
# For the actual fuzzer binaries, we need to link against the libfuzzer
|
# For the actual fuzzer binaries, we need to link against the libfuzzer
|
||||||
# library. They need to be configurable, to support OSS-Fuzz
|
# library. They need to be configurable, to support OSS-Fuzz
|
||||||
fuzz_exe_ldflags = ['-fsanitize=fuzzer']
|
fuzz_exe_ldflags = ['-fsanitize=fuzzer']
|
||||||
@ -249,6 +258,9 @@ if get_option('fuzzing')
|
|||||||
endif
|
endif
|
||||||
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.
|
# Check that the C++ compiler exists and works with the C compiler.
|
||||||
link_language = 'c'
|
link_language = 'c'
|
||||||
linker = cc
|
linker = cc
|
||||||
@ -272,16 +284,9 @@ if 'cpp' in all_languages
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
|
add_project_arguments(qemu_cflags, native: false, language: 'c')
|
||||||
if targetos != 'sunos' and not config_host.has_key('CONFIG_TSAN')
|
add_project_arguments(qemu_cxxflags, native: false, language: 'cpp')
|
||||||
qemu_ldflags += linker.get_supported_link_arguments('-Wl,--warn-common')
|
add_project_arguments(qemu_objcflags, native: false, language: 'objc')
|
||||||
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')
|
|
||||||
if targetos == 'linux'
|
if targetos == 'linux'
|
||||||
add_project_arguments('-isystem', meson.current_source_dir() / 'linux-headers',
|
add_project_arguments('-isystem', meson.current_source_dir() / 'linux-headers',
|
||||||
'-isystem', 'linux-headers',
|
'-isystem', 'linux-headers',
|
||||||
@ -3865,12 +3870,12 @@ link_args = get_option(link_language + '_link_args')
|
|||||||
if link_args.length() > 0
|
if link_args.length() > 0
|
||||||
summary_info += {'LDFLAGS': ' '.join(link_args)}
|
summary_info += {'LDFLAGS': ' '.join(link_args)}
|
||||||
endif
|
endif
|
||||||
summary_info += {'QEMU_CFLAGS': ' '.join(qemu_cflags)}
|
summary_info += {'QEMU_CFLAGS': ' '.join(qemu_common_flags + qemu_cflags)}
|
||||||
if 'cpp' in all_languages
|
if 'cpp' in all_languages
|
||||||
summary_info += {'QEMU_CXXFLAGS': ' '.join(qemu_cxxflags)}
|
summary_info += {'QEMU_CXXFLAGS': ' '.join(qemu_common_flags + qemu_cxxflags)}
|
||||||
endif
|
endif
|
||||||
if 'objc' in all_languages
|
if 'objc' in all_languages
|
||||||
summary_info += {'QEMU_OBJCFLAGS': ' '.join(qemu_objcflags)}
|
summary_info += {'QEMU_OBJCFLAGS': ' '.join(qemu_common_flags + qemu_objcflags)}
|
||||||
endif
|
endif
|
||||||
summary_info += {'QEMU_LDFLAGS': ' '.join(qemu_ldflags)}
|
summary_info += {'QEMU_LDFLAGS': ' '.join(qemu_ldflags)}
|
||||||
summary_info += {'profiler': get_option('profiler')}
|
summary_info += {'profiler': get_option('profiler')}
|
||||||
|
Loading…
Reference in New Issue
Block a user