[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 32/92] configure: move malloc_trim/tcmalloc/jemalloc to meson
From: |
Paolo Bonzini |
Subject: |
[PULL 32/92] configure: move malloc_trim/tcmalloc/jemalloc to meson |
Date: |
Thu, 24 Sep 2020 05:22:14 -0400 |
Because LIBS is not used anymore, tcmalloc/jemalloc does
not work with binaries whose description is in Meson.
The fix is simply to move them to Meson too.
For consistency with other configure options, specifying
--enable-malloc-trim together with --enable-{tc,je}malloc
becomes a fatal error.
Reported-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 84 +++++------------------------------------------
meson.build | 28 +++++++++++++---
meson_options.txt | 5 +++
3 files changed, 38 insertions(+), 79 deletions(-)
diff --git a/configure b/configure
index 6cffe0fde8..a65663d531 100755
--- a/configure
+++ b/configure
@@ -549,7 +549,7 @@ skip_meson=no
gettext=""
bogus_os="no"
-malloc_trim=""
+malloc_trim="auto"
# parse CC options first
for opt do
@@ -1228,9 +1228,9 @@ for opt do
;;
--enable-tcg) tcg="yes"
;;
- --disable-malloc-trim) malloc_trim="no"
+ --disable-malloc-trim) malloc_trim="disabled"
;;
- --enable-malloc-trim) malloc_trim="yes"
+ --enable-malloc-trim) malloc_trim="enabled"
;;
--disable-spice) spice="no"
;;
@@ -4383,77 +4383,14 @@ EOF
fi
fi
+malloc=system
if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
exit 1
-fi
-
-# Even if malloc_trim() is available, these non-libc memory allocators
-# do not support it.
-if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
- if test "$malloc_trim" = "yes" ; then
- echo "Disabling malloc_trim with non-libc memory allocator"
- fi
- malloc_trim="no"
-fi
-
-#######################################
-# malloc_trim
-
-if test "$malloc_trim" != "no" ; then
- cat > $TMPC << EOF
-#include <malloc.h>
-int main(void) { malloc_trim(0); return 0; }
-EOF
- if compile_prog "" "" ; then
- malloc_trim="yes"
- else
- malloc_trim="no"
- fi
-fi
-
-##########################################
-# tcmalloc probe
-
-if test "$tcmalloc" = "yes" ; then
- cat > $TMPC << EOF
-#include <stdlib.h>
-int main(void) {
- void *tmp = malloc(1);
- if (tmp != NULL) {
- return 0;
- }
- return 1;
-}
-EOF
-
- if compile_prog "" "-ltcmalloc" ; then
- LIBS="-ltcmalloc $LIBS"
- else
- feature_not_found "tcmalloc" "install gperftools devel"
- fi
-fi
-
-##########################################
-# jemalloc probe
-
-if test "$jemalloc" = "yes" ; then
- cat > $TMPC << EOF
-#include <stdlib.h>
-int main(void) {
- void *tmp = malloc(1);
- if (tmp != NULL) {
- return 0;
- }
- return 1;
-}
-EOF
-
- if compile_prog "" "-ljemalloc" ; then
- LIBS="-ljemalloc $LIBS"
- else
- feature_not_found "jemalloc" "install jemalloc devel"
- fi
+elif test "$tcmalloc" = "yes" ; then
+ malloc=tcmalloc
+elif test "$jemalloc" = "yes" ; then
+ malloc=jemalloc
fi
##########################################
@@ -6951,10 +6888,6 @@ if test "$gbm" = "yes" ; then
fi
-if test "$malloc_trim" = "yes" ; then
- echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
-fi
-
if test "$avx2_opt" = "yes" ; then
echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
fi
@@ -7926,6 +7859,7 @@ NINJA=${ninja:-$PWD/ninjatool} $meson setup \
-Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false;
fi) \
-Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
-Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false;
fi) \
+ -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim \
-Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
-Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png
\
-Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\
diff --git a/meson.build b/meson.build
index eff3fb0f72..08ebfca6d0 100644
--- a/meson.build
+++ b/meson.build
@@ -514,6 +514,26 @@ keyutils = dependency('libkeyutils', required: false,
has_gettid = cc.has_function('gettid')
+# Malloc tests
+
+malloc = []
+if get_option('malloc') == 'system'
+ has_malloc_trim = \
+ not get_option('malloc_trim').disabled() and \
+ cc.links('''#include <malloc.h>
+ int main(void) { malloc_trim(0); return 0; }''')
+else
+ has_malloc_trim = false
+ malloc = cc.find_library(get_option('malloc'), required: true)
+endif
+if not has_malloc_trim and get_option('malloc_trim').enabled()
+ if get_option('malloc') == 'system'
+ error('malloc_trim not available on this platform.')
+ else
+ error('malloc_trim not available with non-libc memory allocator')
+ endif
+endif
+
# Create config-host.h
config_host_data.set('CONFIG_LIBUDEV', libudev.found())
@@ -528,6 +548,7 @@ config_host_data.set('CONFIG_VNC_SASL', sasl.found())
config_host_data.set('CONFIG_XKBCOMMON', xkbcommon.found())
config_host_data.set('CONFIG_KEYUTILS', keyutils.found())
config_host_data.set('CONFIG_GETTID', has_gettid)
+config_host_data.set('CONFIG_MALLOC_TRIM', has_malloc_trim)
config_host_data.set('QEMU_VERSION', '"@0@"'.format(meson.project_version()))
config_host_data.set('QEMU_VERSION_MAJOR',
meson.project_version().split('.')[0])
config_host_data.set('QEMU_VERSION_MINOR',
meson.project_version().split('.')[1])
@@ -896,7 +917,7 @@ util_ss.add_all(trace_ss)
util_ss = util_ss.apply(config_all, strict: false)
libqemuutil = static_library('qemuutil',
sources: util_ss.sources() + stub_ss.sources() +
genh,
- dependencies: [util_ss.dependencies(), m, glib,
socket])
+ dependencies: [util_ss.dependencies(), m, glib,
socket, malloc])
qemuutil = declare_dependency(link_with: libqemuutil,
sources: genh + version_res)
@@ -1520,7 +1541,7 @@ summary_info += {'Install blobs':
config_host.has_key('INSTALL_BLOBS')}
# summary_info += {'TCG debug enabled':
config_host.has_key('CONFIG_DEBUG_TCG')}
# summary_info += {'TCG interpreter':
config_host.has_key('CONFIG_TCG_INTERPRETER')}
#endif
-summary_info += {'malloc trim support':
config_host.has_key('CONFIG_MALLOC_TRIM')}
+summary_info += {'malloc trim support': has_malloc_trim}
summary_info += {'RDMA support': config_host.has_key('CONFIG_RDMA')}
summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
summary_info += {'fdt support': config_host.has_key('CONFIG_FDT')}
@@ -1582,8 +1603,7 @@ summary_info += {'lzfse support':
config_host.has_key('CONFIG_LZFSE')}
summary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')}
summary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
summary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')}
-summary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')}
-summary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')}
+summary_info += {'memory allocator': get_option('malloc')}
summary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
summary_info += {'avx512f optimization':
config_host.has_key('CONFIG_AVX512F_OPT')}
summary_info += {'replication support':
config_host.has_key('CONFIG_REPLICATION')}
diff --git a/meson_options.txt b/meson_options.txt
index b38a6ae92a..8a59ec263d 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -6,6 +6,11 @@ option('docdir', type : 'string', value : 'doc',
option('gettext', type : 'boolean', value : true,
description: 'Localization of the GTK+ user interface')
+option('malloc_trim', type : 'feature', value : 'auto',
+ description: 'enable libc malloc_trim() for memory optimization')
+option('malloc', type : 'combo', choices : ['system', 'tcmalloc', 'jemalloc'],
+ value: 'system', description: 'choose memory allocator to use')
+
option('mpath', type : 'feature', value : 'auto',
description: 'Multipath persistent reservation passthrough')
option('sdl', type : 'feature', value : 'auto',
--
2.26.2
- [PULL 23/92] hw/char/serial: Make 'wakeup' property boolean, (continued)
- [PULL 23/92] hw/char/serial: Make 'wakeup' property boolean, Paolo Bonzini, 2020/09/24
- [PULL 21/92] hw/char/serial: Remove old DEBUG_SERIAL commented code, Paolo Bonzini, 2020/09/24
- [PULL 25/92] scsi-generic: Fix HM-zoned device scan, Paolo Bonzini, 2020/09/24
- [PULL 27/92] hw: megasas: consider 'iov_count=0' is an error in megasas_map_sgl, Paolo Bonzini, 2020/09/24
- [PULL 18/92] configure: rename QEMU_GA_MSI_ENABLED to CONFIG_QGA_MSI, Paolo Bonzini, 2020/09/24
- [PULL 29/92] meson: move libudev test, Paolo Bonzini, 2020/09/24
- [PULL 31/92] meson: extend libmpathpersist test for static linking, Paolo Bonzini, 2020/09/24
- [PULL 22/92] hw/char/serial: Rename I/O read/write trace events, Paolo Bonzini, 2020/09/24
- [PULL 30/92] meson: move libmpathpersist test, Paolo Bonzini, 2020/09/24
- [PULL 33/92] configure: fix --meson=/path/to/meson, Paolo Bonzini, 2020/09/24
- [PULL 32/92] configure: move malloc_trim/tcmalloc/jemalloc to meson,
Paolo Bonzini <=
- [PULL 26/92] hw: megasas: return -1 when 'megasas_map_sgl' fails, Paolo Bonzini, 2020/09/24
- [PULL 35/92] configure: do not limit Hypervisor.framework test to Darwin, Paolo Bonzini, 2020/09/24
- [PULL 24/92] hw/char/serial-{isa, pci}: Alias QDEV properties from generic serial object, Paolo Bonzini, 2020/09/24
- [PULL 41/92] oslib-posix: default exec_dir to bindir, Paolo Bonzini, 2020/09/24
- [PULL 36/92] meson: qtest: set "depends" correctly, Paolo Bonzini, 2020/09/24
- [PULL 38/92] meson: report accelerator support, Paolo Bonzini, 2020/09/24
- [PULL 37/92] mtest2make: add support for introspected test dependencies, Paolo Bonzini, 2020/09/24
- [PULL 39/92] oslib: do not call g_strdup from qemu_get_exec_dir, Paolo Bonzini, 2020/09/24
- [PULL 46/92] vl: relocate paths to data directories, Paolo Bonzini, 2020/09/24
- [PULL 34/92] configure: move cocoa option to Meson, Paolo Bonzini, 2020/09/24