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