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