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