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