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:
parent
9b5b473eae
commit
55116968de
@ -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
3
.gitmodules
vendored
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
17
configure
vendored
@ -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"
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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'))
|
||||||
|
|
||||||
|
23
meson.build
23
meson.build
@ -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')
|
||||||
|
|
||||||
|
@ -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',
|
||||||
|
@ -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 ;;
|
||||||
|
1
subprojects/libvfio-user
Submodule
1
subprojects/libvfio-user
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 0b28d205572c80b568a1003db2c8f37ca333e4d7
|
@ -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 \
|
||||||
|
Loading…
Reference in New Issue
Block a user