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