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