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