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