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