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