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,7))'; then 1655 error_exit "Cannot use '$python', Python 2 >= 2.7 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 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 4603 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4604 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4605 virglrenderer="yes" 4606 else 4607 if test "$virglrenderer" = "yes" ; then 4608 feature_not_found "virglrenderer" 4609 fi 4610 virglrenderer="no" 4611 fi 4612fi 4613 4614########################################## 4615# capstone 4616 4617case "$capstone" in 4618 "" | yes) 4619 if $pkg_config capstone; then 4620 capstone=system 4621 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then 4622 capstone=git 4623 elif test -e "${source_path}/capstone/Makefile" ; then 4624 capstone=internal 4625 elif test -z "$capstone" ; then 4626 capstone=no 4627 else 4628 feature_not_found "capstone" "Install capstone devel or git submodule" 4629 fi 4630 ;; 4631 4632 system) 4633 if ! $pkg_config capstone; then 4634 feature_not_found "capstone" "Install capstone devel" 4635 fi 4636 ;; 4637esac 4638 4639case "$capstone" in 4640 git | internal) 4641 if test "$capstone" = git; then 4642 git_submodules="${git_submodules} capstone" 4643 fi 4644 mkdir -p capstone 4645 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 4646 if test "$mingw32" = "yes"; then 4647 LIBCAPSTONE=capstone.lib 4648 else 4649 LIBCAPSTONE=libcapstone.a 4650 fi 4651 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS" 4652 ;; 4653 4654 system) 4655 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 4656 LIBS="$($pkg_config --libs capstone) $LIBS" 4657 ;; 4658 4659 no) 4660 ;; 4661 *) 4662 error_exit "Unknown state for capstone: $capstone" 4663 ;; 4664esac 4665 4666########################################## 4667# check if we have fdatasync 4668 4669fdatasync=no 4670cat > $TMPC << EOF 4671#include <unistd.h> 4672int main(void) { 4673#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4674return fdatasync(0); 4675#else 4676#error Not supported 4677#endif 4678} 4679EOF 4680if compile_prog "" "" ; then 4681 fdatasync=yes 4682fi 4683 4684########################################## 4685# check if we have madvise 4686 4687madvise=no 4688cat > $TMPC << EOF 4689#include <sys/types.h> 4690#include <sys/mman.h> 4691#include <stddef.h> 4692int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4693EOF 4694if compile_prog "" "" ; then 4695 madvise=yes 4696fi 4697 4698########################################## 4699# check if we have posix_madvise 4700 4701posix_madvise=no 4702cat > $TMPC << EOF 4703#include <sys/mman.h> 4704#include <stddef.h> 4705int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4706EOF 4707if compile_prog "" "" ; then 4708 posix_madvise=yes 4709fi 4710 4711########################################## 4712# check if we have posix_memalign() 4713 4714posix_memalign=no 4715cat > $TMPC << EOF 4716#include <stdlib.h> 4717int main(void) { 4718 void *p; 4719 return posix_memalign(&p, 8, 8); 4720} 4721EOF 4722if compile_prog "" "" ; then 4723 posix_memalign=yes 4724fi 4725 4726########################################## 4727# check if we have posix_syslog 4728 4729posix_syslog=no 4730cat > $TMPC << EOF 4731#include <syslog.h> 4732int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4733EOF 4734if compile_prog "" "" ; then 4735 posix_syslog=yes 4736fi 4737 4738########################################## 4739# check if we have sem_timedwait 4740 4741sem_timedwait=no 4742cat > $TMPC << EOF 4743#include <semaphore.h> 4744int main(void) { return sem_timedwait(0, 0); } 4745EOF 4746if compile_prog "" "" ; then 4747 sem_timedwait=yes 4748fi 4749 4750########################################## 4751# check if trace backend exists 4752 4753$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4754if test "$?" -ne 0 ; then 4755 error_exit "invalid trace backends" \ 4756 "Please choose supported trace backends." 4757fi 4758 4759########################################## 4760# For 'ust' backend, test if ust headers are present 4761if have_backend "ust"; then 4762 cat > $TMPC << EOF 4763#include <lttng/tracepoint.h> 4764int main(void) { return 0; } 4765EOF 4766 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4767 if $pkg_config lttng-ust --exists; then 4768 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4769 else 4770 lttng_ust_libs="-llttng-ust -ldl" 4771 fi 4772 if $pkg_config liburcu-bp --exists; then 4773 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4774 else 4775 urcu_bp_libs="-lurcu-bp" 4776 fi 4777 4778 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 4779 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 4780 else 4781 error_exit "Trace backend 'ust' missing lttng-ust header files" 4782 fi 4783fi 4784 4785########################################## 4786# For 'dtrace' backend, test if 'dtrace' command is present 4787if have_backend "dtrace"; then 4788 if ! has 'dtrace' ; then 4789 error_exit "dtrace command is not found in PATH $PATH" 4790 fi 4791 trace_backend_stap="no" 4792 if has 'stap' ; then 4793 trace_backend_stap="yes" 4794 fi 4795fi 4796 4797########################################## 4798# check and set a backend for coroutine 4799 4800# We prefer ucontext, but it's not always possible. The fallback 4801# is sigcontext. On Windows the only valid backend is the Windows 4802# specific one. 4803 4804ucontext_works=no 4805if test "$darwin" != "yes"; then 4806 cat > $TMPC << EOF 4807#include <ucontext.h> 4808#ifdef __stub_makecontext 4809#error Ignoring glibc stub makecontext which will always fail 4810#endif 4811int main(void) { makecontext(0, 0, 0); return 0; } 4812EOF 4813 if compile_prog "" "" ; then 4814 ucontext_works=yes 4815 fi 4816fi 4817 4818if test "$coroutine" = ""; then 4819 if test "$mingw32" = "yes"; then 4820 coroutine=win32 4821 elif test "$ucontext_works" = "yes"; then 4822 coroutine=ucontext 4823 else 4824 coroutine=sigaltstack 4825 fi 4826else 4827 case $coroutine in 4828 windows) 4829 if test "$mingw32" != "yes"; then 4830 error_exit "'windows' coroutine backend only valid for Windows" 4831 fi 4832 # Unfortunately the user visible backend name doesn't match the 4833 # coroutine-*.c filename for this case, so we have to adjust it here. 4834 coroutine=win32 4835 ;; 4836 ucontext) 4837 if test "$ucontext_works" != "yes"; then 4838 feature_not_found "ucontext" 4839 fi 4840 ;; 4841 sigaltstack) 4842 if test "$mingw32" = "yes"; then 4843 error_exit "only the 'windows' coroutine backend is valid for Windows" 4844 fi 4845 ;; 4846 *) 4847 error_exit "unknown coroutine backend $coroutine" 4848 ;; 4849 esac 4850fi 4851 4852if test "$coroutine_pool" = ""; then 4853 coroutine_pool=yes 4854fi 4855 4856if test "$debug_stack_usage" = "yes"; then 4857 if test "$coroutine_pool" = "yes"; then 4858 echo "WARN: disabling coroutine pool for stack usage debugging" 4859 coroutine_pool=no 4860 fi 4861fi 4862 4863 4864########################################## 4865# check if we have open_by_handle_at 4866 4867open_by_handle_at=no 4868cat > $TMPC << EOF 4869#include <fcntl.h> 4870#if !defined(AT_EMPTY_PATH) 4871# error missing definition 4872#else 4873int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4874#endif 4875EOF 4876if compile_prog "" "" ; then 4877 open_by_handle_at=yes 4878fi 4879 4880######################################## 4881# check if we have linux/magic.h 4882 4883linux_magic_h=no 4884cat > $TMPC << EOF 4885#include <linux/magic.h> 4886int main(void) { 4887 return 0; 4888} 4889EOF 4890if compile_prog "" "" ; then 4891 linux_magic_h=yes 4892fi 4893 4894######################################## 4895# check whether we can disable warning option with a pragma (this is needed 4896# to silence warnings in the headers of some versions of external libraries). 4897# This test has to be compiled with -Werror as otherwise an unknown pragma is 4898# only a warning. 4899# 4900# If we can't selectively disable warning in the code, disable -Werror so that 4901# the build doesn't fail anyway. 4902 4903pragma_disable_unused_but_set=no 4904cat > $TMPC << EOF 4905#pragma GCC diagnostic push 4906#pragma GCC diagnostic ignored "-Wstrict-prototypes" 4907#pragma GCC diagnostic pop 4908 4909int main(void) { 4910 return 0; 4911} 4912EOF 4913if compile_prog "-Werror" "" ; then 4914 pragma_diagnostic_available=yes 4915else 4916 werror=no 4917fi 4918 4919######################################## 4920# check if we have valgrind/valgrind.h 4921 4922valgrind_h=no 4923cat > $TMPC << EOF 4924#include <valgrind/valgrind.h> 4925int main(void) { 4926 return 0; 4927} 4928EOF 4929if compile_prog "" "" ; then 4930 valgrind_h=yes 4931fi 4932 4933######################################## 4934# check if environ is declared 4935 4936has_environ=no 4937cat > $TMPC << EOF 4938#include <unistd.h> 4939int main(void) { 4940 environ = 0; 4941 return 0; 4942} 4943EOF 4944if compile_prog "" "" ; then 4945 has_environ=yes 4946fi 4947 4948######################################## 4949# check if cpuid.h is usable. 4950 4951cat > $TMPC << EOF 4952#include <cpuid.h> 4953int main(void) { 4954 unsigned a, b, c, d; 4955 int max = __get_cpuid_max(0, 0); 4956 4957 if (max >= 1) { 4958 __cpuid(1, a, b, c, d); 4959 } 4960 4961 if (max >= 7) { 4962 __cpuid_count(7, 0, a, b, c, d); 4963 } 4964 4965 return 0; 4966} 4967EOF 4968if compile_prog "" "" ; then 4969 cpuid_h=yes 4970fi 4971 4972########################################## 4973# avx2 optimization requirement check 4974# 4975# There is no point enabling this if cpuid.h is not usable, 4976# since we won't be able to select the new routines. 4977 4978if test $cpuid_h = yes; then 4979 cat > $TMPC << EOF 4980#pragma GCC push_options 4981#pragma GCC target("avx2") 4982#include <cpuid.h> 4983#include <immintrin.h> 4984static int bar(void *a) { 4985 __m256i x = *(__m256i *)a; 4986 return _mm256_testz_si256(x, x); 4987} 4988int main(int argc, char *argv[]) { return bar(argv[0]); } 4989EOF 4990 if compile_object "" ; then 4991 avx2_opt="yes" 4992 fi 4993fi 4994 4995######################################## 4996# check if __[u]int128_t is usable. 4997 4998int128=no 4999cat > $TMPC << EOF 5000#if defined(__clang_major__) && defined(__clang_minor__) 5001# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2)) 5002# error __int128_t does not work in CLANG before 3.2 5003# endif 5004#endif 5005__int128_t a; 5006__uint128_t b; 5007int main (void) { 5008 a = a + b; 5009 b = a * b; 5010 a = a * a; 5011 return 0; 5012} 5013EOF 5014if compile_prog "" "" ; then 5015 int128=yes 5016fi 5017 5018######################################### 5019# See if 128-bit atomic operations are supported. 5020 5021atomic128=no 5022if test "$int128" = "yes"; then 5023 cat > $TMPC << EOF 5024int main(void) 5025{ 5026 unsigned __int128 x = 0, y = 0; 5027 y = __atomic_load_16(&x, 0); 5028 __atomic_store_16(&x, y, 0); 5029 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5030 return 0; 5031} 5032EOF 5033 if compile_prog "" "" ; then 5034 atomic128=yes 5035 fi 5036fi 5037 5038######################################### 5039# See if 64-bit atomic operations are supported. 5040# Note that without __atomic builtins, we can only 5041# assume atomic loads/stores max at pointer size. 5042 5043cat > $TMPC << EOF 5044#include <stdint.h> 5045int main(void) 5046{ 5047 uint64_t x = 0, y = 0; 5048#ifdef __ATOMIC_RELAXED 5049 y = __atomic_load_8(&x, 0); 5050 __atomic_store_8(&x, y, 0); 5051 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5052 __atomic_exchange_8(&x, y, 0); 5053 __atomic_fetch_add_8(&x, y, 0); 5054#else 5055 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5056 __sync_lock_test_and_set(&x, y); 5057 __sync_val_compare_and_swap(&x, y, 0); 5058 __sync_fetch_and_add(&x, y); 5059#endif 5060 return 0; 5061} 5062EOF 5063if compile_prog "" "" ; then 5064 atomic64=yes 5065fi 5066 5067######################################## 5068# See if 16-byte vector operations are supported. 5069# Even without a vector unit the compiler may expand these. 5070# There is a bug in old GCC for PPC that crashes here. 5071# Unfortunately it's the system compiler for Centos 7. 5072 5073cat > $TMPC << EOF 5074typedef unsigned char U1 __attribute__((vector_size(16))); 5075typedef unsigned short U2 __attribute__((vector_size(16))); 5076typedef unsigned int U4 __attribute__((vector_size(16))); 5077typedef unsigned long long U8 __attribute__((vector_size(16))); 5078typedef signed char S1 __attribute__((vector_size(16))); 5079typedef signed short S2 __attribute__((vector_size(16))); 5080typedef signed int S4 __attribute__((vector_size(16))); 5081typedef signed long long S8 __attribute__((vector_size(16))); 5082static U1 a1, b1; 5083static U2 a2, b2; 5084static U4 a4, b4; 5085static U8 a8, b8; 5086static S1 c1; 5087static S2 c2; 5088static S4 c4; 5089static S8 c8; 5090static int i; 5091void helper(void *d, void *a, int shift, int i); 5092void helper(void *d, void *a, int shift, int i) 5093{ 5094 *(U1 *)(d + i) = *(U1 *)(a + i) << shift; 5095 *(U2 *)(d + i) = *(U2 *)(a + i) << shift; 5096 *(U4 *)(d + i) = *(U4 *)(a + i) << shift; 5097 *(U8 *)(d + i) = *(U8 *)(a + i) << shift; 5098} 5099int main(void) 5100{ 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 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8; 5107 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i; 5108 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i; 5109 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i; 5110 return 0; 5111} 5112EOF 5113 5114vector16=no 5115if compile_prog "" "" ; then 5116 vector16=yes 5117fi 5118 5119######################################## 5120# check if getauxval is available. 5121 5122getauxval=no 5123cat > $TMPC << EOF 5124#include <sys/auxv.h> 5125int main(void) { 5126 return getauxval(AT_HWCAP) == 0; 5127} 5128EOF 5129if compile_prog "" "" ; then 5130 getauxval=yes 5131fi 5132 5133######################################## 5134# check if ccache is interfering with 5135# semantic analysis of macros 5136 5137unset CCACHE_CPP2 5138ccache_cpp2=no 5139cat > $TMPC << EOF 5140static const int Z = 1; 5141#define fn() ({ Z; }) 5142#define TAUT(X) ((X) == Z) 5143#define PAREN(X, Y) (X == Y) 5144#define ID(X) (X) 5145int main(int argc, char *argv[]) 5146{ 5147 int x = 0, y = 0; 5148 x = ID(x); 5149 x = fn(); 5150 fn(); 5151 if (PAREN(x, y)) return 0; 5152 if (TAUT(Z)) return 0; 5153 return 0; 5154} 5155EOF 5156 5157if ! compile_object "-Werror"; then 5158 ccache_cpp2=yes 5159fi 5160 5161################################################# 5162# clang does not support glibc + FORTIFY_SOURCE. 5163 5164if test "$fortify_source" != "no"; then 5165 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5166 fortify_source="no"; 5167 elif test -n "$cxx" && has $cxx && 5168 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5169 fortify_source="no"; 5170 else 5171 fortify_source="yes" 5172 fi 5173fi 5174 5175############################################### 5176# Check if copy_file_range is provided by glibc 5177have_copy_file_range=no 5178cat > $TMPC << EOF 5179#include <unistd.h> 5180int main(void) { 5181 copy_file_range(0, NULL, 0, NULL, 0, 0); 5182 return 0; 5183} 5184EOF 5185if compile_prog "" "" ; then 5186 have_copy_file_range=yes 5187fi 5188 5189########################################## 5190# check if struct fsxattr is available via linux/fs.h 5191 5192have_fsxattr=no 5193cat > $TMPC << EOF 5194#include <linux/fs.h> 5195struct fsxattr foo; 5196int main(void) { 5197 return 0; 5198} 5199EOF 5200if compile_prog "" "" ; then 5201 have_fsxattr=yes 5202fi 5203 5204########################################## 5205# check for usable membarrier system call 5206if test "$membarrier" = "yes"; then 5207 have_membarrier=no 5208 if test "$mingw32" = "yes" ; then 5209 have_membarrier=yes 5210 elif test "$linux" = "yes" ; then 5211 cat > $TMPC << EOF 5212 #include <linux/membarrier.h> 5213 #include <sys/syscall.h> 5214 #include <unistd.h> 5215 #include <stdlib.h> 5216 int main(void) { 5217 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5218 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5219 exit(0); 5220 } 5221EOF 5222 if compile_prog "" "" ; then 5223 have_membarrier=yes 5224 fi 5225 fi 5226 if test "$have_membarrier" = "no"; then 5227 feature_not_found "membarrier" "membarrier system call not available" 5228 fi 5229else 5230 # Do not enable it by default even for Mingw32, because it doesn't 5231 # work on Wine. 5232 membarrier=no 5233fi 5234 5235########################################## 5236# check if rtnetlink.h exists and is useful 5237have_rtnetlink=no 5238cat > $TMPC << EOF 5239#include <linux/rtnetlink.h> 5240int main(void) { 5241 return IFLA_PROTO_DOWN; 5242} 5243EOF 5244if compile_prog "" "" ; then 5245 have_rtnetlink=yes 5246fi 5247 5248########################################## 5249# check for usable AF_VSOCK environment 5250have_af_vsock=no 5251cat > $TMPC << EOF 5252#include <errno.h> 5253#include <sys/types.h> 5254#include <sys/socket.h> 5255#if !defined(AF_VSOCK) 5256# error missing AF_VSOCK flag 5257#endif 5258#include <linux/vm_sockets.h> 5259int main(void) { 5260 int sock, ret; 5261 struct sockaddr_vm svm; 5262 socklen_t len = sizeof(svm); 5263 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5264 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5265 if ((ret == -1) && (errno == ENOTCONN)) { 5266 return 0; 5267 } 5268 return -1; 5269} 5270EOF 5271if compile_prog "" "" ; then 5272 have_af_vsock=yes 5273fi 5274 5275########################################## 5276# check for usable AF_ALG environment 5277hava_afalg=no 5278cat > $TMPC << EOF 5279#include <errno.h> 5280#include <sys/types.h> 5281#include <sys/socket.h> 5282#include <linux/if_alg.h> 5283int main(void) { 5284 int sock; 5285 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5286 return sock; 5287} 5288EOF 5289if compile_prog "" "" ; then 5290 have_afalg=yes 5291fi 5292if test "$crypto_afalg" = "yes" 5293then 5294 if test "$have_afalg" != "yes" 5295 then 5296 error_exit "AF_ALG requested but could not be detected" 5297 fi 5298fi 5299 5300 5301################################################# 5302# Check to see if we have the Hypervisor framework 5303if [ "$darwin" = "yes" ] ; then 5304 cat > $TMPC << EOF 5305#include <Hypervisor/hv.h> 5306int main() { return 0;} 5307EOF 5308 if ! compile_object ""; then 5309 hvf='no' 5310 else 5311 hvf='yes' 5312 LDFLAGS="-framework Hypervisor $LDFLAGS" 5313 fi 5314fi 5315 5316################################################# 5317# Sparc implicitly links with --relax, which is 5318# incompatible with -r, so --no-relax should be 5319# given. It does no harm to give it on other 5320# platforms too. 5321 5322# Note: the prototype is needed since QEMU_CFLAGS 5323# contains -Wmissing-prototypes 5324cat > $TMPC << EOF 5325extern int foo(void); 5326int foo(void) { return 0; } 5327EOF 5328if ! compile_object ""; then 5329 error_exit "Failed to compile object file for LD_REL_FLAGS test" 5330fi 5331for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 5332 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 5333 LD_REL_FLAGS=$i 5334 break 5335 fi 5336done 5337if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 5338 feature_not_found "modules" "Cannot find how to build relocatable objects" 5339fi 5340 5341########################################## 5342# check for sysmacros.h 5343 5344have_sysmacros=no 5345cat > $TMPC << EOF 5346#include <sys/sysmacros.h> 5347int main(void) { 5348 return makedev(0, 0); 5349} 5350EOF 5351if compile_prog "" "" ; then 5352 have_sysmacros=yes 5353fi 5354 5355########################################## 5356# Veritas HyperScale block driver VxHS 5357# Check if libvxhs is installed 5358 5359if test "$vxhs" != "no" ; then 5360 cat > $TMPC <<EOF 5361#include <stdint.h> 5362#include <qnio/qnio_api.h> 5363 5364void *vxhs_callback; 5365 5366int main(void) { 5367 iio_init(QNIO_VERSION, vxhs_callback); 5368 return 0; 5369} 5370EOF 5371 vxhs_libs="-lvxhs -lssl" 5372 if compile_prog "" "$vxhs_libs" ; then 5373 vxhs=yes 5374 else 5375 if test "$vxhs" = "yes" ; then 5376 feature_not_found "vxhs block device" "Install libvxhs See github" 5377 fi 5378 vxhs=no 5379 fi 5380fi 5381 5382########################################## 5383# check for _Static_assert() 5384 5385have_static_assert=no 5386cat > $TMPC << EOF 5387_Static_assert(1, "success"); 5388int main(void) { 5389 return 0; 5390} 5391EOF 5392if compile_prog "" "" ; then 5393 have_static_assert=yes 5394fi 5395 5396########################################## 5397# check for utmpx.h, it is missing e.g. on OpenBSD 5398 5399have_utmpx=no 5400cat > $TMPC << EOF 5401#include <utmpx.h> 5402struct utmpx user_info; 5403int main(void) { 5404 return 0; 5405} 5406EOF 5407if compile_prog "" "" ; then 5408 have_utmpx=yes 5409fi 5410 5411########################################## 5412# checks for sanitizers 5413 5414have_asan=no 5415have_ubsan=no 5416have_asan_iface_h=no 5417have_asan_iface_fiber=no 5418 5419if test "$sanitizers" = "yes" ; then 5420 write_c_skeleton 5421 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5422 have_asan=yes 5423 fi 5424 5425 # we could use a simple skeleton for flags checks, but this also 5426 # detect the static linking issue of ubsan, see also: 5427 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5428 cat > $TMPC << EOF 5429#include <stdlib.h> 5430int main(void) { 5431 void *tmp = malloc(10); 5432 return *(int *)(tmp + 2); 5433} 5434EOF 5435 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5436 have_ubsan=yes 5437 fi 5438 5439 if check_include "sanitizer/asan_interface.h" ; then 5440 have_asan_iface_h=yes 5441 fi 5442 5443 cat > $TMPC << EOF 5444#include <sanitizer/asan_interface.h> 5445int main(void) { 5446 __sanitizer_start_switch_fiber(0, 0, 0); 5447 return 0; 5448} 5449EOF 5450 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5451 have_asan_iface_fiber=yes 5452 fi 5453fi 5454 5455########################################## 5456# Docker and cross-compiler support 5457# 5458# This is specifically for building test 5459# cases for foreign architectures, not 5460# cross-compiling QEMU itself. 5461 5462if has "docker"; then 5463 docker=$($python $source_path/tests/docker/docker.py probe) 5464fi 5465 5466########################################## 5467# End of CC checks 5468# After here, no more $cc or $ld runs 5469 5470write_c_skeleton 5471 5472if test "$gcov" = "yes" ; then 5473 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 5474 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 5475elif test "$fortify_source" = "yes" ; then 5476 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 5477elif test "$debug" = "no"; then 5478 CFLAGS="-O2 $CFLAGS" 5479fi 5480 5481if test "$have_asan" = "yes"; then 5482 CFLAGS="-fsanitize=address $CFLAGS" 5483 if test "$have_asan_iface_h" = "no" ; then 5484 echo "ASAN build enabled, but ASAN header missing." \ 5485 "Without code annotation, the report may be inferior." 5486 elif test "$have_asan_iface_fiber" = "no" ; then 5487 echo "ASAN build enabled, but ASAN header is too old." \ 5488 "Without code annotation, the report may be inferior." 5489 fi 5490fi 5491if test "$have_ubsan" = "yes"; then 5492 CFLAGS="-fsanitize=undefined $CFLAGS" 5493fi 5494 5495########################################## 5496# Do we have libnfs 5497if test "$libnfs" != "no" ; then 5498 if $pkg_config --atleast-version=1.9.3 libnfs; then 5499 libnfs="yes" 5500 libnfs_libs=$($pkg_config --libs libnfs) 5501 else 5502 if test "$libnfs" = "yes" ; then 5503 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 5504 fi 5505 libnfs="no" 5506 fi 5507fi 5508 5509# Now we've finished running tests it's OK to add -Werror to the compiler flags 5510if test "$werror" = "yes"; then 5511 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 5512fi 5513 5514if test "$solaris" = "no" ; then 5515 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5516 LDFLAGS="-Wl,--warn-common $LDFLAGS" 5517 fi 5518fi 5519 5520# test if pod2man has --utf8 option 5521if pod2man --help | grep -q utf8; then 5522 POD2MAN="pod2man --utf8" 5523else 5524 POD2MAN="pod2man" 5525fi 5526 5527# Use ASLR, no-SEH and DEP if available 5528if test "$mingw32" = "yes" ; then 5529 for flag in --dynamicbase --no-seh --nxcompat; do 5530 if ld_has $flag ; then 5531 LDFLAGS="-Wl,$flag $LDFLAGS" 5532 fi 5533 done 5534fi 5535 5536qemu_confdir=$sysconfdir$confsuffix 5537qemu_moddir=$libdir$confsuffix 5538qemu_datadir=$datadir$confsuffix 5539qemu_localedir="$datadir/locale" 5540 5541# We can only support ivshmem if we have eventfd 5542if [ "$eventfd" = "yes" ]; then 5543 ivshmem=yes 5544fi 5545 5546tools="" 5547if test "$want_tools" = "yes" ; then 5548 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" 5549 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 5550 tools="qemu-nbd\$(EXESUF) $tools" 5551 fi 5552 if [ "$ivshmem" = "yes" ]; then 5553 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 5554 fi 5555fi 5556if test "$softmmu" = yes ; then 5557 if test "$linux" = yes; then 5558 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then 5559 virtfs=yes 5560 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 5561 else 5562 if test "$virtfs" = yes; then 5563 error_exit "VirtFS requires libcap devel and libattr devel" 5564 fi 5565 virtfs=no 5566 fi 5567 if test "$mpath" != no && test "$mpathpersist" = yes ; then 5568 mpath=yes 5569 else 5570 if test "$mpath" = yes; then 5571 error_exit "Multipath requires libmpathpersist devel" 5572 fi 5573 mpath=no 5574 fi 5575 tools="$tools scsi/qemu-pr-helper\$(EXESUF)" 5576 else 5577 if test "$virtfs" = yes; then 5578 error_exit "VirtFS is supported only on Linux" 5579 fi 5580 virtfs=no 5581 if test "$mpath" = yes; then 5582 error_exit "Multipath is supported only on Linux" 5583 fi 5584 mpath=no 5585 fi 5586 if test "$xkbcommon" = "yes"; then 5587 tools="qemu-keymap\$(EXESUF) $tools" 5588 fi 5589fi 5590 5591# Probe for guest agent support/options 5592 5593if [ "$guest_agent" != "no" ]; then 5594 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5595 tools="qemu-ga $tools" 5596 guest_agent=yes 5597 elif [ "$guest_agent" != yes ]; then 5598 guest_agent=no 5599 else 5600 error_exit "Guest agent is not supported on this platform" 5601 fi 5602fi 5603 5604# Guest agent Window MSI package 5605 5606if test "$guest_agent" != yes; then 5607 if test "$guest_agent_msi" = yes; then 5608 error_exit "MSI guest agent package requires guest agent enabled" 5609 fi 5610 guest_agent_msi=no 5611elif test "$mingw32" != "yes"; then 5612 if test "$guest_agent_msi" = "yes"; then 5613 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 5614 fi 5615 guest_agent_msi=no 5616elif ! has wixl; then 5617 if test "$guest_agent_msi" = "yes"; then 5618 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 5619 fi 5620 guest_agent_msi=no 5621else 5622 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 5623 # disabled explicitly 5624 if test "$guest_agent_msi" != "no"; then 5625 guest_agent_msi=yes 5626 fi 5627fi 5628 5629if test "$guest_agent_msi" = "yes"; then 5630 if test "$guest_agent_with_vss" = "yes"; then 5631 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 5632 fi 5633 5634 if test "$QEMU_GA_MANUFACTURER" = ""; then 5635 QEMU_GA_MANUFACTURER=QEMU 5636 fi 5637 5638 if test "$QEMU_GA_DISTRO" = ""; then 5639 QEMU_GA_DISTRO=Linux 5640 fi 5641 5642 if test "$QEMU_GA_VERSION" = ""; then 5643 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5644 fi 5645 5646 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5647 5648 case "$cpu" in 5649 x86_64) 5650 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5651 ;; 5652 i386) 5653 QEMU_GA_MSI_ARCH="-D Arch=32" 5654 ;; 5655 *) 5656 error_exit "CPU $cpu not supported for building installation package" 5657 ;; 5658 esac 5659fi 5660 5661# Mac OS X ships with a broken assembler 5662roms= 5663if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 5664 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 5665 "$softmmu" = yes ; then 5666 # Different host OS linkers have different ideas about the name of the ELF 5667 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5668 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5669 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5670 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5671 ld_i386_emulation="$emu" 5672 roms="optionrom" 5673 break 5674 fi 5675 done 5676fi 5677if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 5678 roms="$roms spapr-rtas" 5679fi 5680 5681if test "$cpu" = "s390x" ; then 5682 roms="$roms s390-ccw" 5683fi 5684 5685# Probe for the need for relocating the user-only binary. 5686if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 5687 textseg_addr= 5688 case "$cpu" in 5689 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 5690 # ??? Rationale for choosing this address 5691 textseg_addr=0x60000000 5692 ;; 5693 mips) 5694 # A 256M aligned address, high in the address space, with enough 5695 # room for the code_gen_buffer above it before the stack. 5696 textseg_addr=0x60000000 5697 ;; 5698 esac 5699 if [ -n "$textseg_addr" ]; then 5700 cat > $TMPC <<EOF 5701 int main(void) { return 0; } 5702EOF 5703 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 5704 if ! compile_prog "" "$textseg_ldflags"; then 5705 # In case ld does not support -Ttext-segment, edit the default linker 5706 # script via sed to set the .text start addr. This is needed on FreeBSD 5707 # at least. 5708 if ! $ld --verbose >/dev/null 2>&1; then 5709 error_exit \ 5710 "We need to link the QEMU user mode binaries at a" \ 5711 "specific text address. Unfortunately your linker" \ 5712 "doesn't support either the -Ttext-segment option or" \ 5713 "printing the default linker script with --verbose." \ 5714 "If you don't want the user mode binaries, pass the" \ 5715 "--disable-user option to configure." 5716 fi 5717 5718 $ld --verbose | sed \ 5719 -e '1,/==================================================/d' \ 5720 -e '/==================================================/,$d' \ 5721 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 5722 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 5723 textseg_ldflags="-Wl,-T../config-host.ld" 5724 fi 5725 fi 5726fi 5727 5728# Check that the C++ compiler exists and works with the C compiler. 5729# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5730if has $cxx; then 5731 cat > $TMPC <<EOF 5732int c_function(void); 5733int main(void) { return c_function(); } 5734EOF 5735 5736 compile_object 5737 5738 cat > $TMPCXX <<EOF 5739extern "C" { 5740 int c_function(void); 5741} 5742int c_function(void) { return 42; } 5743EOF 5744 5745 update_cxxflags 5746 5747 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then 5748 # C++ compiler $cxx works ok with C compiler $cc 5749 : 5750 else 5751 echo "C++ compiler $cxx does not work with C compiler $cc" 5752 echo "Disabling C++ specific optional code" 5753 cxx= 5754 fi 5755else 5756 echo "No C++ compiler available; disabling C++ specific optional code" 5757 cxx= 5758fi 5759 5760echo_version() { 5761 if test "$1" = "yes" ; then 5762 echo "($2)" 5763 fi 5764} 5765 5766# prepend pixman and ftd flags after all config tests are done 5767QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 5768QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 5769libs_softmmu="$pixman_libs $libs_softmmu" 5770 5771echo "Install prefix $prefix" 5772echo "BIOS directory $(eval echo $qemu_datadir)" 5773echo "firmware path $(eval echo $firmwarepath)" 5774echo "binary directory $(eval echo $bindir)" 5775echo "library directory $(eval echo $libdir)" 5776echo "module directory $(eval echo $qemu_moddir)" 5777echo "libexec directory $(eval echo $libexecdir)" 5778echo "include directory $(eval echo $includedir)" 5779echo "config directory $(eval echo $sysconfdir)" 5780if test "$mingw32" = "no" ; then 5781echo "local state directory $(eval echo $local_statedir)" 5782echo "Manual directory $(eval echo $mandir)" 5783echo "ELF interp prefix $interp_prefix" 5784else 5785echo "local state directory queried at runtime" 5786echo "Windows SDK $win_sdk" 5787fi 5788echo "Source path $source_path" 5789echo "GIT binary $git" 5790echo "GIT submodules $git_submodules" 5791echo "C compiler $cc" 5792echo "Host C compiler $host_cc" 5793echo "C++ compiler $cxx" 5794echo "Objective-C compiler $objcc" 5795echo "ARFLAGS $ARFLAGS" 5796echo "CFLAGS $CFLAGS" 5797echo "QEMU_CFLAGS $QEMU_CFLAGS" 5798echo "LDFLAGS $LDFLAGS" 5799echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 5800echo "make $make" 5801echo "install $install" 5802echo "python $python" 5803if test "$slirp" = "yes" ; then 5804 echo "smbd $smbd" 5805fi 5806echo "module support $modules" 5807echo "host CPU $cpu" 5808echo "host big endian $bigendian" 5809echo "target list $target_list" 5810echo "gprof enabled $gprof" 5811echo "sparse enabled $sparse" 5812echo "strip binaries $strip_opt" 5813echo "profiler $profiler" 5814echo "static build $static" 5815if test "$darwin" = "yes" ; then 5816 echo "Cocoa support $cocoa" 5817fi 5818echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 5819echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 5820echo "GTK GL support $gtk_gl" 5821echo "VTE support $vte $(echo_version $vte $vteversion)" 5822echo "TLS priority $tls_priority" 5823echo "GNUTLS support $gnutls" 5824echo "GNUTLS rnd $gnutls_rnd" 5825echo "libgcrypt $gcrypt" 5826echo "libgcrypt kdf $gcrypt_kdf" 5827echo "nettle $nettle $(echo_version $nettle $nettle_version)" 5828echo "nettle kdf $nettle_kdf" 5829echo "libtasn1 $tasn1" 5830echo "curses support $curses" 5831echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 5832echo "curl support $curl" 5833echo "mingw32 support $mingw32" 5834echo "Audio drivers $audio_drv_list" 5835echo "Block whitelist (rw) $block_drv_rw_whitelist" 5836echo "Block whitelist (ro) $block_drv_ro_whitelist" 5837echo "VirtFS support $virtfs" 5838echo "Multipath support $mpath" 5839echo "VNC support $vnc" 5840if test "$vnc" = "yes" ; then 5841 echo "VNC SASL support $vnc_sasl" 5842 echo "VNC JPEG support $vnc_jpeg" 5843 echo "VNC PNG support $vnc_png" 5844fi 5845if test -n "$sparc_cpu"; then 5846 echo "Target Sparc Arch $sparc_cpu" 5847fi 5848echo "xen support $xen" 5849if test "$xen" = "yes" ; then 5850 echo "xen ctrl version $xen_ctrl_version" 5851 echo "pv dom build $xen_pv_domain_build" 5852fi 5853echo "brlapi support $brlapi" 5854echo "bluez support $bluez" 5855echo "Documentation $docs" 5856echo "PIE $pie" 5857echo "vde support $vde" 5858echo "netmap support $netmap" 5859echo "Linux AIO support $linux_aio" 5860echo "ATTR/XATTR support $attr" 5861echo "Install blobs $blobs" 5862echo "KVM support $kvm" 5863echo "HAX support $hax" 5864echo "HVF support $hvf" 5865echo "WHPX support $whpx" 5866echo "TCG support $tcg" 5867if test "$tcg" = "yes" ; then 5868 echo "TCG debug enabled $debug_tcg" 5869 echo "TCG interpreter $tcg_interpreter" 5870fi 5871echo "malloc trim support $malloc_trim" 5872echo "RDMA support $rdma" 5873echo "fdt support $fdt" 5874echo "membarrier $membarrier" 5875echo "preadv support $preadv" 5876echo "fdatasync $fdatasync" 5877echo "madvise $madvise" 5878echo "posix_madvise $posix_madvise" 5879echo "posix_memalign $posix_memalign" 5880echo "libcap-ng support $cap_ng" 5881echo "vhost-net support $vhost_net" 5882echo "vhost-crypto support $vhost_crypto" 5883echo "vhost-scsi support $vhost_scsi" 5884echo "vhost-vsock support $vhost_vsock" 5885echo "vhost-user support $vhost_user" 5886echo "Trace backends $trace_backends" 5887if have_backend "simple"; then 5888echo "Trace output file $trace_file-<pid>" 5889fi 5890echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 5891echo "rbd support $rbd" 5892echo "xfsctl support $xfs" 5893echo "smartcard support $smartcard" 5894echo "libusb $libusb" 5895echo "usb net redir $usb_redir" 5896echo "OpenGL support $opengl" 5897echo "OpenGL dmabufs $opengl_dmabuf" 5898echo "libiscsi support $libiscsi" 5899echo "libnfs support $libnfs" 5900echo "build guest agent $guest_agent" 5901echo "QGA VSS support $guest_agent_with_vss" 5902echo "QGA w32 disk info $guest_agent_ntddscsi" 5903echo "QGA MSI support $guest_agent_msi" 5904echo "seccomp support $seccomp" 5905echo "coroutine backend $coroutine" 5906echo "coroutine pool $coroutine_pool" 5907echo "debug stack usage $debug_stack_usage" 5908echo "crypto afalg $crypto_afalg" 5909echo "GlusterFS support $glusterfs" 5910echo "gcov $gcov_tool" 5911echo "gcov enabled $gcov" 5912echo "TPM support $tpm" 5913echo "libssh2 support $libssh2" 5914echo "TPM passthrough $tpm_passthrough" 5915echo "TPM emulator $tpm_emulator" 5916echo "QOM debugging $qom_cast_debug" 5917echo "Live block migration $live_block_migration" 5918echo "lzo support $lzo" 5919echo "snappy support $snappy" 5920echo "bzip2 support $bzip2" 5921echo "NUMA host support $numa" 5922echo "libxml2 $libxml2" 5923echo "tcmalloc support $tcmalloc" 5924echo "jemalloc support $jemalloc" 5925echo "avx2 optimization $avx2_opt" 5926echo "replication support $replication" 5927echo "VxHS block device $vxhs" 5928echo "capstone $capstone" 5929echo "docker $docker" 5930 5931if test "$sdl_too_old" = "yes"; then 5932echo "-> Your SDL version is too old - please upgrade to have SDL support" 5933fi 5934 5935if test "$gtkabi" = "2.0"; then 5936 echo 5937 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in" 5938 echo "WARNING: future releases. Please switch to using GTK 3.0" 5939fi 5940 5941if test "$sdlabi" = "1.2"; then 5942 echo 5943 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in" 5944 echo "WARNING: future releases. Please switch to using SDL 2.0" 5945fi 5946 5947if test "$supported_cpu" = "no"; then 5948 echo 5949 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 5950 echo 5951 echo "CPU host architecture $cpu support is not currently maintained." 5952 echo "The QEMU project intends to remove support for this host CPU in" 5953 echo "a future release if nobody volunteers to maintain it and to" 5954 echo "provide a build host for our continuous integration setup." 5955 echo "configure has succeeded and you can continue to build, but" 5956 echo "if you care about QEMU on this platform you should contact" 5957 echo "us upstream at qemu-devel@nongnu.org." 5958fi 5959 5960if test "$supported_os" = "no"; then 5961 echo 5962 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 5963 echo 5964 echo "Host OS $targetos support is not currently maintained." 5965 echo "The QEMU project intends to remove support for this host OS in" 5966 echo "a future release if nobody volunteers to maintain it and to" 5967 echo "provide a build host for our continuous integration setup." 5968 echo "configure has succeeded and you can continue to build, but" 5969 echo "if you care about QEMU on this platform you should contact" 5970 echo "us upstream at qemu-devel@nongnu.org." 5971fi 5972 5973config_host_mak="config-host.mak" 5974 5975echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 5976 5977echo "# Automatically generated by configure - do not modify" > $config_host_mak 5978echo >> $config_host_mak 5979 5980echo all: >> $config_host_mak 5981echo "prefix=$prefix" >> $config_host_mak 5982echo "bindir=$bindir" >> $config_host_mak 5983echo "libdir=$libdir" >> $config_host_mak 5984echo "libexecdir=$libexecdir" >> $config_host_mak 5985echo "includedir=$includedir" >> $config_host_mak 5986echo "mandir=$mandir" >> $config_host_mak 5987echo "sysconfdir=$sysconfdir" >> $config_host_mak 5988echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 5989echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 5990echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 5991echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 5992echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 5993if test "$mingw32" = "no" ; then 5994 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 5995fi 5996echo "qemu_helperdir=$libexecdir" >> $config_host_mak 5997echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 5998echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 5999echo "GIT=$git" >> $config_host_mak 6000echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6001echo "GIT_UPDATE=$git_update" >> $config_host_mak 6002 6003echo "ARCH=$ARCH" >> $config_host_mak 6004 6005if test "$debug_tcg" = "yes" ; then 6006 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6007fi 6008if test "$strip_opt" = "yes" ; then 6009 echo "STRIP=${strip}" >> $config_host_mak 6010fi 6011if test "$bigendian" = "yes" ; then 6012 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6013fi 6014if test "$mingw32" = "yes" ; then 6015 echo "CONFIG_WIN32=y" >> $config_host_mak 6016 rc_version=$(cat $source_path/VERSION) 6017 version_major=${rc_version%%.*} 6018 rc_version=${rc_version#*.} 6019 version_minor=${rc_version%%.*} 6020 rc_version=${rc_version#*.} 6021 version_subminor=${rc_version%%.*} 6022 version_micro=0 6023 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6024 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6025 if test "$guest_agent_with_vss" = "yes" ; then 6026 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6027 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6028 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6029 fi 6030 if test "$guest_agent_ntddscsi" = "yes" ; then 6031 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 6032 fi 6033 if test "$guest_agent_msi" = "yes"; then 6034 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6035 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6036 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6037 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6038 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6039 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6040 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6041 fi 6042else 6043 echo "CONFIG_POSIX=y" >> $config_host_mak 6044fi 6045 6046if test "$linux" = "yes" ; then 6047 echo "CONFIG_LINUX=y" >> $config_host_mak 6048fi 6049 6050if test "$darwin" = "yes" ; then 6051 echo "CONFIG_DARWIN=y" >> $config_host_mak 6052fi 6053 6054if test "$solaris" = "yes" ; then 6055 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6056fi 6057if test "$haiku" = "yes" ; then 6058 echo "CONFIG_HAIKU=y" >> $config_host_mak 6059fi 6060if test "$static" = "yes" ; then 6061 echo "CONFIG_STATIC=y" >> $config_host_mak 6062fi 6063if test "$profiler" = "yes" ; then 6064 echo "CONFIG_PROFILER=y" >> $config_host_mak 6065fi 6066if test "$slirp" = "yes" ; then 6067 echo "CONFIG_SLIRP=y" >> $config_host_mak 6068 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6069fi 6070if test "$vde" = "yes" ; then 6071 echo "CONFIG_VDE=y" >> $config_host_mak 6072 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6073fi 6074if test "$netmap" = "yes" ; then 6075 echo "CONFIG_NETMAP=y" >> $config_host_mak 6076fi 6077if test "$l2tpv3" = "yes" ; then 6078 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6079fi 6080if test "$cap_ng" = "yes" ; then 6081 echo "CONFIG_LIBCAP=y" >> $config_host_mak 6082fi 6083echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6084for drv in $audio_drv_list; do 6085 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6086 case "$drv" in 6087 alsa | oss | pa | sdl) 6088 echo "$def=m" >> $config_host_mak ;; 6089 *) 6090 echo "$def=y" >> $config_host_mak ;; 6091 esac 6092done 6093echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6094echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6095echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6096echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6097echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6098if test "$audio_pt_int" = "yes" ; then 6099 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 6100fi 6101if test "$audio_win_int" = "yes" ; then 6102 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6103fi 6104echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6105echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6106if test "$vnc" = "yes" ; then 6107 echo "CONFIG_VNC=y" >> $config_host_mak 6108fi 6109if test "$vnc_sasl" = "yes" ; then 6110 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6111fi 6112if test "$vnc_jpeg" = "yes" ; then 6113 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6114fi 6115if test "$vnc_png" = "yes" ; then 6116 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6117fi 6118if test "$xkbcommon" = "yes" ; then 6119 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6120 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6121fi 6122if test "$fnmatch" = "yes" ; then 6123 echo "CONFIG_FNMATCH=y" >> $config_host_mak 6124fi 6125if test "$xfs" = "yes" ; then 6126 echo "CONFIG_XFS=y" >> $config_host_mak 6127fi 6128qemu_version=$(head $source_path/VERSION) 6129echo "VERSION=$qemu_version" >>$config_host_mak 6130echo "PKGVERSION=$pkgversion" >>$config_host_mak 6131echo "SRC_PATH=$source_path" >> $config_host_mak 6132echo "TARGET_LIST=$target_list" >> $config_host_mak 6133if [ "$docs" = "yes" ] ; then 6134 echo "BUILD_DOCS=yes" >> $config_host_mak 6135fi 6136if test "$modules" = "yes"; then 6137 # $shacmd can generate a hash started with digit, which the compiler doesn't 6138 # like as an symbol. So prefix it with an underscore 6139 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6140 echo "CONFIG_MODULES=y" >> $config_host_mak 6141fi 6142if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then 6143 echo "CONFIG_X11=y" >> $config_host_mak 6144 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6145 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6146fi 6147if test "$sdl" = "yes" ; then 6148 echo "CONFIG_SDL=m" >> $config_host_mak 6149 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 6150 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6151 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6152fi 6153if test "$cocoa" = "yes" ; then 6154 echo "CONFIG_COCOA=y" >> $config_host_mak 6155fi 6156if test "$curses" = "yes" ; then 6157 echo "CONFIG_CURSES=m" >> $config_host_mak 6158 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6159 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6160fi 6161if test "$pipe2" = "yes" ; then 6162 echo "CONFIG_PIPE2=y" >> $config_host_mak 6163fi 6164if test "$accept4" = "yes" ; then 6165 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6166fi 6167if test "$splice" = "yes" ; then 6168 echo "CONFIG_SPLICE=y" >> $config_host_mak 6169fi 6170if test "$eventfd" = "yes" ; then 6171 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6172fi 6173if test "$memfd" = "yes" ; then 6174 echo "CONFIG_MEMFD=y" >> $config_host_mak 6175fi 6176if test "$fallocate" = "yes" ; then 6177 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6178fi 6179if test "$fallocate_punch_hole" = "yes" ; then 6180 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6181fi 6182if test "$fallocate_zero_range" = "yes" ; then 6183 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6184fi 6185if test "$posix_fallocate" = "yes" ; then 6186 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6187fi 6188if test "$sync_file_range" = "yes" ; then 6189 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6190fi 6191if test "$fiemap" = "yes" ; then 6192 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6193fi 6194if test "$dup3" = "yes" ; then 6195 echo "CONFIG_DUP3=y" >> $config_host_mak 6196fi 6197if test "$ppoll" = "yes" ; then 6198 echo "CONFIG_PPOLL=y" >> $config_host_mak 6199fi 6200if test "$prctl_pr_set_timerslack" = "yes" ; then 6201 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6202fi 6203if test "$epoll" = "yes" ; then 6204 echo "CONFIG_EPOLL=y" >> $config_host_mak 6205fi 6206if test "$epoll_create1" = "yes" ; then 6207 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6208fi 6209if test "$sendfile" = "yes" ; then 6210 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6211fi 6212if test "$timerfd" = "yes" ; then 6213 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6214fi 6215if test "$setns" = "yes" ; then 6216 echo "CONFIG_SETNS=y" >> $config_host_mak 6217fi 6218if test "$clock_adjtime" = "yes" ; then 6219 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6220fi 6221if test "$syncfs" = "yes" ; then 6222 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6223fi 6224if test "$inotify" = "yes" ; then 6225 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6226fi 6227if test "$inotify1" = "yes" ; then 6228 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6229fi 6230if test "$sem_timedwait" = "yes" ; then 6231 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6232fi 6233if test "$byteswap_h" = "yes" ; then 6234 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6235fi 6236if test "$bswap_h" = "yes" ; then 6237 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6238fi 6239if test "$curl" = "yes" ; then 6240 echo "CONFIG_CURL=m" >> $config_host_mak 6241 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6242 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6243fi 6244if test "$brlapi" = "yes" ; then 6245 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6246 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6247fi 6248if test "$bluez" = "yes" ; then 6249 echo "CONFIG_BLUEZ=y" >> $config_host_mak 6250 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 6251fi 6252if test "$glib_subprocess" = "yes" ; then 6253 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak 6254fi 6255if test "$gtk" = "yes" ; then 6256 echo "CONFIG_GTK=m" >> $config_host_mak 6257 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak 6258 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6259 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6260 if test "$gtk_gl" = "yes" ; then 6261 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6262 fi 6263fi 6264echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6265if test "$gnutls" = "yes" ; then 6266 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6267fi 6268if test "$gnutls_rnd" = "yes" ; then 6269 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak 6270fi 6271if test "$gcrypt" = "yes" ; then 6272 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6273 if test "$gcrypt_hmac" = "yes" ; then 6274 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6275 fi 6276 if test "$gcrypt_kdf" = "yes" ; then 6277 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak 6278 fi 6279fi 6280if test "$nettle" = "yes" ; then 6281 echo "CONFIG_NETTLE=y" >> $config_host_mak 6282 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6283 if test "$nettle_kdf" = "yes" ; then 6284 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak 6285 fi 6286fi 6287if test "$tasn1" = "yes" ; then 6288 echo "CONFIG_TASN1=y" >> $config_host_mak 6289fi 6290if test "$have_ifaddrs_h" = "yes" ; then 6291 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6292fi 6293if test "$have_broken_size_max" = "yes" ; then 6294 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6295fi 6296 6297# Work around a system header bug with some kernel/XFS header 6298# versions where they both try to define 'struct fsxattr': 6299# xfs headers will not try to redefine structs from linux headers 6300# if this macro is set. 6301if test "$have_fsxattr" = "yes" ; then 6302 echo "HAVE_FSXATTR=y" >> $config_host_mak 6303fi 6304if test "$have_copy_file_range" = "yes" ; then 6305 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6306fi 6307if test "$vte" = "yes" ; then 6308 echo "CONFIG_VTE=y" >> $config_host_mak 6309 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6310 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6311fi 6312if test "$virglrenderer" = "yes" ; then 6313 echo "CONFIG_VIRGL=y" >> $config_host_mak 6314 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6315 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6316fi 6317if test "$xen" = "yes" ; then 6318 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6319 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6320 if test "$xen_pv_domain_build" = "yes" ; then 6321 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 6322 fi 6323fi 6324if test "$linux_aio" = "yes" ; then 6325 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6326fi 6327if test "$attr" = "yes" ; then 6328 echo "CONFIG_ATTR=y" >> $config_host_mak 6329fi 6330if test "$libattr" = "yes" ; then 6331 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6332fi 6333if test "$virtfs" = "yes" ; then 6334 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6335fi 6336if test "$mpath" = "yes" ; then 6337 echo "CONFIG_MPATH=y" >> $config_host_mak 6338fi 6339if test "$vhost_scsi" = "yes" ; then 6340 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6341fi 6342if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then 6343 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 6344fi 6345if test "$vhost_crypto" = "yes" ; then 6346 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6347fi 6348if test "$vhost_vsock" = "yes" ; then 6349 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6350fi 6351if test "$vhost_user" = "yes" ; then 6352 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6353fi 6354if test "$blobs" = "yes" ; then 6355 echo "INSTALL_BLOBS=yes" >> $config_host_mak 6356fi 6357if test "$iovec" = "yes" ; then 6358 echo "CONFIG_IOVEC=y" >> $config_host_mak 6359fi 6360if test "$preadv" = "yes" ; then 6361 echo "CONFIG_PREADV=y" >> $config_host_mak 6362fi 6363if test "$fdt" != "no" ; then 6364 echo "CONFIG_FDT=y" >> $config_host_mak 6365fi 6366if test "$membarrier" = "yes" ; then 6367 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6368fi 6369if test "$signalfd" = "yes" ; then 6370 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6371fi 6372if test "$tcg" = "yes"; then 6373 echo "CONFIG_TCG=y" >> $config_host_mak 6374 if test "$tcg_interpreter" = "yes" ; then 6375 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6376 fi 6377fi 6378if test "$fdatasync" = "yes" ; then 6379 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6380fi 6381if test "$madvise" = "yes" ; then 6382 echo "CONFIG_MADVISE=y" >> $config_host_mak 6383fi 6384if test "$posix_madvise" = "yes" ; then 6385 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6386fi 6387if test "$posix_memalign" = "yes" ; then 6388 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6389fi 6390 6391if test "$spice" = "yes" ; then 6392 echo "CONFIG_SPICE=y" >> $config_host_mak 6393fi 6394 6395if test "$smartcard" = "yes" ; then 6396 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6397 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6398 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6399fi 6400 6401if test "$libusb" = "yes" ; then 6402 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6403 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6404 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6405fi 6406 6407if test "$usb_redir" = "yes" ; then 6408 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6409 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6410 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6411fi 6412 6413if test "$opengl" = "yes" ; then 6414 echo "CONFIG_OPENGL=y" >> $config_host_mak 6415 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6416 if test "$opengl_dmabuf" = "yes" ; then 6417 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6418 fi 6419fi 6420 6421if test "$malloc_trim" = "yes" ; then 6422 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 6423fi 6424 6425if test "$avx2_opt" = "yes" ; then 6426 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6427fi 6428 6429if test "$lzo" = "yes" ; then 6430 echo "CONFIG_LZO=y" >> $config_host_mak 6431fi 6432 6433if test "$snappy" = "yes" ; then 6434 echo "CONFIG_SNAPPY=y" >> $config_host_mak 6435fi 6436 6437if test "$bzip2" = "yes" ; then 6438 echo "CONFIG_BZIP2=y" >> $config_host_mak 6439 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 6440fi 6441 6442if test "$libiscsi" = "yes" ; then 6443 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 6444 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 6445 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6446fi 6447 6448if test "$libnfs" = "yes" ; then 6449 echo "CONFIG_LIBNFS=m" >> $config_host_mak 6450 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 6451fi 6452 6453if test "$seccomp" = "yes"; then 6454 echo "CONFIG_SECCOMP=y" >> $config_host_mak 6455 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 6456 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 6457fi 6458 6459# XXX: suppress that 6460if [ "$bsd" = "yes" ] ; then 6461 echo "CONFIG_BSD=y" >> $config_host_mak 6462fi 6463 6464if test "$localtime_r" = "yes" ; then 6465 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 6466fi 6467if test "$qom_cast_debug" = "yes" ; then 6468 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 6469fi 6470if test "$rbd" = "yes" ; then 6471 echo "CONFIG_RBD=m" >> $config_host_mak 6472 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 6473 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 6474fi 6475 6476echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 6477if test "$coroutine_pool" = "yes" ; then 6478 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 6479else 6480 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 6481fi 6482 6483if test "$debug_stack_usage" = "yes" ; then 6484 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 6485fi 6486 6487if test "$crypto_afalg" = "yes" ; then 6488 echo "CONFIG_AF_ALG=y" >> $config_host_mak 6489fi 6490 6491if test "$open_by_handle_at" = "yes" ; then 6492 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 6493fi 6494 6495if test "$linux_magic_h" = "yes" ; then 6496 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 6497fi 6498 6499if test "$pragma_diagnostic_available" = "yes" ; then 6500 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 6501fi 6502 6503if test "$valgrind_h" = "yes" ; then 6504 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 6505fi 6506 6507if test "$have_asan_iface_fiber" = "yes" ; then 6508 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 6509fi 6510 6511if test "$has_environ" = "yes" ; then 6512 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 6513fi 6514 6515if test "$cpuid_h" = "yes" ; then 6516 echo "CONFIG_CPUID_H=y" >> $config_host_mak 6517fi 6518 6519if test "$int128" = "yes" ; then 6520 echo "CONFIG_INT128=y" >> $config_host_mak 6521fi 6522 6523if test "$atomic128" = "yes" ; then 6524 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 6525fi 6526 6527if test "$atomic64" = "yes" ; then 6528 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 6529fi 6530 6531if test "$vector16" = "yes" ; then 6532 echo "CONFIG_VECTOR16=y" >> $config_host_mak 6533fi 6534 6535if test "$getauxval" = "yes" ; then 6536 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 6537fi 6538 6539if test "$glusterfs" = "yes" ; then 6540 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 6541 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 6542 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 6543fi 6544 6545if test "$glusterfs_xlator_opt" = "yes" ; then 6546 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 6547fi 6548 6549if test "$glusterfs_discard" = "yes" ; then 6550 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 6551fi 6552 6553if test "$glusterfs_fallocate" = "yes" ; then 6554 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 6555fi 6556 6557if test "$glusterfs_zerofill" = "yes" ; then 6558 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 6559fi 6560 6561if test "$libssh2" = "yes" ; then 6562 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 6563 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 6564 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 6565fi 6566 6567if test "$live_block_migration" = "yes" ; then 6568 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 6569fi 6570 6571if test "$tpm" = "yes"; then 6572 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 6573 # TPM passthrough support? 6574 if test "$tpm_passthrough" = "yes"; then 6575 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 6576 fi 6577 # TPM emulator support? 6578 if test "$tpm_emulator" = "yes"; then 6579 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak 6580 fi 6581fi 6582 6583echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 6584if have_backend "nop"; then 6585 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 6586fi 6587if have_backend "simple"; then 6588 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 6589 # Set the appropriate trace file. 6590 trace_file="\"$trace_file-\" FMT_pid" 6591fi 6592if have_backend "log"; then 6593 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 6594fi 6595if have_backend "ust"; then 6596 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6597fi 6598if have_backend "dtrace"; then 6599 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 6600 if test "$trace_backend_stap" = "yes" ; then 6601 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 6602 fi 6603fi 6604if have_backend "ftrace"; then 6605 if test "$linux" = "yes" ; then 6606 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6607 else 6608 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6609 fi 6610fi 6611if have_backend "syslog"; then 6612 if test "$posix_syslog" = "yes" ; then 6613 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 6614 else 6615 feature_not_found "syslog(trace backend)" "syslog not available" 6616 fi 6617fi 6618echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 6619 6620if test "$rdma" = "yes" ; then 6621 echo "CONFIG_RDMA=y" >> $config_host_mak 6622 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 6623fi 6624 6625if test "$have_rtnetlink" = "yes" ; then 6626 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6627fi 6628 6629if test "$libxml2" = "yes" ; then 6630 echo "CONFIG_LIBXML2=y" >> $config_host_mak 6631 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 6632 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 6633fi 6634 6635if test "$replication" = "yes" ; then 6636 echo "CONFIG_REPLICATION=y" >> $config_host_mak 6637fi 6638 6639if test "$have_af_vsock" = "yes" ; then 6640 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 6641fi 6642 6643if test "$have_sysmacros" = "yes" ; then 6644 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 6645fi 6646 6647if test "$have_static_assert" = "yes" ; then 6648 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 6649fi 6650 6651if test "$have_utmpx" = "yes" ; then 6652 echo "HAVE_UTMPX=y" >> $config_host_mak 6653fi 6654 6655if test "$ivshmem" = "yes" ; then 6656 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6657fi 6658if test "$capstone" != "no" ; then 6659 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 6660fi 6661 6662# Hold two types of flag: 6663# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6664# a thread we have a handle to 6665# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 6666# platform 6667if test "$pthread_setname_np" = "yes" ; then 6668 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6669 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 6670fi 6671 6672if test "$vxhs" = "yes" ; then 6673 echo "CONFIG_VXHS=y" >> $config_host_mak 6674 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 6675fi 6676 6677if test "$tcg_interpreter" = "yes"; then 6678 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 6679elif test "$ARCH" = "sparc64" ; then 6680 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 6681elif test "$ARCH" = "s390x" ; then 6682 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 6683elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 6684 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 6685elif test "$ARCH" = "ppc64" ; then 6686 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 6687else 6688 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 6689fi 6690QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES" 6691 6692echo "TOOLS=$tools" >> $config_host_mak 6693echo "ROMS=$roms" >> $config_host_mak 6694echo "MAKE=$make" >> $config_host_mak 6695echo "INSTALL=$install" >> $config_host_mak 6696echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 6697echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 6698echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 6699echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 6700echo "PYTHON=$python" >> $config_host_mak 6701echo "CC=$cc" >> $config_host_mak 6702if $iasl -h > /dev/null 2>&1; then 6703 echo "IASL=$iasl" >> $config_host_mak 6704fi 6705echo "CC_I386=$cc_i386" >> $config_host_mak 6706echo "HOST_CC=$host_cc" >> $config_host_mak 6707echo "CXX=$cxx" >> $config_host_mak 6708echo "OBJCC=$objcc" >> $config_host_mak 6709echo "AR=$ar" >> $config_host_mak 6710echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6711echo "AS=$as" >> $config_host_mak 6712echo "CCAS=$ccas" >> $config_host_mak 6713echo "CPP=$cpp" >> $config_host_mak 6714echo "OBJCOPY=$objcopy" >> $config_host_mak 6715echo "LD=$ld" >> $config_host_mak 6716echo "RANLIB=$ranlib" >> $config_host_mak 6717echo "NM=$nm" >> $config_host_mak 6718echo "WINDRES=$windres" >> $config_host_mak 6719echo "CFLAGS=$CFLAGS" >> $config_host_mak 6720echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6721echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6722echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6723echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 6724if test "$sparse" = "yes" ; then 6725 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 6726 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 6727 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 6728 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 6729 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 6730fi 6731if test "$cross_prefix" != ""; then 6732 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 6733else 6734 echo "AUTOCONF_HOST := " >> $config_host_mak 6735fi 6736echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 6737echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 6738echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 6739echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 6740echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6741echo "LIBS+=$LIBS" >> $config_host_mak 6742echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 6743echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 6744echo "EXESUF=$EXESUF" >> $config_host_mak 6745echo "DSOSUF=$DSOSUF" >> $config_host_mak 6746echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 6747echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 6748echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6749echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6750echo "POD2MAN=$POD2MAN" >> $config_host_mak 6751echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 6752if test "$gcov" = "yes" ; then 6753 echo "CONFIG_GCOV=y" >> $config_host_mak 6754 echo "GCOV=$gcov_tool" >> $config_host_mak 6755fi 6756 6757if test "$docker" != "no"; then 6758 echo "HAVE_USER_DOCKER=y" >> $config_host_mak 6759fi 6760 6761# use included Linux headers 6762if test "$linux" = "yes" ; then 6763 mkdir -p linux-headers 6764 case "$cpu" in 6765 i386|x86_64|x32) 6766 linux_arch=x86 6767 ;; 6768 ppcemb|ppc|ppc64) 6769 linux_arch=powerpc 6770 ;; 6771 s390x) 6772 linux_arch=s390 6773 ;; 6774 aarch64) 6775 linux_arch=arm64 6776 ;; 6777 mips64) 6778 linux_arch=mips 6779 ;; 6780 *) 6781 # For most CPUs the kernel architecture name and QEMU CPU name match. 6782 linux_arch="$cpu" 6783 ;; 6784 esac 6785 # For non-KVM architectures we will not have asm headers 6786 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 6787 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 6788 fi 6789fi 6790 6791for target in $target_list; do 6792target_dir="$target" 6793config_target_mak=$target_dir/config-target.mak 6794target_name=$(echo $target | cut -d '-' -f 1) 6795target_bigendian="no" 6796 6797case "$target_name" in 6798 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 6799 target_bigendian=yes 6800 ;; 6801esac 6802target_softmmu="no" 6803target_user_only="no" 6804target_linux_user="no" 6805target_bsd_user="no" 6806case "$target" in 6807 ${target_name}-softmmu) 6808 target_softmmu="yes" 6809 ;; 6810 ${target_name}-linux-user) 6811 target_user_only="yes" 6812 target_linux_user="yes" 6813 ;; 6814 ${target_name}-bsd-user) 6815 target_user_only="yes" 6816 target_bsd_user="yes" 6817 ;; 6818 *) 6819 error_exit "Target '$target' not recognised" 6820 exit 1 6821 ;; 6822esac 6823 6824mkdir -p $target_dir 6825echo "# Automatically generated by configure - do not modify" > $config_target_mak 6826 6827bflt="no" 6828mttcg="no" 6829interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 6830gdb_xml_files="" 6831 6832TARGET_ARCH="$target_name" 6833TARGET_BASE_ARCH="" 6834TARGET_ABI_DIR="" 6835 6836case "$target_name" in 6837 i386) 6838 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml" 6839 ;; 6840 x86_64) 6841 TARGET_BASE_ARCH=i386 6842 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml" 6843 ;; 6844 alpha) 6845 mttcg="yes" 6846 ;; 6847 arm|armeb) 6848 TARGET_ARCH=arm 6849 bflt="yes" 6850 mttcg="yes" 6851 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 6852 ;; 6853 aarch64|aarch64_be) 6854 TARGET_ARCH=aarch64 6855 TARGET_BASE_ARCH=arm 6856 bflt="yes" 6857 mttcg="yes" 6858 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 6859 ;; 6860 cris) 6861 ;; 6862 hppa) 6863 mttcg="yes" 6864 ;; 6865 lm32) 6866 ;; 6867 m68k) 6868 bflt="yes" 6869 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 6870 ;; 6871 microblaze|microblazeel) 6872 TARGET_ARCH=microblaze 6873 bflt="yes" 6874 echo "TARGET_ABI32=y" >> $config_target_mak 6875 ;; 6876 mips|mipsel) 6877 TARGET_ARCH=mips 6878 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 6879 ;; 6880 mipsn32|mipsn32el) 6881 TARGET_ARCH=mips64 6882 TARGET_BASE_ARCH=mips 6883 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 6884 echo "TARGET_ABI32=y" >> $config_target_mak 6885 ;; 6886 mips64|mips64el) 6887 TARGET_ARCH=mips64 6888 TARGET_BASE_ARCH=mips 6889 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 6890 ;; 6891 moxie) 6892 ;; 6893 nios2) 6894 ;; 6895 or1k) 6896 TARGET_ARCH=openrisc 6897 TARGET_BASE_ARCH=openrisc 6898 ;; 6899 ppc) 6900 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 6901 ;; 6902 ppcemb) 6903 TARGET_BASE_ARCH=ppc 6904 TARGET_ABI_DIR=ppc 6905 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 6906 ;; 6907 ppc64) 6908 TARGET_BASE_ARCH=ppc 6909 TARGET_ABI_DIR=ppc 6910 mttcg=yes 6911 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6912 ;; 6913 ppc64le) 6914 TARGET_ARCH=ppc64 6915 TARGET_BASE_ARCH=ppc 6916 TARGET_ABI_DIR=ppc 6917 mttcg=yes 6918 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6919 ;; 6920 ppc64abi32) 6921 TARGET_ARCH=ppc64 6922 TARGET_BASE_ARCH=ppc 6923 TARGET_ABI_DIR=ppc 6924 echo "TARGET_ABI32=y" >> $config_target_mak 6925 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6926 ;; 6927 riscv32) 6928 TARGET_BASE_ARCH=riscv 6929 TARGET_ABI_DIR=riscv 6930 mttcg=yes 6931 ;; 6932 riscv64) 6933 TARGET_BASE_ARCH=riscv 6934 TARGET_ABI_DIR=riscv 6935 mttcg=yes 6936 ;; 6937 sh4|sh4eb) 6938 TARGET_ARCH=sh4 6939 bflt="yes" 6940 ;; 6941 sparc) 6942 ;; 6943 sparc64) 6944 TARGET_BASE_ARCH=sparc 6945 ;; 6946 sparc32plus) 6947 TARGET_ARCH=sparc64 6948 TARGET_BASE_ARCH=sparc 6949 TARGET_ABI_DIR=sparc 6950 echo "TARGET_ABI32=y" >> $config_target_mak 6951 ;; 6952 s390x) 6953 mttcg=yes 6954 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 6955 ;; 6956 tilegx) 6957 ;; 6958 tricore) 6959 ;; 6960 unicore32) 6961 ;; 6962 xtensa|xtensaeb) 6963 TARGET_ARCH=xtensa 6964 mttcg="yes" 6965 ;; 6966 *) 6967 error_exit "Unsupported target CPU" 6968 ;; 6969esac 6970# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 6971if [ "$TARGET_BASE_ARCH" = "" ]; then 6972 TARGET_BASE_ARCH=$TARGET_ARCH 6973fi 6974 6975symlink "$source_path/Makefile.target" "$target_dir/Makefile" 6976 6977upper() { 6978 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 6979} 6980 6981target_arch_name="$(upper $TARGET_ARCH)" 6982echo "TARGET_$target_arch_name=y" >> $config_target_mak 6983echo "TARGET_NAME=$target_name" >> $config_target_mak 6984echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 6985if [ "$TARGET_ABI_DIR" = "" ]; then 6986 TARGET_ABI_DIR=$TARGET_ARCH 6987fi 6988echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 6989if [ "$HOST_VARIANT_DIR" != "" ]; then 6990 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 6991fi 6992 6993if supported_xen_target $target; then 6994 echo "CONFIG_XEN=y" >> $config_target_mak 6995 if test "$xen_pci_passthrough" = yes; then 6996 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 6997 fi 6998fi 6999if supported_kvm_target $target; then 7000 echo "CONFIG_KVM=y" >> $config_target_mak 7001 if test "$vhost_net" = "yes" ; then 7002 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 7003 if test "$vhost_user" = "yes" ; then 7004 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak 7005 fi 7006 fi 7007fi 7008if supported_hax_target $target; then 7009 echo "CONFIG_HAX=y" >> $config_target_mak 7010fi 7011if supported_hvf_target $target; then 7012 echo "CONFIG_HVF=y" >> $config_target_mak 7013fi 7014if supported_whpx_target $target; then 7015 echo "CONFIG_WHPX=y" >> $config_target_mak 7016fi 7017if test "$target_bigendian" = "yes" ; then 7018 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7019fi 7020if test "$target_softmmu" = "yes" ; then 7021 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7022 if test "$mttcg" = "yes" ; then 7023 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7024 fi 7025fi 7026if test "$target_user_only" = "yes" ; then 7027 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7028 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7029fi 7030if test "$target_linux_user" = "yes" ; then 7031 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7032fi 7033list="" 7034if test ! -z "$gdb_xml_files" ; then 7035 for x in $gdb_xml_files; do 7036 list="$list $source_path/gdb-xml/$x" 7037 done 7038 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7039fi 7040 7041if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 7042 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7043fi 7044if test "$target_bsd_user" = "yes" ; then 7045 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7046fi 7047 7048# generate QEMU_CFLAGS/LDFLAGS for targets 7049 7050cflags="" 7051ldflags="" 7052 7053disas_config() { 7054 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7055 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7056} 7057 7058for i in $ARCH $TARGET_BASE_ARCH ; do 7059 case "$i" in 7060 alpha) 7061 disas_config "ALPHA" 7062 ;; 7063 aarch64) 7064 if test -n "${cxx}"; then 7065 disas_config "ARM_A64" 7066 fi 7067 ;; 7068 arm) 7069 disas_config "ARM" 7070 if test -n "${cxx}"; then 7071 disas_config "ARM_A64" 7072 fi 7073 ;; 7074 cris) 7075 disas_config "CRIS" 7076 ;; 7077 hppa) 7078 disas_config "HPPA" 7079 ;; 7080 i386|x86_64|x32) 7081 disas_config "I386" 7082 ;; 7083 lm32) 7084 disas_config "LM32" 7085 ;; 7086 m68k) 7087 disas_config "M68K" 7088 ;; 7089 microblaze*) 7090 disas_config "MICROBLAZE" 7091 ;; 7092 mips*) 7093 disas_config "MIPS" 7094 ;; 7095 moxie*) 7096 disas_config "MOXIE" 7097 ;; 7098 nios2) 7099 disas_config "NIOS2" 7100 ;; 7101 or1k) 7102 disas_config "OPENRISC" 7103 ;; 7104 ppc*) 7105 disas_config "PPC" 7106 ;; 7107 riscv) 7108 disas_config "RISCV" 7109 ;; 7110 s390*) 7111 disas_config "S390" 7112 ;; 7113 sh4) 7114 disas_config "SH4" 7115 ;; 7116 sparc*) 7117 disas_config "SPARC" 7118 ;; 7119 xtensa*) 7120 disas_config "XTENSA" 7121 ;; 7122 esac 7123done 7124if test "$tcg_interpreter" = "yes" ; then 7125 disas_config "TCI" 7126fi 7127 7128case "$ARCH" in 7129alpha) 7130 # Ensure there's only a single GP 7131 cflags="-msmall-data $cflags" 7132;; 7133esac 7134 7135if test "$gprof" = "yes" ; then 7136 echo "TARGET_GPROF=yes" >> $config_target_mak 7137 if test "$target_linux_user" = "yes" ; then 7138 cflags="-p $cflags" 7139 ldflags="-p $ldflags" 7140 fi 7141 if test "$target_softmmu" = "yes" ; then 7142 ldflags="-p $ldflags" 7143 echo "GPROF_CFLAGS=-p" >> $config_target_mak 7144 fi 7145fi 7146 7147if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 7148 ldflags="$ldflags $textseg_ldflags" 7149fi 7150 7151# Newer kernels on s390 check for an S390_PGSTE program header and 7152# enable the pgste page table extensions in that case. This makes 7153# the vm.allocate_pgste sysctl unnecessary. We enable this program 7154# header if 7155# - we build on s390x 7156# - we build the system emulation for s390x (qemu-system-s390x) 7157# - KVM is enabled 7158# - the linker supports --s390-pgste 7159if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then 7160 if ld_has --s390-pgste ; then 7161 ldflags="-Wl,--s390-pgste $ldflags" 7162 fi 7163fi 7164 7165echo "LDFLAGS+=$ldflags" >> $config_target_mak 7166echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 7167 7168done # for target in $targets 7169 7170if [ "$fdt" = "git" ]; then 7171 echo "config-host.h: subdir-dtc" >> $config_host_mak 7172fi 7173if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7174 echo "config-host.h: subdir-capstone" >> $config_host_mak 7175fi 7176if test -n "$LIBCAPSTONE"; then 7177 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7178fi 7179 7180if test "$numa" = "yes"; then 7181 echo "CONFIG_NUMA=y" >> $config_host_mak 7182fi 7183 7184if test "$ccache_cpp2" = "yes"; then 7185 echo "export CCACHE_CPP2=y" >> $config_host_mak 7186fi 7187 7188# build tree in object directory in case the source is not in the current directory 7189DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm" 7190DIRS="$DIRS docs docs/interop fsdev scsi" 7191DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 7192DIRS="$DIRS roms/seabios roms/vgabios" 7193FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 7194FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 7195FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 7196FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 7197FILES="$FILES pc-bios/spapr-rtas/Makefile" 7198FILES="$FILES pc-bios/s390-ccw/Makefile" 7199FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 7200FILES="$FILES pc-bios/qemu-icon.bmp" 7201FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit 7202for bios_file in \ 7203 $source_path/pc-bios/*.bin \ 7204 $source_path/pc-bios/*.lid \ 7205 $source_path/pc-bios/*.aml \ 7206 $source_path/pc-bios/*.rom \ 7207 $source_path/pc-bios/*.dtb \ 7208 $source_path/pc-bios/*.img \ 7209 $source_path/pc-bios/openbios-* \ 7210 $source_path/pc-bios/u-boot.* \ 7211 $source_path/pc-bios/palcode-* 7212do 7213 FILES="$FILES pc-bios/$(basename $bios_file)" 7214done 7215for test_file in $(find $source_path/tests/acpi-test-data -type f) 7216do 7217 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')" 7218done 7219mkdir -p $DIRS 7220for f in $FILES ; do 7221 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 7222 symlink "$source_path/$f" "$f" 7223 fi 7224done 7225 7226# temporary config to build submodules 7227for rom in seabios vgabios ; do 7228 config_mak=roms/$rom/config.mak 7229 echo "# Automatically generated by configure - do not modify" > $config_mak 7230 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7231 echo "AS=$as" >> $config_mak 7232 echo "CCAS=$ccas" >> $config_mak 7233 echo "CC=$cc" >> $config_mak 7234 echo "BCC=bcc" >> $config_mak 7235 echo "CPP=$cpp" >> $config_mak 7236 echo "OBJCOPY=objcopy" >> $config_mak 7237 echo "IASL=$iasl" >> $config_mak 7238 echo "LD=$ld" >> $config_mak 7239 echo "RANLIB=$ranlib" >> $config_mak 7240done 7241 7242# set up tests data directory 7243for tests_subdir in acceptance data; do 7244 if [ ! -e tests/$tests_subdir ]; then 7245 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir 7246 fi 7247done 7248 7249# set up qemu-iotests in this build directory 7250iotests_common_env="tests/qemu-iotests/common.env" 7251iotests_check="tests/qemu-iotests/check" 7252 7253echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 7254echo >> "$iotests_common_env" 7255echo "export PYTHON='$python'" >> "$iotests_common_env" 7256 7257if [ ! -e "$iotests_check" ]; then 7258 symlink "$source_path/$iotests_check" "$iotests_check" 7259fi 7260 7261# Save the configure command line for later reuse. 7262cat <<EOD >config.status 7263#!/bin/sh 7264# Generated by configure. 7265# Run this file to recreate the current configuration. 7266# Compiler output produced by configure, useful for debugging 7267# configure, is in config.log if it exists. 7268EOD 7269printf "exec" >>config.status 7270printf " '%s'" "$0" "$@" >>config.status 7271echo ' "$@"' >>config.status 7272chmod +x config.status 7273 7274rm -r "$TMPDIR1" 7275