* Meson conversions + introspection-based command line parser
-----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmFn4ZoUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroPaLgf+Lt95rOLXIdfdTIk/aND8BvneLT+M ARA/ARKJt5VYqEQDHejtzYaeyUyd+gpT8PtTWTLtEmzqRcpQ+cmvVYsieoLqvCMG soYeR6btwMIzaZip9BRFsor2veYiPpKK69aVGOlkBNTHA2dbUD2Pie1AB6rawZgk 36PJKopoZ+jPVQmAyNm0kPP5LJe+nzjSBiD/TTUREv5Ed4drAaHhdKJHYeCfh5vI nBe+cK4GtZ88NSJmjWYT545z0kN6N1aa2y/fLl2uq6TSKoQaqg5Da9Qlh4wu0ej9 LPlOP/6JetBTiA/4C9u1vBDsxaDxvKgtrJLzX8MUUbeGL3QAiQKLmrjcsQ== =Amz9 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging * Meson conversions + introspection-based command line parser # gpg: Signature made Thu 14 Oct 2021 12:51:54 AM PDT # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] * remotes/bonzini/tags/for-upstream: (26 commits) configure: automatically parse command line for meson -D options meson-buildoptions: include list of tracing backends configure: prepare for auto-generated option parsing configure: accept "internal" for --enable-capstone/slirp/fdt configure: remove deprecated --{enable, disable}-git-update configure, meson: move more compiler checks to Meson configure: remove obsolete Solaris ar check configure, meson: move Spice configure handling to meson configure, meson: move netmap detection to meson configure, meson: move vde detection to meson configure, meson: move libaio check to meson.build configure, meson: move pthread_setname_np checks to Meson configure, meson: move remaining HAVE_* compiler tests to Meson meson: HAVE_GDB_BIN is not used by C code configure, meson: remove CONFIG_GCOV from config-host.mak configure, meson: get HOST_WORDS_BIGENDIAN via the machine object configure, meson: move CONFIG_HOST_DSOSUF to Meson trace: move configuration from configure to Meson trace: simple: pass trace_file unmodified to config-host.h configure, meson: move fuzzing configuration to Meson ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
4d1a525dfa
@ -41,3 +41,7 @@ config PVRDMA
|
||||
config MULTIPROCESS_ALLOWED
|
||||
bool
|
||||
imply MULTIPROCESS
|
||||
|
||||
config FUZZ
|
||||
bool
|
||||
select SPARSE_MEM
|
||||
|
8
Makefile
8
Makefile
@ -87,7 +87,7 @@ x := $(shell rm -rf meson-private meson-info meson-logs)
|
||||
endif
|
||||
|
||||
# 1. ensure config-host.mak is up-to-date
|
||||
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/pc-bios $(SRC_PATH)/VERSION
|
||||
config-host.mak: $(SRC_PATH)/configure $(SRC_PATH)/scripts/meson-buildoptions.sh $(SRC_PATH)/pc-bios $(SRC_PATH)/VERSION
|
||||
@echo config-host.mak is out-of-date, running configure
|
||||
@if test -f meson-private/coredata.dat; then \
|
||||
./config.status --skip-meson; \
|
||||
@ -124,6 +124,12 @@ ifneq ($(MESON),)
|
||||
Makefile.mtest: build.ninja scripts/mtest2make.py
|
||||
$(MESON) introspect --targets --tests --benchmarks | $(PYTHON) scripts/mtest2make.py > $@
|
||||
-include Makefile.mtest
|
||||
|
||||
.PHONY: update-buildoptions
|
||||
all update-buildoptions: $(SRC_PATH)/scripts/meson-buildoptions.sh
|
||||
$(SRC_PATH)/scripts/meson-buildoptions.sh: $(SRC_PATH)/meson_options.txt
|
||||
$(MESON) introspect --buildoptions $(SRC_PATH)/meson.build | $(PYTHON) \
|
||||
scripts/meson-buildoptions.py > $@.tmp && mv $@.tmp $@
|
||||
endif
|
||||
|
||||
# 4. Rules to bridge to other makefiles
|
||||
|
@ -7,23 +7,22 @@ softmmu_ss.add(files(
|
||||
'wavcapture.c',
|
||||
))
|
||||
|
||||
softmmu_ss.add(when: [coreaudio, 'CONFIG_AUDIO_COREAUDIO'], if_true: files('coreaudio.c'))
|
||||
softmmu_ss.add(when: [dsound, 'CONFIG_AUDIO_DSOUND'], if_true: files('dsoundaudio.c'))
|
||||
softmmu_ss.add(when: ['CONFIG_AUDIO_WIN_INT'], if_true: files('audio_win_int.c'))
|
||||
softmmu_ss.add(when: coreaudio, if_true: files('coreaudio.c'))
|
||||
softmmu_ss.add(when: dsound, if_true: files('dsoundaudio.c', 'audio_win_int.c'))
|
||||
|
||||
audio_modules = {}
|
||||
foreach m : [
|
||||
['CONFIG_AUDIO_ALSA', 'alsa', alsa, 'alsaaudio.c'],
|
||||
['CONFIG_AUDIO_OSS', 'oss', oss, 'ossaudio.c'],
|
||||
['CONFIG_AUDIO_PA', 'pa', pulse, 'paaudio.c'],
|
||||
['CONFIG_AUDIO_SDL', 'sdl', sdl, 'sdlaudio.c'],
|
||||
['CONFIG_AUDIO_JACK', 'jack', jack, 'jackaudio.c'],
|
||||
['CONFIG_SPICE', 'spice', spice, 'spiceaudio.c']
|
||||
['alsa', alsa, files('alsaaudio.c')],
|
||||
['oss', oss, files('ossaudio.c')],
|
||||
['pa', pulse, files('paaudio.c')],
|
||||
['sdl', sdl, files('sdlaudio.c')],
|
||||
['jack', jack, files('jackaudio.c')],
|
||||
['spice', spice, files('spiceaudio.c')]
|
||||
]
|
||||
if config_host.has_key(m[0])
|
||||
if m[1].found()
|
||||
module_ss = ss.source_set()
|
||||
module_ss.add(when: m[2], if_true: files(m[3]))
|
||||
audio_modules += {m[1] : module_ss}
|
||||
module_ss.add(m[1], m[2])
|
||||
audio_modules += {m[0] : module_ss}
|
||||
endif
|
||||
endforeach
|
||||
|
||||
|
@ -65,7 +65,7 @@ block_ss.add(when: 'CONFIG_POSIX', if_true: [files('file-posix.c'), coref, iokit
|
||||
block_ss.add(when: libiscsi, if_true: files('iscsi-opts.c'))
|
||||
block_ss.add(when: 'CONFIG_LINUX', if_true: files('nvme.c'))
|
||||
block_ss.add(when: 'CONFIG_REPLICATION', if_true: files('replication.c'))
|
||||
block_ss.add(when: ['CONFIG_LINUX_AIO', libaio], if_true: files('linux-aio.c'))
|
||||
block_ss.add(when: libaio, if_true: files('linux-aio.c'))
|
||||
block_ss.add(when: linux_io_uring, if_true: files('io_uring.c'))
|
||||
|
||||
block_modules = {}
|
||||
|
@ -35,7 +35,7 @@ if brlapi.found()
|
||||
chardev_modules += { 'baum': module_ss }
|
||||
endif
|
||||
|
||||
if config_host.has_key('CONFIG_SPICE')
|
||||
if spice.found()
|
||||
module_ss = ss.source_set()
|
||||
module_ss.add(when: [spice], if_true: files('spice.c'))
|
||||
chardev_modules += { 'spice': module_ss }
|
||||
|
@ -42,73 +42,21 @@ perform a build:
|
||||
../configure
|
||||
make
|
||||
|
||||
For now, checks on the compilation environment are found in configure
|
||||
rather than meson.build, though this is expected to change. The command
|
||||
line is parsed in the configure script and, whenever needed, converted
|
||||
into the appropriate options to Meson.
|
||||
|
||||
New checks should be added to Meson, which usually comprises the
|
||||
following tasks:
|
||||
|
||||
- Add a Meson build option to meson_options.txt.
|
||||
|
||||
- Add support to the command line arg parser to handle any new
|
||||
``--enable-XXX``/``--disable-XXX`` flags required by the feature.
|
||||
|
||||
- Add information to the help output message to report on the new
|
||||
feature flag.
|
||||
|
||||
- Add code to perform the actual feature check.
|
||||
|
||||
- Add code to include the feature status in ``config-host.h``
|
||||
|
||||
- Add code to print out the feature status in the configure summary
|
||||
upon completion.
|
||||
|
||||
|
||||
Taking the probe for SDL2_Image as an example, we have the following pieces
|
||||
in configure::
|
||||
|
||||
# Initial variable state
|
||||
sdl_image=auto
|
||||
|
||||
..snip..
|
||||
|
||||
# Configure flag processing
|
||||
--disable-sdl-image) sdl_image=disabled
|
||||
;;
|
||||
--enable-sdl-image) sdl_image=enabled
|
||||
;;
|
||||
|
||||
..snip..
|
||||
|
||||
# Help output feature message
|
||||
sdl-image SDL Image support for icons
|
||||
|
||||
..snip..
|
||||
|
||||
# Meson invocation
|
||||
-Dsdl_image=$sdl_image
|
||||
|
||||
In meson_options.txt::
|
||||
|
||||
option('sdl', type : 'feature', value : 'auto',
|
||||
description: 'SDL Image support for icons')
|
||||
|
||||
In meson.build::
|
||||
|
||||
# Detect dependency
|
||||
sdl_image = dependency('SDL2_image', required: get_option('sdl_image'),
|
||||
method: 'pkg-config',
|
||||
kwargs: static_kwargs)
|
||||
|
||||
# Create config-host.h (if applicable)
|
||||
config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
|
||||
|
||||
# Summary
|
||||
summary_info += {'SDL image support': sdl_image.found()}
|
||||
The configure script automatically recognizes
|
||||
command line options for which a same-named Meson option exists;
|
||||
dashes in the command line are replaced with underscores.
|
||||
|
||||
Many checks on the compilation environment are still found in configure
|
||||
rather than `meson.build`, but new checks should be added directly to
|
||||
`meson.build`.
|
||||
|
||||
Patches are also welcome to move existing checks from the configure
|
||||
phase to `meson.build`. When doing so, ensure that `meson.build` does
|
||||
not use anymore the keys that you have removed from `config-host.mak`.
|
||||
Typically these will be replaced in `meson.build` by boolean variables,
|
||||
``get_option('optname')`` invocations, or `dep.found()` expressions.
|
||||
In general, the remaining checks have little or no interdependencies,
|
||||
so they can be moved one by one.
|
||||
|
||||
Helper functions
|
||||
----------------
|
||||
@ -335,6 +283,60 @@ new target, or enabling new devices or hardware for a particular
|
||||
system/userspace emulation target
|
||||
|
||||
|
||||
Adding checks
|
||||
-------------
|
||||
|
||||
New checks should be added to Meson. Compiler checks can be as simple as
|
||||
the following::
|
||||
|
||||
config_host_data.set('HAVE_BTRFS_H', cc.has_header('linux/btrfs.h'))
|
||||
|
||||
A more complex task such as adding a new dependency usually
|
||||
comprises the following tasks:
|
||||
|
||||
- Add a Meson build option to meson_options.txt.
|
||||
|
||||
- Add code to perform the actual feature check.
|
||||
|
||||
- Add code to include the feature status in `config-host.h`
|
||||
|
||||
- Add code to print out the feature status in the configure summary
|
||||
upon completion.
|
||||
|
||||
Taking the probe for SDL2_Image as an example, we have the following
|
||||
in ``meson_options.txt``::
|
||||
|
||||
option('sdl_image', type : 'feature', value : 'auto',
|
||||
description: 'SDL Image support for icons')
|
||||
|
||||
Unless the option was given a non-``auto`` value (on the configure
|
||||
command line), the detection code must be performed only if the
|
||||
dependency will be used::
|
||||
|
||||
sdl_image = not_found
|
||||
if not get_option('sdl_image').auto() or have_system
|
||||
sdl_image = dependency('SDL2_image', required: get_option('sdl_image'),
|
||||
method: 'pkg-config',
|
||||
static: enable_static)
|
||||
endif
|
||||
|
||||
This avoids warnings on static builds of user-mode emulators, for example.
|
||||
Most of the libraries used by system-mode emulators are not available for
|
||||
static linking.
|
||||
|
||||
The other supporting code is generally simple::
|
||||
|
||||
# Create config-host.h (if applicable)
|
||||
config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
|
||||
|
||||
# Summary
|
||||
summary_info += {'SDL image support': sdl_image.found()}
|
||||
|
||||
For the configure script to parse the new option, the
|
||||
``scripts/meson-buildoptions.sh`` file must be up-to-date; ``make
|
||||
update-buildoptions`` (or just `make`) will take care of updating it.
|
||||
|
||||
|
||||
Support scripts
|
||||
---------------
|
||||
|
||||
|
@ -57,7 +57,7 @@ if build_docs
|
||||
'qemu-nbd.8': (have_tools ? 'man8' : ''),
|
||||
'qemu-pr-helper.8': (have_tools ? 'man8' : ''),
|
||||
'qemu-storage-daemon.1': (have_tools ? 'man1' : ''),
|
||||
'qemu-trace-stap.1': (config_host.has_key('CONFIG_TRACE_SYSTEMTAP') ? 'man1' : ''),
|
||||
'qemu-trace-stap.1': (stap.found() ? 'man1' : ''),
|
||||
'virtfs-proxy-helper.1': (have_virtfs_proxy_helper ? 'man1' : ''),
|
||||
'virtiofsd.1': (have_virtiofsd ? 'man1' : ''),
|
||||
'qemu.1': 'man1',
|
||||
|
@ -8,3 +8,6 @@ config MEM_DEVICE
|
||||
config NVDIMM
|
||||
bool
|
||||
select MEM_DEVICE
|
||||
|
||||
config SPARSE_MEM
|
||||
bool
|
||||
|
@ -6,4 +6,4 @@ mem_ss.add(when: 'CONFIG_NVDIMM', if_true: files('nvdimm.c'))
|
||||
|
||||
softmmu_ss.add_all(when: 'CONFIG_MEM_DEVICE', if_true: mem_ss)
|
||||
|
||||
softmmu_ss.add(when: 'CONFIG_FUZZ', if_true: files('sparse-mem.c'))
|
||||
softmmu_ss.add(when: 'CONFIG_SPARSE_MEM', if_true: files('sparse-mem.c'))
|
||||
|
421
meson.build
421
meson.build
@ -111,16 +111,59 @@ foreach target : edk2_targets
|
||||
endif
|
||||
endforeach
|
||||
|
||||
dtrace = not_found
|
||||
stap = not_found
|
||||
if 'dtrace' in get_option('trace_backends')
|
||||
dtrace = find_program('dtrace', required: true)
|
||||
stap = find_program('stap', required: false)
|
||||
if stap.found()
|
||||
# Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
|
||||
# visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
|
||||
# instead. QEMU --enable-modules depends on this because the SystemTap
|
||||
# semaphores are linked into the main binary and not the module's shared
|
||||
# object.
|
||||
add_global_arguments('-DSTAP_SDT_V2',
|
||||
native: false, language: ['c', 'cpp', 'objc'])
|
||||
endif
|
||||
endif
|
||||
|
||||
##################
|
||||
# Compiler flags #
|
||||
##################
|
||||
|
||||
# Specify linker-script with add_project_link_arguments so that it is not placed
|
||||
# within a linker --start-group/--end-group pair
|
||||
if 'CONFIG_FUZZ' in config_host
|
||||
add_project_link_arguments(['-Wl,-T,',
|
||||
(meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')],
|
||||
if get_option('fuzzing')
|
||||
add_project_link_arguments(['-Wl,-T,',
|
||||
(meson.current_source_dir() / 'tests/qtest/fuzz/fork_fuzz.ld')],
|
||||
native: false, language: ['c', 'cpp', 'objc'])
|
||||
|
||||
# Specify a filter to only instrument code that is directly related to
|
||||
# virtual-devices.
|
||||
configure_file(output: 'instrumentation-filter',
|
||||
input: 'scripts/oss-fuzz/instrumentation-filter-template',
|
||||
copy: true)
|
||||
add_global_arguments(
|
||||
cc.get_supported_arguments('-fsanitize-coverage-allowlist=instrumentation-filter'),
|
||||
native: false, language: ['c', 'cpp', 'objc'])
|
||||
|
||||
if get_option('fuzzing_engine') == ''
|
||||
# Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
|
||||
# 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: ['c', 'cpp', 'objc'])
|
||||
add_global_link_arguments('-fsanitize=fuzzer-no-link',
|
||||
native: false, language: ['c', 'cpp', 'objc'])
|
||||
# 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']
|
||||
else
|
||||
# LIB_FUZZING_ENGINE was set; assume we are running on OSS-Fuzz, and
|
||||
# the needed CFLAGS have already been provided
|
||||
fuzz_exe_ldflags = get_option('fuzzing_engine').split()
|
||||
endif
|
||||
endif
|
||||
|
||||
add_global_arguments(config_host['QEMU_CFLAGS'].split(),
|
||||
@ -163,6 +206,30 @@ endif
|
||||
# Target-specific checks and dependencies #
|
||||
###########################################
|
||||
|
||||
if get_option('fuzzing') and get_option('fuzzing_engine') == '' and \
|
||||
not cc.links('''
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
|
||||
''',
|
||||
args: ['-Werror', '-fsanitize=fuzzer'])
|
||||
error('Your compiler does not support -fsanitize=fuzzer')
|
||||
endif
|
||||
|
||||
if 'ftrace' in get_option('trace_backends') and targetos != 'linux'
|
||||
error('ftrace is supported only on Linux')
|
||||
endif
|
||||
if 'syslog' in get_option('trace_backends') and not cc.compiles('''
|
||||
#include <syslog.h>
|
||||
int main(void) {
|
||||
openlog("qemu", LOG_PID, LOG_DAEMON);
|
||||
syslog(LOG_INFO, "configure");
|
||||
return 0;
|
||||
}''')
|
||||
error('syslog is not supported on this system')
|
||||
endif
|
||||
|
||||
if targetos != 'linux' and get_option('mpath').enabled()
|
||||
error('Multipath is supported only on Linux')
|
||||
endif
|
||||
@ -183,6 +250,7 @@ iokit = []
|
||||
emulator_link_args = []
|
||||
nvmm =not_found
|
||||
hvf = not_found
|
||||
host_dsosuf = '.so'
|
||||
if targetos == 'windows'
|
||||
socket = cc.find_library('ws2_32')
|
||||
winmm = cc.find_library('winmm')
|
||||
@ -191,9 +259,11 @@ if targetos == 'windows'
|
||||
version_res = win.compile_resources('version.rc',
|
||||
depend_files: files('pc-bios/qemu-nsis.ico'),
|
||||
include_directories: include_directories('.'))
|
||||
host_dsosuf = '.dll'
|
||||
elif targetos == 'darwin'
|
||||
coref = dependency('appleframeworks', modules: 'CoreFoundation')
|
||||
iokit = dependency('appleframeworks', modules: 'IOKit', required: false)
|
||||
host_dsosuf = '.dylib'
|
||||
elif targetos == 'sunos'
|
||||
socket = [cc.find_library('socket'),
|
||||
cc.find_library('nsl'),
|
||||
@ -321,17 +391,23 @@ if 'CONFIG_GIO' in config_host
|
||||
link_args: config_host['GIO_LIBS'].split())
|
||||
endif
|
||||
lttng = not_found
|
||||
if 'CONFIG_TRACE_UST' in config_host
|
||||
lttng = declare_dependency(link_args: config_host['LTTNG_UST_LIBS'].split())
|
||||
if 'ust' in get_option('trace_backends')
|
||||
lttng = dependency('lttng-ust', required: true, method: 'pkg-config',
|
||||
kwargs: static_kwargs)
|
||||
endif
|
||||
pixman = not_found
|
||||
if have_system or have_tools
|
||||
pixman = dependency('pixman-1', required: have_system, version:'>=0.21.8',
|
||||
method: 'pkg-config', kwargs: static_kwargs)
|
||||
endif
|
||||
libaio = cc.find_library('aio', required: false)
|
||||
zlib = dependency('zlib', required: true, kwargs: static_kwargs)
|
||||
|
||||
libaio = not_found
|
||||
if not get_option('linux_aio').auto() or have_block
|
||||
libaio = cc.find_library('aio', has_headers: ['libaio.h'],
|
||||
required: get_option('linux_aio'),
|
||||
kwargs: static_kwargs)
|
||||
endif
|
||||
linux_io_uring = not_found
|
||||
if not get_option('linux_io_uring').auto() or have_block
|
||||
linux_io_uring = dependency('liburing', required: get_option('linux_io_uring'),
|
||||
@ -424,35 +500,60 @@ else
|
||||
xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'),
|
||||
method: 'pkg-config', kwargs: static_kwargs)
|
||||
endif
|
||||
|
||||
vde = not_found
|
||||
if config_host.has_key('CONFIG_VDE')
|
||||
vde = declare_dependency(link_args: config_host['VDE_LIBS'].split())
|
||||
if not get_option('vde').auto() or have_system or have_tools
|
||||
vde = cc.find_library('vdeplug', has_headers: ['libvdeplug.h'],
|
||||
required: get_option('vde'),
|
||||
kwargs: static_kwargs)
|
||||
endif
|
||||
if vde.found() and not cc.links('''
|
||||
#include <libvdeplug.h>
|
||||
int main(void)
|
||||
{
|
||||
struct vde_open_args a = {0, 0, 0};
|
||||
char s[] = "";
|
||||
vde_open(s, s, &a);
|
||||
return 0;
|
||||
}''', dependencies: vde)
|
||||
vde = not_found
|
||||
if get_option('cap_ng').enabled()
|
||||
error('could not link libvdeplug')
|
||||
else
|
||||
warning('could not link libvdeplug, disabling')
|
||||
endif
|
||||
endif
|
||||
|
||||
pulse = not_found
|
||||
if 'CONFIG_LIBPULSE' in config_host
|
||||
pulse = declare_dependency(compile_args: config_host['PULSE_CFLAGS'].split(),
|
||||
link_args: config_host['PULSE_LIBS'].split())
|
||||
if not get_option('pa').auto() or (targetos == 'linux' and have_system)
|
||||
pulse = dependency('libpulse', required: get_option('pa'),
|
||||
method: 'pkg-config', kwargs: static_kwargs)
|
||||
endif
|
||||
alsa = not_found
|
||||
if 'CONFIG_ALSA' in config_host
|
||||
alsa = declare_dependency(compile_args: config_host['ALSA_CFLAGS'].split(),
|
||||
link_args: config_host['ALSA_LIBS'].split())
|
||||
if not get_option('alsa').auto() or (targetos == 'linux' and have_system)
|
||||
alsa = dependency('alsa', required: get_option('alsa'),
|
||||
method: 'pkg-config', kwargs: static_kwargs)
|
||||
endif
|
||||
jack = not_found
|
||||
if 'CONFIG_LIBJACK' in config_host
|
||||
jack = declare_dependency(link_args: config_host['JACK_LIBS'].split())
|
||||
if not get_option('jack').auto() or have_system
|
||||
jack = dependency('jack', required: get_option('jack'),
|
||||
method: 'pkg-config', kwargs: static_kwargs)
|
||||
endif
|
||||
|
||||
spice_protocol = not_found
|
||||
if not get_option('spice_protocol').auto() or have_system
|
||||
spice_protocol = dependency('spice-protocol', version: '>=0.12.3',
|
||||
required: get_option('spice_protocol'),
|
||||
method: 'pkg-config', kwargs: static_kwargs)
|
||||
endif
|
||||
spice = not_found
|
||||
spice_headers = not_found
|
||||
spice_protocol = not_found
|
||||
if 'CONFIG_SPICE' in config_host
|
||||
spice = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split(),
|
||||
link_args: config_host['SPICE_LIBS'].split())
|
||||
spice_headers = declare_dependency(compile_args: config_host['SPICE_CFLAGS'].split())
|
||||
endif
|
||||
if 'CONFIG_SPICE_PROTOCOL' in config_host
|
||||
spice_protocol = declare_dependency(compile_args: config_host['SPICE_PROTOCOL_CFLAGS'].split())
|
||||
if not get_option('spice').auto() or have_system
|
||||
spice = dependency('spice-server', version: '>=0.12.5',
|
||||
required: get_option('spice'),
|
||||
method: 'pkg-config', kwargs: static_kwargs)
|
||||
endif
|
||||
spice_headers = spice.partial_dependency(compile_args: true, includes: true)
|
||||
|
||||
rt = cc.find_library('rt', required: false)
|
||||
libdl = not_found
|
||||
if 'CONFIG_PLUGIN' in config_host
|
||||
@ -801,16 +902,59 @@ if liblzfse.found() and not cc.links('''
|
||||
endif
|
||||
|
||||
oss = not_found
|
||||
if 'CONFIG_AUDIO_OSS' in config_host
|
||||
oss = declare_dependency(link_args: config_host['OSS_LIBS'].split())
|
||||
if not get_option('oss').auto() or have_system
|
||||
if not cc.has_header('sys/soundcard.h')
|
||||
# not found
|
||||
elif targetos == 'netbsd'
|
||||
oss = cc.find_library('ossaudio', required: get_option('oss'),
|
||||
kwargs: static_kwargs)
|
||||
else
|
||||
oss = declare_dependency()
|
||||
endif
|
||||
|
||||
if not oss.found()
|
||||
if get_option('oss').enabled()
|
||||
error('OSS not found')
|
||||
else
|
||||
warning('OSS not found, disabling')
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
dsound = not_found
|
||||
if 'CONFIG_AUDIO_DSOUND' in config_host
|
||||
dsound = declare_dependency(link_args: config_host['DSOUND_LIBS'].split())
|
||||
if not get_option('dsound').auto() or (targetos == 'windows' and have_system)
|
||||
if cc.has_header('dsound.h')
|
||||
dsound = declare_dependency(link_args: ['-lole32', '-ldxguid'])
|
||||
endif
|
||||
|
||||
if not dsound.found()
|
||||
if get_option('dsound').enabled()
|
||||
error('DirectSound not found')
|
||||
else
|
||||
warning('DirectSound not found, disabling')
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
coreaudio = not_found
|
||||
if 'CONFIG_AUDIO_COREAUDIO' in config_host
|
||||
coreaudio = declare_dependency(link_args: config_host['COREAUDIO_LIBS'].split())
|
||||
if not get_option('coreaudio').auto() or (targetos == 'darwin' and have_system)
|
||||
coreaudio = dependency('appleframeworks', modules: 'CoreAudio',
|
||||
required: get_option('coreaudio'))
|
||||
if coreaudio.found() and not cc.links('''
|
||||
#include <CoreAudio/CoreAudio.h>
|
||||
int main(void)
|
||||
{
|
||||
return (int)AudioGetCurrentHostTime();
|
||||
}''')
|
||||
coreaudio = not_found
|
||||
endif
|
||||
|
||||
if not coreaudio.found()
|
||||
if get_option('coreaudio').enabled()
|
||||
error('CoreAudio not found')
|
||||
else
|
||||
warning('CoreAudio not found, disabling')
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
opengl = not_found
|
||||
@ -1156,6 +1300,49 @@ if libbpf.found() and not cc.links('''
|
||||
endif
|
||||
endif
|
||||
|
||||
#################
|
||||
# config-host.h #
|
||||
#################
|
||||
|
||||
audio_drivers_selected = []
|
||||
if have_system
|
||||
audio_drivers_available = {
|
||||
'alsa': alsa.found(),
|
||||
'coreaudio': coreaudio.found(),
|
||||
'dsound': dsound.found(),
|
||||
'jack': jack.found(),
|
||||
'oss': oss.found(),
|
||||
'pa': pulse.found(),
|
||||
'sdl': sdl.found(),
|
||||
}
|
||||
foreach k, v: audio_drivers_available
|
||||
config_host_data.set('CONFIG_AUDIO_' + k.to_upper(), v)
|
||||
endforeach
|
||||
|
||||
# Default to native drivers first, OSS second, SDL third
|
||||
audio_drivers_priority = \
|
||||
[ 'pa', 'coreaudio', 'dsound', 'oss' ] + \
|
||||
(targetos == 'linux' ? [] : [ 'sdl' ])
|
||||
audio_drivers_default = []
|
||||
foreach k: audio_drivers_priority
|
||||
if audio_drivers_available[k]
|
||||
audio_drivers_default += k
|
||||
endif
|
||||
endforeach
|
||||
|
||||
foreach k: get_option('audio_drv_list')
|
||||
if k == 'default'
|
||||
audio_drivers_selected += audio_drivers_default
|
||||
elif not audio_drivers_available[k]
|
||||
error('Audio driver "@0@" not available.'.format(k))
|
||||
else
|
||||
audio_drivers_selected += k
|
||||
endif
|
||||
endforeach
|
||||
endif
|
||||
config_host_data.set('CONFIG_AUDIO_DRIVERS',
|
||||
'"' + '", "'.join(audio_drivers_selected) + '", ')
|
||||
|
||||
if get_option('cfi')
|
||||
cfi_flags=[]
|
||||
# Check for dependency on LTO
|
||||
@ -1199,10 +1386,6 @@ endif
|
||||
have_host_block_device = (targetos != 'darwin' or
|
||||
cc.has_header('IOKit/storage/IOMedia.h'))
|
||||
|
||||
#################
|
||||
# config-host.h #
|
||||
#################
|
||||
|
||||
have_virtfs = (targetos == 'linux' and
|
||||
have_system and
|
||||
libattr.found() and
|
||||
@ -1224,6 +1407,11 @@ elif get_option('virtfs').disabled()
|
||||
have_virtfs = false
|
||||
endif
|
||||
|
||||
foreach k : get_option('trace_backends')
|
||||
config_host_data.set('CONFIG_TRACE_' + k.to_upper(), true)
|
||||
endforeach
|
||||
config_host_data.set_quoted('CONFIG_TRACE_FILE', get_option('trace_file'))
|
||||
|
||||
config_host_data.set_quoted('CONFIG_BINDIR', get_option('prefix') / get_option('bindir'))
|
||||
config_host_data.set_quoted('CONFIG_PREFIX', get_option('prefix'))
|
||||
config_host_data.set_quoted('CONFIG_QEMU_CONFDIR', get_option('prefix') / qemu_confdir)
|
||||
@ -1240,6 +1428,8 @@ config_host_data.set_quoted('CONFIG_SYSCONFDIR', get_option('prefix') / get_opti
|
||||
config_host_data.set('CONFIG_ATTR', libattr.found())
|
||||
config_host_data.set('CONFIG_BRLAPI', brlapi.found())
|
||||
config_host_data.set('CONFIG_COCOA', cocoa.found())
|
||||
config_host_data.set('CONFIG_FUZZ', get_option('fuzzing'))
|
||||
config_host_data.set('CONFIG_GCOV', get_option('b_coverage'))
|
||||
config_host_data.set('CONFIG_LIBUDEV', libudev.found())
|
||||
config_host_data.set('CONFIG_LZO', lzo.found())
|
||||
config_host_data.set('CONFIG_MPATH', mpathpersist.found())
|
||||
@ -1264,6 +1454,7 @@ config_host_data.set('CONFIG_EBPF', libbpf.found())
|
||||
config_host_data.set('CONFIG_LIBDAXCTL', libdaxctl.found())
|
||||
config_host_data.set('CONFIG_LIBISCSI', libiscsi.found())
|
||||
config_host_data.set('CONFIG_LIBNFS', libnfs.found())
|
||||
config_host_data.set('CONFIG_LINUX_AIO', libaio.found())
|
||||
config_host_data.set('CONFIG_LINUX_IO_URING', linux_io_uring.found())
|
||||
config_host_data.set('CONFIG_LIBPMEM', libpmem.found())
|
||||
config_host_data.set('CONFIG_RBD', rbd.found())
|
||||
@ -1272,6 +1463,7 @@ config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
|
||||
config_host_data.set('CONFIG_SECCOMP', seccomp.found())
|
||||
config_host_data.set('CONFIG_SNAPPY', snappy.found())
|
||||
config_host_data.set('CONFIG_USB_LIBUSB', libusb.found())
|
||||
config_host_data.set('CONFIG_VDE', vde.found())
|
||||
config_host_data.set('CONFIG_VHOST_USER_BLK_SERVER', have_vhost_user_blk_server)
|
||||
config_host_data.set('CONFIG_VNC', vnc.found())
|
||||
config_host_data.set('CONFIG_VNC_JPEG', jpeg.found())
|
||||
@ -1292,6 +1484,8 @@ config_host_data.set('CONFIG_STATX', has_statx)
|
||||
config_host_data.set('CONFIG_ZSTD', zstd.found())
|
||||
config_host_data.set('CONFIG_FUSE', fuse.found())
|
||||
config_host_data.set('CONFIG_FUSE_LSEEK', fuse_lseek.found())
|
||||
config_host_data.set('CONFIG_SPICE_PROTOCOL', spice_protocol.found())
|
||||
config_host_data.set('CONFIG_SPICE', spice.found())
|
||||
config_host_data.set('CONFIG_X11', x11.found())
|
||||
config_host_data.set('CONFIG_CFI', get_option('cfi'))
|
||||
config_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version()))
|
||||
@ -1299,7 +1493,9 @@ config_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0]
|
||||
config_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1])
|
||||
config_host_data.set('QEMU_VERSION_MICRO', meson.project_version().split('.')[2])
|
||||
|
||||
config_host_data.set_quoted('CONFIG_HOST_DSOSUF', host_dsosuf)
|
||||
config_host_data.set('HAVE_HOST_BLOCK_DEVICE', have_host_block_device)
|
||||
config_host_data.set('HOST_WORDS_BIGENDIAN', host_machine.endian() == 'big')
|
||||
|
||||
# has_header
|
||||
config_host_data.set('CONFIG_EPOLL', cc.has_header('sys/epoll.h'))
|
||||
@ -1354,6 +1550,8 @@ config_host_data.set('CONFIG_INOTIFY',
|
||||
cc.has_header_symbol('sys/inotify.h', 'inotify_init'))
|
||||
config_host_data.set('CONFIG_INOTIFY1',
|
||||
cc.has_header_symbol('sys/inotify.h', 'inotify_init1'))
|
||||
config_host_data.set('CONFIG_IOVEC',
|
||||
cc.has_header_symbol('sys/uio.h', 'struct iovec'))
|
||||
config_host_data.set('CONFIG_MACHINE_BSWAP_H',
|
||||
cc.has_header_symbol('machine/bswap.h', 'bswap32',
|
||||
prefix: '''#include <sys/endian.h>
|
||||
@ -1419,6 +1617,29 @@ config_host_data.set('CONFIG_POSIX_MADVISE', cc.links(gnu_source_prefix + '''
|
||||
#include <sys/mman.h>
|
||||
#include <stddef.h>
|
||||
int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }'''))
|
||||
|
||||
config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_W_TID', cc.links('''
|
||||
#include <pthread.h>
|
||||
|
||||
static void *f(void *p) { return NULL; }
|
||||
int main(void)
|
||||
{
|
||||
pthread_t thread;
|
||||
pthread_create(&thread, 0, f, 0);
|
||||
pthread_setname_np(thread, "QEMU");
|
||||
return 0;
|
||||
}''', dependencies: threads))
|
||||
config_host_data.set('CONFIG_PTHREAD_SETNAME_NP_WO_TID', cc.links('''
|
||||
#include <pthread.h>
|
||||
|
||||
static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
|
||||
int main(void)
|
||||
{
|
||||
pthread_t thread;
|
||||
pthread_create(&thread, 0, f, 0);
|
||||
return 0;
|
||||
}''', dependencies: threads))
|
||||
|
||||
config_host_data.set('CONFIG_SIGNALFD', cc.links(gnu_source_prefix + '''
|
||||
#include <sys/signalfd.h>
|
||||
#include <stddef.h>
|
||||
@ -1436,6 +1657,40 @@ config_host_data.set('CONFIG_SPLICE', cc.links(gnu_source_prefix + '''
|
||||
return 0;
|
||||
}'''))
|
||||
|
||||
config_host_data.set('HAVE_MLOCKALL', cc.links(gnu_source_prefix + '''
|
||||
#include <sys/mman.h>
|
||||
int main(int argc, char *argv[]) {
|
||||
return mlockall(MCL_FUTURE);
|
||||
}'''))
|
||||
|
||||
have_netmap = false
|
||||
if not get_option('netmap').disabled() and have_system
|
||||
have_netmap = cc.compiles('''
|
||||
#include <inttypes.h>
|
||||
#include <net/if.h>
|
||||
#include <net/netmap.h>
|
||||
#include <net/netmap_user.h>
|
||||
#if (NETMAP_API < 11) || (NETMAP_API > 15)
|
||||
#error
|
||||
#endif
|
||||
int main(void) { return 0; }''')
|
||||
if not have_netmap and get_option('netmap').enabled()
|
||||
error('Netmap headers not available')
|
||||
endif
|
||||
endif
|
||||
config_host_data.set('CONFIG_NETMAP', have_netmap)
|
||||
|
||||
# Work around a system header bug with some kernel/XFS header
|
||||
# versions where they both try to define 'struct fsxattr':
|
||||
# xfs headers will not try to redefine structs from linux headers
|
||||
# if this macro is set.
|
||||
config_host_data.set('HAVE_FSXATTR', cc.links('''
|
||||
#include <linux/fs.h>'
|
||||
struct fsxattr foo;
|
||||
int main(void) {
|
||||
return 0;
|
||||
}'''))
|
||||
|
||||
# Some versions of Mac OS X incorrectly define SIZE_MAX
|
||||
config_host_data.set('HAVE_BROKEN_SIZE_MAX', not cc.compiles('''
|
||||
#include <stdint.h>
|
||||
@ -1444,10 +1699,52 @@ config_host_data.set('HAVE_BROKEN_SIZE_MAX', not cc.compiles('''
|
||||
return printf("%zu", SIZE_MAX);
|
||||
}''', args: ['-Werror']))
|
||||
|
||||
# See if 64-bit atomic operations are supported.
|
||||
# Note that without __atomic builtins, we can only
|
||||
# assume atomic loads/stores max at pointer size.
|
||||
config_host_data.set('CONFIG_ATOMIC64', cc.links('''
|
||||
#include <stdint.h>
|
||||
int main(void)
|
||||
{
|
||||
uint64_t x = 0, y = 0;
|
||||
y = __atomic_load_n(&x, __ATOMIC_RELAXED);
|
||||
__atomic_store_n(&x, y, __ATOMIC_RELAXED);
|
||||
__atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
||||
__atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
|
||||
__atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
|
||||
return 0;
|
||||
}'''))
|
||||
|
||||
ignored = ['CONFIG_QEMU_INTERP_PREFIX'] # actually per-target
|
||||
arrays = ['CONFIG_AUDIO_DRIVERS', 'CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
|
||||
strings = ['HOST_DSOSUF', 'CONFIG_IASL']
|
||||
config_host_data.set('CONFIG_GETAUXVAL', cc.links(gnu_source_prefix + '''
|
||||
#include <sys/auxv.h>
|
||||
int main(void) {
|
||||
return getauxval(AT_HWCAP) == 0;
|
||||
}'''))
|
||||
|
||||
config_host_data.set('CONFIG_AF_VSOCK', cc.compiles(gnu_source_prefix + '''
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#if !defined(AF_VSOCK)
|
||||
# error missing AF_VSOCK flag
|
||||
#endif
|
||||
#include <linux/vm_sockets.h>
|
||||
int main(void) {
|
||||
int sock, ret;
|
||||
struct sockaddr_vm svm;
|
||||
socklen_t len = sizeof(svm);
|
||||
sock = socket(AF_VSOCK, SOCK_STREAM, 0);
|
||||
ret = getpeername(sock, (struct sockaddr *)&svm, &len);
|
||||
if ((ret == -1) && (errno == ENOTCONN)) {
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}'''))
|
||||
|
||||
ignored = ['CONFIG_QEMU_INTERP_PREFIX', # actually per-target
|
||||
'HAVE_GDB_BIN']
|
||||
arrays = ['CONFIG_BDRV_RW_WHITELIST', 'CONFIG_BDRV_RO_WHITELIST']
|
||||
strings = ['CONFIG_IASL']
|
||||
foreach k, v: config_host
|
||||
if ignored.contains(k)
|
||||
# do nothing
|
||||
@ -1459,11 +1756,8 @@ foreach k, v: config_host
|
||||
elif k == 'ARCH'
|
||||
config_host_data.set('HOST_' + v.to_upper(), 1)
|
||||
elif strings.contains(k)
|
||||
if not k.startswith('CONFIG_')
|
||||
k = 'CONFIG_' + k.to_upper()
|
||||
endif
|
||||
config_host_data.set_quoted(k, v)
|
||||
elif k.startswith('CONFIG_') or k.startswith('HAVE_') or k.startswith('HOST_')
|
||||
elif k.startswith('CONFIG_')
|
||||
config_host_data.set(k, v == 'y' ? 1 : v)
|
||||
endif
|
||||
endforeach
|
||||
@ -1514,8 +1808,9 @@ endif
|
||||
|
||||
have_ivshmem = config_host_data.get('CONFIG_EVENTFD')
|
||||
host_kconfig = \
|
||||
(get_option('fuzzing') ? ['CONFIG_FUZZ=y'] : []) + \
|
||||
('CONFIG_TPM' in config_host ? ['CONFIG_TPM=y'] : []) + \
|
||||
('CONFIG_SPICE' in config_host ? ['CONFIG_SPICE=y'] : []) + \
|
||||
(spice.found() ? ['CONFIG_SPICE=y'] : []) + \
|
||||
(have_ivshmem ? ['CONFIG_IVSHMEM=y'] : []) + \
|
||||
('CONFIG_OPENGL' in config_host ? ['CONFIG_OPENGL=y'] : []) + \
|
||||
(x11.found() ? ['CONFIG_X11=y'] : []) + \
|
||||
@ -1984,7 +2279,7 @@ qapi_gen_depends = [ meson.current_source_dir() / 'scripts/qapi/__init__.py',
|
||||
|
||||
tracetool = [
|
||||
python, files('scripts/tracetool.py'),
|
||||
'--backend=' + config_host['TRACE_BACKENDS']
|
||||
'--backend=' + ','.join(get_option('trace_backends'))
|
||||
]
|
||||
tracetool_depends = files(
|
||||
'scripts/tracetool/backend/log.py',
|
||||
@ -2638,7 +2933,7 @@ foreach target : target_dirs
|
||||
'dependencies': []
|
||||
}]
|
||||
endif
|
||||
if config_host.has_key('CONFIG_FUZZ')
|
||||
if get_option('fuzzing')
|
||||
specific_fuzz = specific_fuzz_ss.apply(config_target, strict: false)
|
||||
execs += [{
|
||||
'name': 'qemu-fuzz-' + target_name,
|
||||
@ -2701,7 +2996,7 @@ foreach target : target_dirs
|
||||
emulators += {exe['name']: emulator}
|
||||
endif
|
||||
|
||||
if 'CONFIG_TRACE_SYSTEMTAP' in config_host
|
||||
if stap.found()
|
||||
foreach stp: [
|
||||
{'ext': '.stp-build', 'fmt': 'stap', 'bin': meson.current_build_dir() / exe['name'], 'install': false},
|
||||
{'ext': '.stp', 'fmt': 'stap', 'bin': get_option('prefix') / get_option('bindir') / exe['name'], 'install': true},
|
||||
@ -2878,13 +3173,13 @@ summary_info += {'module support': config_host.has_key('CONFIG_MODULES')}
|
||||
if config_host.has_key('CONFIG_MODULES')
|
||||
summary_info += {'alternative module path': config_host.has_key('CONFIG_MODULE_UPGRADES')}
|
||||
endif
|
||||
summary_info += {'fuzzing support': config_host.has_key('CONFIG_FUZZ')}
|
||||
summary_info += {'fuzzing support': get_option('fuzzing')}
|
||||
if have_system
|
||||
summary_info += {'Audio drivers': config_host['CONFIG_AUDIO_DRIVERS']}
|
||||
summary_info += {'Audio drivers': ' '.join(audio_drivers_selected)}
|
||||
endif
|
||||
summary_info += {'Trace backends': config_host['TRACE_BACKENDS']}
|
||||
if config_host['TRACE_BACKENDS'].split().contains('simple')
|
||||
summary_info += {'Trace output file': config_host['CONFIG_TRACE_FILE'] + '-<pid>'}
|
||||
summary_info += {'Trace backends': ','.join(get_option('trace_backends'))}
|
||||
if 'simple' in get_option('trace_backends')
|
||||
summary_info += {'Trace output file': get_option('trace_file') + '-<pid>'}
|
||||
endif
|
||||
summary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')}
|
||||
summary_info += {'vhost-kernel support': config_host.has_key('CONFIG_VHOST_KERNEL')}
|
||||
@ -3068,10 +3363,22 @@ if vnc.found()
|
||||
summary_info += {'VNC JPEG support': jpeg}
|
||||
summary_info += {'VNC PNG support': png}
|
||||
endif
|
||||
if targetos not in ['darwin', 'haiku', 'windows']
|
||||
summary_info += {'OSS support': oss}
|
||||
elif targetos == 'darwin'
|
||||
summary_info += {'CoreAudio support': coreaudio}
|
||||
elif targetos == 'windows'
|
||||
summary_info += {'DirectSound support': dsound}
|
||||
endif
|
||||
if targetos == 'linux'
|
||||
summary_info += {'ALSA support': alsa}
|
||||
summary_info += {'PulseAudio support': pulse}
|
||||
endif
|
||||
summary_info += {'JACK support': jack}
|
||||
summary_info += {'brlapi support': brlapi}
|
||||
summary_info += {'vde support': config_host.has_key('CONFIG_VDE')}
|
||||
summary_info += {'netmap support': config_host.has_key('CONFIG_NETMAP')}
|
||||
summary_info += {'Linux AIO support': config_host.has_key('CONFIG_LINUX_AIO')}
|
||||
summary_info += {'vde support': vde}
|
||||
summary_info += {'netmap support': have_netmap}
|
||||
summary_info += {'Linux AIO support': libaio}
|
||||
summary_info += {'Linux io_uring support': linux_io_uring}
|
||||
summary_info += {'ATTR/XATTR support': libattr}
|
||||
summary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')}
|
||||
@ -3079,8 +3386,10 @@ summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
|
||||
summary_info += {'fdt support': fdt_opt == 'disabled' ? false : fdt_opt}
|
||||
summary_info += {'libcap-ng support': libcap_ng}
|
||||
summary_info += {'bpf support': libbpf}
|
||||
# TODO: add back protocol and server version
|
||||
summary_info += {'spice support': config_host.has_key('CONFIG_SPICE')}
|
||||
summary_info += {'spice protocol support': spice_protocol}
|
||||
if spice_protocol.found()
|
||||
summary_info += {' spice server support': spice}
|
||||
endif
|
||||
summary_info += {'rbd support': rbd}
|
||||
summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
|
||||
summary_info += {'smartcard support': cacard}
|
||||
|
@ -1,3 +1,7 @@
|
||||
# These options do not correspond to a --enable/--disable-* option
|
||||
# on the configure script command line. If you add more, list them in
|
||||
# scripts/meson-buildoptions.py's SKIP_OPTIONS constant too.
|
||||
|
||||
option('qemu_suffix', type : 'string', value: 'qemu',
|
||||
description: 'Suffix for QEMU data/modules/config directories (can be empty)')
|
||||
option('docdir', type : 'string', value : 'doc',
|
||||
@ -6,11 +10,24 @@ option('qemu_firmwarepath', type : 'string', value : '',
|
||||
description: 'search PATH for firmware files')
|
||||
option('sphinx_build', type : 'string', value : '',
|
||||
description: 'Use specified sphinx-build [$sphinx_build] for building document (default to be empty)')
|
||||
|
||||
option('default_devices', type : 'boolean', value : true,
|
||||
description: 'Include a default selection of devices in emulators')
|
||||
option('audio_drv_list', type: 'array', value: ['default'],
|
||||
choices: ['alsa', 'coreaudio', 'default', 'dsound', 'jack', 'oss', 'pa', 'sdl'],
|
||||
description: 'Set audio driver list')
|
||||
option('fuzzing_engine', type : 'string', value : '',
|
||||
description: 'fuzzing engine library for OSS-Fuzz')
|
||||
option('trace_file', type: 'string', value: 'trace',
|
||||
description: 'Trace file prefix for simple backend')
|
||||
|
||||
# Everything else can be set via --enable/--disable-* option
|
||||
# on the configure script command line. After adding an option
|
||||
# here make sure to run "make update-buildoptions".
|
||||
|
||||
option('docs', type : 'feature', value : 'auto',
|
||||
description: 'Documentations build support')
|
||||
option('fuzzing', type : 'boolean', value: false,
|
||||
description: 'build fuzzing targets')
|
||||
option('gettext', type : 'feature', value : 'auto',
|
||||
description: 'Localization of the GTK+ user interface')
|
||||
option('install_blobs', type : 'boolean', value : true,
|
||||
@ -94,6 +111,8 @@ option('libusb', type : 'feature', value : 'auto',
|
||||
description: 'libusb support for USB passthrough')
|
||||
option('libxml2', type : 'feature', value : 'auto',
|
||||
description: 'libxml2 support for Parallels image format')
|
||||
option('linux_aio', type : 'feature', value : 'auto',
|
||||
description: 'Linux AIO support')
|
||||
option('linux_io_uring', type : 'feature', value : 'auto',
|
||||
description: 'Linux io_uring support')
|
||||
option('lzfse', type : 'feature', value : 'auto',
|
||||
@ -114,10 +133,18 @@ option('smartcard', type : 'feature', value : 'auto',
|
||||
description: 'CA smartcard emulation support')
|
||||
option('snappy', type : 'feature', value : 'auto',
|
||||
description: 'snappy compression support')
|
||||
option('spice', type : 'feature', value : 'auto',
|
||||
description: 'Spice server support')
|
||||
option('spice_protocol', type : 'feature', value : 'auto',
|
||||
description: 'Spice protocol support')
|
||||
option('u2f', type : 'feature', value : 'auto',
|
||||
description: 'U2F emulation support')
|
||||
option('usb_redir', type : 'feature', value : 'auto',
|
||||
description: 'libusbredir support')
|
||||
option('netmap', type : 'feature', value : 'auto',
|
||||
description: 'netmap network backend support')
|
||||
option('vde', type : 'feature', value : 'auto',
|
||||
description: 'vde network backend support')
|
||||
option('virglrenderer', type : 'feature', value : 'auto',
|
||||
description: 'virgl rendering support')
|
||||
option('vnc', type : 'feature', value : 'auto',
|
||||
@ -139,6 +166,23 @@ option('fuse', type: 'feature', value: 'auto',
|
||||
option('fuse_lseek', type : 'feature', value : 'auto',
|
||||
description: 'SEEK_HOLE/SEEK_DATA support for FUSE exports')
|
||||
|
||||
option('trace_backends', type: 'array', value: ['log'],
|
||||
choices: ['dtrace', 'ftrace', 'log', 'nop', 'simple', 'syslog', 'ust'],
|
||||
description: 'Set available tracing backends')
|
||||
|
||||
option('alsa', type: 'feature', value: 'auto',
|
||||
description: 'ALSA sound support')
|
||||
option('coreaudio', type: 'feature', value: 'auto',
|
||||
description: 'CoreAudio sound support')
|
||||
option('dsound', type: 'feature', value: 'auto',
|
||||
description: 'DirectSound sound support')
|
||||
option('jack', type: 'feature', value: 'auto',
|
||||
description: 'JACK sound support')
|
||||
option('oss', type: 'feature', value: 'auto',
|
||||
description: 'OSS sound support')
|
||||
option('pa', type: 'feature', value: 'auto',
|
||||
description: 'PulseAudio sound support')
|
||||
|
||||
option('vhost_user_blk_server', type: 'feature', value: 'auto',
|
||||
description: 'build vhost-user-blk server')
|
||||
option('virtfs', type: 'feature', value: 'auto',
|
||||
|
@ -20,8 +20,10 @@ softmmu_ss.add(when: 'CONFIG_TCG', if_true: files('filter-replay.c'))
|
||||
|
||||
softmmu_ss.add(when: 'CONFIG_L2TPV3', if_true: files('l2tpv3.c'))
|
||||
softmmu_ss.add(when: slirp, if_true: files('slirp.c'))
|
||||
softmmu_ss.add(when: ['CONFIG_VDE', vde], if_true: files('vde.c'))
|
||||
softmmu_ss.add(when: 'CONFIG_NETMAP', if_true: files('netmap.c'))
|
||||
softmmu_ss.add(when: vde, if_true: files('vde.c'))
|
||||
if have_netmap
|
||||
softmmu_ss.add(files('netmap.c'))
|
||||
endif
|
||||
vhost_user_ss = ss.source_set()
|
||||
vhost_user_ss.add(when: 'CONFIG_VIRTIO_NET', if_true: files('vhost-user.c'), if_false: files('vhost-user-stub.c'))
|
||||
softmmu_ss.add_all(when: 'CONFIG_VHOST_NET_USER', if_true: vhost_user_ss)
|
||||
|
172
scripts/meson-buildoptions.py
Executable file
172
scripts/meson-buildoptions.py
Executable file
@ -0,0 +1,172 @@
|
||||
#! /usr/bin/env python3
|
||||
|
||||
# Generate configure command line options handling code, based on Meson's
|
||||
# user build options introspection data
|
||||
#
|
||||
# Copyright (C) 2021 Red Hat, Inc.
|
||||
#
|
||||
# Author: Paolo Bonzini <pbonzini@redhat.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import json
|
||||
import textwrap
|
||||
import shlex
|
||||
import sys
|
||||
|
||||
SKIP_OPTIONS = {
|
||||
"audio_drv_list",
|
||||
"default_devices",
|
||||
"docdir",
|
||||
"fuzzing_engine",
|
||||
"qemu_firmwarepath",
|
||||
"qemu_suffix",
|
||||
"sphinx_build",
|
||||
"trace_file",
|
||||
}
|
||||
|
||||
LINE_WIDTH = 76
|
||||
|
||||
|
||||
# Convert the default value of an option to the string used in
|
||||
# the help message
|
||||
def value_to_help(value):
|
||||
if isinstance(value, list):
|
||||
return ",".join(value)
|
||||
if isinstance(value, bool):
|
||||
return "enabled" if value else "disabled"
|
||||
return str(value)
|
||||
|
||||
|
||||
def wrap(left, text, indent):
|
||||
spaces = " " * indent
|
||||
if len(left) >= indent:
|
||||
yield left
|
||||
left = spaces
|
||||
else:
|
||||
left = (left + spaces)[0:indent]
|
||||
yield from textwrap.wrap(
|
||||
text, width=LINE_WIDTH, initial_indent=left, subsequent_indent=spaces
|
||||
)
|
||||
|
||||
|
||||
def sh_print(line=""):
|
||||
print(' printf "%s\\n"', shlex.quote(line))
|
||||
|
||||
|
||||
def help_line(left, opt, indent, long):
|
||||
right = f'{opt["description"]}'
|
||||
if long:
|
||||
value = value_to_help(opt["value"])
|
||||
if value != "auto":
|
||||
right += f" [{value}]"
|
||||
if "choices" in opt and long:
|
||||
choices = "/".join(sorted(opt["choices"]))
|
||||
right += f" (choices: {choices})"
|
||||
for x in wrap(" " + left, right, indent):
|
||||
sh_print(x)
|
||||
|
||||
|
||||
# Return whether the option (a dictionary) can be used with
|
||||
# arguments. Booleans can never be used with arguments;
|
||||
# combos allow an argument only if they accept other values
|
||||
# than "auto", "enabled", and "disabled".
|
||||
def allow_arg(opt):
|
||||
if opt["type"] == "boolean":
|
||||
return False
|
||||
if opt["type"] != "combo":
|
||||
return True
|
||||
return not (set(opt["choices"]) <= {"auto", "disabled", "enabled"})
|
||||
|
||||
|
||||
def load_options(json):
|
||||
json = [
|
||||
x
|
||||
for x in json
|
||||
if x["section"] == "user"
|
||||
and ":" not in x["name"]
|
||||
and x["name"] not in SKIP_OPTIONS
|
||||
]
|
||||
return sorted(json, key=lambda x: x["name"])
|
||||
|
||||
|
||||
def print_help(options):
|
||||
print("meson_options_help() {")
|
||||
for opt in options:
|
||||
key = opt["name"].replace("_", "-")
|
||||
# The first section includes options that have an arguments,
|
||||
# and booleans (i.e., only one of enable/disable makes sense)
|
||||
if opt["type"] == "boolean":
|
||||
left = f"--disable-{key}" if opt["value"] else f"--enable-{key}"
|
||||
help_line(left, opt, 27, False)
|
||||
elif allow_arg(opt):
|
||||
if opt["type"] == "combo" and "enabled" in opt["choices"]:
|
||||
left = f"--enable-{key}[=CHOICE]"
|
||||
else:
|
||||
left = f"--enable-{key}=CHOICE"
|
||||
help_line(left, opt, 27, True)
|
||||
|
||||
sh_print()
|
||||
sh_print("Optional features, enabled with --enable-FEATURE and")
|
||||
sh_print("disabled with --disable-FEATURE, default is enabled if available")
|
||||
sh_print("(unless built with --without-default-features):")
|
||||
sh_print()
|
||||
for opt in options:
|
||||
key = opt["name"].replace("_", "-")
|
||||
if opt["type"] != "boolean" and not allow_arg(opt):
|
||||
help_line(key, opt, 18, False)
|
||||
print("}")
|
||||
|
||||
|
||||
def print_parse(options):
|
||||
print("_meson_option_parse() {")
|
||||
print(" case $1 in")
|
||||
for opt in options:
|
||||
key = opt["name"].replace("_", "-")
|
||||
name = opt["name"]
|
||||
if opt["type"] == "boolean":
|
||||
print(f' --enable-{key}) printf "%s" -D{name}=true ;;')
|
||||
print(f' --disable-{key}) printf "%s" -D{name}=false ;;')
|
||||
else:
|
||||
if opt["type"] == "combo" and "enabled" in opt["choices"]:
|
||||
print(f' --enable-{key}) printf "%s" -D{name}=enabled ;;')
|
||||
if opt["type"] == "combo" and "disabled" in opt["choices"]:
|
||||
print(f' --disable-{key}) printf "%s" -D{name}=disabled ;;')
|
||||
if allow_arg(opt):
|
||||
print(f' --enable-{key}=*) quote_sh "-D{name}=$2" ;;')
|
||||
print(" *) return 1 ;;")
|
||||
print(" esac")
|
||||
print("}")
|
||||
|
||||
|
||||
def fixup_options(options):
|
||||
# Meson <= 0.60 does not include the choices in array options, fix that up
|
||||
for opt in options:
|
||||
if opt["name"] == "trace_backends":
|
||||
opt["choices"] = [
|
||||
"dtrace",
|
||||
"ftrace",
|
||||
"log",
|
||||
"nop",
|
||||
"simple",
|
||||
"syslog",
|
||||
"ust",
|
||||
]
|
||||
|
||||
|
||||
options = load_options(json.load(sys.stdin))
|
||||
fixup_options(options)
|
||||
print("# This file is generated by meson-buildoptions.py, do not edit!")
|
||||
print_help(options)
|
||||
print_parse(options)
|
270
scripts/meson-buildoptions.sh
Normal file
270
scripts/meson-buildoptions.sh
Normal file
@ -0,0 +1,270 @@
|
||||
# This file is generated by meson-buildoptions.py, do not edit!
|
||||
meson_options_help() {
|
||||
printf "%s\n" ' --enable-capstone[=CHOICE]'
|
||||
printf "%s\n" ' Whether and how to find the capstone library'
|
||||
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
|
||||
printf "%s\n" ' --enable-cfi Control-Flow Integrity (CFI)'
|
||||
printf "%s\n" ' --enable-cfi-debug Verbose errors in case of CFI violation'
|
||||
printf "%s\n" ' --enable-fdt[=CHOICE] Whether and how to find the libfdt library'
|
||||
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
|
||||
printf "%s\n" ' --enable-fuzzing build fuzzing targets'
|
||||
printf "%s\n" ' --disable-install-blobs install provided firmware blobs'
|
||||
printf "%s\n" ' --enable-malloc=CHOICE choose memory allocator to use [system] (choices:'
|
||||
printf "%s\n" ' jemalloc/system/tcmalloc)'
|
||||
printf "%s\n" ' --enable-slirp[=CHOICE] Whether and how to find the slirp library'
|
||||
printf "%s\n" ' (choices: auto/disabled/enabled/internal/system)'
|
||||
printf "%s\n" ' --enable-tcg-interpreter TCG with bytecode interpreter (experimental and'
|
||||
printf "%s\n" ' slow)'
|
||||
printf "%s\n" ' --enable-trace-backends=CHOICE'
|
||||
printf "%s\n" ' Set available tracing backends [log] (choices:'
|
||||
printf "%s\n" ' dtrace/ftrace/log/nop/simple/syslog/ust)'
|
||||
printf "%s\n" ''
|
||||
printf "%s\n" 'Optional features, enabled with --enable-FEATURE and'
|
||||
printf "%s\n" 'disabled with --disable-FEATURE, default is enabled if available'
|
||||
printf "%s\n" '(unless built with --without-default-features):'
|
||||
printf "%s\n" ''
|
||||
printf "%s\n" ' alsa ALSA sound support'
|
||||
printf "%s\n" ' attr attr/xattr support'
|
||||
printf "%s\n" ' auth-pam PAM access control'
|
||||
printf "%s\n" ' bpf eBPF support'
|
||||
printf "%s\n" ' brlapi brlapi character device driver'
|
||||
printf "%s\n" ' bzip2 bzip2 support for DMG images'
|
||||
printf "%s\n" ' cap-ng cap_ng support'
|
||||
printf "%s\n" ' cocoa Cocoa user interface (macOS only)'
|
||||
printf "%s\n" ' coreaudio CoreAudio sound support'
|
||||
printf "%s\n" ' curl CURL block device driver'
|
||||
printf "%s\n" ' curses curses UI'
|
||||
printf "%s\n" ' docs Documentations build support'
|
||||
printf "%s\n" ' dsound DirectSound sound support'
|
||||
printf "%s\n" ' fuse FUSE block device export'
|
||||
printf "%s\n" ' fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports'
|
||||
printf "%s\n" ' gcrypt libgcrypt cryptography support'
|
||||
printf "%s\n" ' gettext Localization of the GTK+ user interface'
|
||||
printf "%s\n" ' glusterfs Glusterfs block device driver'
|
||||
printf "%s\n" ' gnutls GNUTLS cryptography support'
|
||||
printf "%s\n" ' gtk GTK+ user interface'
|
||||
printf "%s\n" ' guest-agent-msi Build MSI package for the QEMU Guest Agent'
|
||||
printf "%s\n" ' hax HAX acceleration support'
|
||||
printf "%s\n" ' hvf HVF acceleration support'
|
||||
printf "%s\n" ' iconv Font glyph conversion support'
|
||||
printf "%s\n" ' jack JACK sound support'
|
||||
printf "%s\n" ' kvm KVM acceleration support'
|
||||
printf "%s\n" ' libdaxctl libdaxctl support'
|
||||
printf "%s\n" ' libiscsi libiscsi userspace initiator'
|
||||
printf "%s\n" ' libnfs libnfs block device driver'
|
||||
printf "%s\n" ' libpmem libpmem support'
|
||||
printf "%s\n" ' libudev Use libudev to enumerate host devices'
|
||||
printf "%s\n" ' libusb libusb support for USB passthrough'
|
||||
printf "%s\n" ' libxml2 libxml2 support for Parallels image format'
|
||||
printf "%s\n" ' linux-aio Linux AIO support'
|
||||
printf "%s\n" ' linux-io-uring Linux io_uring support'
|
||||
printf "%s\n" ' lzfse lzfse support for DMG images'
|
||||
printf "%s\n" ' lzo lzo compression support'
|
||||
printf "%s\n" ' malloc-trim enable libc malloc_trim() for memory optimization'
|
||||
printf "%s\n" ' mpath Multipath persistent reservation passthrough'
|
||||
printf "%s\n" ' multiprocess Out of process device emulation support'
|
||||
printf "%s\n" ' netmap netmap network backend support'
|
||||
printf "%s\n" ' nettle nettle cryptography support'
|
||||
printf "%s\n" ' nvmm NVMM acceleration support'
|
||||
printf "%s\n" ' oss OSS sound support'
|
||||
printf "%s\n" ' pa PulseAudio sound support'
|
||||
printf "%s\n" ' rbd Ceph block device driver'
|
||||
printf "%s\n" ' sdl SDL user interface'
|
||||
printf "%s\n" ' sdl-image SDL Image support for icons'
|
||||
printf "%s\n" ' seccomp seccomp support'
|
||||
printf "%s\n" ' smartcard CA smartcard emulation support'
|
||||
printf "%s\n" ' snappy snappy compression support'
|
||||
printf "%s\n" ' sparse sparse checker'
|
||||
printf "%s\n" ' spice Spice server support'
|
||||
printf "%s\n" ' spice-protocol Spice protocol support'
|
||||
printf "%s\n" ' tcg TCG support'
|
||||
printf "%s\n" ' u2f U2F emulation support'
|
||||
printf "%s\n" ' usb-redir libusbredir support'
|
||||
printf "%s\n" ' vde vde network backend support'
|
||||
printf "%s\n" ' vhost-user-blk-server'
|
||||
printf "%s\n" ' build vhost-user-blk server'
|
||||
printf "%s\n" ' virglrenderer virgl rendering support'
|
||||
printf "%s\n" ' virtfs virtio-9p support'
|
||||
printf "%s\n" ' virtiofsd build virtiofs daemon (virtiofsd)'
|
||||
printf "%s\n" ' vnc VNC server'
|
||||
printf "%s\n" ' vnc-jpeg JPEG lossy compression for VNC server'
|
||||
printf "%s\n" ' vnc-png PNG compression for VNC server'
|
||||
printf "%s\n" ' vnc-sasl SASL authentication for VNC server'
|
||||
printf "%s\n" ' vte vte support for the gtk UI'
|
||||
printf "%s\n" ' whpx WHPX acceleration support'
|
||||
printf "%s\n" ' xen Xen backend support'
|
||||
printf "%s\n" ' xen-pci-passthrough'
|
||||
printf "%s\n" ' Xen PCI passthrough support'
|
||||
printf "%s\n" ' xkbcommon xkbcommon support'
|
||||
printf "%s\n" ' zstd zstd compression support'
|
||||
}
|
||||
_meson_option_parse() {
|
||||
case $1 in
|
||||
--enable-alsa) printf "%s" -Dalsa=enabled ;;
|
||||
--disable-alsa) printf "%s" -Dalsa=disabled ;;
|
||||
--enable-attr) printf "%s" -Dattr=enabled ;;
|
||||
--disable-attr) printf "%s" -Dattr=disabled ;;
|
||||
--enable-auth-pam) printf "%s" -Dauth_pam=enabled ;;
|
||||
--disable-auth-pam) printf "%s" -Dauth_pam=disabled ;;
|
||||
--enable-bpf) printf "%s" -Dbpf=enabled ;;
|
||||
--disable-bpf) printf "%s" -Dbpf=disabled ;;
|
||||
--enable-brlapi) printf "%s" -Dbrlapi=enabled ;;
|
||||
--disable-brlapi) printf "%s" -Dbrlapi=disabled ;;
|
||||
--enable-bzip2) printf "%s" -Dbzip2=enabled ;;
|
||||
--disable-bzip2) printf "%s" -Dbzip2=disabled ;;
|
||||
--enable-cap-ng) printf "%s" -Dcap_ng=enabled ;;
|
||||
--disable-cap-ng) printf "%s" -Dcap_ng=disabled ;;
|
||||
--enable-capstone) printf "%s" -Dcapstone=enabled ;;
|
||||
--disable-capstone) printf "%s" -Dcapstone=disabled ;;
|
||||
--enable-capstone=*) quote_sh "-Dcapstone=$2" ;;
|
||||
--enable-cfi) printf "%s" -Dcfi=true ;;
|
||||
--disable-cfi) printf "%s" -Dcfi=false ;;
|
||||
--enable-cfi-debug) printf "%s" -Dcfi_debug=true ;;
|
||||
--disable-cfi-debug) printf "%s" -Dcfi_debug=false ;;
|
||||
--enable-cocoa) printf "%s" -Dcocoa=enabled ;;
|
||||
--disable-cocoa) printf "%s" -Dcocoa=disabled ;;
|
||||
--enable-coreaudio) printf "%s" -Dcoreaudio=enabled ;;
|
||||
--disable-coreaudio) printf "%s" -Dcoreaudio=disabled ;;
|
||||
--enable-curl) printf "%s" -Dcurl=enabled ;;
|
||||
--disable-curl) printf "%s" -Dcurl=disabled ;;
|
||||
--enable-curses) printf "%s" -Dcurses=enabled ;;
|
||||
--disable-curses) printf "%s" -Dcurses=disabled ;;
|
||||
--enable-docs) printf "%s" -Ddocs=enabled ;;
|
||||
--disable-docs) printf "%s" -Ddocs=disabled ;;
|
||||
--enable-dsound) printf "%s" -Ddsound=enabled ;;
|
||||
--disable-dsound) printf "%s" -Ddsound=disabled ;;
|
||||
--enable-fdt) printf "%s" -Dfdt=enabled ;;
|
||||
--disable-fdt) printf "%s" -Dfdt=disabled ;;
|
||||
--enable-fdt=*) quote_sh "-Dfdt=$2" ;;
|
||||
--enable-fuse) printf "%s" -Dfuse=enabled ;;
|
||||
--disable-fuse) printf "%s" -Dfuse=disabled ;;
|
||||
--enable-fuse-lseek) printf "%s" -Dfuse_lseek=enabled ;;
|
||||
--disable-fuse-lseek) printf "%s" -Dfuse_lseek=disabled ;;
|
||||
--enable-fuzzing) printf "%s" -Dfuzzing=true ;;
|
||||
--disable-fuzzing) printf "%s" -Dfuzzing=false ;;
|
||||
--enable-gcrypt) printf "%s" -Dgcrypt=enabled ;;
|
||||
--disable-gcrypt) printf "%s" -Dgcrypt=disabled ;;
|
||||
--enable-gettext) printf "%s" -Dgettext=enabled ;;
|
||||
--disable-gettext) printf "%s" -Dgettext=disabled ;;
|
||||
--enable-glusterfs) printf "%s" -Dglusterfs=enabled ;;
|
||||
--disable-glusterfs) printf "%s" -Dglusterfs=disabled ;;
|
||||
--enable-gnutls) printf "%s" -Dgnutls=enabled ;;
|
||||
--disable-gnutls) printf "%s" -Dgnutls=disabled ;;
|
||||
--enable-gtk) printf "%s" -Dgtk=enabled ;;
|
||||
--disable-gtk) printf "%s" -Dgtk=disabled ;;
|
||||
--enable-guest-agent-msi) printf "%s" -Dguest_agent_msi=enabled ;;
|
||||
--disable-guest-agent-msi) printf "%s" -Dguest_agent_msi=disabled ;;
|
||||
--enable-hax) printf "%s" -Dhax=enabled ;;
|
||||
--disable-hax) printf "%s" -Dhax=disabled ;;
|
||||
--enable-hvf) printf "%s" -Dhvf=enabled ;;
|
||||
--disable-hvf) printf "%s" -Dhvf=disabled ;;
|
||||
--enable-iconv) printf "%s" -Diconv=enabled ;;
|
||||
--disable-iconv) printf "%s" -Diconv=disabled ;;
|
||||
--enable-install-blobs) printf "%s" -Dinstall_blobs=true ;;
|
||||
--disable-install-blobs) printf "%s" -Dinstall_blobs=false ;;
|
||||
--enable-jack) printf "%s" -Djack=enabled ;;
|
||||
--disable-jack) printf "%s" -Djack=disabled ;;
|
||||
--enable-kvm) printf "%s" -Dkvm=enabled ;;
|
||||
--disable-kvm) printf "%s" -Dkvm=disabled ;;
|
||||
--enable-libdaxctl) printf "%s" -Dlibdaxctl=enabled ;;
|
||||
--disable-libdaxctl) printf "%s" -Dlibdaxctl=disabled ;;
|
||||
--enable-libiscsi) printf "%s" -Dlibiscsi=enabled ;;
|
||||
--disable-libiscsi) printf "%s" -Dlibiscsi=disabled ;;
|
||||
--enable-libnfs) printf "%s" -Dlibnfs=enabled ;;
|
||||
--disable-libnfs) printf "%s" -Dlibnfs=disabled ;;
|
||||
--enable-libpmem) printf "%s" -Dlibpmem=enabled ;;
|
||||
--disable-libpmem) printf "%s" -Dlibpmem=disabled ;;
|
||||
--enable-libudev) printf "%s" -Dlibudev=enabled ;;
|
||||
--disable-libudev) printf "%s" -Dlibudev=disabled ;;
|
||||
--enable-libusb) printf "%s" -Dlibusb=enabled ;;
|
||||
--disable-libusb) printf "%s" -Dlibusb=disabled ;;
|
||||
--enable-libxml2) printf "%s" -Dlibxml2=enabled ;;
|
||||
--disable-libxml2) printf "%s" -Dlibxml2=disabled ;;
|
||||
--enable-linux-aio) printf "%s" -Dlinux_aio=enabled ;;
|
||||
--disable-linux-aio) printf "%s" -Dlinux_aio=disabled ;;
|
||||
--enable-linux-io-uring) printf "%s" -Dlinux_io_uring=enabled ;;
|
||||
--disable-linux-io-uring) printf "%s" -Dlinux_io_uring=disabled ;;
|
||||
--enable-lzfse) printf "%s" -Dlzfse=enabled ;;
|
||||
--disable-lzfse) printf "%s" -Dlzfse=disabled ;;
|
||||
--enable-lzo) printf "%s" -Dlzo=enabled ;;
|
||||
--disable-lzo) printf "%s" -Dlzo=disabled ;;
|
||||
--enable-malloc=*) quote_sh "-Dmalloc=$2" ;;
|
||||
--enable-malloc-trim) printf "%s" -Dmalloc_trim=enabled ;;
|
||||
--disable-malloc-trim) printf "%s" -Dmalloc_trim=disabled ;;
|
||||
--enable-mpath) printf "%s" -Dmpath=enabled ;;
|
||||
--disable-mpath) printf "%s" -Dmpath=disabled ;;
|
||||
--enable-multiprocess) printf "%s" -Dmultiprocess=enabled ;;
|
||||
--disable-multiprocess) printf "%s" -Dmultiprocess=disabled ;;
|
||||
--enable-netmap) printf "%s" -Dnetmap=enabled ;;
|
||||
--disable-netmap) printf "%s" -Dnetmap=disabled ;;
|
||||
--enable-nettle) printf "%s" -Dnettle=enabled ;;
|
||||
--disable-nettle) printf "%s" -Dnettle=disabled ;;
|
||||
--enable-nvmm) printf "%s" -Dnvmm=enabled ;;
|
||||
--disable-nvmm) printf "%s" -Dnvmm=disabled ;;
|
||||
--enable-oss) printf "%s" -Doss=enabled ;;
|
||||
--disable-oss) printf "%s" -Doss=disabled ;;
|
||||
--enable-pa) printf "%s" -Dpa=enabled ;;
|
||||
--disable-pa) printf "%s" -Dpa=disabled ;;
|
||||
--enable-rbd) printf "%s" -Drbd=enabled ;;
|
||||
--disable-rbd) printf "%s" -Drbd=disabled ;;
|
||||
--enable-sdl) printf "%s" -Dsdl=enabled ;;
|
||||
--disable-sdl) printf "%s" -Dsdl=disabled ;;
|
||||
--enable-sdl-image) printf "%s" -Dsdl_image=enabled ;;
|
||||
--disable-sdl-image) printf "%s" -Dsdl_image=disabled ;;
|
||||
--enable-seccomp) printf "%s" -Dseccomp=enabled ;;
|
||||
--disable-seccomp) printf "%s" -Dseccomp=disabled ;;
|
||||
--enable-slirp) printf "%s" -Dslirp=enabled ;;
|
||||
--disable-slirp) printf "%s" -Dslirp=disabled ;;
|
||||
--enable-slirp=*) quote_sh "-Dslirp=$2" ;;
|
||||
--enable-smartcard) printf "%s" -Dsmartcard=enabled ;;
|
||||
--disable-smartcard) printf "%s" -Dsmartcard=disabled ;;
|
||||
--enable-snappy) printf "%s" -Dsnappy=enabled ;;
|
||||
--disable-snappy) printf "%s" -Dsnappy=disabled ;;
|
||||
--enable-sparse) printf "%s" -Dsparse=enabled ;;
|
||||
--disable-sparse) printf "%s" -Dsparse=disabled ;;
|
||||
--enable-spice) printf "%s" -Dspice=enabled ;;
|
||||
--disable-spice) printf "%s" -Dspice=disabled ;;
|
||||
--enable-spice-protocol) printf "%s" -Dspice_protocol=enabled ;;
|
||||
--disable-spice-protocol) printf "%s" -Dspice_protocol=disabled ;;
|
||||
--enable-tcg) printf "%s" -Dtcg=enabled ;;
|
||||
--disable-tcg) printf "%s" -Dtcg=disabled ;;
|
||||
--enable-tcg-interpreter) printf "%s" -Dtcg_interpreter=true ;;
|
||||
--disable-tcg-interpreter) printf "%s" -Dtcg_interpreter=false ;;
|
||||
--enable-trace-backends=*) quote_sh "-Dtrace_backends=$2" ;;
|
||||
--enable-u2f) printf "%s" -Du2f=enabled ;;
|
||||
--disable-u2f) printf "%s" -Du2f=disabled ;;
|
||||
--enable-usb-redir) printf "%s" -Dusb_redir=enabled ;;
|
||||
--disable-usb-redir) printf "%s" -Dusb_redir=disabled ;;
|
||||
--enable-vde) printf "%s" -Dvde=enabled ;;
|
||||
--disable-vde) printf "%s" -Dvde=disabled ;;
|
||||
--enable-vhost-user-blk-server) printf "%s" -Dvhost_user_blk_server=enabled ;;
|
||||
--disable-vhost-user-blk-server) printf "%s" -Dvhost_user_blk_server=disabled ;;
|
||||
--enable-virglrenderer) printf "%s" -Dvirglrenderer=enabled ;;
|
||||
--disable-virglrenderer) printf "%s" -Dvirglrenderer=disabled ;;
|
||||
--enable-virtfs) printf "%s" -Dvirtfs=enabled ;;
|
||||
--disable-virtfs) printf "%s" -Dvirtfs=disabled ;;
|
||||
--enable-virtiofsd) printf "%s" -Dvirtiofsd=enabled ;;
|
||||
--disable-virtiofsd) printf "%s" -Dvirtiofsd=disabled ;;
|
||||
--enable-vnc) printf "%s" -Dvnc=enabled ;;
|
||||
--disable-vnc) printf "%s" -Dvnc=disabled ;;
|
||||
--enable-vnc-jpeg) printf "%s" -Dvnc_jpeg=enabled ;;
|
||||
--disable-vnc-jpeg) printf "%s" -Dvnc_jpeg=disabled ;;
|
||||
--enable-vnc-png) printf "%s" -Dvnc_png=enabled ;;
|
||||
--disable-vnc-png) printf "%s" -Dvnc_png=disabled ;;
|
||||
--enable-vnc-sasl) printf "%s" -Dvnc_sasl=enabled ;;
|
||||
--disable-vnc-sasl) printf "%s" -Dvnc_sasl=disabled ;;
|
||||
--enable-vte) printf "%s" -Dvte=enabled ;;
|
||||
--disable-vte) printf "%s" -Dvte=disabled ;;
|
||||
--enable-whpx) printf "%s" -Dwhpx=enabled ;;
|
||||
--disable-whpx) printf "%s" -Dwhpx=disabled ;;
|
||||
--enable-xen) printf "%s" -Dxen=enabled ;;
|
||||
--disable-xen) printf "%s" -Dxen=disabled ;;
|
||||
--enable-xen-pci-passthrough) printf "%s" -Dxen_pci_passthrough=enabled ;;
|
||||
--disable-xen-pci-passthrough) printf "%s" -Dxen_pci_passthrough=disabled ;;
|
||||
--enable-xkbcommon) printf "%s" -Dxkbcommon=enabled ;;
|
||||
--disable-xkbcommon) printf "%s" -Dxkbcommon=disabled ;;
|
||||
--enable-zstd) printf "%s" -Dzstd=enabled ;;
|
||||
--disable-zstd) printf "%s" -Dzstd=disabled ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
if 'CONFIG_TRACE_SYSTEMTAP' in config_host
|
||||
if stap.found()
|
||||
install_data('qemu-trace-stap', install_dir: get_option('bindir'))
|
||||
endif
|
||||
|
@ -20,7 +20,9 @@ endif
|
||||
stub_ss.add(files('iothread-lock.c'))
|
||||
stub_ss.add(files('isa-bus.c'))
|
||||
stub_ss.add(files('is-daemonized.c'))
|
||||
stub_ss.add(when: 'CONFIG_LINUX_AIO', if_true: files('linux-aio.c'))
|
||||
if libaio.found()
|
||||
stub_ss.add(files('linux-aio.c'))
|
||||
endif
|
||||
stub_ss.add(files('migr-blocker.c'))
|
||||
stub_ss.add(files('module-opts.c'))
|
||||
stub_ss.add(files('monitor.c'))
|
||||
|
@ -1,3 +1,7 @@
|
||||
if not get_option('fuzzing')
|
||||
subdir_done()
|
||||
endif
|
||||
|
||||
specific_fuzz_ss.add(files('fuzz.c', 'fork_fuzz.c', 'qos_fuzz.c',
|
||||
'qtest_wrappers.c'), qos)
|
||||
|
||||
@ -9,7 +13,7 @@ specific_fuzz_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio_blk_fuzz.
|
||||
specific_fuzz_ss.add(files('generic_fuzz.c'))
|
||||
|
||||
fork_fuzz = declare_dependency(
|
||||
link_args: config_host['FUZZ_EXE_LDFLAGS'].split() +
|
||||
link_args: fuzz_exe_ldflags +
|
||||
['-Wl,-wrap,qtest_inb',
|
||||
'-Wl,-wrap,qtest_inw',
|
||||
'-Wl,-wrap,qtest_inl',
|
||||
|
@ -2,7 +2,6 @@
|
||||
specific_ss.add(files('control-target.c'))
|
||||
|
||||
trace_events_files = []
|
||||
dtrace = find_program('dtrace', required: 'CONFIG_TRACE_DTRACE' in config_host)
|
||||
foreach dir : [ '.' ] + trace_events_subdirs
|
||||
trace_events_file = meson.project_source_root() / dir / 'trace-events'
|
||||
trace_events_files += [ trace_events_file ]
|
||||
@ -21,7 +20,7 @@ foreach dir : [ '.' ] + trace_events_subdirs
|
||||
input: trace_events_file,
|
||||
command: [ tracetool, group, '--format=c', '@INPUT@', '@OUTPUT@' ],
|
||||
depend_files: tracetool_depends)
|
||||
if 'CONFIG_TRACE_UST' in config_host
|
||||
if 'ust' in get_option('trace_backends')
|
||||
trace_ust_h = custom_target(fmt.format('trace-ust', 'h'),
|
||||
output: fmt.format('trace-ust', 'h'),
|
||||
input: trace_events_file,
|
||||
@ -31,7 +30,7 @@ foreach dir : [ '.' ] + trace_events_subdirs
|
||||
genh += trace_ust_h
|
||||
endif
|
||||
trace_ss.add(trace_h, trace_c)
|
||||
if 'CONFIG_TRACE_DTRACE' in config_host
|
||||
if 'dtrace' in get_option('trace_backends')
|
||||
trace_dtrace = custom_target(fmt.format('trace-dtrace', 'dtrace'),
|
||||
output: fmt.format('trace-dtrace', 'dtrace'),
|
||||
input: trace_events_file,
|
||||
@ -76,7 +75,7 @@ foreach d : [
|
||||
specific_ss.add(when: 'CONFIG_TCG', if_true: gen)
|
||||
endforeach
|
||||
|
||||
if 'CONFIG_TRACE_UST' in config_host
|
||||
if 'ust' in get_option('trace_backends')
|
||||
trace_ust_all_h = custom_target('trace-ust-all.h',
|
||||
output: 'trace-ust-all.h',
|
||||
input: trace_events_files,
|
||||
@ -91,7 +90,11 @@ if 'CONFIG_TRACE_UST' in config_host
|
||||
genh += trace_ust_all_h
|
||||
endif
|
||||
|
||||
trace_ss.add(when: 'CONFIG_TRACE_SIMPLE', if_true: files('simple.c'))
|
||||
trace_ss.add(when: 'CONFIG_TRACE_FTRACE', if_true: files('ftrace.c'))
|
||||
if 'simple' in get_option('trace_backends')
|
||||
trace_ss.add(files('simple.c'))
|
||||
endif
|
||||
if 'ftrace' in get_option('trace_backends')
|
||||
trace_ss.add(files('ftrace.c'))
|
||||
endif
|
||||
trace_ss.add(files('control.c'))
|
||||
trace_ss.add(files('qmp.c'))
|
||||
|
@ -364,7 +364,7 @@ void st_set_trace_file(const char *file)
|
||||
|
||||
if (!file) {
|
||||
/* Type cast needed for Windows where getpid() returns an int. */
|
||||
trace_file_name = g_strdup_printf(CONFIG_TRACE_FILE, (pid_t)getpid());
|
||||
trace_file_name = g_strdup_printf(CONFIG_TRACE_FILE "-" FMT_pid, (pid_t)getpid());
|
||||
} else {
|
||||
trace_file_name = g_strdup_printf("%s", file);
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ if sdl.found()
|
||||
ui_modules += {'sdl' : sdl_ss}
|
||||
endif
|
||||
|
||||
if config_host.has_key('CONFIG_SPICE')
|
||||
if spice.found()
|
||||
spice_core_ss = ss.source_set()
|
||||
spice_core_ss.add(spice, pixman, files(
|
||||
'spice-core.c',
|
||||
@ -99,7 +99,7 @@ if config_host.has_key('CONFIG_SPICE')
|
||||
ui_modules += {'spice-core' : spice_core_ss}
|
||||
endif
|
||||
|
||||
if config_host.has_key('CONFIG_SPICE') and config_host.has_key('CONFIG_GIO')
|
||||
if spice.found() and config_host.has_key('CONFIG_GIO')
|
||||
spice_ss = ss.source_set()
|
||||
spice_ss.add(spice, gio, pixman, files('spice-app.c'))
|
||||
ui_modules += {'spice-app': spice_ss}
|
||||
|
@ -1,5 +1,7 @@
|
||||
util_ss.add(files('osdep.c', 'cutils.c', 'unicode.c', 'qemu-timer-common.c'))
|
||||
util_ss.add(when: 'CONFIG_ATOMIC64', if_false: files('atomic64.c'))
|
||||
if not config_host_data.get('CONFIG_ATOMIC64')
|
||||
util_ss.add(files('atomic64.c'))
|
||||
endif
|
||||
util_ss.add(when: 'CONFIG_POSIX', if_true: files('aio-posix.c'))
|
||||
util_ss.add(when: 'CONFIG_POSIX', if_true: files('fdmon-poll.c'))
|
||||
if config_host_data.get('CONFIG_EPOLL_CREATE1')
|
||||
|
@ -23,7 +23,8 @@ void qemu_thread_naming(bool enable)
|
||||
{
|
||||
name_threads = enable;
|
||||
|
||||
#ifndef CONFIG_THREAD_SETNAME_BYTHREAD
|
||||
#if !defined CONFIG_PTHREAD_SETNAME_NP_W_TID && \
|
||||
!defined CONFIG_PTHREAD_SETNAME_NP_WO_TID
|
||||
/* This is a debugging option, not fatal */
|
||||
if (enable) {
|
||||
fprintf(stderr, "qemu: thread naming not supported on this host\n");
|
||||
@ -522,7 +523,6 @@ static void *qemu_thread_start(void *args)
|
||||
void *arg = qemu_thread_args->arg;
|
||||
void *r;
|
||||
|
||||
#ifdef CONFIG_THREAD_SETNAME_BYTHREAD
|
||||
/* Attempt to set the threads name; note that this is for debug, so
|
||||
* we're not going to fail if we can't set it.
|
||||
*/
|
||||
@ -533,7 +533,6 @@ static void *qemu_thread_start(void *args)
|
||||
pthread_setname_np(qemu_thread_args->name);
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
QEMU_TSAN_ANNOTATE_THREAD_NAME(qemu_thread_args->name);
|
||||
g_free(qemu_thread_args->name);
|
||||
g_free(qemu_thread_args);
|
||||
|
Loading…
Reference in New Issue
Block a user