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