vfio-user: build library

add the libvfio-user library as a submodule. build it as a meson
subproject.

libvfio-user is distributed with BSD 3-Clause license and
json-c with MIT (Expat) license

Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: c2adec87958b081d1dc8775d4aa05c897912f025.1655151679.git.jag.raman@oracle.com

[Changed submodule URL to QEMU's libvfio-user mirror on GitLab. The QEMU
project mirrors its dependencies so that it can provide full source code
even in the event that its dependencies become unavailable. Note that
the mirror repo is manually updated, so please contact me to make newer
libvfio-user commits available. If I become a bottleneck we can set up a
cronjob.

Updated scripts/meson-buildoptions.sh to match the meson_options.txt
change. Failure to do so can result in scripts/meson-buildoptions.sh
being modified by the build system later on and you end up with a dirty
working tree.
--Stefan]

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Jagannathan Raman 2022-06-13 16:26:24 -04:00 committed by Stefan Hajnoczi
parent 9b5b473eae
commit 55116968de
12 changed files with 63 additions and 1 deletions

View File

@ -168,6 +168,7 @@ build-system-centos:
IMAGE: centos8 IMAGE: centos8
CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
--enable-modules --enable-trace-backends=dtrace --enable-docs --enable-modules --enable-trace-backends=dtrace --enable-docs
--enable-vfio-user-server
TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
MAKE_CHECK_ARGS: check-build MAKE_CHECK_ARGS: check-build

3
.gitmodules vendored
View File

@ -64,3 +64,6 @@
[submodule "tests/lcitool/libvirt-ci"] [submodule "tests/lcitool/libvirt-ci"]
path = tests/lcitool/libvirt-ci path = tests/lcitool/libvirt-ci
url = https://gitlab.com/libvirt/libvirt-ci.git url = https://gitlab.com/libvirt/libvirt-ci.git
[submodule "subprojects/libvfio-user"]
path = subprojects/libvfio-user
url = https://gitlab.com/qemu-project/libvfio-user.git

View File

@ -42,3 +42,7 @@ config MULTIPROCESS_ALLOWED
config FUZZ config FUZZ
bool bool
select SPARSE_MEM select SPARSE_MEM
config VFIO_USER_SERVER_ALLOWED
bool
imply VFIO_USER_SERVER

View File

@ -3642,6 +3642,7 @@ F: hw/remote/proxy-memory-listener.c
F: include/hw/remote/proxy-memory-listener.h F: include/hw/remote/proxy-memory-listener.h
F: hw/remote/iohub.c F: hw/remote/iohub.c
F: include/hw/remote/iohub.h F: include/hw/remote/iohub.h
F: subprojects/libvfio-user
EBPF: EBPF:
M: Jason Wang <jasowang@redhat.com> M: Jason Wang <jasowang@redhat.com>

17
configure vendored
View File

@ -315,6 +315,7 @@ meson_args=""
ninja="" ninja=""
bindir="bin" bindir="bin"
skip_meson=no skip_meson=no
vfio_user_server="disabled"
# The following Meson options are handled manually (still they # The following Meson options are handled manually (still they
# are included in the automatically generated help message) # are included in the automatically generated help message)
@ -909,6 +910,10 @@ for opt do
;; ;;
--disable-blobs) meson_option_parse --disable-install-blobs "" --disable-blobs) meson_option_parse --disable-install-blobs ""
;; ;;
--enable-vfio-user-server) vfio_user_server="enabled"
;;
--disable-vfio-user-server) vfio_user_server="disabled"
;;
--enable-tcmalloc) meson_option_parse --enable-malloc=tcmalloc tcmalloc --enable-tcmalloc) meson_option_parse --enable-malloc=tcmalloc tcmalloc
;; ;;
--enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc --enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc
@ -2132,6 +2137,17 @@ write_container_target_makefile() {
##########################################
# check for vfio_user_server
case "$vfio_user_server" in
enabled )
if test "$git_submodules_action" != "ignore"; then
git_submodules="${git_submodules} subprojects/libvfio-user"
fi
;;
esac
########################################## ##########################################
# End of CC checks # End of CC checks
# After here, no more $cc or $ld runs # After here, no more $cc or $ld runs
@ -2672,6 +2688,7 @@ if test "$skip_meson" = no; then
test "$slirp" != auto && meson_option_add "-Dslirp=$slirp" test "$slirp" != auto && meson_option_add "-Dslirp=$slirp"
test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd" test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg" test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"
test "$vfio_user_server" != auto && meson_option_add "-Dvfio_user_server=$vfio_user_server"
run_meson() { run_meson() {
NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path" NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path"
} }

View File

@ -2,3 +2,7 @@ config MULTIPROCESS
bool bool
depends on PCI && PCI_EXPRESS && KVM depends on PCI && PCI_EXPRESS && KVM
select REMOTE_PCIHOST select REMOTE_PCIHOST
config VFIO_USER_SERVER
bool
depends on MULTIPROCESS

View File

@ -7,6 +7,8 @@ remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('remote-obj.c'))
remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('proxy.c')) remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('proxy.c'))
remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('iohub.c')) remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('iohub.c'))
remote_ss.add(when: 'CONFIG_VFIO_USER_SERVER', if_true: libvfio_user_dep)
specific_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('memory.c')) specific_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('memory.c'))
specific_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('proxy-memory-listener.c')) specific_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('proxy-memory-listener.c'))

View File

@ -308,6 +308,10 @@ multiprocess_allowed = get_option('multiprocess') \
.require(targetos == 'linux', error_message: 'Multiprocess QEMU is supported only on Linux') \ .require(targetos == 'linux', error_message: 'Multiprocess QEMU is supported only on Linux') \
.allowed() .allowed()
vfio_user_server_allowed = get_option('vfio_user_server') \
.require(targetos == 'linux', error_message: 'vfio-user server is supported only on Linux') \
.allowed()
have_tpm = get_option('tpm') \ have_tpm = get_option('tpm') \
.require(targetos != 'windows', error_message: 'TPM emulation only available on POSIX systems') \ .require(targetos != 'windows', error_message: 'TPM emulation only available on POSIX systems') \
.allowed() .allowed()
@ -2380,7 +2384,8 @@ host_kconfig = \
(have_virtfs ? ['CONFIG_VIRTFS=y'] : []) + \ (have_virtfs ? ['CONFIG_VIRTFS=y'] : []) + \
('CONFIG_LINUX' in config_host ? ['CONFIG_LINUX=y'] : []) + \ ('CONFIG_LINUX' in config_host ? ['CONFIG_LINUX=y'] : []) + \
(have_pvrdma ? ['CONFIG_PVRDMA=y'] : []) + \ (have_pvrdma ? ['CONFIG_PVRDMA=y'] : []) + \
(multiprocess_allowed ? ['CONFIG_MULTIPROCESS_ALLOWED=y'] : []) (multiprocess_allowed ? ['CONFIG_MULTIPROCESS_ALLOWED=y'] : []) + \
(vfio_user_server_allowed ? ['CONFIG_VFIO_USER_SERVER_ALLOWED=y'] : [])
ignored = [ 'TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_ARCH' ] ignored = [ 'TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_ARCH' ]
@ -2672,6 +2677,21 @@ if have_system
endif endif
endif endif
libvfio_user_dep = not_found
if have_system and vfio_user_server_allowed
have_internal = fs.exists(meson.current_source_dir() / 'subprojects/libvfio-user/meson.build')
if not have_internal
error('libvfio-user source not found - please pull git submodule')
endif
libvfio_user_proj = subproject('libvfio-user')
libvfio_user_lib = libvfio_user_proj.get_variable('libvfio_user_dep')
libvfio_user_dep = declare_dependency(dependencies: [libvfio_user_lib])
endif
fdt = not_found fdt = not_found
if have_system if have_system
fdt_opt = get_option('fdt') fdt_opt = get_option('fdt')
@ -3790,6 +3810,7 @@ summary_info += {'target list': ' '.join(target_dirs)}
if have_system if have_system
summary_info += {'default devices': get_option('default_devices')} summary_info += {'default devices': get_option('default_devices')}
summary_info += {'out of process emulation': multiprocess_allowed} summary_info += {'out of process emulation': multiprocess_allowed}
summary_info += {'vfio-user server': vfio_user_server_allowed}
endif endif
summary(summary_info, bool_yn: true, section: 'Targets and accelerators') summary(summary_info, bool_yn: true, section: 'Targets and accelerators')

View File

@ -88,6 +88,8 @@ option('cfi_debug', type: 'boolean', value: 'false',
description: 'Verbose errors in case of CFI violation') description: 'Verbose errors in case of CFI violation')
option('multiprocess', type: 'feature', value: 'auto', option('multiprocess', type: 'feature', value: 'auto',
description: 'Out of process device emulation support') description: 'Out of process device emulation support')
option('vfio_user_server', type: 'feature', value: 'disabled',
description: 'vfio-user server support')
option('dbus_display', type: 'feature', value: 'auto', option('dbus_display', type: 'feature', value: 'auto',
description: '-display dbus support') description: '-display dbus support')
option('tpm', type : 'feature', value : 'auto', option('tpm', type : 'feature', value : 'auto',

View File

@ -153,6 +153,8 @@ meson_options_help() {
printf "%s\n" ' usb-redir libusbredir support' printf "%s\n" ' usb-redir libusbredir support'
printf "%s\n" ' vde vde network backend support' printf "%s\n" ' vde vde network backend support'
printf "%s\n" ' vdi vdi image format support' printf "%s\n" ' vdi vdi image format support'
printf "%s\n" ' vfio-user-server'
printf "%s\n" ' vfio-user server support'
printf "%s\n" ' vhost-crypto vhost-user crypto backend support' printf "%s\n" ' vhost-crypto vhost-user crypto backend support'
printf "%s\n" ' vhost-kernel vhost kernel backend support' printf "%s\n" ' vhost-kernel vhost kernel backend support'
printf "%s\n" ' vhost-net vhost-net kernel acceleration support' printf "%s\n" ' vhost-net vhost-net kernel acceleration support'
@ -415,6 +417,8 @@ _meson_option_parse() {
--disable-vde) printf "%s" -Dvde=disabled ;; --disable-vde) printf "%s" -Dvde=disabled ;;
--enable-vdi) printf "%s" -Dvdi=enabled ;; --enable-vdi) printf "%s" -Dvdi=enabled ;;
--disable-vdi) printf "%s" -Dvdi=disabled ;; --disable-vdi) printf "%s" -Dvdi=disabled ;;
--enable-vfio-user-server) printf "%s" -Dvfio_user_server=enabled ;;
--disable-vfio-user-server) printf "%s" -Dvfio_user_server=disabled ;;
--enable-vhost-crypto) printf "%s" -Dvhost_crypto=enabled ;; --enable-vhost-crypto) printf "%s" -Dvhost_crypto=enabled ;;
--disable-vhost-crypto) printf "%s" -Dvhost_crypto=disabled ;; --disable-vhost-crypto) printf "%s" -Dvhost_crypto=disabled ;;
--enable-vhost-kernel) printf "%s" -Dvhost_kernel=enabled ;; --enable-vhost-kernel) printf "%s" -Dvhost_kernel=enabled ;;

@ -0,0 +1 @@
Subproject commit 0b28d205572c80b568a1003db2c8f37ca333e4d7

View File

@ -51,6 +51,7 @@ RUN dnf update -y && \
libbpf-devel \ libbpf-devel \
libcacard-devel \ libcacard-devel \
libcap-ng-devel \ libcap-ng-devel \
libcmocka-devel \
libcurl-devel \ libcurl-devel \
libdrm-devel \ libdrm-devel \
libepoxy-devel \ libepoxy-devel \
@ -59,6 +60,7 @@ RUN dnf update -y && \
libgcrypt-devel \ libgcrypt-devel \
libiscsi-devel \ libiscsi-devel \
libjpeg-devel \ libjpeg-devel \
json-c-devel \
libnfs-devel \ libnfs-devel \
libpmem-devel \ libpmem-devel \
libpng-devel \ libpng-devel \