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