1#!/bin/sh 2# 3# qemu configure script (c) 2003 Fabrice Bellard 4# 5 6# Unset some variables known to interfere with behavior of common tools, 7# just as autoconf does. 8CLICOLOR_FORCE= GREP_OPTIONS= 9unset CLICOLOR_FORCE GREP_OPTIONS 10 11# Don't allow CCACHE, if present, to use cached results of compile tests! 12export CCACHE_RECACHE=yes 13 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.) 19TMPDIR1="config-temp" 20rm -rf "${TMPDIR1}" 21mkdir -p "${TMPDIR1}" 22if [ $? -ne 0 ]; then 23 echo "ERROR: failed to create temporary directory" 24 exit 1 25fi 26 27TMPB="qemu-conf" 28TMPC="${TMPDIR1}/${TMPB}.c" 29TMPO="${TMPDIR1}/${TMPB}.o" 30TMPCXX="${TMPDIR1}/${TMPB}.cxx" 31TMPE="${TMPDIR1}/${TMPB}.exe" 32TMPMO="${TMPDIR1}/${TMPB}.mo" 33 34rm -f config.log 35 36# Print a helpful header at the top of config.log 37echo "# QEMU configure log $(date)" >> config.log 38printf "# Configured with:" >> config.log 39printf " '%s'" "$0" "$@" >> config.log 40echo >> config.log 41echo "#" >> config.log 42 43print_error() { 44 (echo 45 echo "ERROR: $1" 46 while test -n "$2"; do 47 echo " $2" 48 shift 49 done 50 echo) >&2 51} 52 53error_exit() { 54 print_error "$@" 55 exit 1 56} 57 58do_compiler() { 59 # Run the compiler, capturing its output to the log. First argument 60 # is compiler binary to execute. 61 local compiler="$1" 62 shift 63 echo $compiler "$@" >> config.log 64 $compiler "$@" >> config.log 2>&1 || return $? 65 # Test passed. If this is an --enable-werror build, rerun 66 # the test with -Werror and bail out if it fails. This 67 # makes warning-generating-errors in configure test code 68 # obvious to developers. 69 if test "$werror" != "yes"; then 70 return 0 71 fi 72 # Don't bother rerunning the compile if we were already using -Werror 73 case "$*" in 74 *-Werror*) 75 return 0 76 ;; 77 esac 78 echo $compiler -Werror "$@" >> config.log 79 $compiler -Werror "$@" >> config.log 2>&1 && return $? 80 error_exit "configure test passed without -Werror but failed with -Werror." \ 81 "This is probably a bug in the configure script. The failing command" \ 82 "will be at the bottom of config.log." \ 83 "You can run configure with --disable-werror to bypass this check." 84} 85 86do_cc() { 87 do_compiler "$cc" "$@" 88} 89 90do_cxx() { 91 do_compiler "$cxx" "$@" 92} 93 94update_cxxflags() { 95 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those 96 # options which some versions of GCC's C++ compiler complain about 97 # because they only make sense for C programs. 98 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS" 99 100 for arg in $QEMU_CFLAGS; do 101 case $arg in 102 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ 103 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) 104 ;; 105 *) 106 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg 107 ;; 108 esac 109 done 110} 111 112compile_object() { 113 local_cflags="$1" 114 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC 115} 116 117compile_prog() { 118 local_cflags="$1" 119 local_ldflags="$2" 120 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags 121} 122 123# symbolically link $1 to $2. Portable version of "ln -sf". 124symlink() { 125 rm -rf "$2" 126 mkdir -p "$(dirname "$2")" 127 ln -s "$1" "$2" 128} 129 130# check whether a command is available to this shell (may be either an 131# executable or a builtin) 132has() { 133 type "$1" >/dev/null 2>&1 134} 135 136# search for an executable in PATH 137path_of() { 138 local_command="$1" 139 local_ifs="$IFS" 140 local_dir="" 141 142 # pathname has a dir component? 143 if [ "${local_command#*/}" != "$local_command" ]; then 144 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then 145 echo "$local_command" 146 return 0 147 fi 148 fi 149 if [ -z "$local_command" ]; then 150 return 1 151 fi 152 153 IFS=: 154 for local_dir in $PATH; do 155 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then 156 echo "$local_dir/$local_command" 157 IFS="${local_ifs:-$(printf ' \t\n')}" 158 return 0 159 fi 160 done 161 # not found 162 IFS="${local_ifs:-$(printf ' \t\n')}" 163 return 1 164} 165 166have_backend () { 167 echo "$trace_backends" | grep "$1" >/dev/null 168} 169 170glob() { 171 eval test -z '"${1#'"$2"'}"' 172} 173 174supported_hax_target() { 175 test "$hax" = "yes" || return 1 176 glob "$1" "*-softmmu" || return 1 177 case "${1%-softmmu}" in 178 i386|x86_64) 179 return 0 180 ;; 181 esac 182 return 1 183} 184 185supported_kvm_target() { 186 test "$kvm" = "yes" || return 1 187 glob "$1" "*-softmmu" || return 1 188 case "${1%-softmmu}:$cpu" in 189 arm:arm | aarch64:aarch64 | \ 190 i386:i386 | i386:x86_64 | i386:x32 | \ 191 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \ 192 mips:mips | mipsel:mips | \ 193 ppc:ppc | ppcemb:ppc | ppc64:ppc | \ 194 ppc:ppc64 | ppcemb:ppc64 | ppc64:ppc64 | \ 195 s390x:s390x) 196 return 0 197 ;; 198 esac 199 return 1 200} 201 202supported_xen_target() { 203 test "$xen" = "yes" || return 1 204 glob "$1" "*-softmmu" || return 1 205 # Only i386 and x86_64 provide the xenpv machine. 206 case "${1%-softmmu}" in 207 i386|x86_64) 208 return 0 209 ;; 210 esac 211 return 1 212} 213 214supported_target() { 215 case "$1" in 216 *-softmmu) 217 ;; 218 *-linux-user) 219 if test "$linux" != "yes"; then 220 print_error "Target '$target' is only available on a Linux host" 221 return 1 222 fi 223 ;; 224 *-bsd-user) 225 if test "$bsd" != "yes"; then 226 print_error "Target '$target' is only available on a BSD host" 227 return 1 228 fi 229 ;; 230 *) 231 print_error "Invalid target name '$target'" 232 return 1 233 ;; 234 esac 235 test "$tcg" = "yes" && return 0 236 supported_kvm_target "$1" && return 0 237 supported_xen_target "$1" && return 0 238 supported_hax_target "$1" && return 0 239 print_error "TCG disabled, but hardware accelerator not available for '$target'" 240 return 1 241} 242 243 244ld_has() { 245 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 246} 247 248# default parameters 249source_path=$(dirname "$0") 250cpu="" 251iasl="iasl" 252interp_prefix="/usr/gnemul/qemu-%M" 253static="no" 254cross_prefix="" 255audio_drv_list="" 256block_drv_rw_whitelist="" 257block_drv_ro_whitelist="" 258host_cc="cc" 259libs_softmmu="" 260libs_tools="" 261audio_pt_int="" 262audio_win_int="" 263cc_i386=i386-pc-linux-gnu-gcc 264libs_qga="" 265debug_info="yes" 266stack_protector="" 267 268# Don't accept a target_list environment variable. 269unset target_list 270 271# Default value for a variable defining feature "foo". 272# * foo="no" feature will only be used if --enable-foo arg is given 273# * foo="" feature will be searched for, and if found, will be used 274# unless --disable-foo is given 275# * foo="yes" this value will only be set by --enable-foo flag. 276# feature will searched for, 277# if not found, configure exits with error 278# 279# Always add --enable-foo and --disable-foo command line args. 280# Distributions want to ensure that several features are compiled in, and it 281# is impossible without a --enable-foo that exits if a feature is not found. 282 283bluez="" 284brlapi="" 285curl="" 286curses="" 287docs="" 288fdt="" 289netmap="no" 290sdl="" 291sdlabi="" 292virtfs="" 293mpath="" 294vnc="yes" 295sparse="no" 296vde="" 297vnc_sasl="" 298vnc_jpeg="" 299vnc_png="" 300xen="" 301xen_ctrl_version="" 302xen_pv_domain_build="no" 303xen_pci_passthrough="" 304linux_aio="" 305cap_ng="" 306attr="" 307libattr="" 308xfs="" 309tcg="yes" 310 311vhost_net="no" 312vhost_scsi="no" 313vhost_vsock="no" 314vhost_user="" 315kvm="no" 316hax="no" 317rdma="" 318gprof="no" 319debug_tcg="no" 320debug="no" 321fortify_source="" 322strip_opt="yes" 323tcg_interpreter="no" 324bigendian="no" 325mingw32="no" 326gcov="no" 327gcov_tool="gcov" 328EXESUF="" 329DSOSUF=".so" 330LDFLAGS_SHARED="-shared" 331modules="no" 332prefix="/usr/local" 333mandir="\${prefix}/share/man" 334datadir="\${prefix}/share" 335firmwarepath="\${prefix}/share/qemu-firmware" 336qemu_docdir="\${prefix}/share/doc/qemu" 337bindir="\${prefix}/bin" 338libdir="\${prefix}/lib" 339libexecdir="\${prefix}/libexec" 340includedir="\${prefix}/include" 341sysconfdir="\${prefix}/etc" 342local_statedir="\${prefix}/var" 343confsuffix="/qemu" 344slirp="yes" 345oss_lib="" 346bsd="no" 347linux="no" 348solaris="no" 349profiler="no" 350cocoa="no" 351softmmu="yes" 352linux_user="no" 353bsd_user="no" 354blobs="yes" 355pkgversion="" 356pie="" 357qom_cast_debug="yes" 358trace_backends="log" 359trace_file="trace" 360spice="" 361rbd="" 362smartcard="" 363libusb="" 364usb_redir="" 365opengl="" 366opengl_dmabuf="no" 367cpuid_h="no" 368avx2_opt="no" 369zlib="yes" 370lzo="" 371snappy="" 372bzip2="" 373guest_agent="" 374guest_agent_with_vss="no" 375guest_agent_ntddscsi="no" 376guest_agent_msi="" 377vss_win32_sdk="" 378win_sdk="no" 379want_tools="yes" 380libiscsi="" 381libnfs="" 382coroutine="" 383coroutine_pool="" 384debug_stack_usage="no" 385crypto_afalg="no" 386seccomp="" 387glusterfs="" 388glusterfs_xlator_opt="no" 389glusterfs_discard="no" 390glusterfs_fallocate="no" 391glusterfs_zerofill="no" 392gtk="" 393gtkabi="" 394gtk_gl="no" 395tls_priority="NORMAL" 396gnutls="" 397gnutls_rnd="" 398nettle="" 399nettle_kdf="no" 400gcrypt="" 401gcrypt_hmac="no" 402gcrypt_kdf="no" 403vte="" 404virglrenderer="" 405tpm="yes" 406libssh2="" 407live_block_migration="yes" 408numa="" 409tcmalloc="no" 410jemalloc="no" 411replication="yes" 412vxhs="" 413 414supported_cpu="no" 415supported_os="no" 416bogus_os="no" 417 418# parse CC options first 419for opt do 420 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 421 case "$opt" in 422 --cross-prefix=*) cross_prefix="$optarg" 423 ;; 424 --cc=*) CC="$optarg" 425 ;; 426 --cxx=*) CXX="$optarg" 427 ;; 428 --source-path=*) source_path="$optarg" 429 ;; 430 --cpu=*) cpu="$optarg" 431 ;; 432 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" 433 EXTRA_CFLAGS="$optarg" 434 ;; 435 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" 436 EXTRA_CXXFLAGS="$optarg" 437 ;; 438 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg" 439 EXTRA_LDFLAGS="$optarg" 440 ;; 441 --enable-debug-info) debug_info="yes" 442 ;; 443 --disable-debug-info) debug_info="no" 444 ;; 445 esac 446done 447# OS specific 448# Using uname is really, really broken. Once we have the right set of checks 449# we can eliminate its usage altogether. 450 451# Preferred compiler: 452# ${CC} (if set) 453# ${cross_prefix}gcc (if cross-prefix specified) 454# system compiler 455if test -z "${CC}${cross_prefix}"; then 456 cc="$host_cc" 457else 458 cc="${CC-${cross_prefix}gcc}" 459fi 460 461if test -z "${CXX}${cross_prefix}"; then 462 cxx="c++" 463else 464 cxx="${CXX-${cross_prefix}g++}" 465fi 466 467ar="${AR-${cross_prefix}ar}" 468as="${AS-${cross_prefix}as}" 469ccas="${CCAS-$cc}" 470cpp="${CPP-$cc -E}" 471objcopy="${OBJCOPY-${cross_prefix}objcopy}" 472ld="${LD-${cross_prefix}ld}" 473nm="${NM-${cross_prefix}nm}" 474strip="${STRIP-${cross_prefix}strip}" 475windres="${WINDRES-${cross_prefix}windres}" 476pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" 477query_pkg_config() { 478 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" 479} 480pkg_config=query_pkg_config 481sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}" 482sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" 483 484# If the user hasn't specified ARFLAGS, default to 'rv', just as make does. 485ARFLAGS="${ARFLAGS-rv}" 486 487# default flags for all hosts 488# We use -fwrapv to tell the compiler that we require a C dialect where 489# left shift of signed integers is well defined and has the expected 490# 2s-complement style results. (Both clang and gcc agree that it 491# provides these semantics.) 492QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS" 493QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" 494QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" 495QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" 496QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include" 497if test "$debug_info" = "yes"; then 498 CFLAGS="-g $CFLAGS" 499 LDFLAGS="-g $LDFLAGS" 500fi 501 502# make source path absolute 503source_path=$(cd "$source_path"; pwd) 504 505# running configure in the source tree? 506# we know that's the case if configure is there. 507if test -f "./configure"; then 508 pwd_is_source_path="y" 509else 510 pwd_is_source_path="n" 511fi 512 513check_define() { 514cat > $TMPC <<EOF 515#if !defined($1) 516#error $1 not defined 517#endif 518int main(void) { return 0; } 519EOF 520 compile_object 521} 522 523check_include() { 524cat > $TMPC <<EOF 525#include <$1> 526int main(void) { return 0; } 527EOF 528 compile_object 529} 530 531write_c_skeleton() { 532 cat > $TMPC <<EOF 533int main(void) { return 0; } 534EOF 535} 536 537if check_define __linux__ ; then 538 targetos="Linux" 539elif check_define _WIN32 ; then 540 targetos='MINGW32' 541elif check_define __OpenBSD__ ; then 542 targetos='OpenBSD' 543elif check_define __sun__ ; then 544 targetos='SunOS' 545elif check_define __HAIKU__ ; then 546 targetos='Haiku' 547elif check_define __FreeBSD__ ; then 548 targetos='FreeBSD' 549elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then 550 targetos='GNU/kFreeBSD' 551elif check_define __DragonFly__ ; then 552 targetos='DragonFly' 553elif check_define __NetBSD__; then 554 targetos='NetBSD' 555elif check_define __APPLE__; then 556 targetos='Darwin' 557else 558 # This is a fatal error, but don't report it yet, because we 559 # might be going to just print the --help text, or it might 560 # be the result of a missing compiler. 561 targetos='bogus' 562 bogus_os='yes' 563fi 564 565# Some host OSes need non-standard checks for which CPU to use. 566# Note that these checks are broken for cross-compilation: if you're 567# cross-compiling to one of these OSes then you'll need to specify 568# the correct CPU with the --cpu option. 569case $targetos in 570Darwin) 571 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can 572 # run 64-bit userspace code. 573 # If the user didn't specify a CPU explicitly and the kernel says this is 574 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code. 575 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then 576 cpu="x86_64" 577 fi 578 ;; 579SunOS) 580 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo 581 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then 582 cpu="x86_64" 583 fi 584esac 585 586if test ! -z "$cpu" ; then 587 # command line argument 588 : 589elif check_define __i386__ ; then 590 cpu="i386" 591elif check_define __x86_64__ ; then 592 if check_define __ILP32__ ; then 593 cpu="x32" 594 else 595 cpu="x86_64" 596 fi 597elif check_define __sparc__ ; then 598 if check_define __arch64__ ; then 599 cpu="sparc64" 600 else 601 cpu="sparc" 602 fi 603elif check_define _ARCH_PPC ; then 604 if check_define _ARCH_PPC64 ; then 605 cpu="ppc64" 606 else 607 cpu="ppc" 608 fi 609elif check_define __mips__ ; then 610 cpu="mips" 611elif check_define __ia64__ ; then 612 cpu="ia64" 613elif check_define __s390__ ; then 614 if check_define __s390x__ ; then 615 cpu="s390x" 616 else 617 cpu="s390" 618 fi 619elif check_define __arm__ ; then 620 cpu="arm" 621elif check_define __aarch64__ ; then 622 cpu="aarch64" 623else 624 cpu=$(uname -m) 625fi 626 627ARCH= 628# Normalise host CPU name and set ARCH. 629# Note that this case should only have supported host CPUs, not guests. 630case "$cpu" in 631 ppc|ppc64|s390|s390x|sparc64|x32) 632 cpu="$cpu" 633 supported_cpu="yes" 634 ;; 635 i386|i486|i586|i686|i86pc|BePC) 636 cpu="i386" 637 supported_cpu="yes" 638 ;; 639 x86_64|amd64) 640 cpu="x86_64" 641 supported_cpu="yes" 642 ;; 643 armv*b|armv*l|arm) 644 cpu="arm" 645 supported_cpu="yes" 646 ;; 647 aarch64) 648 cpu="aarch64" 649 supported_cpu="yes" 650 ;; 651 mips*) 652 cpu="mips" 653 supported_cpu="yes" 654 ;; 655 sparc|sun4[cdmuv]) 656 cpu="sparc" 657 supported_cpu="yes" 658 ;; 659 *) 660 # This will result in either an error or falling back to TCI later 661 ARCH=unknown 662 ;; 663esac 664if test -z "$ARCH"; then 665 ARCH="$cpu" 666fi 667 668# OS specific 669 670# host *BSD for user mode 671HOST_VARIANT_DIR="" 672 673case $targetos in 674MINGW32*) 675 mingw32="yes" 676 hax="yes" 677 audio_possible_drivers="dsound sdl" 678 if check_include dsound.h; then 679 audio_drv_list="dsound" 680 else 681 audio_drv_list="" 682 fi 683 supported_os="yes" 684;; 685GNU/kFreeBSD) 686 bsd="yes" 687 audio_drv_list="oss" 688 audio_possible_drivers="oss sdl pa" 689;; 690FreeBSD) 691 bsd="yes" 692 make="${MAKE-gmake}" 693 audio_drv_list="oss" 694 audio_possible_drivers="oss sdl pa" 695 # needed for kinfo_getvmmap(3) in libutil.h 696 LIBS="-lutil $LIBS" 697 # needed for kinfo_getproc 698 libs_qga="-lutil $libs_qga" 699 netmap="" # enable netmap autodetect 700 HOST_VARIANT_DIR="freebsd" 701 supported_os="yes" 702;; 703DragonFly) 704 bsd="yes" 705 make="${MAKE-gmake}" 706 audio_drv_list="oss" 707 audio_possible_drivers="oss sdl pa" 708 HOST_VARIANT_DIR="dragonfly" 709;; 710NetBSD) 711 bsd="yes" 712 make="${MAKE-gmake}" 713 audio_drv_list="oss" 714 audio_possible_drivers="oss sdl" 715 oss_lib="-lossaudio" 716 HOST_VARIANT_DIR="netbsd" 717 supported_os="yes" 718;; 719OpenBSD) 720 bsd="yes" 721 make="${MAKE-gmake}" 722 audio_drv_list="sdl" 723 audio_possible_drivers="sdl" 724 HOST_VARIANT_DIR="openbsd" 725;; 726Darwin) 727 bsd="yes" 728 darwin="yes" 729 hax="yes" 730 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup" 731 if [ "$cpu" = "x86_64" ] ; then 732 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS" 733 LDFLAGS="-arch x86_64 $LDFLAGS" 734 fi 735 cocoa="yes" 736 audio_drv_list="coreaudio" 737 audio_possible_drivers="coreaudio sdl" 738 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS" 739 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu" 740 # Disable attempts to use ObjectiveC features in os/object.h since they 741 # won't work when we're compiling with gcc as a C compiler. 742 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS" 743 HOST_VARIANT_DIR="darwin" 744 supported_os="yes" 745;; 746SunOS) 747 solaris="yes" 748 make="${MAKE-gmake}" 749 install="${INSTALL-ginstall}" 750 smbd="${SMBD-/usr/sfw/sbin/smbd}" 751 if test -f /usr/include/sys/soundcard.h ; then 752 audio_drv_list="oss" 753 fi 754 audio_possible_drivers="oss sdl" 755# needed for CMSG_ macros in sys/socket.h 756 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS" 757# needed for TIOCWIN* defines in termios.h 758 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS" 759 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS" 760 solarisnetlibs="-lsocket -lnsl -lresolv" 761 LIBS="$solarisnetlibs $LIBS" 762 libs_qga="$solarisnetlibs $libs_qga" 763;; 764Haiku) 765 haiku="yes" 766 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS" 767 LIBS="-lposix_error_mapper -lnetwork $LIBS" 768;; 769Linux) 770 audio_drv_list="oss" 771 audio_possible_drivers="oss alsa sdl pa" 772 linux="yes" 773 linux_user="yes" 774 kvm="yes" 775 vhost_net="yes" 776 vhost_scsi="yes" 777 vhost_vsock="yes" 778 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES" 779 supported_os="yes" 780;; 781esac 782 783if [ "$bsd" = "yes" ] ; then 784 if [ "$darwin" != "yes" ] ; then 785 bsd_user="yes" 786 fi 787fi 788 789: ${make=${MAKE-make}} 790: ${install=${INSTALL-install}} 791: ${python=${PYTHON-python}} 792: ${smbd=${SMBD-/usr/sbin/smbd}} 793 794# Default objcc to clang if available, otherwise use CC 795if has clang; then 796 objcc=clang 797else 798 objcc="$cc" 799fi 800 801if test "$mingw32" = "yes" ; then 802 EXESUF=".exe" 803 DSOSUF=".dll" 804 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS" 805 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later) 806 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS" 807 # MinGW needs -mthreads for TLS and macro _MT. 808 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS" 809 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS" 810 write_c_skeleton; 811 if compile_prog "" "-liberty" ; then 812 LIBS="-liberty $LIBS" 813 fi 814 prefix="c:/Program Files/QEMU" 815 mandir="\${prefix}" 816 datadir="\${prefix}" 817 qemu_docdir="\${prefix}" 818 bindir="\${prefix}" 819 sysconfdir="\${prefix}" 820 local_statedir= 821 confsuffix="" 822 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -liphlpapi -lnetapi32 $libs_qga" 823fi 824 825werror="" 826 827for opt do 828 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 829 case "$opt" in 830 --help|-h) show_help=yes 831 ;; 832 --version|-V) exec cat $source_path/VERSION 833 ;; 834 --prefix=*) prefix="$optarg" 835 ;; 836 --interp-prefix=*) interp_prefix="$optarg" 837 ;; 838 --source-path=*) 839 ;; 840 --cross-prefix=*) 841 ;; 842 --cc=*) 843 ;; 844 --host-cc=*) host_cc="$optarg" 845 ;; 846 --cxx=*) 847 ;; 848 --iasl=*) iasl="$optarg" 849 ;; 850 --objcc=*) objcc="$optarg" 851 ;; 852 --make=*) make="$optarg" 853 ;; 854 --install=*) install="$optarg" 855 ;; 856 --python=*) python="$optarg" 857 ;; 858 --gcov=*) gcov_tool="$optarg" 859 ;; 860 --smbd=*) smbd="$optarg" 861 ;; 862 --extra-cflags=*) 863 ;; 864 --extra-cxxflags=*) 865 ;; 866 --extra-ldflags=*) 867 ;; 868 --enable-debug-info) 869 ;; 870 --disable-debug-info) 871 ;; 872 --enable-modules) 873 modules="yes" 874 ;; 875 --disable-modules) 876 modules="no" 877 ;; 878 --cpu=*) 879 ;; 880 --target-list=*) target_list="$optarg" 881 ;; 882 --enable-trace-backends=*) trace_backends="$optarg" 883 ;; 884 # XXX: backwards compatibility 885 --enable-trace-backend=*) trace_backends="$optarg" 886 ;; 887 --with-trace-file=*) trace_file="$optarg" 888 ;; 889 --enable-gprof) gprof="yes" 890 ;; 891 --enable-gcov) gcov="yes" 892 ;; 893 --static) 894 static="yes" 895 LDFLAGS="-static $LDFLAGS" 896 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS" 897 ;; 898 --mandir=*) mandir="$optarg" 899 ;; 900 --bindir=*) bindir="$optarg" 901 ;; 902 --libdir=*) libdir="$optarg" 903 ;; 904 --libexecdir=*) libexecdir="$optarg" 905 ;; 906 --includedir=*) includedir="$optarg" 907 ;; 908 --datadir=*) datadir="$optarg" 909 ;; 910 --with-confsuffix=*) confsuffix="$optarg" 911 ;; 912 --docdir=*) qemu_docdir="$optarg" 913 ;; 914 --sysconfdir=*) sysconfdir="$optarg" 915 ;; 916 --localstatedir=*) local_statedir="$optarg" 917 ;; 918 --firmwarepath=*) firmwarepath="$optarg" 919 ;; 920 --sbindir=*|--sharedstatedir=*|\ 921 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\ 922 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) 923 # These switches are silently ignored, for compatibility with 924 # autoconf-generated configure scripts. This allows QEMU's 925 # configure to be used by RPM and similar macros that set 926 # lots of directory switches by default. 927 ;; 928 --disable-sdl) sdl="no" 929 ;; 930 --enable-sdl) sdl="yes" 931 ;; 932 --with-sdlabi=*) sdlabi="$optarg" 933 ;; 934 --disable-qom-cast-debug) qom_cast_debug="no" 935 ;; 936 --enable-qom-cast-debug) qom_cast_debug="yes" 937 ;; 938 --disable-virtfs) virtfs="no" 939 ;; 940 --enable-virtfs) virtfs="yes" 941 ;; 942 --disable-mpath) mpath="no" 943 ;; 944 --enable-mpath) mpath="yes" 945 ;; 946 --disable-vnc) vnc="no" 947 ;; 948 --enable-vnc) vnc="yes" 949 ;; 950 --oss-lib=*) oss_lib="$optarg" 951 ;; 952 --audio-drv-list=*) audio_drv_list="$optarg" 953 ;; 954 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 955 ;; 956 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 957 ;; 958 --enable-debug-tcg) debug_tcg="yes" 959 ;; 960 --disable-debug-tcg) debug_tcg="no" 961 ;; 962 --enable-debug) 963 # Enable debugging options that aren't excessively noisy 964 debug_tcg="yes" 965 debug="yes" 966 strip_opt="no" 967 fortify_source="no" 968 ;; 969 --enable-sparse) sparse="yes" 970 ;; 971 --disable-sparse) sparse="no" 972 ;; 973 --disable-strip) strip_opt="no" 974 ;; 975 --disable-vnc-sasl) vnc_sasl="no" 976 ;; 977 --enable-vnc-sasl) vnc_sasl="yes" 978 ;; 979 --disable-vnc-jpeg) vnc_jpeg="no" 980 ;; 981 --enable-vnc-jpeg) vnc_jpeg="yes" 982 ;; 983 --disable-vnc-png) vnc_png="no" 984 ;; 985 --enable-vnc-png) vnc_png="yes" 986 ;; 987 --disable-slirp) slirp="no" 988 ;; 989 --disable-vde) vde="no" 990 ;; 991 --enable-vde) vde="yes" 992 ;; 993 --disable-netmap) netmap="no" 994 ;; 995 --enable-netmap) netmap="yes" 996 ;; 997 --disable-xen) xen="no" 998 ;; 999 --enable-xen) xen="yes" 1000 ;; 1001 --disable-xen-pci-passthrough) xen_pci_passthrough="no" 1002 ;; 1003 --enable-xen-pci-passthrough) xen_pci_passthrough="yes" 1004 ;; 1005 --disable-xen-pv-domain-build) xen_pv_domain_build="no" 1006 ;; 1007 --enable-xen-pv-domain-build) xen_pv_domain_build="yes" 1008 ;; 1009 --disable-brlapi) brlapi="no" 1010 ;; 1011 --enable-brlapi) brlapi="yes" 1012 ;; 1013 --disable-bluez) bluez="no" 1014 ;; 1015 --enable-bluez) bluez="yes" 1016 ;; 1017 --disable-kvm) kvm="no" 1018 ;; 1019 --enable-kvm) kvm="yes" 1020 ;; 1021 --disable-hax) hax="no" 1022 ;; 1023 --enable-hax) hax="yes" 1024 ;; 1025 --disable-tcg-interpreter) tcg_interpreter="no" 1026 ;; 1027 --enable-tcg-interpreter) tcg_interpreter="yes" 1028 ;; 1029 --disable-cap-ng) cap_ng="no" 1030 ;; 1031 --enable-cap-ng) cap_ng="yes" 1032 ;; 1033 --disable-tcg) tcg="no" 1034 ;; 1035 --enable-tcg) tcg="yes" 1036 ;; 1037 --disable-spice) spice="no" 1038 ;; 1039 --enable-spice) spice="yes" 1040 ;; 1041 --disable-libiscsi) libiscsi="no" 1042 ;; 1043 --enable-libiscsi) libiscsi="yes" 1044 ;; 1045 --disable-libnfs) libnfs="no" 1046 ;; 1047 --enable-libnfs) libnfs="yes" 1048 ;; 1049 --enable-profiler) profiler="yes" 1050 ;; 1051 --disable-cocoa) cocoa="no" 1052 ;; 1053 --enable-cocoa) 1054 cocoa="yes" ; 1055 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)" 1056 ;; 1057 --disable-system) softmmu="no" 1058 ;; 1059 --enable-system) softmmu="yes" 1060 ;; 1061 --disable-user) 1062 linux_user="no" ; 1063 bsd_user="no" ; 1064 ;; 1065 --enable-user) ;; 1066 --disable-linux-user) linux_user="no" 1067 ;; 1068 --enable-linux-user) linux_user="yes" 1069 ;; 1070 --disable-bsd-user) bsd_user="no" 1071 ;; 1072 --enable-bsd-user) bsd_user="yes" 1073 ;; 1074 --enable-pie) pie="yes" 1075 ;; 1076 --disable-pie) pie="no" 1077 ;; 1078 --enable-werror) werror="yes" 1079 ;; 1080 --disable-werror) werror="no" 1081 ;; 1082 --enable-stack-protector) stack_protector="yes" 1083 ;; 1084 --disable-stack-protector) stack_protector="no" 1085 ;; 1086 --disable-curses) curses="no" 1087 ;; 1088 --enable-curses) curses="yes" 1089 ;; 1090 --disable-curl) curl="no" 1091 ;; 1092 --enable-curl) curl="yes" 1093 ;; 1094 --disable-fdt) fdt="no" 1095 ;; 1096 --enable-fdt) fdt="yes" 1097 ;; 1098 --disable-linux-aio) linux_aio="no" 1099 ;; 1100 --enable-linux-aio) linux_aio="yes" 1101 ;; 1102 --disable-attr) attr="no" 1103 ;; 1104 --enable-attr) attr="yes" 1105 ;; 1106 --disable-blobs) blobs="no" 1107 ;; 1108 --with-pkgversion=*) pkgversion=" ($optarg)" 1109 ;; 1110 --with-coroutine=*) coroutine="$optarg" 1111 ;; 1112 --disable-coroutine-pool) coroutine_pool="no" 1113 ;; 1114 --enable-coroutine-pool) coroutine_pool="yes" 1115 ;; 1116 --enable-debug-stack-usage) debug_stack_usage="yes" 1117 ;; 1118 --enable-crypto-afalg) crypto_afalg="yes" 1119 ;; 1120 --disable-crypto-afalg) crypto_afalg="no" 1121 ;; 1122 --disable-docs) docs="no" 1123 ;; 1124 --enable-docs) docs="yes" 1125 ;; 1126 --disable-vhost-net) vhost_net="no" 1127 ;; 1128 --enable-vhost-net) vhost_net="yes" 1129 ;; 1130 --disable-vhost-scsi) vhost_scsi="no" 1131 ;; 1132 --enable-vhost-scsi) vhost_scsi="yes" 1133 ;; 1134 --disable-vhost-vsock) vhost_vsock="no" 1135 ;; 1136 --enable-vhost-vsock) vhost_vsock="yes" 1137 ;; 1138 --disable-opengl) opengl="no" 1139 ;; 1140 --enable-opengl) opengl="yes" 1141 ;; 1142 --disable-rbd) rbd="no" 1143 ;; 1144 --enable-rbd) rbd="yes" 1145 ;; 1146 --disable-xfsctl) xfs="no" 1147 ;; 1148 --enable-xfsctl) xfs="yes" 1149 ;; 1150 --disable-smartcard) smartcard="no" 1151 ;; 1152 --enable-smartcard) smartcard="yes" 1153 ;; 1154 --disable-libusb) libusb="no" 1155 ;; 1156 --enable-libusb) libusb="yes" 1157 ;; 1158 --disable-usb-redir) usb_redir="no" 1159 ;; 1160 --enable-usb-redir) usb_redir="yes" 1161 ;; 1162 --disable-zlib-test) zlib="no" 1163 ;; 1164 --disable-lzo) lzo="no" 1165 ;; 1166 --enable-lzo) lzo="yes" 1167 ;; 1168 --disable-snappy) snappy="no" 1169 ;; 1170 --enable-snappy) snappy="yes" 1171 ;; 1172 --disable-bzip2) bzip2="no" 1173 ;; 1174 --enable-bzip2) bzip2="yes" 1175 ;; 1176 --enable-guest-agent) guest_agent="yes" 1177 ;; 1178 --disable-guest-agent) guest_agent="no" 1179 ;; 1180 --enable-guest-agent-msi) guest_agent_msi="yes" 1181 ;; 1182 --disable-guest-agent-msi) guest_agent_msi="no" 1183 ;; 1184 --with-vss-sdk) vss_win32_sdk="" 1185 ;; 1186 --with-vss-sdk=*) vss_win32_sdk="$optarg" 1187 ;; 1188 --without-vss-sdk) vss_win32_sdk="no" 1189 ;; 1190 --with-win-sdk) win_sdk="" 1191 ;; 1192 --with-win-sdk=*) win_sdk="$optarg" 1193 ;; 1194 --without-win-sdk) win_sdk="no" 1195 ;; 1196 --enable-tools) want_tools="yes" 1197 ;; 1198 --disable-tools) want_tools="no" 1199 ;; 1200 --enable-seccomp) seccomp="yes" 1201 ;; 1202 --disable-seccomp) seccomp="no" 1203 ;; 1204 --disable-glusterfs) glusterfs="no" 1205 ;; 1206 --enable-glusterfs) glusterfs="yes" 1207 ;; 1208 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) 1209 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 1210 ;; 1211 --enable-vhdx|--disable-vhdx) 1212 echo "$0: $opt is obsolete, VHDX driver is always built" >&2 1213 ;; 1214 --enable-uuid|--disable-uuid) 1215 echo "$0: $opt is obsolete, UUID support is always built" >&2 1216 ;; 1217 --disable-gtk) gtk="no" 1218 ;; 1219 --enable-gtk) gtk="yes" 1220 ;; 1221 --tls-priority=*) tls_priority="$optarg" 1222 ;; 1223 --disable-gnutls) gnutls="no" 1224 ;; 1225 --enable-gnutls) gnutls="yes" 1226 ;; 1227 --disable-nettle) nettle="no" 1228 ;; 1229 --enable-nettle) nettle="yes" 1230 ;; 1231 --disable-gcrypt) gcrypt="no" 1232 ;; 1233 --enable-gcrypt) gcrypt="yes" 1234 ;; 1235 --enable-rdma) rdma="yes" 1236 ;; 1237 --disable-rdma) rdma="no" 1238 ;; 1239 --with-gtkabi=*) gtkabi="$optarg" 1240 ;; 1241 --disable-vte) vte="no" 1242 ;; 1243 --enable-vte) vte="yes" 1244 ;; 1245 --disable-virglrenderer) virglrenderer="no" 1246 ;; 1247 --enable-virglrenderer) virglrenderer="yes" 1248 ;; 1249 --disable-tpm) tpm="no" 1250 ;; 1251 --enable-tpm) tpm="yes" 1252 ;; 1253 --disable-libssh2) libssh2="no" 1254 ;; 1255 --enable-libssh2) libssh2="yes" 1256 ;; 1257 --disable-live-block-migration) live_block_migration="no" 1258 ;; 1259 --enable-live-block-migration) live_block_migration="yes" 1260 ;; 1261 --disable-numa) numa="no" 1262 ;; 1263 --enable-numa) numa="yes" 1264 ;; 1265 --disable-tcmalloc) tcmalloc="no" 1266 ;; 1267 --enable-tcmalloc) tcmalloc="yes" 1268 ;; 1269 --disable-jemalloc) jemalloc="no" 1270 ;; 1271 --enable-jemalloc) jemalloc="yes" 1272 ;; 1273 --disable-replication) replication="no" 1274 ;; 1275 --enable-replication) replication="yes" 1276 ;; 1277 --disable-vxhs) vxhs="no" 1278 ;; 1279 --enable-vxhs) vxhs="yes" 1280 ;; 1281 --disable-vhost-user) vhost_user="no" 1282 ;; 1283 --enable-vhost-user) 1284 vhost_user="yes" 1285 if test "$mingw32" = "yes"; then 1286 error_exit "vhost-user isn't available on win32" 1287 fi 1288 ;; 1289 *) 1290 echo "ERROR: unknown option $opt" 1291 echo "Try '$0 --help' for more information" 1292 exit 1 1293 ;; 1294 esac 1295done 1296 1297if test "$vhost_user" = ""; then 1298 if test "$mingw32" = "yes"; then 1299 vhost_user="no" 1300 else 1301 vhost_user="yes" 1302 fi 1303fi 1304 1305case "$cpu" in 1306 ppc) 1307 CPU_CFLAGS="-m32" 1308 LDFLAGS="-m32 $LDFLAGS" 1309 ;; 1310 ppc64) 1311 CPU_CFLAGS="-m64" 1312 LDFLAGS="-m64 $LDFLAGS" 1313 ;; 1314 sparc) 1315 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" 1316 LDFLAGS="-m32 -mv8plus $LDFLAGS" 1317 ;; 1318 sparc64) 1319 CPU_CFLAGS="-m64 -mcpu=ultrasparc" 1320 LDFLAGS="-m64 $LDFLAGS" 1321 ;; 1322 s390) 1323 CPU_CFLAGS="-m31" 1324 LDFLAGS="-m31 $LDFLAGS" 1325 ;; 1326 s390x) 1327 CPU_CFLAGS="-m64" 1328 LDFLAGS="-m64 $LDFLAGS" 1329 ;; 1330 i386) 1331 CPU_CFLAGS="-m32" 1332 LDFLAGS="-m32 $LDFLAGS" 1333 cc_i386='$(CC) -m32' 1334 ;; 1335 x86_64) 1336 # ??? Only extremely old AMD cpus do not have cmpxchg16b. 1337 # If we truly care, we should simply detect this case at 1338 # runtime and generate the fallback to serial emulation. 1339 CPU_CFLAGS="-m64 -mcx16" 1340 LDFLAGS="-m64 $LDFLAGS" 1341 cc_i386='$(CC) -m32' 1342 ;; 1343 x32) 1344 CPU_CFLAGS="-mx32" 1345 LDFLAGS="-mx32 $LDFLAGS" 1346 cc_i386='$(CC) -m32' 1347 ;; 1348 # No special flags required for other host CPUs 1349esac 1350 1351QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS" 1352EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS" 1353 1354# For user-mode emulation the host arch has to be one we explicitly 1355# support, even if we're using TCI. 1356if [ "$ARCH" = "unknown" ]; then 1357 bsd_user="no" 1358 linux_user="no" 1359fi 1360 1361default_target_list="" 1362 1363mak_wilds="" 1364 1365if [ "$softmmu" = "yes" ]; then 1366 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak" 1367fi 1368if [ "$linux_user" = "yes" ]; then 1369 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak" 1370fi 1371if [ "$bsd_user" = "yes" ]; then 1372 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak" 1373fi 1374 1375for config in $mak_wilds; do 1376 default_target_list="${default_target_list} $(basename "$config" .mak)" 1377done 1378 1379# Enumerate public trace backends for --help output 1380trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/')) 1381 1382if test x"$show_help" = x"yes" ; then 1383cat << EOF 1384 1385Usage: configure [options] 1386Options: [defaults in brackets after descriptions] 1387 1388Standard options: 1389 --help print this message 1390 --prefix=PREFIX install in PREFIX [$prefix] 1391 --interp-prefix=PREFIX where to find shared libraries, etc. 1392 use %M for cpu name [$interp_prefix] 1393 --target-list=LIST set target list (default: build everything) 1394$(echo Available targets: $default_target_list | \ 1395 fold -s -w 53 | sed -e 's/^/ /') 1396 1397Advanced options (experts only): 1398 --source-path=PATH path of source code [$source_path] 1399 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix] 1400 --cc=CC use C compiler CC [$cc] 1401 --iasl=IASL use ACPI compiler IASL [$iasl] 1402 --host-cc=CC use C compiler CC [$host_cc] for code run at 1403 build time 1404 --cxx=CXX use C++ compiler CXX [$cxx] 1405 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] 1406 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS 1407 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS 1408 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS 1409 --make=MAKE use specified make [$make] 1410 --install=INSTALL use specified install [$install] 1411 --python=PYTHON use specified python [$python] 1412 --smbd=SMBD use specified smbd [$smbd] 1413 --static enable static build [$static] 1414 --mandir=PATH install man pages in PATH 1415 --datadir=PATH install firmware in PATH$confsuffix 1416 --docdir=PATH install documentation in PATH$confsuffix 1417 --bindir=PATH install binaries in PATH 1418 --libdir=PATH install libraries in PATH 1419 --sysconfdir=PATH install config in PATH$confsuffix 1420 --localstatedir=PATH install local state in PATH (set at runtime on win32) 1421 --firmwarepath=PATH search PATH for firmware files 1422 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix] 1423 --enable-debug enable common debug build options 1424 --disable-strip disable stripping binaries 1425 --disable-werror disable compilation abort on warning 1426 --disable-stack-protector disable compiler-provided stack protection 1427 --audio-drv-list=LIST set audio drivers list: 1428 Available drivers: $audio_possible_drivers 1429 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L 1430 --block-drv-rw-whitelist=L 1431 set block driver read-write whitelist 1432 (affects only QEMU, not qemu-img) 1433 --block-drv-ro-whitelist=L 1434 set block driver read-only whitelist 1435 (affects only QEMU, not qemu-img) 1436 --enable-trace-backends=B Set trace backend 1437 Available backends: $trace_backend_list 1438 --with-trace-file=NAME Full PATH,NAME of file to store traces 1439 Default:trace-<pid> 1440 --disable-slirp disable SLIRP userspace network connectivity 1441 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI) 1442 --oss-lib path to OSS library 1443 --cpu=CPU Build for host CPU [$cpu] 1444 --with-coroutine=BACKEND coroutine backend. Supported options: 1445 ucontext, sigaltstack, windows 1446 --enable-gcov enable test coverage analysis with gcov 1447 --gcov=GCOV use specified gcov [$gcov_tool] 1448 --disable-blobs disable installing provided firmware blobs 1449 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent 1450 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) 1451 --tls-priority default TLS protocol/cipher priority string 1452 --enable-gprof QEMU profiling with gprof 1453 --enable-profiler profiler support 1454 --enable-xen-pv-domain-build 1455 xen pv domain builder 1456 --enable-debug-stack-usage 1457 track the maximum stack usage of stacks created by qemu_alloc_stack 1458 1459Optional features, enabled with --enable-FEATURE and 1460disabled with --disable-FEATURE, default is enabled if available: 1461 1462 system all system emulation targets 1463 user supported user emulation targets 1464 linux-user all linux usermode emulation targets 1465 bsd-user all BSD usermode emulation targets 1466 docs build documentation 1467 guest-agent build the QEMU Guest Agent 1468 guest-agent-msi build guest agent Windows MSI installation package 1469 pie Position Independent Executables 1470 modules modules support 1471 debug-tcg TCG debugging (default is disabled) 1472 debug-info debugging information 1473 sparse sparse checker 1474 1475 gnutls GNUTLS cryptography support 1476 nettle nettle cryptography support 1477 gcrypt libgcrypt cryptography support 1478 sdl SDL UI 1479 --with-sdlabi select preferred SDL ABI 1.2 or 2.0 1480 gtk gtk UI 1481 --with-gtkabi select preferred GTK ABI 2.0 or 3.0 1482 vte vte support for the gtk UI 1483 curses curses UI 1484 vnc VNC UI support 1485 vnc-sasl SASL encryption for VNC server 1486 vnc-jpeg JPEG lossy compression for VNC server 1487 vnc-png PNG compression for VNC server 1488 cocoa Cocoa UI (Mac OS X only) 1489 virtfs VirtFS 1490 mpath Multipath persistent reservation passthrough 1491 xen xen backend driver support 1492 xen-pci-passthrough 1493 brlapi BrlAPI (Braile) 1494 curl curl connectivity 1495 fdt fdt device tree 1496 bluez bluez stack connectivity 1497 kvm KVM acceleration support 1498 hax HAX acceleration support 1499 rdma RDMA-based migration support 1500 vde support for vde network 1501 netmap support for netmap network 1502 linux-aio Linux AIO support 1503 cap-ng libcap-ng support 1504 attr attr and xattr support 1505 vhost-net vhost-net acceleration support 1506 spice spice 1507 rbd rados block device (rbd) 1508 libiscsi iscsi support 1509 libnfs nfs support 1510 smartcard smartcard support (libcacard) 1511 libusb libusb (for usb passthrough) 1512 live-block-migration Block migration in the main migration stream 1513 usb-redir usb network redirection support 1514 lzo support of lzo compression library 1515 snappy support of snappy compression library 1516 bzip2 support of bzip2 compression library 1517 (for reading bzip2-compressed dmg images) 1518 seccomp seccomp support 1519 coroutine-pool coroutine freelist (better performance) 1520 glusterfs GlusterFS backend 1521 tpm TPM support 1522 libssh2 ssh block device support 1523 numa libnuma support 1524 tcmalloc tcmalloc support 1525 jemalloc jemalloc support 1526 replication replication support 1527 vhost-vsock virtio sockets device support 1528 opengl opengl support 1529 virglrenderer virgl rendering support 1530 xfsctl xfsctl support 1531 qom-cast-debug cast debugging support 1532 tools build qemu-io, qemu-nbd and qemu-image tools 1533 vxhs Veritas HyperScale vDisk backend support 1534 crypto-afalg Linux AF_ALG crypto backend driver 1535 vhost-user vhost-user support 1536 1537NOTE: The object files are built at the place where configure is launched 1538EOF 1539exit 0 1540fi 1541 1542if ! has $python; then 1543 error_exit "Python not found. Use --python=/path/to/python" 1544fi 1545 1546# Note that if the Python conditional here evaluates True we will exit 1547# with status 1 which is a shell 'false' value. 1548if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then 1549 error_exit "Cannot use '$python', Python 2.6 or later is required." \ 1550 "Note that Python 3 or later is not yet supported." \ 1551 "Use --python=/path/to/python to specify a supported Python." 1552fi 1553 1554# Suppress writing compiled files 1555python="$python -B" 1556 1557# Now we have handled --enable-tcg-interpreter and know we're not just 1558# printing the help message, bail out if the host CPU isn't supported. 1559if test "$ARCH" = "unknown"; then 1560 if test "$tcg_interpreter" = "yes" ; then 1561 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)" 1562 else 1563 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter" 1564 fi 1565fi 1566 1567# Consult white-list to determine whether to enable werror 1568# by default. Only enable by default for git builds 1569if test -z "$werror" ; then 1570 if test -d "$source_path/.git" -a \ 1571 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then 1572 werror="yes" 1573 else 1574 werror="no" 1575 fi 1576fi 1577 1578# check that the C compiler works. 1579write_c_skeleton; 1580if compile_object ; then 1581 : C compiler works ok 1582else 1583 error_exit "\"$cc\" either does not exist or does not work" 1584fi 1585if ! compile_prog ; then 1586 error_exit "\"$cc\" cannot build an executable (is your linker broken?)" 1587fi 1588 1589if test "$bogus_os" = "yes"; then 1590 # Now that we know that we're not printing the help and that 1591 # the compiler works (so the results of the check_defines we used 1592 # to identify the OS are reliable), if we didn't recognize the 1593 # host OS we should stop now. 1594 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" 1595fi 1596 1597gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits" 1598gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags" 1599gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags" 1600gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags" 1601gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags" 1602gcc_flags="-Wno-string-plus-int $gcc_flags" 1603# Note that we do not add -Werror to gcc_flags here, because that would 1604# enable it for all configure tests. If a configure test failed due 1605# to -Werror this would just silently disable some features, 1606# so it's too error prone. 1607 1608cc_has_warning_flag() { 1609 write_c_skeleton; 1610 1611 # Use the positive sense of the flag when testing for -Wno-wombat 1612 # support (gcc will happily accept the -Wno- form of unknown 1613 # warning options). 1614 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 1615 compile_prog "-Werror $optflag" "" 1616} 1617 1618for flag in $gcc_flags; do 1619 if cc_has_warning_flag $flag ; then 1620 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1621 fi 1622done 1623 1624if test "$stack_protector" != "no"; then 1625 cat > $TMPC << EOF 1626int main(int argc, char *argv[]) 1627{ 1628 char arr[64], *p = arr, *c = argv[0]; 1629 while (*c) { 1630 *p++ = *c++; 1631 } 1632 return 0; 1633} 1634EOF 1635 gcc_flags="-fstack-protector-strong -fstack-protector-all" 1636 sp_on=0 1637 for flag in $gcc_flags; do 1638 # We need to check both a compile and a link, since some compiler 1639 # setups fail only on a .c->.o compile and some only at link time 1640 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC && 1641 compile_prog "-Werror $flag" ""; then 1642 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1643 sp_on=1 1644 break 1645 fi 1646 done 1647 if test "$stack_protector" = yes; then 1648 if test $sp_on = 0; then 1649 error_exit "Stack protector not supported" 1650 fi 1651 fi 1652fi 1653 1654# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and 1655# large functions that use global variables. The bug is in all releases of 1656# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in 1657# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013. 1658cat > $TMPC << EOF 1659#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2)) 1660int main(void) { return 0; } 1661#else 1662#error No bug in this compiler. 1663#endif 1664EOF 1665if compile_prog "-Werror -fno-gcse" "" ; then 1666 TRANSLATE_OPT_CFLAGS=-fno-gcse 1667fi 1668 1669if test "$static" = "yes" ; then 1670 if test "$modules" = "yes" ; then 1671 error_exit "static and modules are mutually incompatible" 1672 fi 1673 if test "$pie" = "yes" ; then 1674 error_exit "static and pie are mutually incompatible" 1675 else 1676 pie="no" 1677 fi 1678fi 1679 1680# Unconditional check for compiler __thread support 1681 cat > $TMPC << EOF 1682static __thread int tls_var; 1683int main(void) { return tls_var; } 1684EOF 1685 1686if ! compile_prog "-Werror" "" ; then 1687 error_exit "Your compiler does not support the __thread specifier for " \ 1688 "Thread-Local Storage (TLS). Please upgrade to a version that does." 1689fi 1690 1691if test "$pie" = ""; then 1692 case "$cpu-$targetos" in 1693 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD) 1694 ;; 1695 *) 1696 pie="no" 1697 ;; 1698 esac 1699fi 1700 1701if test "$pie" != "no" ; then 1702 cat > $TMPC << EOF 1703 1704#ifdef __linux__ 1705# define THREAD __thread 1706#else 1707# define THREAD 1708#endif 1709 1710static THREAD int tls_var; 1711 1712int main(void) { return tls_var; } 1713 1714EOF 1715 if compile_prog "-fPIE -DPIE" "-pie"; then 1716 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS" 1717 LDFLAGS="-pie $LDFLAGS" 1718 pie="yes" 1719 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 1720 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS" 1721 fi 1722 else 1723 if test "$pie" = "yes"; then 1724 error_exit "PIE not available due to missing toolchain support" 1725 else 1726 echo "Disabling PIE due to missing toolchain support" 1727 pie="no" 1728 fi 1729 fi 1730 1731 if compile_prog "-Werror -fno-pie" "-nopie"; then 1732 CFLAGS_NOPIE="-fno-pie" 1733 LDFLAGS_NOPIE="-nopie" 1734 fi 1735fi 1736 1737########################################## 1738# __sync_fetch_and_and requires at least -march=i486. Many toolchains 1739# use i686 as default anyway, but for those that don't, an explicit 1740# specification is necessary 1741 1742if test "$cpu" = "i386"; then 1743 cat > $TMPC << EOF 1744static int sfaa(int *ptr) 1745{ 1746 return __sync_fetch_and_and(ptr, 0); 1747} 1748 1749int main(void) 1750{ 1751 int val = 42; 1752 val = __sync_val_compare_and_swap(&val, 0, 1); 1753 sfaa(&val); 1754 return val; 1755} 1756EOF 1757 if ! compile_prog "" "" ; then 1758 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 1759 fi 1760fi 1761 1762######################################### 1763# Solaris specific configure tool chain decisions 1764 1765if test "$solaris" = "yes" ; then 1766 if has $install; then 1767 : 1768 else 1769 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \ 1770 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \ 1771 "to get ginstall which is used by default (which lives in /opt/csw/bin)" 1772 fi 1773 if test "$(path_of $install)" = "/usr/sbin/install" ; then 1774 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \ 1775 "try ginstall from the GNU fileutils available from www.blastwave.org" \ 1776 "using pkg-get -i fileutils, or use --install=/usr/ucb/install" 1777 fi 1778 if has ar; then 1779 : 1780 else 1781 if test -f /usr/ccs/bin/ar ; then 1782 error_exit "No path includes ar" \ 1783 "Add /usr/ccs/bin to your path and rerun configure" 1784 fi 1785 error_exit "No path includes ar" 1786 fi 1787fi 1788 1789if test -z "${target_list+xxx}" ; then 1790 for target in $default_target_list; do 1791 supported_target $target 2>/dev/null && \ 1792 target_list="$target_list $target" 1793 done 1794 target_list="${target_list# }" 1795else 1796 target_list=$(echo "$target_list" | sed -e 's/,/ /g') 1797 for target in $target_list; do 1798 # Check that we recognised the target name; this allows a more 1799 # friendly error message than if we let it fall through. 1800 case " $default_target_list " in 1801 *" $target "*) 1802 ;; 1803 *) 1804 error_exit "Unknown target name '$target'" 1805 ;; 1806 esac 1807 supported_target $target || exit 1 1808 done 1809fi 1810 1811# see if system emulation was really requested 1812case " $target_list " in 1813 *"-softmmu "*) softmmu=yes 1814 ;; 1815 *) softmmu=no 1816 ;; 1817esac 1818 1819feature_not_found() { 1820 feature=$1 1821 remedy=$2 1822 1823 error_exit "User requested feature $feature" \ 1824 "configure was not able to find it." \ 1825 "$remedy" 1826} 1827 1828# --- 1829# big/little endian test 1830cat > $TMPC << EOF 1831short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 1832short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 1833extern int foo(short *, short *); 1834int main(int argc, char *argv[]) { 1835 return foo(big_endian, little_endian); 1836} 1837EOF 1838 1839if compile_object ; then 1840 if grep -q BiGeNdIaN $TMPO ; then 1841 bigendian="yes" 1842 elif grep -q LiTtLeEnDiAn $TMPO ; then 1843 bigendian="no" 1844 else 1845 echo big/little test failed 1846 fi 1847else 1848 echo big/little test failed 1849fi 1850 1851########################################## 1852# cocoa implies not SDL or GTK 1853# (the cocoa UI code currently assumes it is always the active UI 1854# and doesn't interact well with other UI frontend code) 1855if test "$cocoa" = "yes"; then 1856 if test "$sdl" = "yes"; then 1857 error_exit "Cocoa and SDL UIs cannot both be enabled at once" 1858 fi 1859 if test "$gtk" = "yes"; then 1860 error_exit "Cocoa and GTK UIs cannot both be enabled at once" 1861 fi 1862 gtk=no 1863 sdl=no 1864fi 1865 1866# Some versions of Mac OS X incorrectly define SIZE_MAX 1867cat > $TMPC << EOF 1868#include <stdint.h> 1869#include <stdio.h> 1870int main(int argc, char *argv[]) { 1871 return printf("%zu", SIZE_MAX); 1872} 1873EOF 1874have_broken_size_max=no 1875if ! compile_object -Werror ; then 1876 have_broken_size_max=yes 1877fi 1878 1879########################################## 1880# L2TPV3 probe 1881 1882cat > $TMPC <<EOF 1883#include <sys/socket.h> 1884#include <linux/ip.h> 1885int main(void) { return sizeof(struct mmsghdr); } 1886EOF 1887if compile_prog "" "" ; then 1888 l2tpv3=yes 1889else 1890 l2tpv3=no 1891fi 1892 1893########################################## 1894# MinGW / Mingw-w64 localtime_r/gmtime_r check 1895 1896if test "$mingw32" = "yes"; then 1897 # Some versions of MinGW / Mingw-w64 lack localtime_r 1898 # and gmtime_r entirely. 1899 # 1900 # Some versions of Mingw-w64 define a macro for 1901 # localtime_r/gmtime_r. 1902 # 1903 # Some versions of Mingw-w64 will define functions 1904 # for localtime_r/gmtime_r, but only if you have 1905 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun 1906 # though, unistd.h and pthread.h both define 1907 # that for you. 1908 # 1909 # So this #undef localtime_r and #include <unistd.h> 1910 # are not in fact redundant. 1911cat > $TMPC << EOF 1912#include <unistd.h> 1913#include <time.h> 1914#undef localtime_r 1915int main(void) { localtime_r(NULL, NULL); return 0; } 1916EOF 1917 if compile_prog "" "" ; then 1918 localtime_r="yes" 1919 else 1920 localtime_r="no" 1921 fi 1922fi 1923 1924########################################## 1925# pkg-config probe 1926 1927if ! has "$pkg_config_exe"; then 1928 error_exit "pkg-config binary '$pkg_config_exe' not found" 1929fi 1930 1931########################################## 1932# NPTL probe 1933 1934if test "$linux_user" = "yes"; then 1935 cat > $TMPC <<EOF 1936#include <sched.h> 1937#include <linux/futex.h> 1938int main(void) { 1939#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 1940#error bork 1941#endif 1942 return 0; 1943} 1944EOF 1945 if ! compile_object ; then 1946 feature_not_found "nptl" "Install glibc and linux kernel headers." 1947 fi 1948fi 1949 1950######################################### 1951# zlib check 1952 1953if test "$zlib" != "no" ; then 1954 cat > $TMPC << EOF 1955#include <zlib.h> 1956int main(void) { zlibVersion(); return 0; } 1957EOF 1958 if compile_prog "" "-lz" ; then 1959 : 1960 else 1961 error_exit "zlib check failed" \ 1962 "Make sure to have the zlib libs and headers installed." 1963 fi 1964fi 1965LIBS="$LIBS -lz" 1966 1967########################################## 1968# lzo check 1969 1970if test "$lzo" != "no" ; then 1971 cat > $TMPC << EOF 1972#include <lzo/lzo1x.h> 1973int main(void) { lzo_version(); return 0; } 1974EOF 1975 if compile_prog "" "-llzo2" ; then 1976 libs_softmmu="$libs_softmmu -llzo2" 1977 lzo="yes" 1978 else 1979 if test "$lzo" = "yes"; then 1980 feature_not_found "liblzo2" "Install liblzo2 devel" 1981 fi 1982 lzo="no" 1983 fi 1984fi 1985 1986########################################## 1987# snappy check 1988 1989if test "$snappy" != "no" ; then 1990 cat > $TMPC << EOF 1991#include <snappy-c.h> 1992int main(void) { snappy_max_compressed_length(4096); return 0; } 1993EOF 1994 if compile_prog "" "-lsnappy" ; then 1995 libs_softmmu="$libs_softmmu -lsnappy" 1996 snappy="yes" 1997 else 1998 if test "$snappy" = "yes"; then 1999 feature_not_found "libsnappy" "Install libsnappy devel" 2000 fi 2001 snappy="no" 2002 fi 2003fi 2004 2005########################################## 2006# bzip2 check 2007 2008if test "$bzip2" != "no" ; then 2009 cat > $TMPC << EOF 2010#include <bzlib.h> 2011int main(void) { BZ2_bzlibVersion(); return 0; } 2012EOF 2013 if compile_prog "" "-lbz2" ; then 2014 bzip2="yes" 2015 else 2016 if test "$bzip2" = "yes"; then 2017 feature_not_found "libbzip2" "Install libbzip2 devel" 2018 fi 2019 bzip2="no" 2020 fi 2021fi 2022 2023########################################## 2024# libseccomp check 2025 2026if test "$seccomp" != "no" ; then 2027 case "$cpu" in 2028 i386|x86_64) 2029 libseccomp_minver="2.1.0" 2030 ;; 2031 mips) 2032 libseccomp_minver="2.2.0" 2033 ;; 2034 arm|aarch64) 2035 libseccomp_minver="2.2.3" 2036 ;; 2037 ppc|ppc64|s390x) 2038 libseccomp_minver="2.3.0" 2039 ;; 2040 *) 2041 libseccomp_minver="" 2042 ;; 2043 esac 2044 2045 if test "$libseccomp_minver" != "" && 2046 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then 2047 seccomp_cflags="$($pkg_config --cflags libseccomp)" 2048 seccomp_libs="$($pkg_config --libs libseccomp)" 2049 seccomp="yes" 2050 else 2051 if test "$seccomp" = "yes" ; then 2052 if test "$libseccomp_minver" != "" ; then 2053 feature_not_found "libseccomp" \ 2054 "Install libseccomp devel >= $libseccomp_minver" 2055 else 2056 feature_not_found "libseccomp" \ 2057 "libseccomp is not supported for host cpu $cpu" 2058 fi 2059 fi 2060 seccomp="no" 2061 fi 2062fi 2063########################################## 2064# xen probe 2065 2066if test "$xen" != "no" ; then 2067 # Check whether Xen library path is specified via --extra-ldflags to avoid 2068 # overriding this setting with pkg-config output. If not, try pkg-config 2069 # to obtain all needed flags. 2070 2071 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2072 $pkg_config --exists xencontrol ; then 2073 xen_ctrl_version="$(printf '%d%02d%02d' \ 2074 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2075 xen=yes 2076 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" 2077 xen_pc="$xen_pc xenevtchn xendevicemodel" 2078 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)" 2079 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu" 2080 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS" 2081 else 2082 2083 xen_libs="-lxenstore -lxenctrl -lxenguest" 2084 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2085 2086 # First we test whether Xen headers and libraries are available. 2087 # If no, we are done and there is no Xen support. 2088 # If yes, more tests are run to detect the Xen version. 2089 2090 # Xen (any) 2091 cat > $TMPC <<EOF 2092#include <xenctrl.h> 2093int main(void) { 2094 return 0; 2095} 2096EOF 2097 if ! compile_prog "" "$xen_libs" ; then 2098 # Xen not found 2099 if test "$xen" = "yes" ; then 2100 feature_not_found "xen" "Install xen devel" 2101 fi 2102 xen=no 2103 2104 # Xen unstable 2105 elif 2106 cat > $TMPC <<EOF && 2107#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2108#include <xenforeignmemory.h> 2109int main(void) { 2110 xenforeignmemory_handle *xfmem; 2111 2112 xfmem = xenforeignmemory_open(0, 0); 2113 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2114 2115 return 0; 2116} 2117EOF 2118 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2119 then 2120 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2121 xen_ctrl_version=41000 2122 xen=yes 2123 elif 2124 cat > $TMPC <<EOF && 2125#undef XC_WANT_COMPAT_DEVICEMODEL_API 2126#define __XEN_TOOLS__ 2127#include <xendevicemodel.h> 2128int main(void) { 2129 xendevicemodel_handle *xd; 2130 2131 xd = xendevicemodel_open(0, 0); 2132 xendevicemodel_close(xd); 2133 2134 return 0; 2135} 2136EOF 2137 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2138 then 2139 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2140 xen_ctrl_version=40900 2141 xen=yes 2142 elif 2143 cat > $TMPC <<EOF && 2144/* 2145 * If we have stable libs the we don't want the libxc compat 2146 * layers, regardless of what CFLAGS we may have been given. 2147 * 2148 * Also, check if xengnttab_grant_copy_segment_t is defined and 2149 * grant copy operation is implemented. 2150 */ 2151#undef XC_WANT_COMPAT_EVTCHN_API 2152#undef XC_WANT_COMPAT_GNTTAB_API 2153#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2154#include <xenctrl.h> 2155#include <xenstore.h> 2156#include <xenevtchn.h> 2157#include <xengnttab.h> 2158#include <xenforeignmemory.h> 2159#include <stdint.h> 2160#include <xen/hvm/hvm_info_table.h> 2161#if !defined(HVM_MAX_VCPUS) 2162# error HVM_MAX_VCPUS not defined 2163#endif 2164int main(void) { 2165 xc_interface *xc = NULL; 2166 xenforeignmemory_handle *xfmem; 2167 xenevtchn_handle *xe; 2168 xengnttab_handle *xg; 2169 xen_domain_handle_t handle; 2170 xengnttab_grant_copy_segment_t* seg = NULL; 2171 2172 xs_daemon_open(); 2173 2174 xc = xc_interface_open(0, 0, 0); 2175 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2176 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2177 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2178 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2179 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2180 2181 xfmem = xenforeignmemory_open(0, 0); 2182 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2183 2184 xe = xenevtchn_open(0, 0); 2185 xenevtchn_fd(xe); 2186 2187 xg = xengnttab_open(0, 0); 2188 xengnttab_grant_copy(xg, 0, seg); 2189 2190 return 0; 2191} 2192EOF 2193 compile_prog "" "$xen_libs $xen_stable_libs" 2194 then 2195 xen_ctrl_version=40800 2196 xen=yes 2197 elif 2198 cat > $TMPC <<EOF && 2199/* 2200 * If we have stable libs the we don't want the libxc compat 2201 * layers, regardless of what CFLAGS we may have been given. 2202 */ 2203#undef XC_WANT_COMPAT_EVTCHN_API 2204#undef XC_WANT_COMPAT_GNTTAB_API 2205#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2206#include <xenctrl.h> 2207#include <xenstore.h> 2208#include <xenevtchn.h> 2209#include <xengnttab.h> 2210#include <xenforeignmemory.h> 2211#include <stdint.h> 2212#include <xen/hvm/hvm_info_table.h> 2213#if !defined(HVM_MAX_VCPUS) 2214# error HVM_MAX_VCPUS not defined 2215#endif 2216int main(void) { 2217 xc_interface *xc = NULL; 2218 xenforeignmemory_handle *xfmem; 2219 xenevtchn_handle *xe; 2220 xengnttab_handle *xg; 2221 xen_domain_handle_t handle; 2222 2223 xs_daemon_open(); 2224 2225 xc = xc_interface_open(0, 0, 0); 2226 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2227 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2228 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2229 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2230 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2231 2232 xfmem = xenforeignmemory_open(0, 0); 2233 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2234 2235 xe = xenevtchn_open(0, 0); 2236 xenevtchn_fd(xe); 2237 2238 xg = xengnttab_open(0, 0); 2239 xengnttab_map_grant_ref(xg, 0, 0, 0); 2240 2241 return 0; 2242} 2243EOF 2244 compile_prog "" "$xen_libs $xen_stable_libs" 2245 then 2246 xen_ctrl_version=40701 2247 xen=yes 2248 elif 2249 cat > $TMPC <<EOF && 2250#include <xenctrl.h> 2251#include <stdint.h> 2252int main(void) { 2253 xc_interface *xc = NULL; 2254 xen_domain_handle_t handle; 2255 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2256 return 0; 2257} 2258EOF 2259 compile_prog "" "$xen_libs" 2260 then 2261 xen_ctrl_version=40700 2262 xen=yes 2263 2264 # Xen 4.6 2265 elif 2266 cat > $TMPC <<EOF && 2267#include <xenctrl.h> 2268#include <xenstore.h> 2269#include <stdint.h> 2270#include <xen/hvm/hvm_info_table.h> 2271#if !defined(HVM_MAX_VCPUS) 2272# error HVM_MAX_VCPUS not defined 2273#endif 2274int main(void) { 2275 xc_interface *xc; 2276 xs_daemon_open(); 2277 xc = xc_interface_open(0, 0, 0); 2278 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2279 xc_gnttab_open(NULL, 0); 2280 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2281 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2282 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2283 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2284 return 0; 2285} 2286EOF 2287 compile_prog "" "$xen_libs" 2288 then 2289 xen_ctrl_version=40600 2290 xen=yes 2291 2292 # Xen 4.5 2293 elif 2294 cat > $TMPC <<EOF && 2295#include <xenctrl.h> 2296#include <xenstore.h> 2297#include <stdint.h> 2298#include <xen/hvm/hvm_info_table.h> 2299#if !defined(HVM_MAX_VCPUS) 2300# error HVM_MAX_VCPUS not defined 2301#endif 2302int main(void) { 2303 xc_interface *xc; 2304 xs_daemon_open(); 2305 xc = xc_interface_open(0, 0, 0); 2306 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2307 xc_gnttab_open(NULL, 0); 2308 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2309 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2310 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2311 return 0; 2312} 2313EOF 2314 compile_prog "" "$xen_libs" 2315 then 2316 xen_ctrl_version=40500 2317 xen=yes 2318 2319 elif 2320 cat > $TMPC <<EOF && 2321#include <xenctrl.h> 2322#include <xenstore.h> 2323#include <stdint.h> 2324#include <xen/hvm/hvm_info_table.h> 2325#if !defined(HVM_MAX_VCPUS) 2326# error HVM_MAX_VCPUS not defined 2327#endif 2328int main(void) { 2329 xc_interface *xc; 2330 xs_daemon_open(); 2331 xc = xc_interface_open(0, 0, 0); 2332 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2333 xc_gnttab_open(NULL, 0); 2334 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2335 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2336 return 0; 2337} 2338EOF 2339 compile_prog "" "$xen_libs" 2340 then 2341 xen_ctrl_version=40200 2342 xen=yes 2343 2344 else 2345 if test "$xen" = "yes" ; then 2346 feature_not_found "xen (unsupported version)" \ 2347 "Install a supported xen (xen 4.2 or newer)" 2348 fi 2349 xen=no 2350 fi 2351 2352 if test "$xen" = yes; then 2353 if test $xen_ctrl_version -ge 40701 ; then 2354 libs_softmmu="$xen_stable_libs $libs_softmmu" 2355 fi 2356 libs_softmmu="$xen_libs $libs_softmmu" 2357 fi 2358 fi 2359fi 2360 2361if test "$xen_pci_passthrough" != "no"; then 2362 if test "$xen" = "yes" && test "$linux" = "yes"; then 2363 xen_pci_passthrough=yes 2364 else 2365 if test "$xen_pci_passthrough" = "yes"; then 2366 error_exit "User requested feature Xen PCI Passthrough" \ 2367 " but this feature requires /sys from Linux" 2368 fi 2369 xen_pci_passthrough=no 2370 fi 2371fi 2372 2373if test "$xen_pv_domain_build" = "yes" && 2374 test "$xen" != "yes"; then 2375 error_exit "User requested Xen PV domain builder support" \ 2376 "which requires Xen support." 2377fi 2378 2379########################################## 2380# Sparse probe 2381if test "$sparse" != "no" ; then 2382 if has cgcc; then 2383 sparse=yes 2384 else 2385 if test "$sparse" = "yes" ; then 2386 feature_not_found "sparse" "Install sparse binary" 2387 fi 2388 sparse=no 2389 fi 2390fi 2391 2392########################################## 2393# X11 probe 2394x11_cflags= 2395x11_libs=-lX11 2396if $pkg_config --exists "x11"; then 2397 x11_cflags=$($pkg_config --cflags x11) 2398 x11_libs=$($pkg_config --libs x11) 2399fi 2400 2401########################################## 2402# GTK probe 2403 2404if test "$gtkabi" = ""; then 2405 # The GTK ABI was not specified explicitly, so try whether 3.0 is available. 2406 # Use 2.0 as a fallback if that is available. 2407 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then 2408 gtkabi=3.0 2409 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then 2410 gtkabi=2.0 2411 else 2412 gtkabi=3.0 2413 fi 2414fi 2415 2416if test "$gtk" != "no"; then 2417 gtkpackage="gtk+-$gtkabi" 2418 gtkx11package="gtk+-x11-$gtkabi" 2419 if test "$gtkabi" = "3.0" ; then 2420 gtkversion="3.0.0" 2421 else 2422 gtkversion="2.18.0" 2423 fi 2424 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 2425 gtk_cflags=$($pkg_config --cflags $gtkpackage) 2426 gtk_libs=$($pkg_config --libs $gtkpackage) 2427 gtk_version=$($pkg_config --modversion $gtkpackage) 2428 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 2429 gtk_cflags="$gtk_cflags $x11_cflags" 2430 gtk_libs="$gtk_libs $x11_libs" 2431 fi 2432 libs_softmmu="$gtk_libs $libs_softmmu" 2433 gtk="yes" 2434 elif test "$gtk" = "yes"; then 2435 feature_not_found "gtk" "Install gtk3-devel" 2436 else 2437 gtk="no" 2438 fi 2439fi 2440 2441 2442########################################## 2443# GNUTLS probe 2444 2445gnutls_works() { 2446 # Unfortunately some distros have bad pkg-config information for gnutls 2447 # such that it claims to exist but you get a compiler error if you try 2448 # to use the options returned by --libs. Specifically, Ubuntu for --static 2449 # builds doesn't work: 2450 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035 2451 # 2452 # So sanity check the cflags/libs before assuming gnutls can be used. 2453 if ! $pkg_config --exists "gnutls"; then 2454 return 1 2455 fi 2456 2457 write_c_skeleton 2458 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)" 2459} 2460 2461gnutls_gcrypt=no 2462gnutls_nettle=no 2463if test "$gnutls" != "no"; then 2464 if gnutls_works; then 2465 gnutls_cflags=$($pkg_config --cflags gnutls) 2466 gnutls_libs=$($pkg_config --libs gnutls) 2467 libs_softmmu="$gnutls_libs $libs_softmmu" 2468 libs_tools="$gnutls_libs $libs_tools" 2469 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags" 2470 gnutls="yes" 2471 2472 # gnutls_rnd requires >= 2.11.0 2473 if $pkg_config --exists "gnutls >= 2.11.0"; then 2474 gnutls_rnd="yes" 2475 else 2476 gnutls_rnd="no" 2477 fi 2478 2479 if $pkg_config --exists 'gnutls >= 3.0'; then 2480 gnutls_gcrypt=no 2481 gnutls_nettle=yes 2482 elif $pkg_config --exists 'gnutls >= 2.12'; then 2483 case $($pkg_config --libs --static gnutls) in 2484 *gcrypt*) 2485 gnutls_gcrypt=yes 2486 gnutls_nettle=no 2487 ;; 2488 *nettle*) 2489 gnutls_gcrypt=no 2490 gnutls_nettle=yes 2491 ;; 2492 *) 2493 gnutls_gcrypt=yes 2494 gnutls_nettle=no 2495 ;; 2496 esac 2497 else 2498 gnutls_gcrypt=yes 2499 gnutls_nettle=no 2500 fi 2501 elif test "$gnutls" = "yes"; then 2502 feature_not_found "gnutls" "Install gnutls devel" 2503 else 2504 gnutls="no" 2505 gnutls_rnd="no" 2506 fi 2507else 2508 gnutls_rnd="no" 2509fi 2510 2511 2512# If user didn't give a --disable/enable-gcrypt flag, 2513# then mark as disabled if user requested nettle 2514# explicitly, or if gnutls links to nettle 2515if test -z "$gcrypt" 2516then 2517 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes" 2518 then 2519 gcrypt="no" 2520 fi 2521fi 2522 2523# If user didn't give a --disable/enable-nettle flag, 2524# then mark as disabled if user requested gcrypt 2525# explicitly, or if gnutls links to gcrypt 2526if test -z "$nettle" 2527then 2528 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes" 2529 then 2530 nettle="no" 2531 fi 2532fi 2533 2534has_libgcrypt_config() { 2535 if ! has "libgcrypt-config" 2536 then 2537 return 1 2538 fi 2539 2540 if test -n "$cross_prefix" 2541 then 2542 host=$(libgcrypt-config --host) 2543 if test "$host-" != $cross_prefix 2544 then 2545 return 1 2546 fi 2547 fi 2548 2549 return 0 2550} 2551 2552if test "$gcrypt" != "no"; then 2553 if has_libgcrypt_config; then 2554 gcrypt_cflags=$(libgcrypt-config --cflags) 2555 gcrypt_libs=$(libgcrypt-config --libs) 2556 # Debian has remove -lgpg-error from libgcrypt-config 2557 # as it "spreads unnecessary dependencies" which in 2558 # turn breaks static builds... 2559 if test "$static" = "yes" 2560 then 2561 gcrypt_libs="$gcrypt_libs -lgpg-error" 2562 fi 2563 libs_softmmu="$gcrypt_libs $libs_softmmu" 2564 libs_tools="$gcrypt_libs $libs_tools" 2565 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags" 2566 gcrypt="yes" 2567 if test -z "$nettle"; then 2568 nettle="no" 2569 fi 2570 2571 cat > $TMPC << EOF 2572#include <gcrypt.h> 2573int main(void) { 2574 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2, 2575 GCRY_MD_SHA256, 2576 NULL, 0, 0, 0, NULL); 2577 return 0; 2578} 2579EOF 2580 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 2581 gcrypt_kdf=yes 2582 fi 2583 2584 cat > $TMPC << EOF 2585#include <gcrypt.h> 2586int main(void) { 2587 gcry_mac_hd_t handle; 2588 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 2589 GCRY_MAC_FLAG_SECURE, NULL); 2590 return 0; 2591} 2592EOF 2593 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 2594 gcrypt_hmac=yes 2595 fi 2596 else 2597 if test "$gcrypt" = "yes"; then 2598 feature_not_found "gcrypt" "Install gcrypt devel" 2599 else 2600 gcrypt="no" 2601 fi 2602 fi 2603fi 2604 2605 2606if test "$nettle" != "no"; then 2607 if $pkg_config --exists "nettle"; then 2608 nettle_cflags=$($pkg_config --cflags nettle) 2609 nettle_libs=$($pkg_config --libs nettle) 2610 nettle_version=$($pkg_config --modversion nettle) 2611 libs_softmmu="$nettle_libs $libs_softmmu" 2612 libs_tools="$nettle_libs $libs_tools" 2613 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags" 2614 nettle="yes" 2615 2616 cat > $TMPC << EOF 2617#include <stddef.h> 2618#include <nettle/pbkdf2.h> 2619int main(void) { 2620 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL); 2621 return 0; 2622} 2623EOF 2624 if compile_prog "$nettle_cflags" "$nettle_libs" ; then 2625 nettle_kdf=yes 2626 fi 2627 else 2628 if test "$nettle" = "yes"; then 2629 feature_not_found "nettle" "Install nettle devel" 2630 else 2631 nettle="no" 2632 fi 2633 fi 2634fi 2635 2636if test "$gcrypt" = "yes" && test "$nettle" = "yes" 2637then 2638 error_exit "Only one of gcrypt & nettle can be enabled" 2639fi 2640 2641########################################## 2642# libtasn1 - only for the TLS creds/session test suite 2643 2644tasn1=yes 2645tasn1_cflags="" 2646tasn1_libs="" 2647if $pkg_config --exists "libtasn1"; then 2648 tasn1_cflags=$($pkg_config --cflags libtasn1) 2649 tasn1_libs=$($pkg_config --libs libtasn1) 2650else 2651 tasn1=no 2652fi 2653 2654 2655########################################## 2656# getifaddrs (for tests/test-io-channel-socket ) 2657 2658have_ifaddrs_h=yes 2659if ! check_include "ifaddrs.h" ; then 2660 have_ifaddrs_h=no 2661fi 2662 2663########################################## 2664# VTE probe 2665 2666if test "$vte" != "no"; then 2667 if test "$gtkabi" = "3.0"; then 2668 vteminversion="0.32.0" 2669 if $pkg_config --exists "vte-2.91"; then 2670 vtepackage="vte-2.91" 2671 else 2672 vtepackage="vte-2.90" 2673 fi 2674 else 2675 vtepackage="vte" 2676 vteminversion="0.24.0" 2677 fi 2678 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 2679 vte_cflags=$($pkg_config --cflags $vtepackage) 2680 vte_libs=$($pkg_config --libs $vtepackage) 2681 vteversion=$($pkg_config --modversion $vtepackage) 2682 libs_softmmu="$vte_libs $libs_softmmu" 2683 vte="yes" 2684 elif test "$vte" = "yes"; then 2685 if test "$gtkabi" = "3.0"; then 2686 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 2687 else 2688 feature_not_found "vte" "Install libvte devel" 2689 fi 2690 else 2691 vte="no" 2692 fi 2693fi 2694 2695########################################## 2696# SDL probe 2697 2698# Look for sdl configuration program (pkg-config or sdl-config). Try 2699# sdl-config even without cross prefix, and favour pkg-config over sdl-config. 2700 2701if test "$sdlabi" = ""; then 2702 if $pkg_config --exists "sdl2"; then 2703 sdlabi=2.0 2704 elif $pkg_config --exists "sdl"; then 2705 sdlabi=1.2 2706 else 2707 sdlabi=2.0 2708 fi 2709fi 2710 2711if test $sdlabi = "2.0"; then 2712 sdl_config=$sdl2_config 2713 sdlname=sdl2 2714 sdlconfigname=sdl2_config 2715elif test $sdlabi = "1.2"; then 2716 sdlname=sdl 2717 sdlconfigname=sdl_config 2718else 2719 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0" 2720fi 2721 2722if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then 2723 sdl_config=$sdlconfigname 2724fi 2725 2726if $pkg_config $sdlname --exists; then 2727 sdlconfig="$pkg_config $sdlname" 2728 sdlversion=$($sdlconfig --modversion 2>/dev/null) 2729elif has ${sdl_config}; then 2730 sdlconfig="$sdl_config" 2731 sdlversion=$($sdlconfig --version) 2732else 2733 if test "$sdl" = "yes" ; then 2734 feature_not_found "sdl" "Install SDL2-devel" 2735 fi 2736 sdl=no 2737fi 2738if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then 2739 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2 2740fi 2741 2742sdl_too_old=no 2743if test "$sdl" != "no" ; then 2744 cat > $TMPC << EOF 2745#include <SDL.h> 2746#undef main /* We don't want SDL to override our main() */ 2747int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 2748EOF 2749 sdl_cflags=$($sdlconfig --cflags 2>/dev/null) 2750 if test "$static" = "yes" ; then 2751 if $pkg_config $sdlname --exists; then 2752 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null) 2753 else 2754 sdl_libs=$($sdlconfig --static-libs 2>/dev/null) 2755 fi 2756 else 2757 sdl_libs=$($sdlconfig --libs 2>/dev/null) 2758 fi 2759 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 2760 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then 2761 sdl_too_old=yes 2762 else 2763 sdl=yes 2764 fi 2765 2766 # static link with sdl ? (note: sdl.pc's --static --libs is broken) 2767 if test "$sdl" = "yes" -a "$static" = "yes" ; then 2768 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then 2769 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)" 2770 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)" 2771 fi 2772 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 2773 : 2774 else 2775 sdl=no 2776 fi 2777 fi # static link 2778 else # sdl not found 2779 if test "$sdl" = "yes" ; then 2780 feature_not_found "sdl" "Install SDL devel" 2781 fi 2782 sdl=no 2783 fi # sdl compile test 2784fi 2785 2786if test "$sdl" = "yes" ; then 2787 cat > $TMPC <<EOF 2788#include <SDL.h> 2789#if defined(SDL_VIDEO_DRIVER_X11) 2790#include <X11/XKBlib.h> 2791#else 2792#error No x11 support 2793#endif 2794int main(void) { return 0; } 2795EOF 2796 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then 2797 sdl_cflags="$sdl_cflags $x11_cflags" 2798 sdl_libs="$sdl_libs $x11_libs" 2799 fi 2800fi 2801 2802########################################## 2803# RDMA needs OpenFabrics libraries 2804if test "$rdma" != "no" ; then 2805 cat > $TMPC <<EOF 2806#include <rdma/rdma_cma.h> 2807int main(void) { return 0; } 2808EOF 2809 rdma_libs="-lrdmacm -libverbs" 2810 if compile_prog "" "$rdma_libs" ; then 2811 rdma="yes" 2812 else 2813 if test "$rdma" = "yes" ; then 2814 error_exit \ 2815 " OpenFabrics librdmacm/libibverbs not present." \ 2816 " Your options:" \ 2817 " (1) Fast: Install infiniband packages from your distro." \ 2818 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 2819 " (3) Also: Install softiwarp if you don't have RDMA hardware" 2820 fi 2821 rdma="no" 2822 fi 2823fi 2824 2825 2826########################################## 2827# VNC SASL detection 2828if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then 2829 cat > $TMPC <<EOF 2830#include <sasl/sasl.h> 2831#include <stdio.h> 2832int main(void) { sasl_server_init(NULL, "qemu"); return 0; } 2833EOF 2834 # Assuming Cyrus-SASL installed in /usr prefix 2835 vnc_sasl_cflags="" 2836 vnc_sasl_libs="-lsasl2" 2837 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then 2838 vnc_sasl=yes 2839 libs_softmmu="$vnc_sasl_libs $libs_softmmu" 2840 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags" 2841 else 2842 if test "$vnc_sasl" = "yes" ; then 2843 feature_not_found "vnc-sasl" "Install Cyrus SASL devel" 2844 fi 2845 vnc_sasl=no 2846 fi 2847fi 2848 2849########################################## 2850# VNC JPEG detection 2851if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then 2852cat > $TMPC <<EOF 2853#include <stdio.h> 2854#include <jpeglib.h> 2855int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; } 2856EOF 2857 vnc_jpeg_cflags="" 2858 vnc_jpeg_libs="-ljpeg" 2859 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then 2860 vnc_jpeg=yes 2861 libs_softmmu="$vnc_jpeg_libs $libs_softmmu" 2862 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags" 2863 else 2864 if test "$vnc_jpeg" = "yes" ; then 2865 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel" 2866 fi 2867 vnc_jpeg=no 2868 fi 2869fi 2870 2871########################################## 2872# VNC PNG detection 2873if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then 2874cat > $TMPC <<EOF 2875//#include <stdio.h> 2876#include <png.h> 2877#include <stddef.h> 2878int main(void) { 2879 png_structp png_ptr; 2880 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 2881 return png_ptr != 0; 2882} 2883EOF 2884 if $pkg_config libpng --exists; then 2885 vnc_png_cflags=$($pkg_config libpng --cflags) 2886 vnc_png_libs=$($pkg_config libpng --libs) 2887 else 2888 vnc_png_cflags="" 2889 vnc_png_libs="-lpng" 2890 fi 2891 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then 2892 vnc_png=yes 2893 libs_softmmu="$vnc_png_libs $libs_softmmu" 2894 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags" 2895 else 2896 if test "$vnc_png" = "yes" ; then 2897 feature_not_found "vnc-png" "Install libpng devel" 2898 fi 2899 vnc_png=no 2900 fi 2901fi 2902 2903########################################## 2904# fnmatch() probe, used for ACL routines 2905fnmatch="no" 2906cat > $TMPC << EOF 2907#include <fnmatch.h> 2908int main(void) 2909{ 2910 fnmatch("foo", "foo", 0); 2911 return 0; 2912} 2913EOF 2914if compile_prog "" "" ; then 2915 fnmatch="yes" 2916fi 2917 2918########################################## 2919# xfsctl() probe, used for file-posix.c 2920if test "$xfs" != "no" ; then 2921 cat > $TMPC << EOF 2922#include <stddef.h> /* NULL */ 2923#include <xfs/xfs.h> 2924int main(void) 2925{ 2926 xfsctl(NULL, 0, 0, NULL); 2927 return 0; 2928} 2929EOF 2930 if compile_prog "" "" ; then 2931 xfs="yes" 2932 else 2933 if test "$xfs" = "yes" ; then 2934 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel" 2935 fi 2936 xfs=no 2937 fi 2938fi 2939 2940########################################## 2941# vde libraries probe 2942if test "$vde" != "no" ; then 2943 vde_libs="-lvdeplug" 2944 cat > $TMPC << EOF 2945#include <libvdeplug.h> 2946int main(void) 2947{ 2948 struct vde_open_args a = {0, 0, 0}; 2949 char s[] = ""; 2950 vde_open(s, s, &a); 2951 return 0; 2952} 2953EOF 2954 if compile_prog "" "$vde_libs" ; then 2955 vde=yes 2956 else 2957 if test "$vde" = "yes" ; then 2958 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 2959 fi 2960 vde=no 2961 fi 2962fi 2963 2964########################################## 2965# netmap support probe 2966# Apart from looking for netmap headers, we make sure that the host API version 2967# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 2968# a minor/major version number. Minor new features will be marked with values up 2969# to 15, and if something happens that requires a change to the backend we will 2970# move above 15, submit the backend fixes and modify this two bounds. 2971if test "$netmap" != "no" ; then 2972 cat > $TMPC << EOF 2973#include <inttypes.h> 2974#include <net/if.h> 2975#include <net/netmap.h> 2976#include <net/netmap_user.h> 2977#if (NETMAP_API < 11) || (NETMAP_API > 15) 2978#error 2979#endif 2980int main(void) { return 0; } 2981EOF 2982 if compile_prog "" "" ; then 2983 netmap=yes 2984 else 2985 if test "$netmap" = "yes" ; then 2986 feature_not_found "netmap" 2987 fi 2988 netmap=no 2989 fi 2990fi 2991 2992########################################## 2993# libcap-ng library probe 2994if test "$cap_ng" != "no" ; then 2995 cap_libs="-lcap-ng" 2996 cat > $TMPC << EOF 2997#include <cap-ng.h> 2998int main(void) 2999{ 3000 capng_capability_to_name(CAPNG_EFFECTIVE); 3001 return 0; 3002} 3003EOF 3004 if compile_prog "" "$cap_libs" ; then 3005 cap_ng=yes 3006 libs_tools="$cap_libs $libs_tools" 3007 else 3008 if test "$cap_ng" = "yes" ; then 3009 feature_not_found "cap_ng" "Install libcap-ng devel" 3010 fi 3011 cap_ng=no 3012 fi 3013fi 3014 3015########################################## 3016# Sound support libraries probe 3017 3018audio_drv_probe() 3019{ 3020 drv=$1 3021 hdr=$2 3022 lib=$3 3023 exp=$4 3024 cfl=$5 3025 cat > $TMPC << EOF 3026#include <$hdr> 3027int main(void) { $exp } 3028EOF 3029 if compile_prog "$cfl" "$lib" ; then 3030 : 3031 else 3032 error_exit "$drv check failed" \ 3033 "Make sure to have the $drv libs and headers installed." 3034 fi 3035} 3036 3037audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3038for drv in $audio_drv_list; do 3039 case $drv in 3040 alsa) 3041 audio_drv_probe $drv alsa/asoundlib.h -lasound \ 3042 "return snd_pcm_close((snd_pcm_t *)0);" 3043 alsa_libs="-lasound" 3044 ;; 3045 3046 pa) 3047 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \ 3048 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;" 3049 pulse_libs="-lpulse" 3050 audio_pt_int="yes" 3051 ;; 3052 3053 sdl) 3054 if test "$sdl" = "no"; then 3055 error_exit "sdl not found or disabled, can not use sdl audio driver" 3056 fi 3057 ;; 3058 3059 coreaudio) 3060 coreaudio_libs="-framework CoreAudio" 3061 ;; 3062 3063 dsound) 3064 dsound_libs="-lole32 -ldxguid" 3065 audio_win_int="yes" 3066 ;; 3067 3068 oss) 3069 oss_libs="$oss_lib" 3070 ;; 3071 3072 wav) 3073 # XXX: Probes for CoreAudio, DirectSound 3074 ;; 3075 3076 *) 3077 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 3078 error_exit "Unknown driver '$drv' selected" \ 3079 "Possible drivers are: $audio_possible_drivers" 3080 } 3081 ;; 3082 esac 3083done 3084 3085########################################## 3086# BrlAPI probe 3087 3088if test "$brlapi" != "no" ; then 3089 brlapi_libs="-lbrlapi" 3090 cat > $TMPC << EOF 3091#include <brlapi.h> 3092#include <stddef.h> 3093int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } 3094EOF 3095 if compile_prog "" "$brlapi_libs" ; then 3096 brlapi=yes 3097 else 3098 if test "$brlapi" = "yes" ; then 3099 feature_not_found "brlapi" "Install brlapi devel" 3100 fi 3101 brlapi=no 3102 fi 3103fi 3104 3105########################################## 3106# curses probe 3107if test "$curses" != "no" ; then 3108 if test "$mingw32" = "yes" ; then 3109 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):" 3110 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses" 3111 else 3112 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:" 3113 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw" 3114 fi 3115 curses_found=no 3116 cat > $TMPC << EOF 3117#include <locale.h> 3118#include <curses.h> 3119#include <wchar.h> 3120int main(void) { 3121 wchar_t wch = L'w'; 3122 setlocale(LC_ALL, ""); 3123 resize_term(0, 0); 3124 addwstr(L"wide chars\n"); 3125 addnwstr(&wch, 1); 3126 add_wch(WACS_DEGREE); 3127 return 0; 3128} 3129EOF 3130 IFS=: 3131 for curses_inc in $curses_inc_list; do 3132 # Make sure we get the wide character prototypes 3133 curses_inc="-DNCURSES_WIDECHAR $curses_inc" 3134 IFS=: 3135 for curses_lib in $curses_lib_list; do 3136 unset IFS 3137 if compile_prog "$curses_inc" "$curses_lib" ; then 3138 curses_found=yes 3139 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS" 3140 libs_softmmu="$curses_lib $libs_softmmu" 3141 break 3142 fi 3143 done 3144 if test "$curses_found" = yes ; then 3145 break 3146 fi 3147 done 3148 unset IFS 3149 if test "$curses_found" = "yes" ; then 3150 curses=yes 3151 else 3152 if test "$curses" = "yes" ; then 3153 feature_not_found "curses" "Install ncurses devel" 3154 fi 3155 curses=no 3156 fi 3157fi 3158 3159########################################## 3160# curl probe 3161if test "$curl" != "no" ; then 3162 if $pkg_config libcurl --exists; then 3163 curlconfig="$pkg_config libcurl" 3164 else 3165 curlconfig=curl-config 3166 fi 3167 cat > $TMPC << EOF 3168#include <curl/curl.h> 3169int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3170EOF 3171 curl_cflags=$($curlconfig --cflags 2>/dev/null) 3172 curl_libs=$($curlconfig --libs 2>/dev/null) 3173 if compile_prog "$curl_cflags" "$curl_libs" ; then 3174 curl=yes 3175 else 3176 if test "$curl" = "yes" ; then 3177 feature_not_found "curl" "Install libcurl devel" 3178 fi 3179 curl=no 3180 fi 3181fi # test "$curl" 3182 3183########################################## 3184# bluez support probe 3185if test "$bluez" != "no" ; then 3186 cat > $TMPC << EOF 3187#include <bluetooth/bluetooth.h> 3188int main(void) { return bt_error(0); } 3189EOF 3190 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null) 3191 bluez_libs=$($pkg_config --libs bluez 2>/dev/null) 3192 if compile_prog "$bluez_cflags" "$bluez_libs" ; then 3193 bluez=yes 3194 libs_softmmu="$bluez_libs $libs_softmmu" 3195 else 3196 if test "$bluez" = "yes" ; then 3197 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel" 3198 fi 3199 bluez="no" 3200 fi 3201fi 3202 3203########################################## 3204# glib support probe 3205 3206if test "$mingw32" = yes; then 3207 glib_req_ver=2.30 3208else 3209 glib_req_ver=2.22 3210fi 3211glib_modules=gthread-2.0 3212if test "$modules" = yes; then 3213 glib_modules="$glib_modules gmodule-2.0" 3214fi 3215 3216# This workaround is required due to a bug in pkg-config file for glib as it 3217# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3218 3219if test "$static" = yes -a "$mingw32" = yes; then 3220 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" 3221fi 3222 3223for i in $glib_modules; do 3224 if $pkg_config --atleast-version=$glib_req_ver $i; then 3225 glib_cflags=$($pkg_config --cflags $i) 3226 glib_libs=$($pkg_config --libs $i) 3227 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" 3228 LIBS="$glib_libs $LIBS" 3229 libs_qga="$glib_libs $libs_qga" 3230 else 3231 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3232 fi 3233done 3234 3235# Sanity check that the current size_t matches the 3236# size that glib thinks it should be. This catches 3237# problems on multi-arch where people try to build 3238# 32-bit QEMU while pointing at 64-bit glib headers 3239cat > $TMPC <<EOF 3240#include <glib.h> 3241#include <unistd.h> 3242 3243#define QEMU_BUILD_BUG_ON(x) \ 3244 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3245 3246int main(void) { 3247 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3248 return 0; 3249} 3250EOF 3251 3252if ! compile_prog "$CFLAGS" "$LIBS" ; then 3253 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3254 "You probably need to set PKG_CONFIG_LIBDIR"\ 3255 "to point to the right pkg-config files for your"\ 3256 "build target" 3257fi 3258 3259# g_test_trap_subprocess added in 2.38. Used by some tests. 3260glib_subprocess=yes 3261if ! $pkg_config --atleast-version=2.38 glib-2.0; then 3262 glib_subprocess=no 3263fi 3264 3265# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3266cat > $TMPC << EOF 3267#include <glib.h> 3268int main(void) { return 0; } 3269EOF 3270if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3271 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3272 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3273 CFLAGS="-Wno-unknown-attributes $CFLAGS" 3274 fi 3275fi 3276 3277########################################## 3278# SHA command probe for modules 3279if test "$modules" = yes; then 3280 shacmd_probe="sha1sum sha1 shasum" 3281 for c in $shacmd_probe; do 3282 if has $c; then 3283 shacmd="$c" 3284 break 3285 fi 3286 done 3287 if test "$shacmd" = ""; then 3288 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3289 fi 3290fi 3291 3292########################################## 3293# pixman support probe 3294 3295if test "$want_tools" = "no" -a "$softmmu" = "no"; then 3296 pixman_cflags= 3297 pixman_libs= 3298elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 3299 pixman_cflags=$($pkg_config --cflags pixman-1) 3300 pixman_libs=$($pkg_config --libs pixman-1) 3301else 3302 error_exit "pixman >= 0.21.8 not present." \ 3303 "Please install the pixman devel package." 3304fi 3305 3306########################################## 3307# libmpathpersist probe 3308 3309if test "$mpath" != "no" ; then 3310 cat > $TMPC <<EOF 3311#include <libudev.h> 3312#include <mpath_persist.h> 3313unsigned mpath_mx_alloc_len = 1024; 3314int logsink; 3315int main(void) { 3316 struct udev *udev = udev_new(); 3317 mpath_lib_init(udev); 3318 return 0; 3319} 3320EOF 3321 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3322 mpathpersist=yes 3323 else 3324 mpathpersist=no 3325 fi 3326else 3327 mpathpersist=no 3328fi 3329 3330########################################## 3331# libcap probe 3332 3333if test "$cap" != "no" ; then 3334 cat > $TMPC <<EOF 3335#include <stdio.h> 3336#include <sys/capability.h> 3337int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; } 3338EOF 3339 if compile_prog "" "-lcap" ; then 3340 cap=yes 3341 else 3342 cap=no 3343 fi 3344fi 3345 3346########################################## 3347# pthread probe 3348PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3349 3350pthread=no 3351cat > $TMPC << EOF 3352#include <pthread.h> 3353static void *f(void *p) { return NULL; } 3354int main(void) { 3355 pthread_t thread; 3356 pthread_create(&thread, 0, f, 0); 3357 return 0; 3358} 3359EOF 3360if compile_prog "" "" ; then 3361 pthread=yes 3362else 3363 for pthread_lib in $PTHREADLIBS_LIST; do 3364 if compile_prog "" "$pthread_lib" ; then 3365 pthread=yes 3366 found=no 3367 for lib_entry in $LIBS; do 3368 if test "$lib_entry" = "$pthread_lib"; then 3369 found=yes 3370 break 3371 fi 3372 done 3373 if test "$found" = "no"; then 3374 LIBS="$pthread_lib $LIBS" 3375 fi 3376 PTHREAD_LIB="$pthread_lib" 3377 break 3378 fi 3379 done 3380fi 3381 3382if test "$mingw32" != yes -a "$pthread" = no; then 3383 error_exit "pthread check failed" \ 3384 "Make sure to have the pthread libs and headers installed." 3385fi 3386 3387# check for pthread_setname_np 3388pthread_setname_np=no 3389cat > $TMPC << EOF 3390#include <pthread.h> 3391 3392static void *f(void *p) { return NULL; } 3393int main(void) 3394{ 3395 pthread_t thread; 3396 pthread_create(&thread, 0, f, 0); 3397 pthread_setname_np(thread, "QEMU"); 3398 return 0; 3399} 3400EOF 3401if compile_prog "" "$pthread_lib" ; then 3402 pthread_setname_np=yes 3403fi 3404 3405########################################## 3406# rbd probe 3407if test "$rbd" != "no" ; then 3408 cat > $TMPC <<EOF 3409#include <stdio.h> 3410#include <rbd/librbd.h> 3411int main(void) { 3412 rados_t cluster; 3413 rados_create(&cluster, NULL); 3414 return 0; 3415} 3416EOF 3417 rbd_libs="-lrbd -lrados" 3418 if compile_prog "" "$rbd_libs" ; then 3419 rbd=yes 3420 else 3421 if test "$rbd" = "yes" ; then 3422 feature_not_found "rados block device" "Install librbd/ceph devel" 3423 fi 3424 rbd=no 3425 fi 3426fi 3427 3428########################################## 3429# libssh2 probe 3430min_libssh2_version=1.2.8 3431if test "$libssh2" != "no" ; then 3432 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then 3433 libssh2_cflags=$($pkg_config libssh2 --cflags) 3434 libssh2_libs=$($pkg_config libssh2 --libs) 3435 libssh2=yes 3436 else 3437 if test "$libssh2" = "yes" ; then 3438 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2" 3439 fi 3440 libssh2=no 3441 fi 3442fi 3443 3444########################################## 3445# libssh2_sftp_fsync probe 3446 3447if test "$libssh2" = "yes"; then 3448 cat > $TMPC <<EOF 3449#include <stdio.h> 3450#include <libssh2.h> 3451#include <libssh2_sftp.h> 3452int main(void) { 3453 LIBSSH2_SESSION *session; 3454 LIBSSH2_SFTP *sftp; 3455 LIBSSH2_SFTP_HANDLE *sftp_handle; 3456 session = libssh2_session_init (); 3457 sftp = libssh2_sftp_init (session); 3458 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0); 3459 libssh2_sftp_fsync (sftp_handle); 3460 return 0; 3461} 3462EOF 3463 # libssh2_cflags/libssh2_libs defined in previous test. 3464 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then 3465 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS" 3466 fi 3467fi 3468 3469########################################## 3470# linux-aio probe 3471 3472if test "$linux_aio" != "no" ; then 3473 cat > $TMPC <<EOF 3474#include <libaio.h> 3475#include <sys/eventfd.h> 3476#include <stddef.h> 3477int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 3478EOF 3479 if compile_prog "" "-laio" ; then 3480 linux_aio=yes 3481 else 3482 if test "$linux_aio" = "yes" ; then 3483 feature_not_found "linux AIO" "Install libaio devel" 3484 fi 3485 linux_aio=no 3486 fi 3487fi 3488 3489########################################## 3490# TPM passthrough is only on x86 Linux 3491 3492if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then 3493 tpm_passthrough=$tpm 3494else 3495 tpm_passthrough=no 3496fi 3497 3498# TPM emulator is for all posix systems 3499if test "$mingw32" != "yes"; then 3500 tpm_emulator=$tpm 3501else 3502 tpm_emulator=no 3503fi 3504########################################## 3505# attr probe 3506 3507if test "$attr" != "no" ; then 3508 cat > $TMPC <<EOF 3509#include <stdio.h> 3510#include <sys/types.h> 3511#ifdef CONFIG_LIBATTR 3512#include <attr/xattr.h> 3513#else 3514#include <sys/xattr.h> 3515#endif 3516int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 3517EOF 3518 if compile_prog "" "" ; then 3519 attr=yes 3520 # Older distros have <attr/xattr.h>, and need -lattr: 3521 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 3522 attr=yes 3523 LIBS="-lattr $LIBS" 3524 libattr=yes 3525 else 3526 if test "$attr" = "yes" ; then 3527 feature_not_found "ATTR" "Install libc6 or libattr devel" 3528 fi 3529 attr=no 3530 fi 3531fi 3532 3533########################################## 3534# iovec probe 3535cat > $TMPC <<EOF 3536#include <sys/types.h> 3537#include <sys/uio.h> 3538#include <unistd.h> 3539int main(void) { return sizeof(struct iovec); } 3540EOF 3541iovec=no 3542if compile_prog "" "" ; then 3543 iovec=yes 3544fi 3545 3546########################################## 3547# preadv probe 3548cat > $TMPC <<EOF 3549#include <sys/types.h> 3550#include <sys/uio.h> 3551#include <unistd.h> 3552int main(void) { return preadv(0, 0, 0, 0); } 3553EOF 3554preadv=no 3555if compile_prog "" "" ; then 3556 preadv=yes 3557fi 3558 3559########################################## 3560# fdt probe 3561# fdt support is mandatory for at least some target architectures, 3562# so insist on it if we're building those system emulators. 3563fdt_required=no 3564for target in $target_list; do 3565 case $target in 3566 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu) 3567 fdt_required=yes 3568 ;; 3569 esac 3570done 3571 3572if test "$fdt_required" = "yes"; then 3573 if test "$fdt" = "no"; then 3574 error_exit "fdt disabled but some requested targets require it." \ 3575 "You can turn off fdt only if you also disable all the system emulation" \ 3576 "targets which need it (by specifying a cut down --target-list)." 3577 fi 3578 fdt=yes 3579fi 3580 3581if test "$fdt" != "no" ; then 3582 fdt_libs="-lfdt" 3583 # explicitly check for libfdt_env.h as it is missing in some stable installs 3584 # and test for required functions to make sure we are on a version >= 1.4.2 3585 cat > $TMPC << EOF 3586#include <libfdt.h> 3587#include <libfdt_env.h> 3588int main(void) { fdt_first_subnode(0, 0); return 0; } 3589EOF 3590 if compile_prog "" "$fdt_libs" ; then 3591 # system DTC is good - use it 3592 fdt=yes 3593 elif test -d ${source_path}/dtc/libfdt ; then 3594 # have submodule DTC - use it 3595 fdt=yes 3596 dtc_internal="yes" 3597 mkdir -p dtc 3598 if [ "$pwd_is_source_path" != "y" ] ; then 3599 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 3600 symlink "$source_path/dtc/scripts" "dtc/scripts" 3601 fi 3602 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 3603 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs" 3604 elif test "$fdt" = "yes" ; then 3605 # have neither and want - prompt for system/submodule install 3606 error_exit "DTC (libfdt) version >= 1.4.2 not present. Your options:" \ 3607 " (1) Preferred: Install the DTC (libfdt) devel package" \ 3608 " (2) Fetch the DTC submodule, using:" \ 3609 " git submodule update --init dtc" 3610 else 3611 # don't have and don't want 3612 fdt_libs= 3613 fdt=no 3614 fi 3615fi 3616 3617libs_softmmu="$libs_softmmu $fdt_libs" 3618 3619########################################## 3620# opengl probe (for sdl2, gtk, milkymist-tmu2) 3621 3622if test "$opengl" != "no" ; then 3623 opengl_pkgs="epoxy libdrm gbm" 3624 if $pkg_config $opengl_pkgs x11; then 3625 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags" 3626 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs" 3627 opengl=yes 3628 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 3629 gtk_gl="yes" 3630 fi 3631 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 3632 else 3633 if test "$opengl" = "yes" ; then 3634 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 3635 fi 3636 opengl_cflags="" 3637 opengl_libs="" 3638 opengl=no 3639 fi 3640fi 3641 3642if test "$opengl" = "yes"; then 3643 cat > $TMPC << EOF 3644#include <epoxy/egl.h> 3645#ifndef EGL_MESA_image_dma_buf_export 3646# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 3647#endif 3648int main(void) { return 0; } 3649EOF 3650 if compile_prog "" "" ; then 3651 opengl_dmabuf=yes 3652 fi 3653fi 3654 3655 3656########################################## 3657# glusterfs probe 3658if test "$glusterfs" != "no" ; then 3659 if $pkg_config --atleast-version=3 glusterfs-api; then 3660 glusterfs="yes" 3661 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 3662 glusterfs_libs=$($pkg_config --libs glusterfs-api) 3663 if $pkg_config --atleast-version=4 glusterfs-api; then 3664 glusterfs_xlator_opt="yes" 3665 fi 3666 if $pkg_config --atleast-version=5 glusterfs-api; then 3667 glusterfs_discard="yes" 3668 fi 3669 if $pkg_config --atleast-version=6 glusterfs-api; then 3670 glusterfs_fallocate="yes" 3671 glusterfs_zerofill="yes" 3672 fi 3673 else 3674 if test "$glusterfs" = "yes" ; then 3675 feature_not_found "GlusterFS backend support" \ 3676 "Install glusterfs-api devel >= 3" 3677 fi 3678 glusterfs="no" 3679 fi 3680fi 3681 3682# Check for inotify functions when we are building linux-user 3683# emulator. This is done because older glibc versions don't 3684# have syscall stubs for these implemented. In that case we 3685# don't provide them even if kernel supports them. 3686# 3687inotify=no 3688cat > $TMPC << EOF 3689#include <sys/inotify.h> 3690 3691int 3692main(void) 3693{ 3694 /* try to start inotify */ 3695 return inotify_init(); 3696} 3697EOF 3698if compile_prog "" "" ; then 3699 inotify=yes 3700fi 3701 3702inotify1=no 3703cat > $TMPC << EOF 3704#include <sys/inotify.h> 3705 3706int 3707main(void) 3708{ 3709 /* try to start inotify */ 3710 return inotify_init1(0); 3711} 3712EOF 3713if compile_prog "" "" ; then 3714 inotify1=yes 3715fi 3716 3717# check if pipe2 is there 3718pipe2=no 3719cat > $TMPC << EOF 3720#include <unistd.h> 3721#include <fcntl.h> 3722 3723int main(void) 3724{ 3725 int pipefd[2]; 3726 return pipe2(pipefd, O_CLOEXEC); 3727} 3728EOF 3729if compile_prog "" "" ; then 3730 pipe2=yes 3731fi 3732 3733# check if accept4 is there 3734accept4=no 3735cat > $TMPC << EOF 3736#include <sys/socket.h> 3737#include <stddef.h> 3738 3739int main(void) 3740{ 3741 accept4(0, NULL, NULL, SOCK_CLOEXEC); 3742 return 0; 3743} 3744EOF 3745if compile_prog "" "" ; then 3746 accept4=yes 3747fi 3748 3749# check if tee/splice is there. vmsplice was added same time. 3750splice=no 3751cat > $TMPC << EOF 3752#include <unistd.h> 3753#include <fcntl.h> 3754#include <limits.h> 3755 3756int main(void) 3757{ 3758 int len, fd = 0; 3759 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 3760 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 3761 return 0; 3762} 3763EOF 3764if compile_prog "" "" ; then 3765 splice=yes 3766fi 3767 3768########################################## 3769# libnuma probe 3770 3771if test "$numa" != "no" ; then 3772 cat > $TMPC << EOF 3773#include <numa.h> 3774int main(void) { return numa_available(); } 3775EOF 3776 3777 if compile_prog "" "-lnuma" ; then 3778 numa=yes 3779 libs_softmmu="-lnuma $libs_softmmu" 3780 else 3781 if test "$numa" = "yes" ; then 3782 feature_not_found "numa" "install numactl devel" 3783 fi 3784 numa=no 3785 fi 3786fi 3787 3788if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 3789 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 3790 exit 1 3791fi 3792 3793########################################## 3794# tcmalloc probe 3795 3796if test "$tcmalloc" = "yes" ; then 3797 cat > $TMPC << EOF 3798#include <stdlib.h> 3799int main(void) { malloc(1); return 0; } 3800EOF 3801 3802 if compile_prog "" "-ltcmalloc" ; then 3803 LIBS="-ltcmalloc $LIBS" 3804 else 3805 feature_not_found "tcmalloc" "install gperftools devel" 3806 fi 3807fi 3808 3809########################################## 3810# jemalloc probe 3811 3812if test "$jemalloc" = "yes" ; then 3813 cat > $TMPC << EOF 3814#include <stdlib.h> 3815int main(void) { malloc(1); return 0; } 3816EOF 3817 3818 if compile_prog "" "-ljemalloc" ; then 3819 LIBS="-ljemalloc $LIBS" 3820 else 3821 feature_not_found "jemalloc" "install jemalloc devel" 3822 fi 3823fi 3824 3825########################################## 3826# signalfd probe 3827signalfd="no" 3828cat > $TMPC << EOF 3829#include <unistd.h> 3830#include <sys/syscall.h> 3831#include <signal.h> 3832int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 3833EOF 3834 3835if compile_prog "" "" ; then 3836 signalfd=yes 3837fi 3838 3839# check if eventfd is supported 3840eventfd=no 3841cat > $TMPC << EOF 3842#include <sys/eventfd.h> 3843 3844int main(void) 3845{ 3846 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 3847} 3848EOF 3849if compile_prog "" "" ; then 3850 eventfd=yes 3851fi 3852 3853# check if memfd is supported 3854memfd=no 3855cat > $TMPC << EOF 3856#include <sys/memfd.h> 3857 3858int main(void) 3859{ 3860 return memfd_create("foo", MFD_ALLOW_SEALING); 3861} 3862EOF 3863if compile_prog "" "" ; then 3864 memfd=yes 3865fi 3866 3867 3868 3869# check for fallocate 3870fallocate=no 3871cat > $TMPC << EOF 3872#include <fcntl.h> 3873 3874int main(void) 3875{ 3876 fallocate(0, 0, 0, 0); 3877 return 0; 3878} 3879EOF 3880if compile_prog "" "" ; then 3881 fallocate=yes 3882fi 3883 3884# check for fallocate hole punching 3885fallocate_punch_hole=no 3886cat > $TMPC << EOF 3887#include <fcntl.h> 3888#include <linux/falloc.h> 3889 3890int main(void) 3891{ 3892 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 3893 return 0; 3894} 3895EOF 3896if compile_prog "" "" ; then 3897 fallocate_punch_hole=yes 3898fi 3899 3900# check that fallocate supports range zeroing inside the file 3901fallocate_zero_range=no 3902cat > $TMPC << EOF 3903#include <fcntl.h> 3904#include <linux/falloc.h> 3905 3906int main(void) 3907{ 3908 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 3909 return 0; 3910} 3911EOF 3912if compile_prog "" "" ; then 3913 fallocate_zero_range=yes 3914fi 3915 3916# check for posix_fallocate 3917posix_fallocate=no 3918cat > $TMPC << EOF 3919#include <fcntl.h> 3920 3921int main(void) 3922{ 3923 posix_fallocate(0, 0, 0); 3924 return 0; 3925} 3926EOF 3927if compile_prog "" "" ; then 3928 posix_fallocate=yes 3929fi 3930 3931# check for sync_file_range 3932sync_file_range=no 3933cat > $TMPC << EOF 3934#include <fcntl.h> 3935 3936int main(void) 3937{ 3938 sync_file_range(0, 0, 0, 0); 3939 return 0; 3940} 3941EOF 3942if compile_prog "" "" ; then 3943 sync_file_range=yes 3944fi 3945 3946# check for linux/fiemap.h and FS_IOC_FIEMAP 3947fiemap=no 3948cat > $TMPC << EOF 3949#include <sys/ioctl.h> 3950#include <linux/fs.h> 3951#include <linux/fiemap.h> 3952 3953int main(void) 3954{ 3955 ioctl(0, FS_IOC_FIEMAP, 0); 3956 return 0; 3957} 3958EOF 3959if compile_prog "" "" ; then 3960 fiemap=yes 3961fi 3962 3963# check for dup3 3964dup3=no 3965cat > $TMPC << EOF 3966#include <unistd.h> 3967 3968int main(void) 3969{ 3970 dup3(0, 0, 0); 3971 return 0; 3972} 3973EOF 3974if compile_prog "" "" ; then 3975 dup3=yes 3976fi 3977 3978# check for ppoll support 3979ppoll=no 3980cat > $TMPC << EOF 3981#include <poll.h> 3982 3983int main(void) 3984{ 3985 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 3986 ppoll(&pfd, 1, 0, 0); 3987 return 0; 3988} 3989EOF 3990if compile_prog "" "" ; then 3991 ppoll=yes 3992fi 3993 3994# check for prctl(PR_SET_TIMERSLACK , ... ) support 3995prctl_pr_set_timerslack=no 3996cat > $TMPC << EOF 3997#include <sys/prctl.h> 3998 3999int main(void) 4000{ 4001 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4002 return 0; 4003} 4004EOF 4005if compile_prog "" "" ; then 4006 prctl_pr_set_timerslack=yes 4007fi 4008 4009# check for epoll support 4010epoll=no 4011cat > $TMPC << EOF 4012#include <sys/epoll.h> 4013 4014int main(void) 4015{ 4016 epoll_create(0); 4017 return 0; 4018} 4019EOF 4020if compile_prog "" "" ; then 4021 epoll=yes 4022fi 4023 4024# epoll_create1 is a later addition 4025# so we must check separately for its presence 4026epoll_create1=no 4027cat > $TMPC << EOF 4028#include <sys/epoll.h> 4029 4030int main(void) 4031{ 4032 /* Note that we use epoll_create1 as a value, not as 4033 * a function being called. This is necessary so that on 4034 * old SPARC glibc versions where the function was present in 4035 * the library but not declared in the header file we will 4036 * fail the configure check. (Otherwise we will get a compiler 4037 * warning but not an error, and will proceed to fail the 4038 * qemu compile where we compile with -Werror.) 4039 */ 4040 return (int)(uintptr_t)&epoll_create1; 4041} 4042EOF 4043if compile_prog "" "" ; then 4044 epoll_create1=yes 4045fi 4046 4047# check for sendfile support 4048sendfile=no 4049cat > $TMPC << EOF 4050#include <sys/sendfile.h> 4051 4052int main(void) 4053{ 4054 return sendfile(0, 0, 0, 0); 4055} 4056EOF 4057if compile_prog "" "" ; then 4058 sendfile=yes 4059fi 4060 4061# check for timerfd support (glibc 2.8 and newer) 4062timerfd=no 4063cat > $TMPC << EOF 4064#include <sys/timerfd.h> 4065 4066int main(void) 4067{ 4068 return(timerfd_create(CLOCK_REALTIME, 0)); 4069} 4070EOF 4071if compile_prog "" "" ; then 4072 timerfd=yes 4073fi 4074 4075# check for setns and unshare support 4076setns=no 4077cat > $TMPC << EOF 4078#include <sched.h> 4079 4080int main(void) 4081{ 4082 int ret; 4083 ret = setns(0, 0); 4084 ret = unshare(0); 4085 return ret; 4086} 4087EOF 4088if compile_prog "" "" ; then 4089 setns=yes 4090fi 4091 4092# clock_adjtime probe 4093clock_adjtime=no 4094cat > $TMPC <<EOF 4095#include <time.h> 4096 4097int main(void) 4098{ 4099 return clock_adjtime(0, 0); 4100} 4101EOF 4102clock_adjtime=no 4103if compile_prog "" "" ; then 4104 clock_adjtime=yes 4105fi 4106 4107# syncfs probe 4108syncfs=no 4109cat > $TMPC <<EOF 4110#include <unistd.h> 4111 4112int main(void) 4113{ 4114 return syncfs(0); 4115} 4116EOF 4117syncfs=no 4118if compile_prog "" "" ; then 4119 syncfs=yes 4120fi 4121 4122# Check if tools are available to build documentation. 4123if test "$docs" != "no" ; then 4124 if has makeinfo && has pod2man; then 4125 docs=yes 4126 else 4127 if test "$docs" = "yes" ; then 4128 feature_not_found "docs" "Install texinfo and Perl/perl-podlators" 4129 fi 4130 docs=no 4131 fi 4132fi 4133 4134# Search for bswap_32 function 4135byteswap_h=no 4136cat > $TMPC << EOF 4137#include <byteswap.h> 4138int main(void) { return bswap_32(0); } 4139EOF 4140if compile_prog "" "" ; then 4141 byteswap_h=yes 4142fi 4143 4144# Search for bswap32 function 4145bswap_h=no 4146cat > $TMPC << EOF 4147#include <sys/endian.h> 4148#include <sys/types.h> 4149#include <machine/bswap.h> 4150int main(void) { return bswap32(0); } 4151EOF 4152if compile_prog "" "" ; then 4153 bswap_h=yes 4154fi 4155 4156########################################## 4157# Do we have libiscsi >= 1.9.0 4158if test "$libiscsi" != "no" ; then 4159 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4160 libiscsi="yes" 4161 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4162 libiscsi_libs=$($pkg_config --libs libiscsi) 4163 else 4164 if test "$libiscsi" = "yes" ; then 4165 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4166 fi 4167 libiscsi="no" 4168 fi 4169fi 4170 4171########################################## 4172# Do we need libm 4173cat > $TMPC << EOF 4174#include <math.h> 4175int main(int argc, char **argv) { return isnan(sin((double)argc)); } 4176EOF 4177if compile_prog "" "" ; then 4178 : 4179elif compile_prog "" "-lm" ; then 4180 LIBS="-lm $LIBS" 4181 libs_qga="-lm $libs_qga" 4182else 4183 error_exit "libm check failed" 4184fi 4185 4186########################################## 4187# Do we need librt 4188# uClibc provides 2 versions of clock_gettime(), one with realtime 4189# support and one without. This means that the clock_gettime() don't 4190# need -lrt. We still need it for timer_create() so we check for this 4191# function in addition. 4192cat > $TMPC <<EOF 4193#include <signal.h> 4194#include <time.h> 4195int main(void) { 4196 timer_create(CLOCK_REALTIME, NULL, NULL); 4197 return clock_gettime(CLOCK_REALTIME, NULL); 4198} 4199EOF 4200 4201if compile_prog "" "" ; then 4202 : 4203# we need pthread for static linking. use previous pthread test result 4204elif compile_prog "" "$pthread_lib -lrt" ; then 4205 LIBS="$LIBS -lrt" 4206 libs_qga="$libs_qga -lrt" 4207fi 4208 4209if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ 4210 "$haiku" != "yes" ; then 4211 libs_softmmu="-lutil $libs_softmmu" 4212fi 4213 4214########################################## 4215# spice probe 4216if test "$spice" != "no" ; then 4217 cat > $TMPC << EOF 4218#include <spice.h> 4219int main(void) { spice_server_new(); return 0; } 4220EOF 4221 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4222 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4223 if $pkg_config --atleast-version=0.12.0 spice-server && \ 4224 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4225 compile_prog "$spice_cflags" "$spice_libs" ; then 4226 spice="yes" 4227 libs_softmmu="$libs_softmmu $spice_libs" 4228 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 4229 spice_protocol_version=$($pkg_config --modversion spice-protocol) 4230 spice_server_version=$($pkg_config --modversion spice-server) 4231 else 4232 if test "$spice" = "yes" ; then 4233 feature_not_found "spice" \ 4234 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel" 4235 fi 4236 spice="no" 4237 fi 4238fi 4239 4240# check for smartcard support 4241if test "$smartcard" != "no"; then 4242 if $pkg_config libcacard; then 4243 libcacard_cflags=$($pkg_config --cflags libcacard) 4244 libcacard_libs=$($pkg_config --libs libcacard) 4245 smartcard="yes" 4246 else 4247 if test "$smartcard" = "yes"; then 4248 feature_not_found "smartcard" "Install libcacard devel" 4249 fi 4250 smartcard="no" 4251 fi 4252fi 4253 4254# check for libusb 4255if test "$libusb" != "no" ; then 4256 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4257 libusb="yes" 4258 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4259 libusb_libs=$($pkg_config --libs libusb-1.0) 4260 else 4261 if test "$libusb" = "yes"; then 4262 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4263 fi 4264 libusb="no" 4265 fi 4266fi 4267 4268# check for usbredirparser for usb network redirection support 4269if test "$usb_redir" != "no" ; then 4270 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4271 usb_redir="yes" 4272 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4273 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4274 else 4275 if test "$usb_redir" = "yes"; then 4276 feature_not_found "usb-redir" "Install usbredir devel" 4277 fi 4278 usb_redir="no" 4279 fi 4280fi 4281 4282########################################## 4283# check if we have VSS SDK headers for win 4284 4285if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then 4286 case "$vss_win32_sdk" in 4287 "") vss_win32_include="-isystem $source_path" ;; 4288 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4289 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4290 vss_win32_include="-isystem $source_path/.sdk/vss" 4291 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4292 ;; 4293 *) vss_win32_include="-isystem $vss_win32_sdk" 4294 esac 4295 cat > $TMPC << EOF 4296#define __MIDL_user_allocate_free_DEFINED__ 4297#include <inc/win2003/vss.h> 4298int main(void) { return VSS_CTX_BACKUP; } 4299EOF 4300 if compile_prog "$vss_win32_include" "" ; then 4301 guest_agent_with_vss="yes" 4302 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4303 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4304 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4305 else 4306 if test "$vss_win32_sdk" != "" ; then 4307 echo "ERROR: Please download and install Microsoft VSS SDK:" 4308 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4309 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4310 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4311 echo "ERROR: The headers are extracted in the directory \`inc'." 4312 feature_not_found "VSS support" 4313 fi 4314 guest_agent_with_vss="no" 4315 fi 4316fi 4317 4318########################################## 4319# lookup Windows platform SDK (if not specified) 4320# The SDK is needed only to build .tlb (type library) file of guest agent 4321# VSS provider from the source. It is usually unnecessary because the 4322# pre-compiled .tlb file is included. 4323 4324if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then 4325 if test -z "$win_sdk"; then 4326 programfiles="$PROGRAMFILES" 4327 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4328 if test -n "$programfiles"; then 4329 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4330 else 4331 feature_not_found "Windows SDK" 4332 fi 4333 elif test "$win_sdk" = "no"; then 4334 win_sdk="" 4335 fi 4336fi 4337 4338########################################## 4339# check if mingw environment provides a recent ntddscsi.h 4340if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then 4341 cat > $TMPC << EOF 4342#include <windows.h> 4343#include <ntddscsi.h> 4344int main(void) { 4345#if !defined(IOCTL_SCSI_GET_ADDRESS) 4346#error Missing required ioctl definitions 4347#endif 4348 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4349 return addr.Lun; 4350} 4351EOF 4352 if compile_prog "" "" ; then 4353 guest_agent_ntddscsi=yes 4354 libs_qga="-lsetupapi $libs_qga" 4355 fi 4356fi 4357 4358########################################## 4359# virgl renderer probe 4360 4361if test "$virglrenderer" != "no" ; then 4362 cat > $TMPC << EOF 4363#include <virglrenderer.h> 4364int main(void) { virgl_renderer_poll(); return 0; } 4365EOF 4366 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4367 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4368 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4369 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4370 virglrenderer="yes" 4371 else 4372 if test "$virglrenderer" = "yes" ; then 4373 feature_not_found "virglrenderer" 4374 fi 4375 virglrenderer="no" 4376 fi 4377fi 4378 4379########################################## 4380# check if we have fdatasync 4381 4382fdatasync=no 4383cat > $TMPC << EOF 4384#include <unistd.h> 4385int main(void) { 4386#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4387return fdatasync(0); 4388#else 4389#error Not supported 4390#endif 4391} 4392EOF 4393if compile_prog "" "" ; then 4394 fdatasync=yes 4395fi 4396 4397########################################## 4398# check if we have madvise 4399 4400madvise=no 4401cat > $TMPC << EOF 4402#include <sys/types.h> 4403#include <sys/mman.h> 4404#include <stddef.h> 4405int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4406EOF 4407if compile_prog "" "" ; then 4408 madvise=yes 4409fi 4410 4411########################################## 4412# check if we have posix_madvise 4413 4414posix_madvise=no 4415cat > $TMPC << EOF 4416#include <sys/mman.h> 4417#include <stddef.h> 4418int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4419EOF 4420if compile_prog "" "" ; then 4421 posix_madvise=yes 4422fi 4423 4424########################################## 4425# check if we have posix_syslog 4426 4427posix_syslog=no 4428cat > $TMPC << EOF 4429#include <syslog.h> 4430int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4431EOF 4432if compile_prog "" "" ; then 4433 posix_syslog=yes 4434fi 4435 4436########################################## 4437# check if we have sem_timedwait 4438 4439sem_timedwait=no 4440cat > $TMPC << EOF 4441#include <semaphore.h> 4442int main(void) { return sem_timedwait(0, 0); } 4443EOF 4444if compile_prog "" "" ; then 4445 sem_timedwait=yes 4446fi 4447 4448########################################## 4449# check if trace backend exists 4450 4451$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4452if test "$?" -ne 0 ; then 4453 error_exit "invalid trace backends" \ 4454 "Please choose supported trace backends." 4455fi 4456 4457########################################## 4458# For 'ust' backend, test if ust headers are present 4459if have_backend "ust"; then 4460 cat > $TMPC << EOF 4461#include <lttng/tracepoint.h> 4462int main(void) { return 0; } 4463EOF 4464 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4465 if $pkg_config lttng-ust --exists; then 4466 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4467 else 4468 lttng_ust_libs="-llttng-ust -ldl" 4469 fi 4470 if $pkg_config liburcu-bp --exists; then 4471 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4472 else 4473 urcu_bp_libs="-lurcu-bp" 4474 fi 4475 4476 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 4477 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 4478 else 4479 error_exit "Trace backend 'ust' missing lttng-ust header files" 4480 fi 4481fi 4482 4483########################################## 4484# For 'dtrace' backend, test if 'dtrace' command is present 4485if have_backend "dtrace"; then 4486 if ! has 'dtrace' ; then 4487 error_exit "dtrace command is not found in PATH $PATH" 4488 fi 4489 trace_backend_stap="no" 4490 if has 'stap' ; then 4491 trace_backend_stap="yes" 4492 fi 4493fi 4494 4495########################################## 4496# check and set a backend for coroutine 4497 4498# We prefer ucontext, but it's not always possible. The fallback 4499# is sigcontext. On Windows the only valid backend is the Windows 4500# specific one. 4501 4502ucontext_works=no 4503if test "$darwin" != "yes"; then 4504 cat > $TMPC << EOF 4505#include <ucontext.h> 4506#ifdef __stub_makecontext 4507#error Ignoring glibc stub makecontext which will always fail 4508#endif 4509int main(void) { makecontext(0, 0, 0); return 0; } 4510EOF 4511 if compile_prog "" "" ; then 4512 ucontext_works=yes 4513 fi 4514fi 4515 4516if test "$coroutine" = ""; then 4517 if test "$mingw32" = "yes"; then 4518 coroutine=win32 4519 elif test "$ucontext_works" = "yes"; then 4520 coroutine=ucontext 4521 else 4522 coroutine=sigaltstack 4523 fi 4524else 4525 case $coroutine in 4526 windows) 4527 if test "$mingw32" != "yes"; then 4528 error_exit "'windows' coroutine backend only valid for Windows" 4529 fi 4530 # Unfortunately the user visible backend name doesn't match the 4531 # coroutine-*.c filename for this case, so we have to adjust it here. 4532 coroutine=win32 4533 ;; 4534 ucontext) 4535 if test "$ucontext_works" != "yes"; then 4536 feature_not_found "ucontext" 4537 fi 4538 ;; 4539 sigaltstack) 4540 if test "$mingw32" = "yes"; then 4541 error_exit "only the 'windows' coroutine backend is valid for Windows" 4542 fi 4543 ;; 4544 *) 4545 error_exit "unknown coroutine backend $coroutine" 4546 ;; 4547 esac 4548fi 4549 4550if test "$coroutine_pool" = ""; then 4551 coroutine_pool=yes 4552fi 4553 4554if test "$debug_stack_usage" = "yes"; then 4555 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then 4556 error_exit "stack usage debugging is not supported for $cpu" 4557 fi 4558 if test "$coroutine_pool" = "yes"; then 4559 echo "WARN: disabling coroutine pool for stack usage debugging" 4560 coroutine_pool=no 4561 fi 4562fi 4563 4564 4565########################################## 4566# check if we have open_by_handle_at 4567 4568open_by_handle_at=no 4569cat > $TMPC << EOF 4570#include <fcntl.h> 4571#if !defined(AT_EMPTY_PATH) 4572# error missing definition 4573#else 4574int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4575#endif 4576EOF 4577if compile_prog "" "" ; then 4578 open_by_handle_at=yes 4579fi 4580 4581######################################## 4582# check if we have linux/magic.h 4583 4584linux_magic_h=no 4585cat > $TMPC << EOF 4586#include <linux/magic.h> 4587int main(void) { 4588 return 0; 4589} 4590EOF 4591if compile_prog "" "" ; then 4592 linux_magic_h=yes 4593fi 4594 4595######################################## 4596# check whether we can disable warning option with a pragma (this is needed 4597# to silence warnings in the headers of some versions of external libraries). 4598# This test has to be compiled with -Werror as otherwise an unknown pragma is 4599# only a warning. 4600# 4601# If we can't selectively disable warning in the code, disable -Werror so that 4602# the build doesn't fail anyway. 4603 4604pragma_disable_unused_but_set=no 4605cat > $TMPC << EOF 4606#pragma GCC diagnostic push 4607#pragma GCC diagnostic ignored "-Wunused-but-set-variable" 4608#pragma GCC diagnostic ignored "-Wstrict-prototypes" 4609#pragma GCC diagnostic pop 4610 4611int main(void) { 4612 return 0; 4613} 4614EOF 4615if compile_prog "-Werror" "" ; then 4616 pragma_diagnostic_available=yes 4617else 4618 werror=no 4619fi 4620 4621######################################## 4622# check if we have valgrind/valgrind.h 4623 4624valgrind_h=no 4625cat > $TMPC << EOF 4626#include <valgrind/valgrind.h> 4627int main(void) { 4628 return 0; 4629} 4630EOF 4631if compile_prog "" "" ; then 4632 valgrind_h=yes 4633fi 4634 4635######################################## 4636# check if environ is declared 4637 4638has_environ=no 4639cat > $TMPC << EOF 4640#include <unistd.h> 4641int main(void) { 4642 environ = 0; 4643 return 0; 4644} 4645EOF 4646if compile_prog "" "" ; then 4647 has_environ=yes 4648fi 4649 4650######################################## 4651# check if cpuid.h is usable. 4652 4653cat > $TMPC << EOF 4654#include <cpuid.h> 4655int main(void) { 4656 unsigned a, b, c, d; 4657 int max = __get_cpuid_max(0, 0); 4658 4659 if (max >= 1) { 4660 __cpuid(1, a, b, c, d); 4661 } 4662 4663 if (max >= 7) { 4664 __cpuid_count(7, 0, a, b, c, d); 4665 } 4666 4667 return 0; 4668} 4669EOF 4670if compile_prog "" "" ; then 4671 cpuid_h=yes 4672fi 4673 4674########################################## 4675# avx2 optimization requirement check 4676# 4677# There is no point enabling this if cpuid.h is not usable, 4678# since we won't be able to select the new routines. 4679 4680if test $cpuid_h = yes; then 4681 cat > $TMPC << EOF 4682#pragma GCC push_options 4683#pragma GCC target("avx2") 4684#include <cpuid.h> 4685#include <immintrin.h> 4686static int bar(void *a) { 4687 __m256i x = *(__m256i *)a; 4688 return _mm256_testz_si256(x, x); 4689} 4690int main(int argc, char *argv[]) { return bar(argv[0]); } 4691EOF 4692 if compile_object "" ; then 4693 avx2_opt="yes" 4694 fi 4695fi 4696 4697######################################## 4698# check if __[u]int128_t is usable. 4699 4700int128=no 4701cat > $TMPC << EOF 4702#if defined(__clang_major__) && defined(__clang_minor__) 4703# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2)) 4704# error __int128_t does not work in CLANG before 3.2 4705# endif 4706#endif 4707__int128_t a; 4708__uint128_t b; 4709int main (void) { 4710 a = a + b; 4711 b = a * b; 4712 a = a * a; 4713 return 0; 4714} 4715EOF 4716if compile_prog "" "" ; then 4717 int128=yes 4718fi 4719 4720######################################### 4721# See if 128-bit atomic operations are supported. 4722 4723atomic128=no 4724if test "$int128" = "yes"; then 4725 cat > $TMPC << EOF 4726int main(void) 4727{ 4728 unsigned __int128 x = 0, y = 0; 4729 y = __atomic_load_16(&x, 0); 4730 __atomic_store_16(&x, y, 0); 4731 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 4732 return 0; 4733} 4734EOF 4735 if compile_prog "" "" ; then 4736 atomic128=yes 4737 fi 4738fi 4739 4740######################################### 4741# See if 64-bit atomic operations are supported. 4742# Note that without __atomic builtins, we can only 4743# assume atomic loads/stores max at pointer size. 4744 4745cat > $TMPC << EOF 4746#include <stdint.h> 4747int main(void) 4748{ 4749 uint64_t x = 0, y = 0; 4750#ifdef __ATOMIC_RELAXED 4751 y = __atomic_load_8(&x, 0); 4752 __atomic_store_8(&x, y, 0); 4753 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 4754 __atomic_exchange_8(&x, y, 0); 4755 __atomic_fetch_add_8(&x, y, 0); 4756#else 4757 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 4758 __sync_lock_test_and_set(&x, y); 4759 __sync_val_compare_and_swap(&x, y, 0); 4760 __sync_fetch_and_add(&x, y); 4761#endif 4762 return 0; 4763} 4764EOF 4765if compile_prog "" "" ; then 4766 atomic64=yes 4767fi 4768 4769######################################## 4770# check if getauxval is available. 4771 4772getauxval=no 4773cat > $TMPC << EOF 4774#include <sys/auxv.h> 4775int main(void) { 4776 return getauxval(AT_HWCAP) == 0; 4777} 4778EOF 4779if compile_prog "" "" ; then 4780 getauxval=yes 4781fi 4782 4783######################################## 4784# check if ccache is interfering with 4785# semantic analysis of macros 4786 4787unset CCACHE_CPP2 4788ccache_cpp2=no 4789cat > $TMPC << EOF 4790static const int Z = 1; 4791#define fn() ({ Z; }) 4792#define TAUT(X) ((X) == Z) 4793#define PAREN(X, Y) (X == Y) 4794#define ID(X) (X) 4795int main(int argc, char *argv[]) 4796{ 4797 int x = 0, y = 0; 4798 x = ID(x); 4799 x = fn(); 4800 fn(); 4801 if (PAREN(x, y)) return 0; 4802 if (TAUT(Z)) return 0; 4803 return 0; 4804} 4805EOF 4806 4807if ! compile_object "-Werror"; then 4808 ccache_cpp2=yes 4809fi 4810 4811################################################# 4812# clang does not support glibc + FORTIFY_SOURCE. 4813 4814if test "$fortify_source" != "no"; then 4815 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 4816 fortify_source="no"; 4817 elif test -n "$cxx" && has $cxx && 4818 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 4819 fortify_source="no"; 4820 else 4821 fortify_source="yes" 4822 fi 4823fi 4824 4825########################################## 4826# check if struct fsxattr is available via linux/fs.h 4827 4828have_fsxattr=no 4829cat > $TMPC << EOF 4830#include <linux/fs.h> 4831struct fsxattr foo; 4832int main(void) { 4833 return 0; 4834} 4835EOF 4836if compile_prog "" "" ; then 4837 have_fsxattr=yes 4838fi 4839 4840########################################## 4841# check if rtnetlink.h exists and is useful 4842have_rtnetlink=no 4843cat > $TMPC << EOF 4844#include <linux/rtnetlink.h> 4845int main(void) { 4846 return IFLA_PROTO_DOWN; 4847} 4848EOF 4849if compile_prog "" "" ; then 4850 have_rtnetlink=yes 4851fi 4852 4853########################################## 4854# check for usable AF_VSOCK environment 4855have_af_vsock=no 4856cat > $TMPC << EOF 4857#include <errno.h> 4858#include <sys/types.h> 4859#include <sys/socket.h> 4860#if !defined(AF_VSOCK) 4861# error missing AF_VSOCK flag 4862#endif 4863#include <linux/vm_sockets.h> 4864int main(void) { 4865 int sock, ret; 4866 struct sockaddr_vm svm; 4867 socklen_t len = sizeof(svm); 4868 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 4869 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 4870 if ((ret == -1) && (errno == ENOTCONN)) { 4871 return 0; 4872 } 4873 return -1; 4874} 4875EOF 4876if compile_prog "" "" ; then 4877 have_af_vsock=yes 4878fi 4879 4880########################################## 4881# check for usable AF_ALG environment 4882hava_afalg=no 4883cat > $TMPC << EOF 4884#include <errno.h> 4885#include <sys/types.h> 4886#include <sys/socket.h> 4887#include <linux/if_alg.h> 4888int main(void) { 4889 int sock; 4890 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 4891 return sock; 4892} 4893EOF 4894if compile_prog "" "" ; then 4895 have_afalg=yes 4896fi 4897if test "$crypto_afalg" = "yes" 4898then 4899 if test "$have_afalg" != "yes" 4900 then 4901 error_exit "AF_ALG requested but could not be detected" 4902 fi 4903fi 4904 4905 4906################################################# 4907# Sparc implicitly links with --relax, which is 4908# incompatible with -r, so --no-relax should be 4909# given. It does no harm to give it on other 4910# platforms too. 4911 4912# Note: the prototype is needed since QEMU_CFLAGS 4913# contains -Wmissing-prototypes 4914cat > $TMPC << EOF 4915extern int foo(void); 4916int foo(void) { return 0; } 4917EOF 4918if ! compile_object ""; then 4919 error_exit "Failed to compile object file for LD_REL_FLAGS test" 4920fi 4921for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 4922 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 4923 LD_REL_FLAGS=$i 4924 break 4925 fi 4926done 4927if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 4928 feature_not_found "modules" "Cannot find how to build relocatable objects" 4929fi 4930 4931########################################## 4932# check for sysmacros.h 4933 4934have_sysmacros=no 4935cat > $TMPC << EOF 4936#include <sys/sysmacros.h> 4937int main(void) { 4938 return makedev(0, 0); 4939} 4940EOF 4941if compile_prog "" "" ; then 4942 have_sysmacros=yes 4943fi 4944 4945########################################## 4946# Veritas HyperScale block driver VxHS 4947# Check if libvxhs is installed 4948 4949if test "$vxhs" != "no" ; then 4950 cat > $TMPC <<EOF 4951#include <stdint.h> 4952#include <qnio/qnio_api.h> 4953 4954void *vxhs_callback; 4955 4956int main(void) { 4957 iio_init(QNIO_VERSION, vxhs_callback); 4958 return 0; 4959} 4960EOF 4961 vxhs_libs="-lvxhs -lssl" 4962 if compile_prog "" "$vxhs_libs" ; then 4963 vxhs=yes 4964 else 4965 if test "$vxhs" = "yes" ; then 4966 feature_not_found "vxhs block device" "Install libvxhs See github" 4967 fi 4968 vxhs=no 4969 fi 4970fi 4971 4972########################################## 4973# check for _Static_assert() 4974 4975have_static_assert=no 4976cat > $TMPC << EOF 4977_Static_assert(1, "success"); 4978int main(void) { 4979 return 0; 4980} 4981EOF 4982if compile_prog "" "" ; then 4983 have_static_assert=yes 4984fi 4985 4986########################################## 4987# check for utmpx.h, it is missing e.g. on OpenBSD 4988 4989have_utmpx=no 4990cat > $TMPC << EOF 4991#include <utmpx.h> 4992struct utmpx user_info; 4993int main(void) { 4994 return 0; 4995} 4996EOF 4997if compile_prog "" "" ; then 4998 have_utmpx=yes 4999fi 5000 5001########################################## 5002# End of CC checks 5003# After here, no more $cc or $ld runs 5004 5005if test "$gcov" = "yes" ; then 5006 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 5007 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 5008elif test "$fortify_source" = "yes" ; then 5009 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 5010elif test "$debug" = "no"; then 5011 CFLAGS="-O2 $CFLAGS" 5012fi 5013 5014########################################## 5015# Do we have libnfs 5016if test "$libnfs" != "no" ; then 5017 if $pkg_config --atleast-version=1.9.3 libnfs; then 5018 libnfs="yes" 5019 libnfs_libs=$($pkg_config --libs libnfs) 5020 else 5021 if test "$libnfs" = "yes" ; then 5022 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 5023 fi 5024 libnfs="no" 5025 fi 5026fi 5027 5028# Now we've finished running tests it's OK to add -Werror to the compiler flags 5029if test "$werror" = "yes"; then 5030 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 5031fi 5032 5033if test "$solaris" = "no" ; then 5034 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5035 LDFLAGS="-Wl,--warn-common $LDFLAGS" 5036 fi 5037fi 5038 5039# test if pod2man has --utf8 option 5040if pod2man --help | grep -q utf8; then 5041 POD2MAN="pod2man --utf8" 5042else 5043 POD2MAN="pod2man" 5044fi 5045 5046# Use ASLR, no-SEH and DEP if available 5047if test "$mingw32" = "yes" ; then 5048 for flag in --dynamicbase --no-seh --nxcompat; do 5049 if ld_has $flag ; then 5050 LDFLAGS="-Wl,$flag $LDFLAGS" 5051 fi 5052 done 5053fi 5054 5055qemu_confdir=$sysconfdir$confsuffix 5056qemu_moddir=$libdir$confsuffix 5057qemu_datadir=$datadir$confsuffix 5058qemu_localedir="$datadir/locale" 5059 5060# We can only support ivshmem if we have eventfd 5061if [ "$eventfd" = "yes" ]; then 5062 ivshmem=yes 5063fi 5064 5065tools="" 5066if test "$want_tools" = "yes" ; then 5067 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" 5068 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 5069 tools="qemu-nbd\$(EXESUF) $tools" 5070 fi 5071 if [ "$ivshmem" = "yes" ]; then 5072 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 5073 fi 5074fi 5075if test "$softmmu" = yes ; then 5076 if test "$linux" = yes; then 5077 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then 5078 virtfs=yes 5079 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 5080 else 5081 if test "$virtfs" = yes; then 5082 error_exit "VirtFS requires libcap devel and libattr devel" 5083 fi 5084 virtfs=no 5085 fi 5086 if test "$mpath" != no && test "$mpathpersist" = yes ; then 5087 mpath=yes 5088 else 5089 if test "$mpath" = yes; then 5090 error_exit "Multipath requires libmpathpersist devel" 5091 fi 5092 mpath=no 5093 fi 5094 tools="$tools scsi/qemu-pr-helper\$(EXESUF)" 5095 else 5096 if test "$virtfs" = yes; then 5097 error_exit "VirtFS is supported only on Linux" 5098 fi 5099 virtfs=no 5100 if test "$mpath" = yes; then 5101 error_exit "Multipath is supported only on Linux" 5102 fi 5103 mpath=no 5104 fi 5105fi 5106 5107# Probe for guest agent support/options 5108 5109if [ "$guest_agent" != "no" ]; then 5110 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5111 tools="qemu-ga $tools" 5112 guest_agent=yes 5113 elif [ "$guest_agent" != yes ]; then 5114 guest_agent=no 5115 else 5116 error_exit "Guest agent is not supported on this platform" 5117 fi 5118fi 5119 5120# Guest agent Window MSI package 5121 5122if test "$guest_agent" != yes; then 5123 if test "$guest_agent_msi" = yes; then 5124 error_exit "MSI guest agent package requires guest agent enabled" 5125 fi 5126 guest_agent_msi=no 5127elif test "$mingw32" != "yes"; then 5128 if test "$guest_agent_msi" = "yes"; then 5129 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 5130 fi 5131 guest_agent_msi=no 5132elif ! has wixl; then 5133 if test "$guest_agent_msi" = "yes"; then 5134 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 5135 fi 5136 guest_agent_msi=no 5137else 5138 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 5139 # disabled explicitly 5140 if test "$guest_agent_msi" != "no"; then 5141 guest_agent_msi=yes 5142 fi 5143fi 5144 5145if test "$guest_agent_msi" = "yes"; then 5146 if test "$guest_agent_with_vss" = "yes"; then 5147 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 5148 fi 5149 5150 if test "$QEMU_GA_MANUFACTURER" = ""; then 5151 QEMU_GA_MANUFACTURER=QEMU 5152 fi 5153 5154 if test "$QEMU_GA_DISTRO" = ""; then 5155 QEMU_GA_DISTRO=Linux 5156 fi 5157 5158 if test "$QEMU_GA_VERSION" = ""; then 5159 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5160 fi 5161 5162 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5163 5164 case "$cpu" in 5165 x86_64) 5166 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5167 ;; 5168 i386) 5169 QEMU_GA_MSI_ARCH="-D Arch=32" 5170 ;; 5171 *) 5172 error_exit "CPU $cpu not supported for building installation package" 5173 ;; 5174 esac 5175fi 5176 5177# Mac OS X ships with a broken assembler 5178roms= 5179if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 5180 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 5181 "$softmmu" = yes ; then 5182 # Different host OS linkers have different ideas about the name of the ELF 5183 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd 5184 # variant; and Windows uses i386pe. 5185 for emu in elf_i386 elf_i386_fbsd i386pe; do 5186 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5187 ld_i386_emulation="$emu" 5188 roms="optionrom" 5189 break 5190 fi 5191 done 5192fi 5193if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 5194 roms="$roms spapr-rtas" 5195fi 5196 5197if test "$cpu" = "s390x" ; then 5198 roms="$roms s390-ccw" 5199fi 5200 5201# Probe for the need for relocating the user-only binary. 5202if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 5203 textseg_addr= 5204 case "$cpu" in 5205 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 5206 # ??? Rationale for choosing this address 5207 textseg_addr=0x60000000 5208 ;; 5209 mips) 5210 # A 256M aligned address, high in the address space, with enough 5211 # room for the code_gen_buffer above it before the stack. 5212 textseg_addr=0x60000000 5213 ;; 5214 esac 5215 if [ -n "$textseg_addr" ]; then 5216 cat > $TMPC <<EOF 5217 int main(void) { return 0; } 5218EOF 5219 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 5220 if ! compile_prog "" "$textseg_ldflags"; then 5221 # In case ld does not support -Ttext-segment, edit the default linker 5222 # script via sed to set the .text start addr. This is needed on FreeBSD 5223 # at least. 5224 if ! $ld --verbose >/dev/null 2>&1; then 5225 error_exit \ 5226 "We need to link the QEMU user mode binaries at a" \ 5227 "specific text address. Unfortunately your linker" \ 5228 "doesn't support either the -Ttext-segment option or" \ 5229 "printing the default linker script with --verbose." \ 5230 "If you don't want the user mode binaries, pass the" \ 5231 "--disable-user option to configure." 5232 fi 5233 5234 $ld --verbose | sed \ 5235 -e '1,/==================================================/d' \ 5236 -e '/==================================================/,$d' \ 5237 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 5238 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 5239 textseg_ldflags="-Wl,-T../config-host.ld" 5240 fi 5241 fi 5242fi 5243 5244# Check that the C++ compiler exists and works with the C compiler. 5245# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5246if has $cxx; then 5247 cat > $TMPC <<EOF 5248int c_function(void); 5249int main(void) { return c_function(); } 5250EOF 5251 5252 compile_object 5253 5254 cat > $TMPCXX <<EOF 5255extern "C" { 5256 int c_function(void); 5257} 5258int c_function(void) { return 42; } 5259EOF 5260 5261 update_cxxflags 5262 5263 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then 5264 # C++ compiler $cxx works ok with C compiler $cc 5265 : 5266 else 5267 echo "C++ compiler $cxx does not work with C compiler $cc" 5268 echo "Disabling C++ specific optional code" 5269 cxx= 5270 fi 5271else 5272 echo "No C++ compiler available; disabling C++ specific optional code" 5273 cxx= 5274fi 5275 5276echo_version() { 5277 if test "$1" = "yes" ; then 5278 echo "($2)" 5279 fi 5280} 5281 5282# prepend pixman and ftd flags after all config tests are done 5283QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 5284libs_softmmu="$pixman_libs $libs_softmmu" 5285 5286echo "Install prefix $prefix" 5287echo "BIOS directory $(eval echo $qemu_datadir)" 5288echo "firmware path $(eval echo $firmwarepath)" 5289echo "binary directory $(eval echo $bindir)" 5290echo "library directory $(eval echo $libdir)" 5291echo "module directory $(eval echo $qemu_moddir)" 5292echo "libexec directory $(eval echo $libexecdir)" 5293echo "include directory $(eval echo $includedir)" 5294echo "config directory $(eval echo $sysconfdir)" 5295if test "$mingw32" = "no" ; then 5296echo "local state directory $(eval echo $local_statedir)" 5297echo "Manual directory $(eval echo $mandir)" 5298echo "ELF interp prefix $interp_prefix" 5299else 5300echo "local state directory queried at runtime" 5301echo "Windows SDK $win_sdk" 5302fi 5303echo "Source path $source_path" 5304echo "C compiler $cc" 5305echo "Host C compiler $host_cc" 5306echo "C++ compiler $cxx" 5307echo "Objective-C compiler $objcc" 5308echo "ARFLAGS $ARFLAGS" 5309echo "CFLAGS $CFLAGS" 5310echo "QEMU_CFLAGS $QEMU_CFLAGS" 5311echo "LDFLAGS $LDFLAGS" 5312echo "make $make" 5313echo "install $install" 5314echo "python $python" 5315if test "$slirp" = "yes" ; then 5316 echo "smbd $smbd" 5317fi 5318echo "module support $modules" 5319echo "host CPU $cpu" 5320echo "host big endian $bigendian" 5321echo "target list $target_list" 5322echo "gprof enabled $gprof" 5323echo "sparse enabled $sparse" 5324echo "strip binaries $strip_opt" 5325echo "profiler $profiler" 5326echo "static build $static" 5327if test "$darwin" = "yes" ; then 5328 echo "Cocoa support $cocoa" 5329fi 5330echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 5331echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 5332echo "GTK GL support $gtk_gl" 5333echo "VTE support $vte $(echo_version $vte $vteversion)" 5334echo "TLS priority $tls_priority" 5335echo "GNUTLS support $gnutls" 5336echo "GNUTLS rnd $gnutls_rnd" 5337echo "libgcrypt $gcrypt" 5338echo "libgcrypt kdf $gcrypt_kdf" 5339echo "nettle $nettle $(echo_version $nettle $nettle_version)" 5340echo "nettle kdf $nettle_kdf" 5341echo "libtasn1 $tasn1" 5342echo "curses support $curses" 5343echo "virgl support $virglrenderer" 5344echo "curl support $curl" 5345echo "mingw32 support $mingw32" 5346echo "Audio drivers $audio_drv_list" 5347echo "Block whitelist (rw) $block_drv_rw_whitelist" 5348echo "Block whitelist (ro) $block_drv_ro_whitelist" 5349echo "VirtFS support $virtfs" 5350echo "Multipath support $mpath" 5351echo "VNC support $vnc" 5352if test "$vnc" = "yes" ; then 5353 echo "VNC SASL support $vnc_sasl" 5354 echo "VNC JPEG support $vnc_jpeg" 5355 echo "VNC PNG support $vnc_png" 5356fi 5357if test -n "$sparc_cpu"; then 5358 echo "Target Sparc Arch $sparc_cpu" 5359fi 5360echo "xen support $xen" 5361if test "$xen" = "yes" ; then 5362 echo "xen ctrl version $xen_ctrl_version" 5363 echo "pv dom build $xen_pv_domain_build" 5364fi 5365echo "brlapi support $brlapi" 5366echo "bluez support $bluez" 5367echo "Documentation $docs" 5368echo "PIE $pie" 5369echo "vde support $vde" 5370echo "netmap support $netmap" 5371echo "Linux AIO support $linux_aio" 5372echo "ATTR/XATTR support $attr" 5373echo "Install blobs $blobs" 5374echo "KVM support $kvm" 5375echo "HAX support $hax" 5376echo "TCG support $tcg" 5377if test "$tcg" = "yes" ; then 5378 echo "TCG debug enabled $debug_tcg" 5379 echo "TCG interpreter $tcg_interpreter" 5380fi 5381echo "RDMA support $rdma" 5382echo "fdt support $fdt" 5383echo "preadv support $preadv" 5384echo "fdatasync $fdatasync" 5385echo "madvise $madvise" 5386echo "posix_madvise $posix_madvise" 5387echo "libcap-ng support $cap_ng" 5388echo "vhost-net support $vhost_net" 5389echo "vhost-scsi support $vhost_scsi" 5390echo "vhost-vsock support $vhost_vsock" 5391echo "vhost-user support $vhost_user" 5392echo "Trace backends $trace_backends" 5393if have_backend "simple"; then 5394echo "Trace output file $trace_file-<pid>" 5395fi 5396echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 5397echo "rbd support $rbd" 5398echo "xfsctl support $xfs" 5399echo "smartcard support $smartcard" 5400echo "libusb $libusb" 5401echo "usb net redir $usb_redir" 5402echo "OpenGL support $opengl" 5403echo "OpenGL dmabufs $opengl_dmabuf" 5404echo "libiscsi support $libiscsi" 5405echo "libnfs support $libnfs" 5406echo "build guest agent $guest_agent" 5407echo "QGA VSS support $guest_agent_with_vss" 5408echo "QGA w32 disk info $guest_agent_ntddscsi" 5409echo "QGA MSI support $guest_agent_msi" 5410echo "seccomp support $seccomp" 5411echo "coroutine backend $coroutine" 5412echo "coroutine pool $coroutine_pool" 5413echo "debug stack usage $debug_stack_usage" 5414echo "crypto afalg $crypto_afalg" 5415echo "GlusterFS support $glusterfs" 5416echo "gcov $gcov_tool" 5417echo "gcov enabled $gcov" 5418echo "TPM support $tpm" 5419echo "libssh2 support $libssh2" 5420echo "TPM passthrough $tpm_passthrough" 5421echo "TPM emulator $tpm_emulator" 5422echo "QOM debugging $qom_cast_debug" 5423echo "Live block migration $live_block_migration" 5424echo "lzo support $lzo" 5425echo "snappy support $snappy" 5426echo "bzip2 support $bzip2" 5427echo "NUMA host support $numa" 5428echo "tcmalloc support $tcmalloc" 5429echo "jemalloc support $jemalloc" 5430echo "avx2 optimization $avx2_opt" 5431echo "replication support $replication" 5432echo "VxHS block device $vxhs" 5433 5434if test "$sdl_too_old" = "yes"; then 5435echo "-> Your SDL version is too old - please upgrade to have SDL support" 5436fi 5437 5438if test "$supported_cpu" = "no"; then 5439 echo 5440 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 5441 echo 5442 echo "CPU host architecture $cpu support is not currently maintained." 5443 echo "The QEMU project intends to remove support for this host CPU in" 5444 echo "a future release if nobody volunteers to maintain it and to" 5445 echo "provide a build host for our continuous integration setup." 5446 echo "configure has succeeded and you can continue to build, but" 5447 echo "if you care about QEMU on this platform you should contact" 5448 echo "us upstream at qemu-devel@nongnu.org." 5449fi 5450 5451if test "$supported_os" = "no"; then 5452 echo 5453 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 5454 echo 5455 echo "Host OS $targetos support is not currently maintained." 5456 echo "The QEMU project intends to remove support for this host OS in" 5457 echo "a future release if nobody volunteers to maintain it and to" 5458 echo "provide a build host for our continuous integration setup." 5459 echo "configure has succeeded and you can continue to build, but" 5460 echo "if you care about QEMU on this platform you should contact" 5461 echo "us upstream at qemu-devel@nongnu.org." 5462fi 5463 5464config_host_mak="config-host.mak" 5465 5466echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 5467 5468echo "# Automatically generated by configure - do not modify" > $config_host_mak 5469echo >> $config_host_mak 5470 5471echo all: >> $config_host_mak 5472echo "prefix=$prefix" >> $config_host_mak 5473echo "bindir=$bindir" >> $config_host_mak 5474echo "libdir=$libdir" >> $config_host_mak 5475echo "libexecdir=$libexecdir" >> $config_host_mak 5476echo "includedir=$includedir" >> $config_host_mak 5477echo "mandir=$mandir" >> $config_host_mak 5478echo "sysconfdir=$sysconfdir" >> $config_host_mak 5479echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 5480echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 5481echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 5482echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 5483echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 5484if test "$mingw32" = "no" ; then 5485 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 5486fi 5487echo "qemu_helperdir=$libexecdir" >> $config_host_mak 5488echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak 5489echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak 5490echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak 5491echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 5492echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 5493 5494echo "ARCH=$ARCH" >> $config_host_mak 5495 5496if test "$debug_tcg" = "yes" ; then 5497 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 5498fi 5499if test "$strip_opt" = "yes" ; then 5500 echo "STRIP=${strip}" >> $config_host_mak 5501fi 5502if test "$bigendian" = "yes" ; then 5503 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 5504fi 5505if test "$mingw32" = "yes" ; then 5506 echo "CONFIG_WIN32=y" >> $config_host_mak 5507 rc_version=$(cat $source_path/VERSION) 5508 version_major=${rc_version%%.*} 5509 rc_version=${rc_version#*.} 5510 version_minor=${rc_version%%.*} 5511 rc_version=${rc_version#*.} 5512 version_subminor=${rc_version%%.*} 5513 version_micro=0 5514 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5515 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5516 if test "$guest_agent_with_vss" = "yes" ; then 5517 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 5518 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 5519 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 5520 fi 5521 if test "$guest_agent_ntddscsi" = "yes" ; then 5522 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 5523 fi 5524 if test "$guest_agent_msi" = "yes"; then 5525 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 5526 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 5527 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 5528 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 5529 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 5530 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 5531 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 5532 fi 5533else 5534 echo "CONFIG_POSIX=y" >> $config_host_mak 5535fi 5536 5537if test "$linux" = "yes" ; then 5538 echo "CONFIG_LINUX=y" >> $config_host_mak 5539fi 5540 5541if test "$darwin" = "yes" ; then 5542 echo "CONFIG_DARWIN=y" >> $config_host_mak 5543fi 5544 5545if test "$solaris" = "yes" ; then 5546 echo "CONFIG_SOLARIS=y" >> $config_host_mak 5547fi 5548if test "$haiku" = "yes" ; then 5549 echo "CONFIG_HAIKU=y" >> $config_host_mak 5550fi 5551if test "$static" = "yes" ; then 5552 echo "CONFIG_STATIC=y" >> $config_host_mak 5553fi 5554if test "$profiler" = "yes" ; then 5555 echo "CONFIG_PROFILER=y" >> $config_host_mak 5556fi 5557if test "$slirp" = "yes" ; then 5558 echo "CONFIG_SLIRP=y" >> $config_host_mak 5559 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 5560fi 5561if test "$vde" = "yes" ; then 5562 echo "CONFIG_VDE=y" >> $config_host_mak 5563 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 5564fi 5565if test "$netmap" = "yes" ; then 5566 echo "CONFIG_NETMAP=y" >> $config_host_mak 5567fi 5568if test "$l2tpv3" = "yes" ; then 5569 echo "CONFIG_L2TPV3=y" >> $config_host_mak 5570fi 5571if test "$cap_ng" = "yes" ; then 5572 echo "CONFIG_LIBCAP=y" >> $config_host_mak 5573fi 5574echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 5575for drv in $audio_drv_list; do 5576 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 5577 echo "$def=y" >> $config_host_mak 5578done 5579echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 5580echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 5581echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 5582echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 5583echo "OSS_LIBS=$oss_libs" >> $config_host_mak 5584if test "$audio_pt_int" = "yes" ; then 5585 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 5586fi 5587if test "$audio_win_int" = "yes" ; then 5588 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 5589fi 5590echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 5591echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 5592if test "$vnc" = "yes" ; then 5593 echo "CONFIG_VNC=y" >> $config_host_mak 5594fi 5595if test "$vnc_sasl" = "yes" ; then 5596 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 5597fi 5598if test "$vnc_jpeg" = "yes" ; then 5599 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 5600fi 5601if test "$vnc_png" = "yes" ; then 5602 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 5603fi 5604if test "$fnmatch" = "yes" ; then 5605 echo "CONFIG_FNMATCH=y" >> $config_host_mak 5606fi 5607if test "$xfs" = "yes" ; then 5608 echo "CONFIG_XFS=y" >> $config_host_mak 5609fi 5610qemu_version=$(head $source_path/VERSION) 5611echo "VERSION=$qemu_version" >>$config_host_mak 5612echo "PKGVERSION=$pkgversion" >>$config_host_mak 5613echo "SRC_PATH=$source_path" >> $config_host_mak 5614echo "TARGET_DIRS=$target_list" >> $config_host_mak 5615if [ "$docs" = "yes" ] ; then 5616 echo "BUILD_DOCS=yes" >> $config_host_mak 5617fi 5618if test "$modules" = "yes"; then 5619 # $shacmd can generate a hash started with digit, which the compiler doesn't 5620 # like as an symbol. So prefix it with an underscore 5621 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 5622 echo "CONFIG_MODULES=y" >> $config_host_mak 5623fi 5624if test "$sdl" = "yes" ; then 5625 echo "CONFIG_SDL=y" >> $config_host_mak 5626 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 5627 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 5628 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 5629fi 5630if test "$cocoa" = "yes" ; then 5631 echo "CONFIG_COCOA=y" >> $config_host_mak 5632fi 5633if test "$curses" = "yes" ; then 5634 echo "CONFIG_CURSES=y" >> $config_host_mak 5635fi 5636if test "$pipe2" = "yes" ; then 5637 echo "CONFIG_PIPE2=y" >> $config_host_mak 5638fi 5639if test "$accept4" = "yes" ; then 5640 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 5641fi 5642if test "$splice" = "yes" ; then 5643 echo "CONFIG_SPLICE=y" >> $config_host_mak 5644fi 5645if test "$eventfd" = "yes" ; then 5646 echo "CONFIG_EVENTFD=y" >> $config_host_mak 5647fi 5648if test "$memfd" = "yes" ; then 5649 echo "CONFIG_MEMFD=y" >> $config_host_mak 5650fi 5651if test "$fallocate" = "yes" ; then 5652 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 5653fi 5654if test "$fallocate_punch_hole" = "yes" ; then 5655 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 5656fi 5657if test "$fallocate_zero_range" = "yes" ; then 5658 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 5659fi 5660if test "$posix_fallocate" = "yes" ; then 5661 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 5662fi 5663if test "$sync_file_range" = "yes" ; then 5664 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 5665fi 5666if test "$fiemap" = "yes" ; then 5667 echo "CONFIG_FIEMAP=y" >> $config_host_mak 5668fi 5669if test "$dup3" = "yes" ; then 5670 echo "CONFIG_DUP3=y" >> $config_host_mak 5671fi 5672if test "$ppoll" = "yes" ; then 5673 echo "CONFIG_PPOLL=y" >> $config_host_mak 5674fi 5675if test "$prctl_pr_set_timerslack" = "yes" ; then 5676 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 5677fi 5678if test "$epoll" = "yes" ; then 5679 echo "CONFIG_EPOLL=y" >> $config_host_mak 5680fi 5681if test "$epoll_create1" = "yes" ; then 5682 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 5683fi 5684if test "$sendfile" = "yes" ; then 5685 echo "CONFIG_SENDFILE=y" >> $config_host_mak 5686fi 5687if test "$timerfd" = "yes" ; then 5688 echo "CONFIG_TIMERFD=y" >> $config_host_mak 5689fi 5690if test "$setns" = "yes" ; then 5691 echo "CONFIG_SETNS=y" >> $config_host_mak 5692fi 5693if test "$clock_adjtime" = "yes" ; then 5694 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 5695fi 5696if test "$syncfs" = "yes" ; then 5697 echo "CONFIG_SYNCFS=y" >> $config_host_mak 5698fi 5699if test "$inotify" = "yes" ; then 5700 echo "CONFIG_INOTIFY=y" >> $config_host_mak 5701fi 5702if test "$inotify1" = "yes" ; then 5703 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 5704fi 5705if test "$sem_timedwait" = "yes" ; then 5706 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 5707fi 5708if test "$byteswap_h" = "yes" ; then 5709 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 5710fi 5711if test "$bswap_h" = "yes" ; then 5712 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 5713fi 5714if test "$curl" = "yes" ; then 5715 echo "CONFIG_CURL=m" >> $config_host_mak 5716 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 5717 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 5718fi 5719if test "$brlapi" = "yes" ; then 5720 echo "CONFIG_BRLAPI=y" >> $config_host_mak 5721 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 5722fi 5723if test "$bluez" = "yes" ; then 5724 echo "CONFIG_BLUEZ=y" >> $config_host_mak 5725 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 5726fi 5727if test "$glib_subprocess" = "yes" ; then 5728 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak 5729fi 5730if test "$gtk" = "yes" ; then 5731 echo "CONFIG_GTK=y" >> $config_host_mak 5732 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak 5733 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 5734 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 5735 if test "$gtk_gl" = "yes" ; then 5736 echo "CONFIG_GTK_GL=y" >> $config_host_mak 5737 fi 5738fi 5739echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 5740if test "$gnutls" = "yes" ; then 5741 echo "CONFIG_GNUTLS=y" >> $config_host_mak 5742fi 5743if test "$gnutls_rnd" = "yes" ; then 5744 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak 5745fi 5746if test "$gcrypt" = "yes" ; then 5747 echo "CONFIG_GCRYPT=y" >> $config_host_mak 5748 if test "$gcrypt_hmac" = "yes" ; then 5749 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 5750 fi 5751 if test "$gcrypt_kdf" = "yes" ; then 5752 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak 5753 fi 5754fi 5755if test "$nettle" = "yes" ; then 5756 echo "CONFIG_NETTLE=y" >> $config_host_mak 5757 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 5758 if test "$nettle_kdf" = "yes" ; then 5759 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak 5760 fi 5761fi 5762if test "$tasn1" = "yes" ; then 5763 echo "CONFIG_TASN1=y" >> $config_host_mak 5764fi 5765if test "$have_ifaddrs_h" = "yes" ; then 5766 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 5767fi 5768if test "$have_broken_size_max" = "yes" ; then 5769 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 5770fi 5771 5772# Work around a system header bug with some kernel/XFS header 5773# versions where they both try to define 'struct fsxattr': 5774# xfs headers will not try to redefine structs from linux headers 5775# if this macro is set. 5776if test "$have_fsxattr" = "yes" ; then 5777 echo "HAVE_FSXATTR=y" >> $config_host_mak 5778fi 5779if test "$vte" = "yes" ; then 5780 echo "CONFIG_VTE=y" >> $config_host_mak 5781 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 5782fi 5783if test "$virglrenderer" = "yes" ; then 5784 echo "CONFIG_VIRGL=y" >> $config_host_mak 5785 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 5786 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 5787fi 5788if test "$xen" = "yes" ; then 5789 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 5790 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 5791 if test "$xen_pv_domain_build" = "yes" ; then 5792 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 5793 fi 5794fi 5795if test "$linux_aio" = "yes" ; then 5796 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 5797fi 5798if test "$attr" = "yes" ; then 5799 echo "CONFIG_ATTR=y" >> $config_host_mak 5800fi 5801if test "$libattr" = "yes" ; then 5802 echo "CONFIG_LIBATTR=y" >> $config_host_mak 5803fi 5804if test "$virtfs" = "yes" ; then 5805 echo "CONFIG_VIRTFS=y" >> $config_host_mak 5806fi 5807if test "$mpath" = "yes" ; then 5808 echo "CONFIG_MPATH=y" >> $config_host_mak 5809fi 5810if test "$vhost_scsi" = "yes" ; then 5811 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 5812fi 5813if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then 5814 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 5815fi 5816if test "$vhost_vsock" = "yes" ; then 5817 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 5818fi 5819if test "$vhost_user" = "yes" ; then 5820 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 5821fi 5822if test "$blobs" = "yes" ; then 5823 echo "INSTALL_BLOBS=yes" >> $config_host_mak 5824fi 5825if test "$iovec" = "yes" ; then 5826 echo "CONFIG_IOVEC=y" >> $config_host_mak 5827fi 5828if test "$preadv" = "yes" ; then 5829 echo "CONFIG_PREADV=y" >> $config_host_mak 5830fi 5831if test "$fdt" = "yes" ; then 5832 echo "CONFIG_FDT=y" >> $config_host_mak 5833fi 5834if test "$signalfd" = "yes" ; then 5835 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 5836fi 5837if test "$tcg" = "yes"; then 5838 echo "CONFIG_TCG=y" >> $config_host_mak 5839 if test "$tcg_interpreter" = "yes" ; then 5840 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 5841 fi 5842fi 5843if test "$fdatasync" = "yes" ; then 5844 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 5845fi 5846if test "$madvise" = "yes" ; then 5847 echo "CONFIG_MADVISE=y" >> $config_host_mak 5848fi 5849if test "$posix_madvise" = "yes" ; then 5850 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 5851fi 5852 5853if test "$spice" = "yes" ; then 5854 echo "CONFIG_SPICE=y" >> $config_host_mak 5855fi 5856 5857if test "$smartcard" = "yes" ; then 5858 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 5859 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 5860 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 5861fi 5862 5863if test "$libusb" = "yes" ; then 5864 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 5865 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 5866 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 5867fi 5868 5869if test "$usb_redir" = "yes" ; then 5870 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 5871 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 5872 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 5873fi 5874 5875if test "$opengl" = "yes" ; then 5876 echo "CONFIG_OPENGL=y" >> $config_host_mak 5877 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 5878 if test "$opengl_dmabuf" = "yes" ; then 5879 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 5880 fi 5881fi 5882 5883if test "$avx2_opt" = "yes" ; then 5884 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 5885fi 5886 5887if test "$lzo" = "yes" ; then 5888 echo "CONFIG_LZO=y" >> $config_host_mak 5889fi 5890 5891if test "$snappy" = "yes" ; then 5892 echo "CONFIG_SNAPPY=y" >> $config_host_mak 5893fi 5894 5895if test "$bzip2" = "yes" ; then 5896 echo "CONFIG_BZIP2=y" >> $config_host_mak 5897 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 5898fi 5899 5900if test "$libiscsi" = "yes" ; then 5901 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 5902 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 5903 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 5904fi 5905 5906if test "$libnfs" = "yes" ; then 5907 echo "CONFIG_LIBNFS=m" >> $config_host_mak 5908 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 5909fi 5910 5911if test "$seccomp" = "yes"; then 5912 echo "CONFIG_SECCOMP=y" >> $config_host_mak 5913 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 5914 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 5915fi 5916 5917# XXX: suppress that 5918if [ "$bsd" = "yes" ] ; then 5919 echo "CONFIG_BSD=y" >> $config_host_mak 5920fi 5921 5922if test "$localtime_r" = "yes" ; then 5923 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 5924fi 5925if test "$qom_cast_debug" = "yes" ; then 5926 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 5927fi 5928if test "$rbd" = "yes" ; then 5929 echo "CONFIG_RBD=m" >> $config_host_mak 5930 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 5931 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 5932fi 5933 5934echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 5935if test "$coroutine_pool" = "yes" ; then 5936 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 5937else 5938 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 5939fi 5940 5941if test "$debug_stack_usage" = "yes" ; then 5942 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 5943fi 5944 5945if test "$crypto_afalg" = "yes" ; then 5946 echo "CONFIG_AF_ALG=y" >> $config_host_mak 5947fi 5948 5949if test "$open_by_handle_at" = "yes" ; then 5950 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 5951fi 5952 5953if test "$linux_magic_h" = "yes" ; then 5954 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 5955fi 5956 5957if test "$pragma_diagnostic_available" = "yes" ; then 5958 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 5959fi 5960 5961if test "$valgrind_h" = "yes" ; then 5962 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 5963fi 5964 5965if test "$has_environ" = "yes" ; then 5966 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 5967fi 5968 5969if test "$cpuid_h" = "yes" ; then 5970 echo "CONFIG_CPUID_H=y" >> $config_host_mak 5971fi 5972 5973if test "$int128" = "yes" ; then 5974 echo "CONFIG_INT128=y" >> $config_host_mak 5975fi 5976 5977if test "$atomic128" = "yes" ; then 5978 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 5979fi 5980 5981if test "$atomic64" = "yes" ; then 5982 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 5983fi 5984 5985if test "$getauxval" = "yes" ; then 5986 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 5987fi 5988 5989if test "$glusterfs" = "yes" ; then 5990 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 5991 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 5992 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 5993fi 5994 5995if test "$glusterfs_xlator_opt" = "yes" ; then 5996 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 5997fi 5998 5999if test "$glusterfs_discard" = "yes" ; then 6000 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 6001fi 6002 6003if test "$glusterfs_fallocate" = "yes" ; then 6004 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 6005fi 6006 6007if test "$glusterfs_zerofill" = "yes" ; then 6008 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 6009fi 6010 6011if test "$libssh2" = "yes" ; then 6012 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 6013 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 6014 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 6015fi 6016 6017if test "$live_block_migration" = "yes" ; then 6018 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 6019fi 6020 6021if test "$tpm" = "yes"; then 6022 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 6023 # TPM passthrough support? 6024 if test "$tpm_passthrough" = "yes"; then 6025 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 6026 fi 6027 # TPM emulator support? 6028 if test "$tpm_emulator" = "yes"; then 6029 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak 6030 fi 6031fi 6032 6033echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 6034if have_backend "nop"; then 6035 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 6036fi 6037if have_backend "simple"; then 6038 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 6039 # Set the appropriate trace file. 6040 trace_file="\"$trace_file-\" FMT_pid" 6041fi 6042if have_backend "log"; then 6043 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 6044fi 6045if have_backend "ust"; then 6046 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6047fi 6048if have_backend "dtrace"; then 6049 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 6050 if test "$trace_backend_stap" = "yes" ; then 6051 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 6052 fi 6053fi 6054if have_backend "ftrace"; then 6055 if test "$linux" = "yes" ; then 6056 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6057 else 6058 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6059 fi 6060fi 6061if have_backend "syslog"; then 6062 if test "$posix_syslog" = "yes" ; then 6063 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 6064 else 6065 feature_not_found "syslog(trace backend)" "syslog not available" 6066 fi 6067fi 6068echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 6069 6070if test "$rdma" = "yes" ; then 6071 echo "CONFIG_RDMA=y" >> $config_host_mak 6072 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 6073fi 6074 6075if test "$have_rtnetlink" = "yes" ; then 6076 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6077fi 6078 6079if test "$replication" = "yes" ; then 6080 echo "CONFIG_REPLICATION=y" >> $config_host_mak 6081fi 6082 6083if test "$have_af_vsock" = "yes" ; then 6084 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 6085fi 6086 6087if test "$have_sysmacros" = "yes" ; then 6088 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 6089fi 6090 6091if test "$have_static_assert" = "yes" ; then 6092 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 6093fi 6094 6095if test "$have_utmpx" = "yes" ; then 6096 echo "HAVE_UTMPX=y" >> $config_host_mak 6097fi 6098 6099if test "$ivshmem" = "yes" ; then 6100 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6101fi 6102 6103# Hold two types of flag: 6104# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6105# a thread we have a handle to 6106# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 6107# platform 6108if test "$pthread_setname_np" = "yes" ; then 6109 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6110 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 6111fi 6112 6113if test "$vxhs" = "yes" ; then 6114 echo "CONFIG_VXHS=y" >> $config_host_mak 6115 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 6116fi 6117 6118if test "$tcg_interpreter" = "yes"; then 6119 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 6120elif test "$ARCH" = "sparc64" ; then 6121 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 6122elif test "$ARCH" = "s390x" ; then 6123 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 6124elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 6125 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 6126elif test "$ARCH" = "ppc64" ; then 6127 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 6128else 6129 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 6130fi 6131QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES" 6132 6133echo "TOOLS=$tools" >> $config_host_mak 6134echo "ROMS=$roms" >> $config_host_mak 6135echo "MAKE=$make" >> $config_host_mak 6136echo "INSTALL=$install" >> $config_host_mak 6137echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 6138echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 6139echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 6140echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 6141echo "PYTHON=$python" >> $config_host_mak 6142echo "CC=$cc" >> $config_host_mak 6143if $iasl -h > /dev/null 2>&1; then 6144 echo "IASL=$iasl" >> $config_host_mak 6145fi 6146echo "CC_I386=$cc_i386" >> $config_host_mak 6147echo "HOST_CC=$host_cc" >> $config_host_mak 6148echo "CXX=$cxx" >> $config_host_mak 6149echo "OBJCC=$objcc" >> $config_host_mak 6150echo "AR=$ar" >> $config_host_mak 6151echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6152echo "AS=$as" >> $config_host_mak 6153echo "CCAS=$ccas" >> $config_host_mak 6154echo "CPP=$cpp" >> $config_host_mak 6155echo "OBJCOPY=$objcopy" >> $config_host_mak 6156echo "LD=$ld" >> $config_host_mak 6157echo "NM=$nm" >> $config_host_mak 6158echo "WINDRES=$windres" >> $config_host_mak 6159echo "CFLAGS=$CFLAGS" >> $config_host_mak 6160echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6161echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6162echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6163echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 6164if test "$sparse" = "yes" ; then 6165 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 6166 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 6167 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 6168 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 6169 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 6170fi 6171if test "$cross_prefix" != ""; then 6172 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 6173else 6174 echo "AUTOCONF_HOST := " >> $config_host_mak 6175fi 6176echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 6177echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 6178echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 6179echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6180echo "LIBS+=$LIBS" >> $config_host_mak 6181echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 6182echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 6183echo "EXESUF=$EXESUF" >> $config_host_mak 6184echo "DSOSUF=$DSOSUF" >> $config_host_mak 6185echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 6186echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 6187echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6188echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6189echo "POD2MAN=$POD2MAN" >> $config_host_mak 6190echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 6191if test "$gcov" = "yes" ; then 6192 echo "CONFIG_GCOV=y" >> $config_host_mak 6193 echo "GCOV=$gcov_tool" >> $config_host_mak 6194fi 6195 6196# use included Linux headers 6197if test "$linux" = "yes" ; then 6198 mkdir -p linux-headers 6199 case "$cpu" in 6200 i386|x86_64|x32) 6201 linux_arch=x86 6202 ;; 6203 ppcemb|ppc|ppc64) 6204 linux_arch=powerpc 6205 ;; 6206 s390x) 6207 linux_arch=s390 6208 ;; 6209 aarch64) 6210 linux_arch=arm64 6211 ;; 6212 mips64) 6213 linux_arch=mips 6214 ;; 6215 *) 6216 # For most CPUs the kernel architecture name and QEMU CPU name match. 6217 linux_arch="$cpu" 6218 ;; 6219 esac 6220 # For non-KVM architectures we will not have asm headers 6221 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 6222 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 6223 fi 6224fi 6225 6226for target in $target_list; do 6227target_dir="$target" 6228config_target_mak=$target_dir/config-target.mak 6229target_name=$(echo $target | cut -d '-' -f 1) 6230target_bigendian="no" 6231 6232case "$target_name" in 6233 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 6234 target_bigendian=yes 6235 ;; 6236esac 6237target_softmmu="no" 6238target_user_only="no" 6239target_linux_user="no" 6240target_bsd_user="no" 6241case "$target" in 6242 ${target_name}-softmmu) 6243 target_softmmu="yes" 6244 ;; 6245 ${target_name}-linux-user) 6246 target_user_only="yes" 6247 target_linux_user="yes" 6248 ;; 6249 ${target_name}-bsd-user) 6250 target_user_only="yes" 6251 target_bsd_user="yes" 6252 ;; 6253 *) 6254 error_exit "Target '$target' not recognised" 6255 exit 1 6256 ;; 6257esac 6258 6259mkdir -p $target_dir 6260echo "# Automatically generated by configure - do not modify" > $config_target_mak 6261 6262bflt="no" 6263mttcg="no" 6264interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 6265gdb_xml_files="" 6266 6267TARGET_ARCH="$target_name" 6268TARGET_BASE_ARCH="" 6269TARGET_ABI_DIR="" 6270 6271case "$target_name" in 6272 i386) 6273 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml" 6274 ;; 6275 x86_64) 6276 TARGET_BASE_ARCH=i386 6277 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml" 6278 ;; 6279 alpha) 6280 mttcg="yes" 6281 ;; 6282 arm|armeb) 6283 TARGET_ARCH=arm 6284 bflt="yes" 6285 mttcg="yes" 6286 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 6287 ;; 6288 aarch64) 6289 TARGET_BASE_ARCH=arm 6290 bflt="yes" 6291 mttcg="yes" 6292 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 6293 ;; 6294 cris) 6295 ;; 6296 hppa) 6297 ;; 6298 lm32) 6299 ;; 6300 m68k) 6301 bflt="yes" 6302 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 6303 ;; 6304 microblaze|microblazeel) 6305 TARGET_ARCH=microblaze 6306 bflt="yes" 6307 ;; 6308 mips|mipsel) 6309 TARGET_ARCH=mips 6310 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 6311 ;; 6312 mipsn32|mipsn32el) 6313 TARGET_ARCH=mips64 6314 TARGET_BASE_ARCH=mips 6315 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 6316 echo "TARGET_ABI32=y" >> $config_target_mak 6317 ;; 6318 mips64|mips64el) 6319 TARGET_ARCH=mips64 6320 TARGET_BASE_ARCH=mips 6321 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 6322 ;; 6323 moxie) 6324 ;; 6325 nios2) 6326 ;; 6327 or1k) 6328 TARGET_ARCH=openrisc 6329 TARGET_BASE_ARCH=openrisc 6330 ;; 6331 ppc) 6332 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 6333 ;; 6334 ppcemb) 6335 TARGET_BASE_ARCH=ppc 6336 TARGET_ABI_DIR=ppc 6337 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 6338 ;; 6339 ppc64) 6340 TARGET_BASE_ARCH=ppc 6341 TARGET_ABI_DIR=ppc 6342 mttcg=yes 6343 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6344 ;; 6345 ppc64le) 6346 TARGET_ARCH=ppc64 6347 TARGET_BASE_ARCH=ppc 6348 TARGET_ABI_DIR=ppc 6349 mttcg=yes 6350 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6351 ;; 6352 ppc64abi32) 6353 TARGET_ARCH=ppc64 6354 TARGET_BASE_ARCH=ppc 6355 TARGET_ABI_DIR=ppc 6356 echo "TARGET_ABI32=y" >> $config_target_mak 6357 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6358 ;; 6359 sh4|sh4eb) 6360 TARGET_ARCH=sh4 6361 bflt="yes" 6362 ;; 6363 sparc) 6364 ;; 6365 sparc64) 6366 TARGET_BASE_ARCH=sparc 6367 ;; 6368 sparc32plus) 6369 TARGET_ARCH=sparc64 6370 TARGET_BASE_ARCH=sparc 6371 TARGET_ABI_DIR=sparc 6372 echo "TARGET_ABI32=y" >> $config_target_mak 6373 ;; 6374 s390x) 6375 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 6376 ;; 6377 tilegx) 6378 ;; 6379 tricore) 6380 ;; 6381 unicore32) 6382 ;; 6383 xtensa|xtensaeb) 6384 TARGET_ARCH=xtensa 6385 ;; 6386 *) 6387 error_exit "Unsupported target CPU" 6388 ;; 6389esac 6390# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 6391if [ "$TARGET_BASE_ARCH" = "" ]; then 6392 TARGET_BASE_ARCH=$TARGET_ARCH 6393fi 6394 6395symlink "$source_path/Makefile.target" "$target_dir/Makefile" 6396 6397upper() { 6398 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 6399} 6400 6401target_arch_name="$(upper $TARGET_ARCH)" 6402echo "TARGET_$target_arch_name=y" >> $config_target_mak 6403echo "TARGET_NAME=$target_name" >> $config_target_mak 6404echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 6405if [ "$TARGET_ABI_DIR" = "" ]; then 6406 TARGET_ABI_DIR=$TARGET_ARCH 6407fi 6408echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 6409if [ "$HOST_VARIANT_DIR" != "" ]; then 6410 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 6411fi 6412 6413if supported_xen_target $target; then 6414 echo "CONFIG_XEN=y" >> $config_target_mak 6415 if test "$xen_pci_passthrough" = yes; then 6416 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 6417 fi 6418fi 6419if supported_kvm_target $target; then 6420 echo "CONFIG_KVM=y" >> $config_target_mak 6421 if test "$vhost_net" = "yes" ; then 6422 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 6423 if test "$vhost_user" = "yes" ; then 6424 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak 6425 fi 6426 fi 6427fi 6428if supported_hax_target $target; then 6429 echo "CONFIG_HAX=y" >> $config_target_mak 6430fi 6431if test "$target_bigendian" = "yes" ; then 6432 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 6433fi 6434if test "$target_softmmu" = "yes" ; then 6435 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 6436 if test "$mttcg" = "yes" ; then 6437 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 6438 fi 6439fi 6440if test "$target_user_only" = "yes" ; then 6441 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 6442 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 6443fi 6444if test "$target_linux_user" = "yes" ; then 6445 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 6446fi 6447list="" 6448if test ! -z "$gdb_xml_files" ; then 6449 for x in $gdb_xml_files; do 6450 list="$list $source_path/gdb-xml/$x" 6451 done 6452 echo "TARGET_XML_FILES=$list" >> $config_target_mak 6453fi 6454 6455if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 6456 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 6457fi 6458if test "$target_bsd_user" = "yes" ; then 6459 echo "CONFIG_BSD_USER=y" >> $config_target_mak 6460fi 6461 6462# generate QEMU_CFLAGS/LDFLAGS for targets 6463 6464cflags="" 6465ldflags="" 6466 6467disas_config() { 6468 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 6469 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 6470} 6471 6472for i in $ARCH $TARGET_BASE_ARCH ; do 6473 case "$i" in 6474 alpha) 6475 disas_config "ALPHA" 6476 ;; 6477 aarch64) 6478 if test -n "${cxx}"; then 6479 disas_config "ARM_A64" 6480 fi 6481 ;; 6482 arm) 6483 disas_config "ARM" 6484 if test -n "${cxx}"; then 6485 disas_config "ARM_A64" 6486 fi 6487 ;; 6488 cris) 6489 disas_config "CRIS" 6490 ;; 6491 hppa) 6492 disas_config "HPPA" 6493 ;; 6494 i386|x86_64|x32) 6495 disas_config "I386" 6496 ;; 6497 lm32) 6498 disas_config "LM32" 6499 ;; 6500 m68k) 6501 disas_config "M68K" 6502 ;; 6503 microblaze*) 6504 disas_config "MICROBLAZE" 6505 ;; 6506 mips*) 6507 disas_config "MIPS" 6508 ;; 6509 moxie*) 6510 disas_config "MOXIE" 6511 ;; 6512 nios2) 6513 disas_config "NIOS2" 6514 ;; 6515 or1k) 6516 disas_config "OPENRISC" 6517 ;; 6518 ppc*) 6519 disas_config "PPC" 6520 ;; 6521 s390*) 6522 disas_config "S390" 6523 ;; 6524 sh4) 6525 disas_config "SH4" 6526 ;; 6527 sparc*) 6528 disas_config "SPARC" 6529 ;; 6530 xtensa*) 6531 disas_config "XTENSA" 6532 ;; 6533 esac 6534done 6535if test "$tcg_interpreter" = "yes" ; then 6536 disas_config "TCI" 6537fi 6538 6539case "$ARCH" in 6540alpha) 6541 # Ensure there's only a single GP 6542 cflags="-msmall-data $cflags" 6543;; 6544esac 6545 6546if test "$gprof" = "yes" ; then 6547 echo "TARGET_GPROF=yes" >> $config_target_mak 6548 if test "$target_linux_user" = "yes" ; then 6549 cflags="-p $cflags" 6550 ldflags="-p $ldflags" 6551 fi 6552 if test "$target_softmmu" = "yes" ; then 6553 ldflags="-p $ldflags" 6554 echo "GPROF_CFLAGS=-p" >> $config_target_mak 6555 fi 6556fi 6557 6558if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 6559 ldflags="$ldflags $textseg_ldflags" 6560fi 6561 6562# Newer kernels on s390 check for an S390_PGSTE program header and 6563# enable the pgste page table extensions in that case. This makes 6564# the vm.allocate_pgste sysctl unnecessary. We enable this program 6565# header if 6566# - we build on s390x 6567# - we build the system emulation for s390x (qemu-system-s390x) 6568# - KVM is enabled 6569# - the linker supports --s390-pgste 6570if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then 6571 if ld_has --s390-pgste ; then 6572 ldflags="-Wl,--s390-pgste $ldflags" 6573 fi 6574fi 6575 6576echo "LDFLAGS+=$ldflags" >> $config_target_mak 6577echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 6578 6579done # for target in $targets 6580 6581if [ "$dtc_internal" = "yes" ]; then 6582 echo "config-host.h: subdir-dtc" >> $config_host_mak 6583fi 6584 6585if test "$numa" = "yes"; then 6586 echo "CONFIG_NUMA=y" >> $config_host_mak 6587fi 6588 6589if test "$ccache_cpp2" = "yes"; then 6590 echo "export CCACHE_CPP2=y" >> $config_host_mak 6591fi 6592 6593# build tree in object directory in case the source is not in the current directory 6594DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm" 6595DIRS="$DIRS docs docs/interop fsdev scsi" 6596DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 6597DIRS="$DIRS roms/seabios roms/vgabios" 6598DIRS="$DIRS qapi-generated" 6599FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 6600FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 6601FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 6602FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 6603FILES="$FILES pc-bios/spapr-rtas/Makefile" 6604FILES="$FILES pc-bios/s390-ccw/Makefile" 6605FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 6606FILES="$FILES pc-bios/qemu-icon.bmp" 6607FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit 6608for bios_file in \ 6609 $source_path/pc-bios/*.bin \ 6610 $source_path/pc-bios/*.lid \ 6611 $source_path/pc-bios/*.aml \ 6612 $source_path/pc-bios/*.rom \ 6613 $source_path/pc-bios/*.dtb \ 6614 $source_path/pc-bios/*.img \ 6615 $source_path/pc-bios/openbios-* \ 6616 $source_path/pc-bios/u-boot.* \ 6617 $source_path/pc-bios/palcode-* 6618do 6619 FILES="$FILES pc-bios/$(basename $bios_file)" 6620done 6621for test_file in $(find $source_path/tests/acpi-test-data -type f) 6622do 6623 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')" 6624done 6625mkdir -p $DIRS 6626for f in $FILES ; do 6627 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 6628 symlink "$source_path/$f" "$f" 6629 fi 6630done 6631 6632# temporary config to build submodules 6633for rom in seabios vgabios ; do 6634 config_mak=roms/$rom/config.mak 6635 echo "# Automatically generated by configure - do not modify" > $config_mak 6636 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 6637 echo "AS=$as" >> $config_mak 6638 echo "CCAS=$ccas" >> $config_mak 6639 echo "CC=$cc" >> $config_mak 6640 echo "BCC=bcc" >> $config_mak 6641 echo "CPP=$cpp" >> $config_mak 6642 echo "OBJCOPY=objcopy" >> $config_mak 6643 echo "IASL=$iasl" >> $config_mak 6644 echo "LD=$ld" >> $config_mak 6645done 6646 6647# set up tests data directory 6648if [ ! -e tests/data ]; then 6649 symlink "$source_path/tests/data" tests/data 6650fi 6651 6652# set up qemu-iotests in this build directory 6653iotests_common_env="tests/qemu-iotests/common.env" 6654iotests_check="tests/qemu-iotests/check" 6655 6656echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 6657echo >> "$iotests_common_env" 6658echo "export PYTHON='$python'" >> "$iotests_common_env" 6659 6660if [ ! -e "$iotests_check" ]; then 6661 symlink "$source_path/$iotests_check" "$iotests_check" 6662fi 6663 6664# Save the configure command line for later reuse. 6665cat <<EOD >config.status 6666#!/bin/sh 6667# Generated by configure. 6668# Run this file to recreate the current configuration. 6669# Compiler output produced by configure, useful for debugging 6670# configure, is in config.log if it exists. 6671EOD 6672printf "exec" >>config.status 6673printf " '%s'" "$0" "$@" >>config.status 6674echo ' "$@"' >>config.status 6675chmod +x config.status 6676 6677rm -r "$TMPDIR1" 6678