mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-23 11:39:53 +00:00
configure, meson: move AVX tests to meson
For consistency with other tests, --enable-avx2 and --enable-avx512f fail to compile on x86 systems if cpuid.h is not available. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
a436d6d412
commit
622753d2fb
103
configure
vendored
103
configure
vendored
@ -323,8 +323,6 @@ qom_cast_debug="yes"
|
|||||||
trace_backends="log"
|
trace_backends="log"
|
||||||
trace_file="trace"
|
trace_file="trace"
|
||||||
opengl="$default_feature"
|
opengl="$default_feature"
|
||||||
cpuid_h="no"
|
|
||||||
avx2_opt="$default_feature"
|
|
||||||
guest_agent="$default_feature"
|
guest_agent="$default_feature"
|
||||||
vss_win32_sdk="$default_feature"
|
vss_win32_sdk="$default_feature"
|
||||||
win_sdk="no"
|
win_sdk="no"
|
||||||
@ -1033,14 +1031,6 @@ for opt do
|
|||||||
;;
|
;;
|
||||||
--disable-tools) want_tools="no"
|
--disable-tools) want_tools="no"
|
||||||
;;
|
;;
|
||||||
--disable-avx2) avx2_opt="no"
|
|
||||||
;;
|
|
||||||
--enable-avx2) avx2_opt="yes"
|
|
||||||
;;
|
|
||||||
--disable-avx512f) avx512f_opt="no"
|
|
||||||
;;
|
|
||||||
--enable-avx512f) avx512f_opt="yes"
|
|
||||||
;;
|
|
||||||
--disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
|
--disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
|
||||||
echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
|
echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
|
||||||
;;
|
;;
|
||||||
@ -1406,8 +1396,6 @@ cat << EOF
|
|||||||
coroutine-pool coroutine freelist (better performance)
|
coroutine-pool coroutine freelist (better performance)
|
||||||
tpm TPM support
|
tpm TPM support
|
||||||
numa libnuma support
|
numa libnuma support
|
||||||
avx2 AVX2 optimization support
|
|
||||||
avx512f AVX512F optimization support
|
|
||||||
replication replication support
|
replication replication support
|
||||||
opengl opengl support
|
opengl opengl support
|
||||||
qom-cast-debug cast debugging support
|
qom-cast-debug cast debugging support
|
||||||
@ -2740,85 +2728,6 @@ else # "$safe_stack" = ""
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
########################################
|
|
||||||
# check if cpuid.h is usable.
|
|
||||||
|
|
||||||
cat > $TMPC << EOF
|
|
||||||
#include <cpuid.h>
|
|
||||||
int main(void) {
|
|
||||||
unsigned a, b, c, d;
|
|
||||||
unsigned max = __get_cpuid_max(0, 0);
|
|
||||||
|
|
||||||
if (max >= 1) {
|
|
||||||
__cpuid(1, a, b, c, d);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (max >= 7) {
|
|
||||||
__cpuid_count(7, 0, a, b, c, d);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
if compile_prog "" "" ; then
|
|
||||||
cpuid_h=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
##########################################
|
|
||||||
# avx2 optimization requirement check
|
|
||||||
#
|
|
||||||
# There is no point enabling this if cpuid.h is not usable,
|
|
||||||
# since we won't be able to select the new routines.
|
|
||||||
|
|
||||||
if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
|
|
||||||
cat > $TMPC << EOF
|
|
||||||
#pragma GCC push_options
|
|
||||||
#pragma GCC target("avx2")
|
|
||||||
#include <cpuid.h>
|
|
||||||
#include <immintrin.h>
|
|
||||||
static int bar(void *a) {
|
|
||||||
__m256i x = *(__m256i *)a;
|
|
||||||
return _mm256_testz_si256(x, x);
|
|
||||||
}
|
|
||||||
int main(int argc, char *argv[]) { return bar(argv[0]); }
|
|
||||||
EOF
|
|
||||||
if compile_object "-Werror" ; then
|
|
||||||
avx2_opt="yes"
|
|
||||||
else
|
|
||||||
avx2_opt="no"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
##########################################
|
|
||||||
# avx512f optimization requirement check
|
|
||||||
#
|
|
||||||
# There is no point enabling this if cpuid.h is not usable,
|
|
||||||
# since we won't be able to select the new routines.
|
|
||||||
# by default, it is turned off.
|
|
||||||
# if user explicitly want to enable it, check environment
|
|
||||||
|
|
||||||
if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
|
|
||||||
cat > $TMPC << EOF
|
|
||||||
#pragma GCC push_options
|
|
||||||
#pragma GCC target("avx512f")
|
|
||||||
#include <cpuid.h>
|
|
||||||
#include <immintrin.h>
|
|
||||||
static int bar(void *a) {
|
|
||||||
__m512i x = *(__m512i *)a;
|
|
||||||
return _mm512_test_epi64_mask(x, x);
|
|
||||||
}
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
return bar(argv[0]);
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
if ! compile_object "-Werror" ; then
|
|
||||||
avx512f_opt="no"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
avx512f_opt="no"
|
|
||||||
fi
|
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
# check if __[u]int128_t is usable.
|
# check if __[u]int128_t is usable.
|
||||||
|
|
||||||
@ -3419,14 +3328,6 @@ if test "$opengl" = "yes" ; then
|
|||||||
echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
|
echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$avx2_opt" = "yes" ; then
|
|
||||||
echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$avx512f_opt" = "yes" ; then
|
|
||||||
echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
|
|
||||||
# XXX: suppress that
|
# XXX: suppress that
|
||||||
if [ "$bsd" = "yes" ] ; then
|
if [ "$bsd" = "yes" ] ; then
|
||||||
echo "CONFIG_BSD=y" >> $config_host_mak
|
echo "CONFIG_BSD=y" >> $config_host_mak
|
||||||
@ -3459,10 +3360,6 @@ if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
|
|||||||
echo "CONFIG_TSAN=y" >> $config_host_mak
|
echo "CONFIG_TSAN=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$cpuid_h" = "yes" ; then
|
|
||||||
echo "CONFIG_CPUID_H=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$int128" = "yes" ; then
|
if test "$int128" = "yes" ; then
|
||||||
echo "CONFIG_INT128=y" >> $config_host_mak
|
echo "CONFIG_INT128=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
50
meson.build
50
meson.build
@ -1762,6 +1762,52 @@ config_host_data.set('CONFIG_GETAUXVAL', cc.links(gnu_source_prefix + '''
|
|||||||
return getauxval(AT_HWCAP) == 0;
|
return getauxval(AT_HWCAP) == 0;
|
||||||
}'''))
|
}'''))
|
||||||
|
|
||||||
|
have_cpuid_h = cc.links('''
|
||||||
|
#include <cpuid.h>
|
||||||
|
int main(void) {
|
||||||
|
unsigned a, b, c, d;
|
||||||
|
unsigned max = __get_cpuid_max(0, 0);
|
||||||
|
|
||||||
|
if (max >= 1) {
|
||||||
|
__cpuid(1, a, b, c, d);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (max >= 7) {
|
||||||
|
__cpuid_count(7, 0, a, b, c, d);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}''')
|
||||||
|
config_host_data.set('CONFIG_CPUID_H', have_cpuid_h)
|
||||||
|
|
||||||
|
config_host_data.set('CONFIG_AVX2_OPT', get_option('avx2') \
|
||||||
|
.require(have_cpuid_h, error_message: 'cpuid.h not available, cannot enable AVX2') \
|
||||||
|
.require(cc.links('''
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx2")
|
||||||
|
#include <cpuid.h>
|
||||||
|
#include <immintrin.h>
|
||||||
|
static int bar(void *a) {
|
||||||
|
__m256i x = *(__m256i *)a;
|
||||||
|
return _mm256_testz_si256(x, x);
|
||||||
|
}
|
||||||
|
int main(int argc, char *argv[]) { return bar(argv[0]); }
|
||||||
|
'''), error_message: 'AVX2 not available').allowed())
|
||||||
|
|
||||||
|
config_host_data.set('CONFIG_AVX512F_OPT', get_option('avx512f') \
|
||||||
|
.require(have_cpuid_h, error_message: 'cpuid.h not available, cannot enable AVX512F') \
|
||||||
|
.require(cc.links('''
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512f")
|
||||||
|
#include <cpuid.h>
|
||||||
|
#include <immintrin.h>
|
||||||
|
static int bar(void *a) {
|
||||||
|
__m512i x = *(__m512i *)a;
|
||||||
|
return _mm512_test_epi64_mask(x, x);
|
||||||
|
}
|
||||||
|
int main(int argc, char *argv[]) { return bar(argv[0]); }
|
||||||
|
'''), error_message: 'AVX512F not available').allowed())
|
||||||
|
|
||||||
config_host_data.set('CONFIG_AF_VSOCK', cc.compiles(gnu_source_prefix + '''
|
config_host_data.set('CONFIG_AF_VSOCK', cc.compiles(gnu_source_prefix + '''
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -3289,8 +3335,8 @@ summary_info += {'membarrier': config_host.has_key('CONFIG_MEMBARRIER')}
|
|||||||
summary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
|
summary_info += {'debug stack usage': config_host.has_key('CONFIG_DEBUG_STACK_USAGE')}
|
||||||
summary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')}
|
summary_info += {'mutex debugging': config_host.has_key('CONFIG_DEBUG_MUTEX')}
|
||||||
summary_info += {'memory allocator': get_option('malloc')}
|
summary_info += {'memory allocator': get_option('malloc')}
|
||||||
summary_info += {'avx2 optimization': config_host.has_key('CONFIG_AVX2_OPT')}
|
summary_info += {'avx2 optimization': config_host_data.get('CONFIG_AVX2_OPT')}
|
||||||
summary_info += {'avx512f optimization': config_host.has_key('CONFIG_AVX512F_OPT')}
|
summary_info += {'avx512f optimization': config_host_data.get('CONFIG_AVX512F_OPT')}
|
||||||
summary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')}
|
summary_info += {'gprof enabled': config_host.has_key('CONFIG_GPROF')}
|
||||||
summary_info += {'gcov': get_option('b_coverage')}
|
summary_info += {'gcov': get_option('b_coverage')}
|
||||||
summary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')}
|
summary_info += {'thread sanitizer': config_host.has_key('CONFIG_TSAN')}
|
||||||
|
@ -68,6 +68,10 @@ option('multiprocess', type: 'feature', value: 'auto',
|
|||||||
description: 'Out of process device emulation support')
|
description: 'Out of process device emulation support')
|
||||||
option('dbus_display', type: 'feature', value: 'auto',
|
option('dbus_display', type: 'feature', value: 'auto',
|
||||||
description: '-display dbus support')
|
description: '-display dbus support')
|
||||||
|
option('avx2', type: 'feature', value: 'auto',
|
||||||
|
description: 'AVX2 optimizations')
|
||||||
|
option('avx512f', type: 'feature', value: 'disabled',
|
||||||
|
description: 'AVX512F optimizations')
|
||||||
|
|
||||||
option('attr', type : 'feature', value : 'auto',
|
option('attr', type : 'feature', value : 'auto',
|
||||||
description: 'attr/xattr support')
|
description: 'attr/xattr support')
|
||||||
|
@ -26,6 +26,8 @@ meson_options_help() {
|
|||||||
printf "%s\n" ' alsa ALSA sound support'
|
printf "%s\n" ' alsa ALSA sound support'
|
||||||
printf "%s\n" ' attr attr/xattr support'
|
printf "%s\n" ' attr attr/xattr support'
|
||||||
printf "%s\n" ' auth-pam PAM access control'
|
printf "%s\n" ' auth-pam PAM access control'
|
||||||
|
printf "%s\n" ' avx2 AVX2 optimizations'
|
||||||
|
printf "%s\n" ' avx512f AVX512F optimizations'
|
||||||
printf "%s\n" ' bpf eBPF support'
|
printf "%s\n" ' bpf eBPF support'
|
||||||
printf "%s\n" ' brlapi brlapi character device driver'
|
printf "%s\n" ' brlapi brlapi character device driver'
|
||||||
printf "%s\n" ' bzip2 bzip2 support for DMG images'
|
printf "%s\n" ' bzip2 bzip2 support for DMG images'
|
||||||
@ -109,6 +111,10 @@ _meson_option_parse() {
|
|||||||
--disable-attr) printf "%s" -Dattr=disabled ;;
|
--disable-attr) printf "%s" -Dattr=disabled ;;
|
||||||
--enable-auth-pam) printf "%s" -Dauth_pam=enabled ;;
|
--enable-auth-pam) printf "%s" -Dauth_pam=enabled ;;
|
||||||
--disable-auth-pam) printf "%s" -Dauth_pam=disabled ;;
|
--disable-auth-pam) printf "%s" -Dauth_pam=disabled ;;
|
||||||
|
--enable-avx2) printf "%s" -Davx2=enabled ;;
|
||||||
|
--disable-avx2) printf "%s" -Davx2=disabled ;;
|
||||||
|
--enable-avx512f) printf "%s" -Davx512f=enabled ;;
|
||||||
|
--disable-avx512f) printf "%s" -Davx512f=disabled ;;
|
||||||
--enable-bpf) printf "%s" -Dbpf=enabled ;;
|
--enable-bpf) printf "%s" -Dbpf=enabled ;;
|
||||||
--disable-bpf) printf "%s" -Dbpf=disabled ;;
|
--disable-bpf) printf "%s" -Dbpf=disabled ;;
|
||||||
--enable-brlapi) printf "%s" -Dbrlapi=enabled ;;
|
--enable-brlapi) printf "%s" -Dbrlapi=enabled ;;
|
||||||
|
Loading…
Reference in New Issue
Block a user