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