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
195 # search for an executable in PATH
201 # pathname has a dir component?
202 if [ "${local_command#*/}" != "$local_command" ]; then
203 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
204 echo "$local_command"
208 if [ -z "$local_command" ]; then
213 for local_dir
in $PATH; do
214 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
215 echo "$local_dir/$local_command"
216 IFS
="${local_ifs:-$(printf ' \t\n')}"
221 IFS
="${local_ifs:-$(printf ' \t\n')}"
226 local_ver1
=`echo $1 | tr . ' '`
227 local_ver2
=`echo $2 | tr . ' '`
231 # shift 2 does nothing if there are less than 2 arguments
235 # the second argument finished, the first must be greater or equal
236 test $# = 1 && return 0
237 test $local_first -lt $2 && return 1
238 test $local_first -gt $2 && return 0
245 echo "$trace_backends" |
grep "$1" >/dev
/null
249 eval test -z '"${1#'"$2"'}"'
252 supported_hax_target
() {
253 test "$hax" = "yes" ||
return 1
254 glob
"$1" "*-softmmu" ||
return 1
255 case "${1%-softmmu}" in
263 supported_kvm_target
() {
264 test "$kvm" = "yes" ||
return 1
265 glob
"$1" "*-softmmu" ||
return 1
266 case "${1%-softmmu}:$cpu" in
267 arm
:arm | aarch64
:aarch64 | \
268 i386
:i386 | i386
:x86_64 | i386
:x32 | \
269 x86_64
:i386 | x86_64
:x86_64 | x86_64
:x32 | \
270 mips
:mips | mipsel
:mips | mips64
:mips | mips64el
:mips | \
271 ppc
:ppc | ppc64
:ppc | ppc
:ppc64 | ppc64
:ppc64 | ppc64
:ppc64le | \
279 supported_xen_target
() {
280 test "$xen" = "yes" ||
return 1
281 glob
"$1" "*-softmmu" ||
return 1
282 # Only i386 and x86_64 provide the xenpv machine.
283 case "${1%-softmmu}" in
291 supported_hvf_target
() {
292 test "$hvf" = "yes" ||
return 1
293 glob
"$1" "*-softmmu" ||
return 1
294 case "${1%-softmmu}" in
302 supported_whpx_target
() {
303 test "$whpx" = "yes" ||
return 1
304 glob
"$1" "*-softmmu" ||
return 1
305 case "${1%-softmmu}" in
318 if test "$linux" != "yes"; then
319 print_error
"Target '$target' is only available on a Linux host"
324 if test "$bsd" != "yes"; then
325 print_error
"Target '$target' is only available on a BSD host"
330 print_error
"Invalid target name '$target'"
334 test "$tcg" = "yes" && return 0
335 supported_kvm_target
"$1" && return 0
336 supported_xen_target
"$1" && return 0
337 supported_hax_target
"$1" && return 0
338 supported_hvf_target
"$1" && return 0
339 supported_whpx_target
"$1" && return 0
340 print_error
"TCG disabled, but hardware accelerator not available for '$target'"
346 $ld --help 2>/dev
/null |
grep ".$1" >/dev
/null
2>&1
349 if printf %s
\\n
"$source_path" "$PWD" |
grep -q "[[:space:]:]";
351 error_exit
"main directory cannot contain spaces nor colons"
357 interp_prefix
="/usr/gnemul/qemu-%M"
361 block_drv_rw_whitelist
=""
362 block_drv_ro_whitelist
=""
371 gdb_bin
=$
(command -v "gdb-multiarch" ||
command -v "gdb")
373 if test -e "$source_path/.git"
376 git_submodules
="ui/keycodemapdb"
377 git_submodules
="$git_submodules tests/fp/berkeley-testfloat-3"
378 git_submodules
="$git_submodules tests/fp/berkeley-softfloat-3"
383 if ! test -f "$source_path/ui/keycodemapdb/README"
386 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
388 echo "This is not a GIT checkout but module content appears to"
389 echo "be missing. Do not use 'git archive' or GitHub download links"
390 echo "to acquire QEMU source archives. Non-GIT builds are only"
391 echo "supported with source archives linked from:"
393 echo " https://www.qemu.org/download/#source"
395 echo "Developers working with GIT can use scripts/archive-source.sh"
396 echo "if they need to create valid source archives."
403 # Don't accept a target_list environment variable.
405 unset target_list_exclude
407 # Default value for a variable defining feature "foo".
408 # * foo="no" feature will only be used if --enable-foo arg is given
409 # * foo="" feature will be searched for, and if found, will be used
410 # unless --disable-foo is given
411 # * foo="yes" this value will only be set by --enable-foo flag.
412 # feature will searched for,
413 # if not found, configure exits with error
415 # Always add --enable-foo and --disable-foo command line args.
416 # Distributions want to ensure that several features are compiled in, and it
417 # is impossible without a --enable-foo that exits if a feature is not found.
438 xen_pci_passthrough
=""
472 LDFLAGS_SHARED
="-shared"
476 firmwarepath
="\${prefix}/share/qemu-firmware"
512 guest_agent_with_vss
="no"
513 guest_agent_ntddscsi
="no"
522 debug_stack_usage
="no"
526 glusterfs_xlator_opt
="no"
527 glusterfs_discard
="no"
528 glusterfs_fallocate
="no"
529 glusterfs_zerofill
="no"
530 glusterfs_ftruncate_has_stat
="no"
531 glusterfs_iocb_has_stat
="no"
534 tls_priority
="NORMAL"
541 qemu_private_xts
="yes"
547 live_block_migration
="yes"
564 default_devices
="yes"
576 # parse CC options first
578 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
580 --cross-prefix=*) cross_prefix
="$optarg"
584 --cxx=*) CXX
="$optarg"
586 --cpu=*) cpu
="$optarg"
588 --extra-cflags=*) QEMU_CFLAGS
="$QEMU_CFLAGS $optarg"
589 QEMU_LDFLAGS
="$QEMU_LDFLAGS $optarg"
591 --extra-cxxflags=*) QEMU_CXXFLAGS
="$QEMU_CXXFLAGS $optarg"
593 --extra-ldflags=*) QEMU_LDFLAGS
="$QEMU_LDFLAGS $optarg"
594 EXTRA_LDFLAGS
="$optarg"
596 --enable-debug-info) debug_info
="yes"
598 --disable-debug-info) debug_info
="no"
600 --cross-cc-*[!a-zA-Z0-9_-
]*=*) error_exit
"Passed bad --cross-cc-FOO option"
602 --cross-cc-cflags-*) cc_arch
=${opt#--cross-cc-flags-}; cc_arch
=${cc_arch%%=*}
603 eval "cross_cc_cflags_${cc_arch}=\$optarg"
604 cross_cc_vars
="$cross_cc_vars cross_cc_cflags_${cc_arch}"
606 --cross-cc-*) cc_arch
=${opt#--cross-cc-}; cc_arch
=${cc_arch%%=*}
607 cc_archs
="$cc_archs $cc_arch"
608 eval "cross_cc_${cc_arch}=\$optarg"
609 cross_cc_vars
="$cross_cc_vars cross_cc_${cc_arch}"
614 # Using uname is really, really broken. Once we have the right set of checks
615 # we can eliminate its usage altogether.
617 # Preferred compiler:
619 # ${cross_prefix}gcc (if cross-prefix specified)
621 if test -z "${CC}${cross_prefix}"; then
624 cc
="${CC-${cross_prefix}gcc}"
627 if test -z "${CXX}${cross_prefix}"; then
630 cxx
="${CXX-${cross_prefix}g++}"
633 ar="${AR-${cross_prefix}ar}"
634 as
="${AS-${cross_prefix}as}"
637 objcopy
="${OBJCOPY-${cross_prefix}objcopy}"
638 ld
="${LD-${cross_prefix}ld}"
639 ranlib
="${RANLIB-${cross_prefix}ranlib}"
640 nm
="${NM-${cross_prefix}nm}"
641 strip
="${STRIP-${cross_prefix}strip}"
642 windres
="${WINDRES-${cross_prefix}windres}"
643 pkg_config_exe
="${PKG_CONFIG-${cross_prefix}pkg-config}"
645 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
647 pkg_config
=query_pkg_config
648 sdl2_config
="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
650 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
651 ARFLAGS
="${ARFLAGS-rv}"
653 # default flags for all hosts
654 # We use -fwrapv to tell the compiler that we require a C dialect where
655 # left shift of signed integers is well defined and has the expected
656 # 2s-complement style results. (Both clang and gcc agree that it
657 # provides these semantics.)
658 QEMU_CFLAGS
="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
659 QEMU_CFLAGS
="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
660 QEMU_CFLAGS
="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
661 QEMU_CFLAGS
="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
662 QEMU_INCLUDES
="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
663 QEMU_INCLUDES
="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
664 CFLAGS
="-std=gnu99 -Wall"
667 # running configure in the source tree?
668 # we know that's the case if configure is there.
669 if test -f "./configure"; then
670 pwd_is_source_path
="y"
672 pwd_is_source_path
="n"
678 #error $1 not defined
680 int main(void) { return 0; }
688 int main(void) { return 0; }
695 int main(void) { return 0; }
699 write_c_fuzzer_skeleton
() {
702 #include <sys/types.h>
703 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
704 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
708 if check_define __linux__
; then
710 elif check_define _WIN32
; then
712 elif check_define __OpenBSD__
; then
714 elif check_define __sun__
; then
716 elif check_define __HAIKU__
; then
718 elif check_define __FreeBSD__
; then
720 elif check_define __FreeBSD_kernel__
&& check_define __GLIBC__
; then
721 targetos
='GNU/kFreeBSD'
722 elif check_define __DragonFly__
; then
724 elif check_define __NetBSD__
; then
726 elif check_define __APPLE__
; then
729 # This is a fatal error, but don't report it yet, because we
730 # might be going to just print the --help text, or it might
731 # be the result of a missing compiler.
736 # Some host OSes need non-standard checks for which CPU to use.
737 # Note that these checks are broken for cross-compilation: if you're
738 # cross-compiling to one of these OSes then you'll need to specify
739 # the correct CPU with the --cpu option.
742 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
743 # run 64-bit userspace code.
744 # If the user didn't specify a CPU explicitly and the kernel says this is
745 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
746 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
751 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
752 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
757 if test ! -z "$cpu" ; then
758 # command line argument
760 elif check_define __i386__
; then
762 elif check_define __x86_64__
; then
763 if check_define __ILP32__
; then
768 elif check_define __sparc__
; then
769 if check_define __arch64__
; then
774 elif check_define _ARCH_PPC
; then
775 if check_define _ARCH_PPC64
; then
776 if check_define _LITTLE_ENDIAN
; then
784 elif check_define __mips__
; then
786 elif check_define __s390__
; then
787 if check_define __s390x__
; then
792 elif check_define __riscv
; then
793 if check_define _LP64
; then
798 elif check_define __arm__
; then
800 elif check_define __aarch64__
; then
807 # Normalise host CPU name and set ARCH.
808 # Note that this case should only have supported host CPUs, not guests.
810 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64
)
815 i386|i486|i586|i686|i86pc|BePC
)
834 # This will result in either an error or falling back to TCI later
838 if test -z "$ARCH"; then
844 # host *BSD for user mode
852 audio_possible_drivers
="dsound sdl"
853 if check_include dsound.h
; then
854 audio_drv_list
="dsound"
862 audio_drv_list
="oss try-sdl"
863 audio_possible_drivers
="oss sdl pa"
868 audio_drv_list
="oss try-sdl"
869 audio_possible_drivers
="oss sdl pa"
870 # needed for kinfo_getvmmap(3) in libutil.h
872 netmap
="" # enable netmap autodetect
873 HOST_VARIANT_DIR
="freebsd"
878 audio_drv_list
="oss try-sdl"
879 audio_possible_drivers
="oss sdl pa"
880 HOST_VARIANT_DIR
="dragonfly"
886 audio_drv_list
="oss try-sdl"
887 audio_possible_drivers
="oss sdl"
889 HOST_VARIANT_DIR
="netbsd"
894 audio_drv_list
="try-sdl"
895 audio_possible_drivers
="sdl"
896 HOST_VARIANT_DIR
="openbsd"
903 LDFLAGS_SHARED
="-bundle -undefined dynamic_lookup"
904 if [ "$cpu" = "x86_64" ] ; then
905 QEMU_CFLAGS
="-arch x86_64 $QEMU_CFLAGS"
906 QEMU_LDFLAGS
="-arch x86_64 $QEMU_LDFLAGS"
909 audio_drv_list
="coreaudio try-sdl"
910 audio_possible_drivers
="coreaudio sdl"
911 QEMU_LDFLAGS
="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
912 # Disable attempts to use ObjectiveC features in os/object.h since they
913 # won't work when we're compiling with gcc as a C compiler.
914 QEMU_CFLAGS
="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
915 HOST_VARIANT_DIR
="darwin"
920 install="${INSTALL-ginstall}"
921 smbd
="${SMBD-/usr/sfw/sbin/smbd}"
922 if test -f /usr
/include
/sys
/soundcard.h
; then
923 audio_drv_list
="oss try-sdl"
925 audio_possible_drivers
="oss sdl"
926 # needed for CMSG_ macros in sys/socket.h
927 QEMU_CFLAGS
="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
928 # needed for TIOCWIN* defines in termios.h
929 QEMU_CFLAGS
="-D__EXTENSIONS__ $QEMU_CFLAGS"
930 solarisnetlibs
="-lsocket -lnsl -lresolv"
931 LIBS
="$solarisnetlibs $LIBS"
935 QEMU_CFLAGS
="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
936 LIBS
="-lposix_error_mapper -lnetwork -lbsd $LIBS"
939 audio_drv_list
="try-pa oss"
940 audio_possible_drivers
="oss alsa sdl pa"
944 QEMU_INCLUDES
="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
949 if [ "$bsd" = "yes" ] ; then
950 if [ "$darwin" != "yes" ] ; then
955 : ${make=${MAKE-make}}
956 : ${install=${INSTALL-install}}
957 # We prefer python 3.x. A bare 'python' is traditionally
958 # python 2.x, but some distros have it as python 3.x, so
962 for binary
in "${PYTHON-python3}" python
966 python
=$
(command -v "$binary")
972 for binary
in sphinx-build-3 sphinx-build
976 sphinx_build
=$
(command -v "$binary")
981 # Check for ancillary tools used in testing
983 for binary
in genisoimage mkisofs
987 genisoimage
=$
(command -v "$binary")
992 : ${smbd=${SMBD-/usr/sbin/smbd}}
994 # Default objcc to clang if available, otherwise use CC
1001 if test "$mingw32" = "yes" ; then
1004 # MinGW needs -mthreads for TLS and macro _MT.
1005 CFLAGS
="-mthreads $CFLAGS"
1006 LIBS
="-lwinmm -lws2_32 $LIBS"
1008 if compile_prog
"" "-liberty" ; then
1009 LIBS
="-liberty $LIBS"
1011 prefix
="c:/Program Files/QEMU"
1013 libs_qga
="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
1019 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
1021 --help|
-h) show_help
=yes
1023 --version|
-V) exec cat $source_path/VERSION
1025 --prefix=*) prefix
="$optarg"
1027 --interp-prefix=*) interp_prefix
="$optarg"
1033 --host-cc=*) host_cc
="$optarg"
1037 --iasl=*) iasl
="$optarg"
1039 --objcc=*) objcc
="$optarg"
1041 --make=*) make="$optarg"
1043 --install=*) install="$optarg"
1045 --python=*) python
="$optarg" ; explicit_python
=yes
1047 --sphinx-build=*) sphinx_build
="$optarg"
1049 --skip-meson) skip_meson
=yes
1051 --meson=*) meson
="$optarg"
1053 --smbd=*) smbd
="$optarg"
1061 --enable-debug-info)
1063 --disable-debug-info)
1073 --disable-module-upgrades) module_upgrades
="no"
1075 --enable-module-upgrades) module_upgrades
="yes"
1079 --target-list=*) target_list
="$optarg"
1080 if test "$target_list_exclude"; then
1081 error_exit
"Can't mix --target-list with --target-list-exclude"
1084 --target-list-exclude=*) target_list_exclude
="$optarg"
1085 if test "$target_list"; then
1086 error_exit
"Can't mix --target-list-exclude with --target-list"
1089 --enable-trace-backends=*) trace_backends
="$optarg"
1091 # XXX: backwards compatibility
1092 --enable-trace-backend=*) trace_backends
="$optarg"
1094 --with-trace-file=*) trace_file
="$optarg"
1096 --with-default-devices) default_devices
="yes"
1098 --without-default-devices) default_devices
="no"
1100 --enable-gprof) gprof
="yes"
1102 --enable-gcov) gcov
="yes"
1106 QEMU_PKG_CONFIG_FLAGS
="--static $QEMU_PKG_CONFIG_FLAGS"
1108 --mandir=*) mandir
="$optarg"
1110 --bindir=*) bindir
="$optarg"
1112 --libdir=*) libdir
="$optarg"
1114 --libexecdir=*) libexecdir
="$optarg"
1116 --includedir=*) includedir
="$optarg"
1118 --datadir=*) datadir
="$optarg"
1120 --with-confsuffix=*) confsuffix
="$optarg"
1122 --docdir=*) qemu_docdir
="$optarg"
1124 --sysconfdir=*) sysconfdir
="$optarg"
1126 --localstatedir=*) local_statedir
="$optarg"
1128 --firmwarepath=*) firmwarepath
="$optarg"
1130 --host=*|
--build=*|\
1131 --disable-dependency-tracking|\
1132 --sbindir=*|
--sharedstatedir=*|\
1133 --oldincludedir=*|
--datarootdir=*|
--infodir=*|
--localedir=*|\
1134 --htmldir=*|
--dvidir=*|
--pdfdir=*|
--psdir=*)
1135 # These switches are silently ignored, for compatibility with
1136 # autoconf-generated configure scripts. This allows QEMU's
1137 # configure to be used by RPM and similar macros that set
1138 # lots of directory switches by default.
1140 --disable-sdl) sdl
="no"
1142 --enable-sdl) sdl
="yes"
1144 --disable-sdl-image) sdl_image
="no"
1146 --enable-sdl-image) sdl_image
="yes"
1148 --disable-qom-cast-debug) qom_cast_debug
="no"
1150 --enable-qom-cast-debug) qom_cast_debug
="yes"
1152 --disable-virtfs) virtfs
="no"
1154 --enable-virtfs) virtfs
="yes"
1156 --disable-mpath) mpath
="no"
1158 --enable-mpath) mpath
="yes"
1160 --disable-vnc) vnc
="no"
1162 --enable-vnc) vnc
="yes"
1164 --oss-lib=*) oss_lib
="$optarg"
1166 --audio-drv-list=*) audio_drv_list
="$optarg"
1168 --block-drv-rw-whitelist=*|
--block-drv-whitelist=*) block_drv_rw_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
1170 --block-drv-ro-whitelist=*) block_drv_ro_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
1172 --enable-debug-tcg) debug_tcg
="yes"
1174 --disable-debug-tcg) debug_tcg
="no"
1177 # Enable debugging options that aren't excessively noisy
1184 --enable-sanitizers) sanitizers
="yes"
1186 --disable-sanitizers) sanitizers
="no"
1188 --enable-tsan) tsan
="yes"
1190 --disable-tsan) tsan
="no"
1192 --enable-sparse) sparse
="yes"
1194 --disable-sparse) sparse
="no"
1196 --disable-strip) strip_opt
="no"
1198 --disable-vnc-sasl) vnc_sasl
="no"
1200 --enable-vnc-sasl) vnc_sasl
="yes"
1202 --disable-vnc-jpeg) vnc_jpeg
="no"
1204 --enable-vnc-jpeg) vnc_jpeg
="yes"
1206 --disable-vnc-png) vnc_png
="no"
1208 --enable-vnc-png) vnc_png
="yes"
1210 --disable-slirp) slirp
="no"
1212 --enable-slirp=git
) slirp
="git"
1214 --enable-slirp=system
) slirp
="system"
1216 --disable-vde) vde
="no"
1218 --enable-vde) vde
="yes"
1220 --disable-netmap) netmap
="no"
1222 --enable-netmap) netmap
="yes"
1224 --disable-xen) xen
="no"
1226 --enable-xen) xen
="yes"
1228 --disable-xen-pci-passthrough) xen_pci_passthrough
="no"
1230 --enable-xen-pci-passthrough) xen_pci_passthrough
="yes"
1232 --disable-brlapi) brlapi
="no"
1234 --enable-brlapi) brlapi
="yes"
1236 --disable-kvm) kvm
="no"
1238 --enable-kvm) kvm
="yes"
1240 --disable-hax) hax
="no"
1242 --enable-hax) hax
="yes"
1244 --disable-hvf) hvf
="no"
1246 --enable-hvf) hvf
="yes"
1248 --disable-whpx) whpx
="no"
1250 --enable-whpx) whpx
="yes"
1252 --disable-tcg-interpreter) tcg_interpreter
="no"
1254 --enable-tcg-interpreter) tcg_interpreter
="yes"
1256 --disable-cap-ng) cap_ng
="no"
1258 --enable-cap-ng) cap_ng
="yes"
1260 --disable-tcg) tcg
="no"
1262 --enable-tcg) tcg
="yes"
1264 --disable-malloc-trim) malloc_trim
="no"
1266 --enable-malloc-trim) malloc_trim
="yes"
1268 --disable-spice) spice
="no"
1270 --enable-spice) spice
="yes"
1272 --disable-libiscsi) libiscsi
="no"
1274 --enable-libiscsi) libiscsi
="yes"
1276 --disable-libnfs) libnfs
="no"
1278 --enable-libnfs) libnfs
="yes"
1280 --enable-profiler) profiler
="yes"
1282 --disable-cocoa) cocoa
="no"
1286 audio_drv_list
="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1288 --disable-system) softmmu
="no"
1290 --enable-system) softmmu
="yes"
1297 --disable-linux-user) linux_user
="no"
1299 --enable-linux-user) linux_user
="yes"
1301 --disable-bsd-user) bsd_user
="no"
1303 --enable-bsd-user) bsd_user
="yes"
1305 --enable-pie) pie
="yes"
1307 --disable-pie) pie
="no"
1309 --enable-werror) werror
="yes"
1311 --disable-werror) werror
="no"
1313 --enable-stack-protector) stack_protector
="yes"
1315 --disable-stack-protector) stack_protector
="no"
1317 --enable-safe-stack) safe_stack
="yes"
1319 --disable-safe-stack) safe_stack
="no"
1321 --disable-curses) curses
="no"
1323 --enable-curses) curses
="yes"
1325 --disable-iconv) iconv="no"
1327 --enable-iconv) iconv="yes"
1329 --disable-curl) curl
="no"
1331 --enable-curl) curl
="yes"
1333 --disable-fdt) fdt
="no"
1335 --enable-fdt) fdt
="yes"
1337 --disable-linux-aio) linux_aio
="no"
1339 --enable-linux-aio) linux_aio
="yes"
1341 --disable-linux-io-uring) linux_io_uring
="no"
1343 --enable-linux-io-uring) linux_io_uring
="yes"
1345 --disable-attr) attr
="no"
1347 --enable-attr) attr
="yes"
1349 --disable-membarrier) membarrier
="no"
1351 --enable-membarrier) membarrier
="yes"
1353 --disable-blobs) blobs
="no"
1355 --with-pkgversion=*) pkgversion
="$optarg"
1357 --with-coroutine=*) coroutine
="$optarg"
1359 --disable-coroutine-pool) coroutine_pool
="no"
1361 --enable-coroutine-pool) coroutine_pool
="yes"
1363 --enable-debug-stack-usage) debug_stack_usage
="yes"
1365 --enable-crypto-afalg) crypto_afalg
="yes"
1367 --disable-crypto-afalg) crypto_afalg
="no"
1369 --disable-docs) docs
="no"
1371 --enable-docs) docs
="yes"
1373 --disable-vhost-net) vhost_net
="no"
1375 --enable-vhost-net) vhost_net
="yes"
1377 --disable-vhost-crypto) vhost_crypto
="no"
1379 --enable-vhost-crypto) vhost_crypto
="yes"
1381 --disable-vhost-scsi) vhost_scsi
="no"
1383 --enable-vhost-scsi) vhost_scsi
="yes"
1385 --disable-vhost-vsock) vhost_vsock
="no"
1387 --enable-vhost-vsock) vhost_vsock
="yes"
1389 --disable-vhost-user-fs) vhost_user_fs
="no"
1391 --enable-vhost-user-fs) vhost_user_fs
="yes"
1393 --disable-opengl) opengl
="no"
1395 --enable-opengl) opengl
="yes"
1397 --disable-rbd) rbd
="no"
1399 --enable-rbd) rbd
="yes"
1401 --disable-xfsctl) xfs
="no"
1403 --enable-xfsctl) xfs
="yes"
1405 --disable-smartcard) smartcard
="no"
1407 --enable-smartcard) smartcard
="yes"
1409 --disable-libusb) libusb
="no"
1411 --enable-libusb) libusb
="yes"
1413 --disable-usb-redir) usb_redir
="no"
1415 --enable-usb-redir) usb_redir
="yes"
1417 --disable-zlib-test) zlib
="no"
1419 --disable-lzo) lzo
="no"
1421 --enable-lzo) lzo
="yes"
1423 --disable-snappy) snappy
="no"
1425 --enable-snappy) snappy
="yes"
1427 --disable-bzip2) bzip2="no"
1429 --enable-bzip2) bzip2="yes"
1431 --enable-lzfse) lzfse
="yes"
1433 --disable-lzfse) lzfse
="no"
1435 --disable-zstd) zstd
="no"
1437 --enable-zstd) zstd
="yes"
1439 --enable-guest-agent) guest_agent
="yes"
1441 --disable-guest-agent) guest_agent
="no"
1443 --enable-guest-agent-msi) guest_agent_msi
="yes"
1445 --disable-guest-agent-msi) guest_agent_msi
="no"
1447 --with-vss-sdk) vss_win32_sdk
=""
1449 --with-vss-sdk=*) vss_win32_sdk
="$optarg"
1451 --without-vss-sdk) vss_win32_sdk
="no"
1453 --with-win-sdk) win_sdk
=""
1455 --with-win-sdk=*) win_sdk
="$optarg"
1457 --without-win-sdk) win_sdk
="no"
1459 --enable-tools) want_tools
="yes"
1461 --disable-tools) want_tools
="no"
1463 --enable-seccomp) seccomp
="yes"
1465 --disable-seccomp) seccomp
="no"
1467 --disable-glusterfs) glusterfs
="no"
1469 --disable-avx2) avx2_opt
="no"
1471 --enable-avx2) avx2_opt
="yes"
1473 --disable-avx512f) avx512f_opt
="no"
1475 --enable-avx512f) avx512f_opt
="yes"
1478 --enable-glusterfs) glusterfs
="yes"
1480 --disable-virtio-blk-data-plane|
--enable-virtio-blk-data-plane)
1481 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1483 --enable-vhdx|
--disable-vhdx)
1484 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1486 --enable-uuid|
--disable-uuid)
1487 echo "$0: $opt is obsolete, UUID support is always built" >&2
1489 --disable-gtk) gtk
="no"
1491 --enable-gtk) gtk
="yes"
1493 --tls-priority=*) tls_priority
="$optarg"
1495 --disable-gnutls) gnutls
="no"
1497 --enable-gnutls) gnutls
="yes"
1499 --disable-nettle) nettle
="no"
1501 --enable-nettle) nettle
="yes"
1503 --disable-gcrypt) gcrypt
="no"
1505 --enable-gcrypt) gcrypt
="yes"
1507 --disable-auth-pam) auth_pam
="no"
1509 --enable-auth-pam) auth_pam
="yes"
1511 --enable-rdma) rdma
="yes"
1513 --disable-rdma) rdma
="no"
1515 --enable-pvrdma) pvrdma
="yes"
1517 --disable-pvrdma) pvrdma
="no"
1519 --disable-vte) vte
="no"
1521 --enable-vte) vte
="yes"
1523 --disable-virglrenderer) virglrenderer
="no"
1525 --enable-virglrenderer) virglrenderer
="yes"
1527 --disable-tpm) tpm
="no"
1529 --enable-tpm) tpm
="yes"
1531 --disable-libssh) libssh
="no"
1533 --enable-libssh) libssh
="yes"
1535 --disable-live-block-migration) live_block_migration
="no"
1537 --enable-live-block-migration) live_block_migration
="yes"
1539 --disable-numa) numa
="no"
1541 --enable-numa) numa
="yes"
1543 --disable-libxml2) libxml2
="no"
1545 --enable-libxml2) libxml2
="yes"
1547 --disable-tcmalloc) tcmalloc
="no"
1549 --enable-tcmalloc) tcmalloc
="yes"
1551 --disable-jemalloc) jemalloc
="no"
1553 --enable-jemalloc) jemalloc
="yes"
1555 --disable-replication) replication
="no"
1557 --enable-replication) replication
="yes"
1559 --disable-bochs) bochs
="no"
1561 --enable-bochs) bochs
="yes"
1563 --disable-cloop) cloop
="no"
1565 --enable-cloop) cloop
="yes"
1567 --disable-dmg) dmg
="no"
1569 --enable-dmg) dmg
="yes"
1571 --disable-qcow1) qcow1
="no"
1573 --enable-qcow1) qcow1
="yes"
1575 --disable-vdi) vdi
="no"
1577 --enable-vdi) vdi
="yes"
1579 --disable-vvfat) vvfat
="no"
1581 --enable-vvfat) vvfat
="yes"
1583 --disable-qed) qed
="no"
1585 --enable-qed) qed
="yes"
1587 --disable-parallels) parallels
="no"
1589 --enable-parallels) parallels
="yes"
1591 --disable-sheepdog) sheepdog
="no"
1593 --enable-sheepdog) sheepdog
="yes"
1595 --disable-vhost-user) vhost_user
="no"
1597 --enable-vhost-user) vhost_user
="yes"
1599 --disable-vhost-vdpa) vhost_vdpa
="no"
1601 --enable-vhost-vdpa) vhost_vdpa
="yes"
1603 --disable-vhost-kernel) vhost_kernel
="no"
1605 --enable-vhost-kernel) vhost_kernel
="yes"
1607 --disable-capstone) capstone
="no"
1609 --enable-capstone) capstone
="yes"
1611 --enable-capstone=git
) capstone
="git"
1613 --enable-capstone=system
) capstone
="system"
1615 --with-git=*) git
="$optarg"
1617 --enable-git-update) git_update
=yes
1619 --disable-git-update) git_update
=no
1621 --enable-debug-mutex) debug_mutex
=yes
1623 --disable-debug-mutex) debug_mutex
=no
1625 --enable-libpmem) libpmem
=yes
1627 --disable-libpmem) libpmem
=no
1629 --enable-xkbcommon) xkbcommon
=yes
1631 --disable-xkbcommon) xkbcommon
=no
1633 --enable-plugins) plugins
="yes"
1635 --disable-plugins) plugins
="no"
1637 --enable-containers) use_containers
="yes"
1639 --disable-containers) use_containers
="no"
1641 --enable-fuzzing) fuzzing
=yes
1643 --disable-fuzzing) fuzzing
=no
1645 --gdb=*) gdb_bin
="$optarg"
1647 --enable-rng-none) rng_none
=yes
1649 --disable-rng-none) rng_none
=no
1651 --enable-keyring) secret_keyring
="yes"
1653 --disable-keyring) secret_keyring
="no"
1655 --enable-libdaxctl) libdaxctl
=yes
1657 --disable-libdaxctl) libdaxctl
=no
1660 echo "ERROR: unknown option $opt"
1661 echo "Try '$0 --help' for more information"
1667 libdir
="${libdir:-$prefix/lib}"
1668 libexecdir
="${libexecdir:-$prefix/libexec}"
1669 includedir
="${includedir:-$prefix/include}"
1671 if test "$mingw32" = "yes" ; then
1674 qemu_docdir
="$prefix"
1676 sysconfdir
="$prefix"
1679 mandir
="${mandir:-$prefix/share/man}"
1680 datadir
="${datadir:-$prefix/share}"
1681 qemu_docdir
="${qemu_docdir:-$prefix/share/doc/qemu}"
1682 bindir
="${bindir:-$prefix/bin}"
1683 sysconfdir
="${sysconfdir:-$prefix/etc}"
1684 local_statedir
="${local_statedir:-$prefix/var}"
1690 QEMU_LDFLAGS
="-m32 $QEMU_LDFLAGS"
1694 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1697 CPU_CFLAGS
="-m32 -mv8plus -mcpu=ultrasparc"
1698 QEMU_LDFLAGS
="-m32 -mv8plus $QEMU_LDFLAGS"
1701 CPU_CFLAGS
="-m64 -mcpu=ultrasparc"
1702 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1706 QEMU_LDFLAGS
="-m31 $QEMU_LDFLAGS"
1710 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1714 QEMU_LDFLAGS
="-m32 $QEMU_LDFLAGS"
1717 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1718 # If we truly care, we should simply detect this case at
1719 # runtime and generate the fallback to serial emulation.
1720 CPU_CFLAGS
="-m64 -mcx16"
1721 QEMU_LDFLAGS
="-m64 $QEMU_LDFLAGS"
1725 QEMU_LDFLAGS
="-mx32 $QEMU_LDFLAGS"
1727 # No special flags required for other host CPUs
1730 eval "cross_cc_${cpu}=\$host_cc"
1731 cross_cc_vars
="$cross_cc_vars cross_cc_${cpu}"
1732 QEMU_CFLAGS
="$CPU_CFLAGS $QEMU_CFLAGS"
1734 # For user-mode emulation the host arch has to be one we explicitly
1735 # support, even if we're using TCI.
1736 if [ "$ARCH" = "unknown" ]; then
1741 if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1745 default_target_list
=""
1749 if [ "$softmmu" = "yes" ]; then
1750 mak_wilds
="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1752 if [ "$linux_user" = "yes" ]; then
1753 mak_wilds
="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1755 if [ "$bsd_user" = "yes" ]; then
1756 mak_wilds
="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1759 if test -z "$target_list_exclude"; then
1760 for config
in $mak_wilds; do
1761 default_target_list
="${default_target_list} $(basename "$config" .mak)"
1764 exclude_list
=$
(echo "$target_list_exclude" |
sed -e 's/,/ /g')
1765 for config
in $mak_wilds; do
1766 target
="$(basename "$config" .mak)"
1768 for excl
in $exclude_list; do
1769 if test "$excl" = "$target"; then
1774 if test "$exclude" = "no"; then
1775 default_target_list
="${default_target_list} $target"
1780 # Enumerate public trace backends for --help output
1781 trace_backend_list
=$
(echo $
(grep -le '^PUBLIC = True$' "$source_path"/scripts
/tracetool
/backend
/*.py |
sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1783 if test x
"$show_help" = x
"yes" ; then
1786 Usage: configure [options]
1787 Options: [defaults in brackets after descriptions]
1790 --help print this message
1791 --prefix=PREFIX install in PREFIX [$prefix]
1792 --interp-prefix=PREFIX where to find shared libraries, etc.
1793 use %M for cpu name [$interp_prefix]
1794 --target-list=LIST set target list (default: build everything)
1795 $(echo Available targets: $default_target_list | \
1796 fold -s -w 53 | sed -e 's/^/ /')
1797 --target-list-exclude=LIST exclude a set of targets from the default target-list
1799 Advanced options (experts only):
1800 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1801 --cc=CC use C compiler CC [$cc]
1802 --iasl=IASL use ACPI compiler IASL [$iasl]
1803 --host-cc=CC use C compiler CC [$host_cc] for code run at
1805 --cxx=CXX use C++ compiler CXX [$cxx]
1806 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1807 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1808 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1809 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1810 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1811 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1812 --make=MAKE use specified make [$make]
1813 --install=INSTALL use specified install [$install]
1814 --python=PYTHON use specified python [$python]
1815 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1816 --meson=MESON use specified meson [$meson]
1817 --smbd=SMBD use specified smbd [$smbd]
1818 --with-git=GIT use specified git [$git]
1819 --static enable static build [$static]
1820 --mandir=PATH install man pages in PATH
1821 --datadir=PATH install firmware in PATH$confsuffix
1822 --docdir=PATH install documentation in PATH$confsuffix
1823 --bindir=PATH install binaries in PATH
1824 --libdir=PATH install libraries in PATH
1825 --libexecdir=PATH install helper binaries in PATH
1826 --sysconfdir=PATH install config in PATH$confsuffix
1827 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1828 --firmwarepath=PATH search PATH for firmware files
1829 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1830 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1831 --with-pkgversion=VERS use specified string as sub-version of the package
1832 --enable-debug enable common debug build options
1833 --enable-sanitizers enable default sanitizers
1834 --enable-tsan enable thread sanitizer
1835 --disable-strip disable stripping binaries
1836 --disable-werror disable compilation abort on warning
1837 --disable-stack-protector disable compiler-provided stack protection
1838 --audio-drv-list=LIST set audio drivers list:
1839 Available drivers: $audio_possible_drivers
1840 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1841 --block-drv-rw-whitelist=L
1842 set block driver read-write whitelist
1843 (affects only QEMU, not qemu-img)
1844 --block-drv-ro-whitelist=L
1845 set block driver read-only whitelist
1846 (affects only QEMU, not qemu-img)
1847 --enable-trace-backends=B Set trace backend
1848 Available backends: $trace_backend_list
1849 --with-trace-file=NAME Full PATH,NAME of file to store traces
1851 --disable-slirp disable SLIRP userspace network connectivity
1852 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1853 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1854 --oss-lib path to OSS library
1855 --cpu=CPU Build for host CPU [$cpu]
1856 --with-coroutine=BACKEND coroutine backend. Supported options:
1857 ucontext, sigaltstack, windows
1858 --enable-gcov enable test coverage analysis with gcov
1859 --disable-blobs disable installing provided firmware blobs
1860 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1861 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1862 --tls-priority default TLS protocol/cipher priority string
1863 --enable-gprof QEMU profiling with gprof
1864 --enable-profiler profiler support
1865 --enable-debug-stack-usage
1866 track the maximum stack usage of stacks created by qemu_alloc_stack
1868 enable plugins via shared library loading
1869 --disable-containers don't use containers for cross-building
1870 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1872 Optional features, enabled with --enable-FEATURE and
1873 disabled with --disable-FEATURE, default is enabled if available:
1875 system all system emulation targets
1876 user supported user emulation targets
1877 linux-user all linux usermode emulation targets
1878 bsd-user all BSD usermode emulation targets
1879 docs build documentation
1880 guest-agent build the QEMU Guest Agent
1881 guest-agent-msi build guest agent Windows MSI installation package
1882 pie Position Independent Executables
1883 modules modules support (non-Windows)
1884 module-upgrades try to load modules from alternate paths for upgrades
1885 debug-tcg TCG debugging (default is disabled)
1886 debug-info debugging information
1887 sparse sparse checker
1888 safe-stack SafeStack Stack Smash Protection. Depends on
1889 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1891 gnutls GNUTLS cryptography support
1892 nettle nettle cryptography support
1893 gcrypt libgcrypt cryptography support
1894 auth-pam PAM access control
1896 sdl-image SDL Image support for icons
1898 vte vte support for the gtk UI
1900 iconv font glyph conversion support
1902 vnc-sasl SASL encryption for VNC server
1903 vnc-jpeg JPEG lossy compression for VNC server
1904 vnc-png PNG compression for VNC server
1905 cocoa Cocoa UI (Mac OS X only)
1907 mpath Multipath persistent reservation passthrough
1908 xen xen backend driver support
1909 xen-pci-passthrough PCI passthrough support for Xen
1910 brlapi BrlAPI (Braile)
1911 curl curl connectivity
1912 membarrier membarrier system call (for Linux 4.14+ or Windows)
1914 kvm KVM acceleration support
1915 hax HAX acceleration support
1916 hvf Hypervisor.framework acceleration support
1917 whpx Windows Hypervisor Platform acceleration support
1918 rdma Enable RDMA-based migration
1919 pvrdma Enable PVRDMA support
1920 vde support for vde network
1921 netmap support for netmap network
1922 linux-aio Linux AIO support
1923 linux-io-uring Linux io_uring support
1924 cap-ng libcap-ng support
1925 attr attr and xattr support
1926 vhost-net vhost-net kernel acceleration support
1927 vhost-vsock virtio sockets device support
1928 vhost-scsi vhost-scsi kernel target support
1929 vhost-crypto vhost-user-crypto backend support
1930 vhost-kernel vhost kernel backend support
1931 vhost-user vhost-user backend support
1932 vhost-vdpa vhost-vdpa kernel backend support
1934 rbd rados block device (rbd)
1935 libiscsi iscsi support
1937 smartcard smartcard support (libcacard)
1938 libusb libusb (for usb passthrough)
1939 live-block-migration Block migration in the main migration stream
1940 usb-redir usb network redirection support
1941 lzo support of lzo compression library
1942 snappy support of snappy compression library
1943 bzip2 support of bzip2 compression library
1944 (for reading bzip2-compressed dmg images)
1945 lzfse support of lzfse compression library
1946 (for reading lzfse-compressed dmg images)
1947 zstd support for zstd compression library
1948 (for migration compression and qcow2 cluster compression)
1949 seccomp seccomp support
1950 coroutine-pool coroutine freelist (better performance)
1951 glusterfs GlusterFS backend
1953 libssh ssh block device support
1954 numa libnuma support
1955 libxml2 for Parallels image format
1956 tcmalloc tcmalloc support
1957 jemalloc jemalloc support
1958 avx2 AVX2 optimization support
1959 avx512f AVX512F optimization support
1960 replication replication support
1961 opengl opengl support
1962 virglrenderer virgl rendering support
1963 xfsctl xfsctl support
1964 qom-cast-debug cast debugging support
1965 tools build qemu-io, qemu-nbd and qemu-img tools
1966 bochs bochs image format support
1967 cloop cloop image format support
1968 dmg dmg image format support
1969 qcow1 qcow v1 image format support
1970 vdi vdi image format support
1971 vvfat vvfat image format support
1972 qed qed image format support
1973 parallels parallels image format support
1974 sheepdog sheepdog block driver support
1975 crypto-afalg Linux AF_ALG crypto backend driver
1976 capstone capstone disassembler support
1977 debug-mutex mutex debugging support
1978 libpmem libpmem support
1979 xkbcommon xkbcommon support
1980 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1981 libdaxctl libdaxctl support
1983 NOTE: The object files are built at the place where configure is launched
1988 # Remove old dependency files to make sure that they get properly regenerated
1989 rm -f */config-devices.mak.d
1991 if test -z "$python"
1993 error_exit
"Python not found. Use --python=/path/to/python"
1996 # Note that if the Python conditional here evaluates True we will exit
1997 # with status 1 which is a shell 'false' value.
1998 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1999 error_exit
"Cannot use '$python', Python >= 3.5 is required." \
2000 "Use --python=/path/to/python to specify a supported Python."
2003 # Preserve python version since some functionality is dependent on it
2004 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
)
2006 # Suppress writing compiled files
2009 if test -z "$meson"; then
2010 if test "$explicit_python" = no
&& has meson
&& version_ge
"$(meson --version)" 0.55.0; then
2012 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
2014 elif test -e "${source_path}/meson/meson.py" ; then
2017 if test "$explicit_python" = yes; then
2018 error_exit
"--python requires using QEMU's embedded Meson distribution, but it was not found."
2020 error_exit
"Meson not found. Use --meson=/path/to/meson"
2024 # Meson uses its own Python interpreter to invoke other Python scripts,
2025 # but the user wants to use the one they specified with --python.
2027 # We do not want to override the distro Python interpreter (and sometimes
2028 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2029 # just require --meson=git|internal together with --python.
2030 if test "$explicit_python" = yes; then
2033 *) error_exit
"--python requires using QEMU's embedded Meson distribution." ;;
2038 if test "$meson" = git
; then
2039 git_submodules
="${git_submodules} meson"
2041 if test "$git_update" = yes; then
2042 (cd "${source_path}" && GIT
="$git" "./scripts/git-submodule.sh" update
"$git_submodules")
2047 if ! $python -c 'import pkg_resources' > /dev
/null
2>&1; then
2048 error_exit
"Python setuptools not found"
2050 meson
="$python ${source_path}/meson/meson.py"
2052 *) meson
=$
(command -v meson
) ;;
2056 # Check that the C compiler works. Doing this here before testing
2057 # the host CPU ensures that we had a valid CC to autodetect the
2058 # $cpu var (and we should bail right here if that's not the case).
2059 # It also allows the help message to be printed without a CC.
2061 if compile_object
; then
2062 : C compiler works ok
2064 error_exit
"\"$cc\" either does not exist or does not work"
2066 if ! compile_prog
; then
2067 error_exit
"\"$cc\" cannot build an executable (is your linker broken?)"
2070 # Now we have handled --enable-tcg-interpreter and know we're not just
2071 # printing the help message, bail out if the host CPU isn't supported.
2072 if test "$ARCH" = "unknown"; then
2073 if test "$tcg_interpreter" = "yes" ; then
2074 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2076 error_exit
"Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2080 # Consult white-list to determine whether to enable werror
2081 # by default. Only enable by default for git builds
2082 if test -z "$werror" ; then
2083 if test -e "$source_path/.git" && \
2084 { test "$linux" = "yes" ||
test "$mingw32" = "yes"; }; then
2091 if test "$bogus_os" = "yes"; then
2092 # Now that we know that we're not printing the help and that
2093 # the compiler works (so the results of the check_defines we used
2094 # to identify the OS are reliable), if we didn't recognize the
2095 # host OS we should stop now.
2096 error_exit
"Unrecognized host OS (uname -s reports '$(uname -s)')"
2099 # Check whether the compiler matches our minimum requirements:
2101 #if defined(__clang_major__) && defined(__clang_minor__)
2102 # ifdef __apple_build_version__
2103 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2104 # error You need at least XCode Clang v5.1 to compile QEMU
2107 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2108 # error You need at least Clang v3.4 to compile QEMU
2111 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2112 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2113 # error You need at least GCC v4.8 to compile QEMU
2116 # error You either need GCC or Clang to compiler QEMU
2118 int main (void) { return 0; }
2120 if ! compile_prog
"" "" ; then
2121 error_exit
"You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2124 # Accumulate -Wfoo and -Wno-bar separately.
2125 # We will list all of the enable flags first, and the disable flags second.
2126 # Note that we do not add -Werror, because that would enable it for all
2127 # configure tests. If a configure test failed due to -Werror this would
2128 # just silently disable some features, so it's too error prone.
2131 add_to warn_flags
-Wold-style-declaration
2132 add_to warn_flags
-Wold-style-definition
2133 add_to warn_flags
-Wtype-limits
2134 add_to warn_flags
-Wformat-security
2135 add_to warn_flags
-Wformat-y2k
2136 add_to warn_flags
-Winit-self
2137 add_to warn_flags
-Wignored-qualifiers
2138 add_to warn_flags
-Wempty-body
2139 add_to warn_flags
-Wnested-externs
2140 add_to warn_flags
-Wendif-labels
2141 add_to warn_flags
-Wexpansion-to-defined
2144 add_to nowarn_flags
-Wno-initializer-overrides
2145 add_to nowarn_flags
-Wno-missing-include-dirs
2146 add_to nowarn_flags
-Wno-shift-negative-value
2147 add_to nowarn_flags
-Wno-string-plus-int
2148 add_to nowarn_flags
-Wno-typedef-redefinition
2149 add_to nowarn_flags
-Wno-tautological-type-limit-compare
2150 add_to nowarn_flags
-Wno-psabi
2152 gcc_flags
="$warn_flags $nowarn_flags"
2154 cc_has_warning_flag
() {
2157 # Use the positive sense of the flag when testing for -Wno-wombat
2158 # support (gcc will happily accept the -Wno- form of unknown
2160 optflag
="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2161 compile_prog
"-Werror $optflag" ""
2164 for flag
in $gcc_flags; do
2165 if cc_has_warning_flag
$flag ; then
2166 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
2170 if test "$stack_protector" != "no"; then
2172 int main(int argc, char *argv[])
2174 char arr[64], *p = arr, *c = argv[0];
2181 gcc_flags
="-fstack-protector-strong -fstack-protector-all"
2183 for flag
in $gcc_flags; do
2184 # We need to check both a compile and a link, since some compiler
2185 # setups fail only on a .c->.o compile and some only at link time
2186 if compile_object
"-Werror $flag" &&
2187 compile_prog
"-Werror $flag" ""; then
2188 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
2189 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
2194 if test "$stack_protector" = yes; then
2195 if test $sp_on = 0; then
2196 error_exit
"Stack protector not supported"
2201 # Disable -Wmissing-braces on older compilers that warn even for
2202 # the "universal" C zero initializer {0}.
2208 if compile_object
"-Werror" "" ; then
2211 QEMU_CFLAGS
="$QEMU_CFLAGS -Wno-missing-braces"
2214 # Our module code doesn't support Windows
2215 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2216 error_exit
"Modules are not available for Windows"
2219 # module_upgrades is only reasonable if modules are enabled
2220 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2221 error_exit
"Can't enable module-upgrades as Modules are not enabled"
2224 # Static linking is not possible with modules or PIE
2225 if test "$static" = "yes" ; then
2226 if test "$modules" = "yes" ; then
2227 error_exit
"static and modules are mutually incompatible"
2231 # Unconditional check for compiler __thread support
2233 static __thread int tls_var;
2234 int main(void) { return tls_var; }
2237 if ! compile_prog
"-Werror" "" ; then
2238 error_exit
"Your compiler does not support the __thread specifier for " \
2239 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2245 # define THREAD __thread
2249 static THREAD int tls_var;
2250 int main(void) { return tls_var; }
2253 # Check we support --no-pie first; we will need this for building ROMs.
2254 if compile_prog
"-Werror -fno-pie" "-no-pie"; then
2255 CFLAGS_NOPIE
="-fno-pie"
2256 LDFLAGS_NOPIE
="-no-pie"
2259 if test "$static" = "yes"; then
2260 if test "$pie" != "no" && compile_prog
"-Werror -fPIE -DPIE" "-static-pie"; then
2261 CFLAGS
="-fPIE -DPIE $CFLAGS"
2262 QEMU_LDFLAGS
="-static-pie $QEMU_LDFLAGS"
2264 elif test "$pie" = "yes"; then
2265 error_exit
"-static-pie not available due to missing toolchain support"
2267 QEMU_LDFLAGS
="-static $QEMU_LDFLAGS"
2270 elif test "$pie" = "no"; then
2271 CFLAGS
="$CFLAGS_NOPIE $CFLAGS"
2272 LDFLAGS
="$LDFLAGS_NOPIE $LDFLAGS"
2273 elif compile_prog
"-Werror -fPIE -DPIE" "-pie"; then
2274 CFLAGS
="-fPIE -DPIE $CFLAGS"
2275 LDFLAGS
="-pie $LDFLAGS"
2277 elif test "$pie" = "yes"; then
2278 error_exit
"PIE not available due to missing toolchain support"
2280 echo "Disabling PIE due to missing toolchain support"
2284 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2285 # The combination is known as "full relro", because .got.plt is read-only too.
2286 if compile_prog
"" "-Wl,-z,relro -Wl,-z,now" ; then
2287 QEMU_LDFLAGS
="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2290 ##########################################
2291 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2292 # use i686 as default anyway, but for those that don't, an explicit
2293 # specification is necessary
2295 if test "$cpu" = "i386"; then
2297 static int sfaa(int *ptr)
2299 return __sync_fetch_and_and(ptr, 0);
2305 val = __sync_val_compare_and_swap(&val, 0, 1);
2310 if ! compile_prog
"" "" ; then
2311 QEMU_CFLAGS
="-march=i486 $QEMU_CFLAGS"
2315 #########################################
2316 # Solaris specific configure tool chain decisions
2318 if test "$solaris" = "yes" ; then
2319 if has
$install; then
2322 error_exit
"Solaris install program not found. Use --install=/usr/ucb/install or" \
2323 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2324 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2326 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2327 error_exit
"Solaris /usr/sbin/install is not an appropriate install program." \
2328 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2329 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2334 if test -f /usr
/ccs
/bin
/ar ; then
2335 error_exit
"No path includes ar" \
2336 "Add /usr/ccs/bin to your path and rerun configure"
2338 error_exit
"No path includes ar"
2342 if test -z "${target_list+xxx}" ; then
2343 for target
in $default_target_list; do
2344 supported_target
$target 2>/dev
/null
&& \
2345 target_list
="$target_list $target"
2347 target_list
="${target_list# }"
2349 target_list
=$
(echo "$target_list" |
sed -e 's/,/ /g')
2350 for target
in $target_list; do
2351 # Check that we recognised the target name; this allows a more
2352 # friendly error message than if we let it fall through.
2353 case " $default_target_list " in
2357 error_exit
"Unknown target name '$target'"
2360 supported_target
$target ||
exit 1
2364 # see if system emulation was really requested
2365 case " $target_list " in
2366 *"-softmmu "*) softmmu
=yes
2372 for target
in $target_list; do
2374 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu
)
2379 # The EDK2 binaries are compressed with bzip2
2380 if test "$edk2_blobs" = "yes" && ! has
bzip2; then
2381 error_exit
"The bzip2 program is required for building QEMU"
2384 feature_not_found
() {
2388 error_exit
"User requested feature $feature" \
2389 "configure was not able to find it." \
2394 # big/little endian test
2396 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2397 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2398 extern int foo(short *, short *);
2399 int main(int argc, char *argv[]) {
2400 return foo(big_endian, little_endian);
2404 if compile_object
; then
2405 if strings -a $TMPO |
grep -q BiGeNdIaN
; then
2407 elif strings -a $TMPO |
grep -q LiTtLeEnDiAn
; then
2410 echo big
/little
test failed
2413 echo big
/little
test failed
2416 ##########################################
2418 if test -z "$want_tools"; then
2419 if test "$softmmu" = "no"; then
2426 ##########################################
2427 # cocoa implies not SDL or GTK
2428 # (the cocoa UI code currently assumes it is always the active UI
2429 # and doesn't interact well with other UI frontend code)
2430 if test "$cocoa" = "yes"; then
2431 if test "$sdl" = "yes"; then
2432 error_exit
"Cocoa and SDL UIs cannot both be enabled at once"
2434 if test "$gtk" = "yes"; then
2435 error_exit
"Cocoa and GTK UIs cannot both be enabled at once"
2441 # Some versions of Mac OS X incorrectly define SIZE_MAX
2445 int main(int argc, char *argv[]) {
2446 return printf("%zu", SIZE_MAX);
2449 have_broken_size_max
=no
2450 if ! compile_object
-Werror ; then
2451 have_broken_size_max
=yes
2454 ##########################################
2458 #include <sys/socket.h>
2459 #include <linux/ip.h>
2460 int main(void) { return sizeof(struct mmsghdr); }
2462 if compile_prog
"" "" ; then
2468 if check_include
"pty.h" ; then
2475 #include <sys/mman.h>
2476 int main(int argc, char *argv[]) {
2477 return mlockall(MCL_FUTURE);
2480 if compile_prog
"" "" ; then
2486 #########################################
2487 # vhost interdependencies and host support
2490 test "$vhost_user" = "" && vhost_user
=yes
2491 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2492 error_exit
"vhost-user isn't available on win32"
2494 test "$vhost_vdpa" = "" && vhost_vdpa
=$linux
2495 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2496 error_exit
"vhost-vdpa is only available on Linux"
2498 test "$vhost_kernel" = "" && vhost_kernel
=$linux
2499 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2500 error_exit
"vhost-kernel is only available on Linux"
2503 # vhost-kernel devices
2504 test "$vhost_scsi" = "" && vhost_scsi
=$vhost_kernel
2505 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2506 error_exit
"--enable-vhost-scsi requires --enable-vhost-kernel"
2508 test "$vhost_vsock" = "" && vhost_vsock
=$vhost_kernel
2509 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2510 error_exit
"--enable-vhost-vsock requires --enable-vhost-kernel"
2513 # vhost-user backends
2514 test "$vhost_net_user" = "" && vhost_net_user
=$vhost_user
2515 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2516 error_exit
"--enable-vhost-net-user requires --enable-vhost-user"
2518 test "$vhost_crypto" = "" && vhost_crypto
=$vhost_user
2519 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2520 error_exit
"--enable-vhost-crypto requires --enable-vhost-user"
2522 test "$vhost_user_fs" = "" && vhost_user_fs
=$vhost_user
2523 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2524 error_exit
"--enable-vhost-user-fs requires --enable-vhost-user"
2526 #vhost-vdpa backends
2527 test "$vhost_net_vdpa" = "" && vhost_net_vdpa
=$vhost_vdpa
2528 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2529 error_exit
"--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2532 # OR the vhost-kernel and vhost-user values for simplicity
2533 if test "$vhost_net" = ""; then
2534 test "$vhost_net_user" = "yes" && vhost_net
=yes
2535 test "$vhost_kernel" = "yes" && vhost_net
=yes
2538 ##########################################
2539 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2541 if test "$mingw32" = "yes"; then
2542 # Some versions of MinGW / Mingw-w64 lack localtime_r
2543 # and gmtime_r entirely.
2545 # Some versions of Mingw-w64 define a macro for
2546 # localtime_r/gmtime_r.
2548 # Some versions of Mingw-w64 will define functions
2549 # for localtime_r/gmtime_r, but only if you have
2550 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2551 # though, unistd.h and pthread.h both define
2554 # So this #undef localtime_r and #include <unistd.h>
2555 # are not in fact redundant.
2560 int main(void) { localtime_r(NULL, NULL); return 0; }
2562 if compile_prog
"" "" ; then
2569 ##########################################
2572 if ! has
"$pkg_config_exe"; then
2573 error_exit
"pkg-config binary '$pkg_config_exe' not found"
2576 ##########################################
2579 if test "$linux_user" = "yes"; then
2582 #include <linux/futex.h>
2584 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2590 if ! compile_object
; then
2591 feature_not_found
"nptl" "Install glibc and linux kernel headers."
2595 ##########################################
2598 if test "$lzo" != "no" ; then
2600 #include <lzo/lzo1x.h>
2601 int main(void) { lzo_version(); return 0; }
2603 if compile_prog
"" "-llzo2" ; then
2607 if test "$lzo" = "yes"; then
2608 feature_not_found
"liblzo2" "Install liblzo2 devel"
2614 ##########################################
2617 if test "$snappy" != "no" ; then
2619 #include <snappy-c.h>
2620 int main(void) { snappy_max_compressed_length(4096); return 0; }
2622 if compile_prog
"" "-lsnappy" ; then
2623 snappy_libs
='-lsnappy'
2626 if test "$snappy" = "yes"; then
2627 feature_not_found
"libsnappy" "Install libsnappy devel"
2633 ##########################################
2636 if test "$bzip2" != "no" ; then
2639 int main(void) { BZ2_bzlibVersion(); return 0; }
2641 if compile_prog
"" "-lbz2" ; then
2644 if test "$bzip2" = "yes"; then
2645 feature_not_found
"libbzip2" "Install libbzip2 devel"
2651 ##########################################
2654 if test "$lzfse" != "no" ; then
2657 int main(void) { lzfse_decode_scratch_size(); return 0; }
2659 if compile_prog
"" "-llzfse" ; then
2662 if test "$lzfse" = "yes"; then
2663 feature_not_found
"lzfse" "Install lzfse devel"
2669 ##########################################
2672 if test "$zstd" != "no" ; then
2673 libzstd_minver
="1.4.0"
2674 if $pkg_config --atleast-version=$libzstd_minver libzstd
; then
2675 zstd_cflags
="$($pkg_config --cflags libzstd)"
2676 zstd_libs
="$($pkg_config --libs libzstd)"
2679 if test "$zstd" = "yes" ; then
2680 feature_not_found
"libzstd" "Install libzstd devel"
2686 ##########################################
2689 if test "$seccomp" != "no" ; then
2690 libseccomp_minver
="2.3.0"
2691 if $pkg_config --atleast-version=$libseccomp_minver libseccomp
; then
2692 seccomp_cflags
="$($pkg_config --cflags libseccomp)"
2693 seccomp_libs
="$($pkg_config --libs libseccomp)"
2696 if test "$seccomp" = "yes" ; then
2697 feature_not_found
"libseccomp" \
2698 "Install libseccomp devel >= $libseccomp_minver"
2703 ##########################################
2706 if test "$xen" != "no" ; then
2707 # Check whether Xen library path is specified via --extra-ldflags to avoid
2708 # overriding this setting with pkg-config output. If not, try pkg-config
2709 # to obtain all needed flags.
2711 if ! echo $EXTRA_LDFLAGS |
grep tools
/libxc
> /dev
/null
&& \
2712 $pkg_config --exists xencontrol
; then
2713 xen_ctrl_version
="$(printf '%d%02d%02d' \
2714 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2716 xen_pc
="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2717 xen_pc
="$xen_pc xenevtchn xendevicemodel"
2718 if $pkg_config --exists xentoolcore
; then
2719 xen_pc
="$xen_pc xentoolcore"
2721 QEMU_CFLAGS
="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2722 xen_cflags
="$($pkg_config --cflags $xen_pc)"
2723 xen_libs
="$($pkg_config --libs $xen_pc)"
2726 xen_libs
="-lxenstore -lxenctrl -lxenguest"
2727 xen_stable_libs
="-lxenforeignmemory -lxengnttab -lxenevtchn"
2729 # First we test whether Xen headers and libraries are available.
2730 # If no, we are done and there is no Xen support.
2731 # If yes, more tests are run to detect the Xen version.
2735 #include <xenctrl.h>
2740 if ! compile_prog
"" "$xen_libs" ; then
2742 if test "$xen" = "yes" ; then
2743 feature_not_found
"xen" "Install xen devel"
2749 cat > $TMPC <<EOF &&
2750 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2751 #define __XEN_TOOLS__
2752 #include <xendevicemodel.h>
2753 #include <xenforeignmemory.h>
2755 xendevicemodel_handle *xd;
2756 xenforeignmemory_handle *xfmem;
2758 xd = xendevicemodel_open(0, 0);
2759 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2761 xfmem = xenforeignmemory_open(0, 0);
2762 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2767 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2769 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2770 xen_ctrl_version
=41100
2773 cat > $TMPC <<EOF &&
2774 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2775 #include <xenforeignmemory.h>
2776 #include <xentoolcore.h>
2778 xenforeignmemory_handle *xfmem;
2780 xfmem = xenforeignmemory_open(0, 0);
2781 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2782 xentoolcore_restrict_all(0);
2787 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2789 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2790 xen_ctrl_version
=41000
2793 cat > $TMPC <<EOF &&
2794 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2795 #define __XEN_TOOLS__
2796 #include <xendevicemodel.h>
2798 xendevicemodel_handle *xd;
2800 xd = xendevicemodel_open(0, 0);
2801 xendevicemodel_close(xd);
2806 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs"
2808 xen_stable_libs
="-lxendevicemodel $xen_stable_libs"
2809 xen_ctrl_version
=40900
2812 cat > $TMPC <<EOF &&
2814 * If we have stable libs the we don't want the libxc compat
2815 * layers, regardless of what CFLAGS we may have been given.
2817 * Also, check if xengnttab_grant_copy_segment_t is defined and
2818 * grant copy operation is implemented.
2820 #undef XC_WANT_COMPAT_EVTCHN_API
2821 #undef XC_WANT_COMPAT_GNTTAB_API
2822 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2823 #include <xenctrl.h>
2824 #include <xenstore.h>
2825 #include <xenevtchn.h>
2826 #include <xengnttab.h>
2827 #include <xenforeignmemory.h>
2829 #include <xen/hvm/hvm_info_table.h>
2830 #if !defined(HVM_MAX_VCPUS)
2831 # error HVM_MAX_VCPUS not defined
2834 xc_interface *xc = NULL;
2835 xenforeignmemory_handle *xfmem;
2836 xenevtchn_handle *xe;
2837 xengnttab_handle *xg;
2838 xengnttab_grant_copy_segment_t* seg = NULL;
2842 xc = xc_interface_open(0, 0, 0);
2843 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2844 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2845 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2846 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2848 xfmem = xenforeignmemory_open(0, 0);
2849 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2851 xe = xenevtchn_open(0, 0);
2854 xg = xengnttab_open(0, 0);
2855 xengnttab_grant_copy(xg, 0, seg);
2860 compile_prog
"" "$xen_libs $xen_stable_libs"
2862 xen_ctrl_version
=40800
2865 cat > $TMPC <<EOF &&
2867 * If we have stable libs the we don't want the libxc compat
2868 * layers, regardless of what CFLAGS we may have been given.
2870 #undef XC_WANT_COMPAT_EVTCHN_API
2871 #undef XC_WANT_COMPAT_GNTTAB_API
2872 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2873 #include <xenctrl.h>
2874 #include <xenstore.h>
2875 #include <xenevtchn.h>
2876 #include <xengnttab.h>
2877 #include <xenforeignmemory.h>
2879 #include <xen/hvm/hvm_info_table.h>
2880 #if !defined(HVM_MAX_VCPUS)
2881 # error HVM_MAX_VCPUS not defined
2884 xc_interface *xc = NULL;
2885 xenforeignmemory_handle *xfmem;
2886 xenevtchn_handle *xe;
2887 xengnttab_handle *xg;
2891 xc = xc_interface_open(0, 0, 0);
2892 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2893 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2894 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2895 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2897 xfmem = xenforeignmemory_open(0, 0);
2898 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2900 xe = xenevtchn_open(0, 0);
2903 xg = xengnttab_open(0, 0);
2904 xengnttab_map_grant_ref(xg, 0, 0, 0);
2909 compile_prog
"" "$xen_libs $xen_stable_libs"
2911 xen_ctrl_version
=40701
2916 cat > $TMPC <<EOF &&
2917 #include <xenctrl.h>
2918 #include <xenstore.h>
2920 #include <xen/hvm/hvm_info_table.h>
2921 #if !defined(HVM_MAX_VCPUS)
2922 # error HVM_MAX_VCPUS not defined
2927 xc = xc_interface_open(0, 0, 0);
2928 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2929 xc_gnttab_open(NULL, 0);
2930 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2931 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2932 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2933 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2937 compile_prog
"" "$xen_libs"
2939 xen_ctrl_version
=40600
2944 cat > $TMPC <<EOF &&
2945 #include <xenctrl.h>
2946 #include <xenstore.h>
2948 #include <xen/hvm/hvm_info_table.h>
2949 #if !defined(HVM_MAX_VCPUS)
2950 # error HVM_MAX_VCPUS not defined
2955 xc = xc_interface_open(0, 0, 0);
2956 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2957 xc_gnttab_open(NULL, 0);
2958 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2959 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2960 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2964 compile_prog
"" "$xen_libs"
2966 xen_ctrl_version
=40500
2970 cat > $TMPC <<EOF &&
2971 #include <xenctrl.h>
2972 #include <xenstore.h>
2974 #include <xen/hvm/hvm_info_table.h>
2975 #if !defined(HVM_MAX_VCPUS)
2976 # error HVM_MAX_VCPUS not defined
2981 xc = xc_interface_open(0, 0, 0);
2982 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2983 xc_gnttab_open(NULL, 0);
2984 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2985 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2989 compile_prog
"" "$xen_libs"
2991 xen_ctrl_version
=40200
2995 if test "$xen" = "yes" ; then
2996 feature_not_found
"xen (unsupported version)" \
2997 "Install a supported xen (xen 4.2 or newer)"
3002 if test "$xen" = yes; then
3003 if test $xen_ctrl_version -ge 40701 ; then
3004 xen_libs
="$xen_libs $xen_stable_libs "
3010 if test "$xen_pci_passthrough" != "no"; then
3011 if test "$xen" = "yes" && test "$linux" = "yes"; then
3012 xen_pci_passthrough
=yes
3014 if test "$xen_pci_passthrough" = "yes"; then
3015 error_exit
"User requested feature Xen PCI Passthrough" \
3016 " but this feature requires /sys from Linux"
3018 xen_pci_passthrough
=no
3022 ##########################################
3023 # Windows Hypervisor Platform accelerator (WHPX) check
3024 if test "$whpx" != "no" ; then
3025 if check_include
"WinHvPlatform.h" && check_include
"WinHvEmulation.h"; then
3028 if test "$whpx" = "yes"; then
3029 feature_not_found
"WinHvPlatform" "WinHvEmulation is not installed"
3035 ##########################################
3037 if test "$sparse" != "no" ; then
3041 if test "$sparse" = "yes" ; then
3042 feature_not_found
"sparse" "Install sparse binary"
3048 ##########################################
3050 if $pkg_config --exists "x11"; then
3052 x11_cflags
=$
($pkg_config --cflags x11
)
3053 x11_libs
=$
($pkg_config --libs x11
)
3056 ##########################################
3059 if test "$gtk" != "no"; then
3060 gtkpackage
="gtk+-3.0"
3061 gtkx11package
="gtk+-x11-3.0"
3063 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
3064 gtk_cflags
=$
($pkg_config --cflags $gtkpackage)
3065 gtk_libs
=$
($pkg_config --libs $gtkpackage)
3066 gtk_version
=$
($pkg_config --modversion $gtkpackage)
3067 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
3069 gtk_cflags
="$gtk_cflags $x11_cflags"
3070 gtk_libs
="$gtk_libs $x11_libs"
3073 elif test "$gtk" = "yes"; then
3074 feature_not_found
"gtk" "Install gtk3-devel"
3081 ##########################################
3084 if test "$gnutls" != "no"; then
3086 if $pkg_config --exists "gnutls >= 3.1.18"; then
3087 gnutls_cflags
=$
($pkg_config --cflags gnutls
)
3088 gnutls_libs
=$
($pkg_config --libs gnutls
)
3089 # Packaging for the static libraries is not always correct.
3090 # At least ubuntu 18.04 ships only shared libraries.
3092 if compile_prog
"" "$gnutls_libs" ; then
3093 LIBS
="$gnutls_libs $LIBS"
3094 QEMU_CFLAGS
="$QEMU_CFLAGS $gnutls_cflags"
3098 if test "$pass" = "no" && test "$gnutls" = "yes"; then
3099 feature_not_found
"gnutls" "Install gnutls devel >= 3.1.18"
3106 # If user didn't give a --disable/enable-gcrypt flag,
3107 # then mark as disabled if user requested nettle
3109 if test -z "$gcrypt"
3111 if test "$nettle" = "yes"
3117 # If user didn't give a --disable/enable-nettle flag,
3118 # then mark as disabled if user requested gcrypt
3120 if test -z "$nettle"
3122 if test "$gcrypt" = "yes"
3129 if ! has
"libgcrypt-config"
3134 if test -n "$cross_prefix"
3136 host=$
(libgcrypt-config
--host)
3137 if test "$host-" != $cross_prefix
3143 maj
=`libgcrypt-config --version | awk -F . '{print $1}'`
3144 min
=`libgcrypt-config --version | awk -F . '{print $2}'`
3146 if test $maj != 1 ||
test $min -lt 5
3155 if test "$nettle" != "no"; then
3157 if $pkg_config --exists "nettle >= 2.7.1"; then
3158 nettle_cflags
=$
($pkg_config --cflags nettle
)
3159 nettle_libs
=$
($pkg_config --libs nettle
)
3160 nettle_version
=$
($pkg_config --modversion nettle
)
3161 # Link test to make sure the given libraries work (e.g for static).
3163 if compile_prog
"" "$nettle_libs" ; then
3164 LIBS
="$nettle_libs $LIBS"
3165 QEMU_CFLAGS
="$QEMU_CFLAGS $nettle_cflags"
3166 if test -z "$gcrypt"; then
3172 if test "$pass" = "yes"
3175 #include <nettle/xts.h>
3180 if compile_prog
"$nettle_cflags" "$nettle_libs" ; then
3185 if test "$pass" = "no" && test "$nettle" = "yes"; then
3186 feature_not_found
"nettle" "Install nettle devel >= 2.7.1"
3192 if test "$gcrypt" != "no"; then
3194 if has_libgcrypt
; then
3195 gcrypt_cflags
=$
(libgcrypt-config
--cflags)
3196 gcrypt_libs
=$
(libgcrypt-config
--libs)
3197 # Debian has removed -lgpg-error from libgcrypt-config
3198 # as it "spreads unnecessary dependencies" which in
3199 # turn breaks static builds...
3200 if test "$static" = "yes"
3202 gcrypt_libs
="$gcrypt_libs -lgpg-error"
3205 # Link test to make sure the given libraries work (e.g for static).
3207 if compile_prog
"" "$gcrypt_libs" ; then
3208 LIBS
="$gcrypt_libs $LIBS"
3209 QEMU_CFLAGS
="$QEMU_CFLAGS $gcrypt_cflags"
3213 if test "$pass" = "yes"; then
3218 gcry_mac_hd_t handle;
3219 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3220 GCRY_MAC_FLAG_SECURE, NULL);
3224 if compile_prog
"$gcrypt_cflags" "$gcrypt_libs" ; then
3230 gcry_cipher_hd_t handle;
3231 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3235 if compile_prog
"$gcrypt_cflags" "$gcrypt_libs" ; then
3239 elif test "$gcrypt" = "yes"; then
3240 feature_not_found
"gcrypt" "Install gcrypt devel >= 1.5.0"
3247 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3249 error_exit
"Only one of gcrypt & nettle can be enabled"
3252 ##########################################
3253 # libtasn1 - only for the TLS creds/session test suite
3258 if $pkg_config --exists "libtasn1"; then
3259 tasn1_cflags
=$
($pkg_config --cflags libtasn1
)
3260 tasn1_libs
=$
($pkg_config --libs libtasn1
)
3266 ##########################################
3269 if test "$auth_pam" != "no"; then
3271 #include <security/pam_appl.h>
3274 const char *service_name = "qemu";
3275 const char *user = "frank";
3276 const struct pam_conv pam_conv = { 0 };
3277 pam_handle_t *pamh = NULL;
3278 pam_start(service_name, user, &pam_conv, &pamh);
3282 if compile_prog
"" "-lpam" ; then
3285 if test "$auth_pam" = "yes"; then
3286 feature_not_found
"PAM" "Install PAM development package"
3293 ##########################################
3294 # getifaddrs (for tests/test-io-channel-socket )
3297 if ! check_include
"ifaddrs.h" ; then
3301 #########################################
3304 if check_include
"libdrm/drm.h" ; then
3308 #########################################
3309 # sys/signal.h check
3310 have_sys_signal_h
=no
3311 if check_include
"sys/signal.h" ; then
3312 have_sys_signal_h
=yes
3315 ##########################################
3318 if test "$vte" != "no"; then
3319 vteminversion
="0.32.0"
3320 if $pkg_config --exists "vte-2.91"; then
3321 vtepackage
="vte-2.91"
3323 vtepackage
="vte-2.90"
3325 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3326 vte_cflags
=$
($pkg_config --cflags $vtepackage)
3327 vte_libs
=$
($pkg_config --libs $vtepackage)
3328 vteversion
=$
($pkg_config --modversion $vtepackage)
3330 elif test "$vte" = "yes"; then
3331 feature_not_found
"vte" "Install libvte-2.90/2.91 devel"
3337 ##########################################
3340 # Look for sdl configuration program (pkg-config or sdl2-config). Try
3341 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
3345 if $pkg_config sdl2
--exists; then
3346 sdlconfig
="$pkg_config sdl2"
3347 sdlversion
=$
($sdlconfig --modversion 2>/dev
/null
)
3348 elif has
"$sdl2_config"; then
3349 sdlconfig
="$sdl2_config"
3350 sdlversion
=$
($sdlconfig --version)
3352 if test "$sdl" = "yes" ; then
3353 feature_not_found
"sdl" "Install SDL2-devel"
3356 # no need to do the rest
3359 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config
; then
3360 echo warning
: using
"\"$sdlconfig\"" to detect cross-compiled sdl
>&2
3365 #undef main /* We don't want SDL to override our main() */
3366 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3368 sdl_cflags
=$
($sdlconfig --cflags 2>/dev
/null
)
3369 sdl_cflags
="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3370 if test "$static" = "yes" ; then
3371 if $pkg_config sdl2
--exists; then
3372 sdl_libs
=$
($pkg_config sdl2
--static --libs 2>/dev
/null
)
3374 sdl_libs
=$
($sdlconfig --static-libs 2>/dev
/null
)
3377 sdl_libs
=$
($sdlconfig --libs 2>/dev
/null
)
3379 if compile_prog
"$sdl_cflags" "$sdl_libs" ; then
3382 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3383 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3384 if test $?
= 0 && echo $sdl_libs |
grep -- -laa > /dev
/null
; then
3385 sdl_libs
="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3386 sdl_cflags
="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3388 if compile_prog
"$sdl_cflags" "$sdl_libs" ; then
3394 else # sdl not found
3395 if test "$sdl" = "yes" ; then
3396 feature_not_found
"sdl" "Install SDL2 devel"
3399 fi # sdl compile test
3404 if test "$sdl_image" != "no" ; then
3405 if $pkg_config SDL2_image
--exists; then
3406 if test "$static" = "yes"; then
3407 sdl_image_libs
=$
($pkg_config SDL2_image
--libs --static 2>/dev
/null
)
3409 sdl_image_libs
=$
($pkg_config SDL2_image
--libs 2>/dev
/null
)
3411 sdl_image_cflags
=$
($pkg_config SDL2_image
--cflags 2>/dev
/null
)
3414 sdl_cflags
="$sdl_cflags $sdl_image_cflags"
3415 sdl_libs
="$sdl_libs $sdl_image_libs"
3417 if test "$sdl_image" = "yes" ; then
3418 feature_not_found
"sdl_image" "Install SDL Image devel"
3426 if test "$sdl" != "no" ; then
3430 if test "$sdl" = "yes" ; then
3433 if test "$sdl_image" = "yes"; then
3434 echo "warning: SDL Image requested, but SDL is not available, disabling"
3439 if test "$sdl" = "yes" ; then
3442 #if defined(SDL_VIDEO_DRIVER_X11)
3443 #include <X11/XKBlib.h>
3445 #error No x11 support
3447 int main(void) { return 0; }
3449 if compile_prog
"$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3451 sdl_cflags
="$sdl_cflags $x11_cflags"
3452 sdl_libs
="$sdl_libs $x11_libs"
3456 ##########################################
3457 # RDMA needs OpenFabrics libraries
3458 if test "$rdma" != "no" ; then
3460 #include <rdma/rdma_cma.h>
3461 int main(void) { return 0; }
3463 rdma_libs
="-lrdmacm -libverbs -libumad"
3464 if compile_prog
"" "$rdma_libs" ; then
3467 if test "$rdma" = "yes" ; then
3469 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3471 " (1) Fast: Install infiniband packages (devel) from your distro." \
3472 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3473 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3479 ##########################################
3482 cat > $TMPC <<EOF &&
3483 #include <sys/mman.h>
3490 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3496 if test "$rdma" = "yes" ; then
3499 if compile_prog
"" ""; then
3506 if ! compile_prog
"" ""; then
3507 error_exit
"PVRDMA is not supported since mremap is not implemented"
3516 if test "$pvrdma" = "yes" ; then
3517 error_exit
"PVRDMA requires rdma suppport"
3522 # Let's see if enhanced reg_mr is supported
3523 if test "$pvrdma" = "yes" ; then
3525 cat > $TMPC <<EOF &&
3526 #include <infiniband/verbs.h>
3532 struct ibv_pd *pd = NULL;
3538 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3545 if ! compile_prog
"" "-libverbs"; then
3546 QEMU_CFLAGS
="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3550 ##########################################
3551 # VNC SASL detection
3552 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3554 #include <sasl/sasl.h>
3556 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3558 # Assuming Cyrus-SASL installed in /usr prefix
3559 # QEMU defines struct iovec in "qemu/osdep.h",
3560 # we don't want libsasl to redefine it in <sasl/sasl.h>.
3561 vnc_sasl_cflags
="-DSTRUCT_IOVEC_DEFINED"
3562 vnc_sasl_libs
="-lsasl2"
3563 if compile_prog
"$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3565 libs_softmmu
="$vnc_sasl_libs $libs_softmmu"
3566 QEMU_CFLAGS
="$QEMU_CFLAGS $vnc_sasl_cflags"
3568 if test "$vnc_sasl" = "yes" ; then
3569 feature_not_found
"vnc-sasl" "Install Cyrus SASL devel"
3575 ##########################################
3576 # VNC JPEG detection
3577 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3580 #include <jpeglib.h>
3581 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3584 vnc_jpeg_libs
="-ljpeg"
3585 if compile_prog
"$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3587 libs_softmmu
="$vnc_jpeg_libs $libs_softmmu"
3588 QEMU_CFLAGS
="$QEMU_CFLAGS $vnc_jpeg_cflags"
3590 if test "$vnc_jpeg" = "yes" ; then
3591 feature_not_found
"vnc-jpeg" "Install libjpeg-turbo devel"
3597 ##########################################
3599 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3601 //#include <stdio.h>
3605 png_structp png_ptr;
3606 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3607 return png_ptr != 0;
3610 if $pkg_config libpng
--exists; then
3611 vnc_png_cflags
=$
($pkg_config libpng
--cflags)
3612 vnc_png_libs
=$
($pkg_config libpng
--libs)
3615 vnc_png_libs
="-lpng"
3617 if compile_prog
"$vnc_png_cflags" "$vnc_png_libs" ; then
3619 libs_softmmu
="$vnc_png_libs $libs_softmmu"
3620 QEMU_CFLAGS
="$QEMU_CFLAGS $vnc_png_cflags"
3622 if test "$vnc_png" = "yes" ; then
3623 feature_not_found
"vnc-png" "Install libpng devel"
3629 ##########################################
3631 if test "$xkbcommon" != "no" ; then
3632 if $pkg_config xkbcommon
--exists; then
3633 xkbcommon_cflags
=$
($pkg_config xkbcommon
--cflags)
3634 xkbcommon_libs
=$
($pkg_config xkbcommon
--libs)
3637 if test "$xkbcommon" = "yes" ; then
3638 feature_not_found
"xkbcommon" "Install libxkbcommon-devel"
3645 ##########################################
3646 # xfsctl() probe, used for file-posix.c
3647 if test "$xfs" != "no" ; then
3649 #include <stddef.h> /* NULL */
3650 #include <xfs/xfs.h>
3653 xfsctl(NULL, 0, 0, NULL);
3657 if compile_prog
"" "" ; then
3660 if test "$xfs" = "yes" ; then
3661 feature_not_found
"xfs" "Instal xfsprogs/xfslibs devel"
3667 ##########################################
3668 # vde libraries probe
3669 if test "$vde" != "no" ; then
3670 vde_libs
="-lvdeplug"
3672 #include <libvdeplug.h>
3675 struct vde_open_args a = {0, 0, 0};
3681 if compile_prog
"" "$vde_libs" ; then
3684 if test "$vde" = "yes" ; then
3685 feature_not_found
"vde" "Install vde (Virtual Distributed Ethernet) devel"
3691 ##########################################
3692 # netmap support probe
3693 # Apart from looking for netmap headers, we make sure that the host API version
3694 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3695 # a minor/major version number. Minor new features will be marked with values up
3696 # to 15, and if something happens that requires a change to the backend we will
3697 # move above 15, submit the backend fixes and modify this two bounds.
3698 if test "$netmap" != "no" ; then
3700 #include <inttypes.h>
3702 #include <net/netmap.h>
3703 #include <net/netmap_user.h>
3704 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3707 int main(void) { return 0; }
3709 if compile_prog
"" "" ; then
3712 if test "$netmap" = "yes" ; then
3713 feature_not_found
"netmap"
3719 ##########################################
3720 # libcap-ng library probe
3721 if test "$cap_ng" != "no" ; then
3727 capng_capability_to_name(CAPNG_EFFECTIVE);
3731 if compile_prog
"" "$cap_libs" ; then
3734 if test "$cap_ng" = "yes" ; then
3735 feature_not_found
"cap_ng" "Install libcap-ng devel"
3741 ##########################################
3742 # Sound support libraries probe
3744 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/,/ /g')
3745 for drv
in $audio_drv_list; do
3748 if $pkg_config alsa
--exists; then
3749 alsa_libs
=$
($pkg_config alsa
--libs)
3750 alsa_cflags
=$
($pkg_config alsa
--cflags)
3752 if test "$drv" = "try-alsa"; then
3753 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-alsa/alsa/')
3756 if test "$drv" = "try-alsa"; then
3757 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-alsa//')
3759 error_exit
"$drv check failed" \
3760 "Make sure to have the $drv libs and headers installed."
3766 if $pkg_config libpulse
--exists; then
3768 pulse_libs
=$
($pkg_config libpulse
--libs)
3769 pulse_cflags
=$
($pkg_config libpulse
--cflags)
3770 if test "$drv" = "try-pa"; then
3771 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-pa/pa/')
3774 if test "$drv" = "try-pa"; then
3775 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-pa//')
3777 error_exit
"$drv check failed" \
3778 "Make sure to have the $drv libs and headers installed."
3784 if test "$sdl" = "no"; then
3785 error_exit
"sdl not found or disabled, can not use sdl audio driver"
3790 if test "$sdl" = "no"; then
3791 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-sdl//')
3793 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-sdl/sdl/')
3798 coreaudio_libs
="-framework CoreAudio"
3802 dsound_libs
="-lole32 -ldxguid"
3811 if $pkg_config jack
--exists; then
3813 jack_libs
=$
($pkg_config jack
--libs)
3814 if test "$drv" = "try-jack"; then
3815 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-jack/jack/')
3818 if test "$drv" = "try-jack"; then
3819 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/try-jack//')
3821 error_exit
"$drv check failed" \
3822 "Make sure to have the $drv libs and headers installed."
3828 echo "$audio_possible_drivers" |
grep -q "\<$drv\>" ||
{
3829 error_exit
"Unknown driver '$drv' selected" \
3830 "Possible drivers are: $audio_possible_drivers"
3836 ##########################################
3839 if test "$brlapi" != "no" ; then
3840 brlapi_libs
="-lbrlapi"
3844 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3846 if compile_prog
"" "$brlapi_libs" ; then
3849 if test "$brlapi" = "yes" ; then
3850 feature_not_found
"brlapi" "Install brlapi devel"
3856 ##########################################
3858 if test "$iconv" != "no" ; then
3862 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3863 return conv != (iconv_t) -1;
3866 iconv_prefix_list
="/usr/local:/usr"
3867 iconv_lib_list
=":-liconv"
3869 for iconv_prefix
in $iconv_prefix_list; do
3871 iconv_cflags
="-I$iconv_prefix/include"
3872 iconv_ldflags
="-L$iconv_prefix/lib"
3873 for iconv_link
in $iconv_lib_list; do
3875 iconv_lib
="$iconv_ldflags $iconv_link"
3876 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3877 if compile_prog
"$iconv_cflags" "$iconv_lib" ; then
3882 if test "$iconv_found" = yes ; then
3886 if test "$iconv_found" = "yes" ; then
3889 if test "$iconv" = "yes" ; then
3890 feature_not_found
"iconv" "Install iconv devel"
3896 ##########################################
3898 if test "$iconv" = "no" ; then
3899 # curses will need iconv
3902 if test "$curses" != "no" ; then
3903 if test "$mingw32" = "yes" ; then
3904 curses_inc_list
="$($pkg_config --cflags ncurses 2>/dev/null):"
3905 curses_lib_list
="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3907 curses_inc_list
="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3908 curses_lib_list
="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3915 #include <langinfo.h>
3917 const char *codeset;
3919 setlocale(LC_ALL, "");
3921 addwstr(L"wide chars\n");
3923 add_wch(WACS_DEGREE);
3924 codeset = nl_langinfo(CODESET);
3925 return codeset != 0;
3929 for curses_inc
in $curses_inc_list; do
3930 # Make sure we get the wide character prototypes
3931 curses_inc
="-DNCURSES_WIDECHAR $curses_inc"
3933 for curses_lib
in $curses_lib_list; do
3935 if compile_prog
"$curses_inc" "$curses_lib" ; then
3940 if test "$curses_found" = yes ; then
3945 if test "$curses_found" = "yes" ; then
3948 if test "$curses" = "yes" ; then
3949 feature_not_found
"curses" "Install ncurses devel"
3955 ##########################################
3957 if test "$curl" != "no" ; then
3958 if $pkg_config libcurl
--exists; then
3959 curlconfig
="$pkg_config libcurl"
3961 curlconfig
=curl-config
3964 #include <curl/curl.h>
3965 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3967 curl_cflags
=$
($curlconfig --cflags 2>/dev
/null
)
3968 curl_libs
=$
($curlconfig --libs 2>/dev
/null
)
3969 if compile_prog
"$curl_cflags" "$curl_libs" ; then
3972 if test "$curl" = "yes" ; then
3973 feature_not_found
"curl" "Install libcurl devel"
3979 ##########################################
3980 # glib support probe
3983 glib_modules
=gthread-2.0
3984 if test "$modules" = yes; then
3985 glib_modules
="$glib_modules gmodule-export-2.0"
3987 if test "$plugins" = yes; then
3988 glib_modules
="$glib_modules gmodule-2.0"
3991 # This workaround is required due to a bug in pkg-config file for glib as it
3992 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3994 if test "$static" = yes && test "$mingw32" = yes; then
3995 QEMU_CFLAGS
="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3998 for i
in $glib_modules; do
3999 if $pkg_config --atleast-version=$glib_req_ver $i; then
4000 glib_cflags
=$
($pkg_config --cflags $i)
4001 glib_libs
=$
($pkg_config --libs $i)
4002 QEMU_CFLAGS
="$glib_cflags $QEMU_CFLAGS"
4003 LIBS
="$glib_libs $LIBS"
4005 error_exit
"glib-$glib_req_ver $i is required to compile QEMU"
4009 if $pkg_config --atleast-version=$glib_req_ver gio-2.0
; then
4011 gio_cflags
=$
($pkg_config --cflags gio-2.0
)
4012 gio_libs
=$
($pkg_config --libs gio-2.0
)
4013 gdbus_codegen
=$
($pkg_config --variable=gdbus_codegen gio-2.0
)
4014 if [ ! -x "$gdbus_codegen" ]; then
4021 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0
; then
4022 gio_cflags
="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
4023 gio_libs
="$gio_libs $($pkg_config --libs gio-unix-2.0)"
4026 # Sanity check that the current size_t matches the
4027 # size that glib thinks it should be. This catches
4028 # problems on multi-arch where people try to build
4029 # 32-bit QEMU while pointing at 64-bit glib headers
4034 #define QEMU_BUILD_BUG_ON(x) \
4035 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
4038 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
4043 if ! compile_prog
"$CFLAGS" "$LIBS" ; then
4044 error_exit
"sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
4045 "You probably need to set PKG_CONFIG_LIBDIR"\
4046 "to point to the right pkg-config files for your"\
4050 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
4053 int main(void) { return 0; }
4055 if ! compile_prog
"$glib_cflags -Werror" "$glib_libs" ; then
4056 if cc_has_warning_flag
"-Wno-unknown-attributes"; then
4057 glib_cflags
="-Wno-unknown-attributes $glib_cflags"
4058 QEMU_CFLAGS
="-Wno-unknown-attributes $CFLAGS"
4062 # Silence clang warnings triggered by glib < 2.57.2
4065 typedef struct Foo {
4068 static void foo_free(Foo *f)
4072 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
4073 int main(void) { return 0; }
4075 if ! compile_prog
"$glib_cflags -Werror" "$glib_libs" ; then
4076 if cc_has_warning_flag
"-Wno-unused-function"; then
4077 glib_cflags
="$glib_cflags -Wno-unused-function"
4078 CFLAGS
="$CFLAGS -Wno-unused-function"
4082 #########################################
4085 if test "$zlib" != "no" ; then
4086 if $pkg_config --exists zlib
; then
4087 zlib_cflags
=$
($pkg_config --cflags zlib
)
4088 zlib_libs
=$
($pkg_config --libs zlib
)
4089 QEMU_CFLAGS
="$zlib_cflags $QEMU_CFLAGS"
4090 LIBS
="$zlib_libs $LIBS"
4094 int main(void) { zlibVersion(); return 0; }
4096 if compile_prog
"" "-lz" ; then
4098 LIBS
="$LIBS $zlib_libs"
4100 error_exit
"zlib check failed" \
4101 "Make sure to have the zlib libs and headers installed."
4106 ##########################################
4107 # SHA command probe for modules
4108 if test "$modules" = yes; then
4109 shacmd_probe
="sha1sum sha1 shasum"
4110 for c
in $shacmd_probe; do
4116 if test "$shacmd" = ""; then
4117 error_exit
"one of the checksum commands is required to enable modules: $shacmd_probe"
4121 ##########################################
4122 # pixman support probe
4124 if test "$softmmu" = "no"; then
4127 elif $pkg_config --atleast-version=0.21.8 pixman-1
> /dev
/null
2>&1; then
4128 pixman_cflags
=$
($pkg_config --cflags pixman-1
)
4129 pixman_libs
=$
($pkg_config --libs pixman-1
)
4131 error_exit
"pixman >= 0.21.8 not present." \
4132 "Please install the pixman devel package."
4135 ##########################################
4136 # libmpathpersist probe
4138 if test "$mpath" != "no" ; then
4139 # probe for the new API
4141 #include <libudev.h>
4142 #include <mpath_persist.h>
4143 unsigned mpath_mx_alloc_len = 1024;
4145 static struct config *multipath_conf;
4146 extern struct udev *udev;
4147 extern struct config *get_multipath_config(void);
4148 extern void put_multipath_config(struct config *conf);
4150 struct config *get_multipath_config(void) { return multipath_conf; }
4151 void put_multipath_config(struct config *conf) { }
4155 multipath_conf = mpath_lib_init();
4159 if compile_prog
"" "-ludev -lmultipath -lmpathpersist" ; then
4161 mpathpersist_new_api
=yes
4163 # probe for the old API
4165 #include <libudev.h>
4166 #include <mpath_persist.h>
4167 unsigned mpath_mx_alloc_len = 1024;
4170 struct udev *udev = udev_new();
4171 mpath_lib_init(udev);
4175 if compile_prog
"" "-ludev -lmultipath -lmpathpersist" ; then
4177 mpathpersist_new_api
=no
4186 ##########################################
4188 PTHREADLIBS_LIST
="-pthread -lpthread -lpthreadGC2"
4192 #include <pthread.h>
4193 static void *f(void *p) { return NULL; }
4196 pthread_create(&thread, 0, f, 0);
4200 if compile_prog
"" "" ; then
4203 for pthread_lib
in $PTHREADLIBS_LIST; do
4204 if compile_prog
"" "$pthread_lib" ; then
4207 for lib_entry
in $LIBS; do
4208 if test "$lib_entry" = "$pthread_lib"; then
4213 if test "$found" = "no"; then
4214 LIBS
="$pthread_lib $LIBS"
4216 PTHREAD_LIB
="$pthread_lib"
4222 if test "$mingw32" != yes && test "$pthread" = no
; then
4223 error_exit
"pthread check failed" \
4224 "Make sure to have the pthread libs and headers installed."
4227 # check for pthread_setname_np with thread id
4228 pthread_setname_np_w_tid
=no
4230 #include <pthread.h>
4232 static void *f(void *p) { return NULL; }
4236 pthread_create(&thread, 0, f, 0);
4237 pthread_setname_np(thread, "QEMU");
4241 if compile_prog
"" "$pthread_lib" ; then
4242 pthread_setname_np_w_tid
=yes
4245 # check for pthread_setname_np without thread id
4246 pthread_setname_np_wo_tid
=no
4248 #include <pthread.h>
4250 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
4254 pthread_create(&thread, 0, f, 0);
4258 if compile_prog
"" "$pthread_lib" ; then
4259 pthread_setname_np_wo_tid
=yes
4262 ##########################################
4264 if test "$rbd" != "no" ; then
4267 #include <rbd/librbd.h>
4270 rados_create(&cluster, NULL);
4274 rbd_libs
="-lrbd -lrados"
4275 if compile_prog
"" "$rbd_libs" ; then
4278 if test "$rbd" = "yes" ; then
4279 feature_not_found
"rados block device" "Install librbd/ceph devel"
4285 ##########################################
4287 if test "$libssh" != "no" ; then
4288 if $pkg_config --exists libssh
; then
4289 libssh_cflags
=$
($pkg_config libssh
--cflags)
4290 libssh_libs
=$
($pkg_config libssh
--libs)
4293 if test "$libssh" = "yes" ; then
4294 error_exit
"libssh required for --enable-libssh"
4300 ##########################################
4301 # Check for libssh 0.8
4302 # This is done like this instead of using the LIBSSH_VERSION_* and
4303 # SSH_VERSION_* macros because some distributions in the past shipped
4304 # snapshots of the future 0.8 from Git, and those snapshots did not
4305 # have updated version numbers (still referring to 0.7.0).
4307 if test "$libssh" = "yes"; then
4309 #include <libssh/libssh.h>
4310 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4312 if compile_prog
"$libssh_cflags" "$libssh_libs"; then
4313 libssh_cflags
="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4317 ##########################################
4320 if test "$linux_aio" != "no" ; then
4323 #include <sys/eventfd.h>
4325 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4327 if compile_prog
"" "-laio" ; then
4330 if test "$linux_aio" = "yes" ; then
4331 feature_not_found
"linux AIO" "Install libaio devel"
4336 ##########################################
4337 # linux-io-uring probe
4339 if test "$linux_io_uring" != "no" ; then
4340 if $pkg_config liburing
; then
4341 linux_io_uring_cflags
=$
($pkg_config --cflags liburing
)
4342 linux_io_uring_libs
=$
($pkg_config --libs liburing
)
4345 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4346 # seen by programs linking the archive. It's not ideal, but just add the
4347 # library dependency globally.
4348 LIBS
="$linux_io_uring_libs $LIBS"
4350 if test "$linux_io_uring" = "yes" ; then
4351 feature_not_found
"linux io_uring" "Install liburing devel"
4357 ##########################################
4358 # TPM emulation is only on POSIX
4360 if test "$tpm" = ""; then
4361 if test "$mingw32" = "yes"; then
4366 elif test "$tpm" = "yes"; then
4367 if test "$mingw32" = "yes" ; then
4368 error_exit
"TPM emulation only available on POSIX systems"
4372 ##########################################
4376 if test "$attr" != "no" ; then
4379 #include <sys/types.h>
4380 #ifdef CONFIG_LIBATTR
4381 #include <attr/xattr.h>
4383 #include <sys/xattr.h>
4385 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4387 if compile_prog
"" "" ; then
4389 # Older distros have <attr/xattr.h>, and need -lattr:
4390 elif compile_prog
"-DCONFIG_LIBATTR" "-lattr" ; then
4392 libattr_libs
="-lattr"
4393 LIBS
="$libattr_libs $LIBS"
4396 if test "$attr" = "yes" ; then
4397 feature_not_found
"ATTR" "Install libc6 or libattr devel"
4403 ##########################################
4406 #include <sys/types.h>
4407 #include <sys/uio.h>
4409 int main(void) { return sizeof(struct iovec); }
4412 if compile_prog
"" "" ; then
4416 ##########################################
4419 #include <sys/types.h>
4420 #include <sys/uio.h>
4422 int main(void) { return preadv(0, 0, 0, 0); }
4425 if compile_prog
"" "" ; then
4429 ##########################################
4431 # fdt support is mandatory for at least some target architectures,
4432 # so insist on it if we're building those system emulators.
4434 for target
in $target_list; do
4436 aarch64
*-softmmu|arm
*-softmmu|ppc
*-softmmu|microblaze
*-softmmu|mips64el-softmmu|riscv
*-softmmu|rx-softmmu
)
4442 if test "$fdt_required" = "yes"; then
4443 if test "$fdt" = "no"; then
4444 error_exit
"fdt disabled but some requested targets require it." \
4445 "You can turn off fdt only if you also disable all the system emulation" \
4446 "targets which need it (by specifying a cut down --target-list)."
4449 elif test "$fdt" != "yes" ; then
4453 # fdt is only required when building softmmu targets
4454 if test -z "$fdt" -a "$softmmu" != "yes" ; then
4458 if test "$fdt" != "no" ; then
4460 # explicitly check for libfdt_env.h as it is missing in some stable installs
4461 # and test for required functions to make sure we are on a version >= 1.4.2
4464 #include <libfdt_env.h>
4465 int main(void) { fdt_check_full(NULL, 0); return 0; }
4467 if compile_prog
"" "$fdt_libs" ; then
4468 # system DTC is good - use it
4471 # have GIT checkout, so activate dtc submodule
4472 if test -e "${source_path}/.git" ; then
4473 git_submodules
="${git_submodules} dtc"
4475 if test -d "${source_path}/dtc/libfdt" ||
test -e "${source_path}/.git" ; then
4478 if [ "$pwd_is_source_path" != "y" ] ; then
4479 symlink
"$source_path/dtc/Makefile" "dtc/Makefile"
4481 fdt_cflags
="-I${source_path}/dtc/libfdt"
4482 fdt_ldflags
="-L$PWD/dtc/libfdt"
4483 fdt_libs
="$fdt_libs"
4484 elif test "$fdt" = "yes" ; then
4485 # Not a git build & no libfdt found, prompt for system install
4486 error_exit
"DTC (libfdt) version >= 1.4.2 not present." \
4487 "Please install the DTC (libfdt) devel package"
4489 # don't have and don't want
4496 ##########################################
4497 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4500 if $pkg_config gbm
; then
4501 gbm_cflags
="$($pkg_config --cflags gbm)"
4502 gbm_libs
="$($pkg_config --libs gbm)"
4506 if test "$opengl" != "no" ; then
4507 opengl_pkgs
="epoxy gbm"
4508 if $pkg_config $opengl_pkgs; then
4509 opengl_cflags
="$($pkg_config --cflags $opengl_pkgs)"
4510 opengl_libs
="$($pkg_config --libs $opengl_pkgs)"
4512 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4515 QEMU_CFLAGS
="$QEMU_CFLAGS $opengl_cflags"
4517 if test "$opengl" = "yes" ; then
4518 feature_not_found
"opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4526 if test "$opengl" = "yes"; then
4528 #include <epoxy/egl.h>
4529 #ifndef EGL_MESA_image_dma_buf_export
4530 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4532 int main(void) { return 0; }
4534 if compile_prog
"" "" ; then
4539 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4540 for target
in $target_list; do
4542 lm32-softmmu
) # milkymist-tmu2 requires X11 and OpenGL
4549 ##########################################
4551 if test "$libxml2" != "no" ; then
4552 if $pkg_config --exists libxml-2.0
; then
4554 libxml2_cflags
=$
($pkg_config --cflags libxml-2.0
)
4555 libxml2_libs
=$
($pkg_config --libs libxml-2.0
)
4557 if test "$libxml2" = "yes"; then
4558 feature_not_found
"libxml2" "Install libxml2 devel"
4564 ##########################################
4566 if test "$glusterfs" != "no" ; then
4567 if $pkg_config --atleast-version=3 glusterfs-api
; then
4569 glusterfs_cflags
=$
($pkg_config --cflags glusterfs-api
)
4570 glusterfs_libs
=$
($pkg_config --libs glusterfs-api
)
4571 if $pkg_config --atleast-version=4 glusterfs-api
; then
4572 glusterfs_xlator_opt
="yes"
4574 if $pkg_config --atleast-version=5 glusterfs-api
; then
4575 glusterfs_discard
="yes"
4577 if $pkg_config --atleast-version=6 glusterfs-api
; then
4578 glusterfs_fallocate
="yes"
4579 glusterfs_zerofill
="yes"
4582 #include <glusterfs/api/glfs.h>
4587 /* new glfs_ftruncate() passes two additional args */
4588 return glfs_ftruncate(NULL, 0, NULL, NULL);
4591 if compile_prog
"$glusterfs_cflags" "$glusterfs_libs" ; then
4592 glusterfs_ftruncate_has_stat
="yes"
4595 #include <glusterfs/api/glfs.h>
4597 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4599 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4605 glfs_io_cbk iocb = &glusterfs_iocb;
4606 iocb(NULL, 0 , NULL, NULL, NULL);
4610 if compile_prog
"$glusterfs_cflags" "$glusterfs_libs" ; then
4611 glusterfs_iocb_has_stat
="yes"
4614 if test "$glusterfs" = "yes" ; then
4615 feature_not_found
"GlusterFS backend support" \
4616 "Install glusterfs-api devel >= 3"
4622 # Check for inotify functions when we are building linux-user
4623 # emulator. This is done because older glibc versions don't
4624 # have syscall stubs for these implemented. In that case we
4625 # don't provide them even if kernel supports them.
4629 #include <sys/inotify.h>
4634 /* try to start inotify */
4635 return inotify_init();
4638 if compile_prog
"" "" ; then
4644 #include <sys/inotify.h>
4649 /* try to start inotify */
4650 return inotify_init1(0);
4653 if compile_prog
"" "" ; then
4657 # check if pipe2 is there
4666 return pipe2(pipefd, O_CLOEXEC);
4669 if compile_prog
"" "" ; then
4673 # check if accept4 is there
4676 #include <sys/socket.h>
4681 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4685 if compile_prog
"" "" ; then
4689 # check if tee/splice is there. vmsplice was added same time.
4699 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4700 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4704 if compile_prog
"" "" ; then
4708 ##########################################
4711 if test "$numa" != "no" ; then
4714 int main(void) { return numa_available(); }
4717 if compile_prog
"" "-lnuma" ; then
4721 if test "$numa" = "yes" ; then
4722 feature_not_found
"numa" "install numactl devel"
4728 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4729 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4733 # Even if malloc_trim() is available, these non-libc memory allocators
4734 # do not support it.
4735 if test "$tcmalloc" = "yes" ||
test "$jemalloc" = "yes" ; then
4736 if test "$malloc_trim" = "yes" ; then
4737 echo "Disabling malloc_trim with non-libc memory allocator"
4742 #######################################
4745 if test "$malloc_trim" != "no" ; then
4748 int main(void) { malloc_trim(0); return 0; }
4750 if compile_prog
"" "" ; then
4757 ##########################################
4760 if test "$tcmalloc" = "yes" ; then
4764 void *tmp = malloc(1);
4772 if compile_prog
"" "-ltcmalloc" ; then
4773 LIBS
="-ltcmalloc $LIBS"
4775 feature_not_found
"tcmalloc" "install gperftools devel"
4779 ##########################################
4782 if test "$jemalloc" = "yes" ; then
4786 void *tmp = malloc(1);
4794 if compile_prog
"" "-ljemalloc" ; then
4795 LIBS
="-ljemalloc $LIBS"
4797 feature_not_found
"jemalloc" "install jemalloc devel"
4801 ##########################################
4806 #include <sys/syscall.h>
4808 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4811 if compile_prog
"" "" ; then
4815 # check if optreset global is declared by <getopt.h>
4819 int main(void) { return optreset; }
4822 if compile_prog
"" "" ; then
4826 # check if eventfd is supported
4829 #include <sys/eventfd.h>
4833 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4836 if compile_prog
"" "" ; then
4840 # check if memfd is supported
4843 #include <sys/mman.h>
4847 return memfd_create("foo", MFD_ALLOW_SEALING);
4850 if compile_prog
"" "" ; then
4856 if test "$linux_user" = "yes"; then
4858 #include <linux/usbdevice_fs.h>
4860 #ifndef USBDEVFS_GET_CAPABILITIES
4861 #error "USBDEVFS_GET_CAPABILITIES undefined"
4864 #ifndef USBDEVFS_DISCONNECT_CLAIM
4865 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4873 if compile_prog
"" ""; then
4878 # check for fallocate
4885 fallocate(0, 0, 0, 0);
4889 if compile_prog
"" "" ; then
4893 # check for fallocate hole punching
4894 fallocate_punch_hole
=no
4897 #include <linux/falloc.h>
4901 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4905 if compile_prog
"" "" ; then
4906 fallocate_punch_hole
=yes
4909 # check that fallocate supports range zeroing inside the file
4910 fallocate_zero_range
=no
4913 #include <linux/falloc.h>
4917 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4921 if compile_prog
"" "" ; then
4922 fallocate_zero_range
=yes
4925 # check for posix_fallocate
4932 posix_fallocate(0, 0, 0);
4936 if compile_prog
"" "" ; then
4940 # check for sync_file_range
4947 sync_file_range(0, 0, 0, 0);
4951 if compile_prog
"" "" ; then
4955 # check for linux/fiemap.h and FS_IOC_FIEMAP
4958 #include <sys/ioctl.h>
4959 #include <linux/fs.h>
4960 #include <linux/fiemap.h>
4964 ioctl(0, FS_IOC_FIEMAP, 0);
4968 if compile_prog
"" "" ; then
4983 if compile_prog
"" "" ; then
4987 # check for ppoll support
4994 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4995 ppoll(&pfd, 1, 0, 0);
4999 if compile_prog
"" "" ; then
5003 # check for prctl(PR_SET_TIMERSLACK , ... ) support
5004 prctl_pr_set_timerslack
=no
5006 #include <sys/prctl.h>
5010 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
5014 if compile_prog
"" "" ; then
5015 prctl_pr_set_timerslack
=yes
5018 # check for epoll support
5021 #include <sys/epoll.h>
5029 if compile_prog
"" "" ; then
5033 # epoll_create1 is a later addition
5034 # so we must check separately for its presence
5037 #include <sys/epoll.h>
5041 /* Note that we use epoll_create1 as a value, not as
5042 * a function being called. This is necessary so that on
5043 * old SPARC glibc versions where the function was present in
5044 * the library but not declared in the header file we will
5045 * fail the configure check. (Otherwise we will get a compiler
5046 * warning but not an error, and will proceed to fail the
5047 * qemu compile where we compile with -Werror.)
5049 return (int)(uintptr_t)&epoll_create1;
5052 if compile_prog
"" "" ; then
5056 # check for sendfile support
5059 #include <sys/sendfile.h>
5063 return sendfile(0, 0, 0, 0);
5066 if compile_prog
"" "" ; then
5070 # check for timerfd support (glibc 2.8 and newer)
5073 #include <sys/timerfd.h>
5077 return(timerfd_create(CLOCK_REALTIME, 0));
5080 if compile_prog
"" "" ; then
5084 # check for setns and unshare support
5097 if compile_prog
"" "" ; then
5101 # clock_adjtime probe
5108 return clock_adjtime(0, 0);
5112 if compile_prog
"" "" ; then
5127 if compile_prog
"" "" ; then
5131 # check for kcov support (kernel must be 4.4+, compiled with certain options)
5133 if check_include sys
/kcov.h
; then
5137 # If we're making warnings fatal, apply this to Sphinx runs as well
5139 if test "$werror" = "yes"; then
5143 # Check we have a new enough version of sphinx-build
5144 has_sphinx_build
() {
5145 # This is a bit awkward but works: create a trivial document and
5146 # try to run it with our configuration file (which enforces a
5147 # version requirement). This will fail if either
5148 # sphinx-build doesn't exist at all or if it is too old.
5149 mkdir
-p "$TMPDIR1/sphinx"
5150 touch "$TMPDIR1/sphinx/index.rst"
5151 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
5152 -b html
"$TMPDIR1/sphinx" \
5153 "$TMPDIR1/sphinx/out" >> config.log
2>&1
5156 # Check if tools are available to build documentation.
5157 if test "$docs" != "no" ; then
5158 if has_sphinx_build
; then
5163 if has makeinfo
&& has pod2man
&& test "$sphinx_ok" = "yes"; then
5166 if test "$docs" = "yes" ; then
5167 if has
$sphinx_build && test "$sphinx_ok" != "yes"; then
5168 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
5170 feature_not_found
"docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
5176 # Search for bswap_32 function
5179 #include <byteswap.h>
5180 int main(void) { return bswap_32(0); }
5182 if compile_prog
"" "" ; then
5186 # Search for bswap32 function
5189 #include <sys/endian.h>
5190 #include <sys/types.h>
5191 #include <machine/bswap.h>
5192 int main(void) { return bswap32(0); }
5194 if compile_prog
"" "" ; then
5198 ##########################################
5199 # Do we have libiscsi >= 1.9.0
5200 if test "$libiscsi" != "no" ; then
5201 if $pkg_config --atleast-version=1.9.0 libiscsi
; then
5203 libiscsi_cflags
=$
($pkg_config --cflags libiscsi
)
5204 libiscsi_libs
=$
($pkg_config --libs libiscsi
)
5206 if test "$libiscsi" = "yes" ; then
5207 feature_not_found
"libiscsi" "Install libiscsi >= 1.9.0"
5213 ##########################################
5217 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
5219 if compile_prog
"" "" ; then
5221 elif compile_prog
"" "-lm" ; then
5224 error_exit
"libm check failed"
5227 ##########################################
5229 # uClibc provides 2 versions of clock_gettime(), one with realtime
5230 # support and one without. This means that the clock_gettime() don't
5231 # need -lrt. We still need it for timer_create() so we check for this
5232 # function in addition.
5237 timer_create(CLOCK_REALTIME, NULL, NULL);
5238 return clock_gettime(CLOCK_REALTIME, NULL);
5242 if compile_prog
"" "" ; then
5244 # we need pthread for static linking. use previous pthread test result
5245 elif compile_prog
"" "$pthread_lib -lrt" ; then
5249 # Check whether we need to link libutil for openpty()
5251 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5252 int main(void) { return openpty(0, 0, 0, 0, 0); }
5256 if compile_prog
"" "" ; then
5259 if compile_prog
"" "-lutil" ; then
5260 libs_tools
="-lutil $libs_tools"
5265 ##########################################
5267 if test "$spice" != "no" ; then
5270 int main(void) { spice_server_new(); return 0; }
5272 spice_cflags
=$
($pkg_config --cflags spice-protocol spice-server
2>/dev
/null
)
5273 spice_libs
=$
($pkg_config --libs spice-protocol spice-server
2>/dev
/null
)
5274 if $pkg_config --atleast-version=0.12.5 spice-server
&& \
5275 $pkg_config --atleast-version=0.12.3 spice-protocol
&& \
5276 compile_prog
"$spice_cflags" "$spice_libs" ; then
5278 QEMU_CFLAGS
="$QEMU_CFLAGS $spice_cflags"
5280 if test "$spice" = "yes" ; then
5281 feature_not_found
"spice" \
5282 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
5288 # check for smartcard support
5289 if test "$smartcard" != "no"; then
5290 if $pkg_config --atleast-version=2.5.1 libcacard
; then
5291 libcacard_cflags
=$
($pkg_config --cflags libcacard
)
5292 libcacard_libs
=$
($pkg_config --libs libcacard
)
5295 if test "$smartcard" = "yes"; then
5296 feature_not_found
"smartcard" "Install libcacard devel"
5303 if test "$libusb" != "no" ; then
5304 if $pkg_config --atleast-version=1.0.13 libusb-1.0
; then
5306 libusb_cflags
=$
($pkg_config --cflags libusb-1.0
)
5307 libusb_libs
=$
($pkg_config --libs libusb-1.0
)
5309 if test "$libusb" = "yes"; then
5310 feature_not_found
"libusb" "Install libusb devel >= 1.0.13"
5316 # check for usbredirparser for usb network redirection support
5317 if test "$usb_redir" != "no" ; then
5318 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5
; then
5320 usb_redir_cflags
=$
($pkg_config --cflags libusbredirparser-0.5
)
5321 usb_redir_libs
=$
($pkg_config --libs libusbredirparser-0.5
)
5323 if test "$usb_redir" = "yes"; then
5324 feature_not_found
"usb-redir" "Install usbredir devel"
5330 ##########################################
5331 # check if we have VSS SDK headers for win
5333 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5334 test "$vss_win32_sdk" != "no" ; then
5335 case "$vss_win32_sdk" in
5336 "") vss_win32_include
="-isystem $source_path" ;;
5337 *\
*) # The SDK is installed in "Program Files" by default, but we cannot
5338 # handle path with spaces. So we symlink the headers into ".sdk/vss".
5339 vss_win32_include
="-isystem $source_path/.sdk/vss"
5340 symlink
"$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5342 *) vss_win32_include
="-isystem $vss_win32_sdk"
5345 #define __MIDL_user_allocate_free_DEFINED__
5346 #include <inc/win2003/vss.h>
5347 int main(void) { return VSS_CTX_BACKUP; }
5349 if compile_prog
"$vss_win32_include" "" ; then
5350 guest_agent_with_vss
="yes"
5351 QEMU_CFLAGS
="$QEMU_CFLAGS $vss_win32_include"
5352 libs_qga
="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
5353 qga_vss_provider
="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
5355 if test "$vss_win32_sdk" != "" ; then
5356 echo "ERROR: Please download and install Microsoft VSS SDK:"
5357 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5358 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5359 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5360 echo "ERROR: The headers are extracted in the directory \`inc'."
5361 feature_not_found
"VSS support"
5363 guest_agent_with_vss
="no"
5367 ##########################################
5368 # lookup Windows platform SDK (if not specified)
5369 # The SDK is needed only to build .tlb (type library) file of guest agent
5370 # VSS provider from the source. It is usually unnecessary because the
5371 # pre-compiled .tlb file is included.
5373 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5374 test "$guest_agent_with_vss" = "yes" ; then
5375 if test -z "$win_sdk"; then
5376 programfiles
="$PROGRAMFILES"
5377 test -n "$PROGRAMW6432" && programfiles
="$PROGRAMW6432"
5378 if test -n "$programfiles"; then
5379 win_sdk
=$
(ls -d "$programfiles/Microsoft SDKs/Windows/v"* |
tail -1) 2>/dev
/null
5381 feature_not_found
"Windows SDK"
5383 elif test "$win_sdk" = "no"; then
5388 ##########################################
5389 # check if mingw environment provides a recent ntddscsi.h
5390 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
5392 #include <windows.h>
5393 #include <ntddscsi.h>
5395 #if !defined(IOCTL_SCSI_GET_ADDRESS)
5396 #error Missing required ioctl definitions
5398 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5402 if compile_prog
"" "" ; then
5403 guest_agent_ntddscsi
=yes
5404 libs_qga
="-lsetupapi -lcfgmgr32 $libs_qga"
5408 ##########################################
5409 # virgl renderer probe
5411 if test "$virglrenderer" != "no" ; then
5413 #include <virglrenderer.h>
5414 int main(void) { virgl_renderer_poll(); return 0; }
5416 virgl_cflags
=$
($pkg_config --cflags virglrenderer
2>/dev
/null
)
5417 virgl_libs
=$
($pkg_config --libs virglrenderer
2>/dev
/null
)
5418 virgl_version
=$
($pkg_config --modversion virglrenderer
2>/dev
/null
)
5419 if $pkg_config virglrenderer
>/dev
/null
2>&1 && \
5420 compile_prog
"$virgl_cflags" "$virgl_libs" ; then
5423 if test "$virglrenderer" = "yes" ; then
5424 feature_not_found
"virglrenderer"
5430 ##########################################
5435 if $pkg_config capstone
; then
5437 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5439 elif test -e "${source_path}/capstone/Makefile" ; then
5441 elif test -z "$capstone" ; then
5444 feature_not_found
"capstone" "Install capstone devel or git submodule"
5449 if ! $pkg_config capstone
; then
5450 feature_not_found
"capstone" "Install capstone devel"
5457 if test "$capstone" = git
; then
5458 git_submodules
="${git_submodules} capstone"
5461 QEMU_CFLAGS
="$QEMU_CFLAGS -I${source_path}/capstone/include"
5462 if test "$mingw32" = "yes"; then
5463 LIBCAPSTONE
=capstone.lib
5465 LIBCAPSTONE
=libcapstone.a
5467 capstone_libs
="-L$PWD/capstone -lcapstone"
5468 capstone_cflags
="-I${source_path}/capstone/include"
5472 capstone_libs
="$($pkg_config --libs capstone)"
5473 capstone_cflags
="$($pkg_config --cflags capstone)"
5474 QEMU_CFLAGS
="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5480 error_exit
"Unknown state for capstone: $capstone"
5484 ##########################################
5485 # check if we have fdatasync
5491 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5492 return fdatasync(0);
5494 #error Not supported
5498 if compile_prog
"" "" ; then
5502 ##########################################
5503 # check if we have madvise
5507 #include <sys/types.h>
5508 #include <sys/mman.h>
5510 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5512 if compile_prog
"" "" ; then
5516 ##########################################
5517 # check if we have posix_madvise
5521 #include <sys/mman.h>
5523 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5525 if compile_prog
"" "" ; then
5529 ##########################################
5530 # check if we have posix_memalign()
5537 return posix_memalign(&p, 8, 8);
5540 if compile_prog
"" "" ; then
5544 ##########################################
5545 # check if we have posix_syslog
5550 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5552 if compile_prog
"" "" ; then
5556 ##########################################
5557 # check if we have sem_timedwait
5561 #include <semaphore.h>
5562 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5564 if compile_prog
"" "" ; then
5568 ##########################################
5569 # check if we have strchrnul
5575 // Use a haystack that the compiler shouldn't be able to constant fold
5576 char *haystack = (char*)&main;
5577 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5579 if compile_prog
"" "" ; then
5583 #########################################
5584 # check if we have st_atim
5588 #include <sys/stat.h>
5590 int main(void) { return offsetof(struct stat, st_atim); }
5592 if compile_prog
"" "" ; then
5596 ##########################################
5597 # check if trace backend exists
5599 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev
/null
2> /dev
/null
5600 if test "$?" -ne 0 ; then
5601 error_exit
"invalid trace backends" \
5602 "Please choose supported trace backends."
5605 ##########################################
5606 # For 'ust' backend, test if ust headers are present
5607 if have_backend
"ust"; then
5609 #include <lttng/tracepoint.h>
5610 int main(void) { return 0; }
5612 if compile_prog
"" "-Wl,--no-as-needed -ldl" ; then
5613 if $pkg_config lttng-ust
--exists; then
5614 lttng_ust_libs
=$
($pkg_config --libs lttng-ust
)
5616 lttng_ust_libs
="-llttng-ust -ldl"
5618 if $pkg_config liburcu-bp
--exists; then
5619 urcu_bp_libs
=$
($pkg_config --libs liburcu-bp
)
5621 urcu_bp_libs
="-lurcu-bp"
5624 LIBS
="$lttng_ust_libs $urcu_bp_libs $LIBS"
5626 error_exit
"Trace backend 'ust' missing lttng-ust header files"
5630 ##########################################
5631 # For 'dtrace' backend, test if 'dtrace' command is present
5632 if have_backend
"dtrace"; then
5633 if ! has
'dtrace' ; then
5634 error_exit
"dtrace command is not found in PATH $PATH"
5636 trace_backend_stap
="no"
5637 if has
'stap' ; then
5638 trace_backend_stap
="yes"
5642 ##########################################
5643 # check and set a backend for coroutine
5645 # We prefer ucontext, but it's not always possible. The fallback
5646 # is sigcontext. On Windows the only valid backend is the Windows
5650 if test "$darwin" != "yes"; then
5652 #include <ucontext.h>
5653 #ifdef __stub_makecontext
5654 #error Ignoring glibc stub makecontext which will always fail
5656 int main(void) { makecontext(0, 0, 0); return 0; }
5658 if compile_prog
"" "" ; then
5663 if test "$coroutine" = ""; then
5664 if test "$mingw32" = "yes"; then
5666 elif test "$ucontext_works" = "yes"; then
5669 coroutine
=sigaltstack
5674 if test "$mingw32" != "yes"; then
5675 error_exit
"'windows' coroutine backend only valid for Windows"
5677 # Unfortunately the user visible backend name doesn't match the
5678 # coroutine-*.c filename for this case, so we have to adjust it here.
5682 if test "$ucontext_works" != "yes"; then
5683 feature_not_found
"ucontext"
5687 if test "$mingw32" = "yes"; then
5688 error_exit
"only the 'windows' coroutine backend is valid for Windows"
5692 error_exit
"unknown coroutine backend $coroutine"
5697 if test "$coroutine_pool" = ""; then
5701 if test "$debug_stack_usage" = "yes"; then
5702 if test "$coroutine_pool" = "yes"; then
5703 echo "WARN: disabling coroutine pool for stack usage debugging"
5708 ##################################################
5712 if test "$safe_stack" = "yes"; then
5714 int main(int argc, char *argv[])
5716 #if ! __has_feature(safe_stack)
5717 #error SafeStack Disabled
5722 flag
="-fsanitize=safe-stack"
5723 # Check that safe-stack is supported and enabled.
5724 if compile_prog
"-Werror $flag" "$flag"; then
5725 # Flag needed both at compilation and at linking
5726 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
5727 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
5729 error_exit
"SafeStack not supported by your compiler"
5731 if test "$coroutine" != "ucontext"; then
5732 error_exit
"SafeStack is only supported by the coroutine backend ucontext"
5736 int main(int argc, char *argv[])
5738 #if defined(__has_feature)
5739 #if __has_feature(safe_stack)
5740 #error SafeStack Enabled
5746 if test "$safe_stack" = "no"; then
5747 # Make sure that safe-stack is disabled
5748 if ! compile_prog
"-Werror" ""; then
5749 # SafeStack was already enabled, try to explicitly remove the feature
5750 flag
="-fno-sanitize=safe-stack"
5751 if ! compile_prog
"-Werror $flag" "$flag"; then
5752 error_exit
"Configure cannot disable SafeStack"
5754 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
5755 QEMU_LDFLAGS
="$QEMU_LDFLAGS $flag"
5757 else # "$safe_stack" = ""
5758 # Set safe_stack to yes or no based on pre-existing flags
5759 if compile_prog
"-Werror" ""; then
5763 if test "$coroutine" != "ucontext"; then
5764 error_exit
"SafeStack is only supported by the coroutine backend ucontext"
5770 ##########################################
5771 # check if we have open_by_handle_at
5773 open_by_handle_at
=no
5776 #if !defined(AT_EMPTY_PATH)
5777 # error missing definition
5779 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5782 if compile_prog
"" "" ; then
5783 open_by_handle_at
=yes
5786 ########################################
5787 # check if we have linux/magic.h
5791 #include <linux/magic.h>
5796 if compile_prog
"" "" ; then
5800 ########################################
5801 # check if we have valgrind/valgrind.h
5805 #include <valgrind/valgrind.h>
5810 if compile_prog
"" "" ; then
5814 ########################################
5815 # check if environ is declared
5825 if compile_prog
"" "" ; then
5829 ########################################
5830 # check if cpuid.h is usable.
5835 unsigned a, b, c, d;
5836 int max = __get_cpuid_max(0, 0);
5839 __cpuid(1, a, b, c, d);
5843 __cpuid_count(7, 0, a, b, c, d);
5849 if compile_prog
"" "" ; then
5853 ##########################################
5854 # avx2 optimization requirement check
5856 # There is no point enabling this if cpuid.h is not usable,
5857 # since we won't be able to select the new routines.
5859 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5861 #pragma GCC push_options
5862 #pragma GCC target("avx2")
5864 #include <immintrin.h>
5865 static int bar(void *a) {
5866 __m256i x = *(__m256i *)a;
5867 return _mm256_testz_si256(x, x);
5869 int main(int argc, char *argv[]) { return bar(argv[0]); }
5871 if compile_object
"" ; then
5878 ##########################################
5879 # avx512f optimization requirement check
5881 # There is no point enabling this if cpuid.h is not usable,
5882 # since we won't be able to select the new routines.
5883 # by default, it is turned off.
5884 # if user explicitly want to enable it, check environment
5886 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5888 #pragma GCC push_options
5889 #pragma GCC target("avx512f")
5891 #include <immintrin.h>
5892 static int bar(void *a) {
5893 __m512i x = *(__m512i *)a;
5894 return _mm512_test_epi64_mask(x, x);
5896 int main(int argc, char *argv[])
5898 return bar(argv[0]);
5901 if ! compile_object
"" ; then
5908 ########################################
5909 # check if __[u]int128_t is usable.
5922 if compile_prog
"" "" ; then
5926 #########################################
5927 # See if 128-bit atomic operations are supported.
5930 if test "$int128" = "yes"; then
5934 unsigned __int128 x = 0, y = 0;
5935 y = __atomic_load_16(&x, 0);
5936 __atomic_store_16(&x, y, 0);
5937 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5941 if compile_prog
"" "" ; then
5947 if test "$int128" = yes && test "$atomic128" = no
; then
5951 unsigned __int128 x = 0, y = 0;
5952 __sync_val_compare_and_swap_16(&x, y, x);
5956 if compile_prog
"" "" ; then
5961 #########################################
5962 # See if 64-bit atomic operations are supported.
5963 # Note that without __atomic builtins, we can only
5964 # assume atomic loads/stores max at pointer size.
5970 uint64_t x = 0, y = 0;
5971 #ifdef __ATOMIC_RELAXED
5972 y = __atomic_load_8(&x, 0);
5973 __atomic_store_8(&x, y, 0);
5974 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5975 __atomic_exchange_8(&x, y, 0);
5976 __atomic_fetch_add_8(&x, y, 0);
5978 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5979 __sync_lock_test_and_set(&x, y);
5980 __sync_val_compare_and_swap(&x, y, 0);
5981 __sync_fetch_and_add(&x, y);
5986 if compile_prog
"" "" ; then
5990 #########################################
5991 # See if --dynamic-list is supported by the linker
5992 ld_dynamic_list
="no"
5993 if test "$static" = "no" ; then
6016 if compile_prog
"" "-Wl,--dynamic-list=$TMPTXT" ; then
6017 ld_dynamic_list
="yes"
6021 #########################################
6022 # See if -exported_symbols_list is supported by the linker
6024 ld_exported_symbols_list
="no"
6025 if test "$static" = "no" ; then
6030 if compile_prog
"" "-Wl,-exported_symbols_list,$TMPTXT" ; then
6031 ld_exported_symbols_list
="yes"
6035 if test "$plugins" = "yes" &&
6036 test "$ld_dynamic_list" = "no" &&
6037 test "$ld_exported_symbols_list" = "no" ; then
6039 "Plugin support requires dynamic linking and specifying a set of symbols " \
6040 "that are exported to plugins. Unfortunately your linker doesn't " \
6041 "support the flag (--dynamic-list or -exported_symbols_list) used " \
6042 "for this purpose. You can't build with --static."
6045 ########################################
6046 # See if __attribute__((alias)) is supported.
6047 # This false for Xcode 9, but has been remedied for Xcode 10.
6048 # Unfortunately, travis uses Xcode 9 by default.
6053 extern const int y __attribute__((alias("x")));
6054 int main(void) { return 0; }
6056 if compile_prog
"" "" ; then
6060 ########################################
6061 # check if getauxval is available.
6065 #include <sys/auxv.h>
6067 return getauxval(AT_HWCAP) == 0;
6070 if compile_prog
"" "" ; then
6074 ########################################
6075 # check if ccache is interfering with
6076 # semantic analysis of macros
6081 static const int Z = 1;
6082 #define fn() ({ Z; })
6083 #define TAUT(X) ((X) == Z)
6084 #define PAREN(X, Y) (X == Y)
6086 int main(int argc, char *argv[])
6092 if (PAREN(x, y)) return 0;
6093 if (TAUT(Z)) return 0;
6098 if ! compile_object
"-Werror"; then
6102 #################################################
6103 # clang does not support glibc + FORTIFY_SOURCE.
6105 if test "$fortify_source" != "no"; then
6106 if echo |
$cc -dM -E - |
grep __clang__
> /dev
/null
2>&1 ; then
6107 fortify_source
="no";
6108 elif test -n "$cxx" && has
$cxx &&
6109 echo |
$cxx -dM -E - |
grep __clang__
>/dev
/null
2>&1 ; then
6110 fortify_source
="no";
6112 fortify_source
="yes"
6116 ###############################################
6117 # Check if copy_file_range is provided by glibc
6118 have_copy_file_range
=no
6122 copy_file_range(0, NULL, 0, NULL, 0, 0);
6126 if compile_prog
"" "" ; then
6127 have_copy_file_range
=yes
6130 ##########################################
6131 # check if struct fsxattr is available via linux/fs.h
6135 #include <linux/fs.h>
6141 if compile_prog
"" "" ; then
6145 ##########################################
6146 # check for usable membarrier system call
6147 if test "$membarrier" = "yes"; then
6149 if test "$mingw32" = "yes" ; then
6151 elif test "$linux" = "yes" ; then
6153 #include <linux/membarrier.h>
6154 #include <sys/syscall.h>
6158 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
6159 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
6163 if compile_prog
"" "" ; then
6167 if test "$have_membarrier" = "no"; then
6168 feature_not_found
"membarrier" "membarrier system call not available"
6171 # Do not enable it by default even for Mingw32, because it doesn't
6176 ##########################################
6177 # check if rtnetlink.h exists and is useful
6180 #include <linux/rtnetlink.h>
6182 return IFLA_PROTO_DOWN;
6185 if compile_prog
"" "" ; then
6189 ##########################################
6190 # check for usable AF_VSOCK environment
6194 #include <sys/types.h>
6195 #include <sys/socket.h>
6196 #if !defined(AF_VSOCK)
6197 # error missing AF_VSOCK flag
6199 #include <linux/vm_sockets.h>
6202 struct sockaddr_vm svm;
6203 socklen_t len = sizeof(svm);
6204 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
6205 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
6206 if ((ret == -1) && (errno == ENOTCONN)) {
6212 if compile_prog
"" "" ; then
6216 ##########################################
6217 # check for usable AF_ALG environment
6221 #include <sys/types.h>
6222 #include <sys/socket.h>
6223 #include <linux/if_alg.h>
6226 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
6230 if compile_prog
"" "" ; then
6233 if test "$crypto_afalg" = "yes"
6235 if test "$have_afalg" != "yes"
6237 error_exit
"AF_ALG requested but could not be detected"
6242 #################################################
6243 # Check to see if we have the Hypervisor framework
6244 if [ "$darwin" = "yes" ] ; then
6246 #include <Hypervisor/hv.h>
6247 int main() { return 0;}
6249 if ! compile_object
""; then
6253 QEMU_LDFLAGS
="-framework Hypervisor $QEMU_LDFLAGS"
6257 ##########################################
6258 # check for sysmacros.h
6262 #include <sys/sysmacros.h>
6264 return makedev(0, 0);
6267 if compile_prog
"" "" ; then
6271 ##########################################
6272 # check for _Static_assert()
6274 have_static_assert
=no
6276 _Static_assert(1, "success");
6281 if compile_prog
"" "" ; then
6282 have_static_assert
=yes
6285 ##########################################
6286 # check for utmpx.h, it is missing e.g. on OpenBSD
6291 struct utmpx user_info;
6296 if compile_prog
"" "" ; then
6300 ##########################################
6301 # check for getrandom()
6305 #include <sys/random.h>
6307 return getrandom(0, 0, GRND_NONBLOCK);
6310 if compile_prog
"" "" ; then
6314 ##########################################
6315 # checks for sanitizers
6319 have_asan_iface_h
=no
6320 have_asan_iface_fiber
=no
6322 if test "$sanitizers" = "yes" ; then
6324 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6328 # we could use a simple skeleton for flags checks, but this also
6329 # detect the static linking issue of ubsan, see also:
6330 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6334 void *tmp = malloc(10);
6336 return *(int *)(tmp + 2);
6341 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6345 if check_include
"sanitizer/asan_interface.h" ; then
6346 have_asan_iface_h
=yes
6350 #include <sanitizer/asan_interface.h>
6352 __sanitizer_start_switch_fiber(0, 0, 0);
6356 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6357 have_asan_iface_fiber
=yes
6361 ##########################################
6363 if test "$fuzzing" = "yes" ; then
6364 write_c_fuzzer_skeleton
6365 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
6368 error_exit
"Your compiler doesn't support -fsanitize=fuzzer"
6373 # Thread sanitizer is, for now, much noisier than the other sanitizers;
6374 # keep it separate until that is not the case.
6375 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
6376 error_exit
"TSAN is not supported with other sanitiziers."
6379 have_tsan_iface_fiber
=no
6380 if test "$tsan" = "yes" ; then
6382 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6386 #include <sanitizer/tsan_interface.h>
6388 __tsan_create_fiber(0);
6392 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6393 have_tsan_iface_fiber
=yes
6397 ##########################################
6400 if test "$libpmem" != "no"; then
6401 if $pkg_config --exists "libpmem"; then
6403 libpmem_libs
=$
($pkg_config --libs libpmem
)
6404 libpmem_cflags
=$
($pkg_config --cflags libpmem
)
6405 QEMU_CFLAGS
="$QEMU_CFLAGS $libpmem_cflags"
6407 if test "$libpmem" = "yes" ; then
6408 feature_not_found
"libpmem" "Install nvml or pmdk"
6414 ##########################################
6415 # check for libdaxctl
6417 if test "$libdaxctl" != "no"; then
6418 if $pkg_config --atleast-version=57 "libdaxctl"; then
6420 libdaxctl_libs
=$
($pkg_config --libs libdaxctl
)
6421 libdaxctl_cflags
=$
($pkg_config --cflags libdaxctl
)
6422 QEMU_CFLAGS
="$QEMU_CFLAGS $libdaxctl_cflags"
6424 if test "$libdaxctl" = "yes" ; then
6425 feature_not_found
"libdaxctl" "Install libdaxctl"
6431 ##########################################
6434 # slirp is only required when building softmmu targets
6435 if test -z "$slirp" -a "$softmmu" != "yes" ; then
6441 if $pkg_config slirp
; then
6443 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6445 elif test -e "${source_path}/slirp/Makefile" ; then
6447 elif test -z "$slirp" ; then
6450 feature_not_found
"slirp" "Install slirp devel or git submodule"
6455 if ! $pkg_config slirp
; then
6456 feature_not_found
"slirp" "Install slirp devel"
6463 if test "$slirp" = git
; then
6464 git_submodules
="${git_submodules} slirp"
6467 slirp_cflags
="-I${source_path}/slirp/src -I$PWD/slirp/src"
6468 slirp_libs
="-L$PWD/slirp -lslirp"
6469 if test "$mingw32" = "yes" ; then
6470 slirp_libs
="$slirp_libs -lws2_32 -liphlpapi"
6475 slirp_version
=$
($pkg_config --modversion slirp
2>/dev
/null
)
6476 slirp_cflags
=$
($pkg_config --cflags slirp
2>/dev
/null
)
6477 slirp_libs
=$
($pkg_config --libs slirp
2>/dev
/null
)
6483 error_exit
"Unknown state for slirp: $slirp"
6487 ##########################################
6488 # check for usable __NR_keyctl syscall
6490 if test "$linux" = "yes" ; then
6495 #include <asm/unistd.h>
6496 #include <linux/keyctl.h>
6499 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
6502 if compile_prog
"" "" ; then
6506 if test "$secret_keyring" != "no"
6508 if test "$have_keyring" = "yes"
6512 if test "$secret_keyring" = "yes"
6514 error_exit
"syscall __NR_keyctl requested, \
6515 but not implemented on your system"
6522 ##########################################
6523 # check for usable keyutils.h
6525 if test "$linux" = "yes" ; then
6530 #include <asm/unistd.h>
6532 #include <sys/types.h>
6533 #include <keyutils.h>
6535 return request_key("user", NULL, NULL, 0);
6538 if compile_prog
"" "-lkeyutils"; then
6544 ##########################################
6546 # After here, no more $cc or $ld runs
6550 if test "$gcov" = "yes" ; then
6552 elif test "$fortify_source" = "yes" ; then
6553 QEMU_CFLAGS
="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
6556 if test "$debug_info" = "yes"; then
6558 LDFLAGS
="-g $LDFLAGS"
6560 if test "$debug" = "no"; then
6561 CFLAGS
="-O2 $CFLAGS"
6566 # Ensure there's only a single GP
6567 QEMU_CFLAGS
="-msmall-data $QEMU_CFLAGS"
6571 if test "$gprof" = "yes" ; then
6572 QEMU_CFLAGS
="-p $QEMU_CFLAGS"
6573 QEMU_LDFLAGS
="-p $QEMU_LDFLAGS"
6576 if test "$have_asan" = "yes"; then
6577 QEMU_CFLAGS
="-fsanitize=address $QEMU_CFLAGS"
6578 QEMU_LDFLAGS
="-fsanitize=address $QEMU_LDFLAGS"
6579 if test "$have_asan_iface_h" = "no" ; then
6580 echo "ASAN build enabled, but ASAN header missing." \
6581 "Without code annotation, the report may be inferior."
6582 elif test "$have_asan_iface_fiber" = "no" ; then
6583 echo "ASAN build enabled, but ASAN header is too old." \
6584 "Without code annotation, the report may be inferior."
6587 if test "$have_tsan" = "yes" ; then
6588 if test "$have_tsan_iface_fiber" = "yes" ; then
6589 QEMU_CFLAGS
="-fsanitize=thread $QEMU_CFLAGS"
6590 QEMU_LDFLAGS
="-fsanitize=thread $QEMU_LDFLAGS"
6592 error_exit
"Cannot enable TSAN due to missing fiber annotation interface."
6594 elif test "$tsan" = "yes" ; then
6595 error_exit
"Cannot enable TSAN due to missing sanitize thread interface."
6597 if test "$have_ubsan" = "yes"; then
6598 QEMU_CFLAGS
="-fsanitize=undefined $QEMU_CFLAGS"
6599 QEMU_LDFLAGS
="-fsanitize=undefined $QEMU_LDFLAGS"
6602 ##########################################
6604 if test "$libnfs" != "no" ; then
6605 if $pkg_config --atleast-version=1.9.3 libnfs
; then
6607 libnfs_libs
=$
($pkg_config --libs libnfs
)
6609 if test "$libnfs" = "yes" ; then
6610 feature_not_found
"libnfs" "Install libnfs devel >= 1.9.3"
6616 ##########################################
6617 # Do we have libudev
6618 if test "$libudev" != "no" ; then
6619 if $pkg_config libudev
&& test "$static" != "yes"; then
6621 libudev_libs
=$
($pkg_config --libs libudev
)
6627 # Now we've finished running tests it's OK to add -Werror to the compiler flags
6628 if test "$werror" = "yes"; then
6629 QEMU_CFLAGS
="-Werror $QEMU_CFLAGS"
6632 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
6633 if test "$solaris" = "no" && test "$tsan" = "no"; then
6634 if $ld --version 2>/dev
/null |
grep "GNU ld" >/dev
/null
2>/dev
/null
; then
6635 QEMU_LDFLAGS
="-Wl,--warn-common $QEMU_LDFLAGS"
6639 # test if pod2man has --utf8 option
6640 if pod2man
--help |
grep -q utf8
; then
6641 POD2MAN
="pod2man --utf8"
6646 # Use ASLR, no-SEH and DEP if available
6647 if test "$mingw32" = "yes" ; then
6648 for flag
in --dynamicbase --no-seh --nxcompat; do
6649 if ld_has
$flag ; then
6650 QEMU_LDFLAGS
="-Wl,$flag $QEMU_LDFLAGS"
6655 # Disable OpenBSD W^X if available
6656 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6658 int main(void) { return 0; }
6660 wx_ldflags
="-Wl,-z,wxneeded"
6661 if compile_prog
"" "$wx_ldflags"; then
6662 QEMU_LDFLAGS
="$QEMU_LDFLAGS $wx_ldflags"
6666 qemu_confdir
=$sysconfdir$confsuffix
6667 qemu_moddir
=$libdir$confsuffix
6668 qemu_datadir
=$datadir$confsuffix
6669 qemu_localedir
="$datadir/locale"
6670 qemu_icondir
="$datadir/icons"
6671 qemu_desktopdir
="$datadir/applications"
6673 # We can only support ivshmem if we have eventfd
6674 if [ "$eventfd" = "yes" ]; then
6678 if test "$softmmu" = yes ; then
6679 if test "$linux" = yes; then
6680 if test "$virtfs" != no
&& test "$cap_ng" = yes && test "$attr" = yes ; then
6683 if test "$virtfs" = yes; then
6684 error_exit
"VirtFS requires libcap-ng devel and libattr devel"
6688 if test "$mpath" != no
&& test "$mpathpersist" = yes ; then
6691 if test "$mpath" = yes; then
6692 error_exit
"Multipath requires libmpathpersist devel"
6697 if test "$virtfs" = yes; then
6698 error_exit
"VirtFS is supported only on Linux"
6701 if test "$mpath" = yes; then
6702 error_exit
"Multipath is supported only on Linux"
6708 # Probe for guest agent support/options
6710 if [ "$guest_agent" != "no" ]; then
6711 if [ "$softmmu" = no
-a "$want_tools" = no
] ; then
6713 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6715 elif [ "$guest_agent" != yes ]; then
6718 error_exit
"Guest agent is not supported on this platform"
6722 # Guest agent Window MSI package
6724 if test "$guest_agent" != yes; then
6725 if test "$guest_agent_msi" = yes; then
6726 error_exit
"MSI guest agent package requires guest agent enabled"
6729 elif test "$mingw32" != "yes"; then
6730 if test "$guest_agent_msi" = "yes"; then
6731 error_exit
"MSI guest agent package is available only for MinGW Windows cross-compilation"
6734 elif ! has wixl
; then
6735 if test "$guest_agent_msi" = "yes"; then
6736 error_exit
"MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6740 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6741 # disabled explicitly
6742 if test "$guest_agent_msi" != "no"; then
6747 if test "$guest_agent_msi" = "yes"; then
6748 if test "$guest_agent_with_vss" = "yes"; then
6749 QEMU_GA_MSI_WITH_VSS
="-D InstallVss"
6752 if test "$QEMU_GA_MANUFACTURER" = ""; then
6753 QEMU_GA_MANUFACTURER
=QEMU
6756 if test "$QEMU_GA_DISTRO" = ""; then
6757 QEMU_GA_DISTRO
=Linux
6760 if test "$QEMU_GA_VERSION" = ""; then
6761 QEMU_GA_VERSION
=$
(cat $source_path/VERSION
)
6764 QEMU_GA_MSI_MINGW_DLL_PATH
="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6768 QEMU_GA_MSI_ARCH
="-a x64 -D Arch=64"
6771 QEMU_GA_MSI_ARCH
="-D Arch=32"
6774 error_exit
"CPU $cpu not supported for building installation package"
6779 # Mac OS X ships with a broken assembler
6781 if { test "$cpu" = "i386" ||
test "$cpu" = "x86_64"; } && \
6782 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6783 test "$softmmu" = yes ; then
6784 # Different host OS linkers have different ideas about the name of the ELF
6785 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6786 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6787 for emu
in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe
; do
6788 if "$ld" -verbose 2>&1 |
grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6789 ld_i386_emulation
="$emu"
6796 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6797 if test "$cpu" = "s390x" ; then
6799 if compile_prog
"-march=z900" ""; then
6800 roms
="$roms s390-ccw"
6801 # SLOF is required for building the s390-ccw firmware on s390x,
6802 # since it is using the libnet code from SLOF for network booting.
6803 if test -e "${source_path}/.git" ; then
6804 git_submodules
="${git_submodules} roms/SLOF"
6809 # Check that the C++ compiler exists and works with the C compiler.
6810 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6813 int c_function(void);
6814 int main(void) { return c_function(); }
6821 int c_function(void);
6823 int c_function(void) { return 42; }
6828 if do_cxx
$CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
6829 # C++ compiler $cxx works ok with C compiler $cc
6832 echo "C++ compiler $cxx does not work with C compiler $cc"
6833 echo "Disabling C++ specific optional code"
6837 echo "No C++ compiler available; disabling C++ specific optional code"
6842 if test "$1" = "yes" ; then
6847 # prepend pixman and ftd flags after all config tests are done
6848 QEMU_CFLAGS
="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6849 QEMU_LDFLAGS
="$fdt_ldflags $QEMU_LDFLAGS"
6851 config_host_mak
="config-host.mak"
6853 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6855 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6856 echo >> $config_host_mak
6858 echo all
: >> $config_host_mak
6859 echo "prefix=$prefix" >> $config_host_mak
6860 echo "bindir=$bindir" >> $config_host_mak
6861 echo "libdir=$libdir" >> $config_host_mak
6862 echo "libexecdir=$libexecdir" >> $config_host_mak
6863 echo "includedir=$includedir" >> $config_host_mak
6864 echo "mandir=$mandir" >> $config_host_mak
6865 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6866 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6867 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6868 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6869 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6870 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6871 if test "$mingw32" = "no" ; then
6872 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6874 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6875 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6876 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6877 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6878 echo "GIT=$git" >> $config_host_mak
6879 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6880 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6882 echo "ARCH=$ARCH" >> $config_host_mak
6884 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6885 echo "GLIB_LDFLAGS=$glib_ldflags" >> $config_host_mak
6887 if test "$default_devices" = "yes" ; then
6888 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6890 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6892 if test "$debug_tcg" = "yes" ; then
6893 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6895 if test "$strip_opt" = "yes" ; then
6896 echo "STRIP=${strip}" >> $config_host_mak
6898 if test "$bigendian" = "yes" ; then
6899 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6901 if test "$mingw32" = "yes" ; then
6902 echo "CONFIG_WIN32=y" >> $config_host_mak
6903 rc_version
=$
(cat $source_path/VERSION
)
6904 version_major
=${rc_version%%.*}
6905 rc_version
=${rc_version#*.}
6906 version_minor
=${rc_version%%.*}
6907 rc_version
=${rc_version#*.}
6908 version_subminor
=${rc_version%%.*}
6910 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6911 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6912 if test "$guest_agent_with_vss" = "yes" ; then
6913 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6914 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6915 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6917 if test "$guest_agent_ntddscsi" = "yes" ; then
6918 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6920 if test "$guest_agent_msi" = "yes"; then
6921 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6922 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6923 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6924 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6925 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6926 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6927 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6930 echo "CONFIG_POSIX=y" >> $config_host_mak
6933 if test "$linux" = "yes" ; then
6934 echo "CONFIG_LINUX=y" >> $config_host_mak
6937 if test "$darwin" = "yes" ; then
6938 echo "CONFIG_DARWIN=y" >> $config_host_mak
6941 if test "$solaris" = "yes" ; then
6942 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6944 if test "$haiku" = "yes" ; then
6945 echo "CONFIG_HAIKU=y" >> $config_host_mak
6947 if test "$static" = "yes" ; then
6948 echo "CONFIG_STATIC=y" >> $config_host_mak
6950 if test "$profiler" = "yes" ; then
6951 echo "CONFIG_PROFILER=y" >> $config_host_mak
6953 if test "$want_tools" = "yes" ; then
6954 echo "CONFIG_TOOLS=y" >> $config_host_mak
6956 if test "$guest_agent" = "yes" ; then
6957 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
6959 if test "$slirp" != "no"; then
6960 echo "CONFIG_SLIRP=y" >> $config_host_mak
6961 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6962 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6963 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6965 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6966 echo "config-host.h: slirp/all" >> $config_host_mak
6968 if test "$vde" = "yes" ; then
6969 echo "CONFIG_VDE=y" >> $config_host_mak
6970 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6972 if test "$netmap" = "yes" ; then
6973 echo "CONFIG_NETMAP=y" >> $config_host_mak
6975 if test "$l2tpv3" = "yes" ; then
6976 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6978 if test "$gprof" = "yes" ; then
6979 echo "CONFIG_GPROF=y" >> $config_host_mak
6981 if test "$cap_ng" = "yes" ; then
6982 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
6983 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
6985 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6986 for drv
in $audio_drv_list; do
6987 def
=CONFIG_AUDIO_$
(echo $drv | LC_ALL
=C
tr '[a-z]' '[A-Z]')
6988 echo "$def=y" >> $config_host_mak
6990 if test "$alsa" = "yes" ; then
6991 echo "CONFIG_ALSA=y" >> $config_host_mak
6993 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6994 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
6995 if test "$libpulse" = "yes" ; then
6996 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
6998 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6999 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
7000 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
7001 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
7002 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
7003 if test "$libjack" = "yes" ; then
7004 echo "CONFIG_LIBJACK=y" >> $config_host_mak
7006 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
7007 if test "$audio_win_int" = "yes" ; then
7008 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
7010 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
7011 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
7012 if test "$vnc" = "yes" ; then
7013 echo "CONFIG_VNC=y" >> $config_host_mak
7015 if test "$vnc_sasl" = "yes" ; then
7016 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
7018 echo "SASL_CFLAGS=$vnc_sasl_cflags" >> $config_host_mak
7019 echo "SASL_LIBS=$vnc_sasl_libs" >> $config_host_mak
7020 if test "$vnc_jpeg" = "yes" ; then
7021 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
7023 echo "JPEG_CFLAGS=$vnc_jpeg_cflags" >> $config_host_mak
7024 echo "JPEG_LIBS=$vnc_jpeg_libs" >> $config_host_mak
7025 if test "$vnc_png" = "yes" ; then
7026 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
7028 echo "PNG_CFLAGS=$vnc_png_cflags" >> $config_host_mak
7029 echo "PNG_LIBS=$vnc_png_libs" >> $config_host_mak
7030 if test "$xkbcommon" = "yes" ; then
7031 echo "CONFIG_XKBCOMMON=y" >> $config_host_mak
7032 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
7033 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
7035 if test "$xfs" = "yes" ; then
7036 echo "CONFIG_XFS=y" >> $config_host_mak
7038 qemu_version
=$
(head $source_path/VERSION
)
7039 echo "VERSION=$qemu_version" >>$config_host_mak
7040 echo "PKGVERSION=$pkgversion" >>$config_host_mak
7041 echo "SRC_PATH=$source_path" >> $config_host_mak
7042 echo "TARGET_DIRS=$target_list" >> $config_host_mak
7043 if [ "$docs" = "yes" ] ; then
7044 echo "BUILD_DOCS=yes" >> $config_host_mak
7046 if test "$modules" = "yes"; then
7047 # $shacmd can generate a hash started with digit, which the compiler doesn't
7048 # like as an symbol. So prefix it with an underscore
7049 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
7050 echo "CONFIG_MODULES=y" >> $config_host_mak
7052 if test "$module_upgrades" = "yes"; then
7053 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
7055 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
7056 echo "CONFIG_X11=y" >> $config_host_mak
7057 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
7058 echo "X11_LIBS=$x11_libs" >> $config_host_mak
7060 if test "$sdl" = "yes" ; then
7061 echo "CONFIG_SDL=m" >> $config_host_mak
7062 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
7063 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
7064 if test "$sdl_image" = "yes" ; then
7065 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
7068 if test "$cocoa" = "yes" ; then
7069 echo "CONFIG_COCOA=y" >> $config_host_mak
7071 if test "$iconv" = "yes" ; then
7072 echo "CONFIG_ICONV=y" >> $config_host_mak
7073 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7074 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7076 if test "$curses" = "yes" ; then
7077 echo "CONFIG_CURSES=y" >> $config_host_mak
7078 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
7079 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
7081 if test "$pipe2" = "yes" ; then
7082 echo "CONFIG_PIPE2=y" >> $config_host_mak
7084 if test "$accept4" = "yes" ; then
7085 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7087 if test "$splice" = "yes" ; then
7088 echo "CONFIG_SPLICE=y" >> $config_host_mak
7090 if test "$eventfd" = "yes" ; then
7091 echo "CONFIG_EVENTFD=y" >> $config_host_mak
7093 if test "$memfd" = "yes" ; then
7094 echo "CONFIG_MEMFD=y" >> $config_host_mak
7096 if test "$have_usbfs" = "yes" ; then
7097 echo "CONFIG_USBFS=y" >> $config_host_mak
7099 if test "$fallocate" = "yes" ; then
7100 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7102 if test "$fallocate_punch_hole" = "yes" ; then
7103 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7105 if test "$fallocate_zero_range" = "yes" ; then
7106 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7108 if test "$posix_fallocate" = "yes" ; then
7109 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7111 if test "$sync_file_range" = "yes" ; then
7112 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7114 if test "$fiemap" = "yes" ; then
7115 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7117 if test "$dup3" = "yes" ; then
7118 echo "CONFIG_DUP3=y" >> $config_host_mak
7120 if test "$ppoll" = "yes" ; then
7121 echo "CONFIG_PPOLL=y" >> $config_host_mak
7123 if test "$prctl_pr_set_timerslack" = "yes" ; then
7124 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7126 if test "$epoll" = "yes" ; then
7127 echo "CONFIG_EPOLL=y" >> $config_host_mak
7129 if test "$epoll_create1" = "yes" ; then
7130 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7132 if test "$sendfile" = "yes" ; then
7133 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7135 if test "$timerfd" = "yes" ; then
7136 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7138 if test "$setns" = "yes" ; then
7139 echo "CONFIG_SETNS=y" >> $config_host_mak
7141 if test "$clock_adjtime" = "yes" ; then
7142 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7144 if test "$syncfs" = "yes" ; then
7145 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7147 if test "$kcov" = "yes" ; then
7148 echo "CONFIG_KCOV=y" >> $config_host_mak
7150 if test "$inotify" = "yes" ; then
7151 echo "CONFIG_INOTIFY=y" >> $config_host_mak
7153 if test "$inotify1" = "yes" ; then
7154 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7156 if test "$sem_timedwait" = "yes" ; then
7157 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7159 if test "$strchrnul" = "yes" ; then
7160 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7162 if test "$st_atim" = "yes" ; then
7163 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7165 if test "$byteswap_h" = "yes" ; then
7166 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7168 if test "$bswap_h" = "yes" ; then
7169 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7171 if test "$curl" = "yes" ; then
7172 echo "CONFIG_CURL=y" >> $config_host_mak
7173 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
7174 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
7176 if test "$brlapi" = "yes" ; then
7177 echo "CONFIG_BRLAPI=y" >> $config_host_mak
7178 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
7180 if test "$gtk" = "yes" ; then
7181 echo "CONFIG_GTK=y" >> $config_host_mak
7182 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
7183 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
7184 if test "$gtk_gl" = "yes" ; then
7185 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7188 if test "$gio" = "yes" ; then
7189 echo "CONFIG_GIO=y" >> $config_host_mak
7190 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7191 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
7192 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
7194 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
7195 if test "$gnutls" = "yes" ; then
7196 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7197 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
7198 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
7200 if test "$gcrypt" = "yes" ; then
7201 echo "CONFIG_GCRYPT=y" >> $config_host_mak
7202 if test "$gcrypt_hmac" = "yes" ; then
7203 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7206 if test "$nettle" = "yes" ; then
7207 echo "CONFIG_NETTLE=y" >> $config_host_mak
7208 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
7209 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
7210 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
7212 if test "$qemu_private_xts" = "yes" ; then
7213 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7215 if test "$tasn1" = "yes" ; then
7216 echo "CONFIG_TASN1=y" >> $config_host_mak
7218 if test "$auth_pam" = "yes" ; then
7219 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7221 if test "$have_ifaddrs_h" = "yes" ; then
7222 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7224 if test "$have_drm_h" = "yes" ; then
7225 echo "HAVE_DRM_H=y" >> $config_host_mak
7227 if test "$have_broken_size_max" = "yes" ; then
7228 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7230 if test "$have_openpty" = "yes" ; then
7231 echo "HAVE_OPENPTY=y" >> $config_host_mak
7233 if test "$have_sys_signal_h" = "yes" ; then
7234 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
7237 # Work around a system header bug with some kernel/XFS header
7238 # versions where they both try to define 'struct fsxattr':
7239 # xfs headers will not try to redefine structs from linux headers
7240 # if this macro is set.
7241 if test "$have_fsxattr" = "yes" ; then
7242 echo "HAVE_FSXATTR=y" >> $config_host_mak
7244 if test "$have_copy_file_range" = "yes" ; then
7245 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7247 if test "$vte" = "yes" ; then
7248 echo "CONFIG_VTE=y" >> $config_host_mak
7249 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
7250 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
7252 if test "$virglrenderer" = "yes" ; then
7253 echo "CONFIG_VIRGL=y" >> $config_host_mak
7254 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7255 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7257 if test "$xen" = "yes" ; then
7258 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
7259 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
7260 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
7261 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
7263 if test "$linux_aio" = "yes" ; then
7264 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7266 if test "$linux_io_uring" = "yes" ; then
7267 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7268 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7269 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7271 if test "$attr" = "yes" ; then
7272 echo "CONFIG_ATTR=y" >> $config_host_mak
7273 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
7275 if test "$libattr" = "yes" ; then
7276 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7278 if test "$virtfs" = "yes" ; then
7279 echo "CONFIG_VIRTFS=y" >> $config_host_mak
7281 if test "$mpath" = "yes" ; then
7282 echo "CONFIG_MPATH=y" >> $config_host_mak
7283 if test "$mpathpersist_new_api" = "yes"; then
7284 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7287 if test "$vhost_scsi" = "yes" ; then
7288 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7290 if test "$vhost_net" = "yes" ; then
7291 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7293 if test "$vhost_net_user" = "yes" ; then
7294 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
7296 if test "$vhost_net_vdpa" = "yes" ; then
7297 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
7299 if test "$vhost_crypto" = "yes" ; then
7300 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7302 if test "$vhost_vsock" = "yes" ; then
7303 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7304 if test "$vhost_user" = "yes" ; then
7305 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
7308 if test "$vhost_kernel" = "yes" ; then
7309 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7311 if test "$vhost_user" = "yes" ; then
7312 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7314 if test "$vhost_vdpa" = "yes" ; then
7315 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
7317 if test "$vhost_user_fs" = "yes" ; then
7318 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7320 if test "$blobs" = "yes" ; then
7321 echo "INSTALL_BLOBS=yes" >> $config_host_mak
7323 if test "$iovec" = "yes" ; then
7324 echo "CONFIG_IOVEC=y" >> $config_host_mak
7326 if test "$preadv" = "yes" ; then
7327 echo "CONFIG_PREADV=y" >> $config_host_mak
7329 if test "$fdt" != "no" ; then
7330 echo "CONFIG_FDT=y" >> $config_host_mak
7331 echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak
7332 echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak
7334 if test "$membarrier" = "yes" ; then
7335 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7337 if test "$signalfd" = "yes" ; then
7338 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7340 if test "$optreset" = "yes" ; then
7341 echo "HAVE_OPTRESET=y" >> $config_host_mak
7343 if test "$tcg" = "yes"; then
7344 echo "CONFIG_TCG=y" >> $config_host_mak
7345 if test "$tcg_interpreter" = "yes" ; then
7346 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7349 if test "$fdatasync" = "yes" ; then
7350 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7352 if test "$madvise" = "yes" ; then
7353 echo "CONFIG_MADVISE=y" >> $config_host_mak
7355 if test "$posix_madvise" = "yes" ; then
7356 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7358 if test "$posix_memalign" = "yes" ; then
7359 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7361 if test "$zlib" != "no" ; then
7362 echo "CONFIG_ZLIB=y" >> $config_host_mak
7363 echo "ZLIB_CFLAGS=$zlib_cflags" >> $config_host_mak
7364 echo "ZLIB_LIBS=$zlib_libs" >> $config_host_mak
7366 if test "$spice" = "yes" ; then
7367 echo "CONFIG_SPICE=y" >> $config_host_mak
7368 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
7369 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
7372 if test "$smartcard" = "yes" ; then
7373 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7374 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7375 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
7378 if test "$libusb" = "yes" ; then
7379 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7380 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7381 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
7384 if test "$usb_redir" = "yes" ; then
7385 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7386 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7387 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
7390 if test "$opengl" = "yes" ; then
7391 echo "CONFIG_OPENGL=y" >> $config_host_mak
7392 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7393 if test "$opengl_dmabuf" = "yes" ; then
7394 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7398 if test "$gbm" = "yes" ; then
7399 echo "CONFIG_GBM=y" >> $config_host_mak
7400 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7401 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7405 if test "$malloc_trim" = "yes" ; then
7406 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7409 if test "$avx2_opt" = "yes" ; then
7410 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7413 if test "$avx512f_opt" = "yes" ; then
7414 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7417 if test "$lzo" = "yes" ; then
7418 echo "CONFIG_LZO=y" >> $config_host_mak
7419 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
7422 if test "$snappy" = "yes" ; then
7423 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7424 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
7427 if test "$bzip2" = "yes" ; then
7428 echo "CONFIG_BZIP2=y" >> $config_host_mak
7429 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7432 if test "$lzfse" = "yes" ; then
7433 echo "CONFIG_LZFSE=y" >> $config_host_mak
7434 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7437 if test "$zstd" = "yes" ; then
7438 echo "CONFIG_ZSTD=y" >> $config_host_mak
7439 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
7440 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
7443 if test "$libiscsi" = "yes" ; then
7444 echo "CONFIG_LIBISCSI=y" >> $config_host_mak
7445 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7446 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7449 if test "$libnfs" = "yes" ; then
7450 echo "CONFIG_LIBNFS=y" >> $config_host_mak
7451 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7454 if test "$seccomp" = "yes"; then
7455 echo "CONFIG_SECCOMP=y" >> $config_host_mak
7456 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7457 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7460 # XXX: suppress that
7461 if [ "$bsd" = "yes" ] ; then
7462 echo "CONFIG_BSD=y" >> $config_host_mak
7465 if test "$localtime_r" = "yes" ; then
7466 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7468 if test "$qom_cast_debug" = "yes" ; then
7469 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7471 if test "$rbd" = "yes" ; then
7472 echo "CONFIG_RBD=y" >> $config_host_mak
7473 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7476 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7477 if test "$coroutine_pool" = "yes" ; then
7478 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7480 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7483 if test "$debug_stack_usage" = "yes" ; then
7484 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7487 if test "$crypto_afalg" = "yes" ; then
7488 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7491 if test "$open_by_handle_at" = "yes" ; then
7492 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7495 if test "$linux_magic_h" = "yes" ; then
7496 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7499 if test "$valgrind_h" = "yes" ; then
7500 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7503 if test "$have_asan_iface_fiber" = "yes" ; then
7504 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7507 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
7508 echo "CONFIG_TSAN=y" >> $config_host_mak
7511 if test "$has_environ" = "yes" ; then
7512 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7515 if test "$cpuid_h" = "yes" ; then
7516 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7519 if test "$int128" = "yes" ; then
7520 echo "CONFIG_INT128=y" >> $config_host_mak
7523 if test "$atomic128" = "yes" ; then
7524 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7527 if test "$cmpxchg128" = "yes" ; then
7528 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7531 if test "$atomic64" = "yes" ; then
7532 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7535 if test "$attralias" = "yes" ; then
7536 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7539 if test "$getauxval" = "yes" ; then
7540 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7543 if test "$glusterfs" = "yes" ; then
7544 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
7545 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7546 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7549 if test "$glusterfs_xlator_opt" = "yes" ; then
7550 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7553 if test "$glusterfs_discard" = "yes" ; then
7554 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7557 if test "$glusterfs_fallocate" = "yes" ; then
7558 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7561 if test "$glusterfs_zerofill" = "yes" ; then
7562 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7565 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7566 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7569 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7570 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7573 if test "$libssh" = "yes" ; then
7574 echo "CONFIG_LIBSSH=y" >> $config_host_mak
7575 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7576 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7579 if test "$live_block_migration" = "yes" ; then
7580 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7583 if test "$tpm" = "yes"; then
7584 echo 'CONFIG_TPM=y' >> $config_host_mak
7587 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7588 if have_backend
"nop"; then
7589 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7591 if have_backend
"simple"; then
7592 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7593 # Set the appropriate trace file.
7594 trace_file
="\"$trace_file-\" FMT_pid"
7596 if have_backend
"log"; then
7597 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7599 if have_backend
"ust"; then
7600 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7601 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
7602 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
7604 if have_backend
"dtrace"; then
7605 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7606 if test "$trace_backend_stap" = "yes" ; then
7607 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7610 if have_backend
"ftrace"; then
7611 if test "$linux" = "yes" ; then
7612 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7614 feature_not_found
"ftrace(trace backend)" "ftrace requires Linux"
7617 if have_backend
"syslog"; then
7618 if test "$posix_syslog" = "yes" ; then
7619 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7621 feature_not_found
"syslog(trace backend)" "syslog not available"
7624 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7626 if test "$rdma" = "yes" ; then
7627 echo "CONFIG_RDMA=y" >> $config_host_mak
7628 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7631 if test "$pvrdma" = "yes" ; then
7632 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7635 if test "$have_rtnetlink" = "yes" ; then
7636 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7639 if test "$libxml2" = "yes" ; then
7640 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7641 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7642 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7645 if test "$replication" = "yes" ; then
7646 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7649 if test "$have_af_vsock" = "yes" ; then
7650 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7653 if test "$have_sysmacros" = "yes" ; then
7654 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7657 if test "$have_static_assert" = "yes" ; then
7658 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7661 if test "$have_utmpx" = "yes" ; then
7662 echo "HAVE_UTMPX=y" >> $config_host_mak
7664 if test "$have_getrandom" = "yes" ; then
7665 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7667 if test "$ivshmem" = "yes" ; then
7668 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7670 if test "$capstone" != "no" ; then
7671 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7672 echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak
7673 echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak
7675 if test "$debug_mutex" = "yes" ; then
7676 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7679 # Hold two types of flag:
7680 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7681 # a thread we have a handle to
7682 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7684 if test "$pthread_setname_np_w_tid" = "yes" ; then
7685 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7686 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7687 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7688 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7689 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7692 if test "$libpmem" = "yes" ; then
7693 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7694 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
7695 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
7698 if test "$libdaxctl" = "yes" ; then
7699 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
7702 if test "$bochs" = "yes" ; then
7703 echo "CONFIG_BOCHS=y" >> $config_host_mak
7705 if test "$cloop" = "yes" ; then
7706 echo "CONFIG_CLOOP=y" >> $config_host_mak
7708 if test "$dmg" = "yes" ; then
7709 echo "CONFIG_DMG=y" >> $config_host_mak
7711 if test "$qcow1" = "yes" ; then
7712 echo "CONFIG_QCOW1=y" >> $config_host_mak
7714 if test "$vdi" = "yes" ; then
7715 echo "CONFIG_VDI=y" >> $config_host_mak
7717 if test "$vvfat" = "yes" ; then
7718 echo "CONFIG_VVFAT=y" >> $config_host_mak
7720 if test "$qed" = "yes" ; then
7721 echo "CONFIG_QED=y" >> $config_host_mak
7723 if test "$parallels" = "yes" ; then
7724 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7726 if test "$sheepdog" = "yes" ; then
7727 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7729 if test "$pty_h" = "yes" ; then
7730 echo "HAVE_PTY_H=y" >> $config_host_mak
7732 if test "$have_mlockall" = "yes" ; then
7733 echo "HAVE_MLOCKALL=y" >> $config_host_mak
7735 if test "$fuzzing" = "yes" ; then
7736 QEMU_CFLAGS
="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
7739 if test "$plugins" = "yes" ; then
7740 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7742 # Copy the export object list to the build dir
7743 if test "$ld_dynamic_list" = "yes" ; then
7744 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7745 ld_symbols
=qemu-plugins-ld.symbols
7746 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7747 elif test "$ld_exported_symbols_list" = "yes" ; then
7748 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7749 ld64_symbols
=qemu-plugins-ld64.symbols
7750 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7751 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" |
sed 's/;//g' | \
7752 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7755 "If \$plugins=yes, either \$ld_dynamic_list or " \
7756 "\$ld_exported_symbols_list should have been set to 'yes'."
7760 if test -n "$gdb_bin" ; then
7761 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7764 if test "$secret_keyring" = "yes" ; then
7765 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
7766 if test "$have_keyutils" = "yes" ; then
7767 echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak
7771 if test "$tcg_interpreter" = "yes"; then
7772 QEMU_INCLUDES
="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES"
7773 elif test "$ARCH" = "sparc64" ; then
7774 QEMU_INCLUDES
="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES"
7775 elif test "$ARCH" = "s390x" ; then
7776 QEMU_INCLUDES
="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES"
7777 elif test "$ARCH" = "x86_64" ||
test "$ARCH" = "x32" ; then
7778 QEMU_INCLUDES
="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES"
7779 elif test "$ARCH" = "ppc64" ; then
7780 QEMU_INCLUDES
="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES"
7781 elif test "$ARCH" = "riscv32" ||
test "$ARCH" = "riscv64" ; then
7782 QEMU_INCLUDES
="-I${source_path}/tcg/riscv $QEMU_INCLUDES"
7784 QEMU_INCLUDES
="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES"
7787 echo "ROMS=$roms" >> $config_host_mak
7788 echo "MAKE=$make" >> $config_host_mak
7789 echo "INSTALL=$install" >> $config_host_mak
7790 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7791 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7792 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7793 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7794 echo "PYTHON=$python" >> $config_host_mak
7795 echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
7796 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
7797 echo "MESON=$meson" >> $config_host_mak
7798 echo "CC=$cc" >> $config_host_mak
7799 if $iasl -h > /dev
/null
2>&1; then
7800 echo "IASL=$iasl" >> $config_host_mak
7802 echo "CXX=$cxx" >> $config_host_mak
7803 echo "OBJCC=$objcc" >> $config_host_mak
7804 echo "AR=$ar" >> $config_host_mak
7805 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7806 echo "AS=$as" >> $config_host_mak
7807 echo "CCAS=$ccas" >> $config_host_mak
7808 echo "CPP=$cpp" >> $config_host_mak
7809 echo "OBJCOPY=$objcopy" >> $config_host_mak
7810 echo "LD=$ld" >> $config_host_mak
7811 echo "RANLIB=$ranlib" >> $config_host_mak
7812 echo "NM=$nm" >> $config_host_mak
7813 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7814 echo "WINDRES=$windres" >> $config_host_mak
7815 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7816 echo "CXXFLAGS=$CXXFLAGS" >> $config_host_mak
7817 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7818 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7819 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7820 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7821 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
7822 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
7823 if test "$sparse" = "yes" ; then
7824 echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7826 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7827 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7828 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7829 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7830 echo "LIBS+=$LIBS" >> $config_host_mak
7831 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7832 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7833 echo "EXESUF=$EXESUF" >> $config_host_mak
7834 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
7835 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7836 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
7837 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7838 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7839 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7840 if test "$gcov" = "yes" ; then
7841 echo "CONFIG_GCOV=y" >> $config_host_mak
7844 if test "$libudev" != "no"; then
7845 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7846 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7848 if test "$fuzzing" != "no"; then
7849 echo "CONFIG_FUZZ=y" >> $config_host_mak
7852 if test "$edk2_blobs" = "yes" ; then
7853 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7856 if test "$rng_none" = "yes"; then
7857 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
7860 # use included Linux headers
7861 if test "$linux" = "yes" ; then
7862 mkdir
-p linux-headers
7880 # For most CPUs the kernel architecture name and QEMU CPU name match.
7884 # For non-KVM architectures we will not have asm headers
7885 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7886 symlink
"$source_path/linux-headers/asm-$linux_arch" linux-headers
/asm
7890 for target
in $target_list; do
7891 target_dir
="$target"
7892 config_target_mak
=$target_dir/config-target.mak
7893 target_name
=$
(echo $target | cut
-d '-' -f 1)
7894 target_aligned_only
="no"
7895 case "$target_name" in
7896 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb
)
7897 target_aligned_only
="yes"
7900 target_bigendian
="no"
7901 case "$target_name" in
7902 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb
)
7903 target_bigendian
="yes"
7907 target_user_only
="no"
7908 target_linux_user
="no"
7909 target_bsd_user
="no"
7911 ${target_name}-softmmu)
7912 target_softmmu
="yes"
7914 ${target_name}-linux-user)
7915 target_user_only
="yes"
7916 target_linux_user
="yes"
7918 ${target_name}-bsd-user)
7919 target_user_only
="yes"
7920 target_bsd_user
="yes"
7923 error_exit
"Target '$target' not recognised"
7928 mkdir
-p $target_dir
7929 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7933 interp_prefix1
=$
(echo "$interp_prefix" |
sed "s/%M/$target_name/g")
7936 TARGET_ARCH
="$target_name"
7939 TARGET_SYSTBL_ABI
=""
7942 case "$target_name" in
7945 gdb_xml_files
="i386-32bit.xml"
7946 TARGET_SYSTBL_ABI
=i386
7947 TARGET_SYSTBL
=syscall_32.tbl
7950 TARGET_BASE_ARCH
=i386
7951 TARGET_SYSTBL_ABI
=common
,64
7952 TARGET_SYSTBL
=syscall_64.tbl
7954 gdb_xml_files
="i386-64bit.xml"
7958 TARGET_SYSTBL_ABI
=common
7962 TARGET_SYSTBL_ABI
=common
,oabi
7965 gdb_xml_files
="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
7969 TARGET_BASE_ARCH
=arm
7972 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"
7975 gdb_xml_files
="avr-cpu.xml"
7976 target_compiler
=$cross_cc_avr
7982 TARGET_SYSTBL_ABI
=common
,32
7988 gdb_xml_files
="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
7989 TARGET_SYSTBL_ABI
=common
7991 microblaze|microblazeel
)
7992 TARGET_ARCH
=microblaze
7993 TARGET_SYSTBL_ABI
=common
7995 echo "TARGET_ABI32=y" >> $config_target_mak
8000 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
8001 TARGET_SYSTBL_ABI
=o32
8002 TARGET_SYSTBL
=syscall_o32.tbl
8007 TARGET_BASE_ARCH
=mips
8008 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
8009 echo "TARGET_ABI32=y" >> $config_target_mak
8010 TARGET_SYSTBL_ABI
=n32
8011 TARGET_SYSTBL
=syscall_n32.tbl
8016 TARGET_BASE_ARCH
=mips
8017 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
8018 TARGET_SYSTBL_ABI
=n64
8019 TARGET_SYSTBL
=syscall_n64.tbl
8026 TARGET_ARCH
=openrisc
8027 TARGET_BASE_ARCH
=openrisc
8030 gdb_xml_files
="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
8031 TARGET_SYSTBL_ABI
=common
,nospu
,32
8034 TARGET_BASE_ARCH
=ppc
8036 TARGET_SYSTBL_ABI
=common
,nospu
,64
8038 gdb_xml_files
="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8042 TARGET_BASE_ARCH
=ppc
8044 TARGET_SYSTBL_ABI
=common
,nospu
,64
8046 gdb_xml_files
="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8050 TARGET_BASE_ARCH
=ppc
8052 TARGET_SYSTBL_ABI
=common
,nospu
,32
8053 echo "TARGET_ABI32=y" >> $config_target_mak
8054 gdb_xml_files
="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8057 TARGET_BASE_ARCH
=riscv
8058 TARGET_ABI_DIR
=riscv
8060 gdb_xml_files
="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
8063 TARGET_BASE_ARCH
=riscv
8064 TARGET_ABI_DIR
=riscv
8066 gdb_xml_files
="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
8071 target_compiler
=$cross_cc_rx
8072 gdb_xml_files
="rx-core.xml"
8076 TARGET_SYSTBL_ABI
=common
8080 TARGET_SYSTBL_ABI
=common
,32
8083 TARGET_BASE_ARCH
=sparc
8084 TARGET_SYSTBL_ABI
=common
,64
8088 TARGET_BASE_ARCH
=sparc
8089 TARGET_ABI_DIR
=sparc
8090 TARGET_SYSTBL_ABI
=common
,32
8091 echo "TARGET_ABI32=y" >> $config_target_mak
8094 TARGET_SYSTBL_ABI
=common
,64
8096 gdb_xml_files
="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
8106 TARGET_SYSTBL_ABI
=common
8111 error_exit
"Unsupported target CPU"
8114 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
8115 if [ "$TARGET_BASE_ARCH" = "" ]; then
8116 TARGET_BASE_ARCH
=$TARGET_ARCH
8118 if [ "$TARGET_SYSTBL_ABI" != "" ] && [ "$TARGET_SYSTBL" = "" ]; then
8119 TARGET_SYSTBL
=syscall.tbl
8123 echo "$@"| LC_ALL
=C
tr '[a-z]' '[A-Z]'
8126 target_arch_name
="$(upper $TARGET_ARCH)"
8127 echo "TARGET_$target_arch_name=y" >> $config_target_mak
8128 echo "TARGET_NAME=$target_name" >> $config_target_mak
8129 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
8130 if [ "$TARGET_ABI_DIR" = "" ]; then
8131 TARGET_ABI_DIR
=$TARGET_ARCH
8133 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
8134 if [ "$HOST_VARIANT_DIR" != "" ]; then
8135 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
8137 if [ "$TARGET_SYSTBL_ABI" != "" ]; then
8138 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
8139 echo "TARGET_SYSTBL=$TARGET_SYSTBL" >> $config_target_mak
8142 if supported_xen_target
$target; then
8143 echo "CONFIG_XEN=y" >> $config_target_mak
8144 if test "$xen_pci_passthrough" = yes; then
8145 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
8148 if supported_kvm_target
$target; then
8149 echo "CONFIG_KVM=y" >> $config_target_mak
8151 if supported_hax_target
$target; then
8152 echo "CONFIG_HAX=y" >> $config_target_mak
8154 if supported_hvf_target
$target; then
8155 echo "CONFIG_HVF=y" >> $config_target_mak
8157 if supported_whpx_target
$target; then
8158 echo "CONFIG_WHPX=y" >> $config_target_mak
8160 if test "$target_aligned_only" = "yes" ; then
8161 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8163 if test "$target_bigendian" = "yes" ; then
8164 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
8166 if test "$target_softmmu" = "yes" ; then
8167 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
8168 if test "$mttcg" = "yes" ; then
8169 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8172 if test "$target_user_only" = "yes" ; then
8173 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
8174 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
8175 symlink
"../qemu-$target_name" "$target_dir/qemu-$target_name"
8177 symlink
"../qemu-system-$target_name" "$target_dir/qemu-system-$target_name"
8179 if test "$target_linux_user" = "yes" ; then
8180 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
8183 if test ! -z "$gdb_xml_files" ; then
8184 for x
in $gdb_xml_files; do
8185 list
="$list gdb-xml/$x"
8187 echo "TARGET_XML_FILES=$list" >> $config_target_mak
8190 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
8191 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
8193 if test "$target_bsd_user" = "yes" ; then
8194 echo "CONFIG_BSD_USER=y" >> $config_target_mak
8198 # generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
8201 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8202 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8205 for i
in $ARCH $TARGET_BASE_ARCH ; do
8208 disas_config
"ALPHA"
8211 if test -n "${cxx}"; then
8212 disas_config
"ARM_A64"
8217 if test -n "${cxx}"; then
8218 disas_config
"ARM_A64"
8240 disas_config
"MICROBLAZE"
8244 if test -n "${cxx}"; then
8245 disas_config
"NANOMIPS"
8249 disas_config
"MOXIE"
8252 disas_config
"NIOS2"
8255 disas_config
"OPENRISC"
8261 disas_config
"RISCV"
8273 disas_config
"SPARC"
8276 disas_config
"XTENSA"
8280 if test "$tcg_interpreter" = "yes" ; then
8284 done # for target in $targets
8286 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8287 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8289 if [ "$fdt" = "git" ]; then
8290 echo "config-host.h: dtc/all" >> $config_host_mak
8292 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
8293 echo "config-host.h: capstone/all" >> $config_host_mak
8295 if test -n "$LIBCAPSTONE"; then
8296 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8299 if test "$numa" = "yes"; then
8300 echo "CONFIG_NUMA=y" >> $config_host_mak
8301 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
8304 if test "$ccache_cpp2" = "yes"; then
8305 echo "export CCACHE_CPP2=y" >> $config_host_mak
8308 if test "$safe_stack" = "yes"; then
8309 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
8312 # If we're using a separate build tree, set it up now.
8313 # DIRS are directories which we simply mkdir in the build tree;
8314 # LINKS are things to symlink back into the source tree
8315 # (these can be both files and directories).
8316 # Caution: do not add files or directories here using wildcards. This
8317 # will result in problems later if a new file matching the wildcard is
8318 # added to the source tree -- nothing will cause configure to be rerun
8319 # so the build tree will be missing the link back to the new file, and
8320 # tests might fail. Prefer to keep the relevant files in their own
8321 # directory and symlink the directory instead.
8322 DIRS
="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8323 DIRS
="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
8324 DIRS
="$DIRS docs docs/interop fsdev scsi"
8325 DIRS
="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8326 DIRS
="$DIRS roms/seabios"
8328 LINKS
="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8329 LINKS
="$LINKS tests/tcg/Makefile.target"
8330 LINKS
="$LINKS tests/plugin/Makefile"
8331 LINKS
="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
8332 LINKS
="$LINKS pc-bios/s390-ccw/Makefile"
8333 LINKS
="$LINKS roms/seabios/Makefile"
8334 LINKS
="$LINKS pc-bios/qemu-icon.bmp"
8335 LINKS
="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
8336 LINKS
="$LINKS tests/acceptance tests/data"
8337 LINKS
="$LINKS tests/qemu-iotests/check"
8338 LINKS
="$LINKS python"
8340 $source_path/pc-bios
/*.bin \
8341 $source_path/pc-bios
/*.lid \
8342 $source_path/pc-bios
/*.rom \
8343 $source_path/pc-bios
/*.dtb \
8344 $source_path/pc-bios
/*.img \
8345 $source_path/pc-bios
/openbios-
* \
8346 $source_path/pc-bios
/u-boot.
* \
8347 $source_path/pc-bios
/edk2-
*.fd.bz2 \
8348 $source_path/pc-bios
/palcode-
*
8350 LINKS
="$LINKS pc-bios/$(basename $bios_file)"
8353 for f
in $LINKS ; do
8354 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
8355 symlink
"$source_path/$f" "$f"
8359 (for i
in $cross_cc_vars; do
8362 export target_list source_path use_containers
8363 $source_path/tests
/tcg
/configure.sh
)
8365 # temporary config to build submodules
8366 for rom
in seabios
; do
8367 config_mak
=roms
/$rom/config.mak
8368 echo "# Automatically generated by configure - do not modify" > $config_mak
8369 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
8370 echo "AS=$as" >> $config_mak
8371 echo "CCAS=$ccas" >> $config_mak
8372 echo "CC=$cc" >> $config_mak
8373 echo "BCC=bcc" >> $config_mak
8374 echo "CPP=$cpp" >> $config_mak
8375 echo "OBJCOPY=objcopy" >> $config_mak
8376 echo "IASL=$iasl" >> $config_mak
8377 echo "LD=$ld" >> $config_mak
8378 echo "RANLIB=$ranlib" >> $config_mak
8381 # set up qemu-iotests in this build directory
8382 iotests_common_env
="tests/qemu-iotests/common.env"
8384 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8385 echo >> "$iotests_common_env"
8386 echo "export PYTHON='$python'" >> "$iotests_common_env"
8388 if test "$skip_meson" = no
; then
8389 cross
="config-meson.cross.new"
8391 echo "['$(echo $* | sed "s
/ /','/g
")']"
8394 echo "# Automatically generated by configure - do not modify" > $cross
8395 echo "[properties]" >> $cross
8396 test -z "$cxx" && echo "link_language = 'c'" >> $cross
8397 echo "[binaries]" >> $cross
8398 echo "c = $(meson_quote $cc)" >> $cross
8399 test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross
8400 echo "ar = $(meson_quote $ar)" >> $cross
8401 echo "nm = $(meson_quote $nm)" >> $cross
8402 echo "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross
8403 echo "ranlib = $(meson_quote $ranlib)" >> $cross
8404 echo "strip = $(meson_quote $strip)" >> $cross
8405 echo "windres = $(meson_quote $windres)" >> $cross
8406 if test -n "$cross_prefix"; then
8407 cross_arg
="--cross-file config-meson.cross"
8408 # Hack: Meson expects an absolute path for the *build* machine
8409 # for the prefix, so add a slash in front of a Windows path that
8410 # includes a drive letter.
8412 # See https://github.com/mesonbuild/meson/issues/7577.
8413 echo "[host_machine]" >> $cross
8414 if test "$mingw32" = "yes" ; then
8415 echo "system = 'windows'" >> $cross
8417 ?
:*) pre_prefix
=/ ;;
8422 echo "cpu_family = 'x86'" >> $cross
8425 echo "cpu_family = 'ppc64'" >> $cross
8428 echo "cpu_family = '$ARCH'" >> $cross
8431 echo "cpu = '$cpu'" >> $cross
8432 if test "$bigendian" = "yes" ; then
8433 echo "endian = 'big'" >> $cross
8435 echo "endian = 'little'" >> $cross
8438 cross_arg
="--native-file config-meson.cross"
8440 mv $cross config-meson.cross
8442 rm -rf meson-private meson-info meson-logs
8443 NINJA
=$PWD/ninjatool
$meson setup \
8444 --prefix "${pre_prefix}$prefix" \
8445 --libdir "${pre_prefix}$libdir" \
8446 --libexecdir "${pre_prefix}$libexecdir" \
8447 --bindir "${pre_prefix}$bindir" \
8448 --includedir "${pre_prefix}$includedir" \
8449 --datadir "${pre_prefix}$datadir" \
8450 --mandir "${pre_prefix}$mandir" \
8451 --sysconfdir "${pre_prefix}$sysconfdir" \
8452 --localstatedir "${pre_prefix}$local_statedir" \
8453 -Doptimization=$
(if test "$debug" = yes; then echo 0; else echo 2; fi) \
8454 -Ddebug=$
(if test "$debug_info" = yes; then echo true
; else echo false
; fi) \
8455 -Dwerror=$
(if test "$werror" = yes; then echo true
; else echo false
; fi) \
8456 -Dstrip=$
(if test "$strip_opt" = yes; then echo true
; else echo false
; fi) \
8457 -Db_pie=$
(if test "$pie" = yes; then echo true
; else echo false
; fi) \
8458 -Db_coverage=$
(if test "$gcov" = yes; then echo true
; else echo false
; fi) \
8460 "$PWD" "$source_path"
8462 if test "$?" -ne 0 ; then
8463 error_exit
"meson setup failed"
8465 touch ninjatool.stamp
8468 # Save the configure command line for later reuse.
8469 cat <<EOD >config.status
8471 # Generated by configure.
8472 # Run this file to recreate the current configuration.
8473 # Compiler output produced by configure, useful for debugging
8474 # configure, is in config.log if it exists.
8480 eval envval
=\$
$envname
8482 if test -n "$envval"
8484 echo "$envname='$envval'" >> config.status
8485 echo "export $envname" >> config.status
8487 echo "unset $envname" >> config.status
8491 # Preserve various env variables that influence what
8492 # features/build target configure will detect
8498 preserve_env INSTALL
8500 preserve_env LD_LIBRARY_PATH
8501 preserve_env LIBTOOL
8504 preserve_env OBJCOPY
8506 preserve_env PKG_CONFIG
8507 preserve_env PKG_CONFIG_LIBDIR
8508 preserve_env PKG_CONFIG_PATH
8510 preserve_env SDL2_CONFIG
8513 preserve_env WINDRES
8515 printf "exec" >>config.status
8516 for i
in "$0" "$@"; do
8517 test "$i" = --skip-meson ||
printf " '%s'" "$i" >>config.status
8519 echo ' "$@"' >>config.status
8520 chmod +x config.status