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