configure: add libpmem support

Add a pair of configure options --{enable,disable}-libpmem to control
whether QEMU is compiled with PMDK libpmem [1].

QEMU may write to the host persistent memory (e.g. in vNVDIMM label
emulation and live migration), so it must take the proper operations
to ensure the persistence of its own writes. Depending on the CPU
models and available instructions, the optimal operation can vary [2].
PMDK libpmem have already implemented those operations on multiple CPU
models (x86 and ARM) and the logic to select the optimal ones, so QEMU
can just use libpmem rather than re-implement them.

Libpem is a part of PMDK project(formerly known as NMVL).
The project's home page is: http://pmem.io/pmdk/
And the project's repository is: https://github.com/pmem/pmdk/

For more information about libpmem APIs, you can refer to the comments
in source code of: pmdk/src/libpmem/pmem.c, begin at line 33.

Signed-off-by: Junyan He <junyan.he@intel.com>
Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
Junyan He 2018-07-18 15:47:59 +08:00 committed by Michael S. Tsirkin
parent cbfc017103
commit 17824406fa
1 changed files with 29 additions and 0 deletions

29
configure vendored
View File

@ -475,6 +475,7 @@ vxhs=""
libxml2="" libxml2=""
docker="no" docker="no"
debug_mutex="no" debug_mutex="no"
libpmem=""
# cross compilers defaults, can be overridden with --cross-cc-ARCH # cross compilers defaults, can be overridden with --cross-cc-ARCH
cross_cc_aarch64="aarch64-linux-gnu-gcc" cross_cc_aarch64="aarch64-linux-gnu-gcc"
@ -1435,6 +1436,10 @@ for opt do
;; ;;
--disable-debug-mutex) debug_mutex=no --disable-debug-mutex) debug_mutex=no
;; ;;
--enable-libpmem) libpmem=yes
;;
--disable-libpmem) libpmem=no
;;
*) *)
echo "ERROR: unknown option $opt" echo "ERROR: unknown option $opt"
echo "Try '$0 --help' for more information" echo "Try '$0 --help' for more information"
@ -1710,6 +1715,7 @@ disabled with --disable-FEATURE, default is enabled if available:
vhost-user vhost-user support vhost-user vhost-user support
capstone capstone disassembler support capstone capstone disassembler support
debug-mutex mutex debugging support debug-mutex mutex debugging support
libpmem libpmem support
NOTE: The object files are built at the place where configure is launched NOTE: The object files are built at the place where configure is launched
EOF EOF
@ -5545,6 +5551,24 @@ if has "docker"; then
docker=$($python $source_path/tests/docker/docker.py probe) docker=$($python $source_path/tests/docker/docker.py probe)
fi fi
##########################################
# check for libpmem
if test "$libpmem" != "no"; then
if $pkg_config --exists "libpmem"; then
libpmem="yes"
libpmem_libs=$($pkg_config --libs libpmem)
libpmem_cflags=$($pkg_config --cflags libpmem)
libs_softmmu="$libs_softmmu $libpmem_libs"
QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
else
if test "$libpmem" = "yes" ; then
feature_not_found "libpmem" "Install nvml or pmdk"
fi
libpmem="no"
fi
fi
########################################## ##########################################
# End of CC checks # End of CC checks
# After here, no more $cc or $ld runs # After here, no more $cc or $ld runs
@ -6010,6 +6034,7 @@ echo "replication support $replication"
echo "VxHS block device $vxhs" echo "VxHS block device $vxhs"
echo "capstone $capstone" echo "capstone $capstone"
echo "docker $docker" echo "docker $docker"
echo "libpmem support $libpmem"
if test "$sdl_too_old" = "yes"; then if test "$sdl_too_old" = "yes"; then
echo "-> Your SDL version is too old - please upgrade to have SDL support" echo "-> Your SDL version is too old - please upgrade to have SDL support"
@ -6763,6 +6788,10 @@ if test "$vxhs" = "yes" ; then
echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
fi fi
if test "$libpmem" = "yes" ; then
echo "CONFIG_LIBPMEM=y" >> $config_host_mak
fi
if test "$tcg_interpreter" = "yes"; then if test "$tcg_interpreter" = "yes"; then
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
elif test "$ARCH" = "sparc64" ; then elif test "$ARCH" = "sparc64" ; then