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