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 --sbindir=*|--sharedstatedir=*|\ 934 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\ 935 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) 936 # These switches are silently ignored, for compatibility with 937 # autoconf-generated configure scripts. This allows QEMU's 938 # configure to be used by RPM and similar macros that set 939 # lots of directory switches by default. 940 ;; 941 --disable-sdl) sdl="no" 942 ;; 943 --enable-sdl) sdl="yes" 944 ;; 945 --with-sdlabi=*) sdlabi="$optarg" 946 ;; 947 --disable-qom-cast-debug) qom_cast_debug="no" 948 ;; 949 --enable-qom-cast-debug) qom_cast_debug="yes" 950 ;; 951 --disable-virtfs) virtfs="no" 952 ;; 953 --enable-virtfs) virtfs="yes" 954 ;; 955 --disable-mpath) mpath="no" 956 ;; 957 --enable-mpath) mpath="yes" 958 ;; 959 --disable-vnc) vnc="no" 960 ;; 961 --enable-vnc) vnc="yes" 962 ;; 963 --oss-lib=*) oss_lib="$optarg" 964 ;; 965 --audio-drv-list=*) audio_drv_list="$optarg" 966 ;; 967 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 968 ;; 969 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 970 ;; 971 --enable-debug-tcg) debug_tcg="yes" 972 ;; 973 --disable-debug-tcg) debug_tcg="no" 974 ;; 975 --enable-debug) 976 # Enable debugging options that aren't excessively noisy 977 debug_tcg="yes" 978 debug="yes" 979 strip_opt="no" 980 fortify_source="no" 981 ;; 982 --enable-sparse) sparse="yes" 983 ;; 984 --disable-sparse) sparse="no" 985 ;; 986 --disable-strip) strip_opt="no" 987 ;; 988 --disable-vnc-sasl) vnc_sasl="no" 989 ;; 990 --enable-vnc-sasl) vnc_sasl="yes" 991 ;; 992 --disable-vnc-jpeg) vnc_jpeg="no" 993 ;; 994 --enable-vnc-jpeg) vnc_jpeg="yes" 995 ;; 996 --disable-vnc-png) vnc_png="no" 997 ;; 998 --enable-vnc-png) vnc_png="yes" 999 ;; 1000 --disable-slirp) slirp="no" 1001 ;; 1002 --disable-vde) vde="no" 1003 ;; 1004 --enable-vde) vde="yes" 1005 ;; 1006 --disable-netmap) netmap="no" 1007 ;; 1008 --enable-netmap) netmap="yes" 1009 ;; 1010 --disable-xen) xen="no" 1011 ;; 1012 --enable-xen) xen="yes" 1013 ;; 1014 --disable-xen-pci-passthrough) xen_pci_passthrough="no" 1015 ;; 1016 --enable-xen-pci-passthrough) xen_pci_passthrough="yes" 1017 ;; 1018 --disable-xen-pv-domain-build) xen_pv_domain_build="no" 1019 ;; 1020 --enable-xen-pv-domain-build) xen_pv_domain_build="yes" 1021 ;; 1022 --disable-brlapi) brlapi="no" 1023 ;; 1024 --enable-brlapi) brlapi="yes" 1025 ;; 1026 --disable-bluez) bluez="no" 1027 ;; 1028 --enable-bluez) bluez="yes" 1029 ;; 1030 --disable-kvm) kvm="no" 1031 ;; 1032 --enable-kvm) kvm="yes" 1033 ;; 1034 --disable-hax) hax="no" 1035 ;; 1036 --enable-hax) hax="yes" 1037 ;; 1038 --disable-tcg-interpreter) tcg_interpreter="no" 1039 ;; 1040 --enable-tcg-interpreter) tcg_interpreter="yes" 1041 ;; 1042 --disable-cap-ng) cap_ng="no" 1043 ;; 1044 --enable-cap-ng) cap_ng="yes" 1045 ;; 1046 --disable-tcg) tcg="no" 1047 ;; 1048 --enable-tcg) tcg="yes" 1049 ;; 1050 --disable-spice) spice="no" 1051 ;; 1052 --enable-spice) spice="yes" 1053 ;; 1054 --disable-libiscsi) libiscsi="no" 1055 ;; 1056 --enable-libiscsi) libiscsi="yes" 1057 ;; 1058 --disable-libnfs) libnfs="no" 1059 ;; 1060 --enable-libnfs) libnfs="yes" 1061 ;; 1062 --enable-profiler) profiler="yes" 1063 ;; 1064 --disable-cocoa) cocoa="no" 1065 ;; 1066 --enable-cocoa) 1067 cocoa="yes" ; 1068 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)" 1069 ;; 1070 --disable-system) softmmu="no" 1071 ;; 1072 --enable-system) softmmu="yes" 1073 ;; 1074 --disable-user) 1075 linux_user="no" ; 1076 bsd_user="no" ; 1077 ;; 1078 --enable-user) ;; 1079 --disable-linux-user) linux_user="no" 1080 ;; 1081 --enable-linux-user) linux_user="yes" 1082 ;; 1083 --disable-bsd-user) bsd_user="no" 1084 ;; 1085 --enable-bsd-user) bsd_user="yes" 1086 ;; 1087 --enable-pie) pie="yes" 1088 ;; 1089 --disable-pie) pie="no" 1090 ;; 1091 --enable-werror) werror="yes" 1092 ;; 1093 --disable-werror) werror="no" 1094 ;; 1095 --enable-stack-protector) stack_protector="yes" 1096 ;; 1097 --disable-stack-protector) stack_protector="no" 1098 ;; 1099 --disable-curses) curses="no" 1100 ;; 1101 --enable-curses) curses="yes" 1102 ;; 1103 --disable-curl) curl="no" 1104 ;; 1105 --enable-curl) curl="yes" 1106 ;; 1107 --disable-fdt) fdt="no" 1108 ;; 1109 --enable-fdt) fdt="yes" 1110 ;; 1111 --disable-linux-aio) linux_aio="no" 1112 ;; 1113 --enable-linux-aio) linux_aio="yes" 1114 ;; 1115 --disable-attr) attr="no" 1116 ;; 1117 --enable-attr) attr="yes" 1118 ;; 1119 --disable-blobs) blobs="no" 1120 ;; 1121 --with-pkgversion=*) pkgversion=" ($optarg)" 1122 ;; 1123 --with-coroutine=*) coroutine="$optarg" 1124 ;; 1125 --disable-coroutine-pool) coroutine_pool="no" 1126 ;; 1127 --enable-coroutine-pool) coroutine_pool="yes" 1128 ;; 1129 --enable-debug-stack-usage) debug_stack_usage="yes" 1130 ;; 1131 --enable-crypto-afalg) crypto_afalg="yes" 1132 ;; 1133 --disable-crypto-afalg) crypto_afalg="no" 1134 ;; 1135 --disable-docs) docs="no" 1136 ;; 1137 --enable-docs) docs="yes" 1138 ;; 1139 --disable-vhost-net) vhost_net="no" 1140 ;; 1141 --enable-vhost-net) vhost_net="yes" 1142 ;; 1143 --disable-vhost-scsi) vhost_scsi="no" 1144 ;; 1145 --enable-vhost-scsi) vhost_scsi="yes" 1146 ;; 1147 --disable-vhost-vsock) vhost_vsock="no" 1148 ;; 1149 --enable-vhost-vsock) vhost_vsock="yes" 1150 ;; 1151 --disable-opengl) opengl="no" 1152 ;; 1153 --enable-opengl) opengl="yes" 1154 ;; 1155 --disable-rbd) rbd="no" 1156 ;; 1157 --enable-rbd) rbd="yes" 1158 ;; 1159 --disable-xfsctl) xfs="no" 1160 ;; 1161 --enable-xfsctl) xfs="yes" 1162 ;; 1163 --disable-smartcard) smartcard="no" 1164 ;; 1165 --enable-smartcard) smartcard="yes" 1166 ;; 1167 --disable-libusb) libusb="no" 1168 ;; 1169 --enable-libusb) libusb="yes" 1170 ;; 1171 --disable-usb-redir) usb_redir="no" 1172 ;; 1173 --enable-usb-redir) usb_redir="yes" 1174 ;; 1175 --disable-zlib-test) zlib="no" 1176 ;; 1177 --disable-lzo) lzo="no" 1178 ;; 1179 --enable-lzo) lzo="yes" 1180 ;; 1181 --disable-snappy) snappy="no" 1182 ;; 1183 --enable-snappy) snappy="yes" 1184 ;; 1185 --disable-bzip2) bzip2="no" 1186 ;; 1187 --enable-bzip2) bzip2="yes" 1188 ;; 1189 --enable-guest-agent) guest_agent="yes" 1190 ;; 1191 --disable-guest-agent) guest_agent="no" 1192 ;; 1193 --enable-guest-agent-msi) guest_agent_msi="yes" 1194 ;; 1195 --disable-guest-agent-msi) guest_agent_msi="no" 1196 ;; 1197 --with-vss-sdk) vss_win32_sdk="" 1198 ;; 1199 --with-vss-sdk=*) vss_win32_sdk="$optarg" 1200 ;; 1201 --without-vss-sdk) vss_win32_sdk="no" 1202 ;; 1203 --with-win-sdk) win_sdk="" 1204 ;; 1205 --with-win-sdk=*) win_sdk="$optarg" 1206 ;; 1207 --without-win-sdk) win_sdk="no" 1208 ;; 1209 --enable-tools) want_tools="yes" 1210 ;; 1211 --disable-tools) want_tools="no" 1212 ;; 1213 --enable-seccomp) seccomp="yes" 1214 ;; 1215 --disable-seccomp) seccomp="no" 1216 ;; 1217 --disable-glusterfs) glusterfs="no" 1218 ;; 1219 --enable-glusterfs) glusterfs="yes" 1220 ;; 1221 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) 1222 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 1223 ;; 1224 --enable-vhdx|--disable-vhdx) 1225 echo "$0: $opt is obsolete, VHDX driver is always built" >&2 1226 ;; 1227 --enable-uuid|--disable-uuid) 1228 echo "$0: $opt is obsolete, UUID support is always built" >&2 1229 ;; 1230 --disable-gtk) gtk="no" 1231 ;; 1232 --enable-gtk) gtk="yes" 1233 ;; 1234 --tls-priority=*) tls_priority="$optarg" 1235 ;; 1236 --disable-gnutls) gnutls="no" 1237 ;; 1238 --enable-gnutls) gnutls="yes" 1239 ;; 1240 --disable-nettle) nettle="no" 1241 ;; 1242 --enable-nettle) nettle="yes" 1243 ;; 1244 --disable-gcrypt) gcrypt="no" 1245 ;; 1246 --enable-gcrypt) gcrypt="yes" 1247 ;; 1248 --enable-rdma) rdma="yes" 1249 ;; 1250 --disable-rdma) rdma="no" 1251 ;; 1252 --with-gtkabi=*) gtkabi="$optarg" 1253 ;; 1254 --disable-vte) vte="no" 1255 ;; 1256 --enable-vte) vte="yes" 1257 ;; 1258 --disable-virglrenderer) virglrenderer="no" 1259 ;; 1260 --enable-virglrenderer) virglrenderer="yes" 1261 ;; 1262 --disable-tpm) tpm="no" 1263 ;; 1264 --enable-tpm) tpm="yes" 1265 ;; 1266 --disable-libssh2) libssh2="no" 1267 ;; 1268 --enable-libssh2) libssh2="yes" 1269 ;; 1270 --disable-live-block-migration) live_block_migration="no" 1271 ;; 1272 --enable-live-block-migration) live_block_migration="yes" 1273 ;; 1274 --disable-numa) numa="no" 1275 ;; 1276 --enable-numa) numa="yes" 1277 ;; 1278 --disable-tcmalloc) tcmalloc="no" 1279 ;; 1280 --enable-tcmalloc) tcmalloc="yes" 1281 ;; 1282 --disable-jemalloc) jemalloc="no" 1283 ;; 1284 --enable-jemalloc) jemalloc="yes" 1285 ;; 1286 --disable-replication) replication="no" 1287 ;; 1288 --enable-replication) replication="yes" 1289 ;; 1290 --disable-vxhs) vxhs="no" 1291 ;; 1292 --enable-vxhs) vxhs="yes" 1293 ;; 1294 --disable-vhost-user) vhost_user="no" 1295 ;; 1296 --enable-vhost-user) 1297 vhost_user="yes" 1298 if test "$mingw32" = "yes"; then 1299 error_exit "vhost-user isn't available on win32" 1300 fi 1301 ;; 1302 --disable-capstone) capstone="no" 1303 ;; 1304 --enable-capstone) capstone="yes" 1305 ;; 1306 --enable-capstone=git) capstone="git" 1307 ;; 1308 --enable-capstone=system) capstone="system" 1309 ;; 1310 --with-git=*) git="$optarg" 1311 ;; 1312 --enable-git-update) git_update=yes 1313 ;; 1314 --disable-git-update) git_update=no 1315 ;; 1316 *) 1317 echo "ERROR: unknown option $opt" 1318 echo "Try '$0 --help' for more information" 1319 exit 1 1320 ;; 1321 esac 1322done 1323 1324if test "$vhost_user" = ""; then 1325 if test "$mingw32" = "yes"; then 1326 vhost_user="no" 1327 else 1328 vhost_user="yes" 1329 fi 1330fi 1331 1332case "$cpu" in 1333 ppc) 1334 CPU_CFLAGS="-m32" 1335 LDFLAGS="-m32 $LDFLAGS" 1336 ;; 1337 ppc64) 1338 CPU_CFLAGS="-m64" 1339 LDFLAGS="-m64 $LDFLAGS" 1340 ;; 1341 sparc) 1342 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" 1343 LDFLAGS="-m32 -mv8plus $LDFLAGS" 1344 ;; 1345 sparc64) 1346 CPU_CFLAGS="-m64 -mcpu=ultrasparc" 1347 LDFLAGS="-m64 $LDFLAGS" 1348 ;; 1349 s390) 1350 CPU_CFLAGS="-m31" 1351 LDFLAGS="-m31 $LDFLAGS" 1352 ;; 1353 s390x) 1354 CPU_CFLAGS="-m64" 1355 LDFLAGS="-m64 $LDFLAGS" 1356 ;; 1357 i386) 1358 CPU_CFLAGS="-m32" 1359 LDFLAGS="-m32 $LDFLAGS" 1360 cc_i386='$(CC) -m32' 1361 ;; 1362 x86_64) 1363 # ??? Only extremely old AMD cpus do not have cmpxchg16b. 1364 # If we truly care, we should simply detect this case at 1365 # runtime and generate the fallback to serial emulation. 1366 CPU_CFLAGS="-m64 -mcx16" 1367 LDFLAGS="-m64 $LDFLAGS" 1368 cc_i386='$(CC) -m32' 1369 ;; 1370 x32) 1371 CPU_CFLAGS="-mx32" 1372 LDFLAGS="-mx32 $LDFLAGS" 1373 cc_i386='$(CC) -m32' 1374 ;; 1375 # No special flags required for other host CPUs 1376esac 1377 1378QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS" 1379EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS" 1380 1381# For user-mode emulation the host arch has to be one we explicitly 1382# support, even if we're using TCI. 1383if [ "$ARCH" = "unknown" ]; then 1384 bsd_user="no" 1385 linux_user="no" 1386fi 1387 1388default_target_list="" 1389 1390mak_wilds="" 1391 1392if [ "$softmmu" = "yes" ]; then 1393 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak" 1394fi 1395if [ "$linux_user" = "yes" ]; then 1396 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak" 1397fi 1398if [ "$bsd_user" = "yes" ]; then 1399 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak" 1400fi 1401 1402for config in $mak_wilds; do 1403 default_target_list="${default_target_list} $(basename "$config" .mak)" 1404done 1405 1406# Enumerate public trace backends for --help output 1407trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/')) 1408 1409if test x"$show_help" = x"yes" ; then 1410cat << EOF 1411 1412Usage: configure [options] 1413Options: [defaults in brackets after descriptions] 1414 1415Standard options: 1416 --help print this message 1417 --prefix=PREFIX install in PREFIX [$prefix] 1418 --interp-prefix=PREFIX where to find shared libraries, etc. 1419 use %M for cpu name [$interp_prefix] 1420 --target-list=LIST set target list (default: build everything) 1421$(echo Available targets: $default_target_list | \ 1422 fold -s -w 53 | sed -e 's/^/ /') 1423 1424Advanced options (experts only): 1425 --source-path=PATH path of source code [$source_path] 1426 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix] 1427 --cc=CC use C compiler CC [$cc] 1428 --iasl=IASL use ACPI compiler IASL [$iasl] 1429 --host-cc=CC use C compiler CC [$host_cc] for code run at 1430 build time 1431 --cxx=CXX use C++ compiler CXX [$cxx] 1432 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] 1433 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS 1434 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS 1435 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS 1436 --make=MAKE use specified make [$make] 1437 --install=INSTALL use specified install [$install] 1438 --python=PYTHON use specified python [$python] 1439 --smbd=SMBD use specified smbd [$smbd] 1440 --static enable static build [$static] 1441 --mandir=PATH install man pages in PATH 1442 --datadir=PATH install firmware in PATH$confsuffix 1443 --docdir=PATH install documentation in PATH$confsuffix 1444 --bindir=PATH install binaries in PATH 1445 --libdir=PATH install libraries in PATH 1446 --sysconfdir=PATH install config in PATH$confsuffix 1447 --localstatedir=PATH install local state in PATH (set at runtime on win32) 1448 --firmwarepath=PATH search PATH for firmware files 1449 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix] 1450 --enable-debug enable common debug build options 1451 --disable-strip disable stripping binaries 1452 --disable-werror disable compilation abort on warning 1453 --disable-stack-protector disable compiler-provided stack protection 1454 --audio-drv-list=LIST set audio drivers list: 1455 Available drivers: $audio_possible_drivers 1456 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L 1457 --block-drv-rw-whitelist=L 1458 set block driver read-write whitelist 1459 (affects only QEMU, not qemu-img) 1460 --block-drv-ro-whitelist=L 1461 set block driver read-only whitelist 1462 (affects only QEMU, not qemu-img) 1463 --enable-trace-backends=B Set trace backend 1464 Available backends: $trace_backend_list 1465 --with-trace-file=NAME Full PATH,NAME of file to store traces 1466 Default:trace-<pid> 1467 --disable-slirp disable SLIRP userspace network connectivity 1468 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI) 1469 --oss-lib path to OSS library 1470 --cpu=CPU Build for host CPU [$cpu] 1471 --with-coroutine=BACKEND coroutine backend. Supported options: 1472 ucontext, sigaltstack, windows 1473 --enable-gcov enable test coverage analysis with gcov 1474 --gcov=GCOV use specified gcov [$gcov_tool] 1475 --disable-blobs disable installing provided firmware blobs 1476 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent 1477 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) 1478 --tls-priority default TLS protocol/cipher priority string 1479 --enable-gprof QEMU profiling with gprof 1480 --enable-profiler profiler support 1481 --enable-xen-pv-domain-build 1482 xen pv domain builder 1483 --enable-debug-stack-usage 1484 track the maximum stack usage of stacks created by qemu_alloc_stack 1485 1486Optional features, enabled with --enable-FEATURE and 1487disabled with --disable-FEATURE, default is enabled if available: 1488 1489 system all system emulation targets 1490 user supported user emulation targets 1491 linux-user all linux usermode emulation targets 1492 bsd-user all BSD usermode emulation targets 1493 docs build documentation 1494 guest-agent build the QEMU Guest Agent 1495 guest-agent-msi build guest agent Windows MSI installation package 1496 pie Position Independent Executables 1497 modules modules support 1498 debug-tcg TCG debugging (default is disabled) 1499 debug-info debugging information 1500 sparse sparse checker 1501 1502 gnutls GNUTLS cryptography support 1503 nettle nettle cryptography support 1504 gcrypt libgcrypt cryptography support 1505 sdl SDL UI 1506 --with-sdlabi select preferred SDL ABI 1.2 or 2.0 1507 gtk gtk UI 1508 --with-gtkabi select preferred GTK ABI 2.0 or 3.0 1509 vte vte support for the gtk UI 1510 curses curses UI 1511 vnc VNC UI support 1512 vnc-sasl SASL encryption for VNC server 1513 vnc-jpeg JPEG lossy compression for VNC server 1514 vnc-png PNG compression for VNC server 1515 cocoa Cocoa UI (Mac OS X only) 1516 virtfs VirtFS 1517 mpath Multipath persistent reservation passthrough 1518 xen xen backend driver support 1519 xen-pci-passthrough 1520 brlapi BrlAPI (Braile) 1521 curl curl connectivity 1522 fdt fdt device tree 1523 bluez bluez stack connectivity 1524 kvm KVM acceleration support 1525 hax HAX acceleration support 1526 rdma RDMA-based migration support 1527 vde support for vde network 1528 netmap support for netmap network 1529 linux-aio Linux AIO support 1530 cap-ng libcap-ng support 1531 attr attr and xattr support 1532 vhost-net vhost-net acceleration support 1533 spice spice 1534 rbd rados block device (rbd) 1535 libiscsi iscsi support 1536 libnfs nfs support 1537 smartcard smartcard support (libcacard) 1538 libusb libusb (for usb passthrough) 1539 live-block-migration Block migration in the main migration stream 1540 usb-redir usb network redirection support 1541 lzo support of lzo compression library 1542 snappy support of snappy compression library 1543 bzip2 support of bzip2 compression library 1544 (for reading bzip2-compressed dmg images) 1545 seccomp seccomp support 1546 coroutine-pool coroutine freelist (better performance) 1547 glusterfs GlusterFS backend 1548 tpm TPM support 1549 libssh2 ssh block device support 1550 numa libnuma support 1551 tcmalloc tcmalloc support 1552 jemalloc jemalloc support 1553 replication replication support 1554 vhost-vsock virtio sockets device support 1555 opengl opengl support 1556 virglrenderer virgl rendering support 1557 xfsctl xfsctl support 1558 qom-cast-debug cast debugging support 1559 tools build qemu-io, qemu-nbd and qemu-image tools 1560 vxhs Veritas HyperScale vDisk backend support 1561 crypto-afalg Linux AF_ALG crypto backend driver 1562 vhost-user vhost-user support 1563 capstone capstone disassembler support 1564 1565NOTE: The object files are built at the place where configure is launched 1566EOF 1567exit 0 1568fi 1569 1570if ! has $python; then 1571 error_exit "Python not found. Use --python=/path/to/python" 1572fi 1573 1574# Note that if the Python conditional here evaluates True we will exit 1575# with status 1 which is a shell 'false' value. 1576if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then 1577 error_exit "Cannot use '$python', Python 2.6 or later is required." \ 1578 "Note that Python 3 or later is not yet supported." \ 1579 "Use --python=/path/to/python to specify a supported Python." 1580fi 1581 1582# Suppress writing compiled files 1583python="$python -B" 1584 1585# Check that the C compiler works. Doing this here before testing 1586# the host CPU ensures that we had a valid CC to autodetect the 1587# $cpu var (and we should bail right here if that's not the case). 1588# It also allows the help message to be printed without a CC. 1589write_c_skeleton; 1590if compile_object ; then 1591 : C compiler works ok 1592else 1593 error_exit "\"$cc\" either does not exist or does not work" 1594fi 1595if ! compile_prog ; then 1596 error_exit "\"$cc\" cannot build an executable (is your linker broken?)" 1597fi 1598 1599# Now we have handled --enable-tcg-interpreter and know we're not just 1600# printing the help message, bail out if the host CPU isn't supported. 1601if test "$ARCH" = "unknown"; then 1602 if test "$tcg_interpreter" = "yes" ; then 1603 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)" 1604 else 1605 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter" 1606 fi 1607fi 1608 1609# Consult white-list to determine whether to enable werror 1610# by default. Only enable by default for git builds 1611if test -z "$werror" ; then 1612 if test -d "$source_path/.git" -a \ 1613 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then 1614 werror="yes" 1615 else 1616 werror="no" 1617 fi 1618fi 1619 1620if test "$bogus_os" = "yes"; then 1621 # Now that we know that we're not printing the help and that 1622 # the compiler works (so the results of the check_defines we used 1623 # to identify the OS are reliable), if we didn't recognize the 1624 # host OS we should stop now. 1625 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" 1626fi 1627 1628gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits" 1629gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags" 1630gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags" 1631gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags" 1632gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags" 1633gcc_flags="-Wno-string-plus-int $gcc_flags" 1634# Note that we do not add -Werror to gcc_flags here, because that would 1635# enable it for all configure tests. If a configure test failed due 1636# to -Werror this would just silently disable some features, 1637# so it's too error prone. 1638 1639cc_has_warning_flag() { 1640 write_c_skeleton; 1641 1642 # Use the positive sense of the flag when testing for -Wno-wombat 1643 # support (gcc will happily accept the -Wno- form of unknown 1644 # warning options). 1645 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 1646 compile_prog "-Werror $optflag" "" 1647} 1648 1649for flag in $gcc_flags; do 1650 if cc_has_warning_flag $flag ; then 1651 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1652 fi 1653done 1654 1655if test "$stack_protector" != "no"; then 1656 cat > $TMPC << EOF 1657int main(int argc, char *argv[]) 1658{ 1659 char arr[64], *p = arr, *c = argv[0]; 1660 while (*c) { 1661 *p++ = *c++; 1662 } 1663 return 0; 1664} 1665EOF 1666 gcc_flags="-fstack-protector-strong -fstack-protector-all" 1667 sp_on=0 1668 for flag in $gcc_flags; do 1669 # We need to check both a compile and a link, since some compiler 1670 # setups fail only on a .c->.o compile and some only at link time 1671 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC && 1672 compile_prog "-Werror $flag" ""; then 1673 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1674 sp_on=1 1675 break 1676 fi 1677 done 1678 if test "$stack_protector" = yes; then 1679 if test $sp_on = 0; then 1680 error_exit "Stack protector not supported" 1681 fi 1682 fi 1683fi 1684 1685# Disable -Wmissing-braces on older compilers that warn even for 1686# the "universal" C zero initializer {0}. 1687cat > $TMPC << EOF 1688struct { 1689 int a[2]; 1690} x = {0}; 1691EOF 1692if compile_object "-Werror" "" ; then 1693 : 1694else 1695 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 1696fi 1697 1698# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and 1699# large functions that use global variables. The bug is in all releases of 1700# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in 1701# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013. 1702cat > $TMPC << EOF 1703#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2)) 1704int main(void) { return 0; } 1705#else 1706#error No bug in this compiler. 1707#endif 1708EOF 1709if compile_prog "-Werror -fno-gcse" "" ; then 1710 TRANSLATE_OPT_CFLAGS=-fno-gcse 1711fi 1712 1713if test "$static" = "yes" ; then 1714 if test "$modules" = "yes" ; then 1715 error_exit "static and modules are mutually incompatible" 1716 fi 1717 if test "$pie" = "yes" ; then 1718 error_exit "static and pie are mutually incompatible" 1719 else 1720 pie="no" 1721 fi 1722fi 1723 1724# Unconditional check for compiler __thread support 1725 cat > $TMPC << EOF 1726static __thread int tls_var; 1727int main(void) { return tls_var; } 1728EOF 1729 1730if ! compile_prog "-Werror" "" ; then 1731 error_exit "Your compiler does not support the __thread specifier for " \ 1732 "Thread-Local Storage (TLS). Please upgrade to a version that does." 1733fi 1734 1735if test "$pie" = ""; then 1736 case "$cpu-$targetos" in 1737 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD) 1738 ;; 1739 *) 1740 pie="no" 1741 ;; 1742 esac 1743fi 1744 1745if test "$pie" != "no" ; then 1746 cat > $TMPC << EOF 1747 1748#ifdef __linux__ 1749# define THREAD __thread 1750#else 1751# define THREAD 1752#endif 1753 1754static THREAD int tls_var; 1755 1756int main(void) { return tls_var; } 1757 1758EOF 1759 if compile_prog "-fPIE -DPIE" "-pie"; then 1760 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS" 1761 LDFLAGS="-pie $LDFLAGS" 1762 pie="yes" 1763 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 1764 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS" 1765 fi 1766 else 1767 if test "$pie" = "yes"; then 1768 error_exit "PIE not available due to missing toolchain support" 1769 else 1770 echo "Disabling PIE due to missing toolchain support" 1771 pie="no" 1772 fi 1773 fi 1774 1775 if compile_prog "-Werror -fno-pie" "-nopie"; then 1776 CFLAGS_NOPIE="-fno-pie" 1777 LDFLAGS_NOPIE="-nopie" 1778 fi 1779fi 1780 1781########################################## 1782# __sync_fetch_and_and requires at least -march=i486. Many toolchains 1783# use i686 as default anyway, but for those that don't, an explicit 1784# specification is necessary 1785 1786if test "$cpu" = "i386"; then 1787 cat > $TMPC << EOF 1788static int sfaa(int *ptr) 1789{ 1790 return __sync_fetch_and_and(ptr, 0); 1791} 1792 1793int main(void) 1794{ 1795 int val = 42; 1796 val = __sync_val_compare_and_swap(&val, 0, 1); 1797 sfaa(&val); 1798 return val; 1799} 1800EOF 1801 if ! compile_prog "" "" ; then 1802 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 1803 fi 1804fi 1805 1806######################################### 1807# Solaris specific configure tool chain decisions 1808 1809if test "$solaris" = "yes" ; then 1810 if has $install; then 1811 : 1812 else 1813 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \ 1814 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \ 1815 "to get ginstall which is used by default (which lives in /opt/csw/bin)" 1816 fi 1817 if test "$(path_of $install)" = "/usr/sbin/install" ; then 1818 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \ 1819 "try ginstall from the GNU fileutils available from www.blastwave.org" \ 1820 "using pkg-get -i fileutils, or use --install=/usr/ucb/install" 1821 fi 1822 if has ar; then 1823 : 1824 else 1825 if test -f /usr/ccs/bin/ar ; then 1826 error_exit "No path includes ar" \ 1827 "Add /usr/ccs/bin to your path and rerun configure" 1828 fi 1829 error_exit "No path includes ar" 1830 fi 1831fi 1832 1833if test -z "${target_list+xxx}" ; then 1834 for target in $default_target_list; do 1835 supported_target $target 2>/dev/null && \ 1836 target_list="$target_list $target" 1837 done 1838 target_list="${target_list# }" 1839else 1840 target_list=$(echo "$target_list" | sed -e 's/,/ /g') 1841 for target in $target_list; do 1842 # Check that we recognised the target name; this allows a more 1843 # friendly error message than if we let it fall through. 1844 case " $default_target_list " in 1845 *" $target "*) 1846 ;; 1847 *) 1848 error_exit "Unknown target name '$target'" 1849 ;; 1850 esac 1851 supported_target $target || exit 1 1852 done 1853fi 1854 1855# see if system emulation was really requested 1856case " $target_list " in 1857 *"-softmmu "*) softmmu=yes 1858 ;; 1859 *) softmmu=no 1860 ;; 1861esac 1862 1863feature_not_found() { 1864 feature=$1 1865 remedy=$2 1866 1867 error_exit "User requested feature $feature" \ 1868 "configure was not able to find it." \ 1869 "$remedy" 1870} 1871 1872# --- 1873# big/little endian test 1874cat > $TMPC << EOF 1875short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 1876short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 1877extern int foo(short *, short *); 1878int main(int argc, char *argv[]) { 1879 return foo(big_endian, little_endian); 1880} 1881EOF 1882 1883if compile_object ; then 1884 if grep -q BiGeNdIaN $TMPO ; then 1885 bigendian="yes" 1886 elif grep -q LiTtLeEnDiAn $TMPO ; then 1887 bigendian="no" 1888 else 1889 echo big/little test failed 1890 fi 1891else 1892 echo big/little test failed 1893fi 1894 1895########################################## 1896# cocoa implies not SDL or GTK 1897# (the cocoa UI code currently assumes it is always the active UI 1898# and doesn't interact well with other UI frontend code) 1899if test "$cocoa" = "yes"; then 1900 if test "$sdl" = "yes"; then 1901 error_exit "Cocoa and SDL UIs cannot both be enabled at once" 1902 fi 1903 if test "$gtk" = "yes"; then 1904 error_exit "Cocoa and GTK UIs cannot both be enabled at once" 1905 fi 1906 gtk=no 1907 sdl=no 1908fi 1909 1910# Some versions of Mac OS X incorrectly define SIZE_MAX 1911cat > $TMPC << EOF 1912#include <stdint.h> 1913#include <stdio.h> 1914int main(int argc, char *argv[]) { 1915 return printf("%zu", SIZE_MAX); 1916} 1917EOF 1918have_broken_size_max=no 1919if ! compile_object -Werror ; then 1920 have_broken_size_max=yes 1921fi 1922 1923########################################## 1924# L2TPV3 probe 1925 1926cat > $TMPC <<EOF 1927#include <sys/socket.h> 1928#include <linux/ip.h> 1929int main(void) { return sizeof(struct mmsghdr); } 1930EOF 1931if compile_prog "" "" ; then 1932 l2tpv3=yes 1933else 1934 l2tpv3=no 1935fi 1936 1937########################################## 1938# MinGW / Mingw-w64 localtime_r/gmtime_r check 1939 1940if test "$mingw32" = "yes"; then 1941 # Some versions of MinGW / Mingw-w64 lack localtime_r 1942 # and gmtime_r entirely. 1943 # 1944 # Some versions of Mingw-w64 define a macro for 1945 # localtime_r/gmtime_r. 1946 # 1947 # Some versions of Mingw-w64 will define functions 1948 # for localtime_r/gmtime_r, but only if you have 1949 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun 1950 # though, unistd.h and pthread.h both define 1951 # that for you. 1952 # 1953 # So this #undef localtime_r and #include <unistd.h> 1954 # are not in fact redundant. 1955cat > $TMPC << EOF 1956#include <unistd.h> 1957#include <time.h> 1958#undef localtime_r 1959int main(void) { localtime_r(NULL, NULL); return 0; } 1960EOF 1961 if compile_prog "" "" ; then 1962 localtime_r="yes" 1963 else 1964 localtime_r="no" 1965 fi 1966fi 1967 1968########################################## 1969# pkg-config probe 1970 1971if ! has "$pkg_config_exe"; then 1972 error_exit "pkg-config binary '$pkg_config_exe' not found" 1973fi 1974 1975########################################## 1976# NPTL probe 1977 1978if test "$linux_user" = "yes"; then 1979 cat > $TMPC <<EOF 1980#include <sched.h> 1981#include <linux/futex.h> 1982int main(void) { 1983#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 1984#error bork 1985#endif 1986 return 0; 1987} 1988EOF 1989 if ! compile_object ; then 1990 feature_not_found "nptl" "Install glibc and linux kernel headers." 1991 fi 1992fi 1993 1994######################################### 1995# zlib check 1996 1997if test "$zlib" != "no" ; then 1998 cat > $TMPC << EOF 1999#include <zlib.h> 2000int main(void) { zlibVersion(); return 0; } 2001EOF 2002 if compile_prog "" "-lz" ; then 2003 : 2004 else 2005 error_exit "zlib check failed" \ 2006 "Make sure to have the zlib libs and headers installed." 2007 fi 2008fi 2009LIBS="$LIBS -lz" 2010 2011########################################## 2012# lzo check 2013 2014if test "$lzo" != "no" ; then 2015 cat > $TMPC << EOF 2016#include <lzo/lzo1x.h> 2017int main(void) { lzo_version(); return 0; } 2018EOF 2019 if compile_prog "" "-llzo2" ; then 2020 libs_softmmu="$libs_softmmu -llzo2" 2021 lzo="yes" 2022 else 2023 if test "$lzo" = "yes"; then 2024 feature_not_found "liblzo2" "Install liblzo2 devel" 2025 fi 2026 lzo="no" 2027 fi 2028fi 2029 2030########################################## 2031# snappy check 2032 2033if test "$snappy" != "no" ; then 2034 cat > $TMPC << EOF 2035#include <snappy-c.h> 2036int main(void) { snappy_max_compressed_length(4096); return 0; } 2037EOF 2038 if compile_prog "" "-lsnappy" ; then 2039 libs_softmmu="$libs_softmmu -lsnappy" 2040 snappy="yes" 2041 else 2042 if test "$snappy" = "yes"; then 2043 feature_not_found "libsnappy" "Install libsnappy devel" 2044 fi 2045 snappy="no" 2046 fi 2047fi 2048 2049########################################## 2050# bzip2 check 2051 2052if test "$bzip2" != "no" ; then 2053 cat > $TMPC << EOF 2054#include <bzlib.h> 2055int main(void) { BZ2_bzlibVersion(); return 0; } 2056EOF 2057 if compile_prog "" "-lbz2" ; then 2058 bzip2="yes" 2059 else 2060 if test "$bzip2" = "yes"; then 2061 feature_not_found "libbzip2" "Install libbzip2 devel" 2062 fi 2063 bzip2="no" 2064 fi 2065fi 2066 2067########################################## 2068# libseccomp check 2069 2070if test "$seccomp" != "no" ; then 2071 case "$cpu" in 2072 i386|x86_64) 2073 libseccomp_minver="2.1.0" 2074 ;; 2075 mips) 2076 libseccomp_minver="2.2.0" 2077 ;; 2078 arm|aarch64) 2079 libseccomp_minver="2.2.3" 2080 ;; 2081 ppc|ppc64|s390x) 2082 libseccomp_minver="2.3.0" 2083 ;; 2084 *) 2085 libseccomp_minver="" 2086 ;; 2087 esac 2088 2089 if test "$libseccomp_minver" != "" && 2090 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then 2091 seccomp_cflags="$($pkg_config --cflags libseccomp)" 2092 seccomp_libs="$($pkg_config --libs libseccomp)" 2093 seccomp="yes" 2094 else 2095 if test "$seccomp" = "yes" ; then 2096 if test "$libseccomp_minver" != "" ; then 2097 feature_not_found "libseccomp" \ 2098 "Install libseccomp devel >= $libseccomp_minver" 2099 else 2100 feature_not_found "libseccomp" \ 2101 "libseccomp is not supported for host cpu $cpu" 2102 fi 2103 fi 2104 seccomp="no" 2105 fi 2106fi 2107########################################## 2108# xen probe 2109 2110if test "$xen" != "no" ; then 2111 # Check whether Xen library path is specified via --extra-ldflags to avoid 2112 # overriding this setting with pkg-config output. If not, try pkg-config 2113 # to obtain all needed flags. 2114 2115 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2116 $pkg_config --exists xencontrol ; then 2117 xen_ctrl_version="$(printf '%d%02d%02d' \ 2118 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2119 xen=yes 2120 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" 2121 xen_pc="$xen_pc xenevtchn xendevicemodel" 2122 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)" 2123 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu" 2124 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS" 2125 else 2126 2127 xen_libs="-lxenstore -lxenctrl -lxenguest" 2128 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2129 2130 # First we test whether Xen headers and libraries are available. 2131 # If no, we are done and there is no Xen support. 2132 # If yes, more tests are run to detect the Xen version. 2133 2134 # Xen (any) 2135 cat > $TMPC <<EOF 2136#include <xenctrl.h> 2137int main(void) { 2138 return 0; 2139} 2140EOF 2141 if ! compile_prog "" "$xen_libs" ; then 2142 # Xen not found 2143 if test "$xen" = "yes" ; then 2144 feature_not_found "xen" "Install xen devel" 2145 fi 2146 xen=no 2147 2148 # Xen unstable 2149 elif 2150 cat > $TMPC <<EOF && 2151#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2152#include <xenforeignmemory.h> 2153int main(void) { 2154 xenforeignmemory_handle *xfmem; 2155 2156 xfmem = xenforeignmemory_open(0, 0); 2157 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2158 2159 return 0; 2160} 2161EOF 2162 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2163 then 2164 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2165 xen_ctrl_version=41000 2166 xen=yes 2167 elif 2168 cat > $TMPC <<EOF && 2169#undef XC_WANT_COMPAT_DEVICEMODEL_API 2170#define __XEN_TOOLS__ 2171#include <xendevicemodel.h> 2172int main(void) { 2173 xendevicemodel_handle *xd; 2174 2175 xd = xendevicemodel_open(0, 0); 2176 xendevicemodel_close(xd); 2177 2178 return 0; 2179} 2180EOF 2181 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2182 then 2183 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2184 xen_ctrl_version=40900 2185 xen=yes 2186 elif 2187 cat > $TMPC <<EOF && 2188/* 2189 * If we have stable libs the we don't want the libxc compat 2190 * layers, regardless of what CFLAGS we may have been given. 2191 * 2192 * Also, check if xengnttab_grant_copy_segment_t is defined and 2193 * grant copy operation is implemented. 2194 */ 2195#undef XC_WANT_COMPAT_EVTCHN_API 2196#undef XC_WANT_COMPAT_GNTTAB_API 2197#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2198#include <xenctrl.h> 2199#include <xenstore.h> 2200#include <xenevtchn.h> 2201#include <xengnttab.h> 2202#include <xenforeignmemory.h> 2203#include <stdint.h> 2204#include <xen/hvm/hvm_info_table.h> 2205#if !defined(HVM_MAX_VCPUS) 2206# error HVM_MAX_VCPUS not defined 2207#endif 2208int main(void) { 2209 xc_interface *xc = NULL; 2210 xenforeignmemory_handle *xfmem; 2211 xenevtchn_handle *xe; 2212 xengnttab_handle *xg; 2213 xen_domain_handle_t handle; 2214 xengnttab_grant_copy_segment_t* seg = NULL; 2215 2216 xs_daemon_open(); 2217 2218 xc = xc_interface_open(0, 0, 0); 2219 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2220 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2221 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2222 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2223 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2224 2225 xfmem = xenforeignmemory_open(0, 0); 2226 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2227 2228 xe = xenevtchn_open(0, 0); 2229 xenevtchn_fd(xe); 2230 2231 xg = xengnttab_open(0, 0); 2232 xengnttab_grant_copy(xg, 0, seg); 2233 2234 return 0; 2235} 2236EOF 2237 compile_prog "" "$xen_libs $xen_stable_libs" 2238 then 2239 xen_ctrl_version=40800 2240 xen=yes 2241 elif 2242 cat > $TMPC <<EOF && 2243/* 2244 * If we have stable libs the we don't want the libxc compat 2245 * layers, regardless of what CFLAGS we may have been given. 2246 */ 2247#undef XC_WANT_COMPAT_EVTCHN_API 2248#undef XC_WANT_COMPAT_GNTTAB_API 2249#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2250#include <xenctrl.h> 2251#include <xenstore.h> 2252#include <xenevtchn.h> 2253#include <xengnttab.h> 2254#include <xenforeignmemory.h> 2255#include <stdint.h> 2256#include <xen/hvm/hvm_info_table.h> 2257#if !defined(HVM_MAX_VCPUS) 2258# error HVM_MAX_VCPUS not defined 2259#endif 2260int main(void) { 2261 xc_interface *xc = NULL; 2262 xenforeignmemory_handle *xfmem; 2263 xenevtchn_handle *xe; 2264 xengnttab_handle *xg; 2265 xen_domain_handle_t handle; 2266 2267 xs_daemon_open(); 2268 2269 xc = xc_interface_open(0, 0, 0); 2270 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2271 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2272 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2273 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2274 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2275 2276 xfmem = xenforeignmemory_open(0, 0); 2277 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2278 2279 xe = xenevtchn_open(0, 0); 2280 xenevtchn_fd(xe); 2281 2282 xg = xengnttab_open(0, 0); 2283 xengnttab_map_grant_ref(xg, 0, 0, 0); 2284 2285 return 0; 2286} 2287EOF 2288 compile_prog "" "$xen_libs $xen_stable_libs" 2289 then 2290 xen_ctrl_version=40701 2291 xen=yes 2292 elif 2293 cat > $TMPC <<EOF && 2294#include <xenctrl.h> 2295#include <stdint.h> 2296int main(void) { 2297 xc_interface *xc = NULL; 2298 xen_domain_handle_t handle; 2299 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2300 return 0; 2301} 2302EOF 2303 compile_prog "" "$xen_libs" 2304 then 2305 xen_ctrl_version=40700 2306 xen=yes 2307 2308 # Xen 4.6 2309 elif 2310 cat > $TMPC <<EOF && 2311#include <xenctrl.h> 2312#include <xenstore.h> 2313#include <stdint.h> 2314#include <xen/hvm/hvm_info_table.h> 2315#if !defined(HVM_MAX_VCPUS) 2316# error HVM_MAX_VCPUS not defined 2317#endif 2318int main(void) { 2319 xc_interface *xc; 2320 xs_daemon_open(); 2321 xc = xc_interface_open(0, 0, 0); 2322 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2323 xc_gnttab_open(NULL, 0); 2324 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2325 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2326 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2327 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2328 return 0; 2329} 2330EOF 2331 compile_prog "" "$xen_libs" 2332 then 2333 xen_ctrl_version=40600 2334 xen=yes 2335 2336 # Xen 4.5 2337 elif 2338 cat > $TMPC <<EOF && 2339#include <xenctrl.h> 2340#include <xenstore.h> 2341#include <stdint.h> 2342#include <xen/hvm/hvm_info_table.h> 2343#if !defined(HVM_MAX_VCPUS) 2344# error HVM_MAX_VCPUS not defined 2345#endif 2346int main(void) { 2347 xc_interface *xc; 2348 xs_daemon_open(); 2349 xc = xc_interface_open(0, 0, 0); 2350 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2351 xc_gnttab_open(NULL, 0); 2352 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2353 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2354 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2355 return 0; 2356} 2357EOF 2358 compile_prog "" "$xen_libs" 2359 then 2360 xen_ctrl_version=40500 2361 xen=yes 2362 2363 elif 2364 cat > $TMPC <<EOF && 2365#include <xenctrl.h> 2366#include <xenstore.h> 2367#include <stdint.h> 2368#include <xen/hvm/hvm_info_table.h> 2369#if !defined(HVM_MAX_VCPUS) 2370# error HVM_MAX_VCPUS not defined 2371#endif 2372int main(void) { 2373 xc_interface *xc; 2374 xs_daemon_open(); 2375 xc = xc_interface_open(0, 0, 0); 2376 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2377 xc_gnttab_open(NULL, 0); 2378 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2379 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2380 return 0; 2381} 2382EOF 2383 compile_prog "" "$xen_libs" 2384 then 2385 xen_ctrl_version=40200 2386 xen=yes 2387 2388 else 2389 if test "$xen" = "yes" ; then 2390 feature_not_found "xen (unsupported version)" \ 2391 "Install a supported xen (xen 4.2 or newer)" 2392 fi 2393 xen=no 2394 fi 2395 2396 if test "$xen" = yes; then 2397 if test $xen_ctrl_version -ge 40701 ; then 2398 libs_softmmu="$xen_stable_libs $libs_softmmu" 2399 fi 2400 libs_softmmu="$xen_libs $libs_softmmu" 2401 fi 2402 fi 2403fi 2404 2405if test "$xen_pci_passthrough" != "no"; then 2406 if test "$xen" = "yes" && test "$linux" = "yes"; then 2407 xen_pci_passthrough=yes 2408 else 2409 if test "$xen_pci_passthrough" = "yes"; then 2410 error_exit "User requested feature Xen PCI Passthrough" \ 2411 " but this feature requires /sys from Linux" 2412 fi 2413 xen_pci_passthrough=no 2414 fi 2415fi 2416 2417if test "$xen_pv_domain_build" = "yes" && 2418 test "$xen" != "yes"; then 2419 error_exit "User requested Xen PV domain builder support" \ 2420 "which requires Xen support." 2421fi 2422 2423########################################## 2424# Sparse probe 2425if test "$sparse" != "no" ; then 2426 if has cgcc; then 2427 sparse=yes 2428 else 2429 if test "$sparse" = "yes" ; then 2430 feature_not_found "sparse" "Install sparse binary" 2431 fi 2432 sparse=no 2433 fi 2434fi 2435 2436########################################## 2437# X11 probe 2438x11_cflags= 2439x11_libs=-lX11 2440if $pkg_config --exists "x11"; then 2441 x11_cflags=$($pkg_config --cflags x11) 2442 x11_libs=$($pkg_config --libs x11) 2443fi 2444 2445########################################## 2446# GTK probe 2447 2448if test "$gtkabi" = ""; then 2449 # The GTK ABI was not specified explicitly, so try whether 3.0 is available. 2450 # Use 2.0 as a fallback if that is available. 2451 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then 2452 gtkabi=3.0 2453 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then 2454 gtkabi=2.0 2455 else 2456 gtkabi=3.0 2457 fi 2458fi 2459 2460if test "$gtk" != "no"; then 2461 gtkpackage="gtk+-$gtkabi" 2462 gtkx11package="gtk+-x11-$gtkabi" 2463 if test "$gtkabi" = "3.0" ; then 2464 gtkversion="3.0.0" 2465 else 2466 gtkversion="2.18.0" 2467 fi 2468 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 2469 gtk_cflags=$($pkg_config --cflags $gtkpackage) 2470 gtk_libs=$($pkg_config --libs $gtkpackage) 2471 gtk_version=$($pkg_config --modversion $gtkpackage) 2472 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 2473 gtk_cflags="$gtk_cflags $x11_cflags" 2474 gtk_libs="$gtk_libs $x11_libs" 2475 fi 2476 libs_softmmu="$gtk_libs $libs_softmmu" 2477 gtk="yes" 2478 elif test "$gtk" = "yes"; then 2479 feature_not_found "gtk" "Install gtk3-devel" 2480 else 2481 gtk="no" 2482 fi 2483fi 2484 2485 2486########################################## 2487# GNUTLS probe 2488 2489gnutls_works() { 2490 # Unfortunately some distros have bad pkg-config information for gnutls 2491 # such that it claims to exist but you get a compiler error if you try 2492 # to use the options returned by --libs. Specifically, Ubuntu for --static 2493 # builds doesn't work: 2494 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035 2495 # 2496 # So sanity check the cflags/libs before assuming gnutls can be used. 2497 if ! $pkg_config --exists "gnutls"; then 2498 return 1 2499 fi 2500 2501 write_c_skeleton 2502 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)" 2503} 2504 2505gnutls_gcrypt=no 2506gnutls_nettle=no 2507if test "$gnutls" != "no"; then 2508 if gnutls_works; then 2509 gnutls_cflags=$($pkg_config --cflags gnutls) 2510 gnutls_libs=$($pkg_config --libs gnutls) 2511 libs_softmmu="$gnutls_libs $libs_softmmu" 2512 libs_tools="$gnutls_libs $libs_tools" 2513 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags" 2514 gnutls="yes" 2515 2516 # gnutls_rnd requires >= 2.11.0 2517 if $pkg_config --exists "gnutls >= 2.11.0"; then 2518 gnutls_rnd="yes" 2519 else 2520 gnutls_rnd="no" 2521 fi 2522 2523 if $pkg_config --exists 'gnutls >= 3.0'; then 2524 gnutls_gcrypt=no 2525 gnutls_nettle=yes 2526 elif $pkg_config --exists 'gnutls >= 2.12'; then 2527 case $($pkg_config --libs --static gnutls) in 2528 *gcrypt*) 2529 gnutls_gcrypt=yes 2530 gnutls_nettle=no 2531 ;; 2532 *nettle*) 2533 gnutls_gcrypt=no 2534 gnutls_nettle=yes 2535 ;; 2536 *) 2537 gnutls_gcrypt=yes 2538 gnutls_nettle=no 2539 ;; 2540 esac 2541 else 2542 gnutls_gcrypt=yes 2543 gnutls_nettle=no 2544 fi 2545 elif test "$gnutls" = "yes"; then 2546 feature_not_found "gnutls" "Install gnutls devel" 2547 else 2548 gnutls="no" 2549 gnutls_rnd="no" 2550 fi 2551else 2552 gnutls_rnd="no" 2553fi 2554 2555 2556# If user didn't give a --disable/enable-gcrypt flag, 2557# then mark as disabled if user requested nettle 2558# explicitly, or if gnutls links to nettle 2559if test -z "$gcrypt" 2560then 2561 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes" 2562 then 2563 gcrypt="no" 2564 fi 2565fi 2566 2567# If user didn't give a --disable/enable-nettle flag, 2568# then mark as disabled if user requested gcrypt 2569# explicitly, or if gnutls links to gcrypt 2570if test -z "$nettle" 2571then 2572 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes" 2573 then 2574 nettle="no" 2575 fi 2576fi 2577 2578has_libgcrypt_config() { 2579 if ! has "libgcrypt-config" 2580 then 2581 return 1 2582 fi 2583 2584 if test -n "$cross_prefix" 2585 then 2586 host=$(libgcrypt-config --host) 2587 if test "$host-" != $cross_prefix 2588 then 2589 return 1 2590 fi 2591 fi 2592 2593 return 0 2594} 2595 2596if test "$gcrypt" != "no"; then 2597 if has_libgcrypt_config; then 2598 gcrypt_cflags=$(libgcrypt-config --cflags) 2599 gcrypt_libs=$(libgcrypt-config --libs) 2600 # Debian has remove -lgpg-error from libgcrypt-config 2601 # as it "spreads unnecessary dependencies" which in 2602 # turn breaks static builds... 2603 if test "$static" = "yes" 2604 then 2605 gcrypt_libs="$gcrypt_libs -lgpg-error" 2606 fi 2607 libs_softmmu="$gcrypt_libs $libs_softmmu" 2608 libs_tools="$gcrypt_libs $libs_tools" 2609 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags" 2610 gcrypt="yes" 2611 if test -z "$nettle"; then 2612 nettle="no" 2613 fi 2614 2615 cat > $TMPC << EOF 2616#include <gcrypt.h> 2617int main(void) { 2618 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2, 2619 GCRY_MD_SHA256, 2620 NULL, 0, 0, 0, NULL); 2621 return 0; 2622} 2623EOF 2624 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 2625 gcrypt_kdf=yes 2626 fi 2627 2628 cat > $TMPC << EOF 2629#include <gcrypt.h> 2630int main(void) { 2631 gcry_mac_hd_t handle; 2632 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 2633 GCRY_MAC_FLAG_SECURE, NULL); 2634 return 0; 2635} 2636EOF 2637 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 2638 gcrypt_hmac=yes 2639 fi 2640 else 2641 if test "$gcrypt" = "yes"; then 2642 feature_not_found "gcrypt" "Install gcrypt devel" 2643 else 2644 gcrypt="no" 2645 fi 2646 fi 2647fi 2648 2649 2650if test "$nettle" != "no"; then 2651 if $pkg_config --exists "nettle"; then 2652 nettle_cflags=$($pkg_config --cflags nettle) 2653 nettle_libs=$($pkg_config --libs nettle) 2654 nettle_version=$($pkg_config --modversion nettle) 2655 libs_softmmu="$nettle_libs $libs_softmmu" 2656 libs_tools="$nettle_libs $libs_tools" 2657 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags" 2658 nettle="yes" 2659 2660 cat > $TMPC << EOF 2661#include <stddef.h> 2662#include <nettle/pbkdf2.h> 2663int main(void) { 2664 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL); 2665 return 0; 2666} 2667EOF 2668 if compile_prog "$nettle_cflags" "$nettle_libs" ; then 2669 nettle_kdf=yes 2670 fi 2671 else 2672 if test "$nettle" = "yes"; then 2673 feature_not_found "nettle" "Install nettle devel" 2674 else 2675 nettle="no" 2676 fi 2677 fi 2678fi 2679 2680if test "$gcrypt" = "yes" && test "$nettle" = "yes" 2681then 2682 error_exit "Only one of gcrypt & nettle can be enabled" 2683fi 2684 2685########################################## 2686# libtasn1 - only for the TLS creds/session test suite 2687 2688tasn1=yes 2689tasn1_cflags="" 2690tasn1_libs="" 2691if $pkg_config --exists "libtasn1"; then 2692 tasn1_cflags=$($pkg_config --cflags libtasn1) 2693 tasn1_libs=$($pkg_config --libs libtasn1) 2694else 2695 tasn1=no 2696fi 2697 2698 2699########################################## 2700# getifaddrs (for tests/test-io-channel-socket ) 2701 2702have_ifaddrs_h=yes 2703if ! check_include "ifaddrs.h" ; then 2704 have_ifaddrs_h=no 2705fi 2706 2707########################################## 2708# VTE probe 2709 2710if test "$vte" != "no"; then 2711 if test "$gtkabi" = "3.0"; then 2712 vteminversion="0.32.0" 2713 if $pkg_config --exists "vte-2.91"; then 2714 vtepackage="vte-2.91" 2715 else 2716 vtepackage="vte-2.90" 2717 fi 2718 else 2719 vtepackage="vte" 2720 vteminversion="0.24.0" 2721 fi 2722 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 2723 vte_cflags=$($pkg_config --cflags $vtepackage) 2724 vte_libs=$($pkg_config --libs $vtepackage) 2725 vteversion=$($pkg_config --modversion $vtepackage) 2726 libs_softmmu="$vte_libs $libs_softmmu" 2727 vte="yes" 2728 elif test "$vte" = "yes"; then 2729 if test "$gtkabi" = "3.0"; then 2730 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 2731 else 2732 feature_not_found "vte" "Install libvte devel" 2733 fi 2734 else 2735 vte="no" 2736 fi 2737fi 2738 2739########################################## 2740# SDL probe 2741 2742# Look for sdl configuration program (pkg-config or sdl-config). Try 2743# sdl-config even without cross prefix, and favour pkg-config over sdl-config. 2744 2745if test "$sdlabi" = ""; then 2746 if $pkg_config --exists "sdl2"; then 2747 sdlabi=2.0 2748 elif $pkg_config --exists "sdl"; then 2749 sdlabi=1.2 2750 else 2751 sdlabi=2.0 2752 fi 2753fi 2754 2755if test $sdlabi = "2.0"; then 2756 sdl_config=$sdl2_config 2757 sdlname=sdl2 2758 sdlconfigname=sdl2_config 2759elif test $sdlabi = "1.2"; then 2760 sdlname=sdl 2761 sdlconfigname=sdl_config 2762else 2763 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0" 2764fi 2765 2766if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then 2767 sdl_config=$sdlconfigname 2768fi 2769 2770if $pkg_config $sdlname --exists; then 2771 sdlconfig="$pkg_config $sdlname" 2772 sdlversion=$($sdlconfig --modversion 2>/dev/null) 2773elif has ${sdl_config}; then 2774 sdlconfig="$sdl_config" 2775 sdlversion=$($sdlconfig --version) 2776else 2777 if test "$sdl" = "yes" ; then 2778 feature_not_found "sdl" "Install SDL2-devel" 2779 fi 2780 sdl=no 2781fi 2782if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then 2783 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2 2784fi 2785 2786sdl_too_old=no 2787if test "$sdl" != "no" ; then 2788 cat > $TMPC << EOF 2789#include <SDL.h> 2790#undef main /* We don't want SDL to override our main() */ 2791int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 2792EOF 2793 sdl_cflags=$($sdlconfig --cflags 2>/dev/null) 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