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 # Temporary directory used for files created while
15 # configure runs. Since it is in the build directory
16 # we can safely blow away any previous version of it
17 # (and we need not jump through hoops to try to delete
18 # it when configure exits.)
23 echo "ERROR: failed to create temporary directory"
28 TMPC
="${TMPDIR1}/${TMPB}.c"
29 TMPO
="${TMPDIR1}/${TMPB}.o"
30 TMPCXX
="${TMPDIR1}/${TMPB}.cxx"
31 TMPE
="${TMPDIR1}/${TMPB}.exe"
32 TMPMO
="${TMPDIR1}/${TMPB}.mo"
36 # Print a helpful header at the top of config.log
37 echo "# QEMU configure log $(date)" >> config.log
38 printf "# Configured with:" >> config.log
39 printf " '%s'" "$0" "$@" >> config.log
41 echo "#" >> config.log
46 while test -n "$2"; do
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
63 if test -n "$BASH_VERSION"; then eval '
66 lines: ${BASH_LINENO[*]}"
68 echo $compiler "$@" >> config.log
69 $compiler "$@" >> config.log
2>&1 ||
return $?
70 # Test passed. If this is an --enable-werror build, rerun
71 # the test with -Werror and bail out if it fails. This
72 # makes warning-generating-errors in configure test code
73 # obvious to developers.
74 if test "$werror" != "yes"; then
77 # Don't bother rerunning the compile if we were already using -Werror
83 echo $compiler -Werror "$@" >> config.log
84 $compiler -Werror "$@" >> config.log
2>&1 && return $?
85 error_exit
"configure test passed without -Werror but failed with -Werror." \
86 "This is probably a bug in the configure script. The failing command" \
87 "will be at the bottom of config.log." \
88 "You can run configure with --disable-werror to bypass this check."
92 do_compiler
"$cc" "$@"
96 do_compiler
"$cxx" "$@"
100 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101 # options which some versions of GCC's C++ compiler complain about
102 # because they only make sense for C programs.
103 QEMU_CXXFLAGS
="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
105 for arg
in $QEMU_CFLAGS; do
107 -Wstrict-prototypes|
-Wmissing-prototypes|
-Wnested-externs|\
108 -Wold-style-declaration|
-Wold-style-definition|
-Wredundant-decls)
111 QEMU_CXXFLAGS
=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
119 do_cc
$QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
125 do_cc
$QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
128 # symbolically link $1 to $2. Portable version of "ln -sf".
131 mkdir
-p "$(dirname "$2")"
135 # check whether a command is available to this shell (may be either an
136 # executable or a builtin)
138 type "$1" >/dev
/null
2>&1
141 # search for an executable in PATH
147 # pathname has a dir component?
148 if [ "${local_command#*/}" != "$local_command" ]; then
149 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
150 echo "$local_command"
154 if [ -z "$local_command" ]; then
159 for local_dir
in $PATH; do
160 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
161 echo "$local_dir/$local_command"
162 IFS
="${local_ifs:-$(printf ' \t\n')}"
167 IFS
="${local_ifs:-$(printf ' \t\n')}"
172 echo "$trace_backends" |
grep "$1" >/dev
/null
176 eval test -z '"${1#'"$2"'}"'
179 supported_hax_target
() {
180 test "$hax" = "yes" ||
return 1
181 glob
"$1" "*-softmmu" ||
return 1
182 case "${1%-softmmu}" in
190 supported_kvm_target
() {
191 test "$kvm" = "yes" ||
return 1
192 glob
"$1" "*-softmmu" ||
return 1
193 case "${1%-softmmu}:$cpu" in
194 arm
:arm | aarch64
:aarch64 | \
195 i386
:i386 | i386
:x86_64 | i386
:x32 | \
196 x86_64
:i386 | x86_64
:x86_64 | x86_64
:x32 | \
197 mips
:mips | mipsel
:mips | \
198 ppc
:ppc | ppc64
:ppc | ppc
:ppc64 | ppc64
:ppc64 | \
206 supported_xen_target
() {
207 test "$xen" = "yes" ||
return 1
208 glob
"$1" "*-softmmu" ||
return 1
209 # Only i386 and x86_64 provide the xenpv machine.
210 case "${1%-softmmu}" in
218 supported_hvf_target
() {
219 test "$hvf" = "yes" ||
return 1
220 glob
"$1" "*-softmmu" ||
return 1
221 case "${1%-softmmu}" in
229 supported_whpx_target
() {
230 test "$whpx" = "yes" ||
return 1
231 glob
"$1" "*-softmmu" ||
return 1
232 case "${1%-softmmu}" in
245 if test "$linux" != "yes"; then
246 print_error
"Target '$target' is only available on a Linux host"
251 if test "$bsd" != "yes"; then
252 print_error
"Target '$target' is only available on a BSD host"
257 print_error
"Invalid target name '$target'"
261 test "$tcg" = "yes" && return 0
262 supported_kvm_target
"$1" && return 0
263 supported_xen_target
"$1" && return 0
264 supported_hax_target
"$1" && return 0
265 supported_hvf_target
"$1" && return 0
266 supported_whpx_target
"$1" && return 0
267 print_error
"TCG disabled, but hardware accelerator not available for '$target'"
273 $ld --help 2>/dev
/null |
grep ".$1" >/dev
/null
2>&1
277 source_path
=$
(dirname "$0")
280 interp_prefix
="/usr/gnemul/qemu-%M"
284 block_drv_rw_whitelist
=""
285 block_drv_ro_whitelist
=""
295 if test -e "$source_path/.git"
298 git_submodules
="ui/keycodemapdb"
299 git_submodules
="$git_submodules tests/fp/berkeley-testfloat-3"
300 git_submodules
="$git_submodules tests/fp/berkeley-softfloat-3"
305 if ! test -f "$source_path/ui/keycodemapdb/README"
308 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
310 echo "This is not a GIT checkout but module content appears to"
311 echo "be missing. Do not use 'git archive' or GitHub download links"
312 echo "to acquire QEMU source archives. Non-GIT builds are only"
313 echo "supported with source archives linked from:"
315 echo " https://www.qemu.org/download/"
317 echo "Developers working with GIT can use scripts/archive-source.sh"
318 echo "if they need to create valid source archives."
325 # Don't accept a target_list environment variable.
328 # Default value for a variable defining feature "foo".
329 # * foo="no" feature will only be used if --enable-foo arg is given
330 # * foo="" feature will be searched for, and if found, will be used
331 # unless --disable-foo is given
332 # * foo="yes" this value will only be set by --enable-foo flag.
333 # feature will searched for,
334 # if not found, configure exits with error
336 # Always add --enable-foo and --disable-foo command line args.
337 # Distributions want to ensure that several features are compiled in, and it
338 # is impossible without a --enable-foo that exits if a feature is not found.
360 xen_pv_domain_build
="no"
361 xen_pci_passthrough
=""
393 LDFLAGS_SHARED
="-shared"
396 mandir
="\${prefix}/share/man"
397 datadir
="\${prefix}/share"
398 firmwarepath
="\${prefix}/share/qemu-firmware"
399 qemu_docdir
="\${prefix}/share/doc/qemu"
400 bindir
="\${prefix}/bin"
401 libdir
="\${prefix}/lib"
402 libexecdir
="\${prefix}/libexec"
403 includedir
="\${prefix}/include"
404 sysconfdir
="\${prefix}/etc"
405 local_statedir
="\${prefix}/var"
438 guest_agent_with_vss
="no"
439 guest_agent_ntddscsi
="no"
448 debug_stack_usage
="no"
452 glusterfs_xlator_opt
="no"
453 glusterfs_discard
="no"
454 glusterfs_fallocate
="no"
455 glusterfs_zerofill
="no"
458 tls_priority
="NORMAL"
467 live_block_migration
="yes"
478 # cross compilers defaults, can be overridden with --cross-cc-ARCH
479 cross_cc_aarch64
="aarch64-linux-gnu-gcc"
480 cross_cc_aarch64_be
="$cross_cc_aarch64"
481 cross_cc_cflags_aarch64_be
="-mbig-endian"
482 cross_cc_arm
="arm-linux-gnueabihf-gcc"
483 cross_cc_cflags_armeb
="-mbig-endian"
484 cross_cc_i386
="i386-pc-linux-gnu-gcc"
485 cross_cc_cflags_i386
=""
486 cross_cc_powerpc
="powerpc-linux-gnu-gcc"
487 cross_cc_powerpc
="powerpc-linux-gnu-gcc"
489 enabled_cross_compilers
=""
496 # parse CC options first
498 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
500 --cross-prefix=*) cross_prefix
="$optarg"
504 --cxx=*) CXX
="$optarg"
506 --source-path=*) source_path
="$optarg"
508 --cpu=*) cpu
="$optarg"
510 --extra-cflags=*) QEMU_CFLAGS
="$QEMU_CFLAGS $optarg"
512 --extra-cxxflags=*) QEMU_CXXFLAGS
="$QEMU_CXXFLAGS $optarg"
514 --extra-ldflags=*) LDFLAGS
="$LDFLAGS $optarg"
515 EXTRA_LDFLAGS
="$optarg"
517 --enable-debug-info) debug_info
="yes"
519 --disable-debug-info) debug_info
="no"
521 --cross-cc-*[!a-zA-Z0-9_-
]*=*) error_exit
"Passed bad --cross-cc-FOO option"
523 --cross-cc-cflags-*) cc_arch
=${opt#--cross-cc-flags-}; cc_arch
=${cc_arch%%=*}
524 eval "cross_cc_cflags_${cc_arch}=\$optarg"
526 --cross-cc-*) cc_arch
=${opt#--cross-cc-}; cc_arch
=${cc_arch%%=*}
527 eval "cross_cc_${cc_arch}=\$optarg"
532 # Using uname is really, really broken. Once we have the right set of checks
533 # we can eliminate its usage altogether.
535 # Preferred compiler:
537 # ${cross_prefix}gcc (if cross-prefix specified)
539 if test -z "${CC}${cross_prefix}"; then
542 cc
="${CC-${cross_prefix}gcc}"
545 if test -z "${CXX}${cross_prefix}"; then
548 cxx
="${CXX-${cross_prefix}g++}"
551 ar="${AR-${cross_prefix}ar}"
552 as
="${AS-${cross_prefix}as}"
555 objcopy
="${OBJCOPY-${cross_prefix}objcopy}"
556 ld
="${LD-${cross_prefix}ld}"
557 ranlib
="${RANLIB-${cross_prefix}ranlib}"
558 nm
="${NM-${cross_prefix}nm}"
559 strip
="${STRIP-${cross_prefix}strip}"
560 windres
="${WINDRES-${cross_prefix}windres}"
561 pkg_config_exe
="${PKG_CONFIG-${cross_prefix}pkg-config}"
563 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
565 pkg_config
=query_pkg_config
566 sdl_config
="${SDL_CONFIG-${cross_prefix}sdl-config}"
567 sdl2_config
="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
569 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
570 ARFLAGS
="${ARFLAGS-rv}"
572 # default flags for all hosts
573 # We use -fwrapv to tell the compiler that we require a C dialect where
574 # left shift of signed integers is well defined and has the expected
575 # 2s-complement style results. (Both clang and gcc agree that it
576 # provides these semantics.)
577 QEMU_CFLAGS
="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
578 QEMU_CFLAGS
="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
579 QEMU_CFLAGS
="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
580 QEMU_CFLAGS
="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
581 QEMU_INCLUDES
="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
582 if test "$debug_info" = "yes"; then
584 LDFLAGS
="-g $LDFLAGS"
587 # make source path absolute
588 source_path
=$
(cd "$source_path"; pwd)
590 # running configure in the source tree?
591 # we know that's the case if configure is there.
592 if test -f "./configure"; then
593 pwd_is_source_path
="y"
595 pwd_is_source_path
="n"
601 #error $1 not defined
603 int main(void) { return 0; }
611 int main(void) { return 0; }
618 int main(void) { return 0; }
622 if check_define __linux__
; then
624 elif check_define _WIN32
; then
626 elif check_define __OpenBSD__
; then
628 elif check_define __sun__
; then
630 elif check_define __HAIKU__
; then
632 elif check_define __FreeBSD__
; then
634 elif check_define __FreeBSD_kernel__
&& check_define __GLIBC__
; then
635 targetos
='GNU/kFreeBSD'
636 elif check_define __DragonFly__
; then
638 elif check_define __NetBSD__
; then
640 elif check_define __APPLE__
; then
643 # This is a fatal error, but don't report it yet, because we
644 # might be going to just print the --help text, or it might
645 # be the result of a missing compiler.
650 # Some host OSes need non-standard checks for which CPU to use.
651 # Note that these checks are broken for cross-compilation: if you're
652 # cross-compiling to one of these OSes then you'll need to specify
653 # the correct CPU with the --cpu option.
656 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
657 # run 64-bit userspace code.
658 # If the user didn't specify a CPU explicitly and the kernel says this is
659 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
660 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
665 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
666 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
671 if test ! -z "$cpu" ; then
672 # command line argument
674 elif check_define __i386__
; then
676 elif check_define __x86_64__
; then
677 if check_define __ILP32__
; then
682 elif check_define __sparc__
; then
683 if check_define __arch64__
; then
688 elif check_define _ARCH_PPC
; then
689 if check_define _ARCH_PPC64
; then
694 elif check_define __mips__
; then
696 elif check_define __s390__
; then
697 if check_define __s390x__
; then
702 elif check_define __arm__
; then
704 elif check_define __aarch64__
; then
711 # Normalise host CPU name and set ARCH.
712 # Note that this case should only have supported host CPUs, not guests.
714 ppc|ppc64|s390|s390x|sparc64|x32
)
717 eval "cross_cc_${cpu}=\$host_cc"
719 i386|i486|i586|i686|i86pc|BePC
)
722 cross_cc_i386
=$host_cc
727 cross_cc_x86_64
=$host_cc
732 cross_cc_arm
=$host_cc
737 cross_cc_aarch64
=$host_cc
742 cross_cc_mips
=$host_cc
747 cross_cc_sparc
=$host_cc
750 # This will result in either an error or falling back to TCI later
754 if test -z "$ARCH"; then
760 # host *BSD for user mode
767 audio_possible_drivers
="dsound sdl"
768 if check_include dsound.h
; then
769 audio_drv_list
="dsound"
778 audio_possible_drivers
="oss sdl pa"
784 audio_possible_drivers
="oss sdl pa"
785 # needed for kinfo_getvmmap(3) in libutil.h
787 # needed for kinfo_getproc
788 libs_qga
="-lutil $libs_qga"
789 netmap
="" # enable netmap autodetect
790 HOST_VARIANT_DIR
="freebsd"
797 audio_possible_drivers
="oss sdl pa"
798 HOST_VARIANT_DIR
="dragonfly"
804 audio_possible_drivers
="oss sdl"
806 HOST_VARIANT_DIR
="netbsd"
813 audio_possible_drivers
="sdl"
814 HOST_VARIANT_DIR
="openbsd"
822 LDFLAGS_SHARED
="-bundle -undefined dynamic_lookup"
823 if [ "$cpu" = "x86_64" ] ; then
824 QEMU_CFLAGS
="-arch x86_64 $QEMU_CFLAGS"
825 LDFLAGS
="-arch x86_64 $LDFLAGS"
828 audio_drv_list
="coreaudio"
829 audio_possible_drivers
="coreaudio sdl"
830 LDFLAGS
="-framework CoreFoundation -framework IOKit $LDFLAGS"
831 libs_softmmu
="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
832 # Disable attempts to use ObjectiveC features in os/object.h since they
833 # won't work when we're compiling with gcc as a C compiler.
834 QEMU_CFLAGS
="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
835 HOST_VARIANT_DIR
="darwin"
841 install="${INSTALL-ginstall}"
842 smbd
="${SMBD-/usr/sfw/sbin/smbd}"
843 if test -f /usr
/include
/sys
/soundcard.h
; then
846 audio_possible_drivers
="oss sdl"
847 # needed for CMSG_ macros in sys/socket.h
848 QEMU_CFLAGS
="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
849 # needed for TIOCWIN* defines in termios.h
850 QEMU_CFLAGS
="-D__EXTENSIONS__ $QEMU_CFLAGS"
851 QEMU_CFLAGS
="-std=gnu99 $QEMU_CFLAGS"
852 solarisnetlibs
="-lsocket -lnsl -lresolv"
853 LIBS
="$solarisnetlibs $LIBS"
854 libs_qga
="$solarisnetlibs $libs_qga"
858 QEMU_CFLAGS
="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
859 LIBS
="-lposix_error_mapper -lnetwork $LIBS"
863 audio_possible_drivers
="oss alsa sdl pa"
871 QEMU_INCLUDES
="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
876 if [ "$bsd" = "yes" ] ; then
877 if [ "$darwin" != "yes" ] ; then
882 : ${make=${MAKE-make}}
883 : ${install=${INSTALL-install}}
884 : ${python=${PYTHON-python}}
885 : ${smbd=${SMBD-/usr/sbin/smbd}}
887 # Default objcc to clang if available, otherwise use CC
894 if test "$mingw32" = "yes" ; then
897 QEMU_CFLAGS
="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
898 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
899 QEMU_CFLAGS
="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
900 # MinGW needs -mthreads for TLS and macro _MT.
901 QEMU_CFLAGS
="-mthreads $QEMU_CFLAGS"
902 LIBS
="-lwinmm -lws2_32 -liphlpapi $LIBS"
904 if compile_prog
"" "-liberty" ; then
905 LIBS
="-liberty $LIBS"
907 prefix
="c:/Program Files/QEMU"
910 qemu_docdir
="\${prefix}"
912 sysconfdir
="\${prefix}"
915 libs_qga
="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
921 optarg
=$
(expr "x$opt" : 'x[^=]*=\(.*\)')
923 --help|
-h) show_help
=yes
925 --version|
-V) exec cat $source_path/VERSION
927 --prefix=*) prefix
="$optarg"
929 --interp-prefix=*) interp_prefix
="$optarg"
937 --host-cc=*) host_cc
="$optarg"
941 --iasl=*) iasl
="$optarg"
943 --objcc=*) objcc
="$optarg"
945 --make=*) make="$optarg"
947 --install=*) install="$optarg"
949 --python=*) python
="$optarg"
951 --gcov=*) gcov_tool
="$optarg"
953 --smbd=*) smbd
="$optarg"
963 --disable-debug-info)
975 --target-list=*) target_list
="$optarg"
977 --enable-trace-backends=*) trace_backends
="$optarg"
979 # XXX: backwards compatibility
980 --enable-trace-backend=*) trace_backends
="$optarg"
982 --with-trace-file=*) trace_file
="$optarg"
984 --enable-gprof) gprof
="yes"
986 --enable-gcov) gcov
="yes"
990 LDFLAGS
="-static $LDFLAGS"
991 QEMU_PKG_CONFIG_FLAGS
="--static $QEMU_PKG_CONFIG_FLAGS"
993 --mandir=*) mandir
="$optarg"
995 --bindir=*) bindir
="$optarg"
997 --libdir=*) libdir
="$optarg"
999 --libexecdir=*) libexecdir
="$optarg"
1001 --includedir=*) includedir
="$optarg"
1003 --datadir=*) datadir
="$optarg"
1005 --with-confsuffix=*) confsuffix
="$optarg"
1007 --docdir=*) qemu_docdir
="$optarg"
1009 --sysconfdir=*) sysconfdir
="$optarg"
1011 --localstatedir=*) local_statedir
="$optarg"
1013 --firmwarepath=*) firmwarepath
="$optarg"
1015 --host=*|
--build=*|\
1016 --disable-dependency-tracking|\
1017 --sbindir=*|
--sharedstatedir=*|\
1018 --oldincludedir=*|
--datarootdir=*|
--infodir=*|
--localedir=*|\
1019 --htmldir=*|
--dvidir=*|
--pdfdir=*|
--psdir=*)
1020 # These switches are silently ignored, for compatibility with
1021 # autoconf-generated configure scripts. This allows QEMU's
1022 # configure to be used by RPM and similar macros that set
1023 # lots of directory switches by default.
1025 --disable-sdl) sdl
="no"
1027 --enable-sdl) sdl
="yes"
1029 --with-sdlabi=*) sdlabi
="$optarg"
1031 --disable-qom-cast-debug) qom_cast_debug
="no"
1033 --enable-qom-cast-debug) qom_cast_debug
="yes"
1035 --disable-virtfs) virtfs
="no"
1037 --enable-virtfs) virtfs
="yes"
1039 --disable-mpath) mpath
="no"
1041 --enable-mpath) mpath
="yes"
1043 --disable-vnc) vnc
="no"
1045 --enable-vnc) vnc
="yes"
1047 --oss-lib=*) oss_lib
="$optarg"
1049 --audio-drv-list=*) audio_drv_list
="$optarg"
1051 --block-drv-rw-whitelist=*|
--block-drv-whitelist=*) block_drv_rw_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
1053 --block-drv-ro-whitelist=*) block_drv_ro_whitelist
=$
(echo "$optarg" |
sed -e 's/,/ /g')
1055 --enable-debug-tcg) debug_tcg
="yes"
1057 --disable-debug-tcg) debug_tcg
="no"
1060 # Enable debugging options that aren't excessively noisy
1067 --enable-sanitizers) sanitizers
="yes"
1069 --disable-sanitizers) sanitizers
="no"
1071 --enable-sparse) sparse
="yes"
1073 --disable-sparse) sparse
="no"
1075 --disable-strip) strip_opt
="no"
1077 --disable-vnc-sasl) vnc_sasl
="no"
1079 --enable-vnc-sasl) vnc_sasl
="yes"
1081 --disable-vnc-jpeg) vnc_jpeg
="no"
1083 --enable-vnc-jpeg) vnc_jpeg
="yes"
1085 --disable-vnc-png) vnc_png
="no"
1087 --enable-vnc-png) vnc_png
="yes"
1089 --disable-slirp) slirp
="no"
1091 --disable-vde) vde
="no"
1093 --enable-vde) vde
="yes"
1095 --disable-netmap) netmap
="no"
1097 --enable-netmap) netmap
="yes"
1099 --disable-xen) xen
="no"
1101 --enable-xen) xen
="yes"
1103 --disable-xen-pci-passthrough) xen_pci_passthrough
="no"
1105 --enable-xen-pci-passthrough) xen_pci_passthrough
="yes"
1107 --disable-xen-pv-domain-build) xen_pv_domain_build
="no"
1109 --enable-xen-pv-domain-build) xen_pv_domain_build
="yes"
1111 --disable-brlapi) brlapi
="no"
1113 --enable-brlapi) brlapi
="yes"
1115 --disable-bluez) bluez
="no"
1117 --enable-bluez) bluez
="yes"
1119 --disable-kvm) kvm
="no"
1121 --enable-kvm) kvm
="yes"
1123 --disable-hax) hax
="no"
1125 --enable-hax) hax
="yes"
1127 --disable-hvf) hvf
="no"
1129 --enable-hvf) hvf
="yes"
1131 --disable-whpx) whpx
="no"
1133 --enable-whpx) whpx
="yes"
1135 --disable-tcg-interpreter) tcg_interpreter
="no"
1137 --enable-tcg-interpreter) tcg_interpreter
="yes"
1139 --disable-cap-ng) cap_ng
="no"
1141 --enable-cap-ng) cap_ng
="yes"
1143 --disable-tcg) tcg
="no"
1145 --enable-tcg) tcg
="yes"
1147 --disable-malloc-trim) malloc_trim
="no"
1149 --enable-malloc-trim) malloc_trim
="yes"
1151 --disable-spice) spice
="no"
1153 --enable-spice) spice
="yes"
1155 --disable-libiscsi) libiscsi
="no"
1157 --enable-libiscsi) libiscsi
="yes"
1159 --disable-libnfs) libnfs
="no"
1161 --enable-libnfs) libnfs
="yes"
1163 --enable-profiler) profiler
="yes"
1165 --disable-cocoa) cocoa
="no"
1169 audio_drv_list
="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1171 --disable-system) softmmu
="no"
1173 --enable-system) softmmu
="yes"
1180 --disable-linux-user) linux_user
="no"
1182 --enable-linux-user) linux_user
="yes"
1184 --disable-bsd-user) bsd_user
="no"
1186 --enable-bsd-user) bsd_user
="yes"
1188 --enable-pie) pie
="yes"
1190 --disable-pie) pie
="no"
1192 --enable-werror) werror
="yes"
1194 --disable-werror) werror
="no"
1196 --enable-stack-protector) stack_protector
="yes"
1198 --disable-stack-protector) stack_protector
="no"
1200 --disable-curses) curses
="no"
1202 --enable-curses) curses
="yes"
1204 --disable-curl) curl
="no"
1206 --enable-curl) curl
="yes"
1208 --disable-fdt) fdt
="no"
1210 --enable-fdt) fdt
="yes"
1212 --disable-linux-aio) linux_aio
="no"
1214 --enable-linux-aio) linux_aio
="yes"
1216 --disable-attr) attr
="no"
1218 --enable-attr) attr
="yes"
1220 --disable-membarrier) membarrier
="no"
1222 --enable-membarrier) membarrier
="yes"
1224 --disable-blobs) blobs
="no"
1226 --with-pkgversion=*) pkgversion
="$optarg"
1228 --with-coroutine=*) coroutine
="$optarg"
1230 --disable-coroutine-pool) coroutine_pool
="no"
1232 --enable-coroutine-pool) coroutine_pool
="yes"
1234 --enable-debug-stack-usage) debug_stack_usage
="yes"
1236 --enable-crypto-afalg) crypto_afalg
="yes"
1238 --disable-crypto-afalg) crypto_afalg
="no"
1240 --disable-docs) docs
="no"
1242 --enable-docs) docs
="yes"
1244 --disable-vhost-net) vhost_net
="no"
1246 --enable-vhost-net) vhost_net
="yes"
1248 --disable-vhost-crypto) vhost_crypto
="no"
1250 --enable-vhost-crypto)
1252 if test "$mingw32" = "yes"; then
1253 error_exit
"vhost-crypto isn't available on win32"
1256 --disable-vhost-scsi) vhost_scsi
="no"
1258 --enable-vhost-scsi) vhost_scsi
="yes"
1260 --disable-vhost-vsock) vhost_vsock
="no"
1262 --enable-vhost-vsock) vhost_vsock
="yes"
1264 --disable-opengl) opengl
="no"
1266 --enable-opengl) opengl
="yes"
1268 --disable-rbd) rbd
="no"
1270 --enable-rbd) rbd
="yes"
1272 --disable-xfsctl) xfs
="no"
1274 --enable-xfsctl) xfs
="yes"
1276 --disable-smartcard) smartcard
="no"
1278 --enable-smartcard) smartcard
="yes"
1280 --disable-libusb) libusb
="no"
1282 --enable-libusb) libusb
="yes"
1284 --disable-usb-redir) usb_redir
="no"
1286 --enable-usb-redir) usb_redir
="yes"
1288 --disable-zlib-test) zlib
="no"
1290 --disable-lzo) lzo
="no"
1292 --enable-lzo) lzo
="yes"
1294 --disable-snappy) snappy
="no"
1296 --enable-snappy) snappy
="yes"
1298 --disable-bzip2) bzip2="no"
1300 --enable-bzip2) bzip2="yes"
1302 --enable-guest-agent) guest_agent
="yes"
1304 --disable-guest-agent) guest_agent
="no"
1306 --enable-guest-agent-msi) guest_agent_msi
="yes"
1308 --disable-guest-agent-msi) guest_agent_msi
="no"
1310 --with-vss-sdk) vss_win32_sdk
=""
1312 --with-vss-sdk=*) vss_win32_sdk
="$optarg"
1314 --without-vss-sdk) vss_win32_sdk
="no"
1316 --with-win-sdk) win_sdk
=""
1318 --with-win-sdk=*) win_sdk
="$optarg"
1320 --without-win-sdk) win_sdk
="no"
1322 --enable-tools) want_tools
="yes"
1324 --disable-tools) want_tools
="no"
1326 --enable-seccomp) seccomp
="yes"
1328 --disable-seccomp) seccomp
="no"
1330 --disable-glusterfs) glusterfs
="no"
1332 --disable-avx2) avx2_opt
="no"
1334 --enable-avx2) avx2_opt
="yes"
1336 --enable-glusterfs) glusterfs
="yes"
1338 --disable-virtio-blk-data-plane|
--enable-virtio-blk-data-plane)
1339 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1341 --enable-vhdx|
--disable-vhdx)
1342 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1344 --enable-uuid|
--disable-uuid)
1345 echo "$0: $opt is obsolete, UUID support is always built" >&2
1347 --disable-gtk) gtk
="no"
1349 --enable-gtk) gtk
="yes"
1351 --tls-priority=*) tls_priority
="$optarg"
1353 --disable-gnutls) gnutls
="no"
1355 --enable-gnutls) gnutls
="yes"
1357 --disable-nettle) nettle
="no"
1359 --enable-nettle) nettle
="yes"
1361 --disable-gcrypt) gcrypt
="no"
1363 --enable-gcrypt) gcrypt
="yes"
1365 --enable-rdma) rdma
="yes"
1367 --disable-rdma) rdma
="no"
1369 --enable-pvrdma) pvrdma
="yes"
1371 --disable-pvrdma) pvrdma
="no"
1373 --disable-vte) vte
="no"
1375 --enable-vte) vte
="yes"
1377 --disable-virglrenderer) virglrenderer
="no"
1379 --enable-virglrenderer) virglrenderer
="yes"
1381 --disable-tpm) tpm
="no"
1383 --enable-tpm) tpm
="yes"
1385 --disable-libssh2) libssh2
="no"
1387 --enable-libssh2) libssh2
="yes"
1389 --disable-live-block-migration) live_block_migration
="no"
1391 --enable-live-block-migration) live_block_migration
="yes"
1393 --disable-numa) numa
="no"
1395 --enable-numa) numa
="yes"
1397 --disable-libxml2) libxml2
="no"
1399 --enable-libxml2) libxml2
="yes"
1401 --disable-tcmalloc) tcmalloc
="no"
1403 --enable-tcmalloc) tcmalloc
="yes"
1405 --disable-jemalloc) jemalloc
="no"
1407 --enable-jemalloc) jemalloc
="yes"
1409 --disable-replication) replication
="no"
1411 --enable-replication) replication
="yes"
1413 --disable-vxhs) vxhs
="no"
1415 --enable-vxhs) vxhs
="yes"
1417 --disable-vhost-user) vhost_user
="no"
1419 --enable-vhost-user)
1421 if test "$mingw32" = "yes"; then
1422 error_exit
"vhost-user isn't available on win32"
1425 --disable-capstone) capstone
="no"
1427 --enable-capstone) capstone
="yes"
1429 --enable-capstone=git
) capstone
="git"
1431 --enable-capstone=system
) capstone
="system"
1433 --with-git=*) git
="$optarg"
1435 --enable-git-update) git_update
=yes
1437 --disable-git-update) git_update
=no
1439 --enable-debug-mutex) debug_mutex
=yes
1441 --disable-debug-mutex) debug_mutex
=no
1443 --enable-libpmem) libpmem
=yes
1445 --disable-libpmem) libpmem
=no
1448 echo "ERROR: unknown option $opt"
1449 echo "Try '$0 --help' for more information"
1455 if test "$vhost_user" = ""; then
1456 if test "$mingw32" = "yes"; then
1466 LDFLAGS
="-m32 $LDFLAGS"
1467 cross_cc_powerpc
=$cc
1468 cross_cc_cflags_powerpc
=$CPU_CFLAGS
1472 LDFLAGS
="-m64 $LDFLAGS"
1474 cross_cc_cflags_ppc64
=$CPU_CFLAGS
1477 CPU_CFLAGS
="-m32 -mv8plus -mcpu=ultrasparc"
1478 LDFLAGS
="-m32 -mv8plus $LDFLAGS"
1480 cross_cc_cflags_sparc
=$CPU_CFLAGS
1483 CPU_CFLAGS
="-m64 -mcpu=ultrasparc"
1484 LDFLAGS
="-m64 $LDFLAGS"
1485 cross_cc_sparc64
=$cc
1486 cross_cc_cflags_sparc64
=$CPU_CFLAGS
1490 LDFLAGS
="-m31 $LDFLAGS"
1492 cross_cc_cflags_s390
=$CPU_CFLAGS
1496 LDFLAGS
="-m64 $LDFLAGS"
1498 cross_cc_cflags_s390x
=$CPU_CFLAGS
1502 LDFLAGS
="-m32 $LDFLAGS"
1504 cross_cc_cflags_i386
=$CPU_CFLAGS
1507 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1508 # If we truly care, we should simply detect this case at
1509 # runtime and generate the fallback to serial emulation.
1510 CPU_CFLAGS
="-m64 -mcx16"
1511 LDFLAGS
="-m64 $LDFLAGS"
1513 cross_cc_cflags_x86_64
=$CPU_CFLAGS
1517 LDFLAGS
="-mx32 $LDFLAGS"
1519 cross_cc_cflags_i386
=$CPU_CFLAGS
1521 # No special flags required for other host CPUs
1524 QEMU_CFLAGS
="$CPU_CFLAGS $QEMU_CFLAGS"
1526 # For user-mode emulation the host arch has to be one we explicitly
1527 # support, even if we're using TCI.
1528 if [ "$ARCH" = "unknown" ]; then
1533 default_target_list
=""
1537 if [ "$softmmu" = "yes" ]; then
1538 mak_wilds
="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1540 if [ "$linux_user" = "yes" ]; then
1541 mak_wilds
="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1543 if [ "$bsd_user" = "yes" ]; then
1544 mak_wilds
="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1547 for config
in $mak_wilds; do
1548 default_target_list
="${default_target_list} $(basename "$config" .mak)"
1551 # Enumerate public trace backends for --help output
1552 trace_backend_list
=$
(echo $
(grep -le '^PUBLIC = True$' "$source_path"/scripts
/tracetool
/backend
/*.py |
sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1554 if test x
"$show_help" = x
"yes" ; then
1557 Usage: configure [options]
1558 Options: [defaults in brackets after descriptions]
1561 --help print this message
1562 --prefix=PREFIX install in PREFIX [$prefix]
1563 --interp-prefix=PREFIX where to find shared libraries, etc.
1564 use %M for cpu name [$interp_prefix]
1565 --target-list=LIST set target list (default: build everything)
1566 $(echo Available targets: $default_target_list | \
1567 fold -s -w 53 | sed -e 's/^/ /')
1569 Advanced options (experts only):
1570 --source-path=PATH path of source code [$source_path]
1571 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1572 --cc=CC use C compiler CC [$cc]
1573 --iasl=IASL use ACPI compiler IASL [$iasl]
1574 --host-cc=CC use C compiler CC [$host_cc] for code run at
1576 --cxx=CXX use C++ compiler CXX [$cxx]
1577 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1578 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1579 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1580 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1581 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1582 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1583 --make=MAKE use specified make [$make]
1584 --install=INSTALL use specified install [$install]
1585 --python=PYTHON use specified python [$python]
1586 --smbd=SMBD use specified smbd [$smbd]
1587 --with-git=GIT use specified git [$git]
1588 --static enable static build [$static]
1589 --mandir=PATH install man pages in PATH
1590 --datadir=PATH install firmware in PATH$confsuffix
1591 --docdir=PATH install documentation in PATH$confsuffix
1592 --bindir=PATH install binaries in PATH
1593 --libdir=PATH install libraries in PATH
1594 --libexecdir=PATH install helper binaries in PATH
1595 --sysconfdir=PATH install config in PATH$confsuffix
1596 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1597 --firmwarepath=PATH search PATH for firmware files
1598 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1599 --with-pkgversion=VERS use specified string as sub-version of the package
1600 --enable-debug enable common debug build options
1601 --enable-sanitizers enable default sanitizers
1602 --disable-strip disable stripping binaries
1603 --disable-werror disable compilation abort on warning
1604 --disable-stack-protector disable compiler-provided stack protection
1605 --audio-drv-list=LIST set audio drivers list:
1606 Available drivers: $audio_possible_drivers
1607 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1608 --block-drv-rw-whitelist=L
1609 set block driver read-write whitelist
1610 (affects only QEMU, not qemu-img)
1611 --block-drv-ro-whitelist=L
1612 set block driver read-only whitelist
1613 (affects only QEMU, not qemu-img)
1614 --enable-trace-backends=B Set trace backend
1615 Available backends: $trace_backend_list
1616 --with-trace-file=NAME Full PATH,NAME of file to store traces
1618 --disable-slirp disable SLIRP userspace network connectivity
1619 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1620 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1621 --oss-lib path to OSS library
1622 --cpu=CPU Build for host CPU [$cpu]
1623 --with-coroutine=BACKEND coroutine backend. Supported options:
1624 ucontext, sigaltstack, windows
1625 --enable-gcov enable test coverage analysis with gcov
1626 --gcov=GCOV use specified gcov [$gcov_tool]
1627 --disable-blobs disable installing provided firmware blobs
1628 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1629 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1630 --tls-priority default TLS protocol/cipher priority string
1631 --enable-gprof QEMU profiling with gprof
1632 --enable-profiler profiler support
1633 --enable-xen-pv-domain-build
1634 xen pv domain builder
1635 --enable-debug-stack-usage
1636 track the maximum stack usage of stacks created by qemu_alloc_stack
1638 Optional features, enabled with --enable-FEATURE and
1639 disabled with --disable-FEATURE, default is enabled if available:
1641 system all system emulation targets
1642 user supported user emulation targets
1643 linux-user all linux usermode emulation targets
1644 bsd-user all BSD usermode emulation targets
1645 docs build documentation
1646 guest-agent build the QEMU Guest Agent
1647 guest-agent-msi build guest agent Windows MSI installation package
1648 pie Position Independent Executables
1649 modules modules support
1650 debug-tcg TCG debugging (default is disabled)
1651 debug-info debugging information
1652 sparse sparse checker
1654 gnutls GNUTLS cryptography support
1655 nettle nettle cryptography support
1656 gcrypt libgcrypt cryptography support
1658 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1660 vte vte support for the gtk UI
1663 vnc-sasl SASL encryption for VNC server
1664 vnc-jpeg JPEG lossy compression for VNC server
1665 vnc-png PNG compression for VNC server
1666 cocoa Cocoa UI (Mac OS X only)
1668 mpath Multipath persistent reservation passthrough
1669 xen xen backend driver support
1670 xen-pci-passthrough PCI passthrough support for Xen
1671 brlapi BrlAPI (Braile)
1672 curl curl connectivity
1673 membarrier membarrier system call (for Linux 4.14+ or Windows)
1675 bluez bluez stack connectivity
1676 kvm KVM acceleration support
1677 hax HAX acceleration support
1678 hvf Hypervisor.framework acceleration support
1679 whpx Windows Hypervisor Platform acceleration support
1680 rdma Enable RDMA-based migration
1681 pvrdma Enable PVRDMA support
1682 vde support for vde network
1683 netmap support for netmap network
1684 linux-aio Linux AIO support
1685 cap-ng libcap-ng support
1686 attr attr and xattr support
1687 vhost-net vhost-net acceleration support
1688 vhost-crypto vhost-crypto acceleration support
1690 rbd rados block device (rbd)
1691 libiscsi iscsi support
1693 smartcard smartcard support (libcacard)
1694 libusb libusb (for usb passthrough)
1695 live-block-migration Block migration in the main migration stream
1696 usb-redir usb network redirection support
1697 lzo support of lzo compression library
1698 snappy support of snappy compression library
1699 bzip2 support of bzip2 compression library
1700 (for reading bzip2-compressed dmg images)
1701 seccomp seccomp support
1702 coroutine-pool coroutine freelist (better performance)
1703 glusterfs GlusterFS backend
1705 libssh2 ssh block device support
1706 numa libnuma support
1707 libxml2 for Parallels image format
1708 tcmalloc tcmalloc support
1709 jemalloc jemalloc support
1710 avx2 AVX2 optimization support
1711 replication replication support
1712 vhost-vsock virtio sockets device support
1713 opengl opengl support
1714 virglrenderer virgl rendering support
1715 xfsctl xfsctl support
1716 qom-cast-debug cast debugging support
1717 tools build qemu-io, qemu-nbd and qemu-image tools
1718 vxhs Veritas HyperScale vDisk backend support
1719 crypto-afalg Linux AF_ALG crypto backend driver
1720 vhost-user vhost-user support
1721 capstone capstone disassembler support
1722 debug-mutex mutex debugging support
1723 libpmem libpmem support
1725 NOTE: The object files are built at the place where configure is launched
1730 if ! has
$python; then
1731 error_exit
"Python not found. Use --python=/path/to/python"
1734 # Note that if the Python conditional here evaluates True we will exit
1735 # with status 1 which is a shell 'false' value.
1736 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1737 error_exit
"Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
1738 "Use --python=/path/to/python to specify a supported Python."
1741 # Suppress writing compiled files
1744 # Check that the C compiler works. Doing this here before testing
1745 # the host CPU ensures that we had a valid CC to autodetect the
1746 # $cpu var (and we should bail right here if that's not the case).
1747 # It also allows the help message to be printed without a CC.
1749 if compile_object
; then
1750 : C compiler works ok
1752 error_exit
"\"$cc\" either does not exist or does not work"
1754 if ! compile_prog
; then
1755 error_exit
"\"$cc\" cannot build an executable (is your linker broken?)"
1758 # Now we have handled --enable-tcg-interpreter and know we're not just
1759 # printing the help message, bail out if the host CPU isn't supported.
1760 if test "$ARCH" = "unknown"; then
1761 if test "$tcg_interpreter" = "yes" ; then
1762 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1764 error_exit
"Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1768 # Consult white-list to determine whether to enable werror
1769 # by default. Only enable by default for git builds
1770 if test -z "$werror" ; then
1771 if test -d "$source_path/.git" -a \
1772 \
( "$linux" = "yes" -o "$mingw32" = "yes" \
) ; then
1779 if test "$bogus_os" = "yes"; then
1780 # Now that we know that we're not printing the help and that
1781 # the compiler works (so the results of the check_defines we used
1782 # to identify the OS are reliable), if we didn't recognize the
1783 # host OS we should stop now.
1784 error_exit
"Unrecognized host OS (uname -s reports '$(uname -s)')"
1787 gcc_flags
="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1788 gcc_flags
="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1789 gcc_flags
="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1790 gcc_flags
="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1791 gcc_flags
="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1792 gcc_flags
="-Wno-string-plus-int $gcc_flags"
1793 gcc_flags
="-Wno-error=address-of-packed-member $gcc_flags"
1794 # Note that we do not add -Werror to gcc_flags here, because that would
1795 # enable it for all configure tests. If a configure test failed due
1796 # to -Werror this would just silently disable some features,
1797 # so it's too error prone.
1799 cc_has_warning_flag
() {
1802 # Use the positive sense of the flag when testing for -Wno-wombat
1803 # support (gcc will happily accept the -Wno- form of unknown
1805 optflag
="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1806 compile_prog
"-Werror $optflag" ""
1809 for flag
in $gcc_flags; do
1810 if cc_has_warning_flag
$flag ; then
1811 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
1815 if test "$stack_protector" != "no"; then
1817 int main(int argc, char *argv[])
1819 char arr[64], *p = arr, *c = argv[0];
1826 gcc_flags
="-fstack-protector-strong -fstack-protector-all"
1828 for flag
in $gcc_flags; do
1829 # We need to check both a compile and a link, since some compiler
1830 # setups fail only on a .c->.o compile and some only at link time
1831 if do_cc
$QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1832 compile_prog
"-Werror $flag" ""; then
1833 QEMU_CFLAGS
="$QEMU_CFLAGS $flag"
1838 if test "$stack_protector" = yes; then
1839 if test $sp_on = 0; then
1840 error_exit
"Stack protector not supported"
1845 # Disable -Wmissing-braces on older compilers that warn even for
1846 # the "universal" C zero initializer {0}.
1852 if compile_object
"-Werror" "" ; then
1855 QEMU_CFLAGS
="$QEMU_CFLAGS -Wno-missing-braces"
1858 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1859 # large functions that use global variables. The bug is in all releases of
1860 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1861 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1863 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1864 int main(void) { return 0; }
1866 #error No bug in this compiler.
1869 if compile_prog
"-Werror -fno-gcse" "" ; then
1870 TRANSLATE_OPT_CFLAGS
=-fno-gcse
1873 if test "$static" = "yes" ; then
1874 if test "$modules" = "yes" ; then
1875 error_exit
"static and modules are mutually incompatible"
1877 if test "$pie" = "yes" ; then
1878 error_exit
"static and pie are mutually incompatible"
1884 # Unconditional check for compiler __thread support
1886 static __thread int tls_var;
1887 int main(void) { return tls_var; }
1890 if ! compile_prog
"-Werror" "" ; then
1891 error_exit
"Your compiler does not support the __thread specifier for " \
1892 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1895 if test "$pie" = ""; then
1896 case "$cpu-$targetos" in
1897 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD
)
1905 if test "$pie" != "no" ; then
1909 # define THREAD __thread
1914 static THREAD int tls_var;
1916 int main(void) { return tls_var; }
1919 if compile_prog
"-fPIE -DPIE" "-pie"; then
1920 QEMU_CFLAGS
="-fPIE -DPIE $QEMU_CFLAGS"
1921 LDFLAGS
="-pie $LDFLAGS"
1923 if compile_prog
"" "-Wl,-z,relro -Wl,-z,now" ; then
1924 LDFLAGS
="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1927 if test "$pie" = "yes"; then
1928 error_exit
"PIE not available due to missing toolchain support"
1930 echo "Disabling PIE due to missing toolchain support"
1935 if compile_prog
"-Werror -fno-pie" "-nopie"; then
1936 CFLAGS_NOPIE
="-fno-pie"
1937 LDFLAGS_NOPIE
="-nopie"
1941 ##########################################
1942 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1943 # use i686 as default anyway, but for those that don't, an explicit
1944 # specification is necessary
1946 if test "$cpu" = "i386"; then
1948 static int sfaa(int *ptr)
1950 return __sync_fetch_and_and(ptr, 0);
1956 val = __sync_val_compare_and_swap(&val, 0, 1);
1961 if ! compile_prog
"" "" ; then
1962 QEMU_CFLAGS
="-march=i486 $QEMU_CFLAGS"
1966 #########################################
1967 # Solaris specific configure tool chain decisions
1969 if test "$solaris" = "yes" ; then
1970 if has
$install; then
1973 error_exit
"Solaris install program not found. Use --install=/usr/ucb/install or" \
1974 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1975 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1977 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1978 error_exit
"Solaris /usr/sbin/install is not an appropriate install program." \
1979 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1980 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1985 if test -f /usr
/ccs
/bin
/ar ; then
1986 error_exit
"No path includes ar" \
1987 "Add /usr/ccs/bin to your path and rerun configure"
1989 error_exit
"No path includes ar"
1993 if test -z "${target_list+xxx}" ; then
1994 for target
in $default_target_list; do
1995 supported_target
$target 2>/dev
/null
&& \
1996 target_list
="$target_list $target"
1998 target_list
="${target_list# }"
2000 target_list
=$
(echo "$target_list" |
sed -e 's/,/ /g')
2001 for target
in $target_list; do
2002 # Check that we recognised the target name; this allows a more
2003 # friendly error message than if we let it fall through.
2004 case " $default_target_list " in
2008 error_exit
"Unknown target name '$target'"
2011 supported_target
$target ||
exit 1
2015 # see if system emulation was really requested
2016 case " $target_list " in
2017 *"-softmmu "*) softmmu
=yes
2023 feature_not_found
() {
2027 error_exit
"User requested feature $feature" \
2028 "configure was not able to find it." \
2033 # big/little endian test
2035 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2036 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2037 extern int foo(short *, short *);
2038 int main(int argc, char *argv[]) {
2039 return foo(big_endian, little_endian);
2043 if compile_object
; then
2044 if strings -a $TMPO |
grep -q BiGeNdIaN
; then
2046 elif strings -a $TMPO |
grep -q LiTtLeEnDiAn
; then
2049 echo big
/little
test failed
2052 echo big
/little
test failed
2055 ##########################################
2056 # cocoa implies not SDL or GTK
2057 # (the cocoa UI code currently assumes it is always the active UI
2058 # and doesn't interact well with other UI frontend code)
2059 if test "$cocoa" = "yes"; then
2060 if test "$sdl" = "yes"; then
2061 error_exit
"Cocoa and SDL UIs cannot both be enabled at once"
2063 if test "$gtk" = "yes"; then
2064 error_exit
"Cocoa and GTK UIs cannot both be enabled at once"
2070 # Some versions of Mac OS X incorrectly define SIZE_MAX
2074 int main(int argc, char *argv[]) {
2075 return printf("%zu", SIZE_MAX);
2078 have_broken_size_max
=no
2079 if ! compile_object
-Werror ; then
2080 have_broken_size_max
=yes
2083 ##########################################
2087 #include <sys/socket.h>
2088 #include <linux/ip.h>
2089 int main(void) { return sizeof(struct mmsghdr); }
2091 if compile_prog
"" "" ; then
2097 ##########################################
2098 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2100 if test "$mingw32" = "yes"; then
2101 # Some versions of MinGW / Mingw-w64 lack localtime_r
2102 # and gmtime_r entirely.
2104 # Some versions of Mingw-w64 define a macro for
2105 # localtime_r/gmtime_r.
2107 # Some versions of Mingw-w64 will define functions
2108 # for localtime_r/gmtime_r, but only if you have
2109 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2110 # though, unistd.h and pthread.h both define
2113 # So this #undef localtime_r and #include <unistd.h>
2114 # are not in fact redundant.
2119 int main(void) { localtime_r(NULL, NULL); return 0; }
2121 if compile_prog
"" "" ; then
2128 ##########################################
2131 if ! has
"$pkg_config_exe"; then
2132 error_exit
"pkg-config binary '$pkg_config_exe' not found"
2135 ##########################################
2138 if test "$linux_user" = "yes"; then
2141 #include <linux/futex.h>
2143 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2149 if ! compile_object
; then
2150 feature_not_found
"nptl" "Install glibc and linux kernel headers."
2154 ##########################################
2157 if test "$lzo" != "no" ; then
2159 #include <lzo/lzo1x.h>
2160 int main(void) { lzo_version(); return 0; }
2162 if compile_prog
"" "-llzo2" ; then
2163 libs_softmmu
="$libs_softmmu -llzo2"
2166 if test "$lzo" = "yes"; then
2167 feature_not_found
"liblzo2" "Install liblzo2 devel"
2173 ##########################################
2176 if test "$snappy" != "no" ; then
2178 #include <snappy-c.h>
2179 int main(void) { snappy_max_compressed_length(4096); return 0; }
2181 if compile_prog
"" "-lsnappy" ; then
2182 libs_softmmu
="$libs_softmmu -lsnappy"
2185 if test "$snappy" = "yes"; then
2186 feature_not_found
"libsnappy" "Install libsnappy devel"
2192 ##########################################
2195 if test "$bzip2" != "no" ; then
2198 int main(void) { BZ2_bzlibVersion(); return 0; }
2200 if compile_prog
"" "-lbz2" ; then
2203 if test "$bzip2" = "yes"; then
2204 feature_not_found
"libbzip2" "Install libbzip2 devel"
2210 ##########################################
2213 libseccomp_minver
="2.2.0"
2214 if test "$seccomp" != "no" ; then
2219 libseccomp_minver
="2.2.3"
2222 libseccomp_minver
="2.3.0"
2225 libseccomp_minver
=""
2229 if test "$libseccomp_minver" != "" &&
2230 $pkg_config --atleast-version=$libseccomp_minver libseccomp
; then
2231 seccomp_cflags
="$($pkg_config --cflags libseccomp)"
2232 seccomp_libs
="$($pkg_config --libs libseccomp)"
2235 if test "$seccomp" = "yes" ; then
2236 if test "$libseccomp_minver" != "" ; then
2237 feature_not_found
"libseccomp" \
2238 "Install libseccomp devel >= $libseccomp_minver"
2240 feature_not_found
"libseccomp" \
2241 "libseccomp is not supported for host cpu $cpu"
2247 ##########################################
2250 if test "$xen" != "no" ; then
2251 # Check whether Xen library path is specified via --extra-ldflags to avoid
2252 # overriding this setting with pkg-config output. If not, try pkg-config
2253 # to obtain all needed flags.
2255 if ! echo $EXTRA_LDFLAGS |
grep tools
/libxc
> /dev
/null
&& \
2256 $pkg_config --exists xencontrol
; then
2257 xen_ctrl_version
="$(printf '%d%02d%02d' \
2258 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2260 xen_pc
="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2261 xen_pc
="$xen_pc xenevtchn xendevicemodel"
2262 if $pkg_config --exists xentoolcore
; then
2263 xen_pc
="$xen_pc xentoolcore"
2265 QEMU_CFLAGS
="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2266 libs_softmmu
="$($pkg_config --libs $xen_pc) $libs_softmmu"
2267 LDFLAGS
="$($pkg_config --libs $xen_pc) $LDFLAGS"
2270 xen_libs
="-lxenstore -lxenctrl -lxenguest"
2271 xen_stable_libs
="-lxenforeignmemory -lxengnttab -lxenevtchn"
2273 # First we test whether Xen headers and libraries are available.
2274 # If no, we are done and there is no Xen support.
2275 # If yes, more tests are run to detect the Xen version.
2279 #include <xenctrl.h>
2284 if ! compile_prog
"" "$xen_libs" ; then
2286 if test "$xen" = "yes" ; then
2287 feature_not_found
"xen" "Install xen devel"
2293 cat > $TMPC <<EOF &&
2294 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2295 #define __XEN_TOOLS__
2296 #include <xendevicemodel.h>
2297 #include <xenforeignmemory.h>
2299 xendevicemodel_handle *xd;
2300 xenforeignmemory_handle *xfmem;
2302 xd = xendevicemodel_open(0, 0);
2303 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2305 xfmem = xenforeignmemory_open(0, 0);
2306 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2311 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2313 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2314 xen_ctrl_version
=41100
2317 cat > $TMPC <<EOF &&
2318 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2319 #include <xenforeignmemory.h>
2320 #include <xentoolcore.h>
2322 xenforeignmemory_handle *xfmem;
2324 xfmem = xenforeignmemory_open(0, 0);
2325 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2326 xentoolcore_restrict_all(0);
2331 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2333 xen_stable_libs
="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2334 xen_ctrl_version
=41000
2337 cat > $TMPC <<EOF &&
2338 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2339 #define __XEN_TOOLS__
2340 #include <xendevicemodel.h>
2342 xendevicemodel_handle *xd;
2344 xd = xendevicemodel_open(0, 0);
2345 xendevicemodel_close(xd);
2350 compile_prog
"" "$xen_libs -lxendevicemodel $xen_stable_libs"
2352 xen_stable_libs
="-lxendevicemodel $xen_stable_libs"
2353 xen_ctrl_version
=40900
2356 cat > $TMPC <<EOF &&
2358 * If we have stable libs the we don't want the libxc compat
2359 * layers, regardless of what CFLAGS we may have been given.
2361 * Also, check if xengnttab_grant_copy_segment_t is defined and
2362 * grant copy operation is implemented.
2364 #undef XC_WANT_COMPAT_EVTCHN_API
2365 #undef XC_WANT_COMPAT_GNTTAB_API
2366 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2367 #include <xenctrl.h>
2368 #include <xenstore.h>
2369 #include <xenevtchn.h>
2370 #include <xengnttab.h>
2371 #include <xenforeignmemory.h>
2373 #include <xen/hvm/hvm_info_table.h>
2374 #if !defined(HVM_MAX_VCPUS)
2375 # error HVM_MAX_VCPUS not defined
2378 xc_interface *xc = NULL;
2379 xenforeignmemory_handle *xfmem;
2380 xenevtchn_handle *xe;
2381 xengnttab_handle *xg;
2382 xen_domain_handle_t handle;
2383 xengnttab_grant_copy_segment_t* seg = NULL;
2387 xc = xc_interface_open(0, 0, 0);
2388 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2389 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2390 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2391 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2392 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2394 xfmem = xenforeignmemory_open(0, 0);
2395 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2397 xe = xenevtchn_open(0, 0);
2400 xg = xengnttab_open(0, 0);
2401 xengnttab_grant_copy(xg, 0, seg);
2406 compile_prog
"" "$xen_libs $xen_stable_libs"
2408 xen_ctrl_version
=40800
2411 cat > $TMPC <<EOF &&
2413 * If we have stable libs the we don't want the libxc compat
2414 * layers, regardless of what CFLAGS we may have been given.
2416 #undef XC_WANT_COMPAT_EVTCHN_API
2417 #undef XC_WANT_COMPAT_GNTTAB_API
2418 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2419 #include <xenctrl.h>
2420 #include <xenstore.h>
2421 #include <xenevtchn.h>
2422 #include <xengnttab.h>
2423 #include <xenforeignmemory.h>
2425 #include <xen/hvm/hvm_info_table.h>
2426 #if !defined(HVM_MAX_VCPUS)
2427 # error HVM_MAX_VCPUS not defined
2430 xc_interface *xc = NULL;
2431 xenforeignmemory_handle *xfmem;
2432 xenevtchn_handle *xe;
2433 xengnttab_handle *xg;
2434 xen_domain_handle_t handle;
2438 xc = xc_interface_open(0, 0, 0);
2439 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2440 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2441 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2442 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2443 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2445 xfmem = xenforeignmemory_open(0, 0);
2446 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2448 xe = xenevtchn_open(0, 0);
2451 xg = xengnttab_open(0, 0);
2452 xengnttab_map_grant_ref(xg, 0, 0, 0);
2457 compile_prog
"" "$xen_libs $xen_stable_libs"
2459 xen_ctrl_version
=40701
2462 cat > $TMPC <<EOF &&
2463 #include <xenctrl.h>
2466 xc_interface *xc = NULL;
2467 xen_domain_handle_t handle;
2468 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2472 compile_prog
"" "$xen_libs"
2474 xen_ctrl_version
=40700
2479 cat > $TMPC <<EOF &&
2480 #include <xenctrl.h>
2481 #include <xenstore.h>
2483 #include <xen/hvm/hvm_info_table.h>
2484 #if !defined(HVM_MAX_VCPUS)
2485 # error HVM_MAX_VCPUS not defined
2490 xc = xc_interface_open(0, 0, 0);
2491 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2492 xc_gnttab_open(NULL, 0);
2493 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2494 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2495 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2496 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2500 compile_prog
"" "$xen_libs"
2502 xen_ctrl_version
=40600
2507 cat > $TMPC <<EOF &&
2508 #include <xenctrl.h>
2509 #include <xenstore.h>
2511 #include <xen/hvm/hvm_info_table.h>
2512 #if !defined(HVM_MAX_VCPUS)
2513 # error HVM_MAX_VCPUS not defined
2518 xc = xc_interface_open(0, 0, 0);
2519 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2520 xc_gnttab_open(NULL, 0);
2521 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2522 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2523 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2527 compile_prog
"" "$xen_libs"
2529 xen_ctrl_version
=40500
2533 cat > $TMPC <<EOF &&
2534 #include <xenctrl.h>
2535 #include <xenstore.h>
2537 #include <xen/hvm/hvm_info_table.h>
2538 #if !defined(HVM_MAX_VCPUS)
2539 # error HVM_MAX_VCPUS not defined
2544 xc = xc_interface_open(0, 0, 0);
2545 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2546 xc_gnttab_open(NULL, 0);
2547 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2548 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2552 compile_prog
"" "$xen_libs"
2554 xen_ctrl_version
=40200
2558 if test "$xen" = "yes" ; then
2559 feature_not_found
"xen (unsupported version)" \
2560 "Install a supported xen (xen 4.2 or newer)"
2565 if test "$xen" = yes; then
2566 if test $xen_ctrl_version -ge 40701 ; then
2567 libs_softmmu
="$xen_stable_libs $libs_softmmu"
2569 libs_softmmu
="$xen_libs $libs_softmmu"
2574 if test "$xen_pci_passthrough" != "no"; then
2575 if test "$xen" = "yes" && test "$linux" = "yes"; then
2576 xen_pci_passthrough
=yes
2578 if test "$xen_pci_passthrough" = "yes"; then
2579 error_exit
"User requested feature Xen PCI Passthrough" \
2580 " but this feature requires /sys from Linux"
2582 xen_pci_passthrough
=no
2586 if test "$xen_pv_domain_build" = "yes" &&
2587 test "$xen" != "yes"; then
2588 error_exit
"User requested Xen PV domain builder support" \
2589 "which requires Xen support."
2592 ##########################################
2593 # Windows Hypervisor Platform accelerator (WHPX) check
2594 if test "$whpx" != "no" ; then
2595 if check_include
"WinHvPlatform.h" && check_include
"WinHvEmulation.h"; then
2598 if test "$whpx" = "yes"; then
2599 feature_not_found
"WinHvPlatform" "WinHvEmulation is not installed"
2605 ##########################################
2607 if test "$sparse" != "no" ; then
2611 if test "$sparse" = "yes" ; then
2612 feature_not_found
"sparse" "Install sparse binary"
2618 ##########################################
2620 if $pkg_config --exists "x11"; then
2622 x11_cflags
=$
($pkg_config --cflags x11
)
2623 x11_libs
=$
($pkg_config --libs x11
)
2626 ##########################################
2629 if test "$gtk" != "no"; then
2630 gtkpackage
="gtk+-3.0"
2631 gtkx11package
="gtk+-x11-3.0"
2633 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2634 gtk_cflags
=$
($pkg_config --cflags $gtkpackage)
2635 gtk_libs
=$
($pkg_config --libs $gtkpackage)
2636 gtk_version
=$
($pkg_config --modversion $gtkpackage)
2637 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2639 gtk_cflags
="$gtk_cflags $x11_cflags"
2640 gtk_libs
="$gtk_libs $x11_libs"
2643 elif test "$gtk" = "yes"; then
2644 feature_not_found
"gtk" "Install gtk3-devel"
2651 ##########################################
2654 if test "$gnutls" != "no"; then
2655 if $pkg_config --exists "gnutls >= 3.1.18"; then
2656 gnutls_cflags
=$
($pkg_config --cflags gnutls
)
2657 gnutls_libs
=$
($pkg_config --libs gnutls
)
2658 libs_softmmu
="$gnutls_libs $libs_softmmu"
2659 libs_tools
="$gnutls_libs $libs_tools"
2660 QEMU_CFLAGS
="$QEMU_CFLAGS $gnutls_cflags"
2662 elif test "$gnutls" = "yes"; then
2663 feature_not_found
"gnutls" "Install gnutls devel >= 3.1.18"
2670 # If user didn't give a --disable/enable-gcrypt flag,
2671 # then mark as disabled if user requested nettle
2673 if test -z "$gcrypt"
2675 if test "$nettle" = "yes"
2681 # If user didn't give a --disable/enable-nettle flag,
2682 # then mark as disabled if user requested gcrypt
2684 if test -z "$nettle"
2686 if test "$gcrypt" = "yes"
2693 if ! has
"libgcrypt-config"
2698 if test -n "$cross_prefix"
2700 host=$
(libgcrypt-config
--host)
2701 if test "$host-" != $cross_prefix
2707 maj
=`libgcrypt-config --version | awk -F . '{print $1}'`
2708 min
=`libgcrypt-config --version | awk -F . '{print $2}'`
2710 if test $maj != 1 ||
test $min -lt 5
2719 if test "$nettle" != "no"; then
2720 if $pkg_config --exists "nettle >= 2.7.1"; then
2721 nettle_cflags
=$
($pkg_config --cflags nettle
)
2722 nettle_libs
=$
($pkg_config --libs nettle
)
2723 nettle_version
=$
($pkg_config --modversion nettle
)
2724 libs_softmmu
="$nettle_libs $libs_softmmu"
2725 libs_tools
="$nettle_libs $libs_tools"
2726 QEMU_CFLAGS
="$QEMU_CFLAGS $nettle_cflags"
2729 if test -z "$gcrypt"; then
2733 if test "$nettle" = "yes"; then
2734 feature_not_found
"nettle" "Install nettle devel >= 2.7.1"
2741 if test "$gcrypt" != "no"; then
2742 if has_libgcrypt
; then
2743 gcrypt_cflags
=$
(libgcrypt-config
--cflags)
2744 gcrypt_libs
=$
(libgcrypt-config
--libs)
2745 # Debian has remove -lgpg-error from libgcrypt-config
2746 # as it "spreads unnecessary dependencies" which in
2747 # turn breaks static builds...
2748 if test "$static" = "yes"
2750 gcrypt_libs
="$gcrypt_libs -lgpg-error"
2752 libs_softmmu
="$gcrypt_libs $libs_softmmu"
2753 libs_tools
="$gcrypt_libs $libs_tools"
2754 QEMU_CFLAGS
="$QEMU_CFLAGS $gcrypt_cflags"
2760 gcry_mac_hd_t handle;
2761 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2762 GCRY_MAC_FLAG_SECURE, NULL);
2766 if compile_prog
"$gcrypt_cflags" "$gcrypt_libs" ; then
2770 if test "$gcrypt" = "yes"; then
2771 feature_not_found
"gcrypt" "Install gcrypt devel >= 1.5.0"
2779 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2781 error_exit
"Only one of gcrypt & nettle can be enabled"
2784 ##########################################
2785 # libtasn1 - only for the TLS creds/session test suite
2790 if $pkg_config --exists "libtasn1"; then
2791 tasn1_cflags
=$
($pkg_config --cflags libtasn1
)
2792 tasn1_libs
=$
($pkg_config --libs libtasn1
)
2798 ##########################################
2799 # getifaddrs (for tests/test-io-channel-socket )
2802 if ! check_include
"ifaddrs.h" ; then
2806 ##########################################
2809 if test "$vte" != "no"; then
2810 vteminversion
="0.32.0"
2811 if $pkg_config --exists "vte-2.91"; then
2812 vtepackage
="vte-2.91"
2814 vtepackage
="vte-2.90"
2816 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2817 vte_cflags
=$
($pkg_config --cflags $vtepackage)
2818 vte_libs
=$
($pkg_config --libs $vtepackage)
2819 vteversion
=$
($pkg_config --modversion $vtepackage)
2821 elif test "$vte" = "yes"; then
2822 feature_not_found
"vte" "Install libvte-2.90/2.91 devel"
2828 ##########################################
2831 # Look for sdl configuration program (pkg-config or sdl-config). Try
2832 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2837 if test "$sdlabi" = ""; then
2838 if $pkg_config --exists "sdl2"; then
2840 elif $pkg_config --exists "sdl"; then
2847 if test $sdlabi = "2.0"; then
2848 sdl_config
=$sdl2_config
2850 sdlconfigname
=sdl2_config
2851 elif test $sdlabi = "1.2"; then
2853 sdlconfigname
=sdl_config
2855 error_exit
"Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2858 if test "$(basename $sdl_config)" != $sdlconfigname && ! has
${sdl_config}; then
2859 sdl_config
=$sdlconfigname
2862 if $pkg_config $sdlname --exists; then
2863 sdlconfig
="$pkg_config $sdlname"
2864 sdlversion
=$
($sdlconfig --modversion 2>/dev
/null
)
2865 elif has
${sdl_config}; then
2866 sdlconfig
="$sdl_config"
2867 sdlversion
=$
($sdlconfig --version)
2869 if test "$sdl" = "yes" ; then
2870 feature_not_found
"sdl" "Install SDL2-devel"
2873 # no need to do the rest
2876 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config
; then
2877 echo warning
: using
"\"$sdlconfig\"" to detect cross-compiled sdl
>&2
2882 #undef main /* We don't want SDL to override our main() */
2883 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2885 sdl_cflags
=$
($sdlconfig --cflags 2>/dev
/null
)
2886 sdl_cflags
="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
2887 if test "$static" = "yes" ; then
2888 if $pkg_config $sdlname --exists; then
2889 sdl_libs
=$
($pkg_config $sdlname --static --libs 2>/dev
/null
)
2891 sdl_libs
=$
($sdlconfig --static-libs 2>/dev
/null
)
2894 sdl_libs
=$
($sdlconfig --libs 2>/dev
/null
)
2896 if compile_prog
"$sdl_cflags" "$sdl_libs" ; then
2897 if test $
(echo $sdlversion |
sed 's/[^0-9]//g') -lt 121 ; then
2903 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2904 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2905 if test $?
= 0 && echo $sdl_libs |
grep -- -laa > /dev
/null
; then
2906 sdl_libs
="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2907 sdl_cflags
="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2909 if compile_prog
"$sdl_cflags" "$sdl_libs" ; then
2915 else # sdl not found
2916 if test "$sdl" = "yes" ; then
2917 feature_not_found
"sdl" "Install SDL devel"
2920 fi # sdl compile test
2923 if test "$sdl" != "no" ; then
2927 if test "$sdl" = "yes" ; then
2930 #if defined(SDL_VIDEO_DRIVER_X11)
2931 #include <X11/XKBlib.h>
2933 #error No x11 support
2935 int main(void) { return 0; }
2937 if compile_prog
"$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2939 sdl_cflags
="$sdl_cflags $x11_cflags"
2940 sdl_libs
="$sdl_libs $x11_libs"
2944 ##########################################
2945 # RDMA needs OpenFabrics libraries
2946 if test "$rdma" != "no" ; then
2948 #include <rdma/rdma_cma.h>
2949 int main(void) { return 0; }
2951 rdma_libs
="-lrdmacm -libverbs -libumad"
2952 if compile_prog
"" "$rdma_libs" ; then
2954 libs_softmmu
="$libs_softmmu $rdma_libs"
2956 if test "$rdma" = "yes" ; then
2958 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2960 " (1) Fast: Install infiniband packages (devel) from your distro." \
2961 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2962 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2968 ##########################################
2971 cat > $TMPC <<EOF &&
2972 #include <sys/mman.h>
2979 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2985 if test "$rdma" = "yes" ; then
2988 if compile_prog
"" ""; then
2995 if ! compile_prog
"" ""; then
2996 error_exit
"PVRDMA is not supported since mremap is not implemented"
3005 if test "$pvrdma" = "yes" ; then
3006 error_exit
"PVRDMA requires rdma suppport"
3011 ##########################################
3012 # VNC SASL detection
3013 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
3015 #include <sasl/sasl.h>
3017 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3019 # Assuming Cyrus-SASL installed in /usr prefix
3021 vnc_sasl_libs
="-lsasl2"
3022 if compile_prog
"$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3024 libs_softmmu
="$vnc_sasl_libs $libs_softmmu"
3025 QEMU_CFLAGS
="$QEMU_CFLAGS $vnc_sasl_cflags"
3027 if test "$vnc_sasl" = "yes" ; then
3028 feature_not_found
"vnc-sasl" "Install Cyrus SASL devel"
3034 ##########################################
3035 # VNC JPEG detection
3036 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
3039 #include <jpeglib.h>
3040 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3043 vnc_jpeg_libs
="-ljpeg"
3044 if compile_prog
"$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3046 libs_softmmu
="$vnc_jpeg_libs $libs_softmmu"
3047 QEMU_CFLAGS
="$QEMU_CFLAGS $vnc_jpeg_cflags"
3049 if test "$vnc_jpeg" = "yes" ; then
3050 feature_not_found
"vnc-jpeg" "Install libjpeg-turbo devel"
3056 ##########################################
3058 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
3060 //#include <stdio.h>
3064 png_structp png_ptr;
3065 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3066 return png_ptr != 0;
3069 if $pkg_config libpng
--exists; then
3070 vnc_png_cflags
=$
($pkg_config libpng
--cflags)
3071 vnc_png_libs
=$
($pkg_config libpng
--libs)
3074 vnc_png_libs
="-lpng"
3076 if compile_prog
"$vnc_png_cflags" "$vnc_png_libs" ; then
3078 libs_softmmu
="$vnc_png_libs $libs_softmmu"
3079 QEMU_CFLAGS
="$QEMU_CFLAGS $vnc_png_cflags"
3081 if test "$vnc_png" = "yes" ; then
3082 feature_not_found
"vnc-png" "Install libpng devel"
3088 ##########################################
3090 if test "$xkbcommon" != "no" ; then
3091 if $pkg_config xkbcommon
--exists; then
3092 xkbcommon_cflags
=$
($pkg_config xkbcommon
--cflags)
3093 xkbcommon_libs
=$
($pkg_config xkbcommon
--libs)
3096 if test "$xkbcommon" = "yes" ; then
3097 feature_not_found
"xkbcommon" "Install libxkbcommon-devel"
3103 ##########################################
3104 # fnmatch() probe, used for ACL routines
3107 #include <fnmatch.h>
3110 fnmatch("foo", "foo", 0);
3114 if compile_prog
"" "" ; then
3118 ##########################################
3119 # xfsctl() probe, used for file-posix.c
3120 if test "$xfs" != "no" ; then
3122 #include <stddef.h> /* NULL */
3123 #include <xfs/xfs.h>
3126 xfsctl(NULL, 0, 0, NULL);
3130 if compile_prog
"" "" ; then
3133 if test "$xfs" = "yes" ; then
3134 feature_not_found
"xfs" "Instal xfsprogs/xfslibs devel"
3140 ##########################################
3141 # vde libraries probe
3142 if test "$vde" != "no" ; then
3143 vde_libs
="-lvdeplug"
3145 #include <libvdeplug.h>
3148 struct vde_open_args a = {0, 0, 0};
3154 if compile_prog
"" "$vde_libs" ; then
3157 if test "$vde" = "yes" ; then
3158 feature_not_found
"vde" "Install vde (Virtual Distributed Ethernet) devel"
3164 ##########################################
3165 # netmap support probe
3166 # Apart from looking for netmap headers, we make sure that the host API version
3167 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3168 # a minor/major version number. Minor new features will be marked with values up
3169 # to 15, and if something happens that requires a change to the backend we will
3170 # move above 15, submit the backend fixes and modify this two bounds.
3171 if test "$netmap" != "no" ; then
3173 #include <inttypes.h>
3175 #include <net/netmap.h>
3176 #include <net/netmap_user.h>
3177 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3180 int main(void) { return 0; }
3182 if compile_prog
"" "" ; then
3185 if test "$netmap" = "yes" ; then
3186 feature_not_found
"netmap"
3192 ##########################################
3193 # libcap-ng library probe
3194 if test "$cap_ng" != "no" ; then
3200 capng_capability_to_name(CAPNG_EFFECTIVE);
3204 if compile_prog
"" "$cap_libs" ; then
3206 libs_tools
="$cap_libs $libs_tools"
3208 if test "$cap_ng" = "yes" ; then
3209 feature_not_found
"cap_ng" "Install libcap-ng devel"
3215 ##########################################
3216 # Sound support libraries probe
3227 int main(void) { $exp }
3229 if compile_prog
"$cfl" "$lib" ; then
3232 error_exit
"$drv check failed" \
3233 "Make sure to have the $drv libs and headers installed."
3237 audio_drv_list
=$
(echo "$audio_drv_list" |
sed -e 's/,/ /g')
3238 for drv
in $audio_drv_list; do
3241 audio_drv_probe
$drv alsa
/asoundlib.h
-lasound \
3242 "return snd_pcm_close((snd_pcm_t *)0);"
3243 alsa_libs
="-lasound"
3247 audio_drv_probe
$drv pulse
/pulseaudio.h
"-lpulse" \
3248 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3249 pulse_libs
="-lpulse"
3254 if test "$sdl" = "no"; then
3255 error_exit
"sdl not found or disabled, can not use sdl audio driver"
3260 coreaudio_libs
="-framework CoreAudio"
3264 dsound_libs
="-lole32 -ldxguid"
3273 # XXX: Probes for CoreAudio, DirectSound
3277 echo "$audio_possible_drivers" |
grep -q "\<$drv\>" ||
{
3278 error_exit
"Unknown driver '$drv' selected" \
3279 "Possible drivers are: $audio_possible_drivers"
3285 ##########################################
3288 if test "$brlapi" != "no" ; then
3289 brlapi_libs
="-lbrlapi"
3293 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3295 if compile_prog
"" "$brlapi_libs" ; then
3298 if test "$brlapi" = "yes" ; then
3299 feature_not_found
"brlapi" "Install brlapi devel"
3305 ##########################################
3307 if test "$curses" != "no" ; then
3308 if test "$mingw32" = "yes" ; then
3309 curses_inc_list
="$($pkg_config --cflags ncurses 2>/dev/null):"
3310 curses_lib_list
="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3312 curses_inc_list
="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3313 curses_lib_list
="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3322 setlocale(LC_ALL, "");
3324 addwstr(L"wide chars\n");
3326 add_wch(WACS_DEGREE);
3331 for curses_inc
in $curses_inc_list; do
3332 # Make sure we get the wide character prototypes
3333 curses_inc
="-DNCURSES_WIDECHAR $curses_inc"
3335 for curses_lib
in $curses_lib_list; do
3337 if compile_prog
"$curses_inc" "$curses_lib" ; then
3342 if test "$curses_found" = yes ; then
3347 if test "$curses_found" = "yes" ; then
3350 if test "$curses" = "yes" ; then
3351 feature_not_found
"curses" "Install ncurses devel"
3357 ##########################################
3359 if test "$curl" != "no" ; then
3360 if $pkg_config libcurl
--exists; then
3361 curlconfig
="$pkg_config libcurl"
3363 curlconfig
=curl-config
3366 #include <curl/curl.h>
3367 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3369 curl_cflags
=$
($curlconfig --cflags 2>/dev
/null
)
3370 curl_libs
=$
($curlconfig --libs 2>/dev
/null
)
3371 if compile_prog
"$curl_cflags" "$curl_libs" ; then
3374 if test "$curl" = "yes" ; then
3375 feature_not_found
"curl" "Install libcurl devel"
3381 ##########################################
3382 # bluez support probe
3383 if test "$bluez" != "no" ; then
3385 #include <bluetooth/bluetooth.h>
3386 int main(void) { return bt_error(0); }
3388 bluez_cflags
=$
($pkg_config --cflags bluez
2>/dev
/null
)
3389 bluez_libs
=$
($pkg_config --libs bluez
2>/dev
/null
)
3390 if compile_prog
"$bluez_cflags" "$bluez_libs" ; then
3392 libs_softmmu
="$bluez_libs $libs_softmmu"
3394 if test "$bluez" = "yes" ; then
3395 feature_not_found
"bluez" "Install bluez-libs/libbluetooth devel"
3401 ##########################################
3402 # glib support probe
3405 glib_modules
=gthread-2.0
3406 if test "$modules" = yes; then
3407 glib_modules
="$glib_modules gmodule-export-2.0"
3410 # This workaround is required due to a bug in pkg-config file for glib as it
3411 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3413 if test "$static" = yes -a "$mingw32" = yes; then
3414 QEMU_CFLAGS
="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3417 for i
in $glib_modules; do
3418 if $pkg_config --atleast-version=$glib_req_ver $i; then
3419 glib_cflags
=$
($pkg_config --cflags $i)
3420 glib_libs
=$
($pkg_config --libs $i)
3421 QEMU_CFLAGS
="$glib_cflags $QEMU_CFLAGS"
3422 LIBS
="$glib_libs $LIBS"
3423 libs_qga
="$glib_libs $libs_qga"
3425 error_exit
"glib-$glib_req_ver $i is required to compile QEMU"
3429 # Sanity check that the current size_t matches the
3430 # size that glib thinks it should be. This catches
3431 # problems on multi-arch where people try to build
3432 # 32-bit QEMU while pointing at 64-bit glib headers
3437 #define QEMU_BUILD_BUG_ON(x) \
3438 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3441 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3446 if ! compile_prog
"$CFLAGS" "$LIBS" ; then
3447 error_exit
"sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3448 "You probably need to set PKG_CONFIG_LIBDIR"\
3449 "to point to the right pkg-config files for your"\
3453 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3456 int main(void) { return 0; }
3458 if ! compile_prog
"$glib_cflags -Werror" "$glib_libs" ; then
3459 if cc_has_warning_flag
"-Wno-unknown-attributes"; then
3460 glib_cflags
="-Wno-unknown-attributes $glib_cflags"
3461 CFLAGS
="-Wno-unknown-attributes $CFLAGS"
3465 #########################################
3468 if test "$zlib" != "no" ; then
3469 if $pkg_config --exists zlib
; then
3470 zlib_cflags
=$
($pkg_config --cflags zlib
)
3471 zlib_libs
=$
($pkg_config --libs zlib
)
3472 QEMU_CFLAGS
="$zlib_cflags $QEMU_CFLAGS"
3473 LIBS
="$zlib_libs $LIBS"
3477 int main(void) { zlibVersion(); return 0; }
3479 if compile_prog
"" "-lz" ; then
3482 error_exit
"zlib check failed" \
3483 "Make sure to have the zlib libs and headers installed."
3488 ##########################################
3489 # SHA command probe for modules
3490 if test "$modules" = yes; then
3491 shacmd_probe
="sha1sum sha1 shasum"
3492 for c
in $shacmd_probe; do
3498 if test "$shacmd" = ""; then
3499 error_exit
"one of the checksum commands is required to enable modules: $shacmd_probe"
3503 ##########################################
3504 # pixman support probe
3506 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3509 elif $pkg_config --atleast-version=0.21.8 pixman-1
> /dev
/null
2>&1; then
3510 pixman_cflags
=$
($pkg_config --cflags pixman-1
)
3511 pixman_libs
=$
($pkg_config --libs pixman-1
)
3513 error_exit
"pixman >= 0.21.8 not present." \
3514 "Please install the pixman devel package."
3517 ##########################################
3518 # libmpathpersist probe
3520 if test "$mpath" != "no" ; then
3521 # probe for the new API
3523 #include <libudev.h>
3524 #include <mpath_persist.h>
3525 unsigned mpath_mx_alloc_len = 1024;
3527 static struct config *multipath_conf;
3528 extern struct udev *udev;
3529 extern struct config *get_multipath_config(void);
3530 extern void put_multipath_config(struct config *conf);
3532 struct config *get_multipath_config(void) { return multipath_conf; }
3533 void put_multipath_config(struct config *conf) { }
3537 multipath_conf = mpath_lib_init();
3541 if compile_prog
"" "-ludev -lmultipath -lmpathpersist" ; then
3543 mpathpersist_new_api
=yes
3545 # probe for the old API
3547 #include <libudev.h>
3548 #include <mpath_persist.h>
3549 unsigned mpath_mx_alloc_len = 1024;
3552 struct udev *udev = udev_new();
3553 mpath_lib_init(udev);
3557 if compile_prog
"" "-ludev -lmultipath -lmpathpersist" ; then
3559 mpathpersist_new_api
=no
3568 ##########################################
3571 if test "$cap" != "no" ; then
3574 #include <sys/capability.h>
3575 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3577 if compile_prog
"" "-lcap" ; then
3584 ##########################################
3586 PTHREADLIBS_LIST
="-pthread -lpthread -lpthreadGC2"
3590 #include <pthread.h>
3591 static void *f(void *p) { return NULL; }
3594 pthread_create(&thread, 0, f, 0);
3598 if compile_prog
"" "" ; then
3601 for pthread_lib
in $PTHREADLIBS_LIST; do
3602 if compile_prog
"" "$pthread_lib" ; then
3605 for lib_entry
in $LIBS; do
3606 if test "$lib_entry" = "$pthread_lib"; then
3611 if test "$found" = "no"; then
3612 LIBS
="$pthread_lib $LIBS"
3613 libs_qga
="$pthread_lib $libs_qga"
3615 PTHREAD_LIB
="$pthread_lib"
3621 if test "$mingw32" != yes -a "$pthread" = no
; then
3622 error_exit
"pthread check failed" \
3623 "Make sure to have the pthread libs and headers installed."
3626 # check for pthread_setname_np
3627 pthread_setname_np
=no
3629 #include <pthread.h>
3631 static void *f(void *p) { return NULL; }
3635 pthread_create(&thread, 0, f, 0);
3636 pthread_setname_np(thread, "QEMU");
3640 if compile_prog
"" "$pthread_lib" ; then
3641 pthread_setname_np
=yes
3644 ##########################################
3646 if test "$rbd" != "no" ; then
3649 #include <rbd/librbd.h>
3652 rados_create(&cluster, NULL);
3656 rbd_libs
="-lrbd -lrados"
3657 if compile_prog
"" "$rbd_libs" ; then
3660 if test "$rbd" = "yes" ; then
3661 feature_not_found
"rados block device" "Install librbd/ceph devel"
3667 ##########################################
3669 min_libssh2_version
=1.2.8
3670 if test "$libssh2" != "no" ; then
3671 if $pkg_config --atleast-version=$min_libssh2_version libssh2
; then
3672 libssh2_cflags
=$
($pkg_config libssh2
--cflags)
3673 libssh2_libs
=$
($pkg_config libssh2
--libs)
3676 if test "$libssh2" = "yes" ; then
3677 error_exit
"libssh2 >= $min_libssh2_version required for --enable-libssh2"
3683 ##########################################
3684 # libssh2_sftp_fsync probe
3686 if test "$libssh2" = "yes"; then
3689 #include <libssh2.h>
3690 #include <libssh2_sftp.h>
3692 LIBSSH2_SESSION *session;
3694 LIBSSH2_SFTP_HANDLE *sftp_handle;
3695 session = libssh2_session_init ();
3696 sftp = libssh2_sftp_init (session);
3697 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3698 libssh2_sftp_fsync (sftp_handle);
3702 # libssh2_cflags/libssh2_libs defined in previous test.
3703 if compile_prog
"$libssh2_cflags" "$libssh2_libs" ; then
3704 QEMU_CFLAGS
="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3708 ##########################################
3711 if test "$linux_aio" != "no" ; then
3714 #include <sys/eventfd.h>
3716 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3718 if compile_prog
"" "-laio" ; then
3721 if test "$linux_aio" = "yes" ; then
3722 feature_not_found
"linux AIO" "Install libaio devel"
3728 ##########################################
3729 # TPM passthrough is only on x86 Linux
3731 if test "$targetos" = Linux
&& test "$cpu" = i386
-o "$cpu" = x86_64
; then
3732 tpm_passthrough
=$tpm
3737 # TPM emulator is for all posix systems
3738 if test "$mingw32" != "yes"; then
3743 ##########################################
3746 if test "$attr" != "no" ; then
3749 #include <sys/types.h>
3750 #ifdef CONFIG_LIBATTR
3751 #include <attr/xattr.h>
3753 #include <sys/xattr.h>
3755 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3757 if compile_prog
"" "" ; then
3759 # Older distros have <attr/xattr.h>, and need -lattr:
3760 elif compile_prog
"-DCONFIG_LIBATTR" "-lattr" ; then
3765 if test "$attr" = "yes" ; then
3766 feature_not_found
"ATTR" "Install libc6 or libattr devel"
3772 ##########################################
3775 #include <sys/types.h>
3776 #include <sys/uio.h>
3778 int main(void) { return sizeof(struct iovec); }
3781 if compile_prog
"" "" ; then
3785 ##########################################
3788 #include <sys/types.h>
3789 #include <sys/uio.h>
3791 int main(void) { return preadv(0, 0, 0, 0); }
3794 if compile_prog
"" "" ; then
3798 ##########################################
3800 # fdt support is mandatory for at least some target architectures,
3801 # so insist on it if we're building those system emulators.
3803 for target
in $target_list; do
3805 aarch64
*-softmmu|arm
*-softmmu|ppc
*-softmmu|microblaze
*-softmmu|mips64el-softmmu|riscv
*-softmmu)
3811 if test "$fdt_required" = "yes"; then
3812 if test "$fdt" = "no"; then
3813 error_exit
"fdt disabled but some requested targets require it." \
3814 "You can turn off fdt only if you also disable all the system emulation" \
3815 "targets which need it (by specifying a cut down --target-list)."
3820 if test "$fdt" != "no" ; then
3822 # explicitly check for libfdt_env.h as it is missing in some stable installs
3823 # and test for required functions to make sure we are on a version >= 1.4.2
3826 #include <libfdt_env.h>
3827 int main(void) { fdt_first_subnode(0, 0); return 0; }
3829 if compile_prog
"" "$fdt_libs" ; then
3830 # system DTC is good - use it
3833 # have GIT checkout, so activate dtc submodule
3834 if test -e "${source_path}/.git" ; then
3835 git_submodules
="${git_submodules} dtc"
3837 if test -d "${source_path}/dtc/libfdt" ||
test -e "${source_path}/.git" ; then
3840 if [ "$pwd_is_source_path" != "y" ] ; then
3841 symlink
"$source_path/dtc/Makefile" "dtc/Makefile"
3842 symlink
"$source_path/dtc/scripts" "dtc/scripts"
3844 fdt_cflags
="-I\$(SRC_PATH)/dtc/libfdt"
3845 fdt_ldflags
="-L\$(BUILD_DIR)/dtc/libfdt"
3846 fdt_libs
="$fdt_libs"
3847 elif test "$fdt" = "yes" ; then
3848 # Not a git build & no libfdt found, prompt for system install
3849 error_exit
"DTC (libfdt) version >= 1.4.2 not present." \
3850 "Please install the DTC (libfdt) devel package"
3852 # don't have and don't want
3859 libs_softmmu
="$libs_softmmu $fdt_libs"
3861 ##########################################
3862 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3864 if test "$opengl" != "no" ; then
3865 opengl_pkgs
="epoxy gbm"
3866 if $pkg_config $opengl_pkgs; then
3867 opengl_cflags
="$($pkg_config --cflags $opengl_pkgs)"
3868 opengl_libs
="$($pkg_config --libs $opengl_pkgs)"
3870 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3873 QEMU_CFLAGS
="$QEMU_CFLAGS $opengl_cflags"
3875 if test "$opengl" = "yes" ; then
3876 feature_not_found
"opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3884 if test "$opengl" = "yes"; then
3886 #include <epoxy/egl.h>
3887 #ifndef EGL_MESA_image_dma_buf_export
3888 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3890 int main(void) { return 0; }
3892 if compile_prog
"" "" ; then
3897 ##########################################
3899 if test "$libxml2" != "no" ; then
3900 if $pkg_config --exists libxml-2.0
; then
3902 libxml2_cflags
=$
($pkg_config --cflags libxml-2.0
)
3903 libxml2_libs
=$
($pkg_config --libs libxml-2.0
)
3905 if test "$libxml2" = "yes"; then
3906 feature_not_found
"libxml2" "Install libxml2 devel"
3912 ##########################################
3914 if test "$glusterfs" != "no" ; then
3915 if $pkg_config --atleast-version=3 glusterfs-api
; then
3917 glusterfs_cflags
=$
($pkg_config --cflags glusterfs-api
)
3918 glusterfs_libs
=$
($pkg_config --libs glusterfs-api
)
3919 if $pkg_config --atleast-version=4 glusterfs-api
; then
3920 glusterfs_xlator_opt
="yes"
3922 if $pkg_config --atleast-version=5 glusterfs-api
; then
3923 glusterfs_discard
="yes"
3925 if $pkg_config --atleast-version=6 glusterfs-api
; then
3926 glusterfs_fallocate
="yes"
3927 glusterfs_zerofill
="yes"
3930 if test "$glusterfs" = "yes" ; then
3931 feature_not_found
"GlusterFS backend support" \
3932 "Install glusterfs-api devel >= 3"
3938 # Check for inotify functions when we are building linux-user
3939 # emulator. This is done because older glibc versions don't
3940 # have syscall stubs for these implemented. In that case we
3941 # don't provide them even if kernel supports them.
3945 #include <sys/inotify.h>
3950 /* try to start inotify */
3951 return inotify_init();
3954 if compile_prog
"" "" ; then
3960 #include <sys/inotify.h>
3965 /* try to start inotify */
3966 return inotify_init1(0);
3969 if compile_prog
"" "" ; then
3973 # check if pipe2 is there
3982 return pipe2(pipefd, O_CLOEXEC);
3985 if compile_prog
"" "" ; then
3989 # check if accept4 is there
3992 #include <sys/socket.h>
3997 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4001 if compile_prog
"" "" ; then
4005 # check if tee/splice is there. vmsplice was added same time.
4015 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4016 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4020 if compile_prog
"" "" ; then
4024 ##########################################
4027 if test "$numa" != "no" ; then
4030 int main(void) { return numa_available(); }
4033 if compile_prog
"" "-lnuma" ; then
4035 libs_softmmu
="-lnuma $libs_softmmu"
4037 if test "$numa" = "yes" ; then
4038 feature_not_found
"numa" "install numactl devel"
4044 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4045 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4049 # Even if malloc_trim() is available, these non-libc memory allocators
4050 # do not support it.
4051 if test "$tcmalloc" = "yes" ||
test "$jemalloc" = "yes" ; then
4052 if test "$malloc_trim" = "yes" ; then
4053 echo "Disabling malloc_trim with non-libc memory allocator"
4058 #######################################
4061 if test "$malloc_trim" != "no" ; then
4064 int main(void) { malloc_trim(0); return 0; }
4066 if compile_prog
"" "" ; then
4073 ##########################################
4076 if test "$tcmalloc" = "yes" ; then
4079 int main(void) { malloc(1); return 0; }
4082 if compile_prog
"" "-ltcmalloc" ; then
4083 LIBS
="-ltcmalloc $LIBS"
4085 feature_not_found
"tcmalloc" "install gperftools devel"
4089 ##########################################
4092 if test "$jemalloc" = "yes" ; then
4095 int main(void) { malloc(1); return 0; }
4098 if compile_prog
"" "-ljemalloc" ; then
4099 LIBS
="-ljemalloc $LIBS"
4101 feature_not_found
"jemalloc" "install jemalloc devel"
4105 ##########################################
4110 #include <sys/syscall.h>
4112 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4115 if compile_prog
"" "" ; then
4119 # check if eventfd is supported
4122 #include <sys/eventfd.h>
4126 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4129 if compile_prog
"" "" ; then
4133 # check if memfd is supported
4136 #include <sys/mman.h>
4140 return memfd_create("foo", MFD_ALLOW_SEALING);
4143 if compile_prog
"" "" ; then
4149 if test "$linux_user" = "yes"; then
4150 if check_include linux
/usbdevice_fs.h
; then
4156 # check for fallocate
4163 fallocate(0, 0, 0, 0);
4167 if compile_prog
"" "" ; then
4171 # check for fallocate hole punching
4172 fallocate_punch_hole
=no
4175 #include <linux/falloc.h>
4179 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4183 if compile_prog
"" "" ; then
4184 fallocate_punch_hole
=yes
4187 # check that fallocate supports range zeroing inside the file
4188 fallocate_zero_range
=no
4191 #include <linux/falloc.h>
4195 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4199 if compile_prog
"" "" ; then
4200 fallocate_zero_range
=yes
4203 # check for posix_fallocate
4210 posix_fallocate(0, 0, 0);
4214 if compile_prog
"" "" ; then
4218 # check for sync_file_range
4225 sync_file_range(0, 0, 0, 0);
4229 if compile_prog
"" "" ; then
4233 # check for linux/fiemap.h and FS_IOC_FIEMAP
4236 #include <sys/ioctl.h>
4237 #include <linux/fs.h>
4238 #include <linux/fiemap.h>
4242 ioctl(0, FS_IOC_FIEMAP, 0);
4246 if compile_prog
"" "" ; then
4261 if compile_prog
"" "" ; then
4265 # check for ppoll support
4272 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4273 ppoll(&pfd, 1, 0, 0);
4277 if compile_prog
"" "" ; then
4281 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4282 prctl_pr_set_timerslack
=no
4284 #include <sys/prctl.h>
4288 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4292 if compile_prog
"" "" ; then
4293 prctl_pr_set_timerslack
=yes
4296 # check for epoll support
4299 #include <sys/epoll.h>
4307 if compile_prog
"" "" ; then
4311 # epoll_create1 is a later addition
4312 # so we must check separately for its presence
4315 #include <sys/epoll.h>
4319 /* Note that we use epoll_create1 as a value, not as
4320 * a function being called. This is necessary so that on
4321 * old SPARC glibc versions where the function was present in
4322 * the library but not declared in the header file we will
4323 * fail the configure check. (Otherwise we will get a compiler
4324 * warning but not an error, and will proceed to fail the
4325 * qemu compile where we compile with -Werror.)
4327 return (int)(uintptr_t)&epoll_create1;
4330 if compile_prog
"" "" ; then
4334 # check for sendfile support
4337 #include <sys/sendfile.h>
4341 return sendfile(0, 0, 0, 0);
4344 if compile_prog
"" "" ; then
4348 # check for timerfd support (glibc 2.8 and newer)
4351 #include <sys/timerfd.h>
4355 return(timerfd_create(CLOCK_REALTIME, 0));
4358 if compile_prog
"" "" ; then
4362 # check for setns and unshare support
4375 if compile_prog
"" "" ; then
4379 # clock_adjtime probe
4386 return clock_adjtime(0, 0);
4390 if compile_prog
"" "" ; then
4405 if compile_prog
"" "" ; then
4409 # Check if tools are available to build documentation.
4410 if test "$docs" != "no" ; then
4411 if has makeinfo
&& has pod2man
; then
4414 if test "$docs" = "yes" ; then
4415 feature_not_found
"docs" "Install texinfo and Perl/perl-podlators"
4421 # Search for bswap_32 function
4424 #include <byteswap.h>
4425 int main(void) { return bswap_32(0); }
4427 if compile_prog
"" "" ; then
4431 # Search for bswap32 function
4434 #include <sys/endian.h>
4435 #include <sys/types.h>
4436 #include <machine/bswap.h>
4437 int main(void) { return bswap32(0); }
4439 if compile_prog
"" "" ; then
4443 ##########################################
4444 # Do we have libiscsi >= 1.9.0
4445 if test "$libiscsi" != "no" ; then
4446 if $pkg_config --atleast-version=1.9.0 libiscsi
; then
4448 libiscsi_cflags
=$
($pkg_config --cflags libiscsi
)
4449 libiscsi_libs
=$
($pkg_config --libs libiscsi
)
4451 if test "$libiscsi" = "yes" ; then
4452 feature_not_found
"libiscsi" "Install libiscsi >= 1.9.0"
4458 ##########################################
4462 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4464 if compile_prog
"" "" ; then
4466 elif compile_prog
"" "-lm" ; then
4468 libs_qga
="-lm $libs_qga"
4470 error_exit
"libm check failed"
4473 ##########################################
4475 # uClibc provides 2 versions of clock_gettime(), one with realtime
4476 # support and one without. This means that the clock_gettime() don't
4477 # need -lrt. We still need it for timer_create() so we check for this
4478 # function in addition.
4483 timer_create(CLOCK_REALTIME, NULL, NULL);
4484 return clock_gettime(CLOCK_REALTIME, NULL);
4488 if compile_prog
"" "" ; then
4490 # we need pthread for static linking. use previous pthread test result
4491 elif compile_prog
"" "$pthread_lib -lrt" ; then
4493 libs_qga
="$libs_qga -lrt"
4496 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4497 "$haiku" != "yes" ; then
4498 libs_softmmu
="-lutil $libs_softmmu"
4501 ##########################################
4503 if test "$spice" != "no" ; then
4506 int main(void) { spice_server_new(); return 0; }
4508 spice_cflags
=$
($pkg_config --cflags spice-protocol spice-server
2>/dev
/null
)
4509 spice_libs
=$
($pkg_config --libs spice-protocol spice-server
2>/dev
/null
)
4510 if $pkg_config --atleast-version=0.12.0 spice-server
&& \
4511 $pkg_config --atleast-version=0.12.3 spice-protocol
&& \
4512 compile_prog
"$spice_cflags" "$spice_libs" ; then
4514 libs_softmmu
="$libs_softmmu $spice_libs"
4515 QEMU_CFLAGS
="$QEMU_CFLAGS $spice_cflags"
4516 spice_protocol_version
=$
($pkg_config --modversion spice-protocol
)
4517 spice_server_version
=$
($pkg_config --modversion spice-server
)
4519 if test "$spice" = "yes" ; then
4520 feature_not_found
"spice" \
4521 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4527 # check for smartcard support
4528 if test "$smartcard" != "no"; then
4529 if $pkg_config --atleast-version=2.5.1 libcacard
; then
4530 libcacard_cflags
=$
($pkg_config --cflags libcacard
)
4531 libcacard_libs
=$
($pkg_config --libs libcacard
)
4534 if test "$smartcard" = "yes"; then
4535 feature_not_found
"smartcard" "Install libcacard devel"
4542 if test "$libusb" != "no" ; then
4543 if $pkg_config --atleast-version=1.0.13 libusb-1.0
; then
4545 libusb_cflags
=$
($pkg_config --cflags libusb-1.0
)
4546 libusb_libs
=$
($pkg_config --libs libusb-1.0
)
4548 if test "$libusb" = "yes"; then
4549 feature_not_found
"libusb" "Install libusb devel >= 1.0.13"
4555 # check for usbredirparser for usb network redirection support
4556 if test "$usb_redir" != "no" ; then
4557 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5
; then
4559 usb_redir_cflags
=$
($pkg_config --cflags libusbredirparser-0.5
)
4560 usb_redir_libs
=$
($pkg_config --libs libusbredirparser-0.5
)
4562 if test "$usb_redir" = "yes"; then
4563 feature_not_found
"usb-redir" "Install usbredir devel"
4569 ##########################################
4570 # check if we have VSS SDK headers for win
4572 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4573 case "$vss_win32_sdk" in
4574 "") vss_win32_include
="-isystem $source_path" ;;
4575 *\
*) # The SDK is installed in "Program Files" by default, but we cannot
4576 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4577 vss_win32_include
="-isystem $source_path/.sdk/vss"
4578 symlink
"$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4580 *) vss_win32_include
="-isystem $vss_win32_sdk"
4583 #define __MIDL_user_allocate_free_DEFINED__
4584 #include <inc/win2003/vss.h>
4585 int main(void) { return VSS_CTX_BACKUP; }
4587 if compile_prog
"$vss_win32_include" "" ; then
4588 guest_agent_with_vss
="yes"
4589 QEMU_CFLAGS
="$QEMU_CFLAGS $vss_win32_include"
4590 libs_qga
="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4591 qga_vss_provider
="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4593 if test "$vss_win32_sdk" != "" ; then
4594 echo "ERROR: Please download and install Microsoft VSS SDK:"
4595 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4596 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4597 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4598 echo "ERROR: The headers are extracted in the directory \`inc'."
4599 feature_not_found
"VSS support"
4601 guest_agent_with_vss
="no"
4605 ##########################################
4606 # lookup Windows platform SDK (if not specified)
4607 # The SDK is needed only to build .tlb (type library) file of guest agent
4608 # VSS provider from the source. It is usually unnecessary because the
4609 # pre-compiled .tlb file is included.
4611 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4612 if test -z "$win_sdk"; then
4613 programfiles
="$PROGRAMFILES"
4614 test -n "$PROGRAMW6432" && programfiles
="$PROGRAMW6432"
4615 if test -n "$programfiles"; then
4616 win_sdk
=$
(ls -d "$programfiles/Microsoft SDKs/Windows/v"* |
tail -1) 2>/dev
/null
4618 feature_not_found
"Windows SDK"
4620 elif test "$win_sdk" = "no"; then
4625 ##########################################
4626 # check if mingw environment provides a recent ntddscsi.h
4627 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4629 #include <windows.h>
4630 #include <ntddscsi.h>
4632 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4633 #error Missing required ioctl definitions
4635 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4639 if compile_prog
"" "" ; then
4640 guest_agent_ntddscsi
=yes
4641 libs_qga
="-lsetupapi $libs_qga"
4645 ##########################################
4646 # virgl renderer probe
4648 if test "$virglrenderer" != "no" ; then
4650 #include <virglrenderer.h>
4651 int main(void) { virgl_renderer_poll(); return 0; }
4653 virgl_cflags
=$
($pkg_config --cflags virglrenderer
2>/dev
/null
)
4654 virgl_libs
=$
($pkg_config --libs virglrenderer
2>/dev
/null
)
4655 virgl_version
=$
($pkg_config --modversion virglrenderer
2>/dev
/null
)
4656 if $pkg_config virglrenderer
>/dev
/null
2>&1 && \
4657 compile_prog
"$virgl_cflags" "$virgl_libs" ; then
4660 if test "$virglrenderer" = "yes" ; then
4661 feature_not_found
"virglrenderer"
4667 ##########################################
4672 if $pkg_config capstone
; then
4674 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
4676 elif test -e "${source_path}/capstone/Makefile" ; then
4678 elif test -z "$capstone" ; then
4681 feature_not_found
"capstone" "Install capstone devel or git submodule"
4686 if ! $pkg_config capstone
; then
4687 feature_not_found
"capstone" "Install capstone devel"
4694 if test "$capstone" = git
; then
4695 git_submodules
="${git_submodules} capstone"
4698 QEMU_CFLAGS
="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4699 if test "$mingw32" = "yes"; then
4700 LIBCAPSTONE
=capstone.lib
4702 LIBCAPSTONE
=libcapstone.a
4704 LIBS
="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4708 QEMU_CFLAGS
="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4709 LIBS
="$($pkg_config --libs capstone) $LIBS"
4715 error_exit
"Unknown state for capstone: $capstone"
4719 ##########################################
4720 # check if we have fdatasync
4726 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4727 return fdatasync(0);
4729 #error Not supported
4733 if compile_prog
"" "" ; then
4737 ##########################################
4738 # check if we have madvise
4742 #include <sys/types.h>
4743 #include <sys/mman.h>
4745 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4747 if compile_prog
"" "" ; then
4751 ##########################################
4752 # check if we have posix_madvise
4756 #include <sys/mman.h>
4758 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4760 if compile_prog
"" "" ; then
4764 ##########################################
4765 # check if we have posix_memalign()
4772 return posix_memalign(&p, 8, 8);
4775 if compile_prog
"" "" ; then
4779 ##########################################
4780 # check if we have posix_syslog
4785 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4787 if compile_prog
"" "" ; then
4791 ##########################################
4792 # check if we have sem_timedwait
4796 #include <semaphore.h>
4797 int main(void) { return sem_timedwait(0, 0); }
4799 if compile_prog
"" "" ; then
4803 ##########################################
4804 # check if we have strchrnul
4810 // Use a haystack that the compiler shouldn't be able to constant fold
4811 char *haystack = (char*)&main;
4812 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4814 if compile_prog
"" "" ; then
4818 ##########################################
4819 # check if trace backend exists
4821 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev
/null
2> /dev
/null
4822 if test "$?" -ne 0 ; then
4823 error_exit
"invalid trace backends" \
4824 "Please choose supported trace backends."
4827 ##########################################
4828 # For 'ust' backend, test if ust headers are present
4829 if have_backend
"ust"; then
4831 #include <lttng/tracepoint.h>
4832 int main(void) { return 0; }
4834 if compile_prog
"" "-Wl,--no-as-needed -ldl" ; then
4835 if $pkg_config lttng-ust
--exists; then
4836 lttng_ust_libs
=$
($pkg_config --libs lttng-ust
)
4838 lttng_ust_libs
="-llttng-ust -ldl"
4840 if $pkg_config liburcu-bp
--exists; then
4841 urcu_bp_libs
=$
($pkg_config --libs liburcu-bp
)
4843 urcu_bp_libs
="-lurcu-bp"
4846 LIBS
="$lttng_ust_libs $urcu_bp_libs $LIBS"
4847 libs_qga
="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4849 error_exit
"Trace backend 'ust' missing lttng-ust header files"
4853 ##########################################
4854 # For 'dtrace' backend, test if 'dtrace' command is present
4855 if have_backend
"dtrace"; then
4856 if ! has
'dtrace' ; then
4857 error_exit
"dtrace command is not found in PATH $PATH"
4859 trace_backend_stap
="no"
4860 if has
'stap' ; then
4861 trace_backend_stap
="yes"
4865 ##########################################
4866 # check and set a backend for coroutine
4868 # We prefer ucontext, but it's not always possible. The fallback
4869 # is sigcontext. On Windows the only valid backend is the Windows
4873 if test "$darwin" != "yes"; then
4875 #include <ucontext.h>
4876 #ifdef __stub_makecontext
4877 #error Ignoring glibc stub makecontext which will always fail
4879 int main(void) { makecontext(0, 0, 0); return 0; }
4881 if compile_prog
"" "" ; then
4886 if test "$coroutine" = ""; then
4887 if test "$mingw32" = "yes"; then
4889 elif test "$ucontext_works" = "yes"; then
4892 coroutine
=sigaltstack
4897 if test "$mingw32" != "yes"; then
4898 error_exit
"'windows' coroutine backend only valid for Windows"
4900 # Unfortunately the user visible backend name doesn't match the
4901 # coroutine-*.c filename for this case, so we have to adjust it here.
4905 if test "$ucontext_works" != "yes"; then
4906 feature_not_found
"ucontext"
4910 if test "$mingw32" = "yes"; then
4911 error_exit
"only the 'windows' coroutine backend is valid for Windows"
4915 error_exit
"unknown coroutine backend $coroutine"
4920 if test "$coroutine_pool" = ""; then
4924 if test "$debug_stack_usage" = "yes"; then
4925 if test "$coroutine_pool" = "yes"; then
4926 echo "WARN: disabling coroutine pool for stack usage debugging"
4932 ##########################################
4933 # check if we have open_by_handle_at
4935 open_by_handle_at
=no
4938 #if !defined(AT_EMPTY_PATH)
4939 # error missing definition
4941 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4944 if compile_prog
"" "" ; then
4945 open_by_handle_at
=yes
4948 ########################################
4949 # check if we have linux/magic.h
4953 #include <linux/magic.h>
4958 if compile_prog
"" "" ; then
4962 ########################################
4963 # check whether we can disable warning option with a pragma (this is needed
4964 # to silence warnings in the headers of some versions of external libraries).
4965 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4968 # If we can't selectively disable warning in the code, disable -Werror so that
4969 # the build doesn't fail anyway.
4971 pragma_disable_unused_but_set
=no
4973 #pragma GCC diagnostic push
4974 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4975 #pragma GCC diagnostic pop
4981 if compile_prog
"-Werror" "" ; then
4982 pragma_diagnostic_available
=yes
4987 ########################################
4988 # check if we have valgrind/valgrind.h
4992 #include <valgrind/valgrind.h>
4997 if compile_prog
"" "" ; then
5001 ########################################
5002 # check if environ is declared
5012 if compile_prog
"" "" ; then
5016 ########################################
5017 # check if cpuid.h is usable.
5022 unsigned a, b, c, d;
5023 int max = __get_cpuid_max(0, 0);
5026 __cpuid(1, a, b, c, d);
5030 __cpuid_count(7, 0, a, b, c, d);
5036 if compile_prog
"" "" ; then
5040 ##########################################
5041 # avx2 optimization requirement check
5043 # There is no point enabling this if cpuid.h is not usable,
5044 # since we won't be able to select the new routines.
5046 if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
5048 #pragma GCC push_options
5049 #pragma GCC target("avx2")
5051 #include <immintrin.h>
5052 static int bar(void *a) {
5053 __m256i x = *(__m256i *)a;
5054 return _mm256_testz_si256(x, x);
5056 int main(int argc, char *argv[]) { return bar(argv[0]); }
5058 if compile_object
"" ; then
5065 ########################################
5066 # check if __[u]int128_t is usable.
5070 #if defined(__clang_major__) && defined(__clang_minor__)
5071 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5072 # error __int128_t does not work in CLANG before 3.2
5084 if compile_prog
"" "" ; then
5088 #########################################
5089 # See if 128-bit atomic operations are supported.
5092 if test "$int128" = "yes"; then
5096 unsigned __int128 x = 0, y = 0;
5097 y = __atomic_load_16(&x, 0);
5098 __atomic_store_16(&x, y, 0);
5099 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5103 if compile_prog
"" "" ; then
5109 if test "$int128" = yes -a "$atomic128" = no
; then
5113 unsigned __int128 x = 0, y = 0;
5114 __sync_val_compare_and_swap_16(&x, y, x);
5118 if compile_prog
"" "" ; then
5123 #########################################
5124 # See if 64-bit atomic operations are supported.
5125 # Note that without __atomic builtins, we can only
5126 # assume atomic loads/stores max at pointer size.
5132 uint64_t x = 0, y = 0;
5133 #ifdef __ATOMIC_RELAXED
5134 y = __atomic_load_8(&x, 0);
5135 __atomic_store_8(&x, y, 0);
5136 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5137 __atomic_exchange_8(&x, y, 0);
5138 __atomic_fetch_add_8(&x, y, 0);
5140 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5141 __sync_lock_test_and_set(&x, y);
5142 __sync_val_compare_and_swap(&x, y, 0);
5143 __sync_fetch_and_add(&x, y);
5148 if compile_prog
"" "" ; then
5152 ########################################
5153 # See if 16-byte vector operations are supported.
5154 # Even without a vector unit the compiler may expand these.
5155 # There is a bug in old GCC for PPC that crashes here.
5156 # Unfortunately it's the system compiler for Centos 7.
5159 typedef unsigned char U1 __attribute__((vector_size(16)));
5160 typedef unsigned short U2 __attribute__((vector_size(16)));
5161 typedef unsigned int U4 __attribute__((vector_size(16)));
5162 typedef unsigned long long U8 __attribute__((vector_size(16)));
5163 typedef signed char S1 __attribute__((vector_size(16)));
5164 typedef signed short S2 __attribute__((vector_size(16)));
5165 typedef signed int S4 __attribute__((vector_size(16)));
5166 typedef signed long long S8 __attribute__((vector_size(16)));
5176 void helper(void *d, void *a, int shift, int i);
5177 void helper(void *d, void *a, int shift, int i)
5179 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5180 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5181 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5182 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5186 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5187 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5188 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5189 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5190 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5191 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5192 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5193 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5194 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5200 if compile_prog
"" "" ; then
5204 ########################################
5205 # check if getauxval is available.
5209 #include <sys/auxv.h>
5211 return getauxval(AT_HWCAP) == 0;
5214 if compile_prog
"" "" ; then
5218 ########################################
5219 # check if ccache is interfering with
5220 # semantic analysis of macros
5225 static const int Z = 1;
5226 #define fn() ({ Z; })
5227 #define TAUT(X) ((X) == Z)
5228 #define PAREN(X, Y) (X == Y)
5230 int main(int argc, char *argv[])
5236 if (PAREN(x, y)) return 0;
5237 if (TAUT(Z)) return 0;
5242 if ! compile_object
"-Werror"; then
5246 #################################################
5247 # clang does not support glibc + FORTIFY_SOURCE.
5249 if test "$fortify_source" != "no"; then
5250 if echo |
$cc -dM -E - |
grep __clang__
> /dev
/null
2>&1 ; then
5251 fortify_source
="no";
5252 elif test -n "$cxx" && has
$cxx &&
5253 echo |
$cxx -dM -E - |
grep __clang__
>/dev
/null
2>&1 ; then
5254 fortify_source
="no";
5256 fortify_source
="yes"
5260 ###############################################
5261 # Check if copy_file_range is provided by glibc
5262 have_copy_file_range
=no
5266 copy_file_range(0, NULL, 0, NULL, 0, 0);
5270 if compile_prog
"" "" ; then
5271 have_copy_file_range
=yes
5274 ##########################################
5275 # check if struct fsxattr is available via linux/fs.h
5279 #include <linux/fs.h>
5285 if compile_prog
"" "" ; then
5289 ##########################################
5290 # check for usable membarrier system call
5291 if test "$membarrier" = "yes"; then
5293 if test "$mingw32" = "yes" ; then
5295 elif test "$linux" = "yes" ; then
5297 #include <linux/membarrier.h>
5298 #include <sys/syscall.h>
5302 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5303 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5307 if compile_prog
"" "" ; then
5311 if test "$have_membarrier" = "no"; then
5312 feature_not_found
"membarrier" "membarrier system call not available"
5315 # Do not enable it by default even for Mingw32, because it doesn't
5320 ##########################################
5321 # check if rtnetlink.h exists and is useful
5324 #include <linux/rtnetlink.h>
5326 return IFLA_PROTO_DOWN;
5329 if compile_prog
"" "" ; then
5333 ##########################################
5334 # check for usable AF_VSOCK environment
5338 #include <sys/types.h>
5339 #include <sys/socket.h>
5340 #if !defined(AF_VSOCK)
5341 # error missing AF_VSOCK flag
5343 #include <linux/vm_sockets.h>
5346 struct sockaddr_vm svm;
5347 socklen_t len = sizeof(svm);
5348 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5349 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5350 if ((ret == -1) && (errno == ENOTCONN)) {
5356 if compile_prog
"" "" ; then
5360 ##########################################
5361 # check for usable AF_ALG environment
5365 #include <sys/types.h>
5366 #include <sys/socket.h>
5367 #include <linux/if_alg.h>
5370 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5374 if compile_prog
"" "" ; then
5377 if test "$crypto_afalg" = "yes"
5379 if test "$have_afalg" != "yes"
5381 error_exit
"AF_ALG requested but could not be detected"
5386 #################################################
5387 # Check to see if we have the Hypervisor framework
5388 if [ "$darwin" = "yes" ] ; then
5390 #include <Hypervisor/hv.h>
5391 int main() { return 0;}
5393 if ! compile_object
""; then
5397 LDFLAGS
="-framework Hypervisor $LDFLAGS"
5401 #################################################
5402 # Sparc implicitly links with --relax, which is
5403 # incompatible with -r, so --no-relax should be
5404 # given. It does no harm to give it on other
5407 # Note: the prototype is needed since QEMU_CFLAGS
5408 # contains -Wmissing-prototypes
5410 extern int foo(void);
5411 int foo(void) { return 0; }
5413 if ! compile_object
""; then
5414 error_exit
"Failed to compile object file for LD_REL_FLAGS test"
5416 for i
in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5417 if do_cc
-nostdlib $i -o $TMPMO $TMPO; then
5422 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5423 feature_not_found
"modules" "Cannot find how to build relocatable objects"
5426 ##########################################
5427 # check for sysmacros.h
5431 #include <sys/sysmacros.h>
5433 return makedev(0, 0);
5436 if compile_prog
"" "" ; then
5440 ##########################################
5441 # Veritas HyperScale block driver VxHS
5442 # Check if libvxhs is installed
5444 if test "$vxhs" != "no" ; then
5447 #include <qnio/qnio_api.h>
5449 void *vxhs_callback;
5452 iio_init(QNIO_VERSION, vxhs_callback);
5456 vxhs_libs
="-lvxhs -lssl"
5457 if compile_prog
"" "$vxhs_libs" ; then
5460 if test "$vxhs" = "yes" ; then
5461 feature_not_found
"vxhs block device" "Install libvxhs See github"
5467 ##########################################
5468 # check for _Static_assert()
5470 have_static_assert
=no
5472 _Static_assert(1, "success");
5477 if compile_prog
"" "" ; then
5478 have_static_assert
=yes
5481 ##########################################
5482 # check for utmpx.h, it is missing e.g. on OpenBSD
5487 struct utmpx user_info;
5492 if compile_prog
"" "" ; then
5496 ##########################################
5497 # checks for sanitizers
5501 have_asan_iface_h
=no
5502 have_asan_iface_fiber
=no
5504 if test "$sanitizers" = "yes" ; then
5506 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5510 # we could use a simple skeleton for flags checks, but this also
5511 # detect the static linking issue of ubsan, see also:
5512 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5516 void *tmp = malloc(10);
5517 return *(int *)(tmp + 2);
5520 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5524 if check_include
"sanitizer/asan_interface.h" ; then
5525 have_asan_iface_h
=yes
5529 #include <sanitizer/asan_interface.h>
5531 __sanitizer_start_switch_fiber(0, 0, 0);
5535 if compile_prog
"$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5536 have_asan_iface_fiber
=yes
5540 ##########################################
5541 # Docker and cross-compiler support
5543 # This is specifically for building test
5544 # cases for foreign architectures, not
5545 # cross-compiling QEMU itself.
5547 if has
"docker"; then
5548 docker
=$
($python $source_path/tests
/docker
/docker.py probe
)
5551 ##########################################
5554 if test "$libpmem" != "no"; then
5555 if $pkg_config --exists "libpmem"; then
5557 libpmem_libs
=$
($pkg_config --libs libpmem
)
5558 libpmem_cflags
=$
($pkg_config --cflags libpmem
)
5559 libs_softmmu
="$libs_softmmu $libpmem_libs"
5560 QEMU_CFLAGS
="$QEMU_CFLAGS $libpmem_cflags"
5562 if test "$libpmem" = "yes" ; then
5563 feature_not_found
"libpmem" "Install nvml or pmdk"
5569 ##########################################
5571 # After here, no more $cc or $ld runs
5575 if test "$gcov" = "yes" ; then
5576 CFLAGS
="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5577 LDFLAGS
="-fprofile-arcs -ftest-coverage $LDFLAGS"
5578 elif test "$fortify_source" = "yes" ; then
5579 CFLAGS
="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5580 elif test "$debug" = "no"; then
5581 CFLAGS
="-O2 $CFLAGS"
5584 if test "$have_asan" = "yes"; then
5585 CFLAGS
="-fsanitize=address $CFLAGS"
5586 if test "$have_asan_iface_h" = "no" ; then
5587 echo "ASAN build enabled, but ASAN header missing." \
5588 "Without code annotation, the report may be inferior."
5589 elif test "$have_asan_iface_fiber" = "no" ; then
5590 echo "ASAN build enabled, but ASAN header is too old." \
5591 "Without code annotation, the report may be inferior."
5594 if test "$have_ubsan" = "yes"; then
5595 CFLAGS
="-fsanitize=undefined $CFLAGS"
5598 ##########################################
5600 if test "$libnfs" != "no" ; then
5601 if $pkg_config --atleast-version=1.9.3 libnfs
; then
5603 libnfs_libs
=$
($pkg_config --libs libnfs
)
5605 if test "$libnfs" = "yes" ; then
5606 feature_not_found
"libnfs" "Install libnfs devel >= 1.9.3"
5612 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5613 if test "$werror" = "yes"; then
5614 QEMU_CFLAGS
="-Werror $QEMU_CFLAGS"
5617 if test "$solaris" = "no" ; then
5618 if $ld --version 2>/dev
/null |
grep "GNU ld" >/dev
/null
2>/dev
/null
; then
5619 LDFLAGS
="-Wl,--warn-common $LDFLAGS"
5623 # test if pod2man has --utf8 option
5624 if pod2man
--help |
grep -q utf8
; then
5625 POD2MAN
="pod2man --utf8"
5630 # Use ASLR, no-SEH and DEP if available
5631 if test "$mingw32" = "yes" ; then
5632 for flag
in --dynamicbase --no-seh --nxcompat; do
5633 if ld_has
$flag ; then
5634 LDFLAGS
="-Wl,$flag $LDFLAGS"
5639 qemu_confdir
=$sysconfdir$confsuffix
5640 qemu_moddir
=$libdir$confsuffix
5641 qemu_datadir
=$datadir$confsuffix
5642 qemu_localedir
="$datadir/locale"
5644 # We can only support ivshmem if we have eventfd
5645 if [ "$eventfd" = "yes" ]; then
5650 if test "$want_tools" = "yes" ; then
5651 tools
="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
5652 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5653 tools
="qemu-nbd\$(EXESUF) $tools"
5655 if [ "$ivshmem" = "yes" ]; then
5656 tools
="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5658 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5659 tools
="elf2dmp $tools"
5662 if test "$softmmu" = yes ; then
5663 if test "$linux" = yes; then
5664 if test "$virtfs" != no
&& test "$cap" = yes && test "$attr" = yes ; then
5666 tools
="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5668 if test "$virtfs" = yes; then
5669 error_exit
"VirtFS requires libcap devel and libattr devel"
5673 if test "$mpath" != no
&& test "$mpathpersist" = yes ; then
5676 if test "$mpath" = yes; then
5677 error_exit
"Multipath requires libmpathpersist devel"
5681 tools
="$tools scsi/qemu-pr-helper\$(EXESUF)"
5683 if test "$virtfs" = yes; then
5684 error_exit
"VirtFS is supported only on Linux"
5687 if test "$mpath" = yes; then
5688 error_exit
"Multipath is supported only on Linux"
5692 if test "$xkbcommon" = "yes"; then
5693 tools
="qemu-keymap\$(EXESUF) $tools"
5697 # Probe for guest agent support/options
5699 if [ "$guest_agent" != "no" ]; then
5700 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5701 tools
="qemu-ga $tools"
5703 elif [ "$guest_agent" != yes ]; then
5706 error_exit
"Guest agent is not supported on this platform"
5710 # Guest agent Window MSI package
5712 if test "$guest_agent" != yes; then
5713 if test "$guest_agent_msi" = yes; then
5714 error_exit
"MSI guest agent package requires guest agent enabled"
5717 elif test "$mingw32" != "yes"; then
5718 if test "$guest_agent_msi" = "yes"; then
5719 error_exit
"MSI guest agent package is available only for MinGW Windows cross-compilation"
5722 elif ! has wixl
; then
5723 if test "$guest_agent_msi" = "yes"; then
5724 error_exit
"MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5728 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5729 # disabled explicitly
5730 if test "$guest_agent_msi" != "no"; then
5735 if test "$guest_agent_msi" = "yes"; then
5736 if test "$guest_agent_with_vss" = "yes"; then
5737 QEMU_GA_MSI_WITH_VSS
="-D InstallVss"
5740 if test "$QEMU_GA_MANUFACTURER" = ""; then
5741 QEMU_GA_MANUFACTURER
=QEMU
5744 if test "$QEMU_GA_DISTRO" = ""; then
5745 QEMU_GA_DISTRO
=Linux
5748 if test "$QEMU_GA_VERSION" = ""; then
5749 QEMU_GA_VERSION
=$
(cat $source_path/VERSION
)
5752 QEMU_GA_MSI_MINGW_DLL_PATH
="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5756 QEMU_GA_MSI_ARCH
="-a x64 -D Arch=64"
5759 QEMU_GA_MSI_ARCH
="-D Arch=32"
5762 error_exit
"CPU $cpu not supported for building installation package"
5767 # Mac OS X ships with a broken assembler
5769 if test \
( "$cpu" = "i386" -o "$cpu" = "x86_64" \
) -a \
5770 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5771 "$softmmu" = yes ; then
5772 # Different host OS linkers have different ideas about the name of the ELF
5773 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5774 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5775 for emu
in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe
; do
5776 if "$ld" -verbose 2>&1 |
grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5777 ld_i386_emulation
="$emu"
5783 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5784 roms
="$roms spapr-rtas"
5787 if test "$cpu" = "s390x" ; then
5788 roms
="$roms s390-ccw"
5791 # Probe for the need for relocating the user-only binary.
5792 if ( [ "$linux_user" = yes ] ||
[ "$bsd_user" = yes ] ) && [ "$pie" = no
]; then
5795 arm | i386 | ppc
* | s390
* | sparc
* | x86_64 | x32
)
5796 # ??? Rationale for choosing this address
5797 textseg_addr
=0x60000000
5800 # A 256M aligned address, high in the address space, with enough
5801 # room for the code_gen_buffer above it before the stack.
5802 textseg_addr
=0x60000000
5805 if [ -n "$textseg_addr" ]; then
5807 int main(void) { return 0; }
5809 textseg_ldflags
="-Wl,-Ttext-segment=$textseg_addr"
5810 if ! compile_prog
"" "$textseg_ldflags"; then
5811 # In case ld does not support -Ttext-segment, edit the default linker
5812 # script via sed to set the .text start addr. This is needed on FreeBSD
5814 if ! $ld --verbose >/dev
/null
2>&1; then
5816 "We need to link the QEMU user mode binaries at a" \
5817 "specific text address. Unfortunately your linker" \
5818 "doesn't support either the -Ttext-segment option or" \
5819 "printing the default linker script with --verbose." \
5820 "If you don't want the user mode binaries, pass the" \
5821 "--disable-user option to configure."
5824 $ld --verbose |
sed \
5825 -e '1,/==================================================/d' \
5826 -e '/==================================================/,$d' \
5827 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5828 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5829 textseg_ldflags
="-Wl,-T../config-host.ld"
5834 # Check that the C++ compiler exists and works with the C compiler.
5835 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5838 int c_function(void);
5839 int main(void) { return c_function(); }
5846 int c_function(void);
5848 int c_function(void) { return 42; }
5853 if do_cxx
$QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5854 # C++ compiler $cxx works ok with C compiler $cc
5857 echo "C++ compiler $cxx does not work with C compiler $cc"
5858 echo "Disabling C++ specific optional code"
5862 echo "No C++ compiler available; disabling C++ specific optional code"
5867 if test "$1" = "yes" ; then
5872 # prepend pixman and ftd flags after all config tests are done
5873 QEMU_CFLAGS
="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5874 QEMU_LDFLAGS
="$fdt_ldflags $QEMU_LDFLAGS"
5875 libs_softmmu
="$pixman_libs $libs_softmmu"
5877 echo "Install prefix $prefix"
5878 echo "BIOS directory $(eval echo $qemu_datadir)"
5879 echo "firmware path $(eval echo $firmwarepath)"
5880 echo "binary directory $(eval echo $bindir)"
5881 echo "library directory $(eval echo $libdir)"
5882 echo "module directory $(eval echo $qemu_moddir)"
5883 echo "libexec directory $(eval echo $libexecdir)"
5884 echo "include directory $(eval echo $includedir)"
5885 echo "config directory $(eval echo $sysconfdir)"
5886 if test "$mingw32" = "no" ; then
5887 echo "local state directory $(eval echo $local_statedir)"
5888 echo "Manual directory $(eval echo $mandir)"
5889 echo "ELF interp prefix $interp_prefix"
5891 echo "local state directory queried at runtime"
5892 echo "Windows SDK $win_sdk"
5894 echo "Source path $source_path"
5895 echo "GIT binary $git"
5896 echo "GIT submodules $git_submodules"
5897 echo "C compiler $cc"
5898 echo "Host C compiler $host_cc"
5899 echo "C++ compiler $cxx"
5900 echo "Objective-C compiler $objcc"
5901 echo "ARFLAGS $ARFLAGS"
5902 echo "CFLAGS $CFLAGS"
5903 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5904 echo "LDFLAGS $LDFLAGS"
5905 echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
5907 echo "install $install"
5908 echo "python $python"
5909 if test "$slirp" = "yes" ; then
5912 echo "module support $modules"
5913 echo "host CPU $cpu"
5914 echo "host big endian $bigendian"
5915 echo "target list $target_list"
5916 echo "gprof enabled $gprof"
5917 echo "sparse enabled $sparse"
5918 echo "strip binaries $strip_opt"
5919 echo "profiler $profiler"
5920 echo "static build $static"
5921 if test "$darwin" = "yes" ; then
5922 echo "Cocoa support $cocoa"
5924 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5925 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5926 echo "GTK GL support $gtk_gl"
5927 echo "VTE support $vte $(echo_version $vte $vteversion)"
5928 echo "TLS priority $tls_priority"
5929 echo "GNUTLS support $gnutls"
5930 echo "libgcrypt $gcrypt"
5931 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5932 echo "libtasn1 $tasn1"
5933 echo "curses support $curses"
5934 echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
5935 echo "curl support $curl"
5936 echo "mingw32 support $mingw32"
5937 echo "Audio drivers $audio_drv_list"
5938 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5939 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5940 echo "VirtFS support $virtfs"
5941 echo "Multipath support $mpath"
5942 echo "VNC support $vnc"
5943 if test "$vnc" = "yes" ; then
5944 echo "VNC SASL support $vnc_sasl"
5945 echo "VNC JPEG support $vnc_jpeg"
5946 echo "VNC PNG support $vnc_png"
5948 if test -n "$sparc_cpu"; then
5949 echo "Target Sparc Arch $sparc_cpu"
5951 echo "xen support $xen"
5952 if test "$xen" = "yes" ; then
5953 echo "xen ctrl version $xen_ctrl_version"
5954 echo "pv dom build $xen_pv_domain_build"
5956 echo "brlapi support $brlapi"
5957 echo "bluez support $bluez"
5958 echo "Documentation $docs"
5960 echo "vde support $vde"
5961 echo "netmap support $netmap"
5962 echo "Linux AIO support $linux_aio"
5963 echo "ATTR/XATTR support $attr"
5964 echo "Install blobs $blobs"
5965 echo "KVM support $kvm"
5966 echo "HAX support $hax"
5967 echo "HVF support $hvf"
5968 echo "WHPX support $whpx"
5969 echo "TCG support $tcg"
5970 if test "$tcg" = "yes" ; then
5971 echo "TCG debug enabled $debug_tcg"
5972 echo "TCG interpreter $tcg_interpreter"
5974 echo "malloc trim support $malloc_trim"
5975 echo "RDMA support $rdma"
5976 echo "PVRDMA support $pvrdma"
5977 echo "fdt support $fdt"
5978 echo "membarrier $membarrier"
5979 echo "preadv support $preadv"
5980 echo "fdatasync $fdatasync"
5981 echo "madvise $madvise"
5982 echo "posix_madvise $posix_madvise"
5983 echo "posix_memalign $posix_memalign"
5984 echo "libcap-ng support $cap_ng"
5985 echo "vhost-net support $vhost_net"
5986 echo "vhost-crypto support $vhost_crypto"
5987 echo "vhost-scsi support $vhost_scsi"
5988 echo "vhost-vsock support $vhost_vsock"
5989 echo "vhost-user support $vhost_user"
5990 echo "Trace backends $trace_backends"
5991 if have_backend
"simple"; then
5992 echo "Trace output file $trace_file-<pid>"
5994 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5995 echo "rbd support $rbd"
5996 echo "xfsctl support $xfs"
5997 echo "smartcard support $smartcard"
5998 echo "libusb $libusb"
5999 echo "usb net redir $usb_redir"
6000 echo "OpenGL support $opengl"
6001 echo "OpenGL dmabufs $opengl_dmabuf"
6002 echo "libiscsi support $libiscsi"
6003 echo "libnfs support $libnfs"
6004 echo "build guest agent $guest_agent"
6005 echo "QGA VSS support $guest_agent_with_vss"
6006 echo "QGA w32 disk info $guest_agent_ntddscsi"
6007 echo "QGA MSI support $guest_agent_msi"
6008 echo "seccomp support $seccomp"
6009 echo "coroutine backend $coroutine"
6010 echo "coroutine pool $coroutine_pool"
6011 echo "debug stack usage $debug_stack_usage"
6012 echo "mutex debugging $debug_mutex"
6013 echo "crypto afalg $crypto_afalg"
6014 echo "GlusterFS support $glusterfs"
6015 echo "gcov $gcov_tool"
6016 echo "gcov enabled $gcov"
6017 echo "TPM support $tpm"
6018 echo "libssh2 support $libssh2"
6019 echo "TPM passthrough $tpm_passthrough"
6020 echo "TPM emulator $tpm_emulator"
6021 echo "QOM debugging $qom_cast_debug"
6022 echo "Live block migration $live_block_migration"
6023 echo "lzo support $lzo"
6024 echo "snappy support $snappy"
6025 echo "bzip2 support $bzip2"
6026 echo "NUMA host support $numa"
6027 echo "libxml2 $libxml2"
6028 echo "tcmalloc support $tcmalloc"
6029 echo "jemalloc support $jemalloc"
6030 echo "avx2 optimization $avx2_opt"
6031 echo "replication support $replication"
6032 echo "VxHS block device $vxhs"
6033 echo "capstone $capstone"
6034 echo "docker $docker"
6035 echo "libpmem support $libpmem"
6037 if test "$sdl_too_old" = "yes"; then
6038 echo "-> Your SDL version is too old - please upgrade to have SDL support"
6041 if test "$sdlabi" = "1.2"; then
6043 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6044 echo "WARNING: future releases. Please switch to using SDL 2.0"
6047 if test "$supported_cpu" = "no"; then
6049 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6051 echo "CPU host architecture $cpu support is not currently maintained."
6052 echo "The QEMU project intends to remove support for this host CPU in"
6053 echo "a future release if nobody volunteers to maintain it and to"
6054 echo "provide a build host for our continuous integration setup."
6055 echo "configure has succeeded and you can continue to build, but"
6056 echo "if you care about QEMU on this platform you should contact"
6057 echo "us upstream at qemu-devel@nongnu.org."
6060 if test "$supported_os" = "no"; then
6062 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6064 echo "Host OS $targetos support is not currently maintained."
6065 echo "The QEMU project intends to remove support for this host OS in"
6066 echo "a future release if nobody volunteers to maintain it and to"
6067 echo "provide a build host for our continuous integration setup."
6068 echo "configure has succeeded and you can continue to build, but"
6069 echo "if you care about QEMU on this platform you should contact"
6070 echo "us upstream at qemu-devel@nongnu.org."
6073 config_host_mak
="config-host.mak"
6075 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6077 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6078 echo >> $config_host_mak
6080 echo all
: >> $config_host_mak
6081 echo "prefix=$prefix" >> $config_host_mak
6082 echo "bindir=$bindir" >> $config_host_mak
6083 echo "libdir=$libdir" >> $config_host_mak
6084 echo "libexecdir=$libexecdir" >> $config_host_mak
6085 echo "includedir=$includedir" >> $config_host_mak
6086 echo "mandir=$mandir" >> $config_host_mak
6087 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6088 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6089 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6090 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6091 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6092 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6093 if test "$mingw32" = "no" ; then
6094 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6096 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6097 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6098 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6099 echo "GIT=$git" >> $config_host_mak
6100 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6101 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6103 echo "ARCH=$ARCH" >> $config_host_mak
6105 if test "$debug_tcg" = "yes" ; then
6106 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6108 if test "$strip_opt" = "yes" ; then
6109 echo "STRIP=${strip}" >> $config_host_mak
6111 if test "$bigendian" = "yes" ; then
6112 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6114 if test "$mingw32" = "yes" ; then
6115 echo "CONFIG_WIN32=y" >> $config_host_mak
6116 rc_version
=$
(cat $source_path/VERSION
)
6117 version_major
=${rc_version%%.*}
6118 rc_version
=${rc_version#*.}
6119 version_minor
=${rc_version%%.*}
6120 rc_version
=${rc_version#*.}
6121 version_subminor
=${rc_version%%.*}
6123 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6124 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6125 if test "$guest_agent_with_vss" = "yes" ; then
6126 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6127 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6128 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6130 if test "$guest_agent_ntddscsi" = "yes" ; then
6131 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6133 if test "$guest_agent_msi" = "yes"; then
6134 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6135 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6136 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6137 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6138 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6139 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6140 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6143 echo "CONFIG_POSIX=y" >> $config_host_mak
6146 if test "$linux" = "yes" ; then
6147 echo "CONFIG_LINUX=y" >> $config_host_mak
6150 if test "$darwin" = "yes" ; then
6151 echo "CONFIG_DARWIN=y" >> $config_host_mak
6154 if test "$solaris" = "yes" ; then
6155 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6157 if test "$haiku" = "yes" ; then
6158 echo "CONFIG_HAIKU=y" >> $config_host_mak
6160 if test "$static" = "yes" ; then
6161 echo "CONFIG_STATIC=y" >> $config_host_mak
6163 if test "$profiler" = "yes" ; then
6164 echo "CONFIG_PROFILER=y" >> $config_host_mak
6166 if test "$slirp" = "yes" ; then
6167 echo "CONFIG_SLIRP=y" >> $config_host_mak
6168 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6170 if test "$vde" = "yes" ; then
6171 echo "CONFIG_VDE=y" >> $config_host_mak
6172 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6174 if test "$netmap" = "yes" ; then
6175 echo "CONFIG_NETMAP=y" >> $config_host_mak
6177 if test "$l2tpv3" = "yes" ; then
6178 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6180 if test "$cap_ng" = "yes" ; then
6181 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6183 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6184 for drv
in $audio_drv_list; do
6185 def
=CONFIG_AUDIO_$
(echo $drv | LC_ALL
=C
tr '[a-z]' '[A-Z]')
6187 alsa | oss | pa | sdl
)
6188 echo "$def=m" >> $config_host_mak ;;
6190 echo "$def=y" >> $config_host_mak ;;
6193 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6194 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6195 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6196 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6197 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6198 if test "$audio_pt_int" = "yes" ; then
6199 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6201 if test "$audio_win_int" = "yes" ; then
6202 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6204 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6205 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6206 if test "$vnc" = "yes" ; then
6207 echo "CONFIG_VNC=y" >> $config_host_mak
6209 if test "$vnc_sasl" = "yes" ; then
6210 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6212 if test "$vnc_jpeg" = "yes" ; then
6213 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6215 if test "$vnc_png" = "yes" ; then
6216 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6218 if test "$xkbcommon" = "yes" ; then
6219 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6220 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6222 if test "$fnmatch" = "yes" ; then
6223 echo "CONFIG_FNMATCH=y" >> $config_host_mak
6225 if test "$xfs" = "yes" ; then
6226 echo "CONFIG_XFS=y" >> $config_host_mak
6228 qemu_version
=$
(head $source_path/VERSION
)
6229 echo "VERSION=$qemu_version" >>$config_host_mak
6230 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6231 echo "SRC_PATH=$source_path" >> $config_host_mak
6232 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6233 if [ "$docs" = "yes" ] ; then
6234 echo "BUILD_DOCS=yes" >> $config_host_mak
6236 if test "$modules" = "yes"; then
6237 # $shacmd can generate a hash started with digit, which the compiler doesn't
6238 # like as an symbol. So prefix it with an underscore
6239 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6240 echo "CONFIG_MODULES=y" >> $config_host_mak
6242 if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6243 echo "CONFIG_X11=y" >> $config_host_mak
6244 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6245 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6247 if test "$sdl" = "yes" ; then
6248 echo "CONFIG_SDL=m" >> $config_host_mak
6249 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6250 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6251 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6253 if test "$cocoa" = "yes" ; then
6254 echo "CONFIG_COCOA=y" >> $config_host_mak
6256 if test "$curses" = "yes" ; then
6257 echo "CONFIG_CURSES=m" >> $config_host_mak
6258 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6259 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6261 if test "$pipe2" = "yes" ; then
6262 echo "CONFIG_PIPE2=y" >> $config_host_mak
6264 if test "$accept4" = "yes" ; then
6265 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6267 if test "$splice" = "yes" ; then
6268 echo "CONFIG_SPLICE=y" >> $config_host_mak
6270 if test "$eventfd" = "yes" ; then
6271 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6273 if test "$memfd" = "yes" ; then
6274 echo "CONFIG_MEMFD=y" >> $config_host_mak
6276 if test "$have_usbfs" = "yes" ; then
6277 echo "CONFIG_USBFS=y" >> $config_host_mak
6279 if test "$fallocate" = "yes" ; then
6280 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6282 if test "$fallocate_punch_hole" = "yes" ; then
6283 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6285 if test "$fallocate_zero_range" = "yes" ; then
6286 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6288 if test "$posix_fallocate" = "yes" ; then
6289 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6291 if test "$sync_file_range" = "yes" ; then
6292 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6294 if test "$fiemap" = "yes" ; then
6295 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6297 if test "$dup3" = "yes" ; then
6298 echo "CONFIG_DUP3=y" >> $config_host_mak
6300 if test "$ppoll" = "yes" ; then
6301 echo "CONFIG_PPOLL=y" >> $config_host_mak
6303 if test "$prctl_pr_set_timerslack" = "yes" ; then
6304 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6306 if test "$epoll" = "yes" ; then
6307 echo "CONFIG_EPOLL=y" >> $config_host_mak
6309 if test "$epoll_create1" = "yes" ; then
6310 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6312 if test "$sendfile" = "yes" ; then
6313 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6315 if test "$timerfd" = "yes" ; then
6316 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6318 if test "$setns" = "yes" ; then
6319 echo "CONFIG_SETNS=y" >> $config_host_mak
6321 if test "$clock_adjtime" = "yes" ; then
6322 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6324 if test "$syncfs" = "yes" ; then
6325 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6327 if test "$inotify" = "yes" ; then
6328 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6330 if test "$inotify1" = "yes" ; then
6331 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6333 if test "$sem_timedwait" = "yes" ; then
6334 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6336 if test "$strchrnul" = "yes" ; then
6337 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6339 if test "$byteswap_h" = "yes" ; then
6340 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6342 if test "$bswap_h" = "yes" ; then
6343 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6345 if test "$curl" = "yes" ; then
6346 echo "CONFIG_CURL=m" >> $config_host_mak
6347 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6348 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6350 if test "$brlapi" = "yes" ; then
6351 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6352 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6354 if test "$bluez" = "yes" ; then
6355 echo "CONFIG_BLUEZ=y" >> $config_host_mak
6356 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6358 if test "$gtk" = "yes" ; then
6359 echo "CONFIG_GTK=m" >> $config_host_mak
6360 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6361 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6362 if test "$gtk_gl" = "yes" ; then
6363 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6366 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6367 if test "$gnutls" = "yes" ; then
6368 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6370 if test "$gcrypt" = "yes" ; then
6371 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6372 if test "$gcrypt_hmac" = "yes" ; then
6373 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6376 if test "$nettle" = "yes" ; then
6377 echo "CONFIG_NETTLE=y" >> $config_host_mak
6378 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6380 if test "$tasn1" = "yes" ; then
6381 echo "CONFIG_TASN1=y" >> $config_host_mak
6383 if test "$have_ifaddrs_h" = "yes" ; then
6384 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6386 if test "$have_broken_size_max" = "yes" ; then
6387 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6390 # Work around a system header bug with some kernel/XFS header
6391 # versions where they both try to define 'struct fsxattr':
6392 # xfs headers will not try to redefine structs from linux headers
6393 # if this macro is set.
6394 if test "$have_fsxattr" = "yes" ; then
6395 echo "HAVE_FSXATTR=y" >> $config_host_mak
6397 if test "$have_copy_file_range" = "yes" ; then
6398 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6400 if test "$vte" = "yes" ; then
6401 echo "CONFIG_VTE=y" >> $config_host_mak
6402 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6403 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6405 if test "$virglrenderer" = "yes" ; then
6406 echo "CONFIG_VIRGL=y" >> $config_host_mak
6407 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6408 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6410 if test "$xen" = "yes" ; then
6411 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6412 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6413 if test "$xen_pv_domain_build" = "yes" ; then
6414 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6417 if test "$linux_aio" = "yes" ; then
6418 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6420 if test "$attr" = "yes" ; then
6421 echo "CONFIG_ATTR=y" >> $config_host_mak
6423 if test "$libattr" = "yes" ; then
6424 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6426 if test "$virtfs" = "yes" ; then
6427 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6429 if test "$mpath" = "yes" ; then
6430 echo "CONFIG_MPATH=y" >> $config_host_mak
6431 if test "$mpathpersist_new_api" = "yes"; then
6432 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6435 if test "$vhost_scsi" = "yes" ; then
6436 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6438 if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6439 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6441 if test "$vhost_crypto" = "yes" ; then
6442 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6444 if test "$vhost_vsock" = "yes" ; then
6445 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6447 if test "$vhost_user" = "yes" ; then
6448 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6450 if test "$blobs" = "yes" ; then
6451 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6453 if test "$iovec" = "yes" ; then
6454 echo "CONFIG_IOVEC=y" >> $config_host_mak
6456 if test "$preadv" = "yes" ; then
6457 echo "CONFIG_PREADV=y" >> $config_host_mak
6459 if test "$fdt" != "no" ; then
6460 echo "CONFIG_FDT=y" >> $config_host_mak
6462 if test "$membarrier" = "yes" ; then
6463 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6465 if test "$signalfd" = "yes" ; then
6466 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6468 if test "$tcg" = "yes"; then
6469 echo "CONFIG_TCG=y" >> $config_host_mak
6470 if test "$tcg_interpreter" = "yes" ; then
6471 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6474 if test "$fdatasync" = "yes" ; then
6475 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6477 if test "$madvise" = "yes" ; then
6478 echo "CONFIG_MADVISE=y" >> $config_host_mak
6480 if test "$posix_madvise" = "yes" ; then
6481 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6483 if test "$posix_memalign" = "yes" ; then
6484 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6487 if test "$spice" = "yes" ; then
6488 echo "CONFIG_SPICE=y" >> $config_host_mak
6491 if test "$smartcard" = "yes" ; then
6492 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6493 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6494 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6497 if test "$libusb" = "yes" ; then
6498 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6499 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6500 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6503 if test "$usb_redir" = "yes" ; then
6504 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6505 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6506 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6509 if test "$opengl" = "yes" ; then
6510 echo "CONFIG_OPENGL=y" >> $config_host_mak
6511 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6512 if test "$opengl_dmabuf" = "yes" ; then
6513 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6517 if test "$malloc_trim" = "yes" ; then
6518 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6521 if test "$avx2_opt" = "yes" ; then
6522 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6525 if test "$lzo" = "yes" ; then
6526 echo "CONFIG_LZO=y" >> $config_host_mak
6529 if test "$snappy" = "yes" ; then
6530 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6533 if test "$bzip2" = "yes" ; then
6534 echo "CONFIG_BZIP2=y" >> $config_host_mak
6535 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6538 if test "$libiscsi" = "yes" ; then
6539 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6540 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6541 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6544 if test "$libnfs" = "yes" ; then
6545 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6546 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6549 if test "$seccomp" = "yes"; then
6550 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6551 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6552 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6555 # XXX: suppress that
6556 if [ "$bsd" = "yes" ] ; then
6557 echo "CONFIG_BSD=y" >> $config_host_mak
6560 if test "$localtime_r" = "yes" ; then
6561 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6563 if test "$qom_cast_debug" = "yes" ; then
6564 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6566 if test "$rbd" = "yes" ; then
6567 echo "CONFIG_RBD=m" >> $config_host_mak
6568 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6569 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6572 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6573 if test "$coroutine_pool" = "yes" ; then
6574 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6576 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6579 if test "$debug_stack_usage" = "yes" ; then
6580 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6583 if test "$crypto_afalg" = "yes" ; then
6584 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6587 if test "$open_by_handle_at" = "yes" ; then
6588 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6591 if test "$linux_magic_h" = "yes" ; then
6592 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6595 if test "$pragma_diagnostic_available" = "yes" ; then
6596 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6599 if test "$valgrind_h" = "yes" ; then
6600 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6603 if test "$have_asan_iface_fiber" = "yes" ; then
6604 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6607 if test "$has_environ" = "yes" ; then
6608 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6611 if test "$cpuid_h" = "yes" ; then
6612 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6615 if test "$int128" = "yes" ; then
6616 echo "CONFIG_INT128=y" >> $config_host_mak
6619 if test "$atomic128" = "yes" ; then
6620 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6623 if test "$cmpxchg128" = "yes" ; then
6624 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6627 if test "$atomic64" = "yes" ; then
6628 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6631 if test "$vector16" = "yes" ; then
6632 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6635 if test "$getauxval" = "yes" ; then
6636 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6639 if test "$glusterfs" = "yes" ; then
6640 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6641 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6642 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6645 if test "$glusterfs_xlator_opt" = "yes" ; then
6646 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6649 if test "$glusterfs_discard" = "yes" ; then
6650 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6653 if test "$glusterfs_fallocate" = "yes" ; then
6654 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6657 if test "$glusterfs_zerofill" = "yes" ; then
6658 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6661 if test "$libssh2" = "yes" ; then
6662 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6663 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6664 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6667 if test "$live_block_migration" = "yes" ; then
6668 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6671 if test "$tpm" = "yes"; then
6672 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6673 # TPM passthrough support?
6674 if test "$tpm_passthrough" = "yes"; then
6675 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6677 # TPM emulator support?
6678 if test "$tpm_emulator" = "yes"; then
6679 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6683 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6684 if have_backend
"nop"; then
6685 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6687 if have_backend
"simple"; then
6688 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6689 # Set the appropriate trace file.
6690 trace_file
="\"$trace_file-\" FMT_pid"
6692 if have_backend
"log"; then
6693 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6695 if have_backend
"ust"; then
6696 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6698 if have_backend
"dtrace"; then
6699 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6700 if test "$trace_backend_stap" = "yes" ; then
6701 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6704 if have_backend
"ftrace"; then
6705 if test "$linux" = "yes" ; then
6706 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6708 feature_not_found
"ftrace(trace backend)" "ftrace requires Linux"
6711 if have_backend
"syslog"; then
6712 if test "$posix_syslog" = "yes" ; then
6713 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6715 feature_not_found
"syslog(trace backend)" "syslog not available"
6718 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6720 if test "$rdma" = "yes" ; then
6721 echo "CONFIG_RDMA=y" >> $config_host_mak
6722 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6725 if test "$pvrdma" = "yes" ; then
6726 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6729 if test "$have_rtnetlink" = "yes" ; then
6730 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6733 if test "$libxml2" = "yes" ; then
6734 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6735 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6736 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6739 if test "$replication" = "yes" ; then
6740 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6743 if test "$have_af_vsock" = "yes" ; then
6744 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6747 if test "$have_sysmacros" = "yes" ; then
6748 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6751 if test "$have_static_assert" = "yes" ; then
6752 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6755 if test "$have_utmpx" = "yes" ; then
6756 echo "HAVE_UTMPX=y" >> $config_host_mak
6759 if test "$ivshmem" = "yes" ; then
6760 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6762 if test "$capstone" != "no" ; then
6763 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6765 if test "$debug_mutex" = "yes" ; then
6766 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6769 # Hold two types of flag:
6770 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6771 # a thread we have a handle to
6772 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6774 if test "$pthread_setname_np" = "yes" ; then
6775 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6776 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6779 if test "$vxhs" = "yes" ; then
6780 echo "CONFIG_VXHS=y" >> $config_host_mak
6781 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6784 if test "$libpmem" = "yes" ; then
6785 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6788 if test "$tcg_interpreter" = "yes"; then
6789 QEMU_INCLUDES
="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6790 elif test "$ARCH" = "sparc64" ; then
6791 QEMU_INCLUDES
="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6792 elif test "$ARCH" = "s390x" ; then
6793 QEMU_INCLUDES
="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6794 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6795 QEMU_INCLUDES
="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6796 elif test "$ARCH" = "ppc64" ; then
6797 QEMU_INCLUDES
="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6799 QEMU_INCLUDES
="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6801 QEMU_INCLUDES
="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
6803 echo "TOOLS=$tools" >> $config_host_mak
6804 echo "ROMS=$roms" >> $config_host_mak
6805 echo "MAKE=$make" >> $config_host_mak
6806 echo "INSTALL=$install" >> $config_host_mak
6807 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6808 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6809 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6810 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6811 echo "PYTHON=$python" >> $config_host_mak
6812 echo "CC=$cc" >> $config_host_mak
6813 if $iasl -h > /dev
/null
2>&1; then
6814 echo "IASL=$iasl" >> $config_host_mak
6816 echo "HOST_CC=$host_cc" >> $config_host_mak
6817 echo "CXX=$cxx" >> $config_host_mak
6818 echo "OBJCC=$objcc" >> $config_host_mak
6819 echo "AR=$ar" >> $config_host_mak
6820 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6821 echo "AS=$as" >> $config_host_mak
6822 echo "CCAS=$ccas" >> $config_host_mak
6823 echo "CPP=$cpp" >> $config_host_mak
6824 echo "OBJCOPY=$objcopy" >> $config_host_mak
6825 echo "LD=$ld" >> $config_host_mak
6826 echo "RANLIB=$ranlib" >> $config_host_mak
6827 echo "NM=$nm" >> $config_host_mak
6828 echo "WINDRES=$windres" >> $config_host_mak
6829 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6830 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6831 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6832 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6833 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6834 if test "$sparse" = "yes" ; then
6835 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
6836 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
6837 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
6838 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6839 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6841 if test "$cross_prefix" != ""; then
6842 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6844 echo "AUTOCONF_HOST := " >> $config_host_mak
6846 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6847 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6848 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6849 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6850 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6851 echo "LIBS+=$LIBS" >> $config_host_mak
6852 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6853 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6854 echo "EXESUF=$EXESUF" >> $config_host_mak
6855 echo "DSOSUF=$DSOSUF" >> $config_host_mak
6856 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6857 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6858 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6859 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6860 echo "POD2MAN=$POD2MAN" >> $config_host_mak
6861 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6862 if test "$gcov" = "yes" ; then
6863 echo "CONFIG_GCOV=y" >> $config_host_mak
6864 echo "GCOV=$gcov_tool" >> $config_host_mak
6867 if test "$docker" != "no"; then
6868 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6871 # use included Linux headers
6872 if test "$linux" = "yes" ; then
6873 mkdir
-p linux-headers
6891 # For most CPUs the kernel architecture name and QEMU CPU name match.
6895 # For non-KVM architectures we will not have asm headers
6896 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6897 symlink
"$source_path/linux-headers/asm-$linux_arch" linux-headers
/asm
6901 for target
in $target_list; do
6902 target_dir
="$target"
6903 config_target_mak
=$target_dir/config-target.mak
6904 target_name
=$
(echo $target | cut
-d '-' -f 1)
6905 target_bigendian
="no"
6907 case "$target_name" in
6908 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb
)
6909 target_bigendian
=yes
6913 target_user_only
="no"
6914 target_linux_user
="no"
6915 target_bsd_user
="no"
6917 ${target_name}-softmmu)
6918 target_softmmu
="yes"
6920 ${target_name}-linux-user)
6921 target_user_only
="yes"
6922 target_linux_user
="yes"
6924 ${target_name}-bsd-user)
6925 target_user_only
="yes"
6926 target_bsd_user
="yes"
6929 error_exit
"Target '$target' not recognised"
6935 target_compiler_static
=""
6936 target_compiler_cflags
=""
6938 mkdir
-p $target_dir
6939 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6943 interp_prefix1
=$
(echo "$interp_prefix" |
sed "s/%M/$target_name/g")
6946 TARGET_ARCH
="$target_name"
6950 case "$target_name" in
6953 gdb_xml_files
="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6954 target_compiler
=$cross_cc_i386
6955 target_compiler_cflags
=$cross_cc_ccflags_i386
6958 TARGET_BASE_ARCH
=i386
6960 gdb_xml_files
="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6961 target_compiler
=$cross_cc_x86_64
6965 target_compiler
=$cross_cc_alpha
6971 gdb_xml_files
="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6972 target_compiler
=$cross_cc_arm
6973 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
6977 TARGET_BASE_ARCH
=arm
6980 gdb_xml_files
="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6981 target_compiler
=$cross_cc_aarch64
6982 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
6985 target_compiler
=$cross_cc_cris
6989 target_compiler
=$cross_cc_hppa
6992 target_compiler
=$cross_cc_lm32
6996 gdb_xml_files
="cf-core.xml cf-fp.xml m68k-fp.xml"
6997 target_compiler
=$cross_cc_m68k
6999 microblaze|microblazeel
)
7000 TARGET_ARCH
=microblaze
7002 echo "TARGET_ABI32=y" >> $config_target_mak
7003 target_compiler
=$cross_cc_microblaze
7007 target_compiler
=$cross_cc_mips
7008 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7012 TARGET_BASE_ARCH
=mips
7013 target_compiler
=$cross_cc_mipsn32
7014 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7015 echo "TARGET_ABI32=y" >> $config_target_mak
7019 TARGET_BASE_ARCH
=mips
7020 target_compiler
=$cross_cc_mips64
7021 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7024 target_compiler
=$cross_cc_moxie
7027 target_compiler
=$cross_cc_nios2
7030 target_compiler
=$cross_cc_or1k
7031 TARGET_ARCH
=openrisc
7032 TARGET_BASE_ARCH
=openrisc
7035 gdb_xml_files
="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7036 target_compiler
=$cross_cc_powerpc
7039 TARGET_BASE_ARCH
=ppc
7042 gdb_xml_files
="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7043 target_compiler
=$cross_cc_ppc64
7047 TARGET_BASE_ARCH
=ppc
7050 gdb_xml_files
="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7051 target_compiler
=$cross_cc_ppc64le
7055 TARGET_BASE_ARCH
=ppc
7057 echo "TARGET_ABI32=y" >> $config_target_mak
7058 gdb_xml_files
="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7059 target_compiler
=$cross_cc_ppc64abi32
7062 TARGET_BASE_ARCH
=riscv
7063 TARGET_ABI_DIR
=riscv
7065 target_compiler
=$cross_cc_riscv32
7068 TARGET_BASE_ARCH
=riscv
7069 TARGET_ABI_DIR
=riscv
7071 target_compiler
=$cross_cc_riscv64
7076 target_compiler
=$cross_cc_sh4
7079 target_compiler
=$cross_cc_sparc
7082 TARGET_BASE_ARCH
=sparc
7083 target_compiler
=$cross_cc_sparc64
7087 TARGET_BASE_ARCH
=sparc
7088 TARGET_ABI_DIR
=sparc
7089 target_compiler
=$cross_cc_sparc32plus
7090 echo "TARGET_ABI32=y" >> $config_target_mak
7094 gdb_xml_files
="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7095 target_compiler
=$cross_cc_s390x
7098 target_compiler
=$cross_cc_tilegx
7101 target_compiler
=$cross_cc_tricore
7104 target_compiler
=$cross_cc_unicore32
7110 target_compiler
=$cross_cc_xtensa
7113 error_exit
"Unsupported target CPU"
7116 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7117 if [ "$TARGET_BASE_ARCH" = "" ]; then
7118 TARGET_BASE_ARCH
=$TARGET_ARCH
7121 # Do we have a cross compiler for this target?
7122 if has
$target_compiler; then
7126 if ! do_compiler
"$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
7127 # For host systems we might get away with building without -static
7128 if ! do_compiler
"$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
7131 enabled_cross_compilers
="${enabled_cross_compilers} '${target_compiler}'"
7132 target_compiler_static
="n"
7135 enabled_cross_compilers
="${enabled_cross_compilers} '${target_compiler}'"
7136 target_compiler_static
="y"
7142 symlink
"$source_path/Makefile.target" "$target_dir/Makefile"
7145 echo "$@"| LC_ALL
=C
tr '[a-z]' '[A-Z]'
7148 target_arch_name
="$(upper $TARGET_ARCH)"
7149 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7150 echo "TARGET_NAME=$target_name" >> $config_target_mak
7151 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7152 if [ "$TARGET_ABI_DIR" = "" ]; then
7153 TARGET_ABI_DIR
=$TARGET_ARCH
7155 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7156 if [ "$HOST_VARIANT_DIR" != "" ]; then
7157 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7160 if supported_xen_target
$target; then
7161 echo "CONFIG_XEN=y" >> $config_target_mak
7162 if test "$xen_pci_passthrough" = yes; then
7163 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7166 if supported_kvm_target
$target; then
7167 echo "CONFIG_KVM=y" >> $config_target_mak
7168 if test "$vhost_net" = "yes" ; then
7169 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
7170 if test "$vhost_user" = "yes" ; then
7171 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7175 if supported_hax_target
$target; then
7176 echo "CONFIG_HAX=y" >> $config_target_mak
7178 if supported_hvf_target
$target; then
7179 echo "CONFIG_HVF=y" >> $config_target_mak
7181 if supported_whpx_target
$target; then
7182 echo "CONFIG_WHPX=y" >> $config_target_mak
7184 if test "$target_bigendian" = "yes" ; then
7185 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7187 if test "$target_softmmu" = "yes" ; then
7188 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7189 if test "$mttcg" = "yes" ; then
7190 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7193 if test "$target_user_only" = "yes" ; then
7194 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7195 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7197 if test "$target_linux_user" = "yes" ; then
7198 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7201 if test ! -z "$gdb_xml_files" ; then
7202 for x
in $gdb_xml_files; do
7203 list
="$list $source_path/gdb-xml/$x"
7205 echo "TARGET_XML_FILES=$list" >> $config_target_mak
7208 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
7209 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7211 if test "$target_bsd_user" = "yes" ; then
7212 echo "CONFIG_BSD_USER=y" >> $config_target_mak
7215 if test -n "$target_compiler"; then
7216 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7218 if test -n "$target_compiler_static"; then
7219 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7222 if test -n "$target_compiler_cflags"; then
7223 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7228 # generate QEMU_CFLAGS/LDFLAGS for targets
7234 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7235 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7238 for i
in $ARCH $TARGET_BASE_ARCH ; do
7241 disas_config
"ALPHA"
7244 if test -n "${cxx}"; then
7245 disas_config
"ARM_A64"
7250 if test -n "${cxx}"; then
7251 disas_config
"ARM_A64"
7270 disas_config
"MICROBLAZE"
7274 if test -n "${cxx}"; then
7275 disas_config
"NANOMIPS"
7279 disas_config
"MOXIE"
7282 disas_config
"NIOS2"
7285 disas_config
"OPENRISC"
7291 disas_config
"RISCV"
7300 disas_config
"SPARC"
7303 disas_config
"XTENSA"
7307 if test "$tcg_interpreter" = "yes" ; then
7313 # Ensure there's only a single GP
7314 cflags
="-msmall-data $cflags"
7318 if test "$gprof" = "yes" ; then
7319 echo "TARGET_GPROF=yes" >> $config_target_mak
7320 if test "$target_linux_user" = "yes" ; then
7322 ldflags
="-p $ldflags"
7324 if test "$target_softmmu" = "yes" ; then
7325 ldflags
="-p $ldflags"
7326 echo "GPROF_CFLAGS=-p" >> $config_target_mak
7330 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
7331 ldflags
="$ldflags $textseg_ldflags"
7334 # Newer kernels on s390 check for an S390_PGSTE program header and
7335 # enable the pgste page table extensions in that case. This makes
7336 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7338 # - we build on s390x
7339 # - we build the system emulation for s390x (qemu-system-s390x)
7341 # - the linker supports --s390-pgste
7342 if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7343 if ld_has
--s390-pgste ; then
7344 ldflags
="-Wl,--s390-pgste $ldflags"
7348 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7349 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7351 done # for target in $targets
7353 if test -n "$enabled_cross_compilers"; then
7355 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7358 if [ "$fdt" = "git" ]; then
7359 echo "config-host.h: subdir-dtc" >> $config_host_mak
7361 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7362 echo "config-host.h: subdir-capstone" >> $config_host_mak
7364 if test -n "$LIBCAPSTONE"; then
7365 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7368 if test "$numa" = "yes"; then
7369 echo "CONFIG_NUMA=y" >> $config_host_mak
7372 if test "$ccache_cpp2" = "yes"; then
7373 echo "export CCACHE_CPP2=y" >> $config_host_mak
7376 # build tree in object directory in case the source is not in the current directory
7377 DIRS
="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7378 DIRS
="$DIRS tests/fp"
7379 DIRS
="$DIRS docs docs/interop fsdev scsi"
7380 DIRS
="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7381 DIRS
="$DIRS roms/seabios roms/vgabios"
7382 FILES
="Makefile tests/tcg/Makefile qdict-test-data.txt"
7383 FILES
="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7384 FILES
="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7385 FILES
="$FILES tests/fp/Makefile"
7386 FILES
="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
7387 FILES
="$FILES pc-bios/spapr-rtas/Makefile"
7388 FILES
="$FILES pc-bios/s390-ccw/Makefile"
7389 FILES
="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
7390 FILES
="$FILES pc-bios/qemu-icon.bmp"
7391 FILES
="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
7393 $source_path/pc-bios
/*.bin \
7394 $source_path/pc-bios
/*.lid \
7395 $source_path/pc-bios
/*.aml \
7396 $source_path/pc-bios
/*.rom \
7397 $source_path/pc-bios
/*.dtb \
7398 $source_path/pc-bios
/*.img \
7399 $source_path/pc-bios
/openbios-
* \
7400 $source_path/pc-bios
/u-boot.
* \
7401 $source_path/pc-bios
/palcode-
*
7403 FILES
="$FILES pc-bios/$(basename $bios_file)"
7405 for test_file
in $
(find $source_path/tests
/acpi-test-data
-type f
)
7407 FILES
="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
7409 for test_file
in $
(find $source_path/tests
/hex-loader-check-data
-type f
)
7411 FILES
="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7414 for f
in $FILES ; do
7415 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7416 symlink
"$source_path/$f" "$f"
7420 # temporary config to build submodules
7421 for rom
in seabios vgabios
; do
7422 config_mak
=roms
/$rom/config.mak
7423 echo "# Automatically generated by configure - do not modify" > $config_mak
7424 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7425 echo "AS=$as" >> $config_mak
7426 echo "CCAS=$ccas" >> $config_mak
7427 echo "CC=$cc" >> $config_mak
7428 echo "BCC=bcc" >> $config_mak
7429 echo "CPP=$cpp" >> $config_mak
7430 echo "OBJCOPY=objcopy" >> $config_mak
7431 echo "IASL=$iasl" >> $config_mak
7432 echo "LD=$ld" >> $config_mak
7433 echo "RANLIB=$ranlib" >> $config_mak
7436 # set up tests data directory
7437 for tests_subdir
in acceptance data
; do
7438 if [ ! -e tests
/$tests_subdir ]; then
7439 symlink
"$source_path/tests/$tests_subdir" tests
/$tests_subdir
7443 # set up qemu-iotests in this build directory
7444 iotests_common_env
="tests/qemu-iotests/common.env"
7445 iotests_check
="tests/qemu-iotests/check"
7447 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7448 echo >> "$iotests_common_env"
7449 echo "export PYTHON='$python'" >> "$iotests_common_env"
7451 if [ ! -e "$iotests_check" ]; then
7452 symlink
"$source_path/$iotests_check" "$iotests_check"
7455 # Save the configure command line for later reuse.
7456 cat <<EOD >config.status
7458 # Generated by configure.
7459 # Run this file to recreate the current configuration.
7460 # Compiler output produced by configure, useful for debugging
7461 # configure, is in config.log if it exists.
7467 eval envval
=\$
$envname
7469 if test -n "$envval"
7471 echo "$envname='$envval'" >> config.status
7472 echo "export $envname" >> config.status
7474 echo "unset $envname" >> config.status
7478 # Preserve various env variables that influence what
7479 # features/build target configure will detect
7485 preserve_env INSTALL
7487 preserve_env LD_LIBRARY_PATH
7488 preserve_env LIBTOOL
7491 preserve_env OBJCOPY
7493 preserve_env PKG_CONFIG
7494 preserve_env PKG_CONFIG_LIBDIR
7495 preserve_env PKG_CONFIG_PATH
7497 preserve_env SDL_CONFIG
7498 preserve_env SDL2_CONFIG
7501 preserve_env WINDRES
7503 printf "exec" >>config.status
7504 printf " '%s'" "$0" "$@" >>config.status
7505 echo ' "$@"' >>config.status
7506 chmod +x config.status