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