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