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