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