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