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