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