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