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