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