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