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