3 # qemu configure script (c) 2003 Fabrice Bellard
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE
= GREP_OPTIONS
=
9 unset CLICOLOR_FORCE GREP_OPTIONS
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE
=yes
14 # make source path absolute
15 source_path
=$
(cd "$(dirname -- "$0")"; pwd)
17 if test "$PWD" = "$source_path"
19 echo "Using './build' as the directory for build output"
21 MARKER
=build
/auto-created-by-configure
29 echo "ERROR: ./build dir already exists and was not previously created by configure"
37 cat > GNUmakefile
<<'EOF'
38 # This file is auto-generated by configure to support in-source tree
39 # 'make' command invocation
41 ifeq ($(MAKECMDGOALS),)
47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49 @if test "$(MAKECMDGOALS)" = "distclean" && \
50 test -e build/auto-created-by-configure ; \
52 rm -rf build GNUmakefile ; \
60 exec $source_path/configure
"$@"
63 # Temporary directory used for files created while
64 # configure runs. Since it is in the build directory
65 # we can safely blow away any previous version of it
66 # (and we need not jump through hoops to try to delete
67 # it when configure exits.)
72 echo "ERROR: failed to create temporary directory"
77 TMPC
="${TMPDIR1}/${TMPB}.c"
78 TMPO
="${TMPDIR1}/${TMPB}.o"
79 TMPCXX
="${TMPDIR1}/${TMPB}.cxx"
80 TMPE
="${TMPDIR1}/${TMPB}.exe"
81 TMPTXT
="${TMPDIR1}/${TMPB}.txt"
85 # Print a helpful header at the top of config.log
86 echo "# QEMU configure log $(date)" >> config.log
87 printf "# Configured with:" >> config.log
88 printf " '%s'" "$0" "$@" >> config.log
90 echo "#" >> config.log
95 while test -n "$2"; do
108 # Run the compiler, capturing its output to the log. First argument
109 # is compiler binary to execute.
112 if test -n "$BASH_VERSION"; then eval '
114 funcs: ${FUNCNAME[*]}
115 lines: ${BASH_LINENO[*]}"
117 echo $compiler "$@" >> config.log
118 $compiler "$@" >> config.log
2>&1 ||
return $?
119 # Test passed. If this is an --enable-werror build, rerun
120 # the test with -Werror and bail out if it fails. This
121 # makes warning-generating-errors in configure test code
122 # obvious to developers.
123 if test "$werror" != "yes"; then
126 # Don't bother rerunning the compile if we were already using -Werror
132 echo $compiler -Werror "$@" >> config.log
133 $compiler -Werror "$@" >> config.log
2>&1 && return $?
134 error_exit
"configure test passed without -Werror but failed with -Werror." \
135 "This is probably a bug in the configure script. The failing command" \
136 "will be at the bottom of config.log." \
137 "You can run configure with --disable-werror to bypass this check."
141 do_compiler
"$cc" "$@"
145 do_compiler
"$cxx" "$@"
148 # Append $2 to the variable named $1, with space separation
150 eval $1=\
${$1:+\"\$$1 \"}\
$2
154 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
155 # options which some versions of GCC's C++ compiler complain about
156 # because they only make sense for C programs.
157 QEMU_CXXFLAGS
="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
158 CXXFLAGS
=$
(echo "$CFLAGS" |
sed s
/-std=gnu99
/-std=gnu
++11/)
159 for arg
in $QEMU_CFLAGS; do
161 -Wstrict-prototypes|
-Wmissing-prototypes|
-Wnested-externs|\
162 -Wold-style-declaration|
-Wold-style-definition|
-Wredundant-decls)
165 QEMU_CXXFLAGS
=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
173 do_cc
$CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
179 do_cc
$CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags
182 # symbolically link $1 to $2. Portable version of "ln -sf".
185 mkdir
-p "$(dirname "$2")"
189 # check whether a command is available to this shell (may be either an
190 # executable or a builtin)
192 type "$1" >/dev
/null
2>&1
196 local_ver1
=`echo $1 | tr . ' '`
197 local_ver2
=`echo $2 | tr . ' '`
201 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
205 # the second argument finished, the first must be greater or equal
206 test $# = 1 && return 0
207 test $local_first -lt $2 && return 1
208 test $local_first -gt $2 && return 0
215 echo "$trace_backends" |
grep "$1" >/dev
/null
219 eval test -z '"${1#'"$2"'}"'
222 supported_hax_target
() {
223 test "$hax" = "yes" ||
return 1
224 glob
"$1" "*-softmmu" ||
return 1
225 case "${1%-softmmu}" in
233 supported_kvm_target
() {
234 test "$kvm" = "yes" ||
return 1
235 glob
"$1" "*-softmmu" ||
return 1
236 case "${1%-softmmu}:$cpu" in
237 arm
:arm | aarch64
:aarch64 | \
238 i386
:i386 | i386
:x86_64 | i386
:x32 | \
239 x86_64
:i386 | x86_64
:x86_64 | x86_64
:x32 | \
240 mips
:mips | mipsel
:mips | mips64
:mips | mips64el
:mips | \
241 ppc
:ppc | ppc64
:ppc | ppc
:ppc64 | ppc64
:ppc64 | ppc64
:ppc64le | \
249 supported_xen_target
() {
250 test "$xen" = "yes" ||
return 1
251 glob
"$1" "*-softmmu" ||
return 1
252 # Only i386 and x86_64 provide the xenpv machine.
253 case "${1%-softmmu}" in
261 supported_hvf_target
() {
262 test "$hvf" = "yes" ||
return 1
263 glob
"$1" "*-softmmu" ||
return 1
264 case "${1%-softmmu}" in
272 supported_whpx_target
() {
273 test "$whpx" = "yes" ||
return 1
274 glob
"$1" "*-softmmu" ||
return 1
275 case "${1%-softmmu}" in
288 if test "$linux" != "yes"; then
289 print_error
"Target '$target' is only available on a Linux host"
294 if test "$bsd" != "yes"; then
295 print_error
"Target '$target' is only available on a BSD host"
300 print_error
"Invalid target name '$target'"
304 test "$tcg" = "yes" && return 0
305 supported_kvm_target
"$1" && return 0
306 supported_xen_target
"$1" && return 0
307 supported_hax_target
"$1" && return 0
308 supported_hvf_target
"$1" && return 0
309 supported_whpx_target
"$1" && return 0
310 print_error
"TCG disabled, but hardware accelerator not available for '$target'"
316 $ld --help 2>/dev
/null |
grep ".$1" >/dev
/null
2>&1
319 if printf %s
\\n
"$source_path" "$PWD" |
grep -q "[[:space:]:]";
321 error_exit
"main directory cannot contain spaces nor colons"
327 interp_prefix
="/usr/gnemul/qemu-%M"
331 block_drv_rw_whitelist
=""
332 block_drv_ro_whitelist
=""
340 gdb_bin
=$
(command -v "gdb-multiarch" ||
command -v "gdb")
342 if test -e "$source_path/.git"
345 git_submodules
="ui/keycodemapdb"
346 git_submodules
="$git_submodules tests/fp/berkeley-testfloat-3"
347 git_submodules
="$git_submodules tests/fp/berkeley-softfloat-3"
352 if ! test -f "$source_path/ui/keycodemapdb/README"
355 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
357 echo "This is not a GIT checkout but module content appears to"
358 echo "be missing. Do not use 'git archive' or GitHub download links"
359 echo "to acquire QEMU source archives. Non-GIT builds are only"
360 echo "supported with source archives linked from:"
362 echo " https://www.qemu.org/download/#source"
364 echo "Developers working with GIT can use scripts/archive-source.sh"
365 echo "if they need to create valid source archives."
372 # Don't accept a target_list environment variable.
374 unset target_list_exclude
376 # Default value for a variable defining feature "foo".
377 # * foo="no" feature will only be used if --enable-foo arg is given
378 # * foo="" feature will be searched for, and if found, will be used
379 # unless --disable-foo is given
380 # * foo="yes" this value will only be set by --enable-foo flag.
381 # feature will searched for,
382 # if not found, configure exits with error
384 # Always add --enable-foo and --disable-foo command line args.
385 # Distributions want to ensure that several features are compiled in, and it
386 # is impossible without a --enable-foo that exits if a feature is not found.
407 xen_pci_passthrough
=""
479 guest_agent_with_vss
="no"
480 guest_agent_ntddscsi
="no"
489 debug_stack_usage
="no"
493 glusterfs_xlator_opt
="no"
494 glusterfs_discard
="no"
495 glusterfs_fallocate
="no"
496 glusterfs_zerofill
="no"
497 glusterfs_ftruncate_has_stat
="no"
498 glusterfs_iocb_has_stat
="no"
501 tls_priority
="NORMAL"
508 qemu_private_xts
="yes"
514 live_block_migration
="yes"
531 default_devices
="yes"
545 deprecated_features
=""
547 # parse CC options first
549 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
551 --cross-prefix=*) cross_prefix
="$optarg"
555 --cxx=*) CXX
="$optarg"
557 --cpu=*) cpu
="$optarg"
559 --extra-cflags=*) QEMU_CFLAGS
="$QEMU_CFLAGS $optarg"
560 QEMU_LDFLAGS
="$QEMU_LDFLAGS $optarg"
562 --extra-cxxflags=*) QEMU_CXXFLAGS
="$QEMU_CXXFLAGS $optarg"
564 --extra-ldflags=*) QEMU_LDFLAGS
="$QEMU_LDFLAGS $optarg"
565 EXTRA_LDFLAGS
="$optarg"
567 --enable-debug-info) debug_info
="yes"
569 --disable-debug-info) debug_info
="no"
571 --cross-cc-*[!a-zA-Z0-9_-
]*=*) error_exit
"Passed bad --cross-cc-FOO option"
573 --cross-cc-cflags-*) cc_arch
=${opt#--cross-cc-flags-}; cc_arch
=${cc_arch%%=*}
574 eval "cross_cc_cflags_${cc_arch}=\$optarg"
575 cross_cc_vars
="$cross_cc_vars cross_cc_cflags_${cc_arch}"
577 --cross-cc-*) cc_arch
=${opt#--cross-cc-}; cc_arch
=${cc_arch%%=*}
578 cc_archs
="$cc_archs $cc_arch"
579 eval "cross_cc_${cc_arch}=\$optarg"
580 cross_cc_vars
="$cross_cc_vars cross_cc_${cc_arch}"
585 # Using uname is really, really broken. Once we have the right set of checks
586 # we can eliminate its usage altogether.
588 # Preferred compiler:
590 # ${cross_prefix}gcc (if cross-prefix specified)
592 if test -z "${CC}${cross_prefix}"; then
595 cc
="${CC-${cross_prefix}gcc}"
598 if test -z "${CXX}${cross_prefix}"; then
601 cxx
="${CXX-${cross_prefix}g++}"
604 ar="${AR-${cross_prefix}ar}"
605 as
="${AS-${cross_prefix}as}"
608 objcopy
="${OBJCOPY-${cross_prefix}objcopy}"
609 ld
="${LD-${cross_prefix}ld}"
610 ranlib
="${RANLIB-${cross_prefix}ranlib}"
611 nm
="${NM-${cross_prefix}nm}"
612 strip
="${STRIP-${cross_prefix}strip}"
613 windres
="${WINDRES-${cross_prefix}windres}"
614 pkg_config_exe
="${PKG_CONFIG-${cross_prefix}pkg-config}"
616 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
618 pkg_config
=query_pkg_config
619 sdl2_config
="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
621 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
622 ARFLAGS
="${ARFLAGS-rv}"
624 # default flags for all hosts
625 # We use -fwrapv to tell the compiler that we require a C dialect where
626 # left shift of signed integers is well defined and has the expected
627 # 2s-complement style results. (Both clang and gcc agree that it
628 # provides these semantics.)
629 QEMU_CFLAGS
="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
630 QEMU_CFLAGS
="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
631 QEMU_CFLAGS
="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
632 QEMU_CFLAGS
="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
633 QEMU_INCLUDES
="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
634 QEMU_INCLUDES
="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
635 CFLAGS
="-std=gnu99 -Wall"
641 #error $1 not defined
643 int main(void) { return 0; }
651 int main(void) { return 0; }
658 int main(void) { return 0; }
662 write_c_fuzzer_skeleton
() {
665 #include <sys/types.h>
666 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
667 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
671 if check_define __linux__
; then
673 elif check_define _WIN32
; then
675 elif check_define __OpenBSD__
; then
677 elif check_define __sun__
; then
679 elif check_define __HAIKU__
; then
681 elif check_define __FreeBSD__
; then
683 elif check_define __FreeBSD_kernel__
&& check_define __GLIBC__
; then
684 targetos
='GNU/kFreeBSD'
685 elif check_define __DragonFly__
; then
687 elif check_define __NetBSD__
; then
689 elif check_define __APPLE__
; then
692 # This is a fatal error, but don't report it yet, because we
693 # might be going to just print the --help text, or it might
694 # be the result of a missing compiler.
699 # Some host OSes need non-standard checks for which CPU to use.
700 # Note that these checks are broken for cross-compilation: if you're
701 # cross-compiling to one of these OSes then you'll need to specify
702 # the correct CPU with the --cpu option.
705 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
706 # run 64-bit userspace code.
707 # If the user didn't specify a CPU explicitly and the kernel says this is
708 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
709 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
714 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
715 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
720 if test ! -z "$cpu" ; then
721 # command line argument
723 elif check_define __i386__
; then
725 elif check_define __x86_64__
; then
726 if check_define __ILP32__
; then
731 elif check_define __sparc__
; then
732 if check_define __arch64__
; then
737 elif check_define _ARCH_PPC
; then
738 if check_define _ARCH_PPC64
; then
739 if check_define _LITTLE_ENDIAN
; then
747 elif check_define __mips__
; then
749 elif check_define __s390__
; then
750 if check_define __s390x__
; then
755 elif check_define __riscv
; then
756 if check_define _LP64
; then
761 elif check_define __arm__
; then
763 elif check_define __aarch64__
; then
770 # Normalise host CPU name and set ARCH.
771 # Note that this case should only have supported host CPUs, not guests.
773 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64
)
778 i386|i486|i586|i686|i86pc|BePC
)
797 # This will result in either an error or falling back to TCI later
801 if test -z "$ARCH"; then
807 # host *BSD for user mode
816 audio_possible_drivers
="dsound sdl"
817 if check_include dsound.h
; then
818 audio_drv_list
="dsound"
827 audio_drv_list
="oss try-sdl"
828 audio_possible_drivers
="oss sdl pa"
833 audio_drv_list
="oss try-sdl"
834 audio_possible_drivers
="oss sdl pa"
835 # needed for kinfo_getvmmap(3) in libutil.h
836 netmap
="" # enable netmap autodetect
837 HOST_VARIANT_DIR
="freebsd"
842 audio_drv_list
="oss try-sdl"
843 audio_possible_drivers
="oss sdl pa"
844 HOST_VARIANT_DIR
="dragonfly"
850 audio_drv_list
="oss try-sdl"
851 audio_possible_drivers
="oss sdl"
853 HOST_VARIANT_DIR
="netbsd"
858 audio_drv_list
="try-sdl"
859 audio_possible_drivers
="sdl"
860 HOST_VARIANT_DIR
="openbsd"
867 if [ "$cpu" = "x86_64" ] ; then
868 QEMU_CFLAGS
="-arch x86_64 $QEMU_CFLAGS"
869 QEMU_LDFLAGS
="-arch x86_64 $QEMU_LDFLAGS"
872 audio_drv_list
="coreaudio try-sdl"
873 audio_possible_drivers
="coreaudio sdl"
874 QEMU_LDFLAGS
="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
875 # Disable attempts to use ObjectiveC features in os/object.h since they
876 # won't work when we're compiling with gcc as a C compiler.
877 QEMU_CFLAGS
="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
878 HOST_VARIANT_DIR
="darwin"
883 smbd
="${SMBD-/usr/sfw/sbin/smbd}"
884 if test -f /usr
/include
/sys
/soundcard.h
; then
885 audio_drv_list
="oss try-sdl"
887 audio_possible_drivers
="oss sdl"
888 # needed for CMSG_ macros in sys/socket.h
889 QEMU_CFLAGS
="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
890 # needed for TIOCWIN* defines in termios.h
891 QEMU_CFLAGS
="-D__EXTENSIONS__ $QEMU_CFLAGS"
895 QEMU_CFLAGS
="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
898 audio_drv_list
="try-pa oss"
899 audio_possible_drivers
="oss alsa sdl pa"
903 QEMU_INCLUDES
="-isystem ${source_path}/linux-headers -Ilinux-headers $QEMU_INCLUDES"
908 if [ "$bsd" = "yes" ] ; then
909 if [ "$darwin" != "yes" ] ; then
914 : ${make=${MAKE-make}}
916 # We prefer python 3.x. A bare 'python' is traditionally
917 # python 2.x, but some distros have it as python 3.x, so
921 for binary
in "${PYTHON-python3}" python
925 python
=$
(command -v "$binary")
931 for binary
in sphinx-build-3 sphinx-build
935 sphinx_build
=$
(command -v "$binary")
940 # Check for ancillary tools used in testing
942 for binary
in genisoimage mkisofs
946 genisoimage
=$
(command -v "$binary")
951 : ${smbd=${SMBD-/usr/sbin/smbd}}
953 # Default objcc to clang if available, otherwise use CC
960 if test "$mingw32" = "yes" ; then
963 # MinGW needs -mthreads for TLS and macro _MT.
964 CFLAGS
="-mthreads $CFLAGS"
966 prefix
="c:/Program Files/QEMU"
968 libs_qga
="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
974 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
976 --help|
-h) show_help
=yes
978 --version|
-V) exec cat $source_path/VERSION
980 --prefix=*) prefix
="$optarg"
982 --interp-prefix=*) interp_prefix
="$optarg"
988 --host-cc=*) host_cc
="$optarg"
992 --iasl=*) iasl
="$optarg"
994 --objcc=*) objcc
="$optarg"
996 --make=*) make="$optarg"
1000 --python=*) python
="$optarg" ; explicit_python
=yes
1002 --sphinx-build=*) sphinx_build
="$optarg"
1004 --skip-meson) skip_meson
=yes
1006 --meson=*) meson
="$optarg"
1008 --ninja=*) ninja
="$optarg"
1010 --smbd=*) smbd
="$optarg"
1018 --enable-debug-info)
1020 --disable-debug-info)
1030 --disable-module-upgrades) module_upgrades
="no"
1032 --enable-module-upgrades) module_upgrades
="yes"
1036 --target-list=*) target_list
="$optarg"
1037 if test "$target_list_exclude"; then
1038 error_exit
"Can't mix --target-list with --target-list-exclude"
1041 --target-list-exclude=*) target_list_exclude
="$optarg"
1042 if test "$target_list"; then
1043 error_exit
"Can't mix --target-list-exclude with --target-list"
1046 --enable-trace-backends=*) trace_backends
="$optarg"
1048 # XXX: backwards compatibility
1049 --enable-trace-backend=*) trace_backends
="$optarg"
1051 --with-trace-file=*) trace_file
="$optarg"
1053 --with-default-devices) default_devices
="yes"
1055 --without-default-devices) default_devices
="no"
1057 --enable-gprof) gprof
="yes"
1059 --enable-gcov) gcov
="yes"
1063 QEMU_PKG_CONFIG_FLAGS
="--static $QEMU_PKG_CONFIG_FLAGS"
1065 --mandir=*) mandir
="$optarg"
1067 --bindir=*) bindir
="$optarg"
1069 --libdir=*) libdir
="$optarg"
1071 --libexecdir=*) libexecdir
="$optarg"
1073 --includedir=*) includedir
="$optarg"
1075 --datadir=*) datadir
="$optarg"
1077 --with-suffix=*) qemu_suffix
="$optarg"
1079 --docdir=*) qemu_docdir
="$optarg"
1081 --sysconfdir=*) sysconfdir
="$optarg"
1083 --localstatedir=*) local_statedir
="$optarg"
1085 --firmwarepath=*) firmwarepath
="$optarg"
1087 --host=*|
--build=*|\
1088 --disable-dependency-tracking|\
1089 --sbindir=*|
--sharedstatedir=*|\
1090 --oldincludedir=*|
--datarootdir=*|
--infodir=*|
--localedir=*|\
1091 --htmldir=*|
--dvidir=*|
--pdfdir=*|
--psdir=*)
1092 # These switches are silently ignored, for compatibility with
1093 # autoconf-generated configure scripts. This allows QEMU's
1094 # configure to be used by RPM and similar macros that set
1095 # lots of directory switches by default.
1097 --disable-sdl) sdl
="disabled"
1099 --enable-sdl) sdl
="enabled"
1101 --disable-sdl-image) sdl_image
="disabled"
1103 --enable-sdl-image) sdl_image
="enabled"
1105 --disable-qom-cast-debug) qom_cast_debug
="no"
1107 --enable-qom-cast-debug) qom_cast_debug
="yes"
1109 --disable-virtfs) virtfs
="no"
1111 --enable-virtfs) virtfs
="yes"
1113 --disable-mpath) mpath
="no"
1115 --enable-mpath) mpath
="yes"
1117 --disable-vnc) vnc
="disabled"
1119 --enable-vnc) vnc
="enabled"
1121 --disable-gettext) gettext="false"
1123 --enable-gettext) gettext="true"
1125 --oss-lib=*) oss_lib
="$optarg"
1127 --audio-drv-list=*) audio_drv_list
="$optarg"
1129 --block-drv-rw-whitelist=*|
--block-drv-whitelist=*) block_drv_rw_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
1131 --block-drv-ro-whitelist=*) block_drv_ro_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
1133 --enable-debug-tcg) debug_tcg
="yes"
1135 --disable-debug-tcg) debug_tcg
="no"
1138 # Enable debugging options that aren't excessively noisy
1145 --enable-sanitizers) sanitizers
="yes"
1147 --disable-sanitizers) sanitizers
="no"
1149 --enable-tsan) tsan
="yes"
1151 --disable-tsan) tsan
="no"
1153 --enable-sparse) sparse
="yes"
1155 --disable-sparse) sparse
="no"
1157 --disable-strip) strip_opt
="no"
1159 --disable-vnc-sasl) vnc_sasl
="disabled"
1161 --enable-vnc-sasl) vnc_sasl
="enabled"
1163 --disable-vnc-jpeg) vnc_jpeg
="disabled"
1165 --enable-vnc-jpeg) vnc_jpeg
="enabled"
1167 --disable-vnc-png) vnc_png
="disabled"
1169 --enable-vnc-png) vnc_png
="enabled"
1171 --disable-slirp) slirp
="no"
1173 --enable-slirp=git
) slirp
="git"
1175 --enable-slirp=system
) slirp
="system"
1177 --disable-vde) vde
="no"
1179 --enable-vde) vde
="yes"
1181 --disable-netmap) netmap
="no"
1183 --enable-netmap) netmap
="yes"
1185 --disable-xen) xen
="no"
1187 --enable-xen) xen
="yes"
1189 --disable-xen-pci-passthrough) xen_pci_passthrough
="no"
1191 --enable-xen-pci-passthrough) xen_pci_passthrough
="yes"
1193 --disable-brlapi) brlapi
="no"
1195 --enable-brlapi) brlapi
="yes"
1197 --disable-kvm) kvm
="no"
1199 --enable-kvm) kvm
="yes"
1201 --disable-hax) hax
="no"
1203 --enable-hax) hax
="yes"
1205 --disable-hvf) hvf
="no"
1207 --enable-hvf) hvf
="yes"
1209 --disable-whpx) whpx
="no"
1211 --enable-whpx) whpx
="yes"
1213 --disable-tcg-interpreter) tcg_interpreter
="no"
1215 --enable-tcg-interpreter) tcg_interpreter
="yes"
1217 --disable-cap-ng) cap_ng
="no"
1219 --enable-cap-ng) cap_ng
="yes"
1221 --disable-tcg) tcg
="no"
1223 --enable-tcg) tcg
="yes"
1225 --disable-malloc-trim) malloc_trim
="no"
1227 --enable-malloc-trim) malloc_trim
="yes"
1229 --disable-spice) spice
="no"
1231 --enable-spice) spice
="yes"
1233 --disable-libiscsi) libiscsi
="no"
1235 --enable-libiscsi) libiscsi
="yes"
1237 --disable-libnfs) libnfs
="no"
1239 --enable-libnfs) libnfs
="yes"
1241 --enable-profiler) profiler
="yes"
1243 --disable-cocoa) cocoa
="no"
1247 audio_drv_list
="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1249 --disable-system) softmmu
="no"
1251 --enable-system) softmmu
="yes"
1258 --disable-linux-user) linux_user
="no"
1260 --enable-linux-user) linux_user
="yes"
1262 --disable-bsd-user) bsd_user
="no"
1264 --enable-bsd-user) bsd_user
="yes"
1266 --enable-pie) pie
="yes"
1268 --disable-pie) pie
="no"
1270 --enable-werror) werror
="yes"
1272 --disable-werror) werror
="no"
1274 --enable-stack-protector) stack_protector
="yes"
1276 --disable-stack-protector) stack_protector
="no"
1278 --enable-safe-stack) safe_stack
="yes"
1280 --disable-safe-stack) safe_stack
="no"
1282 --disable-curses) curses
="no"
1284 --enable-curses) curses
="yes"
1286 --disable-iconv) iconv="no"
1288 --enable-iconv) iconv="yes"
1290 --disable-curl) curl
="no"
1292 --enable-curl) curl
="yes"
1294 --disable-fdt) fdt
="no"
1296 --enable-fdt) fdt
="yes"
1298 --disable-linux-aio) linux_aio
="no"
1300 --enable-linux-aio) linux_aio
="yes"
1302 --disable-linux-io-uring) linux_io_uring
="no"
1304 --enable-linux-io-uring) linux_io_uring
="yes"
1306 --disable-attr) attr
="no"
1308 --enable-attr) attr
="yes"
1310 --disable-membarrier) membarrier
="no"
1312 --enable-membarrier) membarrier
="yes"
1314 --disable-blobs) blobs
="no"
1316 --with-pkgversion=*) pkgversion
="$optarg"
1318 --with-coroutine=*) coroutine
="$optarg"
1320 --disable-coroutine-pool) coroutine_pool
="no"
1322 --enable-coroutine-pool) coroutine_pool
="yes"
1324 --enable-debug-stack-usage) debug_stack_usage
="yes"
1326 --enable-crypto-afalg) crypto_afalg
="yes"
1328 --disable-crypto-afalg) crypto_afalg
="no"
1330 --disable-docs) docs
="no"
1332 --enable-docs) docs
="yes"
1334 --disable-vhost-net) vhost_net
="no"
1336 --enable-vhost-net) vhost_net
="yes"
1338 --disable-vhost-crypto) vhost_crypto
="no"
1340 --enable-vhost-crypto) vhost_crypto
="yes"
1342 --disable-vhost-scsi) vhost_scsi
="no"
1344 --enable-vhost-scsi) vhost_scsi
="yes"
1346 --disable-vhost-vsock) vhost_vsock
="no"
1348 --enable-vhost-vsock) vhost_vsock
="yes"
1350 --disable-vhost-user-fs) vhost_user_fs
="no"
1352 --enable-vhost-user-fs) vhost_user_fs
="yes"
1354 --disable-opengl) opengl
="no"
1356 --enable-opengl) opengl
="yes"
1358 --disable-rbd) rbd
="no"
1360 --enable-rbd) rbd
="yes"
1362 --disable-xfsctl) xfs
="no"
1364 --enable-xfsctl) xfs
="yes"
1366 --disable-smartcard) smartcard
="no"
1368 --enable-smartcard) smartcard
="yes"
1370 --disable-u2f) u2f
="disabled"
1372 --enable-u2f) u2f
="enabled"
1374 --disable-libusb) libusb
="no"
1376 --enable-libusb) libusb
="yes"
1378 --disable-usb-redir) usb_redir
="no"
1380 --enable-usb-redir) usb_redir
="yes"
1382 --disable-zlib-test)
1384 --disable-lzo) lzo
="no"
1386 --enable-lzo) lzo
="yes"
1388 --disable-snappy) snappy
="no"
1390 --enable-snappy) snappy
="yes"
1392 --disable-bzip2) bzip2="no"
1394 --enable-bzip2) bzip2="yes"
1396 --enable-lzfse) lzfse
="yes"
1398 --disable-lzfse) lzfse
="no"
1400 --disable-zstd) zstd
="no"
1402 --enable-zstd) zstd
="yes"
1404 --enable-guest-agent) guest_agent
="yes"
1406 --disable-guest-agent) guest_agent
="no"
1408 --enable-guest-agent-msi) guest_agent_msi
="yes"
1410 --disable-guest-agent-msi) guest_agent_msi
="no"
1412 --with-vss-sdk) vss_win32_sdk
=""
1414 --with-vss-sdk=*) vss_win32_sdk
="$optarg"
1416 --without-vss-sdk) vss_win32_sdk
="no"
1418 --with-win-sdk) win_sdk
=""
1420 --with-win-sdk=*) win_sdk
="$optarg"
1422 --without-win-sdk) win_sdk
="no"
1424 --enable-tools) want_tools
="yes"
1426 --disable-tools) want_tools
="no"
1428 --enable-seccomp) seccomp
="yes"
1430 --disable-seccomp) seccomp
="no"
1432 --disable-glusterfs) glusterfs
="no"
1434 --disable-avx2) avx2_opt
="no"
1436 --enable-avx2) avx2_opt
="yes"
1438 --disable-avx512f) avx512f_opt
="no"
1440 --enable-avx512f) avx512f_opt
="yes"
1443 --enable-glusterfs) glusterfs
="yes"
1445 --disable-virtio-blk-data-plane|
--enable-virtio-blk-data-plane)
1446 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1448 --enable-vhdx|
--disable-vhdx)
1449 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1451 --enable-uuid|
--disable-uuid)
1452 echo "$0: $opt is obsolete, UUID support is always built" >&2
1454 --disable-gtk) gtk
="no"
1456 --enable-gtk) gtk
="yes"
1458 --tls-priority=*) tls_priority
="$optarg"
1460 --disable-gnutls) gnutls
="no"
1462 --enable-gnutls) gnutls
="yes"
1464 --disable-nettle) nettle
="no"
1466 --enable-nettle) nettle
="yes"
1468 --disable-gcrypt) gcrypt
="no"
1470 --enable-gcrypt) gcrypt
="yes"
1472 --disable-auth-pam) auth_pam
="no"
1474 --enable-auth-pam) auth_pam
="yes"
1476 --enable-rdma) rdma
="yes"
1478 --disable-rdma) rdma
="no"
1480 --enable-pvrdma) pvrdma
="yes"
1482 --disable-pvrdma) pvrdma
="no"
1484 --disable-vte) vte
="no"
1486 --enable-vte) vte
="yes"
1488 --disable-virglrenderer) virglrenderer
="no"
1490 --enable-virglrenderer) virglrenderer
="yes"
1492 --disable-tpm) tpm
="no"
1494 --enable-tpm) tpm
="yes"
1496 --disable-libssh) libssh
="no"
1498 --enable-libssh) libssh
="yes"
1500 --disable-live-block-migration) live_block_migration
="no"
1502 --enable-live-block-migration) live_block_migration
="yes"
1504 --disable-numa) numa
="no"
1506 --enable-numa) numa
="yes"
1508 --disable-libxml2) libxml2
="no"
1510 --enable-libxml2) libxml2
="yes"
1512 --disable-tcmalloc) tcmalloc
="no"
1514 --enable-tcmalloc) tcmalloc
="yes"
1516 --disable-jemalloc) jemalloc
="no"
1518 --enable-jemalloc) jemalloc
="yes"
1520 --disable-replication) replication
="no"
1522 --enable-replication) replication
="yes"
1524 --disable-bochs) bochs
="no"
1526 --enable-bochs) bochs
="yes"
1528 --disable-cloop) cloop
="no"
1530 --enable-cloop) cloop
="yes"
1532 --disable-dmg) dmg
="no"
1534 --enable-dmg) dmg
="yes"
1536 --disable-qcow1) qcow1
="no"
1538 --enable-qcow1) qcow1
="yes"
1540 --disable-vdi) vdi
="no"
1542 --enable-vdi) vdi
="yes"
1544 --disable-vvfat) vvfat
="no"
1546 --enable-vvfat) vvfat
="yes"
1548 --disable-qed) qed
="no"
1550 --enable-qed) qed
="yes"
1552 --disable-parallels) parallels
="no"
1554 --enable-parallels) parallels
="yes"
1556 --disable-sheepdog) sheepdog
="no"
1558 --enable-sheepdog) sheepdog
="yes"
1560 --disable-vhost-user) vhost_user
="no"
1562 --enable-vhost-user) vhost_user
="yes"
1564 --disable-vhost-vdpa) vhost_vdpa
="no"
1566 --enable-vhost-vdpa) vhost_vdpa
="yes"
1568 --disable-vhost-kernel) vhost_kernel
="no"
1570 --enable-vhost-kernel) vhost_kernel
="yes"
1572 --disable-capstone) capstone
="no"
1574 --enable-capstone) capstone
="yes"
1576 --enable-capstone=git
) capstone
="git"
1578 --enable-capstone=system
) capstone
="system"
1580 --with-git=*) git
="$optarg"
1582 --enable-git-update) git_update
=yes
1584 --disable-git-update) git_update
=no
1586 --enable-debug-mutex) debug_mutex
=yes
1588 --disable-debug-mutex) debug_mutex
=no
1590 --enable-libpmem) libpmem
=yes
1592 --disable-libpmem) libpmem
=no
1594 --enable-xkbcommon) xkbcommon
="enabled"
1596 --disable-xkbcommon) xkbcommon
="disabled"
1598 --enable-plugins) plugins
="yes"
1600 --disable-plugins) plugins
="no"
1602 --enable-containers) use_containers
="yes"
1604 --disable-containers) use_containers
="no"
1606 --enable-fuzzing) fuzzing
=yes
1608 --disable-fuzzing) fuzzing
=no
1610 --gdb=*) gdb_bin
="$optarg"
1612 --enable-rng-none) rng_none
=yes
1614 --disable-rng-none) rng_none
=no
1616 --enable-keyring) secret_keyring
="yes"
1618 --disable-keyring) secret_keyring
="no"
1620 --enable-libdaxctl) libdaxctl
=yes
1622 --disable-libdaxctl) libdaxctl
=no
1625 echo "ERROR: unknown option $opt"
1626 echo "Try '$0 --help' for more information"
1632 firmwarepath
="${firmwarepath:-$prefix/share/qemu-firmware}"
1633 libdir
="${libdir:-$prefix/lib}"
1634 libexecdir
="${libexecdir:-$prefix/libexec}"
1635 includedir
="${includedir:-$prefix/include}"
1637 if test "$mingw32" = "yes" ; then
1642 sysconfdir
="$prefix"
1645 mandir
="${mandir:-$prefix/share/man}"
1646 datadir
="${datadir:-$prefix/share}"
1647 docdir
="${docdir:-$prefix/share/doc}"
1648 bindir
="${bindir:-$prefix/bin}"
1649 sysconfdir
="${sysconfdir:-$prefix/etc}"
1650 local_statedir
="${local_statedir:-$prefix/var}"
1656 QEMU_LDFLAGS
="-m32 $QEMU_LDFLAGS"
1660 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1663 CPU_CFLAGS
="-m32 -mv8plus -mcpu=ultrasparc"
1664 QEMU_LDFLAGS
="-m32 -mv8plus $QEMU_LDFLAGS"
1667 CPU_CFLAGS
="-m64 -mcpu=ultrasparc"
1668 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1672 QEMU_LDFLAGS
="-m31 $QEMU_LDFLAGS"
1676 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1680 QEMU_LDFLAGS
="-m32 $QEMU_LDFLAGS"
1683 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1684 # If we truly care, we should simply detect this case at
1685 # runtime and generate the fallback to serial emulation.
1686 CPU_CFLAGS
="-m64 -mcx16"
1687 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1691 QEMU_LDFLAGS
="-mx32 $QEMU_LDFLAGS"
1693 # No special flags required for other host CPUs
1696 eval "cross_cc_${cpu}=\$host_cc"
1697 cross_cc_vars
="$cross_cc_vars cross_cc_${cpu}"
1698 QEMU_CFLAGS
="$CPU_CFLAGS $QEMU_CFLAGS"
1700 # For user-mode emulation the host arch has to be one we explicitly
1701 # support, even if we're using TCI.
1702 if [ "$ARCH" = "unknown" ]; then
1707 if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1711 default_target_list
=""
1715 if [ "$softmmu" = "yes" ]; then
1716 mak_wilds
="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1718 if [ "$linux_user" = "yes" ]; then
1719 mak_wilds
="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1721 if [ "$bsd_user" = "yes" ]; then
1722 mak_wilds
="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1725 if test -z "$target_list_exclude" -a -z "$target_list"; then
1726 # if the user doesn't specify anything lets skip deprecating stuff
1727 target_list_exclude
=ppc64abi32-linux-user
1730 exclude_list
=$
(echo "$target_list_exclude" |
sed -e 's/,/ /g')
1731 for config
in $mak_wilds; do
1732 target
="$(basename "$config" .mak)"
1734 for excl
in $exclude_list; do
1735 if test "$excl" = "$target"; then
1740 if test "$exclude" = "no"; then
1741 default_target_list
="${default_target_list} $target"
1745 # Enumerate public trace backends for --help output
1746 trace_backend_list
=$
(echo $
(grep -le '^PUBLIC = True$' "$source_path"/scripts
/tracetool
/backend
/*.py |
sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1748 if test x
"$show_help" = x
"yes" ; then
1751 Usage: configure [options]
1752 Options: [defaults in brackets after descriptions]
1755 --help print this message
1756 --prefix=PREFIX install in PREFIX [$prefix]
1757 --interp-prefix=PREFIX where to find shared libraries, etc.
1758 use %M for cpu name [$interp_prefix]
1759 --target-list=LIST set target list (default: build everything)
1760 $(echo Available targets: $default_target_list | \
1761 fold -s -w 53 | sed -e 's/^/ /')
1762 --target-list-exclude=LIST exclude a set of targets from the default target-list
1764 Advanced options (experts only):
1765 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1766 --cc=CC use C compiler CC [$cc]
1767 --iasl=IASL use ACPI compiler IASL [$iasl]
1768 --host-cc=CC use C compiler CC [$host_cc] for code run at
1770 --cxx=CXX use C++ compiler CXX [$cxx]
1771 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1772 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1773 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1774 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1775 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1776 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1777 --make=MAKE use specified make [$make]
1778 --python=PYTHON use specified python [$python]
1779 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1780 --meson=MESON use specified meson [$meson]
1781 --ninja=NINJA use specified ninja [$ninja]
1782 --smbd=SMBD use specified smbd [$smbd]
1783 --with-git=GIT use specified git [$git]
1784 --static enable static build [$static]
1785 --mandir=PATH install man pages in PATH
1786 --datadir=PATH install firmware in PATH/$qemu_suffix
1787 --docdir=PATH install documentation in PATH/$qemu_suffix
1788 --bindir=PATH install binaries in PATH
1789 --libdir=PATH install libraries in PATH
1790 --libexecdir=PATH install helper binaries in PATH
1791 --sysconfdir=PATH install config in PATH/$qemu_suffix
1792 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1793 --firmwarepath=PATH search PATH for firmware files
1794 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1795 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1796 --with-pkgversion=VERS use specified string as sub-version of the package
1797 --enable-debug enable common debug build options
1798 --enable-sanitizers enable default sanitizers
1799 --enable-tsan enable thread sanitizer
1800 --disable-strip disable stripping binaries
1801 --disable-werror disable compilation abort on warning
1802 --disable-stack-protector disable compiler-provided stack protection
1803 --audio-drv-list=LIST set audio drivers list:
1804 Available drivers: $audio_possible_drivers
1805 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1806 --block-drv-rw-whitelist=L
1807 set block driver read-write whitelist
1808 (affects only QEMU, not qemu-img)
1809 --block-drv-ro-whitelist=L
1810 set block driver read-only whitelist
1811 (affects only QEMU, not qemu-img)
1812 --enable-trace-backends=B Set trace backend
1813 Available backends: $trace_backend_list
1814 --with-trace-file=NAME Full PATH,NAME of file to store traces
1816 --disable-slirp disable SLIRP userspace network connectivity
1817 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1818 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1819 --oss-lib path to OSS library
1820 --cpu=CPU Build for host CPU [$cpu]
1821 --with-coroutine=BACKEND coroutine backend. Supported options:
1822 ucontext, sigaltstack, windows
1823 --enable-gcov enable test coverage analysis with gcov
1824 --disable-blobs disable installing provided firmware blobs
1825 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1826 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1827 --tls-priority default TLS protocol/cipher priority string
1828 --enable-gprof QEMU profiling with gprof
1829 --enable-profiler profiler support
1830 --enable-debug-stack-usage
1831 track the maximum stack usage of stacks created by qemu_alloc_stack
1833 enable plugins via shared library loading
1834 --disable-containers don't use containers for cross-building
1835 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1837 Optional features, enabled with --enable-FEATURE and
1838 disabled with --disable-FEATURE, default is enabled if available:
1840 system all system emulation targets
1841 user supported user emulation targets
1842 linux-user all linux usermode emulation targets
1843 bsd-user all BSD usermode emulation targets
1844 docs build documentation
1845 guest-agent build the QEMU Guest Agent
1846 guest-agent-msi build guest agent Windows MSI installation package
1847 pie Position Independent Executables
1848 modules modules support (non-Windows)
1849 module-upgrades try to load modules from alternate paths for upgrades
1850 debug-tcg TCG debugging (default is disabled)
1851 debug-info debugging information
1852 sparse sparse checker
1853 safe-stack SafeStack Stack Smash Protection. Depends on
1854 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1856 gnutls GNUTLS cryptography support
1857 nettle nettle cryptography support
1858 gcrypt libgcrypt cryptography support
1859 auth-pam PAM access control
1861 sdl-image SDL Image support for icons
1863 vte vte support for the gtk UI
1865 iconv font glyph conversion support
1867 vnc-sasl SASL encryption for VNC server
1868 vnc-jpeg JPEG lossy compression for VNC server
1869 vnc-png PNG compression for VNC server
1870 cocoa Cocoa UI (Mac OS X only)
1872 mpath Multipath persistent reservation passthrough
1873 xen xen backend driver support
1874 xen-pci-passthrough PCI passthrough support for Xen
1875 brlapi BrlAPI (Braile)
1876 curl curl connectivity
1877 membarrier membarrier system call (for Linux 4.14+ or Windows)
1879 kvm KVM acceleration support
1880 hax HAX acceleration support
1881 hvf Hypervisor.framework acceleration support
1882 whpx Windows Hypervisor Platform acceleration support
1883 rdma Enable RDMA-based migration
1884 pvrdma Enable PVRDMA support
1885 vde support for vde network
1886 netmap support for netmap network
1887 linux-aio Linux AIO support
1888 linux-io-uring Linux io_uring support
1889 cap-ng libcap-ng support
1890 attr attr and xattr support
1891 vhost-net vhost-net kernel acceleration support
1892 vhost-vsock virtio sockets device support
1893 vhost-scsi vhost-scsi kernel target support
1894 vhost-crypto vhost-user-crypto backend support
1895 vhost-kernel vhost kernel backend support
1896 vhost-user vhost-user backend support
1897 vhost-vdpa vhost-vdpa kernel backend support
1899 rbd rados block device (rbd)
1900 libiscsi iscsi support
1902 smartcard smartcard support (libcacard)
1903 u2f U2F support (u2f-emu)
1904 libusb libusb (for usb passthrough)
1905 live-block-migration Block migration in the main migration stream
1906 usb-redir usb network redirection support
1907 lzo support of lzo compression library
1908 snappy support of snappy compression library
1909 bzip2 support of bzip2 compression library
1910 (for reading bzip2-compressed dmg images)
1911 lzfse support of lzfse compression library
1912 (for reading lzfse-compressed dmg images)
1913 zstd support for zstd compression library
1914 (for migration compression and qcow2 cluster compression)
1915 seccomp seccomp support
1916 coroutine-pool coroutine freelist (better performance)
1917 glusterfs GlusterFS backend
1919 libssh ssh block device support
1920 numa libnuma support
1921 libxml2 for Parallels image format
1922 tcmalloc tcmalloc support
1923 jemalloc jemalloc support
1924 avx2 AVX2 optimization support
1925 avx512f AVX512F optimization support
1926 replication replication support
1927 opengl opengl support
1928 virglrenderer virgl rendering support
1929 xfsctl xfsctl support
1930 qom-cast-debug cast debugging support
1931 tools build qemu-io, qemu-nbd and qemu-img tools
1932 bochs bochs image format support
1933 cloop cloop image format support
1934 dmg dmg image format support
1935 qcow1 qcow v1 image format support
1936 vdi vdi image format support
1937 vvfat vvfat image format support
1938 qed qed image format support
1939 parallels parallels image format support
1940 sheepdog sheepdog block driver support
1941 crypto-afalg Linux AF_ALG crypto backend driver
1942 capstone capstone disassembler support
1943 debug-mutex mutex debugging support
1944 libpmem libpmem support
1945 xkbcommon xkbcommon support
1946 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1947 libdaxctl libdaxctl support
1949 NOTE: The object files are built at the place where configure is launched
1954 # Remove old dependency files to make sure that they get properly regenerated
1955 rm -f */config-devices.mak.d
1957 if test -z "$python"
1959 error_exit
"Python not found. Use --python=/path/to/python"
1962 # Note that if the Python conditional here evaluates True we will exit
1963 # with status 1 which is a shell 'false' value.
1964 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1965 error_exit
"Cannot use '$python', Python >= 3.5 is required." \
1966 "Use --python=/path/to/python to specify a supported Python."
1969 # Preserve python version since some functionality is dependent on it
1970 python_version
=$
($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev
/null
)
1972 # Suppress writing compiled files
1975 if test -z "$meson"; then
1976 if test "$explicit_python" = no
&& has meson
&& version_ge
"$(meson --version)" 0.55.1; then
1978 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
1980 elif test -e "${source_path}/meson/meson.py" ; then
1983 if test "$explicit_python" = yes; then
1984 error_exit
"--python requires using QEMU's embedded Meson distribution, but it was not found."
1986 error_exit
"Meson not found. Use --meson=/path/to/meson"
1990 # Meson uses its own Python interpreter to invoke other Python scripts,
1991 # but the user wants to use the one they specified with --python.
1993 # We do not want to override the distro Python interpreter (and sometimes
1994 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1995 # just require --meson=git|internal together with --python.
1996 if test "$explicit_python" = yes; then
1999 *) error_exit
"--python requires using QEMU's embedded Meson distribution." ;;
2004 if test "$meson" = git
; then
2005 git_submodules
="${git_submodules} meson"
2010 if ! $python -c 'import pkg_resources' > /dev
/null
2>&1; then
2011 error_exit
"Python setuptools not found"
2013 meson
="$python ${source_path}/meson/meson.py"
2015 *) meson
=$
(command -v meson
) ;;
2018 # Probe for ninja (used for compdb)
2020 if test -z "$ninja"; then
2021 for c
in ninja ninja-build samu
; do
2023 ninja
=$
(command -v "$c")
2029 # Check that the C compiler works. Doing this here before testing
2030 # the host CPU ensures that we had a valid CC to autodetect the
2031 # $cpu var (and we should bail right here if that's not the case).
2032 # It also allows the help message to be printed without a CC.
2034 if compile_object
; then
2035 : C compiler works ok
2037 error_exit
"\"$cc\" either does not exist or does not work"
2039 if ! compile_prog
; then
2040 error_exit
"\"$cc\" cannot build an executable (is your linker broken?)"
2043 # Now we have handled --enable-tcg-interpreter and know we're not just
2044 # printing the help message, bail out if the host CPU isn't supported.
2045 if test "$ARCH" = "unknown"; then
2046 if test "$tcg_interpreter" = "yes" ; then
2047 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2049 error_exit
"Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2053 # Consult white-list to determine whether to enable werror
2054 # by default. Only enable by default for git builds
2055 if test -z "$werror" ; then
2056 if test -e "$source_path/.git" && \
2057 { test "$linux" = "yes" ||
test "$mingw32" = "yes"; }; then
2064 if test "$bogus_os" = "yes"; then
2065 # Now that we know that we're not printing the help and that
2066 # the compiler works (so the results of the check_defines we used
2067 # to identify the OS are reliable), if we didn't recognize the
2068 # host OS we should stop now.
2069 error_exit
"Unrecognized host OS (uname -s reports '$(uname -s)')"
2072 # Check whether the compiler matches our minimum requirements:
2074 #if defined(__clang_major__) && defined(__clang_minor__)
2075 # ifdef __apple_build_version__
2076 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2077 # error You need at least XCode Clang v5.1 to compile QEMU
2080 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2081 # error You need at least Clang v3.4 to compile QEMU
2084 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2085 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2086 # error You need at least GCC v4.8 to compile QEMU
2089 # error You either need GCC or Clang to compiler QEMU
2091 int main (void) { return 0; }
2093 if ! compile_prog
"" "" ; then
2094 error_exit
"You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2097 # Accumulate -Wfoo and -Wno-bar separately.
2098 # We will list all of the enable flags first, and the disable flags second.
2099 # Note that we do not add -Werror, because that would enable it for all
2100 # configure tests. If a configure test failed due to -Werror this would
2101 # just silently disable some features, so it's too error prone.
2104 add_to warn_flags
-Wold-style-declaration
2105 add_to warn_flags
-Wold-style-definition
2106 add_to warn_flags
-Wtype-limits
2107 add_to warn_flags
-Wformat-security
2108 add_to warn_flags
-Wformat-y2k
2109 add_to warn_flags
-Winit-self
2110 add_to warn_flags
-Wignored-qualifiers
2111 add_to warn_flags
-Wempty-body
2112 add_to warn_flags
-Wnested-externs
2113 add_to warn_flags
-Wendif-labels
2114 add_to warn_flags
-Wexpansion-to-defined
2117 add_to nowarn_flags
-Wno-initializer-overrides
2118 add_to nowarn_flags
-Wno-missing-include-dirs
2119 add_to nowarn_flags
-Wno-shift-negative-value
2120 add_to nowarn_flags
-Wno-string-plus-int
2121 add_to nowarn_flags
-Wno-typedef-redefinition
2122 add_to nowarn_flags
-Wno-tautological-type-limit-compare
2123 add_to nowarn_flags
-Wno-psabi
2125 gcc_flags
="$warn_flags $nowarn_flags"
2127 cc_has_warning_flag
() {
2130 # Use the positive sense of the flag when testing for -Wno-wombat
2131 # support (gcc will happily accept the -Wno- form of unknown
2133 optflag
="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2134 compile_prog
"-Werror $optflag" ""
2137 for flag
in $gcc_flags; do
2138 if cc_has_warning_flag
$flag ; then
2139 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
2143 if test "$stack_protector" != "no"; then
2145 int main(int argc, char *argv[])
2147 char arr[64], *p = arr, *c = argv[0];
2154 gcc_flags
="-fstack-protector-strong -fstack-protector-all"
2156 for flag
in $gcc_flags; do
2157 # We need to check both a compile and a link, since some compiler
2158 # setups fail only on a .c->.o compile and some only at link time
2159 if compile_object
"-Werror $flag" &&
2160 compile_prog
"-Werror $flag" ""; then
2161 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
2162 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
2167 if test "$stack_protector" = yes; then
2168 if test $sp_on = 0; then
2169 error_exit
"Stack protector not supported"
2174 # Disable -Wmissing-braces on older compilers that warn even for
2175 # the "universal" C zero initializer {0}.
2181 if compile_object
"-Werror" "" ; then
2184 QEMU_CFLAGS
="$QEMU_CFLAGS -Wno-missing-braces"
2187 # Our module code doesn't support Windows
2188 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2189 error_exit
"Modules are not available for Windows"
2192 # module_upgrades is only reasonable if modules are enabled
2193 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2194 error_exit
"Can't enable module-upgrades as Modules are not enabled"
2197 # Static linking is not possible with modules or PIE
2198 if test "$static" = "yes" ; then
2199 if test "$modules" = "yes" ; then
2200 error_exit
"static and modules are mutually incompatible"
2204 # Unconditional check for compiler __thread support
2206 static __thread int tls_var;
2207 int main(void) { return tls_var; }
2210 if ! compile_prog
"-Werror" "" ; then
2211 error_exit
"Your compiler does not support the __thread specifier for " \
2212 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2218 # define THREAD __thread
2222 static THREAD int tls_var;
2223 int main(void) { return tls_var; }
2226 # Check we support --no-pie first; we will need this for building ROMs.
2227 if compile_prog
"-Werror -fno-pie" "-no-pie"; then
2228 CFLAGS_NOPIE
="-fno-pie"
2229 LDFLAGS_NOPIE
="-no-pie"
2232 if test "$static" = "yes"; then
2233 if test "$pie" != "no" && compile_prog
"-Werror -fPIE -DPIE" "-static-pie"; then
2234 CFLAGS
="-fPIE -DPIE $CFLAGS"
2235 QEMU_LDFLAGS
="-static-pie $QEMU_LDFLAGS"
2237 elif test "$pie" = "yes"; then
2238 error_exit
"-static-pie not available due to missing toolchain support"
2240 QEMU_LDFLAGS
="-static $QEMU_LDFLAGS"
2243 elif test "$pie" = "no"; then
2244 CFLAGS
="$CFLAGS_NOPIE $CFLAGS"
2245 LDFLAGS
="$LDFLAGS_NOPIE $LDFLAGS"
2246 elif compile_prog
"-Werror -fPIE -DPIE" "-pie"; then
2247 CFLAGS
="-fPIE -DPIE $CFLAGS"
2248 LDFLAGS
="-pie $LDFLAGS"
2250 elif test "$pie" = "yes"; then
2251 error_exit
"PIE not available due to missing toolchain support"
2253 echo "Disabling PIE due to missing toolchain support"
2257 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2258 # The combination is known as "full relro", because .got.plt is read-only too.
2259 if compile_prog
"" "-Wl,-z,relro -Wl,-z,now" ; then
2260 QEMU_LDFLAGS
="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2263 ##########################################
2264 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2265 # use i686 as default anyway, but for those that don't, an explicit
2266 # specification is necessary
2268 if test "$cpu" = "i386"; then
2270 static int sfaa(int *ptr)
2272 return __sync_fetch_and_and(ptr, 0);
2278 val = __sync_val_compare_and_swap(&val, 0, 1);
2283 if ! compile_prog
"" "" ; then
2284 QEMU_CFLAGS
="-march=i486 $QEMU_CFLAGS"
2288 #########################################
2289 # Solaris specific configure tool chain decisions
2291 if test "$solaris" = "yes" ; then
2295 if test -f /usr
/ccs
/bin
/ar ; then
2296 error_exit
"No path includes ar" \
2297 "Add /usr/ccs/bin to your path and rerun configure"
2299 error_exit
"No path includes ar"
2303 if test -z "${target_list+xxx}" ; then
2304 for target
in $default_target_list; do
2305 supported_target
$target 2>/dev
/null
&& \
2306 target_list
="$target_list $target"
2308 target_list
="${target_list# }"
2310 target_list
=$
(echo "$target_list" |
sed -e 's/,/ /g')
2311 for target
in $target_list; do
2312 # Check that we recognised the target name; this allows a more
2313 # friendly error message than if we let it fall through.
2314 case " $default_target_list " in
2318 error_exit
"Unknown target name '$target'"
2321 supported_target
$target ||
exit 1
2325 # see if system emulation was really requested
2326 case " $target_list " in
2327 *"-softmmu "*) softmmu
=yes
2333 for target
in $target_list; do
2335 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu
)
2340 # The EDK2 binaries are compressed with bzip2
2341 if test "$edk2_blobs" = "yes" && ! has
bzip2; then
2342 error_exit
"The bzip2 program is required for building QEMU"
2345 feature_not_found
() {
2349 error_exit
"User requested feature $feature" \
2350 "configure was not able to find it." \
2355 # big/little endian test
2357 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2358 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2359 extern int foo(short *, short *);
2360 int main(int argc, char *argv[]) {
2361 return foo(big_endian, little_endian);
2365 if compile_object
; then
2366 if strings -a $TMPO |
grep -q BiGeNdIaN
; then
2368 elif strings -a $TMPO |
grep -q LiTtLeEnDiAn
; then
2371 echo big
/little
test failed
2374 echo big
/little
test failed
2377 ##########################################
2379 if test -z "$want_tools"; then
2380 if test "$softmmu" = "no"; then
2387 ##########################################
2388 # cocoa implies not SDL or GTK
2389 # (the cocoa UI code currently assumes it is always the active UI
2390 # and doesn't interact well with other UI frontend code)
2391 if test "$cocoa" = "yes"; then
2392 if test "$sdl" = "yes"; then
2393 error_exit
"Cocoa and SDL UIs cannot both be enabled at once"
2395 if test "$gtk" = "yes"; then
2396 error_exit
"Cocoa and GTK UIs cannot both be enabled at once"
2402 # Some versions of Mac OS X incorrectly define SIZE_MAX
2406 int main(int argc, char *argv[]) {
2407 return printf("%zu", SIZE_MAX);
2410 have_broken_size_max
=no
2411 if ! compile_object
-Werror ; then
2412 have_broken_size_max
=yes
2415 ##########################################
2419 #include <sys/socket.h>
2420 #include <linux/ip.h>
2421 int main(void) { return sizeof(struct mmsghdr); }
2423 if compile_prog
"" "" ; then
2429 if check_include
"pty.h" ; then
2436 #include <sys/mman.h>
2437 int main(int argc, char *argv[]) {
2438 return mlockall(MCL_FUTURE);
2441 if compile_prog
"" "" ; then
2447 #########################################
2448 # vhost interdependencies and host support
2451 test "$vhost_user" = "" && vhost_user
=yes
2452 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2453 error_exit
"vhost-user isn't available on win32"
2455 test "$vhost_vdpa" = "" && vhost_vdpa
=$linux
2456 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2457 error_exit
"vhost-vdpa is only available on Linux"
2459 test "$vhost_kernel" = "" && vhost_kernel
=$linux
2460 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2461 error_exit
"vhost-kernel is only available on Linux"
2464 # vhost-kernel devices
2465 test "$vhost_scsi" = "" && vhost_scsi
=$vhost_kernel
2466 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2467 error_exit
"--enable-vhost-scsi requires --enable-vhost-kernel"
2469 test "$vhost_vsock" = "" && vhost_vsock
=$vhost_kernel
2470 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2471 error_exit
"--enable-vhost-vsock requires --enable-vhost-kernel"
2474 # vhost-user backends
2475 test "$vhost_net_user" = "" && vhost_net_user
=$vhost_user
2476 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2477 error_exit
"--enable-vhost-net-user requires --enable-vhost-user"
2479 test "$vhost_crypto" = "" && vhost_crypto
=$vhost_user
2480 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2481 error_exit
"--enable-vhost-crypto requires --enable-vhost-user"
2483 test "$vhost_user_fs" = "" && vhost_user_fs
=$vhost_user
2484 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2485 error_exit
"--enable-vhost-user-fs requires --enable-vhost-user"
2487 #vhost-vdpa backends
2488 test "$vhost_net_vdpa" = "" && vhost_net_vdpa
=$vhost_vdpa
2489 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2490 error_exit
"--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2493 # OR the vhost-kernel and vhost-user values for simplicity
2494 if test "$vhost_net" = ""; then
2495 test "$vhost_net_user" = "yes" && vhost_net
=yes
2496 test "$vhost_kernel" = "yes" && vhost_net
=yes
2499 ##########################################
2500 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2502 if test "$mingw32" = "yes"; then
2503 # Some versions of MinGW / Mingw-w64 lack localtime_r
2504 # and gmtime_r entirely.
2506 # Some versions of Mingw-w64 define a macro for
2507 # localtime_r/gmtime_r.
2509 # Some versions of Mingw-w64 will define functions
2510 # for localtime_r/gmtime_r, but only if you have
2511 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2512 # though, unistd.h and pthread.h both define
2515 # So this #undef localtime_r and #include <unistd.h>
2516 # are not in fact redundant.
2521 int main(void) { localtime_r(NULL, NULL); return 0; }
2523 if compile_prog
"" "" ; then
2530 ##########################################
2533 if ! has
"$pkg_config_exe"; then
2534 error_exit
"pkg-config binary '$pkg_config_exe' not found"
2537 ##########################################
2540 if test "$linux_user" = "yes"; then
2543 #include <linux/futex.h>
2545 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2551 if ! compile_object
; then
2552 feature_not_found
"nptl" "Install glibc and linux kernel headers."
2556 ##########################################
2559 if test "$lzo" != "no" ; then
2561 #include <lzo/lzo1x.h>
2562 int main(void) { lzo_version(); return 0; }
2564 if compile_prog
"" "-llzo2" ; then
2568 if test "$lzo" = "yes"; then
2569 feature_not_found
"liblzo2" "Install liblzo2 devel"
2575 ##########################################
2578 if test "$snappy" != "no" ; then
2580 #include <snappy-c.h>
2581 int main(void) { snappy_max_compressed_length(4096); return 0; }
2583 if compile_prog
"" "-lsnappy" ; then
2584 snappy_libs
='-lsnappy'
2587 if test "$snappy" = "yes"; then
2588 feature_not_found
"libsnappy" "Install libsnappy devel"
2594 ##########################################
2597 if test "$bzip2" != "no" ; then
2600 int main(void) { BZ2_bzlibVersion(); return 0; }
2602 if compile_prog
"" "-lbz2" ; then
2605 if test "$bzip2" = "yes"; then
2606 feature_not_found
"libbzip2" "Install libbzip2 devel"
2612 ##########################################
2615 if test "$lzfse" != "no" ; then
2618 int main(void) { lzfse_decode_scratch_size(); return 0; }
2620 if compile_prog
"" "-llzfse" ; then
2623 if test "$lzfse" = "yes"; then
2624 feature_not_found
"lzfse" "Install lzfse devel"
2630 ##########################################
2633 if test "$zstd" != "no" ; then
2634 libzstd_minver
="1.4.0"
2635 if $pkg_config --atleast-version=$libzstd_minver libzstd
; then
2636 zstd_cflags
="$($pkg_config --cflags libzstd)"
2637 zstd_libs
="$($pkg_config --libs libzstd)"
2640 if test "$zstd" = "yes" ; then
2641 feature_not_found
"libzstd" "Install libzstd devel"
2647 ##########################################
2650 if test "$seccomp" != "no" ; then
2651 libseccomp_minver
="2.3.0"
2652 if $pkg_config --atleast-version=$libseccomp_minver libseccomp
; then
2653 seccomp_cflags
="$($pkg_config --cflags libseccomp)"
2654 seccomp_libs
="$($pkg_config --libs libseccomp)"
2657 if test "$seccomp" = "yes" ; then
2658 feature_not_found
"libseccomp" \
2659 "Install libseccomp devel >= $libseccomp_minver"
2664 ##########################################
2667 if test "$xen" != "no" ; then
2668 # Check whether Xen library path is specified via --extra-ldflags to avoid
2669 # overriding this setting with pkg-config output. If not, try pkg-config
2670 # to obtain all needed flags.
2672 if ! echo $EXTRA_LDFLAGS |
grep tools
/libxc
> /dev
/null
&& \
2673 $pkg_config --exists xencontrol
; then
2674 xen_ctrl_version
="$(printf '%d%02d%02d' \
2675 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2677 xen_pc
="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2678 xen_pc
="$xen_pc xenevtchn xendevicemodel"
2679 if $pkg_config --exists xentoolcore
; then
2680 xen_pc
="$xen_pc xentoolcore"
2682 xen_cflags
="$($pkg_config --cflags $xen_pc)"
2683 xen_libs
="$($pkg_config --libs $xen_pc)"
2686 xen_libs
="-lxenstore -lxenctrl -lxenguest"
2687 xen_stable_libs
="-lxenforeignmemory -lxengnttab -lxenevtchn"
2689 # First we test whether Xen headers and libraries are available.
2690 # If no, we are done and there is no Xen support.
2691 # If yes, more tests are run to detect the Xen version.
2695 #include <xenctrl.h>
2700 if ! compile_prog
"" "$xen_libs" ; then
2702 if test "$xen" = "yes" ; then
2703 feature_not_found
"xen" "Install xen devel"
2709 cat > $TMPC <<EOF &&
2710 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2711 #define __XEN_TOOLS__
2712 #include <xendevicemodel.h>
2713 #include <xenforeignmemory.h>
2715 xendevicemodel_handle *xd;
2716 xenforeignmemory_handle *xfmem;
2718 xd = xendevicemodel_open(0, 0);
2719 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2721 xfmem = xenforeignmemory_open(0, 0);
2722 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2727 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2729 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2730 xen_ctrl_version
=41100
2733 cat > $TMPC <<EOF &&
2734 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2735 #include <xenforeignmemory.h>
2736 #include <xentoolcore.h>
2738 xenforeignmemory_handle *xfmem;
2740 xfmem = xenforeignmemory_open(0, 0);
2741 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2742 xentoolcore_restrict_all(0);
2747 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2749 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2750 xen_ctrl_version
=41000
2753 cat > $TMPC <<EOF &&
2754 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2755 #define __XEN_TOOLS__
2756 #include <xendevicemodel.h>
2758 xendevicemodel_handle *xd;
2760 xd = xendevicemodel_open(0, 0);
2761 xendevicemodel_close(xd);
2766 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs"
2768 xen_stable_libs
="-lxendevicemodel $xen_stable_libs"
2769 xen_ctrl_version
=40900
2772 cat > $TMPC <<EOF &&
2774 * If we have stable libs the we don't want the libxc compat
2775 * layers, regardless of what CFLAGS we may have been given.
2777 * Also, check if xengnttab_grant_copy_segment_t is defined and
2778 * grant copy operation is implemented.
2780 #undef XC_WANT_COMPAT_EVTCHN_API
2781 #undef XC_WANT_COMPAT_GNTTAB_API
2782 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2783 #include <xenctrl.h>
2784 #include <xenstore.h>
2785 #include <xenevtchn.h>
2786 #include <xengnttab.h>
2787 #include <xenforeignmemory.h>
2789 #include <xen/hvm/hvm_info_table.h>
2790 #if !defined(HVM_MAX_VCPUS)
2791 # error HVM_MAX_VCPUS not defined
2794 xc_interface *xc = NULL;
2795 xenforeignmemory_handle *xfmem;
2796 xenevtchn_handle *xe;
2797 xengnttab_handle *xg;
2798 xengnttab_grant_copy_segment_t* seg = NULL;
2802 xc = xc_interface_open(0, 0, 0);
2803 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2804 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2805 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2806 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2808 xfmem = xenforeignmemory_open(0, 0);
2809 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2811 xe = xenevtchn_open(0, 0);
2814 xg = xengnttab_open(0, 0);
2815 xengnttab_grant_copy(xg, 0, seg);
2820 compile_prog
"" "$xen_libs $xen_stable_libs"
2822 xen_ctrl_version
=40800
2825 cat > $TMPC <<EOF &&
2827 * If we have stable libs the we don't want the libxc compat
2828 * layers, regardless of what CFLAGS we may have been given.
2830 #undef XC_WANT_COMPAT_EVTCHN_API
2831 #undef XC_WANT_COMPAT_GNTTAB_API
2832 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2833 #include <xenctrl.h>
2834 #include <xenstore.h>
2835 #include <xenevtchn.h>
2836 #include <xengnttab.h>
2837 #include <xenforeignmemory.h>
2839 #include <xen/hvm/hvm_info_table.h>
2840 #if !defined(HVM_MAX_VCPUS)
2841 # error HVM_MAX_VCPUS not defined
2844 xc_interface *xc = NULL;
2845 xenforeignmemory_handle *xfmem;
2846 xenevtchn_handle *xe;
2847 xengnttab_handle *xg;
2851 xc = xc_interface_open(0, 0, 0);
2852 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2853 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2854 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2855 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2857 xfmem = xenforeignmemory_open(0, 0);
2858 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2860 xe = xenevtchn_open(0, 0);
2863 xg = xengnttab_open(0, 0);
2864 xengnttab_map_grant_ref(xg, 0, 0, 0);
2869 compile_prog
"" "$xen_libs $xen_stable_libs"
2871 xen_ctrl_version
=40701
2876 cat > $TMPC <<EOF &&
2877 #include <xenctrl.h>
2878 #include <xenstore.h>
2880 #include <xen/hvm/hvm_info_table.h>
2881 #if !defined(HVM_MAX_VCPUS)
2882 # error HVM_MAX_VCPUS not defined
2887 xc = xc_interface_open(0, 0, 0);
2888 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2889 xc_gnttab_open(NULL, 0);
2890 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2891 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2892 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2893 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2897 compile_prog
"" "$xen_libs"
2899 xen_ctrl_version
=40600
2904 cat > $TMPC <<EOF &&
2905 #include <xenctrl.h>
2906 #include <xenstore.h>
2908 #include <xen/hvm/hvm_info_table.h>
2909 #if !defined(HVM_MAX_VCPUS)
2910 # error HVM_MAX_VCPUS not defined
2915 xc = xc_interface_open(0, 0, 0);
2916 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2917 xc_gnttab_open(NULL, 0);
2918 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2919 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2920 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2924 compile_prog
"" "$xen_libs"
2926 xen_ctrl_version
=40500
2930 cat > $TMPC <<EOF &&
2931 #include <xenctrl.h>
2932 #include <xenstore.h>
2934 #include <xen/hvm/hvm_info_table.h>
2935 #if !defined(HVM_MAX_VCPUS)
2936 # error HVM_MAX_VCPUS not defined
2941 xc = xc_interface_open(0, 0, 0);
2942 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2943 xc_gnttab_open(NULL, 0);
2944 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2945 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2949 compile_prog
"" "$xen_libs"
2951 xen_ctrl_version
=40200
2955 if test "$xen" = "yes" ; then
2956 feature_not_found
"xen (unsupported version)" \
2957 "Install a supported xen (xen 4.2 or newer)"
2962 if test "$xen" = yes; then
2963 if test $xen_ctrl_version -ge 40701 ; then
2964 xen_libs
="$xen_libs $xen_stable_libs "
2970 if test "$xen_pci_passthrough" != "no"; then
2971 if test "$xen" = "yes" && test "$linux" = "yes"; then
2972 xen_pci_passthrough
=yes
2974 if test "$xen_pci_passthrough" = "yes"; then
2975 error_exit
"User requested feature Xen PCI Passthrough" \
2976 " but this feature requires /sys from Linux"
2978 xen_pci_passthrough
=no
2982 ##########################################
2983 # Windows Hypervisor Platform accelerator (WHPX) check
2984 if test "$whpx" != "no" ; then
2985 if check_include
"WinHvPlatform.h" && check_include
"WinHvEmulation.h"; then
2988 if test "$whpx" = "yes"; then
2989 feature_not_found
"WinHvPlatform" "WinHvEmulation is not installed"
2995 ##########################################
2997 if test "$gettext" != "false" ; then
2998 if has xgettext
; then
3001 if test "$gettext" = "true" ; then
3002 feature_not_found
"gettext" "Install xgettext binary"
3008 ##########################################
3010 if test "$sparse" != "no" ; then
3014 if test "$sparse" = "yes" ; then
3015 feature_not_found
"sparse" "Install sparse binary"
3021 ##########################################
3023 if $pkg_config --exists "x11"; then
3025 x11_cflags
=$
($pkg_config --cflags x11
)
3026 x11_libs
=$
($pkg_config --libs x11
)
3029 ##########################################
3032 if test "$gtk" != "no"; then
3033 gtkpackage
="gtk+-3.0"
3034 gtkx11package
="gtk+-x11-3.0"
3036 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
3037 gtk_cflags
=$
($pkg_config --cflags $gtkpackage)
3038 gtk_libs
=$
($pkg_config --libs $gtkpackage)
3039 gtk_version
=$
($pkg_config --modversion $gtkpackage)
3040 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
3042 gtk_cflags
="$gtk_cflags $x11_cflags"
3043 gtk_libs
="$gtk_libs $x11_libs"
3046 elif test "$gtk" = "yes"; then
3047 feature_not_found
"gtk" "Install gtk3-devel"
3054 ##########################################
3057 if test "$gnutls" != "no"; then
3059 if $pkg_config --exists "gnutls >= 3.1.18"; then
3060 gnutls_cflags
=$
($pkg_config --cflags gnutls
)
3061 gnutls_libs
=$
($pkg_config --libs gnutls
)
3062 # Packaging for the static libraries is not always correct.
3063 # At least ubuntu 18.04 ships only shared libraries.
3065 if compile_prog
"" "$gnutls_libs" ; then
3069 if test "$pass" = "no" && test "$gnutls" = "yes"; then
3070 feature_not_found
"gnutls" "Install gnutls devel >= 3.1.18"
3077 # If user didn't give a --disable/enable-gcrypt flag,
3078 # then mark as disabled if user requested nettle
3080 if test -z "$gcrypt"
3082 if test "$nettle" = "yes"
3088 # If user didn't give a --disable/enable-nettle flag,
3089 # then mark as disabled if user requested gcrypt
3091 if test -z "$nettle"
3093 if test "$gcrypt" = "yes"
3100 if ! has
"libgcrypt-config"
3105 if test -n "$cross_prefix"
3107 host=$
(libgcrypt-config
--host)
3108 if test "$host-" != $cross_prefix
3114 maj
=`libgcrypt-config --version | awk -F . '{print $1}'`
3115 min
=`libgcrypt-config --version | awk -F . '{print $2}'`
3117 if test $maj != 1 ||
test $min -lt 5
3126 if test "$nettle" != "no"; then
3128 if $pkg_config --exists "nettle >= 2.7.1"; then
3129 nettle_cflags
=$
($pkg_config --cflags nettle
)
3130 nettle_libs
=$
($pkg_config --libs nettle
)
3131 nettle_version
=$
($pkg_config --modversion nettle
)
3132 # Link test to make sure the given libraries work (e.g for static).
3134 if compile_prog
"" "$nettle_libs" ; then
3135 if test -z "$gcrypt"; then
3141 if test "$pass" = "yes"
3144 #include <nettle/xts.h>
3149 if compile_prog
"$nettle_cflags" "$nettle_libs" ; then
3154 if test "$pass" = "no" && test "$nettle" = "yes"; then
3155 feature_not_found
"nettle" "Install nettle devel >= 2.7.1"
3161 if test "$gcrypt" != "no"; then
3163 if has_libgcrypt
; then
3164 gcrypt_cflags
=$
(libgcrypt-config
--cflags)
3165 gcrypt_libs
=$
(libgcrypt-config
--libs)
3166 # Debian has removed -lgpg-error from libgcrypt-config
3167 # as it "spreads unnecessary dependencies" which in
3168 # turn breaks static builds...
3169 if test "$static" = "yes"
3171 gcrypt_libs
="$gcrypt_libs -lgpg-error"
3174 # Link test to make sure the given libraries work (e.g for static).
3176 if compile_prog
"" "$gcrypt_libs" ; then
3180 if test "$pass" = "yes"; then
3185 gcry_mac_hd_t handle;
3186 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3187 GCRY_MAC_FLAG_SECURE, NULL);
3191 if compile_prog
"$gcrypt_cflags" "$gcrypt_libs" ; then
3197 gcry_cipher_hd_t handle;
3198 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3202 if compile_prog
"$gcrypt_cflags" "$gcrypt_libs" ; then
3206 elif test "$gcrypt" = "yes"; then
3207 feature_not_found
"gcrypt" "Install gcrypt devel >= 1.5.0"
3214 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3216 error_exit
"Only one of gcrypt & nettle can be enabled"
3219 ##########################################
3220 # libtasn1 - only for the TLS creds/session test suite
3225 if $pkg_config --exists "libtasn1"; then
3226 tasn1_cflags
=$
($pkg_config --cflags libtasn1
)
3227 tasn1_libs
=$
($pkg_config --libs libtasn1
)
3233 ##########################################
3236 if test "$auth_pam" != "no"; then
3238 #include <security/pam_appl.h>
3241 const char *service_name = "qemu";
3242 const char *user = "frank";
3243 const struct pam_conv pam_conv = { 0 };
3244 pam_handle_t *pamh = NULL;
3245 pam_start(service_name, user, &pam_conv, &pamh);
3249 if compile_prog
"" "-lpam" ; then
3252 if test "$auth_pam" = "yes"; then
3253 feature_not_found
"PAM" "Install PAM development package"
3260 ##########################################
3261 # getifaddrs (for tests/test-io-channel-socket )
3264 if ! check_include
"ifaddrs.h" ; then
3268 #########################################
3271 if check_include
"libdrm/drm.h" ; then
3275 #########################################
3276 # sys/signal.h check
3277 have_sys_signal_h
=no
3278 if check_include
"sys/signal.h" ; then
3279 have_sys_signal_h
=yes
3282 ##########################################
3285 if test "$vte" != "no"; then
3286 vteminversion
="0.32.0"
3287 if $pkg_config --exists "vte-2.91"; then
3288 vtepackage
="vte-2.91"
3290 vtepackage
="vte-2.90"
3292 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3293 vte_cflags
=$
($pkg_config --cflags $vtepackage)
3294 vte_libs
=$
($pkg_config --libs $vtepackage)
3295 vteversion
=$
($pkg_config --modversion $vtepackage)
3297 elif test "$vte" = "yes"; then
3298 feature_not_found
"vte" "Install libvte-2.90/2.91 devel"
3304 ##########################################
3305 # RDMA needs OpenFabrics libraries
3306 if test "$rdma" != "no" ; then
3308 #include <rdma/rdma_cma.h>
3309 int main(void) { return 0; }
3311 rdma_libs
="-lrdmacm -libverbs -libumad"
3312 if compile_prog
"" "$rdma_libs" ; then
3315 if test "$rdma" = "yes" ; then
3317 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3319 " (1) Fast: Install infiniband packages (devel) from your distro." \
3320 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3321 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3327 ##########################################
3330 cat > $TMPC <<EOF &&
3331 #include <sys/mman.h>
3338 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3344 if test "$rdma" = "yes" ; then
3347 if compile_prog
"" ""; then
3354 if ! compile_prog
"" ""; then
3355 error_exit
"PVRDMA is not supported since mremap is not implemented"
3364 if test "$pvrdma" = "yes" ; then
3365 error_exit
"PVRDMA requires rdma suppport"
3370 # Let's see if enhanced reg_mr is supported
3371 if test "$pvrdma" = "yes" ; then
3373 cat > $TMPC <<EOF &&
3374 #include <infiniband/verbs.h>
3380 struct ibv_pd *pd = NULL;
3386 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3393 if ! compile_prog
"" "-libverbs"; then
3394 QEMU_CFLAGS
="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3398 ##########################################
3399 # xfsctl() probe, used for file-posix.c
3400 if test "$xfs" != "no" ; then
3402 #include <stddef.h> /* NULL */
3403 #include <xfs/xfs.h>
3406 xfsctl(NULL, 0, 0, NULL);
3410 if compile_prog
"" "" ; then
3413 if test "$xfs" = "yes" ; then
3414 feature_not_found
"xfs" "Instal xfsprogs/xfslibs devel"
3420 ##########################################
3421 # vde libraries probe
3422 if test "$vde" != "no" ; then
3423 vde_libs
="-lvdeplug"
3425 #include <libvdeplug.h>
3428 struct vde_open_args a = {0, 0, 0};
3434 if compile_prog
"" "$vde_libs" ; then
3437 if test "$vde" = "yes" ; then
3438 feature_not_found
"vde" "Install vde (Virtual Distributed Ethernet) devel"
3444 ##########################################
3445 # netmap support probe
3446 # Apart from looking for netmap headers, we make sure that the host API version
3447 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3448 # a minor/major version number. Minor new features will be marked with values up
3449 # to 15, and if something happens that requires a change to the backend we will
3450 # move above 15, submit the backend fixes and modify this two bounds.
3451 if test "$netmap" != "no" ; then
3453 #include <inttypes.h>
3455 #include <net/netmap.h>
3456 #include <net/netmap_user.h>
3457 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3460 int main(void) { return 0; }
3462 if compile_prog
"" "" ; then
3465 if test "$netmap" = "yes" ; then
3466 feature_not_found
"netmap"
3472 ##########################################
3473 # libcap-ng library probe
3474 if test "$cap_ng" != "no" ; then
3480 capng_capability_to_name(CAPNG_EFFECTIVE);
3484 if compile_prog
"" "$cap_libs" ; then
3487 if test "$cap_ng" = "yes" ; then
3488 feature_not_found
"cap_ng" "Install libcap-ng devel"
3494 ##########################################
3495 # Sound support libraries probe
3497 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/,/ /g')
3498 for drv
in $audio_drv_list; do
3501 if $pkg_config alsa
--exists; then
3502 alsa_libs
=$
($pkg_config alsa
--libs)
3503 alsa_cflags
=$
($pkg_config alsa
--cflags)
3505 if test "$drv" = "try-alsa"; then
3506 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-alsa/alsa/')
3509 if test "$drv" = "try-alsa"; then
3510 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-alsa//')
3512 error_exit
"$drv check failed" \
3513 "Make sure to have the $drv libs and headers installed."
3519 if $pkg_config libpulse
--exists; then
3521 pulse_libs
=$
($pkg_config libpulse
--libs)
3522 pulse_cflags
=$
($pkg_config libpulse
--cflags)
3523 if test "$drv" = "try-pa"; then
3524 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-pa/pa/')
3527 if test "$drv" = "try-pa"; then
3528 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-pa//')
3530 error_exit
"$drv check failed" \
3531 "Make sure to have the $drv libs and headers installed."
3537 if test "$sdl" = "no"; then
3538 error_exit
"sdl not found or disabled, can not use sdl audio driver"
3543 if test "$sdl" = "no"; then
3544 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-sdl//')
3546 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-sdl/sdl/')
3551 coreaudio_libs
="-framework CoreAudio"
3555 dsound_libs
="-lole32 -ldxguid"
3564 if $pkg_config jack
--exists; then
3566 jack_libs
=$
($pkg_config jack
--libs)
3567 if test "$drv" = "try-jack"; then
3568 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-jack/jack/')
3571 if test "$drv" = "try-jack"; then
3572 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-jack//')
3574 error_exit
"$drv check failed" \
3575 "Make sure to have the $drv libs and headers installed."
3581 echo "$audio_possible_drivers" |
grep -q "\<$drv\>" ||
{
3582 error_exit
"Unknown driver '$drv' selected" \
3583 "Possible drivers are: $audio_possible_drivers"
3589 ##########################################
3592 if test "$brlapi" != "no" ; then
3593 brlapi_libs
="-lbrlapi"
3597 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3599 if compile_prog
"" "$brlapi_libs" ; then
3602 if test "$brlapi" = "yes" ; then
3603 feature_not_found
"brlapi" "Install brlapi devel"
3609 ##########################################
3611 if test "$iconv" != "no" ; then
3615 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3616 return conv != (iconv_t) -1;
3619 iconv_prefix_list
="/usr/local:/usr"
3620 iconv_lib_list
=":-liconv"
3622 for iconv_prefix
in $iconv_prefix_list; do
3624 iconv_cflags
="-I$iconv_prefix/include"
3625 iconv_ldflags
="-L$iconv_prefix/lib"
3626 for iconv_link
in $iconv_lib_list; do
3628 iconv_lib
="$iconv_ldflags $iconv_link"
3629 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3630 if compile_prog
"$iconv_cflags" "$iconv_lib" ; then
3635 if test "$iconv_found" = yes ; then
3639 if test "$iconv_found" = "yes" ; then
3642 if test "$iconv" = "yes" ; then
3643 feature_not_found
"iconv" "Install iconv devel"
3649 ##########################################
3651 if test "$iconv" = "no" ; then
3652 # curses will need iconv
3655 if test "$curses" != "no" ; then
3656 if test "$mingw32" = "yes" ; then
3657 curses_inc_list
="$($pkg_config --cflags ncurses 2>/dev/null):"
3658 curses_lib_list
="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3660 curses_inc_list
="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3661 curses_lib_list
="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3668 #include <langinfo.h>
3670 const char *codeset;
3672 setlocale(LC_ALL, "");
3674 addwstr(L"wide chars\n");
3676 add_wch(WACS_DEGREE);
3677 codeset = nl_langinfo(CODESET);
3678 return codeset != 0;
3682 for curses_inc
in $curses_inc_list; do
3683 # Make sure we get the wide character prototypes
3684 curses_inc
="-DNCURSES_WIDECHAR $curses_inc"
3686 for curses_lib
in $curses_lib_list; do
3688 if compile_prog
"$curses_inc" "$curses_lib" ; then
3693 if test "$curses_found" = yes ; then
3698 if test "$curses_found" = "yes" ; then
3701 if test "$curses" = "yes" ; then
3702 feature_not_found
"curses" "Install ncurses devel"
3708 ##########################################
3710 if test "$curl" != "no" ; then
3711 if $pkg_config libcurl
--exists; then
3712 curlconfig
="$pkg_config libcurl"
3714 curlconfig
=curl-config
3717 #include <curl/curl.h>
3718 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3720 curl_cflags
=$
($curlconfig --cflags 2>/dev
/null
)
3721 curl_libs
=$
($curlconfig --libs 2>/dev
/null
)
3722 if compile_prog
"$curl_cflags" "$curl_libs" ; then
3725 if test "$curl" = "yes" ; then
3726 feature_not_found
"curl" "Install libcurl devel"
3732 ##########################################
3733 # glib support probe
3736 glib_modules
=gthread-2.0
3737 if test "$modules" = yes; then
3738 glib_modules
="$glib_modules gmodule-export-2.0"
3740 if test "$plugins" = yes; then
3741 glib_modules
="$glib_modules gmodule-2.0"
3744 for i
in $glib_modules; do
3745 if $pkg_config --atleast-version=$glib_req_ver $i; then
3746 glib_cflags
=$
($pkg_config --cflags $i)
3747 glib_libs
=$
($pkg_config --libs $i)
3749 error_exit
"glib-$glib_req_ver $i is required to compile QEMU"
3753 # This workaround is required due to a bug in pkg-config file for glib as it
3754 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3756 if test "$static" = yes && test "$mingw32" = yes; then
3757 glib_cflags
="-DGLIB_STATIC_COMPILATION $glib_cflags"
3760 if $pkg_config --atleast-version=$glib_req_ver gio-2.0
; then
3762 gio_cflags
=$
($pkg_config --cflags gio-2.0
)
3763 gio_libs
=$
($pkg_config --libs gio-2.0
)
3764 gdbus_codegen
=$
($pkg_config --variable=gdbus_codegen gio-2.0
)
3765 if [ ! -x "$gdbus_codegen" ]; then
3772 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0
; then
3773 gio_cflags
="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3774 gio_libs
="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3777 # Sanity check that the current size_t matches the
3778 # size that glib thinks it should be. This catches
3779 # problems on multi-arch where people try to build
3780 # 32-bit QEMU while pointing at 64-bit glib headers
3785 #define QEMU_BUILD_BUG_ON(x) \
3786 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3789 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3794 if ! compile_prog
"$glib_cflags" "$glib_libs" ; then
3795 error_exit
"sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3796 "You probably need to set PKG_CONFIG_LIBDIR"\
3797 "to point to the right pkg-config files for your"\
3801 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3804 int main(void) { return 0; }
3806 if ! compile_prog
"$glib_cflags -Werror" "$glib_libs" ; then
3807 if cc_has_warning_flag
"-Wno-unknown-attributes"; then
3808 glib_cflags
="-Wno-unknown-attributes $glib_cflags"
3809 CFLAGS
="-Wno-unknown-attributes $CFLAGS"
3813 # Silence clang warnings triggered by glib < 2.57.2
3816 typedef struct Foo {
3819 static void foo_free(Foo *f)
3823 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3824 int main(void) { return 0; }
3826 if ! compile_prog
"$glib_cflags -Werror" "$glib_libs" ; then
3827 if cc_has_warning_flag
"-Wno-unused-function"; then
3828 glib_cflags
="$glib_cflags -Wno-unused-function"
3829 CFLAGS
="$CFLAGS -Wno-unused-function"
3833 ##########################################
3834 # SHA command probe for modules
3835 if test "$modules" = yes; then
3836 shacmd_probe
="sha1sum sha1 shasum"
3837 for c
in $shacmd_probe; do
3843 if test "$shacmd" = ""; then
3844 error_exit
"one of the checksum commands is required to enable modules: $shacmd_probe"
3848 ##########################################
3849 # libmpathpersist probe
3851 if test "$mpath" != "no" ; then
3852 # probe for the new API
3854 #include <libudev.h>
3855 #include <mpath_persist.h>
3856 unsigned mpath_mx_alloc_len = 1024;
3858 static struct config *multipath_conf;
3859 extern struct udev *udev;
3860 extern struct config *get_multipath_config(void);
3861 extern void put_multipath_config(struct config *conf);
3863 struct config *get_multipath_config(void) { return multipath_conf; }
3864 void put_multipath_config(struct config *conf) { }
3868 multipath_conf = mpath_lib_init();
3872 if compile_prog
"" "-ludev -lmultipath -lmpathpersist" ; then
3874 mpathpersist_new_api
=yes
3876 # probe for the old API
3878 #include <libudev.h>
3879 #include <mpath_persist.h>
3880 unsigned mpath_mx_alloc_len = 1024;
3883 struct udev *udev = udev_new();
3884 mpath_lib_init(udev);
3888 if compile_prog
"" "-ludev -lmultipath -lmpathpersist" ; then
3890 mpathpersist_new_api
=no
3899 ##########################################
3901 PTHREADLIBS_LIST
="-pthread -lpthread -lpthreadGC2"
3905 #include <pthread.h>
3906 static void *f(void *p) { return NULL; }
3909 pthread_create(&thread, 0, f, 0);
3913 if compile_prog
"" "" ; then
3916 for pthread_lib
in $PTHREADLIBS_LIST; do
3917 if compile_prog
"" "$pthread_lib" ; then
3920 for lib_entry
in $LIBS; do
3921 if test "$lib_entry" = "$pthread_lib"; then
3926 if test "$found" = "no"; then
3927 LIBS
="$pthread_lib $LIBS"
3929 PTHREAD_LIB
="$pthread_lib"
3935 if test "$mingw32" != yes && test "$pthread" = no
; then
3936 error_exit
"pthread check failed" \
3937 "Make sure to have the pthread libs and headers installed."
3940 # check for pthread_setname_np with thread id
3941 pthread_setname_np_w_tid
=no
3943 #include <pthread.h>
3945 static void *f(void *p) { return NULL; }
3949 pthread_create(&thread, 0, f, 0);
3950 pthread_setname_np(thread, "QEMU");
3954 if compile_prog
"" "$pthread_lib" ; then
3955 pthread_setname_np_w_tid
=yes
3958 # check for pthread_setname_np without thread id
3959 pthread_setname_np_wo_tid
=no
3961 #include <pthread.h>
3963 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3967 pthread_create(&thread, 0, f, 0);
3971 if compile_prog
"" "$pthread_lib" ; then
3972 pthread_setname_np_wo_tid
=yes
3975 ##########################################
3977 if test "$rbd" != "no" ; then
3980 #include <rbd/librbd.h>
3983 rados_create(&cluster, NULL);
3987 rbd_libs
="-lrbd -lrados"
3988 if compile_prog
"" "$rbd_libs" ; then
3991 if test "$rbd" = "yes" ; then
3992 feature_not_found
"rados block device" "Install librbd/ceph devel"
3998 ##########################################
4000 if test "$libssh" != "no" ; then
4001 if $pkg_config --exists libssh
; then
4002 libssh_cflags
=$
($pkg_config libssh
--cflags)
4003 libssh_libs
=$
($pkg_config libssh
--libs)
4006 if test "$libssh" = "yes" ; then
4007 error_exit
"libssh required for --enable-libssh"
4013 ##########################################
4014 # Check for libssh 0.8
4015 # This is done like this instead of using the LIBSSH_VERSION_* and
4016 # SSH_VERSION_* macros because some distributions in the past shipped
4017 # snapshots of the future 0.8 from Git, and those snapshots did not
4018 # have updated version numbers (still referring to 0.7.0).
4020 if test "$libssh" = "yes"; then
4022 #include <libssh/libssh.h>
4023 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4025 if compile_prog
"$libssh_cflags" "$libssh_libs"; then
4026 libssh_cflags
="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4030 ##########################################
4033 if test "$linux_aio" != "no" ; then
4036 #include <sys/eventfd.h>
4038 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4040 if compile_prog
"" "-laio" ; then
4043 if test "$linux_aio" = "yes" ; then
4044 feature_not_found
"linux AIO" "Install libaio devel"
4049 ##########################################
4050 # linux-io-uring probe
4052 if test "$linux_io_uring" != "no" ; then
4053 if $pkg_config liburing
; then
4054 linux_io_uring_cflags
=$
($pkg_config --cflags liburing
)
4055 linux_io_uring_libs
=$
($pkg_config --libs liburing
)
4058 if test "$linux_io_uring" = "yes" ; then
4059 feature_not_found
"linux io_uring" "Install liburing devel"
4065 ##########################################
4066 # TPM emulation is only on POSIX
4068 if test "$tpm" = ""; then
4069 if test "$mingw32" = "yes"; then
4074 elif test "$tpm" = "yes"; then
4075 if test "$mingw32" = "yes" ; then
4076 error_exit
"TPM emulation only available on POSIX systems"
4080 ##########################################
4084 if test "$attr" != "no" ; then
4087 #include <sys/types.h>
4088 #ifdef CONFIG_LIBATTR
4089 #include <attr/xattr.h>
4091 #include <sys/xattr.h>
4093 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4095 if compile_prog
"" "" ; then
4097 # Older distros have <attr/xattr.h>, and need -lattr:
4098 elif compile_prog
"-DCONFIG_LIBATTR" "-lattr" ; then
4100 libattr_libs
="-lattr"
4103 if test "$attr" = "yes" ; then
4104 feature_not_found
"ATTR" "Install libc6 or libattr devel"
4110 ##########################################
4113 #include <sys/types.h>
4114 #include <sys/uio.h>
4116 int main(void) { return sizeof(struct iovec); }
4119 if compile_prog
"" "" ; then
4123 ##########################################
4126 #include <sys/types.h>
4127 #include <sys/uio.h>
4129 int main(void) { return preadv(0, 0, 0, 0); }
4132 if compile_prog
"" "" ; then
4136 ##########################################
4138 # fdt support is mandatory for at least some target architectures,
4139 # so insist on it if we're building those system emulators.
4141 for target
in $target_list; do
4143 aarch64
*-softmmu|arm
*-softmmu|ppc
*-softmmu|microblaze
*-softmmu|mips64el-softmmu|riscv
*-softmmu|rx-softmmu
)
4149 if test "$fdt_required" = "yes"; then
4150 if test "$fdt" = "no"; then
4151 error_exit
"fdt disabled but some requested targets require it." \
4152 "You can turn off fdt only if you also disable all the system emulation" \
4153 "targets which need it (by specifying a cut down --target-list)."
4156 elif test "$fdt" != "yes" ; then
4160 # fdt is only required when building softmmu targets
4161 if test -z "$fdt" -a "$softmmu" != "yes" ; then
4165 if test "$fdt" != "no" ; then
4167 # explicitly check for libfdt_env.h as it is missing in some stable installs
4168 # and test for required functions to make sure we are on a version >= 1.4.2
4171 #include <libfdt_env.h>
4172 int main(void) { fdt_check_full(NULL, 0); return 0; }
4174 if compile_prog
"" "$fdt_libs" ; then
4175 # system DTC is good - use it
4178 # have GIT checkout, so activate dtc submodule
4179 if test -e "${source_path}/.git" ; then
4180 git_submodules
="${git_submodules} dtc"
4182 if test -d "${source_path}/dtc/libfdt" ||
test -e "${source_path}/.git" ; then
4185 fdt_cflags
="-I${source_path}/dtc/libfdt"
4186 fdt_ldflags
="-Ldtc/libfdt"
4187 fdt_libs
="$fdt_libs"
4188 elif test "$fdt" = "yes" ; then
4189 # Not a git build & no libfdt found, prompt for system install
4190 error_exit
"DTC (libfdt) version >= 1.4.2 not present." \
4191 "Please install the DTC (libfdt) devel package"
4193 # don't have and don't want
4200 ##########################################
4201 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4204 if $pkg_config gbm
; then
4205 gbm_cflags
="$($pkg_config --cflags gbm)"
4206 gbm_libs
="$($pkg_config --libs gbm)"
4210 if test "$opengl" != "no" ; then
4211 opengl_pkgs
="epoxy gbm"
4212 if $pkg_config $opengl_pkgs; then
4213 opengl_cflags
="$($pkg_config --cflags $opengl_pkgs)"
4214 opengl_libs
="$($pkg_config --libs $opengl_pkgs)"
4216 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4220 if test "$opengl" = "yes" ; then
4221 feature_not_found
"opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4229 if test "$opengl" = "yes"; then
4231 #include <epoxy/egl.h>
4232 #ifndef EGL_MESA_image_dma_buf_export
4233 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4235 int main(void) { return 0; }
4237 if compile_prog
"" "" ; then
4242 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4243 for target
in $target_list; do
4245 lm32-softmmu
) # milkymist-tmu2 requires X11 and OpenGL
4252 ##########################################
4254 if test "$libxml2" != "no" ; then
4255 if $pkg_config --exists libxml-2.0
; then
4257 libxml2_cflags
=$
($pkg_config --cflags libxml-2.0
)
4258 libxml2_libs
=$
($pkg_config --libs libxml-2.0
)
4260 if test "$libxml2" = "yes"; then
4261 feature_not_found
"libxml2" "Install libxml2 devel"
4267 ##########################################
4269 if test "$glusterfs" != "no" ; then
4270 if $pkg_config --atleast-version=3 glusterfs-api
; then
4272 glusterfs_cflags
=$
($pkg_config --cflags glusterfs-api
)
4273 glusterfs_libs
=$
($pkg_config --libs glusterfs-api
)
4274 if $pkg_config --atleast-version=4 glusterfs-api
; then
4275 glusterfs_xlator_opt
="yes"
4277 if $pkg_config --atleast-version=5 glusterfs-api
; then
4278 glusterfs_discard
="yes"
4280 if $pkg_config --atleast-version=6 glusterfs-api
; then
4281 glusterfs_fallocate
="yes"
4282 glusterfs_zerofill
="yes"
4285 #include <glusterfs/api/glfs.h>
4290 /* new glfs_ftruncate() passes two additional args */
4291 return glfs_ftruncate(NULL, 0, NULL, NULL);
4294 if compile_prog
"$glusterfs_cflags" "$glusterfs_libs" ; then
4295 glusterfs_ftruncate_has_stat
="yes"
4298 #include <glusterfs/api/glfs.h>
4300 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4302 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4308 glfs_io_cbk iocb = &glusterfs_iocb;
4309 iocb(NULL, 0 , NULL, NULL, NULL);
4313 if compile_prog
"$glusterfs_cflags" "$glusterfs_libs" ; then
4314 glusterfs_iocb_has_stat
="yes"
4317 if test "$glusterfs" = "yes" ; then
4318 feature_not_found
"GlusterFS backend support" \
4319 "Install glusterfs-api devel >= 3"
4325 # Check for inotify functions when we are building linux-user
4326 # emulator. This is done because older glibc versions don't
4327 # have syscall stubs for these implemented. In that case we
4328 # don't provide them even if kernel supports them.
4332 #include <sys/inotify.h>
4337 /* try to start inotify */
4338 return inotify_init();
4341 if compile_prog
"" "" ; then
4347 #include <sys/inotify.h>
4352 /* try to start inotify */
4353 return inotify_init1(0);
4356 if compile_prog
"" "" ; then
4360 # check if pipe2 is there
4369 return pipe2(pipefd, O_CLOEXEC);
4372 if compile_prog
"" "" ; then
4376 # check if accept4 is there
4379 #include <sys/socket.h>
4384 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4388 if compile_prog
"" "" ; then
4392 # check if tee/splice is there. vmsplice was added same time.
4402 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4403 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4407 if compile_prog
"" "" ; then
4411 ##########################################
4414 if test "$numa" != "no" ; then
4417 int main(void) { return numa_available(); }
4420 if compile_prog
"" "-lnuma" ; then
4424 if test "$numa" = "yes" ; then
4425 feature_not_found
"numa" "install numactl devel"
4431 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4432 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4436 # Even if malloc_trim() is available, these non-libc memory allocators
4437 # do not support it.
4438 if test "$tcmalloc" = "yes" ||
test "$jemalloc" = "yes" ; then
4439 if test "$malloc_trim" = "yes" ; then
4440 echo "Disabling malloc_trim with non-libc memory allocator"
4445 #######################################
4448 if test "$malloc_trim" != "no" ; then
4451 int main(void) { malloc_trim(0); return 0; }
4453 if compile_prog
"" "" ; then
4460 ##########################################
4463 if test "$tcmalloc" = "yes" ; then
4467 void *tmp = malloc(1);
4475 if compile_prog
"" "-ltcmalloc" ; then
4476 LIBS
="-ltcmalloc $LIBS"
4478 feature_not_found
"tcmalloc" "install gperftools devel"
4482 ##########################################
4485 if test "$jemalloc" = "yes" ; then
4489 void *tmp = malloc(1);
4497 if compile_prog
"" "-ljemalloc" ; then
4498 LIBS
="-ljemalloc $LIBS"
4500 feature_not_found
"jemalloc" "install jemalloc devel"
4504 ##########################################
4509 #include <sys/syscall.h>
4511 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4514 if compile_prog
"" "" ; then
4518 # check if optreset global is declared by <getopt.h>
4522 int main(void) { return optreset; }
4525 if compile_prog
"" "" ; then
4529 # check if eventfd is supported
4532 #include <sys/eventfd.h>
4536 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4539 if compile_prog
"" "" ; then
4543 # check if memfd is supported
4546 #include <sys/mman.h>
4550 return memfd_create("foo", MFD_ALLOW_SEALING);
4553 if compile_prog
"" "" ; then
4559 if test "$linux_user" = "yes"; then
4561 #include <linux/usbdevice_fs.h>
4563 #ifndef USBDEVFS_GET_CAPABILITIES
4564 #error "USBDEVFS_GET_CAPABILITIES undefined"
4567 #ifndef USBDEVFS_DISCONNECT_CLAIM
4568 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4576 if compile_prog
"" ""; then
4581 # check for fallocate
4588 fallocate(0, 0, 0, 0);
4592 if compile_prog
"" "" ; then
4596 # check for fallocate hole punching
4597 fallocate_punch_hole
=no
4600 #include <linux/falloc.h>
4604 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4608 if compile_prog
"" "" ; then
4609 fallocate_punch_hole
=yes
4612 # check that fallocate supports range zeroing inside the file
4613 fallocate_zero_range
=no
4616 #include <linux/falloc.h>
4620 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4624 if compile_prog
"" "" ; then
4625 fallocate_zero_range
=yes
4628 # check for posix_fallocate
4635 posix_fallocate(0, 0, 0);
4639 if compile_prog
"" "" ; then
4643 # check for sync_file_range
4650 sync_file_range(0, 0, 0, 0);
4654 if compile_prog
"" "" ; then
4658 # check for linux/fiemap.h and FS_IOC_FIEMAP
4661 #include <sys/ioctl.h>
4662 #include <linux/fs.h>
4663 #include <linux/fiemap.h>
4667 ioctl(0, FS_IOC_FIEMAP, 0);
4671 if compile_prog
"" "" ; then
4686 if compile_prog
"" "" ; then
4690 # check for ppoll support
4697 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4698 ppoll(&pfd, 1, 0, 0);
4702 if compile_prog
"" "" ; then
4706 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4707 prctl_pr_set_timerslack
=no
4709 #include <sys/prctl.h>
4713 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4717 if compile_prog
"" "" ; then
4718 prctl_pr_set_timerslack
=yes
4721 # check for epoll support
4724 #include <sys/epoll.h>
4732 if compile_prog
"" "" ; then
4736 # epoll_create1 is a later addition
4737 # so we must check separately for its presence
4740 #include <sys/epoll.h>
4744 /* Note that we use epoll_create1 as a value, not as
4745 * a function being called. This is necessary so that on
4746 * old SPARC glibc versions where the function was present in
4747 * the library but not declared in the header file we will
4748 * fail the configure check. (Otherwise we will get a compiler
4749 * warning but not an error, and will proceed to fail the
4750 * qemu compile where we compile with -Werror.)
4752 return (int)(uintptr_t)&epoll_create1;
4755 if compile_prog
"" "" ; then
4759 # check for sendfile support
4762 #include <sys/sendfile.h>
4766 return sendfile(0, 0, 0, 0);
4769 if compile_prog
"" "" ; then
4773 # check for timerfd support (glibc 2.8 and newer)
4776 #include <sys/timerfd.h>
4780 return(timerfd_create(CLOCK_REALTIME, 0));
4783 if compile_prog
"" "" ; then
4787 # check for setns and unshare support
4800 if compile_prog
"" "" ; then
4804 # clock_adjtime probe
4811 return clock_adjtime(0, 0);
4815 if compile_prog
"" "" ; then
4830 if compile_prog
"" "" ; then
4834 # check for kcov support (kernel must be 4.4+, compiled with certain options)
4836 if check_include sys
/kcov.h
; then
4840 # check for btrfs filesystem support (kernel must be 3.9+)
4842 if check_include linux
/btrfs.h
; then
4846 # If we're making warnings fatal, apply this to Sphinx runs as well
4848 if test "$werror" = "yes"; then
4852 # Check we have a new enough version of sphinx-build
4853 has_sphinx_build
() {
4854 # This is a bit awkward but works: create a trivial document and
4855 # try to run it with our configuration file (which enforces a
4856 # version requirement). This will fail if either
4857 # sphinx-build doesn't exist at all or if it is too old.
4858 mkdir
-p "$TMPDIR1/sphinx"
4859 touch "$TMPDIR1/sphinx/index.rst"
4860 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
4861 -b html
"$TMPDIR1/sphinx" \
4862 "$TMPDIR1/sphinx/out" >> config.log
2>&1
4865 # Check if tools are available to build documentation.
4866 if test "$docs" != "no" ; then
4867 if has_sphinx_build
; then
4872 if has makeinfo
&& has pod2man
&& test "$sphinx_ok" = "yes"; then
4875 if test "$docs" = "yes" ; then
4876 if has
$sphinx_build && test "$sphinx_ok" != "yes"; then
4877 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4879 feature_not_found
"docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
4885 # Search for bswap_32 function
4888 #include <byteswap.h>
4889 int main(void) { return bswap_32(0); }
4891 if compile_prog
"" "" ; then
4895 # Search for bswap32 function
4898 #include <sys/endian.h>
4899 #include <sys/types.h>
4900 #include <machine/bswap.h>
4901 int main(void) { return bswap32(0); }
4903 if compile_prog
"" "" ; then
4907 ##########################################
4908 # Do we have libiscsi >= 1.9.0
4909 if test "$libiscsi" != "no" ; then
4910 if $pkg_config --atleast-version=1.9.0 libiscsi
; then
4912 libiscsi_cflags
=$
($pkg_config --cflags libiscsi
)
4913 libiscsi_libs
=$
($pkg_config --libs libiscsi
)
4915 if test "$libiscsi" = "yes" ; then
4916 feature_not_found
"libiscsi" "Install libiscsi >= 1.9.0"
4922 ##########################################
4924 # uClibc provides 2 versions of clock_gettime(), one with realtime
4925 # support and one without. This means that the clock_gettime() don't
4926 # need -lrt. We still need it for timer_create() so we check for this
4927 # function in addition.
4932 timer_create(CLOCK_REALTIME, NULL, NULL);
4933 return clock_gettime(CLOCK_REALTIME, NULL);
4937 if compile_prog
"" "" ; then
4939 # we need pthread for static linking. use previous pthread test result
4940 elif compile_prog
"" "$pthread_lib -lrt" ; then
4944 # Check whether we have openpty() in either libc or libutil
4946 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4947 int main(void) { return openpty(0, 0, 0, 0, 0); }
4951 if compile_prog
"" "" ; then
4954 if compile_prog
"" "-lutil" ; then
4959 ##########################################
4961 if test "$spice" != "no" ; then
4964 int main(void) { spice_server_new(); return 0; }
4966 spice_cflags
=$
($pkg_config --cflags spice-protocol spice-server
2>/dev
/null
)
4967 spice_libs
=$
($pkg_config --libs spice-protocol spice-server
2>/dev
/null
)
4968 if $pkg_config --atleast-version=0.12.5 spice-server
&& \
4969 $pkg_config --atleast-version=0.12.3 spice-protocol
&& \
4970 compile_prog
"$spice_cflags" "$spice_libs" ; then
4973 if test "$spice" = "yes" ; then
4974 feature_not_found
"spice" \
4975 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4981 # check for smartcard support
4982 if test "$smartcard" != "no"; then
4983 if $pkg_config --atleast-version=2.5.1 libcacard
; then
4984 libcacard_cflags
=$
($pkg_config --cflags libcacard
)
4985 libcacard_libs
=$
($pkg_config --libs libcacard
)
4988 if test "$smartcard" = "yes"; then
4989 feature_not_found
"smartcard" "Install libcacard devel"
4996 if test "$libusb" != "no" ; then
4997 if $pkg_config --atleast-version=1.0.13 libusb-1.0
; then
4999 libusb_cflags
=$
($pkg_config --cflags libusb-1.0
)
5000 libusb_libs
=$
($pkg_config --libs libusb-1.0
)
5002 if test "$libusb" = "yes"; then
5003 feature_not_found
"libusb" "Install libusb devel >= 1.0.13"
5009 # check for usbredirparser for usb network redirection support
5010 if test "$usb_redir" != "no" ; then
5011 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5
; then
5013 usb_redir_cflags
=$
($pkg_config --cflags libusbredirparser-0.5
)
5014 usb_redir_libs
=$
($pkg_config --libs libusbredirparser-0.5
)
5016 if test "$usb_redir" = "yes"; then
5017 feature_not_found
"usb-redir" "Install usbredir devel"
5023 ##########################################
5024 # check if we have VSS SDK headers for win
5026 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5027 test "$vss_win32_sdk" != "no" ; then
5028 case "$vss_win32_sdk" in
5029 "") vss_win32_include
="-isystem $source_path" ;;
5030 *\
*) # The SDK is installed in "Program Files" by default, but we cannot
5031 # handle path with spaces. So we symlink the headers into ".sdk/vss".
5032 vss_win32_include
="-isystem $source_path/.sdk/vss"
5033 symlink
"$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5035 *) vss_win32_include
="-isystem $vss_win32_sdk"
5038 #define __MIDL_user_allocate_free_DEFINED__
5039 #include <inc/win2003/vss.h>
5040 int main(void) { return VSS_CTX_BACKUP; }
5042 if compile_prog
"$vss_win32_include" "" ; then
5043 guest_agent_with_vss
="yes"
5044 QEMU_CFLAGS
="$QEMU_CFLAGS $vss_win32_include"
5045 libs_qga
="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
5046 qga_vss_provider
="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
5048 if test "$vss_win32_sdk" != "" ; then
5049 echo "ERROR: Please download and install Microsoft VSS SDK:"
5050 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5051 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5052 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5053 echo "ERROR: The headers are extracted in the directory \`inc'."
5054 feature_not_found
"VSS support"
5056 guest_agent_with_vss
="no"
5060 ##########################################
5061 # lookup Windows platform SDK (if not specified)
5062 # The SDK is needed only to build .tlb (type library) file of guest agent
5063 # VSS provider from the source. It is usually unnecessary because the
5064 # pre-compiled .tlb file is included.
5066 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5067 test "$guest_agent_with_vss" = "yes" ; then
5068 if test -z "$win_sdk"; then
5069 programfiles
="$PROGRAMFILES"
5070 test -n "$PROGRAMW6432" && programfiles
="$PROGRAMW6432"
5071 if test -n "$programfiles"; then
5072 win_sdk
=$
(ls -d "$programfiles/Microsoft SDKs/Windows/v"* |
tail -1) 2>/dev
/null
5074 feature_not_found
"Windows SDK"
5076 elif test "$win_sdk" = "no"; then
5081 ##########################################
5082 # check if mingw environment provides a recent ntddscsi.h
5083 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
5085 #include <windows.h>
5086 #include <ntddscsi.h>
5088 #if !defined(IOCTL_SCSI_GET_ADDRESS)
5089 #error Missing required ioctl definitions
5091 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5095 if compile_prog
"" "" ; then
5096 guest_agent_ntddscsi
=yes
5097 libs_qga
="-lsetupapi -lcfgmgr32 $libs_qga"
5101 ##########################################
5102 # virgl renderer probe
5104 if test "$virglrenderer" != "no" ; then
5106 #include <virglrenderer.h>
5107 int main(void) { virgl_renderer_poll(); return 0; }
5109 virgl_cflags
=$
($pkg_config --cflags virglrenderer
2>/dev
/null
)
5110 virgl_libs
=$
($pkg_config --libs virglrenderer
2>/dev
/null
)
5111 virgl_version
=$
($pkg_config --modversion virglrenderer
2>/dev
/null
)
5112 if $pkg_config virglrenderer
>/dev
/null
2>&1 && \
5113 compile_prog
"$virgl_cflags" "$virgl_libs" ; then
5116 if test "$virglrenderer" = "yes" ; then
5117 feature_not_found
"virglrenderer"
5123 ##########################################
5128 if $pkg_config capstone
; then
5130 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5132 elif test -e "${source_path}/capstone/Makefile" ; then
5134 elif test -z "$capstone" ; then
5137 feature_not_found
"capstone" "Install capstone devel or git submodule"
5142 if ! $pkg_config capstone
; then
5143 feature_not_found
"capstone" "Install capstone devel"
5150 if test "$capstone" = git
; then
5151 git_submodules
="${git_submodules} capstone"
5154 if test "$mingw32" = "yes"; then
5155 LIBCAPSTONE
=capstone.lib
5157 LIBCAPSTONE
=libcapstone.a
5159 capstone_libs
="-Lcapstone -lcapstone"
5160 capstone_cflags
="-I${source_path}/capstone/include"
5164 capstone_libs
="$($pkg_config --libs capstone)"
5165 capstone_cflags
="$($pkg_config --cflags capstone)"
5171 error_exit
"Unknown state for capstone: $capstone"
5175 ##########################################
5176 # check if we have fdatasync
5182 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5183 return fdatasync(0);
5185 #error Not supported
5189 if compile_prog
"" "" ; then
5193 ##########################################
5194 # check if we have madvise
5198 #include <sys/types.h>
5199 #include <sys/mman.h>
5201 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5203 if compile_prog
"" "" ; then
5207 ##########################################
5208 # check if we have posix_madvise
5212 #include <sys/mman.h>
5214 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5216 if compile_prog
"" "" ; then
5220 ##########################################
5221 # check if we have posix_memalign()
5228 return posix_memalign(&p, 8, 8);
5231 if compile_prog
"" "" ; then
5235 ##########################################
5236 # check if we have posix_syslog
5241 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5243 if compile_prog
"" "" ; then
5247 ##########################################
5248 # check if we have sem_timedwait
5252 #include <semaphore.h>
5253 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5255 if compile_prog
"" "" ; then
5259 ##########################################
5260 # check if we have strchrnul
5266 // Use a haystack that the compiler shouldn't be able to constant fold
5267 char *haystack = (char*)&main;
5268 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5270 if compile_prog
"" "" ; then
5274 #########################################
5275 # check if we have st_atim
5279 #include <sys/stat.h>
5281 int main(void) { return offsetof(struct stat, st_atim); }
5283 if compile_prog
"" "" ; then
5287 ##########################################
5288 # check if trace backend exists
5290 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev
/null
2> /dev
/null
5291 if test "$?" -ne 0 ; then
5292 error_exit
"invalid trace backends" \
5293 "Please choose supported trace backends."
5296 ##########################################
5297 # For 'ust' backend, test if ust headers are present
5298 if have_backend
"ust"; then
5300 #include <lttng/tracepoint.h>
5301 int main(void) { return 0; }
5303 if compile_prog
"" "-Wl,--no-as-needed -ldl" ; then
5304 if $pkg_config lttng-ust
--exists; then
5305 lttng_ust_libs
=$
($pkg_config --libs lttng-ust
)
5307 lttng_ust_libs
="-llttng-ust -ldl"
5309 if $pkg_config liburcu-bp
--exists; then
5310 urcu_bp_libs
=$
($pkg_config --libs liburcu-bp
)
5312 urcu_bp_libs
="-lurcu-bp"
5315 error_exit
"Trace backend 'ust' missing lttng-ust header files"
5319 ##########################################
5320 # For 'dtrace' backend, test if 'dtrace' command is present
5321 if have_backend
"dtrace"; then
5322 if ! has
'dtrace' ; then
5323 error_exit
"dtrace command is not found in PATH $PATH"
5325 trace_backend_stap
="no"
5326 if has
'stap' ; then
5327 trace_backend_stap
="yes"
5331 ##########################################
5332 # check and set a backend for coroutine
5334 # We prefer ucontext, but it's not always possible. The fallback
5335 # is sigcontext. On Windows the only valid backend is the Windows
5339 if test "$darwin" != "yes"; then
5341 #include <ucontext.h>
5342 #ifdef __stub_makecontext
5343 #error Ignoring glibc stub makecontext which will always fail
5345 int main(void) { makecontext(0, 0, 0); return 0; }
5347 if compile_prog
"" "" ; then
5352 if test "$coroutine" = ""; then
5353 if test "$mingw32" = "yes"; then
5355 elif test "$ucontext_works" = "yes"; then
5358 coroutine
=sigaltstack
5363 if test "$mingw32" != "yes"; then
5364 error_exit
"'windows' coroutine backend only valid for Windows"
5366 # Unfortunately the user visible backend name doesn't match the
5367 # coroutine-*.c filename for this case, so we have to adjust it here.
5371 if test "$ucontext_works" != "yes"; then
5372 feature_not_found
"ucontext"
5376 if test "$mingw32" = "yes"; then
5377 error_exit
"only the 'windows' coroutine backend is valid for Windows"
5381 error_exit
"unknown coroutine backend $coroutine"
5386 if test "$coroutine_pool" = ""; then
5390 if test "$debug_stack_usage" = "yes"; then
5391 if test "$coroutine_pool" = "yes"; then
5392 echo "WARN: disabling coroutine pool for stack usage debugging"
5397 ##################################################
5401 if test "$safe_stack" = "yes"; then
5403 int main(int argc, char *argv[])
5405 #if ! __has_feature(safe_stack)
5406 #error SafeStack Disabled
5411 flag
="-fsanitize=safe-stack"
5412 # Check that safe-stack is supported and enabled.
5413 if compile_prog
"-Werror $flag" "$flag"; then
5414 # Flag needed both at compilation and at linking
5415 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
5416 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
5418 error_exit
"SafeStack not supported by your compiler"
5420 if test "$coroutine" != "ucontext"; then
5421 error_exit
"SafeStack is only supported by the coroutine backend ucontext"
5425 int main(int argc, char *argv[])
5427 #if defined(__has_feature)
5428 #if __has_feature(safe_stack)
5429 #error SafeStack Enabled
5435 if test "$safe_stack" = "no"; then
5436 # Make sure that safe-stack is disabled
5437 if ! compile_prog
"-Werror" ""; then
5438 # SafeStack was already enabled, try to explicitly remove the feature
5439 flag
="-fno-sanitize=safe-stack"
5440 if ! compile_prog
"-Werror $flag" "$flag"; then
5441 error_exit
"Configure cannot disable SafeStack"
5443 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
5444 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
5446 else # "$safe_stack" = ""
5447 # Set safe_stack to yes or no based on pre-existing flags
5448 if compile_prog
"-Werror" ""; then
5452 if test "$coroutine" != "ucontext"; then
5453 error_exit
"SafeStack is only supported by the coroutine backend ucontext"
5459 ##########################################
5460 # check if we have open_by_handle_at
5462 open_by_handle_at
=no
5465 #if !defined(AT_EMPTY_PATH)
5466 # error missing definition
5468 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5471 if compile_prog
"" "" ; then
5472 open_by_handle_at
=yes
5475 ########################################
5476 # check if we have linux/magic.h
5480 #include <linux/magic.h>
5485 if compile_prog
"" "" ; then
5489 ########################################
5490 # check if we have valgrind/valgrind.h
5494 #include <valgrind/valgrind.h>
5499 if compile_prog
"" "" ; then
5503 ########################################
5504 # check if environ is declared
5514 if compile_prog
"" "" ; then
5518 ########################################
5519 # check if cpuid.h is usable.
5524 unsigned a, b, c, d;
5525 int max = __get_cpuid_max(0, 0);
5528 __cpuid(1, a, b, c, d);
5532 __cpuid_count(7, 0, a, b, c, d);
5538 if compile_prog
"" "" ; then
5542 ##########################################
5543 # avx2 optimization requirement check
5545 # There is no point enabling this if cpuid.h is not usable,
5546 # since we won't be able to select the new routines.
5548 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5550 #pragma GCC push_options
5551 #pragma GCC target("avx2")
5553 #include <immintrin.h>
5554 static int bar(void *a) {
5555 __m256i x = *(__m256i *)a;
5556 return _mm256_testz_si256(x, x);
5558 int main(int argc, char *argv[]) { return bar(argv[0]); }
5560 if compile_object
"" ; then
5567 ##########################################
5568 # avx512f optimization requirement check
5570 # There is no point enabling this if cpuid.h is not usable,
5571 # since we won't be able to select the new routines.
5572 # by default, it is turned off.
5573 # if user explicitly want to enable it, check environment
5575 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5577 #pragma GCC push_options
5578 #pragma GCC target("avx512f")
5580 #include <immintrin.h>
5581 static int bar(void *a) {
5582 __m512i x = *(__m512i *)a;
5583 return _mm512_test_epi64_mask(x, x);
5585 int main(int argc, char *argv[])
5587 return bar(argv[0]);
5590 if ! compile_object
"" ; then
5597 ########################################
5598 # check if __[u]int128_t is usable.
5611 if compile_prog
"" "" ; then
5615 #########################################
5616 # See if 128-bit atomic operations are supported.
5619 if test "$int128" = "yes"; then
5623 unsigned __int128 x = 0, y = 0;
5624 y = __atomic_load_16(&x, 0);
5625 __atomic_store_16(&x, y, 0);
5626 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5630 if compile_prog
"" "" ; then
5636 if test "$int128" = yes && test "$atomic128" = no
; then
5640 unsigned __int128 x = 0, y = 0;
5641 __sync_val_compare_and_swap_16(&x, y, x);
5645 if compile_prog
"" "" ; then
5650 #########################################
5651 # See if 64-bit atomic operations are supported.
5652 # Note that without __atomic builtins, we can only
5653 # assume atomic loads/stores max at pointer size.
5659 uint64_t x = 0, y = 0;
5660 #ifdef __ATOMIC_RELAXED
5661 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
5662 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
5663 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
5664 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
5665 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
5667 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5668 __sync_lock_test_and_set(&x, y);
5669 __sync_val_compare_and_swap(&x, y, 0);
5670 __sync_fetch_and_add(&x, y);
5675 if compile_prog
"" "" ; then
5679 #########################################
5680 # See if --dynamic-list is supported by the linker
5681 ld_dynamic_list
="no"
5682 if test "$static" = "no" ; then
5705 if compile_prog
"" "-Wl,--dynamic-list=$TMPTXT" ; then
5706 ld_dynamic_list
="yes"
5710 #########################################
5711 # See if -exported_symbols_list is supported by the linker
5713 ld_exported_symbols_list
="no"
5714 if test "$static" = "no" ; then
5719 if compile_prog
"" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5720 ld_exported_symbols_list
="yes"
5724 if test "$plugins" = "yes" &&
5725 test "$ld_dynamic_list" = "no" &&
5726 test "$ld_exported_symbols_list" = "no" ; then
5728 "Plugin support requires dynamic linking and specifying a set of symbols " \
5729 "that are exported to plugins. Unfortunately your linker doesn't " \
5730 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5731 "for this purpose. You can't build with --static."
5734 ########################################
5735 # See if __attribute__((alias)) is supported.
5736 # This false for Xcode 9, but has been remedied for Xcode 10.
5737 # Unfortunately, travis uses Xcode 9 by default.
5742 extern const int y __attribute__((alias("x")));
5743 int main(void) { return 0; }
5745 if compile_prog
"" "" ; then
5749 ########################################
5750 # check if getauxval is available.
5754 #include <sys/auxv.h>
5756 return getauxval(AT_HWCAP) == 0;
5759 if compile_prog
"" "" ; then
5763 ########################################
5764 # check if ccache is interfering with
5765 # semantic analysis of macros
5770 static const int Z = 1;
5771 #define fn() ({ Z; })
5772 #define TAUT(X) ((X) == Z)
5773 #define PAREN(X, Y) (X == Y)
5775 int main(int argc, char *argv[])
5781 if (PAREN(x, y)) return 0;
5782 if (TAUT(Z)) return 0;
5787 if ! compile_object
"-Werror"; then
5791 #################################################
5792 # clang does not support glibc + FORTIFY_SOURCE.
5794 if test "$fortify_source" != "no"; then
5795 if echo |
$cc -dM -E - |
grep __clang__
> /dev
/null
2>&1 ; then
5796 fortify_source
="no";
5797 elif test -n "$cxx" && has
$cxx &&
5798 echo |
$cxx -dM -E - |
grep __clang__
>/dev
/null
2>&1 ; then
5799 fortify_source
="no";
5801 fortify_source
="yes"
5805 ###############################################
5806 # Check if copy_file_range is provided by glibc
5807 have_copy_file_range
=no
5811 copy_file_range(0, NULL, 0, NULL, 0, 0);
5815 if compile_prog
"" "" ; then
5816 have_copy_file_range
=yes
5819 ##########################################
5820 # check if struct fsxattr is available via linux/fs.h
5824 #include <linux/fs.h>
5830 if compile_prog
"" "" ; then
5834 ##########################################
5835 # check for usable membarrier system call
5836 if test "$membarrier" = "yes"; then
5838 if test "$mingw32" = "yes" ; then
5840 elif test "$linux" = "yes" ; then
5842 #include <linux/membarrier.h>
5843 #include <sys/syscall.h>
5847 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5848 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5852 if compile_prog
"" "" ; then
5856 if test "$have_membarrier" = "no"; then
5857 feature_not_found
"membarrier" "membarrier system call not available"
5860 # Do not enable it by default even for Mingw32, because it doesn't
5865 ##########################################
5866 # check if rtnetlink.h exists and is useful
5869 #include <linux/rtnetlink.h>
5871 return IFLA_PROTO_DOWN;
5874 if compile_prog
"" "" ; then
5878 ##########################################
5879 # check for usable AF_VSOCK environment
5883 #include <sys/types.h>
5884 #include <sys/socket.h>
5885 #if !defined(AF_VSOCK)
5886 # error missing AF_VSOCK flag
5888 #include <linux/vm_sockets.h>
5891 struct sockaddr_vm svm;
5892 socklen_t len = sizeof(svm);
5893 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5894 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5895 if ((ret == -1) && (errno == ENOTCONN)) {
5901 if compile_prog
"" "" ; then
5905 ##########################################
5906 # check for usable AF_ALG environment
5910 #include <sys/types.h>
5911 #include <sys/socket.h>
5912 #include <linux/if_alg.h>
5915 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5919 if compile_prog
"" "" ; then
5922 if test "$crypto_afalg" = "yes"
5924 if test "$have_afalg" != "yes"
5926 error_exit
"AF_ALG requested but could not be detected"
5931 #################################################
5932 # Check to see if we have the Hypervisor framework
5933 if [ "$darwin" = "yes" ] ; then
5935 #include <Hypervisor/hv.h>
5936 int main() { return 0;}
5938 if ! compile_object
""; then
5942 QEMU_LDFLAGS
="-framework Hypervisor $QEMU_LDFLAGS"
5946 ##########################################
5947 # check for sysmacros.h
5951 #include <sys/sysmacros.h>
5953 return makedev(0, 0);
5956 if compile_prog
"" "" ; then
5960 ##########################################
5961 # check for _Static_assert()
5963 have_static_assert
=no
5965 _Static_assert(1, "success");
5970 if compile_prog
"" "" ; then
5971 have_static_assert
=yes
5974 ##########################################
5975 # check for utmpx.h, it is missing e.g. on OpenBSD
5980 struct utmpx user_info;
5985 if compile_prog
"" "" ; then
5989 ##########################################
5990 # check for getrandom()
5994 #include <sys/random.h>
5996 return getrandom(0, 0, GRND_NONBLOCK);
5999 if compile_prog
"" "" ; then
6003 ##########################################
6004 # checks for sanitizers
6008 have_asan_iface_h
=no
6009 have_asan_iface_fiber
=no
6011 if test "$sanitizers" = "yes" ; then
6013 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6017 # we could use a simple skeleton for flags checks, but this also
6018 # detect the static linking issue of ubsan, see also:
6019 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6023 void *tmp = malloc(10);
6025 return *(int *)(tmp + 2);
6030 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6034 if check_include
"sanitizer/asan_interface.h" ; then
6035 have_asan_iface_h
=yes
6039 #include <sanitizer/asan_interface.h>
6041 __sanitizer_start_switch_fiber(0, 0, 0);
6045 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6046 have_asan_iface_fiber
=yes
6050 ##########################################
6052 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
6053 write_c_fuzzer_skeleton
6054 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
6057 error_exit
"Your compiler doesn't support -fsanitize=fuzzer"
6062 # Thread sanitizer is, for now, much noisier than the other sanitizers;
6063 # keep it separate until that is not the case.
6064 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
6065 error_exit
"TSAN is not supported with other sanitiziers."
6068 have_tsan_iface_fiber
=no
6069 if test "$tsan" = "yes" ; then
6071 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6075 #include <sanitizer/tsan_interface.h>
6077 __tsan_create_fiber(0);
6081 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6082 have_tsan_iface_fiber
=yes
6086 ##########################################
6089 if test "$libpmem" != "no"; then
6090 if $pkg_config --exists "libpmem"; then
6092 libpmem_libs
=$
($pkg_config --libs libpmem
)
6093 libpmem_cflags
=$
($pkg_config --cflags libpmem
)
6095 if test "$libpmem" = "yes" ; then
6096 feature_not_found
"libpmem" "Install nvml or pmdk"
6102 ##########################################
6103 # check for libdaxctl
6105 if test "$libdaxctl" != "no"; then
6106 if $pkg_config --atleast-version=57 "libdaxctl"; then
6108 libdaxctl_libs
=$
($pkg_config --libs libdaxctl
)
6109 libdaxctl_cflags
=$
($pkg_config --cflags libdaxctl
)
6111 if test "$libdaxctl" = "yes" ; then
6112 feature_not_found
"libdaxctl" "Install libdaxctl"
6118 ##########################################
6121 # slirp is only required when building softmmu targets
6122 if test -z "$slirp" -a "$softmmu" != "yes" ; then
6128 if $pkg_config slirp
; then
6130 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6132 elif test -e "${source_path}/slirp/Makefile" ; then
6134 elif test -z "$slirp" ; then
6137 feature_not_found
"slirp" "Install slirp devel or git submodule"
6142 if ! $pkg_config slirp
; then
6143 feature_not_found
"slirp" "Install slirp devel"
6150 if test "$slirp" = git
; then
6151 git_submodules
="${git_submodules} slirp"
6154 slirp_cflags
="-I${source_path}/slirp/src -Islirp/src"
6155 slirp_libs
="-Lslirp -lslirp"
6156 if test "$mingw32" = "yes" ; then
6157 slirp_libs
="$slirp_libs -lws2_32 -liphlpapi"
6162 slirp_version
=$
($pkg_config --modversion slirp
2>/dev
/null
)
6163 slirp_cflags
=$
($pkg_config --cflags slirp
2>/dev
/null
)
6164 slirp_libs
=$
($pkg_config --libs slirp
2>/dev
/null
)
6170 error_exit
"Unknown state for slirp: $slirp"
6174 ##########################################
6175 # check for usable __NR_keyctl syscall
6177 if test "$linux" = "yes" ; then
6182 #include <asm/unistd.h>
6183 #include <linux/keyctl.h>
6186 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
6189 if compile_prog
"" "" ; then
6193 if test "$secret_keyring" != "no"
6195 if test "$have_keyring" = "yes"
6199 if test "$secret_keyring" = "yes"
6201 error_exit
"syscall __NR_keyctl requested, \
6202 but not implemented on your system"
6209 ##########################################
6211 # After here, no more $cc or $ld runs
6215 if test "$gcov" = "yes" ; then
6217 elif test "$fortify_source" = "yes" ; then
6218 QEMU_CFLAGS
="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
6221 if test "$debug_info" = "yes"; then
6223 LDFLAGS
="-g $LDFLAGS"
6225 if test "$debug" = "no"; then
6226 CFLAGS
="-O2 $CFLAGS"
6231 # Ensure there's only a single GP
6232 QEMU_CFLAGS
="-msmall-data $QEMU_CFLAGS"
6236 if test "$gprof" = "yes" ; then
6237 QEMU_CFLAGS
="-p $QEMU_CFLAGS"
6238 QEMU_LDFLAGS
="-p $QEMU_LDFLAGS"
6241 if test "$have_asan" = "yes"; then
6242 QEMU_CFLAGS
="-fsanitize=address $QEMU_CFLAGS"
6243 QEMU_LDFLAGS
="-fsanitize=address $QEMU_LDFLAGS"
6244 if test "$have_asan_iface_h" = "no" ; then
6245 echo "ASAN build enabled, but ASAN header missing." \
6246 "Without code annotation, the report may be inferior."
6247 elif test "$have_asan_iface_fiber" = "no" ; then
6248 echo "ASAN build enabled, but ASAN header is too old." \
6249 "Without code annotation, the report may be inferior."
6252 if test "$have_tsan" = "yes" ; then
6253 if test "$have_tsan_iface_fiber" = "yes" ; then
6254 QEMU_CFLAGS
="-fsanitize=thread $QEMU_CFLAGS"
6255 QEMU_LDFLAGS
="-fsanitize=thread $QEMU_LDFLAGS"
6257 error_exit
"Cannot enable TSAN due to missing fiber annotation interface."
6259 elif test "$tsan" = "yes" ; then
6260 error_exit
"Cannot enable TSAN due to missing sanitize thread interface."
6262 if test "$have_ubsan" = "yes"; then
6263 QEMU_CFLAGS
="-fsanitize=undefined $QEMU_CFLAGS"
6264 QEMU_LDFLAGS
="-fsanitize=undefined $QEMU_LDFLAGS"
6267 ##########################################
6269 if test "$libnfs" != "no" ; then
6270 if $pkg_config --atleast-version=1.9.3 libnfs
; then
6272 libnfs_libs
=$
($pkg_config --libs libnfs
)
6274 if test "$libnfs" = "yes" ; then
6275 feature_not_found
"libnfs" "Install libnfs devel >= 1.9.3"
6281 ##########################################
6282 # Do we have libudev
6283 if test "$libudev" != "no" ; then
6284 if $pkg_config libudev
&& test "$static" != "yes"; then
6286 libudev_libs
=$
($pkg_config --libs libudev
)
6292 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
6293 if test "$solaris" = "no" && test "$tsan" = "no"; then
6294 if $ld --version 2>/dev
/null |
grep "GNU ld" >/dev
/null
2>/dev
/null
; then
6295 QEMU_LDFLAGS
="-Wl,--warn-common $QEMU_LDFLAGS"
6299 # test if pod2man has --utf8 option
6300 if pod2man
--help |
grep -q utf8
; then
6301 POD2MAN
="pod2man --utf8"
6306 # Use ASLR, no-SEH and DEP if available
6307 if test "$mingw32" = "yes" ; then
6308 for flag
in --dynamicbase --no-seh --nxcompat; do
6309 if ld_has
$flag ; then
6310 QEMU_LDFLAGS
="-Wl,$flag $QEMU_LDFLAGS"
6315 # Disable OpenBSD W^X if available
6316 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6318 int main(void) { return 0; }
6320 wx_ldflags
="-Wl,-z,wxneeded"
6321 if compile_prog
"" "$wx_ldflags"; then
6322 QEMU_LDFLAGS
="$QEMU_LDFLAGS $wx_ldflags"
6326 qemu_confdir
="$sysconfdir/$qemu_suffix"
6327 qemu_moddir
="$libdir/$qemu_suffix"
6328 qemu_datadir
="$datadir/$qemu_suffix"
6329 qemu_docdir
="$docdir/$qemu_suffix"
6330 qemu_localedir
="$datadir/locale"
6331 qemu_icondir
="$datadir/icons"
6332 qemu_desktopdir
="$datadir/applications"
6334 # We can only support ivshmem if we have eventfd
6335 if [ "$eventfd" = "yes" ]; then
6339 if test "$softmmu" = yes ; then
6340 if test "$linux" = yes; then
6341 if test "$virtfs" != no
&& test "$cap_ng" = yes && test "$attr" = yes ; then
6344 if test "$virtfs" = yes; then
6345 error_exit
"VirtFS requires libcap-ng devel and libattr devel"
6349 if test "$mpath" != no
&& test "$mpathpersist" = yes ; then
6352 if test "$mpath" = yes; then
6353 error_exit
"Multipath requires libmpathpersist devel"
6358 if test "$virtfs" = yes; then
6359 error_exit
"VirtFS is supported only on Linux"
6362 if test "$mpath" = yes; then
6363 error_exit
"Multipath is supported only on Linux"
6369 # Probe for guest agent support/options
6371 if [ "$guest_agent" != "no" ]; then
6372 if [ "$softmmu" = no
-a "$want_tools" = no
] ; then
6374 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6376 elif [ "$guest_agent" != yes ]; then
6379 error_exit
"Guest agent is not supported on this platform"
6383 # Guest agent Window MSI package
6385 if test "$guest_agent" != yes; then
6386 if test "$guest_agent_msi" = yes; then
6387 error_exit
"MSI guest agent package requires guest agent enabled"
6390 elif test "$mingw32" != "yes"; then
6391 if test "$guest_agent_msi" = "yes"; then
6392 error_exit
"MSI guest agent package is available only for MinGW Windows cross-compilation"
6395 elif ! has wixl
; then
6396 if test "$guest_agent_msi" = "yes"; then
6397 error_exit
"MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6401 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6402 # disabled explicitly
6403 if test "$guest_agent_msi" != "no"; then
6408 if test "$guest_agent_msi" = "yes"; then
6409 if test "$guest_agent_with_vss" = "yes"; then
6410 QEMU_GA_MSI_WITH_VSS
="-D InstallVss"
6413 if test "$QEMU_GA_MANUFACTURER" = ""; then
6414 QEMU_GA_MANUFACTURER
=QEMU
6417 if test "$QEMU_GA_DISTRO" = ""; then
6418 QEMU_GA_DISTRO
=Linux
6421 if test "$QEMU_GA_VERSION" = ""; then
6422 QEMU_GA_VERSION
=$
(cat $source_path/VERSION
)
6425 QEMU_GA_MSI_MINGW_DLL_PATH
="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6429 QEMU_GA_MSI_ARCH
="-a x64 -D Arch=64"
6432 QEMU_GA_MSI_ARCH
="-D Arch=32"
6435 error_exit
"CPU $cpu not supported for building installation package"
6440 # Mac OS X ships with a broken assembler
6442 if { test "$cpu" = "i386" ||
test "$cpu" = "x86_64"; } && \
6443 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6444 test "$softmmu" = yes ; then
6445 # Different host OS linkers have different ideas about the name of the ELF
6446 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6447 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6448 for emu
in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe
; do
6449 if "$ld" -verbose 2>&1 |
grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6450 ld_i386_emulation
="$emu"
6457 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6458 if test "$cpu" = "s390x" ; then
6460 if compile_prog
"-march=z900" ""; then
6461 roms
="$roms s390-ccw"
6462 # SLOF is required for building the s390-ccw firmware on s390x,
6463 # since it is using the libnet code from SLOF for network booting.
6464 if test -e "${source_path}/.git" ; then
6465 git_submodules
="${git_submodules} roms/SLOF"
6470 # Check that the C++ compiler exists and works with the C compiler.
6471 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6474 int c_function(void);
6475 int main(void) { return c_function(); }
6482 int c_function(void);
6484 int c_function(void) { return 42; }
6489 if do_cxx
$CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
6490 # C++ compiler $cxx works ok with C compiler $cc
6493 echo "C++ compiler $cxx does not work with C compiler $cc"
6494 echo "Disabling C++ specific optional code"
6498 echo "No C++ compiler available; disabling C++ specific optional code"
6502 if test $git_update = 'yes' ; then
6503 (cd "${source_path}" && GIT
="$git" "./scripts/git-submodule.sh" update
"$git_submodules")
6505 if test "$fdt" = "git" ; then
6506 symlink
"$source_path/dtc/Makefile" "dtc/Makefile"
6509 config_host_mak
="config-host.mak"
6511 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6512 echo >> $config_host_mak
6514 echo all
: >> $config_host_mak
6515 echo "prefix=$prefix" >> $config_host_mak
6516 echo "bindir=$bindir" >> $config_host_mak
6517 echo "libdir=$libdir" >> $config_host_mak
6518 echo "libexecdir=$libexecdir" >> $config_host_mak
6519 echo "includedir=$includedir" >> $config_host_mak
6520 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6521 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6522 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6523 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6524 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6525 if test "$mingw32" = "no" ; then
6526 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6528 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6529 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6530 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6531 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6532 echo "GIT=$git" >> $config_host_mak
6533 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6534 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6536 echo "ARCH=$ARCH" >> $config_host_mak
6538 if test "$default_devices" = "yes" ; then
6539 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6541 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6543 if test "$debug_tcg" = "yes" ; then
6544 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6546 if test "$strip_opt" = "yes" ; then
6547 echo "STRIP=${strip}" >> $config_host_mak
6549 if test "$bigendian" = "yes" ; then
6550 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6552 if test "$mingw32" = "yes" ; then
6553 echo "CONFIG_WIN32=y" >> $config_host_mak
6554 rc_version
=$
(cat $source_path/VERSION
)
6555 version_major
=${rc_version%%.*}
6556 rc_version
=${rc_version#*.}
6557 version_minor
=${rc_version%%.*}
6558 rc_version
=${rc_version#*.}
6559 version_subminor
=${rc_version%%.*}
6561 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6562 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6563 if test "$guest_agent_with_vss" = "yes" ; then
6564 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6565 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6566 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6568 if test "$guest_agent_ntddscsi" = "yes" ; then
6569 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6571 if test "$guest_agent_msi" = "yes"; then
6572 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6573 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6574 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6575 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6576 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6577 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6578 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6581 echo "CONFIG_POSIX=y" >> $config_host_mak
6584 if test "$linux" = "yes" ; then
6585 echo "CONFIG_LINUX=y" >> $config_host_mak
6588 if test "$darwin" = "yes" ; then
6589 echo "CONFIG_DARWIN=y" >> $config_host_mak
6592 if test "$solaris" = "yes" ; then
6593 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6595 if test "$haiku" = "yes" ; then
6596 echo "CONFIG_HAIKU=y" >> $config_host_mak
6598 if test "$static" = "yes" ; then
6599 echo "CONFIG_STATIC=y" >> $config_host_mak
6601 if test "$profiler" = "yes" ; then
6602 echo "CONFIG_PROFILER=y" >> $config_host_mak
6604 if test "$want_tools" = "yes" ; then
6605 echo "CONFIG_TOOLS=y" >> $config_host_mak
6607 if test "$guest_agent" = "yes" ; then
6608 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
6610 if test "$slirp" != "no"; then
6611 echo "CONFIG_SLIRP=y" >> $config_host_mak
6612 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6613 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6614 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6617 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6618 subdirs
="$subdirs slirp"
6620 if test "$vde" = "yes" ; then
6621 echo "CONFIG_VDE=y" >> $config_host_mak
6622 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6624 if test "$netmap" = "yes" ; then
6625 echo "CONFIG_NETMAP=y" >> $config_host_mak
6627 if test "$l2tpv3" = "yes" ; then
6628 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6630 if test "$gprof" = "yes" ; then
6631 echo "CONFIG_GPROF=y" >> $config_host_mak
6633 if test "$cap_ng" = "yes" ; then
6634 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
6635 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
6637 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6638 for drv
in $audio_drv_list; do
6639 def
=CONFIG_AUDIO_$
(echo $drv | LC_ALL
=C
tr '[a-z]' '[A-Z]')
6640 echo "$def=y" >> $config_host_mak
6642 if test "$alsa" = "yes" ; then
6643 echo "CONFIG_ALSA=y" >> $config_host_mak
6645 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6646 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
6647 if test "$libpulse" = "yes" ; then
6648 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
6650 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6651 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
6652 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6653 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6654 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6655 if test "$libjack" = "yes" ; then
6656 echo "CONFIG_LIBJACK=y" >> $config_host_mak
6658 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
6659 if test "$audio_win_int" = "yes" ; then
6660 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6662 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6663 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6664 if test "$xfs" = "yes" ; then
6665 echo "CONFIG_XFS=y" >> $config_host_mak
6667 qemu_version
=$
(head $source_path/VERSION
)
6668 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6669 echo "SRC_PATH=$source_path" >> $config_host_mak
6670 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6671 if [ "$docs" = "yes" ] ; then
6672 echo "BUILD_DOCS=yes" >> $config_host_mak
6674 if test "$modules" = "yes"; then
6675 # $shacmd can generate a hash started with digit, which the compiler doesn't
6676 # like as an symbol. So prefix it with an underscore
6677 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6678 echo "CONFIG_MODULES=y" >> $config_host_mak
6680 if test "$module_upgrades" = "yes"; then
6681 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6683 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6684 echo "CONFIG_X11=y" >> $config_host_mak
6685 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6686 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6688 if test "$cocoa" = "yes" ; then
6689 echo "CONFIG_COCOA=y" >> $config_host_mak
6691 if test "$iconv" = "yes" ; then
6692 echo "CONFIG_ICONV=y" >> $config_host_mak
6693 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6694 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6696 if test "$curses" = "yes" ; then
6697 echo "CONFIG_CURSES=y" >> $config_host_mak
6698 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6699 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6701 if test "$pipe2" = "yes" ; then
6702 echo "CONFIG_PIPE2=y" >> $config_host_mak
6704 if test "$accept4" = "yes" ; then
6705 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6707 if test "$splice" = "yes" ; then
6708 echo "CONFIG_SPLICE=y" >> $config_host_mak
6710 if test "$eventfd" = "yes" ; then
6711 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6713 if test "$memfd" = "yes" ; then
6714 echo "CONFIG_MEMFD=y" >> $config_host_mak
6716 if test "$have_usbfs" = "yes" ; then
6717 echo "CONFIG_USBFS=y" >> $config_host_mak
6719 if test "$fallocate" = "yes" ; then
6720 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6722 if test "$fallocate_punch_hole" = "yes" ; then
6723 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6725 if test "$fallocate_zero_range" = "yes" ; then
6726 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6728 if test "$posix_fallocate" = "yes" ; then
6729 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6731 if test "$sync_file_range" = "yes" ; then
6732 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6734 if test "$fiemap" = "yes" ; then
6735 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6737 if test "$dup3" = "yes" ; then
6738 echo "CONFIG_DUP3=y" >> $config_host_mak
6740 if test "$ppoll" = "yes" ; then
6741 echo "CONFIG_PPOLL=y" >> $config_host_mak
6743 if test "$prctl_pr_set_timerslack" = "yes" ; then
6744 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6746 if test "$epoll" = "yes" ; then
6747 echo "CONFIG_EPOLL=y" >> $config_host_mak
6749 if test "$epoll_create1" = "yes" ; then
6750 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6752 if test "$sendfile" = "yes" ; then
6753 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6755 if test "$timerfd" = "yes" ; then
6756 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6758 if test "$setns" = "yes" ; then
6759 echo "CONFIG_SETNS=y" >> $config_host_mak
6761 if test "$clock_adjtime" = "yes" ; then
6762 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6764 if test "$syncfs" = "yes" ; then
6765 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6767 if test "$kcov" = "yes" ; then
6768 echo "CONFIG_KCOV=y" >> $config_host_mak
6770 if test "$btrfs" = "yes" ; then
6771 echo "CONFIG_BTRFS=y" >> $config_host_mak
6773 if test "$inotify" = "yes" ; then
6774 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6776 if test "$inotify1" = "yes" ; then
6777 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6779 if test "$sem_timedwait" = "yes" ; then
6780 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6782 if test "$strchrnul" = "yes" ; then
6783 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6785 if test "$st_atim" = "yes" ; then
6786 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
6788 if test "$byteswap_h" = "yes" ; then
6789 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6791 if test "$bswap_h" = "yes" ; then
6792 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6794 if test "$curl" = "yes" ; then
6795 echo "CONFIG_CURL=y" >> $config_host_mak
6796 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6797 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6799 if test "$brlapi" = "yes" ; then
6800 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6801 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6803 if test "$gtk" = "yes" ; then
6804 echo "CONFIG_GTK=y" >> $config_host_mak
6805 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6806 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6807 if test "$gtk_gl" = "yes" ; then
6808 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6811 if test "$gio" = "yes" ; then
6812 echo "CONFIG_GIO=y" >> $config_host_mak
6813 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6814 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6815 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
6817 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6818 if test "$gnutls" = "yes" ; then
6819 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6820 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
6821 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
6823 if test "$gcrypt" = "yes" ; then
6824 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6825 if test "$gcrypt_hmac" = "yes" ; then
6826 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6828 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
6829 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
6831 if test "$nettle" = "yes" ; then
6832 echo "CONFIG_NETTLE=y" >> $config_host_mak
6833 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6834 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
6835 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
6837 if test "$qemu_private_xts" = "yes" ; then
6838 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6840 if test "$tasn1" = "yes" ; then
6841 echo "CONFIG_TASN1=y" >> $config_host_mak
6843 if test "$auth_pam" = "yes" ; then
6844 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6846 if test "$have_ifaddrs_h" = "yes" ; then
6847 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6849 if test "$have_drm_h" = "yes" ; then
6850 echo "HAVE_DRM_H=y" >> $config_host_mak
6852 if test "$have_broken_size_max" = "yes" ; then
6853 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6855 if test "$have_openpty" = "yes" ; then
6856 echo "HAVE_OPENPTY=y" >> $config_host_mak
6858 if test "$have_sys_signal_h" = "yes" ; then
6859 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
6862 # Work around a system header bug with some kernel/XFS header
6863 # versions where they both try to define 'struct fsxattr':
6864 # xfs headers will not try to redefine structs from linux headers
6865 # if this macro is set.
6866 if test "$have_fsxattr" = "yes" ; then
6867 echo "HAVE_FSXATTR=y" >> $config_host_mak
6869 if test "$have_copy_file_range" = "yes" ; then
6870 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6872 if test "$vte" = "yes" ; then
6873 echo "CONFIG_VTE=y" >> $config_host_mak
6874 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6875 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6877 if test "$virglrenderer" = "yes" ; then
6878 echo "CONFIG_VIRGL=y" >> $config_host_mak
6879 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6880 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6882 if test "$xen" = "yes" ; then
6883 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6884 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6885 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
6886 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
6888 if test "$linux_aio" = "yes" ; then
6889 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6891 if test "$linux_io_uring" = "yes" ; then
6892 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
6893 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
6894 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
6896 if test "$attr" = "yes" ; then
6897 echo "CONFIG_ATTR=y" >> $config_host_mak
6898 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
6900 if test "$libattr" = "yes" ; then
6901 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6903 if test "$virtfs" = "yes" ; then
6904 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6906 if test "$mpath" = "yes" ; then
6907 echo "CONFIG_MPATH=y" >> $config_host_mak
6908 if test "$mpathpersist_new_api" = "yes"; then
6909 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6912 if test "$vhost_scsi" = "yes" ; then
6913 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6915 if test "$vhost_net" = "yes" ; then
6916 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6918 if test "$vhost_net_user" = "yes" ; then
6919 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6921 if test "$vhost_net_vdpa" = "yes" ; then
6922 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
6924 if test "$vhost_crypto" = "yes" ; then
6925 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6927 if test "$vhost_vsock" = "yes" ; then
6928 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6929 if test "$vhost_user" = "yes" ; then
6930 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
6933 if test "$vhost_kernel" = "yes" ; then
6934 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6936 if test "$vhost_user" = "yes" ; then
6937 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6939 if test "$vhost_vdpa" = "yes" ; then
6940 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
6942 if test "$vhost_user_fs" = "yes" ; then
6943 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
6945 if test "$blobs" = "yes" ; then
6946 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6948 if test "$iovec" = "yes" ; then
6949 echo "CONFIG_IOVEC=y" >> $config_host_mak
6951 if test "$preadv" = "yes" ; then
6952 echo "CONFIG_PREADV=y" >> $config_host_mak
6954 if test "$fdt" != "no" ; then
6955 echo "CONFIG_FDT=y" >> $config_host_mak
6956 echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak
6957 echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak
6959 if test "$membarrier" = "yes" ; then
6960 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6962 if test "$signalfd" = "yes" ; then
6963 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6965 if test "$optreset" = "yes" ; then
6966 echo "HAVE_OPTRESET=y" >> $config_host_mak
6968 if test "$tcg" = "yes"; then
6969 echo "CONFIG_TCG=y" >> $config_host_mak
6970 if test "$tcg_interpreter" = "yes" ; then
6971 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6974 if test "$fdatasync" = "yes" ; then
6975 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6977 if test "$madvise" = "yes" ; then
6978 echo "CONFIG_MADVISE=y" >> $config_host_mak
6980 if test "$posix_madvise" = "yes" ; then
6981 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6983 if test "$posix_memalign" = "yes" ; then
6984 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6986 if test "$spice" = "yes" ; then
6987 echo "CONFIG_SPICE=y" >> $config_host_mak
6988 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
6989 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
6992 if test "$smartcard" = "yes" ; then
6993 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6994 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6995 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6998 if test "$libusb" = "yes" ; then
6999 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7000 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7001 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
7004 if test "$usb_redir" = "yes" ; then
7005 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7006 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7007 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
7010 if test "$opengl" = "yes" ; then
7011 echo "CONFIG_OPENGL=y" >> $config_host_mak
7012 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
7013 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7014 if test "$opengl_dmabuf" = "yes" ; then
7015 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7019 if test "$gbm" = "yes" ; then
7020 echo "CONFIG_GBM=y" >> $config_host_mak
7021 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7022 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7026 if test "$malloc_trim" = "yes" ; then
7027 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7030 if test "$avx2_opt" = "yes" ; then
7031 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7034 if test "$avx512f_opt" = "yes" ; then
7035 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7038 if test "$lzo" = "yes" ; then
7039 echo "CONFIG_LZO=y" >> $config_host_mak
7040 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
7043 if test "$snappy" = "yes" ; then
7044 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7045 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
7048 if test "$bzip2" = "yes" ; then
7049 echo "CONFIG_BZIP2=y" >> $config_host_mak
7050 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7053 if test "$lzfse" = "yes" ; then
7054 echo "CONFIG_LZFSE=y" >> $config_host_mak
7055 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7058 if test "$zstd" = "yes" ; then
7059 echo "CONFIG_ZSTD=y" >> $config_host_mak
7060 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
7061 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
7064 if test "$libiscsi" = "yes" ; then
7065 echo "CONFIG_LIBISCSI=y" >> $config_host_mak
7066 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7067 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7070 if test "$libnfs" = "yes" ; then
7071 echo "CONFIG_LIBNFS=y" >> $config_host_mak
7072 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7075 if test "$seccomp" = "yes"; then
7076 echo "CONFIG_SECCOMP=y" >> $config_host_mak
7077 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7078 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7081 # XXX: suppress that
7082 if [ "$bsd" = "yes" ] ; then
7083 echo "CONFIG_BSD=y" >> $config_host_mak
7086 if test "$localtime_r" = "yes" ; then
7087 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7089 if test "$qom_cast_debug" = "yes" ; then
7090 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7092 if test "$rbd" = "yes" ; then
7093 echo "CONFIG_RBD=y" >> $config_host_mak
7094 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7097 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7098 if test "$coroutine_pool" = "yes" ; then
7099 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7101 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7104 if test "$debug_stack_usage" = "yes" ; then
7105 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7108 if test "$crypto_afalg" = "yes" ; then
7109 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7112 if test "$open_by_handle_at" = "yes" ; then
7113 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7116 if test "$linux_magic_h" = "yes" ; then
7117 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7120 if test "$valgrind_h" = "yes" ; then
7121 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7124 if test "$have_asan_iface_fiber" = "yes" ; then
7125 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7128 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
7129 echo "CONFIG_TSAN=y" >> $config_host_mak
7132 if test "$has_environ" = "yes" ; then
7133 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7136 if test "$cpuid_h" = "yes" ; then
7137 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7140 if test "$int128" = "yes" ; then
7141 echo "CONFIG_INT128=y" >> $config_host_mak
7144 if test "$atomic128" = "yes" ; then
7145 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7148 if test "$cmpxchg128" = "yes" ; then
7149 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7152 if test "$atomic64" = "yes" ; then
7153 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7156 if test "$attralias" = "yes" ; then
7157 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7160 if test "$getauxval" = "yes" ; then
7161 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7164 if test "$glusterfs" = "yes" ; then
7165 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
7166 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7167 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7170 if test "$glusterfs_xlator_opt" = "yes" ; then
7171 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7174 if test "$glusterfs_discard" = "yes" ; then
7175 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7178 if test "$glusterfs_fallocate" = "yes" ; then
7179 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7182 if test "$glusterfs_zerofill" = "yes" ; then
7183 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7186 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7187 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7190 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7191 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7194 if test "$libssh" = "yes" ; then
7195 echo "CONFIG_LIBSSH=y" >> $config_host_mak
7196 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7197 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7200 if test "$live_block_migration" = "yes" ; then
7201 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7204 if test "$tpm" = "yes"; then
7205 echo 'CONFIG_TPM=y' >> $config_host_mak
7208 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7209 if have_backend
"nop"; then
7210 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7212 if have_backend
"simple"; then
7213 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7214 # Set the appropriate trace file.
7215 trace_file
="\"$trace_file-\" FMT_pid"
7217 if have_backend
"log"; then
7218 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7220 if have_backend
"ust"; then
7221 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7222 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
7223 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
7225 if have_backend
"dtrace"; then
7226 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7227 if test "$trace_backend_stap" = "yes" ; then
7228 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7231 if have_backend
"ftrace"; then
7232 if test "$linux" = "yes" ; then
7233 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7235 feature_not_found
"ftrace(trace backend)" "ftrace requires Linux"
7238 if have_backend
"syslog"; then
7239 if test "$posix_syslog" = "yes" ; then
7240 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7242 feature_not_found
"syslog(trace backend)" "syslog not available"
7245 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7247 if test "$rdma" = "yes" ; then
7248 echo "CONFIG_RDMA=y" >> $config_host_mak
7249 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7252 if test "$pvrdma" = "yes" ; then
7253 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7256 if test "$have_rtnetlink" = "yes" ; then
7257 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7260 if test "$libxml2" = "yes" ; then
7261 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7262 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7263 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7266 if test "$replication" = "yes" ; then
7267 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7270 if test "$have_af_vsock" = "yes" ; then
7271 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7274 if test "$have_sysmacros" = "yes" ; then
7275 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7278 if test "$have_static_assert" = "yes" ; then
7279 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7282 if test "$have_utmpx" = "yes" ; then
7283 echo "HAVE_UTMPX=y" >> $config_host_mak
7285 if test "$have_getrandom" = "yes" ; then
7286 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7288 if test "$ivshmem" = "yes" ; then
7289 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7291 if test "$capstone" != "no" ; then
7292 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7293 echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak
7294 echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak
7296 if test "$debug_mutex" = "yes" ; then
7297 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7300 # Hold two types of flag:
7301 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7302 # a thread we have a handle to
7303 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7305 if test "$pthread_setname_np_w_tid" = "yes" ; then
7306 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7307 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7308 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7309 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7310 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7313 if test "$libpmem" = "yes" ; then
7314 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7315 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
7316 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
7319 if test "$libdaxctl" = "yes" ; then
7320 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
7321 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
7324 if test "$bochs" = "yes" ; then
7325 echo "CONFIG_BOCHS=y" >> $config_host_mak
7327 if test "$cloop" = "yes" ; then
7328 echo "CONFIG_CLOOP=y" >> $config_host_mak
7330 if test "$dmg" = "yes" ; then
7331 echo "CONFIG_DMG=y" >> $config_host_mak
7333 if test "$qcow1" = "yes" ; then
7334 echo "CONFIG_QCOW1=y" >> $config_host_mak
7336 if test "$vdi" = "yes" ; then
7337 echo "CONFIG_VDI=y" >> $config_host_mak
7339 if test "$vvfat" = "yes" ; then
7340 echo "CONFIG_VVFAT=y" >> $config_host_mak
7342 if test "$qed" = "yes" ; then
7343 echo "CONFIG_QED=y" >> $config_host_mak
7345 if test "$parallels" = "yes" ; then
7346 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7348 if test "$sheepdog" = "yes" ; then
7349 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7351 if test "$pty_h" = "yes" ; then
7352 echo "HAVE_PTY_H=y" >> $config_host_mak
7354 if test "$have_mlockall" = "yes" ; then
7355 echo "HAVE_MLOCKALL=y" >> $config_host_mak
7357 if test "$fuzzing" = "yes" ; then
7358 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
7359 # needed CFLAGS have already been provided
7360 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
7361 QEMU_CFLAGS
="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
7362 FUZZ_EXE_LDFLAGS
="-fsanitize=fuzzer"
7364 FUZZ_EXE_LDFLAGS
="$LIB_FUZZING_ENGINE"
7368 if test "$plugins" = "yes" ; then
7369 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7370 # Copy the export object list to the build dir
7371 if test "$ld_dynamic_list" = "yes" ; then
7372 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7373 ld_symbols
=qemu-plugins-ld.symbols
7374 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7375 elif test "$ld_exported_symbols_list" = "yes" ; then
7376 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7377 ld64_symbols
=qemu-plugins-ld64.symbols
7378 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7379 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" |
sed 's/;//g' | \
7380 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7383 "If \$plugins=yes, either \$ld_dynamic_list or " \
7384 "\$ld_exported_symbols_list should have been set to 'yes'."
7388 if test -n "$gdb_bin" ; then
7389 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7392 if test "$secret_keyring" = "yes" ; then
7393 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
7396 if test "$tcg_interpreter" = "yes"; then
7397 QEMU_INCLUDES
="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES"
7398 elif test "$ARCH" = "sparc64" ; then
7399 QEMU_INCLUDES
="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES"
7400 elif test "$ARCH" = "s390x" ; then
7401 QEMU_INCLUDES
="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES"
7402 elif test "$ARCH" = "x86_64" ||
test "$ARCH" = "x32" ; then
7403 QEMU_INCLUDES
="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES"
7404 elif test "$ARCH" = "ppc64" ; then
7405 QEMU_INCLUDES
="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES"
7406 elif test "$ARCH" = "riscv32" ||
test "$ARCH" = "riscv64" ; then
7407 QEMU_INCLUDES
="-I${source_path}/tcg/riscv $QEMU_INCLUDES"
7409 QEMU_INCLUDES
="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES"
7412 echo "ROMS=$roms" >> $config_host_mak
7413 echo "MAKE=$make" >> $config_host_mak
7414 echo "PYTHON=$python" >> $config_host_mak
7415 echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
7416 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
7417 echo "MESON=$meson" >> $config_host_mak
7418 echo "CC=$cc" >> $config_host_mak
7419 if $iasl -h > /dev
/null
2>&1; then
7420 echo "CONFIG_IASL=$iasl" >> $config_host_mak
7422 echo "CXX=$cxx" >> $config_host_mak
7423 echo "OBJCC=$objcc" >> $config_host_mak
7424 echo "AR=$ar" >> $config_host_mak
7425 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7426 echo "AS=$as" >> $config_host_mak
7427 echo "CCAS=$ccas" >> $config_host_mak
7428 echo "CPP=$cpp" >> $config_host_mak
7429 echo "OBJCOPY=$objcopy" >> $config_host_mak
7430 echo "LD=$ld" >> $config_host_mak
7431 echo "RANLIB=$ranlib" >> $config_host_mak
7432 echo "NM=$nm" >> $config_host_mak
7433 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7434 echo "WINDRES=$windres" >> $config_host_mak
7435 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7436 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7437 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7438 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7439 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7440 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
7441 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
7442 if test "$sparse" = "yes" ; then
7443 echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7445 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7446 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7447 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7448 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7449 echo "EXESUF=$EXESUF" >> $config_host_mak
7450 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
7451 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
7452 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7453 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7454 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7455 if test "$gcov" = "yes" ; then
7456 echo "CONFIG_GCOV=y" >> $config_host_mak
7459 if test "$libudev" != "no"; then
7460 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7461 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7463 if test "$fuzzing" != "no"; then
7464 echo "CONFIG_FUZZ=y" >> $config_host_mak
7466 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
7468 if test "$edk2_blobs" = "yes" ; then
7469 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7472 if test "$rng_none" = "yes"; then
7473 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
7476 # use included Linux headers
7477 if test "$linux" = "yes" ; then
7478 mkdir
-p linux-headers
7496 # For most CPUs the kernel architecture name and QEMU CPU name match.
7500 # For non-KVM architectures we will not have asm headers
7501 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7502 symlink
"$source_path/linux-headers/asm-$linux_arch" linux-headers
/asm
7506 for target
in $target_list; do
7507 target_dir
="$target"
7508 config_target_mak
=$target_dir/config-target.mak
7509 target_name
=$
(echo $target | cut
-d '-' -f 1)
7510 target_aligned_only
="no"
7511 case "$target_name" in
7512 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb
)
7513 target_aligned_only
="yes"
7516 target_bigendian
="no"
7517 case "$target_name" in
7518 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb
)
7519 target_bigendian
="yes"
7523 target_user_only
="no"
7524 target_linux_user
="no"
7525 target_bsd_user
="no"
7527 ${target_name}-softmmu)
7528 target_softmmu
="yes"
7530 ${target_name}-linux-user)
7531 target_user_only
="yes"
7532 target_linux_user
="yes"
7534 ${target_name}-bsd-user)
7535 target_user_only
="yes"
7536 target_bsd_user
="yes"
7539 error_exit
"Target '$target' not recognised"
7544 mkdir
-p $target_dir
7545 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7549 interp_prefix1
=$
(echo "$interp_prefix" |
sed "s/%M/$target_name/g")
7552 TARGET_ARCH
="$target_name"
7555 TARGET_SYSTBL_ABI
=""
7558 case "$target_name" in
7561 gdb_xml_files
="i386-32bit.xml"
7562 TARGET_SYSTBL_ABI
=i386
7563 TARGET_SYSTBL
=syscall_32.tbl
7566 TARGET_BASE_ARCH
=i386
7567 TARGET_SYSTBL_ABI
=common
,64
7568 TARGET_SYSTBL
=syscall_64.tbl
7570 gdb_xml_files
="i386-64bit.xml"
7574 TARGET_SYSTBL_ABI
=common
7578 TARGET_SYSTBL_ABI
=common
,oabi
7581 gdb_xml_files
="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
7585 TARGET_BASE_ARCH
=arm
7588 gdb_xml_files
="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
7591 gdb_xml_files
="avr-cpu.xml"
7592 target_compiler
=$cross_cc_avr
7598 TARGET_SYSTBL_ABI
=common
,32
7604 gdb_xml_files
="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
7605 TARGET_SYSTBL_ABI
=common
7607 microblaze|microblazeel
)
7608 TARGET_ARCH
=microblaze
7609 TARGET_SYSTBL_ABI
=common
7616 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7617 TARGET_SYSTBL_ABI
=o32
7618 TARGET_SYSTBL
=syscall_o32.tbl
7623 TARGET_BASE_ARCH
=mips
7624 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7625 echo "TARGET_ABI32=y" >> $config_target_mak
7626 TARGET_SYSTBL_ABI
=n32
7627 TARGET_SYSTBL
=syscall_n32.tbl
7632 TARGET_BASE_ARCH
=mips
7633 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7634 TARGET_SYSTBL_ABI
=n64
7635 TARGET_SYSTBL
=syscall_n64.tbl
7642 TARGET_ARCH
=openrisc
7643 TARGET_BASE_ARCH
=openrisc
7646 gdb_xml_files
="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7647 TARGET_SYSTBL_ABI
=common
,nospu
,32
7650 TARGET_BASE_ARCH
=ppc
7652 TARGET_SYSTBL_ABI
=common
,nospu
,64
7654 gdb_xml_files
="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7658 TARGET_BASE_ARCH
=ppc
7660 TARGET_SYSTBL_ABI
=common
,nospu
,64
7662 gdb_xml_files
="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7666 TARGET_BASE_ARCH
=ppc
7668 TARGET_SYSTBL_ABI
=common
,nospu
,32
7669 echo "TARGET_ABI32=y" >> $config_target_mak
7670 gdb_xml_files
="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7671 deprecated_features
="ppc64abi32 ${deprecated_features}"
7674 TARGET_BASE_ARCH
=riscv
7675 TARGET_ABI_DIR
=riscv
7677 gdb_xml_files
="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
7680 TARGET_BASE_ARCH
=riscv
7681 TARGET_ABI_DIR
=riscv
7683 gdb_xml_files
="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
7688 target_compiler
=$cross_cc_rx
7689 gdb_xml_files
="rx-core.xml"
7693 TARGET_SYSTBL_ABI
=common
7697 TARGET_SYSTBL_ABI
=common
,32
7700 TARGET_BASE_ARCH
=sparc
7701 TARGET_SYSTBL_ABI
=common
,64
7705 TARGET_BASE_ARCH
=sparc
7706 TARGET_ABI_DIR
=sparc
7707 TARGET_SYSTBL_ABI
=common
,32
7708 echo "TARGET_ABI32=y" >> $config_target_mak
7711 TARGET_SYSTBL_ABI
=common
,64
7713 gdb_xml_files
="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7723 TARGET_SYSTBL_ABI
=common
7728 error_exit
"Unsupported target CPU"
7731 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7732 if [ "$TARGET_BASE_ARCH" = "" ]; then
7733 TARGET_BASE_ARCH
=$TARGET_ARCH
7735 if [ "$TARGET_SYSTBL_ABI" != "" ] && [ "$TARGET_SYSTBL" = "" ]; then
7736 TARGET_SYSTBL
=syscall.tbl
7740 echo "$@"| LC_ALL
=C
tr '[a-z]' '[A-Z]'
7743 target_arch_name
="$(upper $TARGET_ARCH)"
7744 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7745 echo "TARGET_NAME=$target_name" >> $config_target_mak
7746 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7747 if [ "$TARGET_ABI_DIR" = "" ]; then
7748 TARGET_ABI_DIR
=$TARGET_ARCH
7750 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7751 if [ "$HOST_VARIANT_DIR" != "" ]; then
7752 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7754 if [ "$TARGET_SYSTBL_ABI" != "" ]; then
7755 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
7756 echo "TARGET_SYSTBL=$TARGET_SYSTBL" >> $config_target_mak
7759 if supported_xen_target
$target; then
7760 echo "CONFIG_XEN=y" >> $config_target_mak
7761 if test "$xen_pci_passthrough" = yes; then
7762 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7765 if supported_kvm_target
$target; then
7766 echo "CONFIG_KVM=y" >> $config_target_mak
7768 if supported_hax_target
$target; then
7769 echo "CONFIG_HAX=y" >> $config_target_mak
7771 if supported_hvf_target
$target; then
7772 echo "CONFIG_HVF=y" >> $config_target_mak
7774 if supported_whpx_target
$target; then
7775 echo "CONFIG_WHPX=y" >> $config_target_mak
7777 if test "$target_aligned_only" = "yes" ; then
7778 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7780 if test "$target_bigendian" = "yes" ; then
7781 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7783 if test "$target_softmmu" = "yes" ; then
7784 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7785 if test "$mttcg" = "yes" ; then
7786 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7789 if test "$target_user_only" = "yes" ; then
7790 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7791 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7792 symlink
"../qemu-$target_name" "$target_dir/qemu-$target_name"
7794 symlink
"../qemu-system-$target_name" "$target_dir/qemu-system-$target_name"
7796 if test "$target_linux_user" = "yes" ; then
7797 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7800 if test ! -z "$gdb_xml_files" ; then
7801 for x
in $gdb_xml_files; do
7802 list
="$list gdb-xml/$x"
7804 echo "TARGET_XML_FILES=$list" >> $config_target_mak
7807 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
7808 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7810 if test "$target_bsd_user" = "yes" ; then
7811 echo "CONFIG_BSD_USER=y" >> $config_target_mak
7814 done # for target in $targets
7816 if [ "$fdt" = "git" ]; then
7817 subdirs
="$subdirs dtc"
7819 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7820 subdirs
="$subdirs capstone"
7822 echo "SUBDIRS=$subdirs" >> $config_host_mak
7823 if test -n "$LIBCAPSTONE"; then
7824 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7827 if test "$numa" = "yes"; then
7828 echo "CONFIG_NUMA=y" >> $config_host_mak
7829 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
7832 if test "$ccache_cpp2" = "yes"; then
7833 echo "export CCACHE_CPP2=y" >> $config_host_mak
7836 if test "$safe_stack" = "yes"; then
7837 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
7840 # If we're using a separate build tree, set it up now.
7841 # DIRS are directories which we simply mkdir in the build tree;
7842 # LINKS are things to symlink back into the source tree
7843 # (these can be both files and directories).
7844 # Caution: do not add files or directories here using wildcards. This
7845 # will result in problems later if a new file matching the wildcard is
7846 # added to the source tree -- nothing will cause configure to be rerun
7847 # so the build tree will be missing the link back to the new file, and
7848 # tests might fail. Prefer to keep the relevant files in their own
7849 # directory and symlink the directory instead.
7850 # UNLINK is used to remove symlinks from older development versions
7851 # that might get into the way when doing "git update" without doing
7852 # a "make distclean" in between.
7853 DIRS
="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
7854 DIRS
="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
7855 DIRS
="$DIRS docs docs/interop fsdev scsi"
7856 DIRS
="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
7857 DIRS
="$DIRS roms/seabios"
7858 DIRS
="$DIRS contrib/plugins/"
7860 LINKS
="$LINKS tests/tcg/lm32/Makefile"
7861 LINKS
="$LINKS tests/tcg/Makefile.target"
7862 LINKS
="$LINKS pc-bios/optionrom/Makefile"
7863 LINKS
="$LINKS pc-bios/s390-ccw/Makefile"
7864 LINKS
="$LINKS roms/seabios/Makefile"
7865 LINKS
="$LINKS pc-bios/qemu-icon.bmp"
7866 LINKS
="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
7867 LINKS
="$LINKS tests/acceptance tests/data"
7868 LINKS
="$LINKS tests/qemu-iotests/check"
7869 LINKS
="$LINKS python"
7870 LINKS
="$LINKS contrib/plugins/Makefile "
7871 UNLINK
="pc-bios/keymaps"
7873 $source_path/pc-bios
/*.bin \
7874 $source_path/pc-bios
/*.elf \
7875 $source_path/pc-bios
/*.lid \
7876 $source_path/pc-bios
/*.rom \
7877 $source_path/pc-bios
/*.dtb \
7878 $source_path/pc-bios
/*.img \
7879 $source_path/pc-bios
/openbios-
* \
7880 $source_path/pc-bios
/u-boot.
* \
7881 $source_path/pc-bios
/edk2-
*.fd.bz2 \
7882 $source_path/pc-bios
/palcode-
*
7884 LINKS
="$LINKS pc-bios/$(basename $bios_file)"
7887 for f
in $LINKS ; do
7888 if [ -e "$source_path/$f" ]; then
7889 symlink
"$source_path/$f" "$f"
7892 for f
in $UNLINK ; do
7893 if [ -L "$f" ]; then
7898 (for i
in $cross_cc_vars; do
7901 export target_list source_path use_containers
7902 $source_path/tests
/tcg
/configure.sh
)
7904 # temporary config to build submodules
7905 for rom
in seabios
; do
7906 config_mak
=roms
/$rom/config.mak
7907 echo "# Automatically generated by configure - do not modify" > $config_mak
7908 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7909 echo "AS=$as" >> $config_mak
7910 echo "CCAS=$ccas" >> $config_mak
7911 echo "CC=$cc" >> $config_mak
7912 echo "BCC=bcc" >> $config_mak
7913 echo "CPP=$cpp" >> $config_mak
7914 echo "OBJCOPY=objcopy" >> $config_mak
7915 echo "IASL=$iasl" >> $config_mak
7916 echo "LD=$ld" >> $config_mak
7917 echo "RANLIB=$ranlib" >> $config_mak
7920 # set up qemu-iotests in this build directory
7921 iotests_common_env
="tests/qemu-iotests/common.env"
7923 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7924 echo >> "$iotests_common_env"
7925 echo "export PYTHON='$python'" >> "$iotests_common_env"
7927 if test "$skip_meson" = no
; then
7928 cross
="config-meson.cross.new"
7930 echo "['$(echo $* | sed "s
/ /','/g
")']"
7933 echo "# Automatically generated by configure - do not modify" > $cross
7934 echo "[properties]" >> $cross
7935 test -z "$cxx" && echo "link_language = 'c'" >> $cross
7936 echo "[binaries]" >> $cross
7937 echo "c = $(meson_quote $cc)" >> $cross
7938 test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross
7939 echo "ar = $(meson_quote $ar)" >> $cross
7940 echo "nm = $(meson_quote $nm)" >> $cross
7941 echo "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross
7942 echo "ranlib = $(meson_quote $ranlib)" >> $cross
7943 if has
$sdl2_config; then
7944 echo "sdl2-config = $(meson_quote $sdl2_config)" >> $cross
7946 echo "strip = $(meson_quote $strip)" >> $cross
7947 echo "windres = $(meson_quote $windres)" >> $cross
7948 if test -n "$cross_prefix"; then
7949 cross_arg
="--cross-file config-meson.cross"
7950 # Hack: Meson expects an absolute path for the *build* machine
7951 # for the prefix, so add a slash in front of a Windows path that
7952 # includes a drive letter.
7954 # See https://github.com/mesonbuild/meson/issues/7577.
7955 echo "[host_machine]" >> $cross
7956 if test "$mingw32" = "yes" ; then
7957 echo "system = 'windows'" >> $cross
7959 ?
:*) pre_prefix
=/ ;;
7962 if test "$linux" = "yes" ; then
7963 echo "system = 'linux'" >> $cross
7967 echo "cpu_family = 'x86'" >> $cross
7970 echo "cpu_family = 'ppc64'" >> $cross
7973 echo "cpu_family = '$ARCH'" >> $cross
7976 echo "cpu = '$cpu'" >> $cross
7977 if test "$bigendian" = "yes" ; then
7978 echo "endian = 'big'" >> $cross
7980 echo "endian = 'little'" >> $cross
7983 cross_arg
="--native-file config-meson.cross"
7985 mv $cross config-meson.cross
7987 rm -rf meson-private meson-info meson-logs
7988 NINJA
=${ninja:-$PWD/ninjatool} $meson setup \
7989 --prefix "${pre_prefix}$prefix" \
7990 --libdir "${pre_prefix}$libdir" \
7991 --libexecdir "${pre_prefix}$libexecdir" \
7992 --bindir "${pre_prefix}$bindir" \
7993 --includedir "${pre_prefix}$includedir" \
7994 --datadir "${pre_prefix}$datadir" \
7995 --mandir "${pre_prefix}$mandir" \
7996 --sysconfdir "${pre_prefix}$sysconfdir" \
7997 --localstatedir "${pre_prefix}$local_statedir" \
7998 -Ddocdir="${pre_prefix}$docdir" \
7999 -Dqemu_suffix="$qemu_suffix" \
8000 -Doptimization=$
(if test "$debug" = yes; then echo 0; else echo 2; fi) \
8001 -Ddebug=$
(if test "$debug_info" = yes; then echo true
; else echo false
; fi) \
8002 -Dwerror=$
(if test "$werror" = yes; then echo true
; else echo false
; fi) \
8003 -Dstrip=$
(if test "$strip_opt" = yes; then echo true
; else echo false
; fi) \
8004 -Db_pie=$
(if test "$pie" = yes; then echo true
; else echo false
; fi) \
8005 -Db_coverage=$
(if test "$gcov" = yes; then echo true
; else echo false
; fi) \
8006 -Dsdl=$sdl -Dsdl_image=$sdl_image \
8007 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
8008 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\
8010 "$PWD" "$source_path"
8012 if test "$?" -ne 0 ; then
8013 error_exit
"meson setup failed"
8015 touch ninjatool.stamp
8018 if test -n "${deprecated_features}"; then
8019 echo "Warning, deprecated features enabled."
8020 echo "Please see docs/system/deprecated.rst"
8021 echo " features: ${deprecated_features}"
8024 # Save the configure command line for later reuse.
8025 cat <<EOD >config.status
8027 # Generated by configure.
8028 # Run this file to recreate the current configuration.
8029 # Compiler output produced by configure, useful for debugging
8030 # configure, is in config.log if it exists.
8036 eval envval
=\$
$envname
8038 if test -n "$envval"
8040 echo "$envname='$envval'" >> config.status
8041 echo "export $envname" >> config.status
8043 echo "unset $envname" >> config.status
8047 # Preserve various env variables that influence what
8048 # features/build target configure will detect
8054 preserve_env INSTALL
8056 preserve_env LD_LIBRARY_PATH
8057 preserve_env LIBTOOL
8060 preserve_env OBJCOPY
8062 preserve_env PKG_CONFIG
8063 preserve_env PKG_CONFIG_LIBDIR
8064 preserve_env PKG_CONFIG_PATH
8066 preserve_env SDL2_CONFIG
8069 preserve_env WINDRES
8071 printf "exec" >>config.status
8072 for i
in "$0" "$@"; do
8073 test "$i" = --skip-meson ||
printf " '%s'" "$i" >>config.status
8075 echo ' "$@"' >>config.status
8076 chmod +x config.status