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