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