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