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