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 [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6083 tools="qemu-ga $tools" 6084 guest_agent=yes 6085 elif [ "$guest_agent" != yes ]; then 6086 guest_agent=no 6087 else 6088 error_exit "Guest agent is not supported on this platform" 6089 fi 6090fi 6091 6092# Guest agent Window MSI package 6093 6094if test "$guest_agent" != yes; then 6095 if test "$guest_agent_msi" = yes; then 6096 error_exit "MSI guest agent package requires guest agent enabled" 6097 fi 6098 guest_agent_msi=no 6099elif test "$mingw32" != "yes"; then 6100 if test "$guest_agent_msi" = "yes"; then 6101 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6102 fi 6103 guest_agent_msi=no 6104elif ! has wixl; then 6105 if test "$guest_agent_msi" = "yes"; then 6106 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6107 fi 6108 guest_agent_msi=no 6109else 6110 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6111 # disabled explicitly 6112 if test "$guest_agent_msi" != "no"; then 6113 guest_agent_msi=yes 6114 fi 6115fi 6116 6117if test "$guest_agent_msi" = "yes"; then 6118 if test "$guest_agent_with_vss" = "yes"; then 6119 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6120 fi 6121 6122 if test "$QEMU_GA_MANUFACTURER" = ""; then 6123 QEMU_GA_MANUFACTURER=QEMU 6124 fi 6125 6126 if test "$QEMU_GA_DISTRO" = ""; then 6127 QEMU_GA_DISTRO=Linux 6128 fi 6129 6130 if test "$QEMU_GA_VERSION" = ""; then 6131 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6132 fi 6133 6134 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6135 6136 case "$cpu" in 6137 x86_64) 6138 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6139 ;; 6140 i386) 6141 QEMU_GA_MSI_ARCH="-D Arch=32" 6142 ;; 6143 *) 6144 error_exit "CPU $cpu not supported for building installation package" 6145 ;; 6146 esac 6147fi 6148 6149# Mac OS X ships with a broken assembler 6150roms= 6151if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6152 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6153 test "$softmmu" = yes ; then 6154 # Different host OS linkers have different ideas about the name of the ELF 6155 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6156 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6157 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6158 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6159 ld_i386_emulation="$emu" 6160 roms="optionrom" 6161 break 6162 fi 6163 done 6164fi 6165if test "$cpu" = "ppc64" && test "$targetos" != "Darwin" ; then 6166 roms="$roms spapr-rtas" 6167fi 6168 6169# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6170if test "$cpu" = "s390x" ; then 6171 write_c_skeleton 6172 if compile_prog "-march=z900" ""; then 6173 roms="$roms s390-ccw" 6174 fi 6175fi 6176 6177# Probe for the need for relocating the user-only binary. 6178if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 6179 textseg_addr= 6180 case "$cpu" in 6181 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 6182 # ??? Rationale for choosing this address 6183 textseg_addr=0x60000000 6184 ;; 6185 mips) 6186 # A 256M aligned address, high in the address space, with enough 6187 # room for the code_gen_buffer above it before the stack. 6188 textseg_addr=0x60000000 6189 ;; 6190 esac 6191 if [ -n "$textseg_addr" ]; then 6192 cat > $TMPC <<EOF 6193 int main(void) { return 0; } 6194EOF 6195 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 6196 if ! compile_prog "" "$textseg_ldflags"; then 6197 # In case ld does not support -Ttext-segment, edit the default linker 6198 # script via sed to set the .text start addr. This is needed on FreeBSD 6199 # at least. 6200 if ! $ld --verbose >/dev/null 2>&1; then 6201 error_exit \ 6202 "We need to link the QEMU user mode binaries at a" \ 6203 "specific text address. Unfortunately your linker" \ 6204 "doesn't support either the -Ttext-segment option or" \ 6205 "printing the default linker script with --verbose." \ 6206 "If you don't want the user mode binaries, pass the" \ 6207 "--disable-user option to configure." 6208 fi 6209 6210 $ld --verbose | sed \ 6211 -e '1,/==================================================/d' \ 6212 -e '/==================================================/,$d' \ 6213 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 6214 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 6215 textseg_ldflags="-Wl,-T../config-host.ld" 6216 fi 6217 fi 6218fi 6219 6220# Check that the C++ compiler exists and works with the C compiler. 6221# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6222if has $cxx; then 6223 cat > $TMPC <<EOF 6224int c_function(void); 6225int main(void) { return c_function(); } 6226EOF 6227 6228 compile_object 6229 6230 cat > $TMPCXX <<EOF 6231extern "C" { 6232 int c_function(void); 6233} 6234int c_function(void) { return 42; } 6235EOF 6236 6237 update_cxxflags 6238 6239 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then 6240 # C++ compiler $cxx works ok with C compiler $cc 6241 : 6242 else 6243 echo "C++ compiler $cxx does not work with C compiler $cc" 6244 echo "Disabling C++ specific optional code" 6245 cxx= 6246 fi 6247else 6248 echo "No C++ compiler available; disabling C++ specific optional code" 6249 cxx= 6250fi 6251 6252echo_version() { 6253 if test "$1" = "yes" ; then 6254 echo "($2)" 6255 fi 6256} 6257 6258# prepend pixman and ftd flags after all config tests are done 6259QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 6260QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 6261libs_softmmu="$pixman_libs $libs_softmmu" 6262 6263echo "Install prefix $prefix" 6264echo "BIOS directory $(eval echo $qemu_datadir)" 6265echo "firmware path $(eval echo $firmwarepath)" 6266echo "binary directory $(eval echo $bindir)" 6267echo "library directory $(eval echo $libdir)" 6268echo "module directory $(eval echo $qemu_moddir)" 6269echo "libexec directory $(eval echo $libexecdir)" 6270echo "include directory $(eval echo $includedir)" 6271echo "config directory $(eval echo $sysconfdir)" 6272if test "$mingw32" = "no" ; then 6273echo "local state directory $(eval echo $local_statedir)" 6274echo "Manual directory $(eval echo $mandir)" 6275echo "ELF interp prefix $interp_prefix" 6276else 6277echo "local state directory queried at runtime" 6278echo "Windows SDK $win_sdk" 6279fi 6280echo "Source path $source_path" 6281echo "GIT binary $git" 6282echo "GIT submodules $git_submodules" 6283echo "C compiler $cc" 6284echo "Host C compiler $host_cc" 6285echo "C++ compiler $cxx" 6286echo "Objective-C compiler $objcc" 6287echo "ARFLAGS $ARFLAGS" 6288echo "CFLAGS $CFLAGS" 6289echo "QEMU_CFLAGS $QEMU_CFLAGS" 6290echo "LDFLAGS $LDFLAGS" 6291echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 6292echo "make $make" 6293echo "install $install" 6294echo "python $python ($python_version)" 6295echo "slirp support $slirp $(echo_version $slirp $slirp_version)" 6296if test "$slirp" != "no" ; then 6297 echo "smbd $smbd" 6298fi 6299echo "module support $modules" 6300echo "host CPU $cpu" 6301echo "host big endian $bigendian" 6302echo "target list $target_list" 6303echo "gprof enabled $gprof" 6304echo "sparse enabled $sparse" 6305echo "strip binaries $strip_opt" 6306echo "profiler $profiler" 6307echo "static build $static" 6308if test "$darwin" = "yes" ; then 6309 echo "Cocoa support $cocoa" 6310fi 6311echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 6312echo "SDL image support $sdl_image" 6313echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 6314echo "GTK GL support $gtk_gl" 6315echo "VTE support $vte $(echo_version $vte $vteversion)" 6316echo "TLS priority $tls_priority" 6317echo "GNUTLS support $gnutls" 6318echo "libgcrypt $gcrypt" 6319echo "nettle $nettle $(echo_version $nettle $nettle_version)" 6320echo "libtasn1 $tasn1" 6321echo "PAM $auth_pam" 6322echo "iconv support $iconv" 6323echo "curses support $curses" 6324echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6325echo "curl support $curl" 6326echo "mingw32 support $mingw32" 6327echo "Audio drivers $audio_drv_list" 6328echo "Block whitelist (rw) $block_drv_rw_whitelist" 6329echo "Block whitelist (ro) $block_drv_ro_whitelist" 6330echo "VirtFS support $virtfs" 6331echo "Multipath support $mpath" 6332echo "VNC support $vnc" 6333if test "$vnc" = "yes" ; then 6334 echo "VNC SASL support $vnc_sasl" 6335 echo "VNC JPEG support $vnc_jpeg" 6336 echo "VNC PNG support $vnc_png" 6337fi 6338if test -n "$sparc_cpu"; then 6339 echo "Target Sparc Arch $sparc_cpu" 6340fi 6341echo "xen support $xen" 6342if test "$xen" = "yes" ; then 6343 echo "xen ctrl version $xen_ctrl_version" 6344fi 6345echo "brlapi support $brlapi" 6346echo "bluez support $bluez" 6347echo "Documentation $docs" 6348echo "PIE $pie" 6349echo "vde support $vde" 6350echo "netmap support $netmap" 6351echo "Linux AIO support $linux_aio" 6352echo "ATTR/XATTR support $attr" 6353echo "Install blobs $blobs" 6354echo "KVM support $kvm" 6355echo "HAX support $hax" 6356echo "HVF support $hvf" 6357echo "WHPX support $whpx" 6358echo "TCG support $tcg" 6359if test "$tcg" = "yes" ; then 6360 echo "TCG debug enabled $debug_tcg" 6361 echo "TCG interpreter $tcg_interpreter" 6362fi 6363echo "malloc trim support $malloc_trim" 6364echo "RDMA support $rdma" 6365echo "PVRDMA support $pvrdma" 6366echo "fdt support $fdt" 6367echo "membarrier $membarrier" 6368echo "preadv support $preadv" 6369echo "fdatasync $fdatasync" 6370echo "madvise $madvise" 6371echo "posix_madvise $posix_madvise" 6372echo "posix_memalign $posix_memalign" 6373echo "libcap-ng support $cap_ng" 6374echo "vhost-net support $vhost_net" 6375echo "vhost-crypto support $vhost_crypto" 6376echo "vhost-scsi support $vhost_scsi" 6377echo "vhost-vsock support $vhost_vsock" 6378echo "vhost-user support $vhost_user" 6379echo "Trace backends $trace_backends" 6380if have_backend "simple"; then 6381echo "Trace output file $trace_file-<pid>" 6382fi 6383echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6384echo "rbd support $rbd" 6385echo "xfsctl support $xfs" 6386echo "smartcard support $smartcard" 6387echo "libusb $libusb" 6388echo "usb net redir $usb_redir" 6389echo "OpenGL support $opengl" 6390echo "OpenGL dmabufs $opengl_dmabuf" 6391echo "libiscsi support $libiscsi" 6392echo "libnfs support $libnfs" 6393echo "build guest agent $guest_agent" 6394echo "QGA VSS support $guest_agent_with_vss" 6395echo "QGA w32 disk info $guest_agent_ntddscsi" 6396echo "QGA MSI support $guest_agent_msi" 6397echo "seccomp support $seccomp" 6398echo "coroutine backend $coroutine" 6399echo "coroutine pool $coroutine_pool" 6400echo "debug stack usage $debug_stack_usage" 6401echo "mutex debugging $debug_mutex" 6402echo "crypto afalg $crypto_afalg" 6403echo "GlusterFS support $glusterfs" 6404echo "gcov $gcov_tool" 6405echo "gcov enabled $gcov" 6406echo "TPM support $tpm" 6407echo "libssh2 support $libssh2" 6408echo "TPM passthrough $tpm_passthrough" 6409echo "TPM emulator $tpm_emulator" 6410echo "QOM debugging $qom_cast_debug" 6411echo "Live block migration $live_block_migration" 6412echo "lzo support $lzo" 6413echo "snappy support $snappy" 6414echo "bzip2 support $bzip2" 6415echo "lzfse support $lzfse" 6416echo "NUMA host support $numa" 6417echo "libxml2 $libxml2" 6418echo "tcmalloc support $tcmalloc" 6419echo "jemalloc support $jemalloc" 6420echo "avx2 optimization $avx2_opt" 6421echo "replication support $replication" 6422echo "VxHS block device $vxhs" 6423echo "bochs support $bochs" 6424echo "cloop support $cloop" 6425echo "dmg support $dmg" 6426echo "qcow v1 support $qcow1" 6427echo "vdi support $vdi" 6428echo "vvfat support $vvfat" 6429echo "qed support $qed" 6430echo "parallels support $parallels" 6431echo "sheepdog support $sheepdog" 6432echo "capstone $capstone" 6433echo "docker $docker" 6434echo "libpmem support $libpmem" 6435echo "libudev $libudev" 6436echo "default devices $default_devices" 6437 6438if test "$supported_cpu" = "no"; then 6439 echo 6440 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 6441 echo 6442 echo "CPU host architecture $cpu support is not currently maintained." 6443 echo "The QEMU project intends to remove support for this host CPU in" 6444 echo "a future release if nobody volunteers to maintain it and to" 6445 echo "provide a build host for our continuous integration setup." 6446 echo "configure has succeeded and you can continue to build, but" 6447 echo "if you care about QEMU on this platform you should contact" 6448 echo "us upstream at qemu-devel@nongnu.org." 6449fi 6450 6451if test "$supported_os" = "no"; then 6452 echo 6453 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 6454 echo 6455 echo "Host OS $targetos support is not currently maintained." 6456 echo "The QEMU project intends to remove support for this host OS in" 6457 echo "a future release if nobody volunteers to maintain it and to" 6458 echo "provide a build host for our continuous integration setup." 6459 echo "configure has succeeded and you can continue to build, but" 6460 echo "if you care about QEMU on this platform you should contact" 6461 echo "us upstream at qemu-devel@nongnu.org." 6462fi 6463 6464config_host_mak="config-host.mak" 6465 6466echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6467 6468echo "# Automatically generated by configure - do not modify" > $config_host_mak 6469echo >> $config_host_mak 6470 6471echo all: >> $config_host_mak 6472echo "prefix=$prefix" >> $config_host_mak 6473echo "bindir=$bindir" >> $config_host_mak 6474echo "libdir=$libdir" >> $config_host_mak 6475echo "libexecdir=$libexecdir" >> $config_host_mak 6476echo "includedir=$includedir" >> $config_host_mak 6477echo "mandir=$mandir" >> $config_host_mak 6478echo "sysconfdir=$sysconfdir" >> $config_host_mak 6479echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6480echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6481echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6482echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6483echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6484if test "$mingw32" = "no" ; then 6485 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6486fi 6487echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6488echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6489echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 6490echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 6491echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6492echo "GIT=$git" >> $config_host_mak 6493echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6494echo "GIT_UPDATE=$git_update" >> $config_host_mak 6495 6496echo "ARCH=$ARCH" >> $config_host_mak 6497 6498if test "$default_devices" = "yes" ; then 6499 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 6500else 6501 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 6502fi 6503if test "$debug_tcg" = "yes" ; then 6504 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6505fi 6506if test "$strip_opt" = "yes" ; then 6507 echo "STRIP=${strip}" >> $config_host_mak 6508fi 6509if test "$bigendian" = "yes" ; then 6510 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6511fi 6512if test "$mingw32" = "yes" ; then 6513 echo "CONFIG_WIN32=y" >> $config_host_mak 6514 rc_version=$(cat $source_path/VERSION) 6515 version_major=${rc_version%%.*} 6516 rc_version=${rc_version#*.} 6517 version_minor=${rc_version%%.*} 6518 rc_version=${rc_version#*.} 6519 version_subminor=${rc_version%%.*} 6520 version_micro=0 6521 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6522 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6523 if test "$guest_agent_with_vss" = "yes" ; then 6524 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6525 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6526 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6527 fi 6528 if test "$guest_agent_ntddscsi" = "yes" ; then 6529 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 6530 fi 6531 if test "$guest_agent_msi" = "yes"; then 6532 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6533 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6534 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6535 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6536 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6537 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6538 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6539 fi 6540else 6541 echo "CONFIG_POSIX=y" >> $config_host_mak 6542fi 6543 6544if test "$linux" = "yes" ; then 6545 echo "CONFIG_LINUX=y" >> $config_host_mak 6546fi 6547 6548if test "$darwin" = "yes" ; then 6549 echo "CONFIG_DARWIN=y" >> $config_host_mak 6550fi 6551 6552if test "$solaris" = "yes" ; then 6553 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6554fi 6555if test "$haiku" = "yes" ; then 6556 echo "CONFIG_HAIKU=y" >> $config_host_mak 6557fi 6558if test "$static" = "yes" ; then 6559 echo "CONFIG_STATIC=y" >> $config_host_mak 6560fi 6561if test "$profiler" = "yes" ; then 6562 echo "CONFIG_PROFILER=y" >> $config_host_mak 6563fi 6564if test "$slirp" != "no"; then 6565 echo "CONFIG_SLIRP=y" >> $config_host_mak 6566 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6567 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 6568 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 6569fi 6570if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 6571 echo "config-host.h: subdir-slirp" >> $config_host_mak 6572fi 6573if test "$vde" = "yes" ; then 6574 echo "CONFIG_VDE=y" >> $config_host_mak 6575 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6576fi 6577if test "$netmap" = "yes" ; then 6578 echo "CONFIG_NETMAP=y" >> $config_host_mak 6579fi 6580if test "$l2tpv3" = "yes" ; then 6581 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6582fi 6583if test "$cap_ng" = "yes" ; then 6584 echo "CONFIG_LIBCAP=y" >> $config_host_mak 6585fi 6586echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6587for drv in $audio_drv_list; do 6588 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6589 case "$drv" in 6590 alsa | oss | pa | sdl) 6591 echo "$def=m" >> $config_host_mak ;; 6592 *) 6593 echo "$def=y" >> $config_host_mak ;; 6594 esac 6595done 6596echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6597echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6598echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6599echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6600echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6601if test "$audio_pt_int" = "yes" ; then 6602 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 6603fi 6604if test "$audio_win_int" = "yes" ; then 6605 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6606fi 6607echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6608echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6609if test "$vnc" = "yes" ; then 6610 echo "CONFIG_VNC=y" >> $config_host_mak 6611fi 6612if test "$vnc_sasl" = "yes" ; then 6613 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6614fi 6615if test "$vnc_jpeg" = "yes" ; then 6616 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6617fi 6618if test "$vnc_png" = "yes" ; then 6619 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6620fi 6621if test "$xkbcommon" = "yes" ; then 6622 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6623 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6624fi 6625if test "$xfs" = "yes" ; then 6626 echo "CONFIG_XFS=y" >> $config_host_mak 6627fi 6628qemu_version=$(head $source_path/VERSION) 6629echo "VERSION=$qemu_version" >>$config_host_mak 6630echo "PKGVERSION=$pkgversion" >>$config_host_mak 6631echo "SRC_PATH=$source_path" >> $config_host_mak 6632echo "TARGET_DIRS=$target_list" >> $config_host_mak 6633if [ "$docs" = "yes" ] ; then 6634 echo "BUILD_DOCS=yes" >> $config_host_mak 6635fi 6636if test "$modules" = "yes"; then 6637 # $shacmd can generate a hash started with digit, which the compiler doesn't 6638 # like as an symbol. So prefix it with an underscore 6639 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6640 echo "CONFIG_MODULES=y" >> $config_host_mak 6641fi 6642if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 6643 echo "CONFIG_X11=y" >> $config_host_mak 6644 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6645 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6646fi 6647if test "$sdl" = "yes" ; then 6648 echo "CONFIG_SDL=m" >> $config_host_mak 6649 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6650 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6651 if test "$sdl_image" = "yes" ; then 6652 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak 6653 fi 6654fi 6655if test "$cocoa" = "yes" ; then 6656 echo "CONFIG_COCOA=y" >> $config_host_mak 6657fi 6658if test "$iconv" = "yes" ; then 6659 echo "CONFIG_ICONV=y" >> $config_host_mak 6660 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 6661 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 6662fi 6663if test "$curses" = "yes" ; then 6664 echo "CONFIG_CURSES=m" >> $config_host_mak 6665 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6666 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6667fi 6668if test "$pipe2" = "yes" ; then 6669 echo "CONFIG_PIPE2=y" >> $config_host_mak 6670fi 6671if test "$accept4" = "yes" ; then 6672 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6673fi 6674if test "$splice" = "yes" ; then 6675 echo "CONFIG_SPLICE=y" >> $config_host_mak 6676fi 6677if test "$eventfd" = "yes" ; then 6678 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6679fi 6680if test "$memfd" = "yes" ; then 6681 echo "CONFIG_MEMFD=y" >> $config_host_mak 6682fi 6683if test "$have_usbfs" = "yes" ; then 6684 echo "CONFIG_USBFS=y" >> $config_host_mak 6685fi 6686if test "$fallocate" = "yes" ; then 6687 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6688fi 6689if test "$fallocate_punch_hole" = "yes" ; then 6690 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6691fi 6692if test "$fallocate_zero_range" = "yes" ; then 6693 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6694fi 6695if test "$posix_fallocate" = "yes" ; then 6696 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6697fi 6698if test "$sync_file_range" = "yes" ; then 6699 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6700fi 6701if test "$fiemap" = "yes" ; then 6702 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6703fi 6704if test "$dup3" = "yes" ; then 6705 echo "CONFIG_DUP3=y" >> $config_host_mak 6706fi 6707if test "$ppoll" = "yes" ; then 6708 echo "CONFIG_PPOLL=y" >> $config_host_mak 6709fi 6710if test "$prctl_pr_set_timerslack" = "yes" ; then 6711 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6712fi 6713if test "$epoll" = "yes" ; then 6714 echo "CONFIG_EPOLL=y" >> $config_host_mak 6715fi 6716if test "$epoll_create1" = "yes" ; then 6717 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6718fi 6719if test "$sendfile" = "yes" ; then 6720 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6721fi 6722if test "$timerfd" = "yes" ; then 6723 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6724fi 6725if test "$setns" = "yes" ; then 6726 echo "CONFIG_SETNS=y" >> $config_host_mak 6727fi 6728if test "$clock_adjtime" = "yes" ; then 6729 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6730fi 6731if test "$syncfs" = "yes" ; then 6732 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6733fi 6734if test "$inotify" = "yes" ; then 6735 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6736fi 6737if test "$inotify1" = "yes" ; then 6738 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6739fi 6740if test "$sem_timedwait" = "yes" ; then 6741 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6742fi 6743if test "$strchrnul" = "yes" ; then 6744 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6745fi 6746if test "$byteswap_h" = "yes" ; then 6747 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6748fi 6749if test "$bswap_h" = "yes" ; then 6750 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6751fi 6752if test "$curl" = "yes" ; then 6753 echo "CONFIG_CURL=m" >> $config_host_mak 6754 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6755 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6756fi 6757if test "$brlapi" = "yes" ; then 6758 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6759 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6760fi 6761if test "$bluez" = "yes" ; then 6762 echo "CONFIG_BLUEZ=y" >> $config_host_mak 6763 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 6764fi 6765if test "$gtk" = "yes" ; then 6766 echo "CONFIG_GTK=m" >> $config_host_mak 6767 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6768 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6769 if test "$gtk_gl" = "yes" ; then 6770 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6771 fi 6772fi 6773if test "$gio" = "yes" ; then 6774 echo "CONFIG_GIO=y" >> $config_host_mak 6775 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 6776 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 6777fi 6778echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6779if test "$gnutls" = "yes" ; then 6780 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6781fi 6782if test "$gcrypt" = "yes" ; then 6783 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6784 if test "$gcrypt_hmac" = "yes" ; then 6785 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6786 fi 6787fi 6788if test "$nettle" = "yes" ; then 6789 echo "CONFIG_NETTLE=y" >> $config_host_mak 6790 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6791fi 6792if test "$tasn1" = "yes" ; then 6793 echo "CONFIG_TASN1=y" >> $config_host_mak 6794fi 6795if test "$auth_pam" = "yes" ; then 6796 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 6797fi 6798if test "$have_ifaddrs_h" = "yes" ; then 6799 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6800fi 6801if test "$have_broken_size_max" = "yes" ; then 6802 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6803fi 6804 6805# Work around a system header bug with some kernel/XFS header 6806# versions where they both try to define 'struct fsxattr': 6807# xfs headers will not try to redefine structs from linux headers 6808# if this macro is set. 6809if test "$have_fsxattr" = "yes" ; then 6810 echo "HAVE_FSXATTR=y" >> $config_host_mak 6811fi 6812if test "$have_copy_file_range" = "yes" ; then 6813 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6814fi 6815if test "$vte" = "yes" ; then 6816 echo "CONFIG_VTE=y" >> $config_host_mak 6817 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6818 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6819fi 6820if test "$virglrenderer" = "yes" ; then 6821 echo "CONFIG_VIRGL=y" >> $config_host_mak 6822 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6823 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6824fi 6825if test "$xen" = "yes" ; then 6826 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6827 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6828fi 6829if test "$linux_aio" = "yes" ; then 6830 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6831fi 6832if test "$attr" = "yes" ; then 6833 echo "CONFIG_ATTR=y" >> $config_host_mak 6834fi 6835if test "$libattr" = "yes" ; then 6836 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6837fi 6838if test "$virtfs" = "yes" ; then 6839 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6840fi 6841if test "$mpath" = "yes" ; then 6842 echo "CONFIG_MPATH=y" >> $config_host_mak 6843 if test "$mpathpersist_new_api" = "yes"; then 6844 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 6845 fi 6846fi 6847if test "$vhost_scsi" = "yes" ; then 6848 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6849fi 6850if test "$vhost_net" = "yes" ; then 6851 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 6852fi 6853if test "$vhost_net_user" = "yes" ; then 6854 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 6855fi 6856if test "$vhost_crypto" = "yes" ; then 6857 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6858fi 6859if test "$vhost_vsock" = "yes" ; then 6860 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6861fi 6862if test "$vhost_kernel" = "yes" ; then 6863 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 6864fi 6865if test "$vhost_user" = "yes" ; then 6866 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6867fi 6868if test "$blobs" = "yes" ; then 6869 echo "INSTALL_BLOBS=yes" >> $config_host_mak 6870fi 6871if test "$iovec" = "yes" ; then 6872 echo "CONFIG_IOVEC=y" >> $config_host_mak 6873fi 6874if test "$preadv" = "yes" ; then 6875 echo "CONFIG_PREADV=y" >> $config_host_mak 6876fi 6877if test "$fdt" != "no" ; then 6878 echo "CONFIG_FDT=y" >> $config_host_mak 6879fi 6880if test "$membarrier" = "yes" ; then 6881 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6882fi 6883if test "$signalfd" = "yes" ; then 6884 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6885fi 6886if test "$optreset" = "yes" ; then 6887 echo "HAVE_OPTRESET=y" >> $config_host_mak 6888fi 6889if test "$tcg" = "yes"; then 6890 echo "CONFIG_TCG=y" >> $config_host_mak 6891 if test "$tcg_interpreter" = "yes" ; then 6892 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6893 fi 6894fi 6895if test "$fdatasync" = "yes" ; then 6896 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6897fi 6898if test "$madvise" = "yes" ; then 6899 echo "CONFIG_MADVISE=y" >> $config_host_mak 6900fi 6901if test "$posix_madvise" = "yes" ; then 6902 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6903fi 6904if test "$posix_memalign" = "yes" ; then 6905 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6906fi 6907 6908if test "$spice" = "yes" ; then 6909 echo "CONFIG_SPICE=y" >> $config_host_mak 6910fi 6911 6912if test "$smartcard" = "yes" ; then 6913 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6914 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6915 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6916fi 6917 6918if test "$libusb" = "yes" ; then 6919 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6920 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6921 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6922fi 6923 6924if test "$usb_redir" = "yes" ; then 6925 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6926 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6927 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6928fi 6929 6930if test "$opengl" = "yes" ; then 6931 echo "CONFIG_OPENGL=y" >> $config_host_mak 6932 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6933 if test "$opengl_dmabuf" = "yes" ; then 6934 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6935 fi 6936fi 6937 6938if test "$malloc_trim" = "yes" ; then 6939 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 6940fi 6941 6942if test "$avx2_opt" = "yes" ; then 6943 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6944fi 6945 6946if test "$lzo" = "yes" ; then 6947 echo "CONFIG_LZO=y" >> $config_host_mak 6948fi 6949 6950if test "$snappy" = "yes" ; then 6951 echo "CONFIG_SNAPPY=y" >> $config_host_mak 6952fi 6953 6954if test "$bzip2" = "yes" ; then 6955 echo "CONFIG_BZIP2=y" >> $config_host_mak 6956 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 6957fi 6958 6959if test "$lzfse" = "yes" ; then 6960 echo "CONFIG_LZFSE=y" >> $config_host_mak 6961 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 6962fi 6963 6964if test "$libiscsi" = "yes" ; then 6965 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 6966 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 6967 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6968fi 6969 6970if test "$libnfs" = "yes" ; then 6971 echo "CONFIG_LIBNFS=m" >> $config_host_mak 6972 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 6973fi 6974 6975if test "$seccomp" = "yes"; then 6976 echo "CONFIG_SECCOMP=y" >> $config_host_mak 6977 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 6978 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 6979fi 6980 6981# XXX: suppress that 6982if [ "$bsd" = "yes" ] ; then 6983 echo "CONFIG_BSD=y" >> $config_host_mak 6984fi 6985 6986if test "$localtime_r" = "yes" ; then 6987 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 6988fi 6989if test "$qom_cast_debug" = "yes" ; then 6990 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 6991fi 6992if test "$rbd" = "yes" ; then 6993 echo "CONFIG_RBD=m" >> $config_host_mak 6994 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 6995 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 6996fi 6997 6998echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 6999if test "$coroutine_pool" = "yes" ; then 7000 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7001else 7002 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7003fi 7004 7005if test "$debug_stack_usage" = "yes" ; then 7006 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7007fi 7008 7009if test "$crypto_afalg" = "yes" ; then 7010 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7011fi 7012 7013if test "$open_by_handle_at" = "yes" ; then 7014 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7015fi 7016 7017if test "$linux_magic_h" = "yes" ; then 7018 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7019fi 7020 7021if test "$pragma_diagnostic_available" = "yes" ; then 7022 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 7023fi 7024 7025if test "$valgrind_h" = "yes" ; then 7026 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 7027fi 7028 7029if test "$have_asan_iface_fiber" = "yes" ; then 7030 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 7031fi 7032 7033if test "$has_environ" = "yes" ; then 7034 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 7035fi 7036 7037if test "$cpuid_h" = "yes" ; then 7038 echo "CONFIG_CPUID_H=y" >> $config_host_mak 7039fi 7040 7041if test "$int128" = "yes" ; then 7042 echo "CONFIG_INT128=y" >> $config_host_mak 7043fi 7044 7045if test "$atomic128" = "yes" ; then 7046 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 7047fi 7048 7049if test "$cmpxchg128" = "yes" ; then 7050 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 7051fi 7052 7053if test "$atomic64" = "yes" ; then 7054 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 7055fi 7056 7057if test "$vector16" = "yes" ; then 7058 echo "CONFIG_VECTOR16=y" >> $config_host_mak 7059fi 7060 7061if test "$getauxval" = "yes" ; then 7062 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 7063fi 7064 7065if test "$glusterfs" = "yes" ; then 7066 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 7067 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 7068 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 7069fi 7070 7071if test "$glusterfs_xlator_opt" = "yes" ; then 7072 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 7073fi 7074 7075if test "$glusterfs_discard" = "yes" ; then 7076 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 7077fi 7078 7079if test "$glusterfs_fallocate" = "yes" ; then 7080 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 7081fi 7082 7083if test "$glusterfs_zerofill" = "yes" ; then 7084 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 7085fi 7086 7087if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 7088 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 7089fi 7090 7091if test "$glusterfs_iocb_has_stat" = "yes" ; then 7092 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 7093fi 7094 7095if test "$libssh2" = "yes" ; then 7096 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 7097 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 7098 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 7099fi 7100 7101if test "$live_block_migration" = "yes" ; then 7102 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 7103fi 7104 7105if test "$tpm" = "yes"; then 7106 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 7107 # TPM passthrough support? 7108 if test "$tpm_passthrough" = "yes"; then 7109 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 7110 fi 7111 # TPM emulator support? 7112 if test "$tpm_emulator" = "yes"; then 7113 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak 7114 fi 7115fi 7116 7117echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 7118if have_backend "nop"; then 7119 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 7120fi 7121if have_backend "simple"; then 7122 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 7123 # Set the appropriate trace file. 7124 trace_file="\"$trace_file-\" FMT_pid" 7125fi 7126if have_backend "log"; then 7127 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 7128fi 7129if have_backend "ust"; then 7130 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 7131fi 7132if have_backend "dtrace"; then 7133 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 7134 if test "$trace_backend_stap" = "yes" ; then 7135 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 7136 fi 7137fi 7138if have_backend "ftrace"; then 7139 if test "$linux" = "yes" ; then 7140 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 7141 else 7142 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 7143 fi 7144fi 7145if have_backend "syslog"; then 7146 if test "$posix_syslog" = "yes" ; then 7147 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 7148 else 7149 feature_not_found "syslog(trace backend)" "syslog not available" 7150 fi 7151fi 7152echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 7153 7154if test "$rdma" = "yes" ; then 7155 echo "CONFIG_RDMA=y" >> $config_host_mak 7156 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 7157fi 7158 7159if test "$pvrdma" = "yes" ; then 7160 echo "CONFIG_PVRDMA=y" >> $config_host_mak 7161fi 7162 7163if test "$have_rtnetlink" = "yes" ; then 7164 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 7165fi 7166 7167if test "$libxml2" = "yes" ; then 7168 echo "CONFIG_LIBXML2=y" >> $config_host_mak 7169 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 7170 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 7171fi 7172 7173if test "$replication" = "yes" ; then 7174 echo "CONFIG_REPLICATION=y" >> $config_host_mak 7175fi 7176 7177if test "$have_af_vsock" = "yes" ; then 7178 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 7179fi 7180 7181if test "$have_sysmacros" = "yes" ; then 7182 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 7183fi 7184 7185if test "$have_static_assert" = "yes" ; then 7186 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 7187fi 7188 7189if test "$have_utmpx" = "yes" ; then 7190 echo "HAVE_UTMPX=y" >> $config_host_mak 7191fi 7192 7193if test "$ivshmem" = "yes" ; then 7194 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 7195fi 7196if test "$capstone" != "no" ; then 7197 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 7198fi 7199if test "$debug_mutex" = "yes" ; then 7200 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 7201fi 7202 7203# Hold two types of flag: 7204# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 7205# a thread we have a handle to 7206# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 7207# platform 7208if test "$pthread_setname_np_w_tid" = "yes" ; then 7209 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7210 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 7211elif test "$pthread_setname_np_wo_tid" = "yes" ; then 7212 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7213 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 7214fi 7215 7216if test "$vxhs" = "yes" ; then 7217 echo "CONFIG_VXHS=y" >> $config_host_mak 7218 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 7219fi 7220 7221if test "$libpmem" = "yes" ; then 7222 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 7223fi 7224 7225if test "$bochs" = "yes" ; then 7226 echo "CONFIG_BOCHS=y" >> $config_host_mak 7227fi 7228if test "$cloop" = "yes" ; then 7229 echo "CONFIG_CLOOP=y" >> $config_host_mak 7230fi 7231if test "$dmg" = "yes" ; then 7232 echo "CONFIG_DMG=y" >> $config_host_mak 7233fi 7234if test "$qcow1" = "yes" ; then 7235 echo "CONFIG_QCOW1=y" >> $config_host_mak 7236fi 7237if test "$vdi" = "yes" ; then 7238 echo "CONFIG_VDI=y" >> $config_host_mak 7239fi 7240if test "$vvfat" = "yes" ; then 7241 echo "CONFIG_VVFAT=y" >> $config_host_mak 7242fi 7243if test "$qed" = "yes" ; then 7244 echo "CONFIG_QED=y" >> $config_host_mak 7245fi 7246if test "$parallels" = "yes" ; then 7247 echo "CONFIG_PARALLELS=y" >> $config_host_mak 7248fi 7249if test "$sheepdog" = "yes" ; then 7250 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 7251fi 7252 7253if test "$tcg_interpreter" = "yes"; then 7254 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 7255elif test "$ARCH" = "sparc64" ; then 7256 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 7257elif test "$ARCH" = "s390x" ; then 7258 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 7259elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7260 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 7261elif test "$ARCH" = "ppc64" ; then 7262 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 7263elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7264 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES" 7265else 7266 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 7267fi 7268QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES" 7269 7270echo "TOOLS=$tools" >> $config_host_mak 7271echo "ROMS=$roms" >> $config_host_mak 7272echo "MAKE=$make" >> $config_host_mak 7273echo "INSTALL=$install" >> $config_host_mak 7274echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 7275echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 7276echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 7277echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 7278echo "PYTHON=$python" >> $config_host_mak 7279echo "PYTHON_VERSION=$python_version" >> $config_host_mak 7280echo "CC=$cc" >> $config_host_mak 7281if $iasl -h > /dev/null 2>&1; then 7282 echo "IASL=$iasl" >> $config_host_mak 7283fi 7284echo "HOST_CC=$host_cc" >> $config_host_mak 7285echo "CXX=$cxx" >> $config_host_mak 7286echo "OBJCC=$objcc" >> $config_host_mak 7287echo "AR=$ar" >> $config_host_mak 7288echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 7289echo "AS=$as" >> $config_host_mak 7290echo "CCAS=$ccas" >> $config_host_mak 7291echo "CPP=$cpp" >> $config_host_mak 7292echo "OBJCOPY=$objcopy" >> $config_host_mak 7293echo "LD=$ld" >> $config_host_mak 7294echo "RANLIB=$ranlib" >> $config_host_mak 7295echo "NM=$nm" >> $config_host_mak 7296echo "WINDRES=$windres" >> $config_host_mak 7297echo "CFLAGS=$CFLAGS" >> $config_host_mak 7298echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 7299echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 7300echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 7301echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 7302if test "$sparse" = "yes" ; then 7303 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 7304 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 7305 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 7306 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 7307 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 7308fi 7309if test "$cross_prefix" != ""; then 7310 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 7311else 7312 echo "AUTOCONF_HOST := " >> $config_host_mak 7313fi 7314echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 7315echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 7316echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 7317echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 7318echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 7319echo "LIBS+=$LIBS" >> $config_host_mak 7320echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 7321echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 7322echo "EXESUF=$EXESUF" >> $config_host_mak 7323echo "DSOSUF=$DSOSUF" >> $config_host_mak 7324echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 7325echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 7326echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 7327echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 7328echo "POD2MAN=$POD2MAN" >> $config_host_mak 7329if test "$gcov" = "yes" ; then 7330 echo "CONFIG_GCOV=y" >> $config_host_mak 7331 echo "GCOV=$gcov_tool" >> $config_host_mak 7332fi 7333 7334if test "$docker" != "no"; then 7335 echo "HAVE_USER_DOCKER=y" >> $config_host_mak 7336fi 7337 7338if test "$libudev" != "no"; then 7339 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 7340 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 7341fi 7342 7343# use included Linux headers 7344if test "$linux" = "yes" ; then 7345 mkdir -p linux-headers 7346 case "$cpu" in 7347 i386|x86_64|x32) 7348 linux_arch=x86 7349 ;; 7350 ppc|ppc64) 7351 linux_arch=powerpc 7352 ;; 7353 s390x) 7354 linux_arch=s390 7355 ;; 7356 aarch64) 7357 linux_arch=arm64 7358 ;; 7359 mips64) 7360 linux_arch=mips 7361 ;; 7362 *) 7363 # For most CPUs the kernel architecture name and QEMU CPU name match. 7364 linux_arch="$cpu" 7365 ;; 7366 esac 7367 # For non-KVM architectures we will not have asm headers 7368 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 7369 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 7370 fi 7371fi 7372 7373for target in $target_list; do 7374target_dir="$target" 7375config_target_mak=$target_dir/config-target.mak 7376target_name=$(echo $target | cut -d '-' -f 1) 7377target_bigendian="no" 7378 7379case "$target_name" in 7380 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 7381 target_bigendian=yes 7382 ;; 7383esac 7384target_softmmu="no" 7385target_user_only="no" 7386target_linux_user="no" 7387target_bsd_user="no" 7388case "$target" in 7389 ${target_name}-softmmu) 7390 target_softmmu="yes" 7391 ;; 7392 ${target_name}-linux-user) 7393 target_user_only="yes" 7394 target_linux_user="yes" 7395 ;; 7396 ${target_name}-bsd-user) 7397 target_user_only="yes" 7398 target_bsd_user="yes" 7399 ;; 7400 *) 7401 error_exit "Target '$target' not recognised" 7402 exit 1 7403 ;; 7404esac 7405 7406target_compiler="" 7407target_compiler_static="" 7408target_compiler_cflags="" 7409 7410mkdir -p $target_dir 7411echo "# Automatically generated by configure - do not modify" > $config_target_mak 7412 7413bflt="no" 7414mttcg="no" 7415interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7416gdb_xml_files="" 7417 7418TARGET_ARCH="$target_name" 7419TARGET_BASE_ARCH="" 7420TARGET_ABI_DIR="" 7421 7422case "$target_name" in 7423 i386) 7424 mttcg="yes" 7425 gdb_xml_files="i386-32bit.xml" 7426 target_compiler=$cross_cc_i386 7427 target_compiler_cflags=$cross_cc_ccflags_i386 7428 ;; 7429 x86_64) 7430 TARGET_BASE_ARCH=i386 7431 mttcg="yes" 7432 gdb_xml_files="i386-64bit.xml" 7433 target_compiler=$cross_cc_x86_64 7434 ;; 7435 alpha) 7436 mttcg="yes" 7437 target_compiler=$cross_cc_alpha 7438 ;; 7439 arm|armeb) 7440 TARGET_ARCH=arm 7441 bflt="yes" 7442 mttcg="yes" 7443 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7444 target_compiler=$cross_cc_arm 7445 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7446 ;; 7447 aarch64|aarch64_be) 7448 TARGET_ARCH=aarch64 7449 TARGET_BASE_ARCH=arm 7450 bflt="yes" 7451 mttcg="yes" 7452 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7453 target_compiler=$cross_cc_aarch64 7454 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7455 ;; 7456 cris) 7457 target_compiler=$cross_cc_cris 7458 ;; 7459 hppa) 7460 mttcg="yes" 7461 target_compiler=$cross_cc_hppa 7462 ;; 7463 lm32) 7464 target_compiler=$cross_cc_lm32 7465 ;; 7466 m68k) 7467 bflt="yes" 7468 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 7469 target_compiler=$cross_cc_m68k 7470 ;; 7471 microblaze|microblazeel) 7472 TARGET_ARCH=microblaze 7473 bflt="yes" 7474 echo "TARGET_ABI32=y" >> $config_target_mak 7475 target_compiler=$cross_cc_microblaze 7476 ;; 7477 mips|mipsel) 7478 mttcg="yes" 7479 TARGET_ARCH=mips 7480 target_compiler=$cross_cc_mips 7481 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7482 ;; 7483 mipsn32|mipsn32el) 7484 mttcg="yes" 7485 TARGET_ARCH=mips64 7486 TARGET_BASE_ARCH=mips 7487 target_compiler=$cross_cc_mipsn32 7488 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7489 echo "TARGET_ABI32=y" >> $config_target_mak 7490 ;; 7491 mips64|mips64el) 7492 mttcg="yes" 7493 TARGET_ARCH=mips64 7494 TARGET_BASE_ARCH=mips 7495 target_compiler=$cross_cc_mips64 7496 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7497 ;; 7498 moxie) 7499 target_compiler=$cross_cc_moxie 7500 ;; 7501 nios2) 7502 target_compiler=$cross_cc_nios2 7503 ;; 7504 or1k) 7505 target_compiler=$cross_cc_or1k 7506 TARGET_ARCH=openrisc 7507 TARGET_BASE_ARCH=openrisc 7508 ;; 7509 ppc) 7510 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7511 target_compiler=$cross_cc_powerpc 7512 ;; 7513 ppc64) 7514 TARGET_BASE_ARCH=ppc 7515 TARGET_ABI_DIR=ppc 7516 mttcg=yes 7517 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7518 target_compiler=$cross_cc_ppc64 7519 ;; 7520 ppc64le) 7521 TARGET_ARCH=ppc64 7522 TARGET_BASE_ARCH=ppc 7523 TARGET_ABI_DIR=ppc 7524 mttcg=yes 7525 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7526 target_compiler=$cross_cc_ppc64le 7527 ;; 7528 ppc64abi32) 7529 TARGET_ARCH=ppc64 7530 TARGET_BASE_ARCH=ppc 7531 TARGET_ABI_DIR=ppc 7532 echo "TARGET_ABI32=y" >> $config_target_mak 7533 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7534 target_compiler=$cross_cc_ppc64abi32 7535 ;; 7536 riscv32) 7537 TARGET_BASE_ARCH=riscv 7538 TARGET_ABI_DIR=riscv 7539 mttcg=yes 7540 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml" 7541 target_compiler=$cross_cc_riscv32 7542 ;; 7543 riscv64) 7544 TARGET_BASE_ARCH=riscv 7545 TARGET_ABI_DIR=riscv 7546 mttcg=yes 7547 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml" 7548 target_compiler=$cross_cc_riscv64 7549 ;; 7550 sh4|sh4eb) 7551 TARGET_ARCH=sh4 7552 bflt="yes" 7553 target_compiler=$cross_cc_sh4 7554 ;; 7555 sparc) 7556 target_compiler=$cross_cc_sparc 7557 ;; 7558 sparc64) 7559 TARGET_BASE_ARCH=sparc 7560 target_compiler=$cross_cc_sparc64 7561 ;; 7562 sparc32plus) 7563 TARGET_ARCH=sparc64 7564 TARGET_BASE_ARCH=sparc 7565 TARGET_ABI_DIR=sparc 7566 target_compiler=$cross_cc_sparc32plus 7567 echo "TARGET_ABI32=y" >> $config_target_mak 7568 ;; 7569 s390x) 7570 mttcg=yes 7571 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7572 target_compiler=$cross_cc_s390x 7573 ;; 7574 tilegx) 7575 target_compiler=$cross_cc_tilegx 7576 ;; 7577 tricore) 7578 target_compiler=$cross_cc_tricore 7579 ;; 7580 unicore32) 7581 target_compiler=$cross_cc_unicore32 7582 ;; 7583 xtensa|xtensaeb) 7584 TARGET_ARCH=xtensa 7585 bflt="yes" 7586 mttcg="yes" 7587 target_compiler=$cross_cc_xtensa 7588 ;; 7589 *) 7590 error_exit "Unsupported target CPU" 7591 ;; 7592esac 7593# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7594if [ "$TARGET_BASE_ARCH" = "" ]; then 7595 TARGET_BASE_ARCH=$TARGET_ARCH 7596fi 7597 7598# Do we have a cross compiler for this target? 7599if has $target_compiler; then 7600 7601 write_c_skeleton 7602 7603 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then 7604 # For host systems we might get away with building without -static 7605 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then 7606 target_compiler="" 7607 else 7608 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7609 target_compiler_static="n" 7610 fi 7611 else 7612 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7613 target_compiler_static="y" 7614 fi 7615else 7616 target_compiler="" 7617fi 7618 7619symlink "$source_path/Makefile.target" "$target_dir/Makefile" 7620 7621upper() { 7622 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7623} 7624 7625target_arch_name="$(upper $TARGET_ARCH)" 7626echo "TARGET_$target_arch_name=y" >> $config_target_mak 7627echo "TARGET_NAME=$target_name" >> $config_target_mak 7628echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7629if [ "$TARGET_ABI_DIR" = "" ]; then 7630 TARGET_ABI_DIR=$TARGET_ARCH 7631fi 7632echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7633if [ "$HOST_VARIANT_DIR" != "" ]; then 7634 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7635fi 7636 7637if supported_xen_target $target; then 7638 echo "CONFIG_XEN=y" >> $config_target_mak 7639 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak 7640 if test "$xen_pci_passthrough" = yes; then 7641 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7642 fi 7643else 7644 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak 7645fi 7646if supported_kvm_target $target; then 7647 echo "CONFIG_KVM=y" >> $config_target_mak 7648 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak 7649else 7650 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak 7651fi 7652if supported_hax_target $target; then 7653 echo "CONFIG_HAX=y" >> $config_target_mak 7654fi 7655if supported_hvf_target $target; then 7656 echo "CONFIG_HVF=y" >> $config_target_mak 7657fi 7658if supported_whpx_target $target; then 7659 echo "CONFIG_WHPX=y" >> $config_target_mak 7660fi 7661if test "$target_bigendian" = "yes" ; then 7662 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7663fi 7664if test "$target_softmmu" = "yes" ; then 7665 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7666 if test "$mttcg" = "yes" ; then 7667 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7668 fi 7669fi 7670if test "$target_user_only" = "yes" ; then 7671 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7672 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7673fi 7674if test "$target_linux_user" = "yes" ; then 7675 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7676fi 7677list="" 7678if test ! -z "$gdb_xml_files" ; then 7679 for x in $gdb_xml_files; do 7680 list="$list $source_path/gdb-xml/$x" 7681 done 7682 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7683fi 7684 7685if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 7686 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7687fi 7688if test "$target_bsd_user" = "yes" ; then 7689 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7690fi 7691 7692if test -n "$target_compiler"; then 7693 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak 7694 7695 if test -n "$target_compiler_static"; then 7696 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak 7697 fi 7698 7699 if test -n "$target_compiler_cflags"; then 7700 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak 7701 fi 7702fi 7703 7704 7705# generate QEMU_CFLAGS/LDFLAGS for targets 7706 7707cflags="" 7708ldflags="" 7709 7710disas_config() { 7711 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7712 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7713} 7714 7715for i in $ARCH $TARGET_BASE_ARCH ; do 7716 case "$i" in 7717 alpha) 7718 disas_config "ALPHA" 7719 ;; 7720 aarch64) 7721 if test -n "${cxx}"; then 7722 disas_config "ARM_A64" 7723 fi 7724 ;; 7725 arm) 7726 disas_config "ARM" 7727 if test -n "${cxx}"; then 7728 disas_config "ARM_A64" 7729 fi 7730 ;; 7731 cris) 7732 disas_config "CRIS" 7733 ;; 7734 hppa) 7735 disas_config "HPPA" 7736 ;; 7737 i386|x86_64|x32) 7738 disas_config "I386" 7739 ;; 7740 lm32) 7741 disas_config "LM32" 7742 ;; 7743 m68k) 7744 disas_config "M68K" 7745 ;; 7746 microblaze*) 7747 disas_config "MICROBLAZE" 7748 ;; 7749 mips*) 7750 disas_config "MIPS" 7751 if test -n "${cxx}"; then 7752 disas_config "NANOMIPS" 7753 fi 7754 ;; 7755 moxie*) 7756 disas_config "MOXIE" 7757 ;; 7758 nios2) 7759 disas_config "NIOS2" 7760 ;; 7761 or1k) 7762 disas_config "OPENRISC" 7763 ;; 7764 ppc*) 7765 disas_config "PPC" 7766 ;; 7767 riscv*) 7768 disas_config "RISCV" 7769 ;; 7770 s390*) 7771 disas_config "S390" 7772 ;; 7773 sh4) 7774 disas_config "SH4" 7775 ;; 7776 sparc*) 7777 disas_config "SPARC" 7778 ;; 7779 xtensa*) 7780 disas_config "XTENSA" 7781 ;; 7782 esac 7783done 7784if test "$tcg_interpreter" = "yes" ; then 7785 disas_config "TCI" 7786fi 7787 7788case "$ARCH" in 7789alpha) 7790 # Ensure there's only a single GP 7791 cflags="-msmall-data $cflags" 7792;; 7793esac 7794 7795if test "$gprof" = "yes" ; then 7796 echo "TARGET_GPROF=y" >> $config_target_mak 7797 if test "$target_linux_user" = "yes" ; then 7798 cflags="-p $cflags" 7799 ldflags="-p $ldflags" 7800 fi 7801 if test "$target_softmmu" = "yes" ; then 7802 ldflags="-p $ldflags" 7803 echo "GPROF_CFLAGS=-p" >> $config_target_mak 7804 fi 7805fi 7806 7807if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then 7808 ldflags="$ldflags $textseg_ldflags" 7809fi 7810 7811# Newer kernels on s390 check for an S390_PGSTE program header and 7812# enable the pgste page table extensions in that case. This makes 7813# the vm.allocate_pgste sysctl unnecessary. We enable this program 7814# header if 7815# - we build on s390x 7816# - we build the system emulation for s390x (qemu-system-s390x) 7817# - KVM is enabled 7818# - the linker supports --s390-pgste 7819if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \ 7820 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then 7821 if ld_has --s390-pgste ; then 7822 ldflags="-Wl,--s390-pgste $ldflags" 7823 fi 7824fi 7825 7826echo "LDFLAGS+=$ldflags" >> $config_target_mak 7827echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 7828 7829done # for target in $targets 7830 7831if test -n "$enabled_cross_compilers"; then 7832 echo 7833 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers" 7834fi 7835 7836if [ "$fdt" = "git" ]; then 7837 echo "config-host.h: subdir-dtc" >> $config_host_mak 7838fi 7839if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7840 echo "config-host.h: subdir-capstone" >> $config_host_mak 7841fi 7842if test -n "$LIBCAPSTONE"; then 7843 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7844fi 7845 7846if test "$numa" = "yes"; then 7847 echo "CONFIG_NUMA=y" >> $config_host_mak 7848fi 7849 7850if test "$ccache_cpp2" = "yes"; then 7851 echo "export CCACHE_CPP2=y" >> $config_host_mak 7852fi 7853 7854# If we're using a separate build tree, set it up now. 7855# DIRS are directories which we simply mkdir in the build tree; 7856# LINKS are things to symlink back into the source tree 7857# (these can be both files and directories). 7858# Caution: do not add files or directories here using wildcards. This 7859# will result in problems later if a new file matching the wildcard is 7860# added to the source tree -- nothing will cause configure to be rerun 7861# so the build tree will be missing the link back to the new file, and 7862# tests might fail. Prefer to keep the relevant files in their own 7863# directory and symlink the directory instead. 7864DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm" 7865DIRS="$DIRS tests/fp tests/qgraph" 7866DIRS="$DIRS docs docs/interop fsdev scsi" 7867DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 7868DIRS="$DIRS roms/seabios roms/vgabios" 7869LINKS="Makefile tests/tcg/Makefile" 7870LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 7871LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 7872LINKS="$LINKS tests/fp/Makefile" 7873LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" 7874LINKS="$LINKS pc-bios/spapr-rtas/Makefile" 7875LINKS="$LINKS pc-bios/s390-ccw/Makefile" 7876LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile" 7877LINKS="$LINKS pc-bios/qemu-icon.bmp" 7878LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 7879LINKS="$LINKS tests/acceptance tests/data" 7880LINKS="$LINKS tests/qemu-iotests/check" 7881LINKS="$LINKS python" 7882for bios_file in \ 7883 $source_path/pc-bios/*.bin \ 7884 $source_path/pc-bios/*.lid \ 7885 $source_path/pc-bios/*.rom \ 7886 $source_path/pc-bios/*.dtb \ 7887 $source_path/pc-bios/*.img \ 7888 $source_path/pc-bios/openbios-* \ 7889 $source_path/pc-bios/u-boot.* \ 7890 $source_path/pc-bios/edk2-*.fd.bz2 \ 7891 $source_path/pc-bios/palcode-* 7892do 7893 LINKS="$LINKS pc-bios/$(basename $bios_file)" 7894done 7895mkdir -p $DIRS 7896for f in $LINKS ; do 7897 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 7898 symlink "$source_path/$f" "$f" 7899 fi 7900done 7901 7902# temporary config to build submodules 7903for rom in seabios vgabios ; do 7904 config_mak=roms/$rom/config.mak 7905 echo "# Automatically generated by configure - do not modify" > $config_mak 7906 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7907 echo "AS=$as" >> $config_mak 7908 echo "CCAS=$ccas" >> $config_mak 7909 echo "CC=$cc" >> $config_mak 7910 echo "BCC=bcc" >> $config_mak 7911 echo "CPP=$cpp" >> $config_mak 7912 echo "OBJCOPY=objcopy" >> $config_mak 7913 echo "IASL=$iasl" >> $config_mak 7914 echo "LD=$ld" >> $config_mak 7915 echo "RANLIB=$ranlib" >> $config_mak 7916done 7917 7918# set up qemu-iotests in this build directory 7919iotests_common_env="tests/qemu-iotests/common.env" 7920 7921echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 7922echo >> "$iotests_common_env" 7923echo "export PYTHON='$python'" >> "$iotests_common_env" 7924 7925# Save the configure command line for later reuse. 7926cat <<EOD >config.status 7927#!/bin/sh 7928# Generated by configure. 7929# Run this file to recreate the current configuration. 7930# Compiler output produced by configure, useful for debugging 7931# configure, is in config.log if it exists. 7932EOD 7933 7934preserve_env() { 7935 envname=$1 7936 7937 eval envval=\$$envname 7938 7939 if test -n "$envval" 7940 then 7941 echo "$envname='$envval'" >> config.status 7942 echo "export $envname" >> config.status 7943 else 7944 echo "unset $envname" >> config.status 7945 fi 7946} 7947 7948# Preserve various env variables that influence what 7949# features/build target configure will detect 7950preserve_env AR 7951preserve_env AS 7952preserve_env CC 7953preserve_env CPP 7954preserve_env CXX 7955preserve_env INSTALL 7956preserve_env LD 7957preserve_env LD_LIBRARY_PATH 7958preserve_env LIBTOOL 7959preserve_env MAKE 7960preserve_env NM 7961preserve_env OBJCOPY 7962preserve_env PATH 7963preserve_env PKG_CONFIG 7964preserve_env PKG_CONFIG_LIBDIR 7965preserve_env PKG_CONFIG_PATH 7966preserve_env PYTHON 7967preserve_env SDL_CONFIG 7968preserve_env SDL2_CONFIG 7969preserve_env SMBD 7970preserve_env STRIP 7971preserve_env WINDRES 7972 7973printf "exec" >>config.status 7974printf " '%s'" "$0" "$@" >>config.status 7975echo ' "$@"' >>config.status 7976chmod +x config.status 7977 7978rm -r "$TMPDIR1" 7979