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