mirror of https://github.com/xemu-project/xemu.git
configure: move malloc_trim/tcmalloc/jemalloc to meson
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>
This commit is contained in:
parent
43b43a4027
commit
aa087962d7
|
@ -549,7 +549,7 @@ skip_meson=no
|
||||||
gettext=""
|
gettext=""
|
||||||
|
|
||||||
bogus_os="no"
|
bogus_os="no"
|
||||||
malloc_trim=""
|
malloc_trim="auto"
|
||||||
|
|
||||||
# parse CC options first
|
# parse CC options first
|
||||||
for opt do
|
for opt do
|
||||||
|
@ -1228,9 +1228,9 @@ for opt do
|
||||||
;;
|
;;
|
||||||
--enable-tcg) tcg="yes"
|
--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"
|
--disable-spice) spice="no"
|
||||||
;;
|
;;
|
||||||
|
@ -4384,77 +4384,14 @@ EOF
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
malloc=system
|
||||||
if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
|
if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
|
||||||
echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
|
echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
elif test "$tcmalloc" = "yes" ; then
|
||||||
|
malloc=tcmalloc
|
||||||
# Even if malloc_trim() is available, these non-libc memory allocators
|
elif test "$jemalloc" = "yes" ; then
|
||||||
# do not support it.
|
malloc=jemalloc
|
||||||
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
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
|
@ -6945,10 +6882,6 @@ if test "$gbm" = "yes" ; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if test "$malloc_trim" = "yes" ; then
|
|
||||||
echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$avx2_opt" = "yes" ; then
|
if test "$avx2_opt" = "yes" ; then
|
||||||
echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
|
echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
@ -7919,6 +7852,7 @@ NINJA=${ninja:-$PWD/ninjatool} $meson setup \
|
||||||
-Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
|
-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_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) \
|
-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 \
|
-Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
|
||||||
-Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
|
-Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
|
||||||
-Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\
|
-Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\
|
||||||
|
|
28
meson.build
28
meson.build
|
@ -514,6 +514,26 @@ keyutils = dependency('libkeyutils', required: false,
|
||||||
|
|
||||||
has_gettid = cc.has_function('gettid')
|
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
|
# Create config-host.h
|
||||||
|
|
||||||
config_host_data.set('CONFIG_LIBUDEV', libudev.found())
|
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_XKBCOMMON', xkbcommon.found())
|
||||||
config_host_data.set('CONFIG_KEYUTILS', keyutils.found())
|
config_host_data.set('CONFIG_KEYUTILS', keyutils.found())
|
||||||
config_host_data.set('CONFIG_GETTID', has_gettid)
|
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', '"@0@"'.format(meson.project_version()))
|
||||||
config_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0])
|
config_host_data.set('QEMU_VERSION_MAJOR', meson.project_version().split('.')[0])
|
||||||
config_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1])
|
config_host_data.set('QEMU_VERSION_MINOR', meson.project_version().split('.')[1])
|
||||||
|
@ -911,7 +932,7 @@ util_ss.add_all(trace_ss)
|
||||||
util_ss = util_ss.apply(config_all, strict: false)
|
util_ss = util_ss.apply(config_all, strict: false)
|
||||||
libqemuutil = static_library('qemuutil',
|
libqemuutil = static_library('qemuutil',
|
||||||
sources: util_ss.sources() + stub_ss.sources() + genh,
|
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,
|
qemuutil = declare_dependency(link_with: libqemuutil,
|
||||||
sources: genh + version_res)
|
sources: genh + version_res)
|
||||||
|
|
||||||
|
@ -1450,7 +1471,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 debug enabled': config_host.has_key('CONFIG_DEBUG_TCG')}
|
||||||
# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')}
|
# summary_info += {'TCG interpreter': config_host.has_key('CONFIG_TCG_INTERPRETER')}
|
||||||
#endif
|
#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 += {'RDMA support': config_host.has_key('CONFIG_RDMA')}
|
||||||
summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
|
summary_info += {'PVRDMA support': config_host.has_key('CONFIG_PVRDMA')}
|
||||||
summary_info += {'fdt support': config_host.has_key('CONFIG_FDT')}
|
summary_info += {'fdt support': config_host.has_key('CONFIG_FDT')}
|
||||||
|
@ -1512,8 +1533,7 @@ summary_info += {'lzfse support': config_host.has_key('CONFIG_LZFSE')}
|
||||||
summary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')}
|
summary_info += {'zstd support': config_host.has_key('CONFIG_ZSTD')}
|
||||||
summary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
|
summary_info += {'NUMA host support': config_host.has_key('CONFIG_NUMA')}
|
||||||
summary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')}
|
summary_info += {'libxml2': config_host.has_key('CONFIG_LIBXML2')}
|
||||||
summary_info += {'tcmalloc support': config_host.has_key('CONFIG_TCMALLOC')}
|
summary_info += {'memory allocator': get_option('malloc')}
|
||||||
summary_info += {'jemalloc support': config_host.has_key('CONFIG_JEMALLOC')}
|
|
||||||
summary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
|
summary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
|
||||||
summary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
|
summary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
|
||||||
summary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
|
summary_info += {'replication support': config_host.has_key('CONFIG_REPLICATION')}
|
||||||
|
|
|
@ -6,6 +6,11 @@ option('docdir', type : 'string', value : 'doc',
|
||||||
option('gettext', type : 'boolean', value : true,
|
option('gettext', type : 'boolean', value : true,
|
||||||
description: 'Localization of the GTK+ user interface')
|
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',
|
option('mpath', type : 'feature', value : 'auto',
|
||||||
description: 'Multipath persistent reservation passthrough')
|
description: 'Multipath persistent reservation passthrough')
|
||||||
option('sdl', type : 'feature', value : 'auto',
|
option('sdl', type : 'feature', value : 'auto',
|
||||||
|
|
Loading…
Reference in New Issue