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