summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2022-04-20 17:33:41 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2022-04-28 08:52:20 +0200
commit3730a7341f19cbadde4d12e214b7a82b9de01f75 (patch)
tree73a1c076bdbbb7efa8a3231d83a2312009996520
parent88b6e618fda51cd2cfe7931e480e86ff8005a7d7 (diff)
meson, configure: move RDMA options to meson
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rwxr-xr-xconfigure115
-rw-r--r--contrib/rdmacm-mux/meson.build4
-rw-r--r--meson.build56
-rw-r--r--meson_options.txt4
-rw-r--r--migration/meson.build2
-rw-r--r--scripts/meson-buildoptions.sh6
6 files changed, 62 insertions, 125 deletions
diff --git a/configure b/configure
index 1aefbc2f68..4deca94235 100755
--- a/configure
+++ b/configure
@@ -301,8 +301,6 @@ vhost_vsock="$default_feature"
vhost_user="no"
vhost_user_fs="$default_feature"
vhost_vdpa="$default_feature"
-rdma="$default_feature"
-pvrdma="$default_feature"
debug_info="yes"
debug_tcg="no"
debug="no"
@@ -972,14 +970,6 @@ for opt do
;;
--tls-priority=*) tls_priority="$optarg"
;;
- --enable-rdma) rdma="yes"
- ;;
- --disable-rdma) rdma="no"
- ;;
- --enable-pvrdma) pvrdma="yes"
- ;;
- --disable-pvrdma) pvrdma="no"
- ;;
--disable-vhost-user) vhost_user="no"
;;
--enable-vhost-user) vhost_user="yes"
@@ -1244,8 +1234,6 @@ cat << EOF
lto Enable Link-Time Optimization.
safe-stack SafeStack Stack Smash Protection. Depends on
clang/llvm >= 3.7 and requires coroutine backend ucontext.
- rdma Enable RDMA-based migration
- pvrdma Enable PVRDMA support
vhost-net vhost-net kernel acceleration support
vhost-vsock virtio sockets device support
vhost-scsi vhost-scsi kernel target support
@@ -2038,100 +2026,6 @@ EOF
fi
##########################################
-# RDMA needs OpenFabrics libraries
-if test "$rdma" != "no" ; then
- cat > $TMPC <<EOF
-#include <rdma/rdma_cma.h>
-int main(void) { return 0; }
-EOF
- rdma_libs="-lrdmacm -libverbs -libumad"
- if compile_prog "" "$rdma_libs" ; then
- rdma="yes"
- else
- if test "$rdma" = "yes" ; then
- error_exit \
- " OpenFabrics librdmacm/libibverbs/libibumad not present." \
- " Your options:" \
- " (1) Fast: Install infiniband packages (devel) from your distro." \
- " (2) Cleanest: Install libraries from www.openfabrics.org" \
- " (3) Also: Install softiwarp if you don't have RDMA hardware"
- fi
- rdma="no"
- fi
-fi
-
-##########################################
-# PVRDMA detection
-
-cat > $TMPC <<EOF &&
-#include <sys/mman.h>
-
-int
-main(void)
-{
- char buf = 0;
- void *addr = &buf;
- addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
-
- return 0;
-}
-EOF
-
-if test "$rdma" = "yes" ; then
- case "$pvrdma" in
- "")
- if compile_prog "" ""; then
- pvrdma="yes"
- else
- pvrdma="no"
- fi
- ;;
- "yes")
- if ! compile_prog "" ""; then
- error_exit "PVRDMA is not supported since mremap is not implemented"
- fi
- pvrdma="yes"
- ;;
- "no")
- pvrdma="no"
- ;;
- esac
-else
- if test "$pvrdma" = "yes" ; then
- error_exit "PVRDMA requires rdma suppport"
- fi
- pvrdma="no"
-fi
-
-# Let's see if enhanced reg_mr is supported
-if test "$pvrdma" = "yes" ; then
-
-cat > $TMPC <<EOF &&
-#include <infiniband/verbs.h>
-
-int
-main(void)
-{
- struct ibv_mr *mr;
- struct ibv_pd *pd = NULL;
- size_t length = 10;
- uint64_t iova = 0;
- int access = 0;
- void *addr = NULL;
-
- mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
-
- ibv_dereg_mr(mr);
-
- return 0;
-}
-EOF
- if ! compile_prog "" "-libverbs"; then
- QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
- fi
-fi
-
-##########################################
# glib support probe
glib_req_ver=2.56
@@ -2855,15 +2749,6 @@ if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
echo "CONFIG_TSAN=y" >> $config_host_mak
fi
-if test "$rdma" = "yes" ; then
- echo "CONFIG_RDMA=y" >> $config_host_mak
- echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
-fi
-
-if test "$pvrdma" = "yes" ; then
- echo "CONFIG_PVRDMA=y" >> $config_host_mak
-fi
-
if test "$plugins" = "yes" ; then
echo "CONFIG_PLUGIN=y" >> $config_host_mak
fi
diff --git a/contrib/rdmacm-mux/meson.build b/contrib/rdmacm-mux/meson.build
index 7674f54cc5..36c9c89630 100644
--- a/contrib/rdmacm-mux/meson.build
+++ b/contrib/rdmacm-mux/meson.build
@@ -1,7 +1,5 @@
-if 'CONFIG_PVRDMA' in config_host
- # if not found, CONFIG_PVRDMA should not be set
+if have_pvrdma
# FIXME: broken on big endian architectures
- libumad = cc.find_library('ibumad', required: true)
executable('rdmacm-mux', files('main.c'), genh,
dependencies: [glib, libumad],
build_by_default: false,
diff --git a/meson.build b/meson.build
index 83b7347c5f..9c03436756 100644
--- a/meson.build
+++ b/meson.build
@@ -1219,9 +1219,22 @@ if numa.found() and not cc.links('''
endif
rdma = not_found
-if 'CONFIG_RDMA' in config_host
- rdma = declare_dependency(link_args: config_host['RDMA_LIBS'].split())
+if not get_option('rdma').auto() or have_system
+ libumad = cc.find_library('ibumad', required: get_option('rdma'))
+ rdma_libs = [cc.find_library('rdmacm', has_headers: ['rdma/rdma_cma.h'],
+ required: get_option('rdma'),
+ kwargs: static_kwargs),
+ cc.find_library('ibverbs', required: get_option('rdma'),
+ kwargs: static_kwargs),
+ libumad]
+ rdma = declare_dependency(dependencies: rdma_libs)
+ foreach lib: rdma_libs
+ if not lib.found()
+ rdma = not_found
+ endif
+ endforeach
endif
+
xen = not_found
if 'CONFIG_XEN_BACKEND' in config_host
xen = declare_dependency(compile_args: config_host['XEN_CFLAGS'].split(),
@@ -1554,6 +1567,7 @@ config_host_data.set('CONFIG_NUMA', numa.found())
config_host_data.set('CONFIG_OPENGL', opengl.found())
config_host_data.set('CONFIG_PROFILER', get_option('profiler'))
config_host_data.set('CONFIG_RBD', rbd.found())
+config_host_data.set('CONFIG_RDMA', rdma.found())
config_host_data.set('CONFIG_SDL', sdl.found())
config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
config_host_data.set('CONFIG_SECCOMP', seccomp.found())
@@ -1652,7 +1666,7 @@ config_host_data.set('HAVE_SYSTEM_FUNCTION', cc.has_function('system', prefix: '
if rdma.found()
config_host_data.set('HAVE_IBV_ADVISE_MR',
cc.has_function('ibv_advise_mr',
- args: config_host['RDMA_LIBS'].split(),
+ dependencies: rdma,
prefix: '#include <infiniband/verbs.h>'))
endif
@@ -1972,6 +1986,36 @@ config_host_data.set('CONFIG_AVX512F_OPT', get_option('avx512f') \
int main(int argc, char *argv[]) { return bar(argv[0]); }
'''), error_message: 'AVX512F not available').allowed())
+have_pvrdma = get_option('pvrdma') \
+ .require(rdma.found(), error_message: 'PVRDMA requires OpenFabrics libraries') \
+ .require(cc.compiles('''
+ int main(void)
+ {
+ char buf = 0;
+ void *addr = &buf;
+ addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
+
+ return 0;
+ }'''), error_message: 'PVRDMA requires mremap').allowed()
+
+if have_pvrdma
+ config_host_data.set('LEGACY_RDMA_REG_MR', not cc.compiles('''
+ #include <infiniband/verbs.h>
+ int main(void)
+ {
+ struct ibv_mr *mr;
+ struct ibv_pd *pd = NULL;
+ size_t length = 10;
+ uint64_t iova = 0;
+ int access = 0;
+ void *addr = NULL;
+
+ mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
+ ibv_dereg_mr(mr);
+ return 0;
+ }'''))
+endif
+
if get_option('membarrier').disabled()
have_membarrier = false
elif targetos == 'windows'
@@ -2106,7 +2150,7 @@ host_kconfig = \
('CONFIG_VHOST_KERNEL' in config_host ? ['CONFIG_VHOST_KERNEL=y'] : []) + \
(have_virtfs ? ['CONFIG_VIRTFS=y'] : []) + \
('CONFIG_LINUX' in config_host ? ['CONFIG_LINUX=y'] : []) + \
- ('CONFIG_PVRDMA' in config_host ? ['CONFIG_PVRDMA=y'] : []) + \
+ (have_pvrdma ? ['CONFIG_PVRDMA=y'] : []) + \
(multiprocess_allowed ? ['CONFIG_MULTIPROCESS_ALLOWED=y'] : [])
ignored = [ 'TARGET_XML_FILES', 'TARGET_ABI_DIR', 'TARGET_ARCH' ]
@@ -3700,8 +3744,8 @@ summary_info += {'l2tpv3 support': have_l2tpv3}
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')}
-summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
+summary_info += {'RDMA support': rdma}
+summary_info += {'PVRDMA support': have_pvrdma}
summary_info += {'fdt support': fdt_opt == 'disabled' ? false : fdt_opt}
summary_info += {'libcap-ng support': libcap_ng}
summary_info += {'bpf support': libbpf}
diff --git a/meson_options.txt b/meson_options.txt
index dbcf9722bb..3bdf409497 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -151,6 +151,10 @@ option('rbd', type : 'feature', value : 'auto',
description: 'Ceph block device driver')
option('opengl', type : 'feature', value : 'auto',
description: 'OpenGL support')
+option('rdma', type : 'feature', value : 'auto',
+ description: 'Enable RDMA-based migration')
+option('pvrdma', type : 'feature', value : 'auto',
+ description: 'Enable PVRDMA support')
option('gtk', type : 'feature', value : 'auto',
description: 'GTK+ user interface')
option('sdl', type : 'feature', value : 'auto',
diff --git a/migration/meson.build b/migration/meson.build
index 8b5ca5c047..6880b61b10 100644
--- a/migration/meson.build
+++ b/migration/meson.build
@@ -27,7 +27,7 @@ softmmu_ss.add(files(
'tls.c',
), gnutls)
-softmmu_ss.add(when: ['CONFIG_RDMA', rdma], if_true: files('rdma.c'))
+softmmu_ss.add(when: rdma, if_true: files('rdma.c'))
if get_option('live_block_migration').allowed()
softmmu_ss.add(files('block.c'))
endif
diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
index 203f33ae18..838aa38df9 100644
--- a/scripts/meson-buildoptions.sh
+++ b/scripts/meson-buildoptions.sh
@@ -96,10 +96,12 @@ meson_options_help() {
printf "%s\n" ' pa PulseAudio sound support'
printf "%s\n" ' parallels parallels image format support'
printf "%s\n" ' png PNG support with libpng'
+ printf "%s\n" ' pvrdma Enable PVRDMA support'
printf "%s\n" ' qcow1 qcow1 image format support'
printf "%s\n" ' qed qed image format support'
printf "%s\n" ' qga-vss build QGA VSS support (broken with MinGW)'
printf "%s\n" ' rbd Ceph block device driver'
+ printf "%s\n" ' rdma Enable RDMA-based migration'
printf "%s\n" ' replication replication support'
printf "%s\n" ' sdl SDL user interface'
printf "%s\n" ' sdl-image SDL Image support for icons'
@@ -284,6 +286,8 @@ _meson_option_parse() {
--disable-png) printf "%s" -Dpng=disabled ;;
--enable-profiler) printf "%s" -Dprofiler=true ;;
--disable-profiler) printf "%s" -Dprofiler=false ;;
+ --enable-pvrdma) printf "%s" -Dpvrdma=enabled ;;
+ --disable-pvrdma) printf "%s" -Dpvrdma=disabled ;;
--enable-qcow1) printf "%s" -Dqcow1=enabled ;;
--disable-qcow1) printf "%s" -Dqcow1=disabled ;;
--enable-qed) printf "%s" -Dqed=enabled ;;
@@ -294,6 +298,8 @@ _meson_option_parse() {
--disable-qom-cast-debug) printf "%s" -Dqom_cast_debug=false ;;
--enable-rbd) printf "%s" -Drbd=enabled ;;
--disable-rbd) printf "%s" -Drbd=disabled ;;
+ --enable-rdma) printf "%s" -Drdma=enabled ;;
+ --disable-rdma) printf "%s" -Drdma=disabled ;;
--enable-replication) printf "%s" -Dreplication=enabled ;;
--disable-replication) printf "%s" -Dreplication=disabled ;;
--enable-rng-none) printf "%s" -Drng_none=true ;;