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