libvirt/src/qemu/meson.build
Laine Stump a56f0168d5 qemu: hook up passt config to qemu domains
This consists of (1) adding the necessary args to the qemu commandline
netdev option, and (2) starting a passt process prior to starting
qemu, and making sure that it is terminated when it's no longer
needed. Under normal circumstances, passt will terminate itself as
soon as qemu closes its socket, but in case of some error where qemu
is never started, or fails to startup completely, we need to terminate
passt manually.

Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2023-01-10 01:19:25 -05:00

225 lines
5.4 KiB
Meson

qemu_driver_sources = [
'qemu_agent.c',
'qemu_alias.c',
'qemu_backup.c',
'qemu_block.c',
'qemu_blockjob.c',
'qemu_capabilities.c',
'qemu_cgroup.c',
'qemu_checkpoint.c',
'qemu_command.c',
'qemu_conf.c',
'qemu_dbus.c',
'qemu_domain.c',
'qemu_domain_address.c',
'qemu_domainjob.c',
'qemu_driver.c',
'qemu_extdevice.c',
'qemu_fd.c',
'qemu_firmware.c',
'qemu_hostdev.c',
'qemu_hotplug.c',
'qemu_interface.c',
'qemu_interop_config.c',
'qemu_migration.c',
'qemu_migration_cookie.c',
'qemu_migration_params.c',
'qemu_monitor.c',
'qemu_monitor_json.c',
'qemu_monitor_text.c',
'qemu_namespace.c',
'qemu_passt.c',
'qemu_process.c',
'qemu_qapi.c',
'qemu_saveimage.c',
'qemu_security.c',
'qemu_snapshot.c',
'qemu_slirp.c',
'qemu_tpm.c',
'qemu_validate.c',
'qemu_vhost_user.c',
'qemu_vhost_user_gpu.c',
'qemu_virtiofs.c',
]
driver_source_files += files(qemu_driver_sources)
stateful_driver_source_files += files(qemu_driver_sources)
qemu_dtrace_gen_headers = []
qemu_dtrace_gen_objects = []
if conf.has('WITH_DTRACE_PROBES')
infile = 'libvirt_qemu_probes.d'
out_h = 'libvirt_qemu_probes.h'
out_o = 'libvirt_qemu_probes.o'
out_stp = 'libvirt_qemu_probes.stp'
qemu_dtrace_gen_headers += custom_target(
out_h,
input: infile,
output: out_h,
command: dtrace_command + [ '-o', '@OUTPUT@', '-h', '-s', '@INPUT@' ],
)
qemu_dtrace_gen_objects += custom_target(
out_o,
input: infile,
output: out_o,
command: dtrace_command + [ '-o', '@OUTPUT@', '-G', '-s', '@INPUT@' ],
)
qemu_dtrace_gen_stp = custom_target(
out_stp,
input: infile,
output: out_stp,
command: [
meson_python_prog, python3_prog, dtrace2systemtap_prog,
bindir, sbindir, libdir, '@INPUT@',
],
capture: true,
install: conf.has('WITH_QEMU'),
install_dir: systemtap_dir,
)
endif
qemu_shim_sources = files(
'qemu_shim.c',
)
if conf.has('WITH_QEMU')
qemu_driver_impl = static_library(
'virt_driver_qemu_impl',
[
qemu_driver_sources,
qemu_dtrace_gen_headers,
],
dependencies: [
access_dep,
capng_dep,
gnutls_dep,
libnl_dep,
log_dep,
selinux_dep,
src_dep,
xdr_dep,
],
include_directories: [
conf_inc_dir,
hypervisor_inc_dir,
storage_file_inc_dir,
],
)
virt_modules += {
'name': 'virt_driver_qemu',
'sources': [
qemu_dtrace_gen_objects,
],
'link_whole': [
qemu_driver_impl,
],
'link_args': [
libvirt_no_undefined,
],
}
virt_daemons += {
'name': 'virtqemud',
'c_args': [
'-DDAEMON_NAME="virtqemud"',
'-DMODULE_NAME="qemu"',
],
}
qemu_user_group_conf = configuration_data({
'QEMU_USER': qemu_user,
'QEMU_GROUP': qemu_group,
})
qemu_conf = configure_file(
input: 'qemu.conf.in',
output: 'qemu.conf',
configuration: qemu_user_group_conf,
)
qemu_user_group_hack_conf = configuration_data({
'QEMU_USER': qemu_user,
'QEMU_GROUP': qemu_group,
# This hack is necessary because the output file is going to be
# used as input for another configure_file() call later, which
# will take care of substituting @CONFIG@ with useful data
'CONFIG': '@CONFIG@',
})
test_libvirtd_qemu_aug_tmp = configure_file(
input: 'test_libvirtd_qemu.aug.in',
output: 'test_libvirtd_qemu.aug.tmp',
configuration: qemu_user_group_hack_conf,
)
virt_conf_files += qemu_conf
virt_aug_files += files('libvirtd_qemu.aug')
virt_test_aug_files += {
'name': 'test_libvirtd_qemu.aug',
'aug': test_libvirtd_qemu_aug_tmp,
'conf': qemu_conf,
'test_name': 'libvirtd_qemu',
'test_srcdir': meson.current_source_dir(),
'test_builddir': meson.current_build_dir(),
}
virt_helpers += {
'name': 'virt-qemu-run',
'sources': [
qemu_shim_sources
],
'install_dir': bindir,
}
virt_daemon_confs += {
'name': 'virtqemud',
}
virt_daemon_units += {
'service': 'virtqemud',
'service_in': files('virtqemud.service.in'),
'name': 'Libvirt qemu',
'sockprefix': 'virtqemud',
'sockets': [ 'main', 'ro', 'admin' ],
}
openrc_init_files += {
'name': 'virtqemud',
'in_file': files('virtqemud.init.in'),
}
if conf.has('WITH_SYSCTL')
install_data(
'postcopy-migration.sysctl',
install_dir: prefix / 'lib' / 'sysctl.d',
rename: [ '60-qemu-postcopy-migration.conf' ],
)
endif
virt_install_dirs += [
confdir / 'qemu',
confdir / 'qemu' / 'autostart',
localstatedir / 'cache' / 'libvirt' / 'qemu',
localstatedir / 'lib' / 'libvirt' / 'qemu',
localstatedir / 'lib' / 'libvirt' / 'qemu' / 'channel',
localstatedir / 'lib' / 'libvirt' / 'qemu' / 'channel' / 'target',
localstatedir / 'lib' / 'libvirt' / 'qemu' / 'checkpoint',
localstatedir / 'lib' / 'libvirt' / 'qemu' / 'dump',
localstatedir / 'lib' / 'libvirt' / 'qemu' / 'nvram',
localstatedir / 'lib' / 'libvirt' / 'qemu' / 'ram',
localstatedir / 'lib' / 'libvirt' / 'qemu' / 'save',
localstatedir / 'lib' / 'libvirt' / 'qemu' / 'snapshot',
localstatedir / 'lib' / 'libvirt' / 'swtpm',
localstatedir / 'log' / 'libvirt' / 'qemu',
localstatedir / 'log' / 'swtpm' / 'libvirt' / 'qemu',
runstatedir / 'libvirt' / 'qemu',
runstatedir / 'libvirt' / 'qemu' / 'dbus',
runstatedir / 'libvirt' / 'qemu' / 'passt',
runstatedir / 'libvirt' / 'qemu' / 'slirp',
runstatedir / 'libvirt' / 'qemu' / 'swtpm',
]
endif