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