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 3619 3620# This workaround is required due to a bug in pkg-config file for glib as it 3621# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3622 3623if test "$static" = yes && test "$mingw32" = yes; then 3624 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" 3625fi 3626 3627for i in $glib_modules; do 3628 if $pkg_config --atleast-version=$glib_req_ver $i; then 3629 glib_cflags=$($pkg_config --cflags $i) 3630 glib_libs=$($pkg_config --libs $i) 3631 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" 3632 LIBS="$glib_libs $LIBS" 3633 libs_qga="$glib_libs $libs_qga" 3634 else 3635 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3636 fi 3637done 3638 3639if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 3640 gio=yes 3641 gio_cflags=$($pkg_config --cflags gio-2.0) 3642 gio_libs=$($pkg_config --libs gio-2.0) 3643else 3644 gio=no 3645fi 3646 3647# Sanity check that the current size_t matches the 3648# size that glib thinks it should be. This catches 3649# problems on multi-arch where people try to build 3650# 32-bit QEMU while pointing at 64-bit glib headers 3651cat > $TMPC <<EOF 3652#include <glib.h> 3653#include <unistd.h> 3654 3655#define QEMU_BUILD_BUG_ON(x) \ 3656 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3657 3658int main(void) { 3659 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3660 return 0; 3661} 3662EOF 3663 3664if ! compile_prog "$CFLAGS" "$LIBS" ; then 3665 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3666 "You probably need to set PKG_CONFIG_LIBDIR"\ 3667 "to point to the right pkg-config files for your"\ 3668 "build target" 3669fi 3670 3671# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3672cat > $TMPC << EOF 3673#include <glib.h> 3674int main(void) { return 0; } 3675EOF 3676if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3677 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3678 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3679 CFLAGS="-Wno-unknown-attributes $CFLAGS" 3680 fi 3681fi 3682 3683######################################### 3684# zlib check 3685 3686if test "$zlib" != "no" ; then 3687 if $pkg_config --exists zlib; then 3688 zlib_cflags=$($pkg_config --cflags zlib) 3689 zlib_libs=$($pkg_config --libs zlib) 3690 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS" 3691 LIBS="$zlib_libs $LIBS" 3692 else 3693 cat > $TMPC << EOF 3694#include <zlib.h> 3695int main(void) { zlibVersion(); return 0; } 3696EOF 3697 if compile_prog "" "-lz" ; then 3698 LIBS="$LIBS -lz" 3699 else 3700 error_exit "zlib check failed" \ 3701 "Make sure to have the zlib libs and headers installed." 3702 fi 3703 fi 3704fi 3705 3706########################################## 3707# SHA command probe for modules 3708if test "$modules" = yes; then 3709 shacmd_probe="sha1sum sha1 shasum" 3710 for c in $shacmd_probe; do 3711 if has $c; then 3712 shacmd="$c" 3713 break 3714 fi 3715 done 3716 if test "$shacmd" = ""; then 3717 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3718 fi 3719fi 3720 3721########################################## 3722# pixman support probe 3723 3724if test "$want_tools" = "no" && test "$softmmu" = "no"; then 3725 pixman_cflags= 3726 pixman_libs= 3727elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 3728 pixman_cflags=$($pkg_config --cflags pixman-1) 3729 pixman_libs=$($pkg_config --libs pixman-1) 3730else 3731 error_exit "pixman >= 0.21.8 not present." \ 3732 "Please install the pixman devel package." 3733fi 3734 3735########################################## 3736# libmpathpersist probe 3737 3738if test "$mpath" != "no" ; then 3739 # probe for the new API 3740 cat > $TMPC <<EOF 3741#include <libudev.h> 3742#include <mpath_persist.h> 3743unsigned mpath_mx_alloc_len = 1024; 3744int logsink; 3745static struct config *multipath_conf; 3746extern struct udev *udev; 3747extern struct config *get_multipath_config(void); 3748extern void put_multipath_config(struct config *conf); 3749struct udev *udev; 3750struct config *get_multipath_config(void) { return multipath_conf; } 3751void put_multipath_config(struct config *conf) { } 3752 3753int main(void) { 3754 udev = udev_new(); 3755 multipath_conf = mpath_lib_init(); 3756 return 0; 3757} 3758EOF 3759 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3760 mpathpersist=yes 3761 mpathpersist_new_api=yes 3762 else 3763 # probe for the old API 3764 cat > $TMPC <<EOF 3765#include <libudev.h> 3766#include <mpath_persist.h> 3767unsigned mpath_mx_alloc_len = 1024; 3768int logsink; 3769int main(void) { 3770 struct udev *udev = udev_new(); 3771 mpath_lib_init(udev); 3772 return 0; 3773} 3774EOF 3775 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3776 mpathpersist=yes 3777 mpathpersist_new_api=no 3778 else 3779 mpathpersist=no 3780 fi 3781 fi 3782else 3783 mpathpersist=no 3784fi 3785 3786########################################## 3787# libcap probe 3788 3789if test "$cap" != "no" ; then 3790 cat > $TMPC <<EOF 3791#include <stdio.h> 3792#include <sys/capability.h> 3793int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; } 3794EOF 3795 if compile_prog "" "-lcap" ; then 3796 cap=yes 3797 else 3798 cap=no 3799 fi 3800fi 3801 3802########################################## 3803# pthread probe 3804PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3805 3806pthread=no 3807cat > $TMPC << EOF 3808#include <pthread.h> 3809static void *f(void *p) { return NULL; } 3810int main(void) { 3811 pthread_t thread; 3812 pthread_create(&thread, 0, f, 0); 3813 return 0; 3814} 3815EOF 3816if compile_prog "" "" ; then 3817 pthread=yes 3818else 3819 for pthread_lib in $PTHREADLIBS_LIST; do 3820 if compile_prog "" "$pthread_lib" ; then 3821 pthread=yes 3822 found=no 3823 for lib_entry in $LIBS; do 3824 if test "$lib_entry" = "$pthread_lib"; then 3825 found=yes 3826 break 3827 fi 3828 done 3829 if test "$found" = "no"; then 3830 LIBS="$pthread_lib $LIBS" 3831 libs_qga="$pthread_lib $libs_qga" 3832 fi 3833 PTHREAD_LIB="$pthread_lib" 3834 break 3835 fi 3836 done 3837fi 3838 3839if test "$mingw32" != yes && test "$pthread" = no; then 3840 error_exit "pthread check failed" \ 3841 "Make sure to have the pthread libs and headers installed." 3842fi 3843 3844# check for pthread_setname_np with thread id 3845pthread_setname_np_w_tid=no 3846cat > $TMPC << EOF 3847#include <pthread.h> 3848 3849static void *f(void *p) { return NULL; } 3850int main(void) 3851{ 3852 pthread_t thread; 3853 pthread_create(&thread, 0, f, 0); 3854 pthread_setname_np(thread, "QEMU"); 3855 return 0; 3856} 3857EOF 3858if compile_prog "" "$pthread_lib" ; then 3859 pthread_setname_np_w_tid=yes 3860fi 3861 3862# check for pthread_setname_np without thread id 3863pthread_setname_np_wo_tid=no 3864cat > $TMPC << EOF 3865#include <pthread.h> 3866 3867static void *f(void *p) { pthread_setname_np("QEMU"); } 3868int main(void) 3869{ 3870 pthread_t thread; 3871 pthread_create(&thread, 0, f, 0); 3872 return 0; 3873} 3874EOF 3875if compile_prog "" "$pthread_lib" ; then 3876 pthread_setname_np_wo_tid=yes 3877fi 3878 3879########################################## 3880# rbd probe 3881if test "$rbd" != "no" ; then 3882 cat > $TMPC <<EOF 3883#include <stdio.h> 3884#include <rbd/librbd.h> 3885int main(void) { 3886 rados_t cluster; 3887 rados_create(&cluster, NULL); 3888 return 0; 3889} 3890EOF 3891 rbd_libs="-lrbd -lrados" 3892 if compile_prog "" "$rbd_libs" ; then 3893 rbd=yes 3894 else 3895 if test "$rbd" = "yes" ; then 3896 feature_not_found "rados block device" "Install librbd/ceph devel" 3897 fi 3898 rbd=no 3899 fi 3900fi 3901 3902########################################## 3903# libssh probe 3904if test "$libssh" != "no" ; then 3905 if $pkg_config --exists libssh; then 3906 libssh_cflags=$($pkg_config libssh --cflags) 3907 libssh_libs=$($pkg_config libssh --libs) 3908 libssh=yes 3909 else 3910 if test "$libssh" = "yes" ; then 3911 error_exit "libssh required for --enable-libssh" 3912 fi 3913 libssh=no 3914 fi 3915fi 3916 3917########################################## 3918# Check for libssh 0.8 3919# This is done like this instead of using the LIBSSH_VERSION_* and 3920# SSH_VERSION_* macros because some distributions in the past shipped 3921# snapshots of the future 0.8 from Git, and those snapshots did not 3922# have updated version numbers (still referring to 0.7.0). 3923 3924if test "$libssh" = "yes"; then 3925 cat > $TMPC <<EOF 3926#include <libssh/libssh.h> 3927int main(void) { return ssh_get_server_publickey(NULL, NULL); } 3928EOF 3929 if compile_prog "$libssh_cflags" "$libssh_libs"; then 3930 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" 3931 fi 3932fi 3933 3934########################################## 3935# linux-aio probe 3936 3937if test "$linux_aio" != "no" ; then 3938 cat > $TMPC <<EOF 3939#include <libaio.h> 3940#include <sys/eventfd.h> 3941#include <stddef.h> 3942int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 3943EOF 3944 if compile_prog "" "-laio" ; then 3945 linux_aio=yes 3946 else 3947 if test "$linux_aio" = "yes" ; then 3948 feature_not_found "linux AIO" "Install libaio devel" 3949 fi 3950 linux_aio=no 3951 fi 3952fi 3953 3954########################################## 3955# TPM emulation is only on POSIX 3956 3957if test "$tpm" = ""; then 3958 if test "$mingw32" = "yes"; then 3959 tpm=no 3960 else 3961 tpm=yes 3962 fi 3963elif test "$tpm" = "yes"; then 3964 if test "$mingw32" = "yes" ; then 3965 error_exit "TPM emulation only available on POSIX systems" 3966 fi 3967fi 3968 3969########################################## 3970# attr probe 3971 3972if test "$attr" != "no" ; then 3973 cat > $TMPC <<EOF 3974#include <stdio.h> 3975#include <sys/types.h> 3976#ifdef CONFIG_LIBATTR 3977#include <attr/xattr.h> 3978#else 3979#include <sys/xattr.h> 3980#endif 3981int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 3982EOF 3983 if compile_prog "" "" ; then 3984 attr=yes 3985 # Older distros have <attr/xattr.h>, and need -lattr: 3986 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 3987 attr=yes 3988 LIBS="-lattr $LIBS" 3989 libattr=yes 3990 else 3991 if test "$attr" = "yes" ; then 3992 feature_not_found "ATTR" "Install libc6 or libattr devel" 3993 fi 3994 attr=no 3995 fi 3996fi 3997 3998########################################## 3999# iovec probe 4000cat > $TMPC <<EOF 4001#include <sys/types.h> 4002#include <sys/uio.h> 4003#include <unistd.h> 4004int main(void) { return sizeof(struct iovec); } 4005EOF 4006iovec=no 4007if compile_prog "" "" ; then 4008 iovec=yes 4009fi 4010 4011########################################## 4012# preadv probe 4013cat > $TMPC <<EOF 4014#include <sys/types.h> 4015#include <sys/uio.h> 4016#include <unistd.h> 4017int main(void) { return preadv(0, 0, 0, 0); } 4018EOF 4019preadv=no 4020if compile_prog "" "" ; then 4021 preadv=yes 4022fi 4023 4024########################################## 4025# fdt probe 4026# fdt support is mandatory for at least some target architectures, 4027# so insist on it if we're building those system emulators. 4028fdt_required=no 4029for target in $target_list; do 4030 case $target in 4031 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu) 4032 fdt_required=yes 4033 ;; 4034 esac 4035done 4036 4037if test "$fdt_required" = "yes"; then 4038 if test "$fdt" = "no"; then 4039 error_exit "fdt disabled but some requested targets require it." \ 4040 "You can turn off fdt only if you also disable all the system emulation" \ 4041 "targets which need it (by specifying a cut down --target-list)." 4042 fi 4043 fdt=yes 4044fi 4045 4046if test "$fdt" != "no" ; then 4047 fdt_libs="-lfdt" 4048 # explicitly check for libfdt_env.h as it is missing in some stable installs 4049 # and test for required functions to make sure we are on a version >= 1.4.2 4050 cat > $TMPC << EOF 4051#include <libfdt.h> 4052#include <libfdt_env.h> 4053int main(void) { fdt_check_full(NULL, 0); return 0; } 4054EOF 4055 if compile_prog "" "$fdt_libs" ; then 4056 # system DTC is good - use it 4057 fdt=system 4058 else 4059 # have GIT checkout, so activate dtc submodule 4060 if test -e "${source_path}/.git" ; then 4061 git_submodules="${git_submodules} dtc" 4062 fi 4063 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 4064 fdt=git 4065 mkdir -p dtc 4066 if [ "$pwd_is_source_path" != "y" ] ; then 4067 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 4068 symlink "$source_path/dtc/scripts" "dtc/scripts" 4069 fi 4070 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 4071 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt" 4072 fdt_libs="$fdt_libs" 4073 elif test "$fdt" = "yes" ; then 4074 # Not a git build & no libfdt found, prompt for system install 4075 error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 4076 "Please install the DTC (libfdt) devel package" 4077 else 4078 # don't have and don't want 4079 fdt_libs= 4080 fdt=no 4081 fi 4082 fi 4083fi 4084 4085libs_softmmu="$libs_softmmu $fdt_libs" 4086 4087########################################## 4088# opengl probe (for sdl2, gtk, milkymist-tmu2) 4089 4090gbm="no" 4091if $pkg_config gbm; then 4092 gbm_cflags="$($pkg_config --cflags gbm)" 4093 gbm_libs="$($pkg_config --libs gbm)" 4094 gbm="yes" 4095fi 4096 4097if test "$opengl" != "no" ; then 4098 opengl_pkgs="epoxy gbm" 4099 if $pkg_config $opengl_pkgs; then 4100 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 4101 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 4102 opengl=yes 4103 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 4104 gtk_gl="yes" 4105 fi 4106 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 4107 else 4108 if test "$opengl" = "yes" ; then 4109 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 4110 fi 4111 opengl_cflags="" 4112 opengl_libs="" 4113 opengl=no 4114 fi 4115fi 4116 4117if test "$opengl" = "yes"; then 4118 cat > $TMPC << EOF 4119#include <epoxy/egl.h> 4120#ifndef EGL_MESA_image_dma_buf_export 4121# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 4122#endif 4123int main(void) { return 0; } 4124EOF 4125 if compile_prog "" "" ; then 4126 opengl_dmabuf=yes 4127 fi 4128fi 4129 4130if test "$opengl" = "yes" && test "$have_x11" = "yes"; then 4131 for target in $target_list; do 4132 case $target in 4133 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL 4134 need_x11=yes 4135 ;; 4136 esac 4137 done 4138fi 4139 4140########################################## 4141# libxml2 probe 4142if test "$libxml2" != "no" ; then 4143 if $pkg_config --exists libxml-2.0; then 4144 libxml2="yes" 4145 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 4146 libxml2_libs=$($pkg_config --libs libxml-2.0) 4147 else 4148 if test "$libxml2" = "yes"; then 4149 feature_not_found "libxml2" "Install libxml2 devel" 4150 fi 4151 libxml2="no" 4152 fi 4153fi 4154 4155########################################## 4156# glusterfs probe 4157if test "$glusterfs" != "no" ; then 4158 if $pkg_config --atleast-version=3 glusterfs-api; then 4159 glusterfs="yes" 4160 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 4161 glusterfs_libs=$($pkg_config --libs glusterfs-api) 4162 if $pkg_config --atleast-version=4 glusterfs-api; then 4163 glusterfs_xlator_opt="yes" 4164 fi 4165 if $pkg_config --atleast-version=5 glusterfs-api; then 4166 glusterfs_discard="yes" 4167 fi 4168 if $pkg_config --atleast-version=6 glusterfs-api; then 4169 glusterfs_fallocate="yes" 4170 glusterfs_zerofill="yes" 4171 fi 4172 cat > $TMPC << EOF 4173#include <glusterfs/api/glfs.h> 4174 4175int 4176main(void) 4177{ 4178 /* new glfs_ftruncate() passes two additional args */ 4179 return glfs_ftruncate(NULL, 0, NULL, NULL); 4180} 4181EOF 4182 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4183 glusterfs_ftruncate_has_stat="yes" 4184 fi 4185 cat > $TMPC << EOF 4186#include <glusterfs/api/glfs.h> 4187 4188/* new glfs_io_cbk() passes two additional glfs_stat structs */ 4189static void 4190glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 4191{} 4192 4193int 4194main(void) 4195{ 4196 glfs_io_cbk iocb = &glusterfs_iocb; 4197 iocb(NULL, 0 , NULL, NULL, NULL); 4198 return 0; 4199} 4200EOF 4201 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4202 glusterfs_iocb_has_stat="yes" 4203 fi 4204 else 4205 if test "$glusterfs" = "yes" ; then 4206 feature_not_found "GlusterFS backend support" \ 4207 "Install glusterfs-api devel >= 3" 4208 fi 4209 glusterfs="no" 4210 fi 4211fi 4212 4213# Check for inotify functions when we are building linux-user 4214# emulator. This is done because older glibc versions don't 4215# have syscall stubs for these implemented. In that case we 4216# don't provide them even if kernel supports them. 4217# 4218inotify=no 4219cat > $TMPC << EOF 4220#include <sys/inotify.h> 4221 4222int 4223main(void) 4224{ 4225 /* try to start inotify */ 4226 return inotify_init(); 4227} 4228EOF 4229if compile_prog "" "" ; then 4230 inotify=yes 4231fi 4232 4233inotify1=no 4234cat > $TMPC << EOF 4235#include <sys/inotify.h> 4236 4237int 4238main(void) 4239{ 4240 /* try to start inotify */ 4241 return inotify_init1(0); 4242} 4243EOF 4244if compile_prog "" "" ; then 4245 inotify1=yes 4246fi 4247 4248# check if pipe2 is there 4249pipe2=no 4250cat > $TMPC << EOF 4251#include <unistd.h> 4252#include <fcntl.h> 4253 4254int main(void) 4255{ 4256 int pipefd[2]; 4257 return pipe2(pipefd, O_CLOEXEC); 4258} 4259EOF 4260if compile_prog "" "" ; then 4261 pipe2=yes 4262fi 4263 4264# check if accept4 is there 4265accept4=no 4266cat > $TMPC << EOF 4267#include <sys/socket.h> 4268#include <stddef.h> 4269 4270int main(void) 4271{ 4272 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4273 return 0; 4274} 4275EOF 4276if compile_prog "" "" ; then 4277 accept4=yes 4278fi 4279 4280# check if tee/splice is there. vmsplice was added same time. 4281splice=no 4282cat > $TMPC << EOF 4283#include <unistd.h> 4284#include <fcntl.h> 4285#include <limits.h> 4286 4287int main(void) 4288{ 4289 int len, fd = 0; 4290 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4291 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4292 return 0; 4293} 4294EOF 4295if compile_prog "" "" ; then 4296 splice=yes 4297fi 4298 4299########################################## 4300# libnuma probe 4301 4302if test "$numa" != "no" ; then 4303 cat > $TMPC << EOF 4304#include <numa.h> 4305int main(void) { return numa_available(); } 4306EOF 4307 4308 if compile_prog "" "-lnuma" ; then 4309 numa=yes 4310 libs_softmmu="-lnuma $libs_softmmu" 4311 else 4312 if test "$numa" = "yes" ; then 4313 feature_not_found "numa" "install numactl devel" 4314 fi 4315 numa=no 4316 fi 4317fi 4318 4319if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4320 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4321 exit 1 4322fi 4323 4324# Even if malloc_trim() is available, these non-libc memory allocators 4325# do not support it. 4326if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4327 if test "$malloc_trim" = "yes" ; then 4328 echo "Disabling malloc_trim with non-libc memory allocator" 4329 fi 4330 malloc_trim="no" 4331fi 4332 4333####################################### 4334# malloc_trim 4335 4336if test "$malloc_trim" != "no" ; then 4337 cat > $TMPC << EOF 4338#include <malloc.h> 4339int main(void) { malloc_trim(0); return 0; } 4340EOF 4341 if compile_prog "" "" ; then 4342 malloc_trim="yes" 4343 else 4344 malloc_trim="no" 4345 fi 4346fi 4347 4348########################################## 4349# tcmalloc probe 4350 4351if test "$tcmalloc" = "yes" ; then 4352 cat > $TMPC << EOF 4353#include <stdlib.h> 4354int main(void) { malloc(1); return 0; } 4355EOF 4356 4357 if compile_prog "" "-ltcmalloc" ; then 4358 LIBS="-ltcmalloc $LIBS" 4359 else 4360 feature_not_found "tcmalloc" "install gperftools devel" 4361 fi 4362fi 4363 4364########################################## 4365# jemalloc probe 4366 4367if test "$jemalloc" = "yes" ; then 4368 cat > $TMPC << EOF 4369#include <stdlib.h> 4370int main(void) { malloc(1); return 0; } 4371EOF 4372 4373 if compile_prog "" "-ljemalloc" ; then 4374 LIBS="-ljemalloc $LIBS" 4375 else 4376 feature_not_found "jemalloc" "install jemalloc devel" 4377 fi 4378fi 4379 4380########################################## 4381# signalfd probe 4382signalfd="no" 4383cat > $TMPC << EOF 4384#include <unistd.h> 4385#include <sys/syscall.h> 4386#include <signal.h> 4387int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4388EOF 4389 4390if compile_prog "" "" ; then 4391 signalfd=yes 4392fi 4393 4394# check if optreset global is declared by <getopt.h> 4395optreset="no" 4396cat > $TMPC << EOF 4397#include <getopt.h> 4398int main(void) { return optreset; } 4399EOF 4400 4401if compile_prog "" "" ; then 4402 optreset=yes 4403fi 4404 4405# check if eventfd is supported 4406eventfd=no 4407cat > $TMPC << EOF 4408#include <sys/eventfd.h> 4409 4410int main(void) 4411{ 4412 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4413} 4414EOF 4415if compile_prog "" "" ; then 4416 eventfd=yes 4417fi 4418 4419# check if memfd is supported 4420memfd=no 4421cat > $TMPC << EOF 4422#include <sys/mman.h> 4423 4424int main(void) 4425{ 4426 return memfd_create("foo", MFD_ALLOW_SEALING); 4427} 4428EOF 4429if compile_prog "" "" ; then 4430 memfd=yes 4431fi 4432 4433# check for usbfs 4434have_usbfs=no 4435if test "$linux_user" = "yes"; then 4436 cat > $TMPC << EOF 4437#include <linux/usbdevice_fs.h> 4438 4439#ifndef USBDEVFS_GET_CAPABILITIES 4440#error "USBDEVFS_GET_CAPABILITIES undefined" 4441#endif 4442 4443#ifndef USBDEVFS_DISCONNECT_CLAIM 4444#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4445#endif 4446 4447int main(void) 4448{ 4449 return 0; 4450} 4451EOF 4452 if compile_prog "" ""; then 4453 have_usbfs=yes 4454 fi 4455fi 4456 4457# check for fallocate 4458fallocate=no 4459cat > $TMPC << EOF 4460#include <fcntl.h> 4461 4462int main(void) 4463{ 4464 fallocate(0, 0, 0, 0); 4465 return 0; 4466} 4467EOF 4468if compile_prog "" "" ; then 4469 fallocate=yes 4470fi 4471 4472# check for fallocate hole punching 4473fallocate_punch_hole=no 4474cat > $TMPC << EOF 4475#include <fcntl.h> 4476#include <linux/falloc.h> 4477 4478int main(void) 4479{ 4480 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4481 return 0; 4482} 4483EOF 4484if compile_prog "" "" ; then 4485 fallocate_punch_hole=yes 4486fi 4487 4488# check that fallocate supports range zeroing inside the file 4489fallocate_zero_range=no 4490cat > $TMPC << EOF 4491#include <fcntl.h> 4492#include <linux/falloc.h> 4493 4494int main(void) 4495{ 4496 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4497 return 0; 4498} 4499EOF 4500if compile_prog "" "" ; then 4501 fallocate_zero_range=yes 4502fi 4503 4504# check for posix_fallocate 4505posix_fallocate=no 4506cat > $TMPC << EOF 4507#include <fcntl.h> 4508 4509int main(void) 4510{ 4511 posix_fallocate(0, 0, 0); 4512 return 0; 4513} 4514EOF 4515if compile_prog "" "" ; then 4516 posix_fallocate=yes 4517fi 4518 4519# check for sync_file_range 4520sync_file_range=no 4521cat > $TMPC << EOF 4522#include <fcntl.h> 4523 4524int main(void) 4525{ 4526 sync_file_range(0, 0, 0, 0); 4527 return 0; 4528} 4529EOF 4530if compile_prog "" "" ; then 4531 sync_file_range=yes 4532fi 4533 4534# check for linux/fiemap.h and FS_IOC_FIEMAP 4535fiemap=no 4536cat > $TMPC << EOF 4537#include <sys/ioctl.h> 4538#include <linux/fs.h> 4539#include <linux/fiemap.h> 4540 4541int main(void) 4542{ 4543 ioctl(0, FS_IOC_FIEMAP, 0); 4544 return 0; 4545} 4546EOF 4547if compile_prog "" "" ; then 4548 fiemap=yes 4549fi 4550 4551# check for dup3 4552dup3=no 4553cat > $TMPC << EOF 4554#include <unistd.h> 4555 4556int main(void) 4557{ 4558 dup3(0, 0, 0); 4559 return 0; 4560} 4561EOF 4562if compile_prog "" "" ; then 4563 dup3=yes 4564fi 4565 4566# check for ppoll support 4567ppoll=no 4568cat > $TMPC << EOF 4569#include <poll.h> 4570 4571int main(void) 4572{ 4573 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4574 ppoll(&pfd, 1, 0, 0); 4575 return 0; 4576} 4577EOF 4578if compile_prog "" "" ; then 4579 ppoll=yes 4580fi 4581 4582# check for prctl(PR_SET_TIMERSLACK , ... ) support 4583prctl_pr_set_timerslack=no 4584cat > $TMPC << EOF 4585#include <sys/prctl.h> 4586 4587int main(void) 4588{ 4589 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4590 return 0; 4591} 4592EOF 4593if compile_prog "" "" ; then 4594 prctl_pr_set_timerslack=yes 4595fi 4596 4597# check for epoll support 4598epoll=no 4599cat > $TMPC << EOF 4600#include <sys/epoll.h> 4601 4602int main(void) 4603{ 4604 epoll_create(0); 4605 return 0; 4606} 4607EOF 4608if compile_prog "" "" ; then 4609 epoll=yes 4610fi 4611 4612# epoll_create1 is a later addition 4613# so we must check separately for its presence 4614epoll_create1=no 4615cat > $TMPC << EOF 4616#include <sys/epoll.h> 4617 4618int main(void) 4619{ 4620 /* Note that we use epoll_create1 as a value, not as 4621 * a function being called. This is necessary so that on 4622 * old SPARC glibc versions where the function was present in 4623 * the library but not declared in the header file we will 4624 * fail the configure check. (Otherwise we will get a compiler 4625 * warning but not an error, and will proceed to fail the 4626 * qemu compile where we compile with -Werror.) 4627 */ 4628 return (int)(uintptr_t)&epoll_create1; 4629} 4630EOF 4631if compile_prog "" "" ; then 4632 epoll_create1=yes 4633fi 4634 4635# check for sendfile support 4636sendfile=no 4637cat > $TMPC << EOF 4638#include <sys/sendfile.h> 4639 4640int main(void) 4641{ 4642 return sendfile(0, 0, 0, 0); 4643} 4644EOF 4645if compile_prog "" "" ; then 4646 sendfile=yes 4647fi 4648 4649# check for timerfd support (glibc 2.8 and newer) 4650timerfd=no 4651cat > $TMPC << EOF 4652#include <sys/timerfd.h> 4653 4654int main(void) 4655{ 4656 return(timerfd_create(CLOCK_REALTIME, 0)); 4657} 4658EOF 4659if compile_prog "" "" ; then 4660 timerfd=yes 4661fi 4662 4663# check for setns and unshare support 4664setns=no 4665cat > $TMPC << EOF 4666#include <sched.h> 4667 4668int main(void) 4669{ 4670 int ret; 4671 ret = setns(0, 0); 4672 ret = unshare(0); 4673 return ret; 4674} 4675EOF 4676if compile_prog "" "" ; then 4677 setns=yes 4678fi 4679 4680# clock_adjtime probe 4681clock_adjtime=no 4682cat > $TMPC <<EOF 4683#include <time.h> 4684 4685int main(void) 4686{ 4687 return clock_adjtime(0, 0); 4688} 4689EOF 4690clock_adjtime=no 4691if compile_prog "" "" ; then 4692 clock_adjtime=yes 4693fi 4694 4695# syncfs probe 4696syncfs=no 4697cat > $TMPC <<EOF 4698#include <unistd.h> 4699 4700int main(void) 4701{ 4702 return syncfs(0); 4703} 4704EOF 4705syncfs=no 4706if compile_prog "" "" ; then 4707 syncfs=yes 4708fi 4709 4710# Check we have a new enough version of sphinx-build 4711has_sphinx_build() { 4712 # This is a bit awkward but works: create a trivial document and 4713 # try to run it with our configuration file (which enforces a 4714 # version requirement). This will fail if either 4715 # sphinx-build doesn't exist at all or if it is too old. 4716 mkdir -p "$TMPDIR1/sphinx" 4717 touch "$TMPDIR1/sphinx/index.rst" 4718 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1 4719} 4720 4721# Check if tools are available to build documentation. 4722if test "$docs" != "no" ; then 4723 if has makeinfo && has pod2man && has_sphinx_build; then 4724 docs=yes 4725 else 4726 if test "$docs" = "yes" ; then 4727 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx" 4728 fi 4729 docs=no 4730 fi 4731fi 4732 4733# Search for bswap_32 function 4734byteswap_h=no 4735cat > $TMPC << EOF 4736#include <byteswap.h> 4737int main(void) { return bswap_32(0); } 4738EOF 4739if compile_prog "" "" ; then 4740 byteswap_h=yes 4741fi 4742 4743# Search for bswap32 function 4744bswap_h=no 4745cat > $TMPC << EOF 4746#include <sys/endian.h> 4747#include <sys/types.h> 4748#include <machine/bswap.h> 4749int main(void) { return bswap32(0); } 4750EOF 4751if compile_prog "" "" ; then 4752 bswap_h=yes 4753fi 4754 4755########################################## 4756# Do we have libiscsi >= 1.9.0 4757if test "$libiscsi" != "no" ; then 4758 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4759 libiscsi="yes" 4760 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4761 libiscsi_libs=$($pkg_config --libs libiscsi) 4762 else 4763 if test "$libiscsi" = "yes" ; then 4764 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4765 fi 4766 libiscsi="no" 4767 fi 4768fi 4769 4770########################################## 4771# Do we need libm 4772cat > $TMPC << EOF 4773#include <math.h> 4774int main(int argc, char **argv) { return isnan(sin((double)argc)); } 4775EOF 4776if compile_prog "" "" ; then 4777 : 4778elif compile_prog "" "-lm" ; then 4779 LIBS="-lm $LIBS" 4780 libs_qga="-lm $libs_qga" 4781else 4782 error_exit "libm check failed" 4783fi 4784 4785########################################## 4786# Do we need librt 4787# uClibc provides 2 versions of clock_gettime(), one with realtime 4788# support and one without. This means that the clock_gettime() don't 4789# need -lrt. We still need it for timer_create() so we check for this 4790# function in addition. 4791cat > $TMPC <<EOF 4792#include <signal.h> 4793#include <time.h> 4794int main(void) { 4795 timer_create(CLOCK_REALTIME, NULL, NULL); 4796 return clock_gettime(CLOCK_REALTIME, NULL); 4797} 4798EOF 4799 4800if compile_prog "" "" ; then 4801 : 4802# we need pthread for static linking. use previous pthread test result 4803elif compile_prog "" "$pthread_lib -lrt" ; then 4804 LIBS="$LIBS -lrt" 4805 libs_qga="$libs_qga -lrt" 4806fi 4807 4808# Check whether we need to link libutil for openpty() 4809cat > $TMPC << EOF 4810extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 4811int main(void) { return openpty(0, 0, 0, 0, 0); } 4812EOF 4813 4814if ! compile_prog "" "" ; then 4815 if compile_prog "" "-lutil" ; then 4816 libs_softmmu="-lutil $libs_softmmu" 4817 libs_tools="-lutil $libs_tools" 4818 fi 4819fi 4820 4821########################################## 4822# spice probe 4823if test "$spice" != "no" ; then 4824 cat > $TMPC << EOF 4825#include <spice.h> 4826int main(void) { spice_server_new(); return 0; } 4827EOF 4828 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4829 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4830 if $pkg_config --atleast-version=0.12.5 spice-server && \ 4831 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4832 compile_prog "$spice_cflags" "$spice_libs" ; then 4833 spice="yes" 4834 libs_softmmu="$libs_softmmu $spice_libs" 4835 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 4836 spice_protocol_version=$($pkg_config --modversion spice-protocol) 4837 spice_server_version=$($pkg_config --modversion spice-server) 4838 else 4839 if test "$spice" = "yes" ; then 4840 feature_not_found "spice" \ 4841 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 4842 fi 4843 spice="no" 4844 fi 4845fi 4846 4847# check for smartcard support 4848if test "$smartcard" != "no"; then 4849 if $pkg_config --atleast-version=2.5.1 libcacard; then 4850 libcacard_cflags=$($pkg_config --cflags libcacard) 4851 libcacard_libs=$($pkg_config --libs libcacard) 4852 smartcard="yes" 4853 else 4854 if test "$smartcard" = "yes"; then 4855 feature_not_found "smartcard" "Install libcacard devel" 4856 fi 4857 smartcard="no" 4858 fi 4859fi 4860 4861# check for libusb 4862if test "$libusb" != "no" ; then 4863 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4864 libusb="yes" 4865 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4866 libusb_libs=$($pkg_config --libs libusb-1.0) 4867 else 4868 if test "$libusb" = "yes"; then 4869 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4870 fi 4871 libusb="no" 4872 fi 4873fi 4874 4875# check for usbredirparser for usb network redirection support 4876if test "$usb_redir" != "no" ; then 4877 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4878 usb_redir="yes" 4879 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4880 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4881 else 4882 if test "$usb_redir" = "yes"; then 4883 feature_not_found "usb-redir" "Install usbredir devel" 4884 fi 4885 usb_redir="no" 4886 fi 4887fi 4888 4889########################################## 4890# check if we have VSS SDK headers for win 4891 4892if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4893 test "$vss_win32_sdk" != "no" ; then 4894 case "$vss_win32_sdk" in 4895 "") vss_win32_include="-isystem $source_path" ;; 4896 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4897 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4898 vss_win32_include="-isystem $source_path/.sdk/vss" 4899 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4900 ;; 4901 *) vss_win32_include="-isystem $vss_win32_sdk" 4902 esac 4903 cat > $TMPC << EOF 4904#define __MIDL_user_allocate_free_DEFINED__ 4905#include <inc/win2003/vss.h> 4906int main(void) { return VSS_CTX_BACKUP; } 4907EOF 4908 if compile_prog "$vss_win32_include" "" ; then 4909 guest_agent_with_vss="yes" 4910 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4911 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4912 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4913 else 4914 if test "$vss_win32_sdk" != "" ; then 4915 echo "ERROR: Please download and install Microsoft VSS SDK:" 4916 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4917 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4918 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4919 echo "ERROR: The headers are extracted in the directory \`inc'." 4920 feature_not_found "VSS support" 4921 fi 4922 guest_agent_with_vss="no" 4923 fi 4924fi 4925 4926########################################## 4927# lookup Windows platform SDK (if not specified) 4928# The SDK is needed only to build .tlb (type library) file of guest agent 4929# VSS provider from the source. It is usually unnecessary because the 4930# pre-compiled .tlb file is included. 4931 4932if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4933 test "$guest_agent_with_vss" = "yes" ; then 4934 if test -z "$win_sdk"; then 4935 programfiles="$PROGRAMFILES" 4936 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4937 if test -n "$programfiles"; then 4938 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4939 else 4940 feature_not_found "Windows SDK" 4941 fi 4942 elif test "$win_sdk" = "no"; then 4943 win_sdk="" 4944 fi 4945fi 4946 4947########################################## 4948# check if mingw environment provides a recent ntddscsi.h 4949if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 4950 cat > $TMPC << EOF 4951#include <windows.h> 4952#include <ntddscsi.h> 4953int main(void) { 4954#if !defined(IOCTL_SCSI_GET_ADDRESS) 4955#error Missing required ioctl definitions 4956#endif 4957 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4958 return addr.Lun; 4959} 4960EOF 4961 if compile_prog "" "" ; then 4962 guest_agent_ntddscsi=yes 4963 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 4964 fi 4965fi 4966 4967########################################## 4968# virgl renderer probe 4969 4970if test "$virglrenderer" != "no" ; then 4971 cat > $TMPC << EOF 4972#include <virglrenderer.h> 4973int main(void) { virgl_renderer_poll(); return 0; } 4974EOF 4975 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4976 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4977 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 4978 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4979 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4980 virglrenderer="yes" 4981 else 4982 if test "$virglrenderer" = "yes" ; then 4983 feature_not_found "virglrenderer" 4984 fi 4985 virglrenderer="no" 4986 fi 4987fi 4988 4989########################################## 4990# capstone 4991 4992case "$capstone" in 4993 "" | yes) 4994 if $pkg_config capstone; then 4995 capstone=system 4996 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 4997 capstone=git 4998 elif test -e "${source_path}/capstone/Makefile" ; then 4999 capstone=internal 5000 elif test -z "$capstone" ; then 5001 capstone=no 5002 else 5003 feature_not_found "capstone" "Install capstone devel or git submodule" 5004 fi 5005 ;; 5006 5007 system) 5008 if ! $pkg_config capstone; then 5009 feature_not_found "capstone" "Install capstone devel" 5010 fi 5011 ;; 5012esac 5013 5014case "$capstone" in 5015 git | internal) 5016 if test "$capstone" = git; then 5017 git_submodules="${git_submodules} capstone" 5018 fi 5019 mkdir -p capstone 5020 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 5021 if test "$mingw32" = "yes"; then 5022 LIBCAPSTONE=capstone.lib 5023 else 5024 LIBCAPSTONE=libcapstone.a 5025 fi 5026 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu" 5027 ;; 5028 5029 system) 5030 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 5031 libs_cpu="$($pkg_config --libs capstone) $libs_cpu" 5032 ;; 5033 5034 no) 5035 ;; 5036 *) 5037 error_exit "Unknown state for capstone: $capstone" 5038 ;; 5039esac 5040 5041########################################## 5042# check if we have fdatasync 5043 5044fdatasync=no 5045cat > $TMPC << EOF 5046#include <unistd.h> 5047int main(void) { 5048#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 5049return fdatasync(0); 5050#else 5051#error Not supported 5052#endif 5053} 5054EOF 5055if compile_prog "" "" ; then 5056 fdatasync=yes 5057fi 5058 5059########################################## 5060# check if we have madvise 5061 5062madvise=no 5063cat > $TMPC << EOF 5064#include <sys/types.h> 5065#include <sys/mman.h> 5066#include <stddef.h> 5067int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 5068EOF 5069if compile_prog "" "" ; then 5070 madvise=yes 5071fi 5072 5073########################################## 5074# check if we have posix_madvise 5075 5076posix_madvise=no 5077cat > $TMPC << EOF 5078#include <sys/mman.h> 5079#include <stddef.h> 5080int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 5081EOF 5082if compile_prog "" "" ; then 5083 posix_madvise=yes 5084fi 5085 5086########################################## 5087# check if we have posix_memalign() 5088 5089posix_memalign=no 5090cat > $TMPC << EOF 5091#include <stdlib.h> 5092int main(void) { 5093 void *p; 5094 return posix_memalign(&p, 8, 8); 5095} 5096EOF 5097if compile_prog "" "" ; then 5098 posix_memalign=yes 5099fi 5100 5101########################################## 5102# check if we have posix_syslog 5103 5104posix_syslog=no 5105cat > $TMPC << EOF 5106#include <syslog.h> 5107int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 5108EOF 5109if compile_prog "" "" ; then 5110 posix_syslog=yes 5111fi 5112 5113########################################## 5114# check if we have sem_timedwait 5115 5116sem_timedwait=no 5117cat > $TMPC << EOF 5118#include <semaphore.h> 5119int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 5120EOF 5121if compile_prog "" "" ; then 5122 sem_timedwait=yes 5123fi 5124 5125########################################## 5126# check if we have strchrnul 5127 5128strchrnul=no 5129cat > $TMPC << EOF 5130#include <string.h> 5131int main(void); 5132// Use a haystack that the compiler shouldn't be able to constant fold 5133char *haystack = (char*)&main; 5134int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 5135EOF 5136if compile_prog "" "" ; then 5137 strchrnul=yes 5138fi 5139 5140########################################## 5141# check if trace backend exists 5142 5143$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 5144if test "$?" -ne 0 ; then 5145 error_exit "invalid trace backends" \ 5146 "Please choose supported trace backends." 5147fi 5148 5149########################################## 5150# For 'ust' backend, test if ust headers are present 5151if have_backend "ust"; then 5152 cat > $TMPC << EOF 5153#include <lttng/tracepoint.h> 5154int main(void) { return 0; } 5155EOF 5156 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5157 if $pkg_config lttng-ust --exists; then 5158 lttng_ust_libs=$($pkg_config --libs lttng-ust) 5159 else 5160 lttng_ust_libs="-llttng-ust -ldl" 5161 fi 5162 if $pkg_config liburcu-bp --exists; then 5163 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5164 else 5165 urcu_bp_libs="-lurcu-bp" 5166 fi 5167 5168 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 5169 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 5170 else 5171 error_exit "Trace backend 'ust' missing lttng-ust header files" 5172 fi 5173fi 5174 5175########################################## 5176# For 'dtrace' backend, test if 'dtrace' command is present 5177if have_backend "dtrace"; then 5178 if ! has 'dtrace' ; then 5179 error_exit "dtrace command is not found in PATH $PATH" 5180 fi 5181 trace_backend_stap="no" 5182 if has 'stap' ; then 5183 trace_backend_stap="yes" 5184 fi 5185fi 5186 5187########################################## 5188# check and set a backend for coroutine 5189 5190# We prefer ucontext, but it's not always possible. The fallback 5191# is sigcontext. On Windows the only valid backend is the Windows 5192# specific one. 5193 5194ucontext_works=no 5195if test "$darwin" != "yes"; then 5196 cat > $TMPC << EOF 5197#include <ucontext.h> 5198#ifdef __stub_makecontext 5199#error Ignoring glibc stub makecontext which will always fail 5200#endif 5201int main(void) { makecontext(0, 0, 0); return 0; } 5202EOF 5203 if compile_prog "" "" ; then 5204 ucontext_works=yes 5205 fi 5206fi 5207 5208if test "$coroutine" = ""; then 5209 if test "$mingw32" = "yes"; then 5210 coroutine=win32 5211 elif test "$ucontext_works" = "yes"; then 5212 coroutine=ucontext 5213 else 5214 coroutine=sigaltstack 5215 fi 5216else 5217 case $coroutine in 5218 windows) 5219 if test "$mingw32" != "yes"; then 5220 error_exit "'windows' coroutine backend only valid for Windows" 5221 fi 5222 # Unfortunately the user visible backend name doesn't match the 5223 # coroutine-*.c filename for this case, so we have to adjust it here. 5224 coroutine=win32 5225 ;; 5226 ucontext) 5227 if test "$ucontext_works" != "yes"; then 5228 feature_not_found "ucontext" 5229 fi 5230 ;; 5231 sigaltstack) 5232 if test "$mingw32" = "yes"; then 5233 error_exit "only the 'windows' coroutine backend is valid for Windows" 5234 fi 5235 ;; 5236 *) 5237 error_exit "unknown coroutine backend $coroutine" 5238 ;; 5239 esac 5240fi 5241 5242if test "$coroutine_pool" = ""; then 5243 coroutine_pool=yes 5244fi 5245 5246if test "$debug_stack_usage" = "yes"; then 5247 if test "$coroutine_pool" = "yes"; then 5248 echo "WARN: disabling coroutine pool for stack usage debugging" 5249 coroutine_pool=no 5250 fi 5251fi 5252 5253 5254########################################## 5255# check if we have open_by_handle_at 5256 5257open_by_handle_at=no 5258cat > $TMPC << EOF 5259#include <fcntl.h> 5260#if !defined(AT_EMPTY_PATH) 5261# error missing definition 5262#else 5263int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5264#endif 5265EOF 5266if compile_prog "" "" ; then 5267 open_by_handle_at=yes 5268fi 5269 5270######################################## 5271# check if we have linux/magic.h 5272 5273linux_magic_h=no 5274cat > $TMPC << EOF 5275#include <linux/magic.h> 5276int main(void) { 5277 return 0; 5278} 5279EOF 5280if compile_prog "" "" ; then 5281 linux_magic_h=yes 5282fi 5283 5284######################################## 5285# check whether we can disable warning option with a pragma (this is needed 5286# to silence warnings in the headers of some versions of external libraries). 5287# This test has to be compiled with -Werror as otherwise an unknown pragma is 5288# only a warning. 5289# 5290# If we can't selectively disable warning in the code, disable -Werror so that 5291# the build doesn't fail anyway. 5292 5293pragma_disable_unused_but_set=no 5294cat > $TMPC << EOF 5295#pragma GCC diagnostic push 5296#pragma GCC diagnostic ignored "-Wstrict-prototypes" 5297#pragma GCC diagnostic pop 5298 5299int main(void) { 5300 return 0; 5301} 5302EOF 5303if compile_prog "-Werror" "" ; then 5304 pragma_diagnostic_available=yes 5305else 5306 werror=no 5307fi 5308 5309######################################## 5310# check if we have valgrind/valgrind.h 5311 5312valgrind_h=no 5313cat > $TMPC << EOF 5314#include <valgrind/valgrind.h> 5315int main(void) { 5316 return 0; 5317} 5318EOF 5319if compile_prog "" "" ; then 5320 valgrind_h=yes 5321fi 5322 5323######################################## 5324# check if environ is declared 5325 5326has_environ=no 5327cat > $TMPC << EOF 5328#include <unistd.h> 5329int main(void) { 5330 environ = 0; 5331 return 0; 5332} 5333EOF 5334if compile_prog "" "" ; then 5335 has_environ=yes 5336fi 5337 5338######################################## 5339# check if cpuid.h is usable. 5340 5341cat > $TMPC << EOF 5342#include <cpuid.h> 5343int main(void) { 5344 unsigned a, b, c, d; 5345 int max = __get_cpuid_max(0, 0); 5346 5347 if (max >= 1) { 5348 __cpuid(1, a, b, c, d); 5349 } 5350 5351 if (max >= 7) { 5352 __cpuid_count(7, 0, a, b, c, d); 5353 } 5354 5355 return 0; 5356} 5357EOF 5358if compile_prog "" "" ; then 5359 cpuid_h=yes 5360fi 5361 5362########################################## 5363# avx2 optimization requirement check 5364# 5365# There is no point enabling this if cpuid.h is not usable, 5366# since we won't be able to select the new routines. 5367 5368if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5369 cat > $TMPC << EOF 5370#pragma GCC push_options 5371#pragma GCC target("avx2") 5372#include <cpuid.h> 5373#include <immintrin.h> 5374static int bar(void *a) { 5375 __m256i x = *(__m256i *)a; 5376 return _mm256_testz_si256(x, x); 5377} 5378int main(int argc, char *argv[]) { return bar(argv[0]); } 5379EOF 5380 if compile_object "" ; then 5381 avx2_opt="yes" 5382 else 5383 avx2_opt="no" 5384 fi 5385fi 5386 5387######################################## 5388# check if __[u]int128_t is usable. 5389 5390int128=no 5391cat > $TMPC << EOF 5392__int128_t a; 5393__uint128_t b; 5394int main (void) { 5395 a = a + b; 5396 b = a * b; 5397 a = a * a; 5398 return 0; 5399} 5400EOF 5401if compile_prog "" "" ; then 5402 int128=yes 5403fi 5404 5405######################################### 5406# See if 128-bit atomic operations are supported. 5407 5408atomic128=no 5409if test "$int128" = "yes"; then 5410 cat > $TMPC << EOF 5411int main(void) 5412{ 5413 unsigned __int128 x = 0, y = 0; 5414 y = __atomic_load_16(&x, 0); 5415 __atomic_store_16(&x, y, 0); 5416 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5417 return 0; 5418} 5419EOF 5420 if compile_prog "" "" ; then 5421 atomic128=yes 5422 fi 5423fi 5424 5425cmpxchg128=no 5426if test "$int128" = yes && test "$atomic128" = no; then 5427 cat > $TMPC << EOF 5428int main(void) 5429{ 5430 unsigned __int128 x = 0, y = 0; 5431 __sync_val_compare_and_swap_16(&x, y, x); 5432 return 0; 5433} 5434EOF 5435 if compile_prog "" "" ; then 5436 cmpxchg128=yes 5437 fi 5438fi 5439 5440######################################### 5441# See if 64-bit atomic operations are supported. 5442# Note that without __atomic builtins, we can only 5443# assume atomic loads/stores max at pointer size. 5444 5445cat > $TMPC << EOF 5446#include <stdint.h> 5447int main(void) 5448{ 5449 uint64_t x = 0, y = 0; 5450#ifdef __ATOMIC_RELAXED 5451 y = __atomic_load_8(&x, 0); 5452 __atomic_store_8(&x, y, 0); 5453 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5454 __atomic_exchange_8(&x, y, 0); 5455 __atomic_fetch_add_8(&x, y, 0); 5456#else 5457 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5458 __sync_lock_test_and_set(&x, y); 5459 __sync_val_compare_and_swap(&x, y, 0); 5460 __sync_fetch_and_add(&x, y); 5461#endif 5462 return 0; 5463} 5464EOF 5465if compile_prog "" "" ; then 5466 atomic64=yes 5467fi 5468 5469######################################## 5470# See if 16-byte vector operations are supported. 5471# Even without a vector unit the compiler may expand these. 5472# There is a bug in old GCC for PPC that crashes here. 5473# Unfortunately it's the system compiler for Centos 7. 5474 5475cat > $TMPC << EOF 5476typedef unsigned char U1 __attribute__((vector_size(16))); 5477typedef unsigned short U2 __attribute__((vector_size(16))); 5478typedef unsigned int U4 __attribute__((vector_size(16))); 5479typedef unsigned long long U8 __attribute__((vector_size(16))); 5480typedef signed char S1 __attribute__((vector_size(16))); 5481typedef signed short S2 __attribute__((vector_size(16))); 5482typedef signed int S4 __attribute__((vector_size(16))); 5483typedef signed long long S8 __attribute__((vector_size(16))); 5484static U1 a1, b1; 5485static U2 a2, b2; 5486static U4 a4, b4; 5487static U8 a8, b8; 5488static S1 c1; 5489static S2 c2; 5490static S4 c4; 5491static S8 c8; 5492static int i; 5493void helper(void *d, void *a, int shift, int i); 5494void helper(void *d, void *a, int shift, int i) 5495{ 5496 *(U1 *)(d + i) = *(U1 *)(a + i) << shift; 5497 *(U2 *)(d + i) = *(U2 *)(a + i) << shift; 5498 *(U4 *)(d + i) = *(U4 *)(a + i) << shift; 5499 *(U8 *)(d + i) = *(U8 *)(a + i) << shift; 5500} 5501int main(void) 5502{ 5503 a1 += b1; a2 += b2; a4 += b4; a8 += b8; 5504 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8; 5505 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8; 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 <<= i; a2 <<= i; a4 <<= i; a8 <<= i; 5510 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i; 5511 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i; 5512 return 0; 5513} 5514EOF 5515 5516vector16=no 5517if compile_prog "" "" ; then 5518 vector16=yes 5519fi 5520 5521######################################## 5522# check if getauxval is available. 5523 5524getauxval=no 5525cat > $TMPC << EOF 5526#include <sys/auxv.h> 5527int main(void) { 5528 return getauxval(AT_HWCAP) == 0; 5529} 5530EOF 5531if compile_prog "" "" ; then 5532 getauxval=yes 5533fi 5534 5535######################################## 5536# check if ccache is interfering with 5537# semantic analysis of macros 5538 5539unset CCACHE_CPP2 5540ccache_cpp2=no 5541cat > $TMPC << EOF 5542static const int Z = 1; 5543#define fn() ({ Z; }) 5544#define TAUT(X) ((X) == Z) 5545#define PAREN(X, Y) (X == Y) 5546#define ID(X) (X) 5547int main(int argc, char *argv[]) 5548{ 5549 int x = 0, y = 0; 5550 x = ID(x); 5551 x = fn(); 5552 fn(); 5553 if (PAREN(x, y)) return 0; 5554 if (TAUT(Z)) return 0; 5555 return 0; 5556} 5557EOF 5558 5559if ! compile_object "-Werror"; then 5560 ccache_cpp2=yes 5561fi 5562 5563################################################# 5564# clang does not support glibc + FORTIFY_SOURCE. 5565 5566if test "$fortify_source" != "no"; then 5567 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5568 fortify_source="no"; 5569 elif test -n "$cxx" && has $cxx && 5570 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5571 fortify_source="no"; 5572 else 5573 fortify_source="yes" 5574 fi 5575fi 5576 5577############################################### 5578# Check if copy_file_range is provided by glibc 5579have_copy_file_range=no 5580cat > $TMPC << EOF 5581#include <unistd.h> 5582int main(void) { 5583 copy_file_range(0, NULL, 0, NULL, 0, 0); 5584 return 0; 5585} 5586EOF 5587if compile_prog "" "" ; then 5588 have_copy_file_range=yes 5589fi 5590 5591########################################## 5592# check if struct fsxattr is available via linux/fs.h 5593 5594have_fsxattr=no 5595cat > $TMPC << EOF 5596#include <linux/fs.h> 5597struct fsxattr foo; 5598int main(void) { 5599 return 0; 5600} 5601EOF 5602if compile_prog "" "" ; then 5603 have_fsxattr=yes 5604fi 5605 5606########################################## 5607# check for usable membarrier system call 5608if test "$membarrier" = "yes"; then 5609 have_membarrier=no 5610 if test "$mingw32" = "yes" ; then 5611 have_membarrier=yes 5612 elif test "$linux" = "yes" ; then 5613 cat > $TMPC << EOF 5614 #include <linux/membarrier.h> 5615 #include <sys/syscall.h> 5616 #include <unistd.h> 5617 #include <stdlib.h> 5618 int main(void) { 5619 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5620 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5621 exit(0); 5622 } 5623EOF 5624 if compile_prog "" "" ; then 5625 have_membarrier=yes 5626 fi 5627 fi 5628 if test "$have_membarrier" = "no"; then 5629 feature_not_found "membarrier" "membarrier system call not available" 5630 fi 5631else 5632 # Do not enable it by default even for Mingw32, because it doesn't 5633 # work on Wine. 5634 membarrier=no 5635fi 5636 5637########################################## 5638# check if rtnetlink.h exists and is useful 5639have_rtnetlink=no 5640cat > $TMPC << EOF 5641#include <linux/rtnetlink.h> 5642int main(void) { 5643 return IFLA_PROTO_DOWN; 5644} 5645EOF 5646if compile_prog "" "" ; then 5647 have_rtnetlink=yes 5648fi 5649 5650########################################## 5651# check for usable AF_VSOCK environment 5652have_af_vsock=no 5653cat > $TMPC << EOF 5654#include <errno.h> 5655#include <sys/types.h> 5656#include <sys/socket.h> 5657#if !defined(AF_VSOCK) 5658# error missing AF_VSOCK flag 5659#endif 5660#include <linux/vm_sockets.h> 5661int main(void) { 5662 int sock, ret; 5663 struct sockaddr_vm svm; 5664 socklen_t len = sizeof(svm); 5665 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5666 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5667 if ((ret == -1) && (errno == ENOTCONN)) { 5668 return 0; 5669 } 5670 return -1; 5671} 5672EOF 5673if compile_prog "" "" ; then 5674 have_af_vsock=yes 5675fi 5676 5677########################################## 5678# check for usable AF_ALG environment 5679hava_afalg=no 5680cat > $TMPC << EOF 5681#include <errno.h> 5682#include <sys/types.h> 5683#include <sys/socket.h> 5684#include <linux/if_alg.h> 5685int main(void) { 5686 int sock; 5687 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5688 return sock; 5689} 5690EOF 5691if compile_prog "" "" ; then 5692 have_afalg=yes 5693fi 5694if test "$crypto_afalg" = "yes" 5695then 5696 if test "$have_afalg" != "yes" 5697 then 5698 error_exit "AF_ALG requested but could not be detected" 5699 fi 5700fi 5701 5702 5703################################################# 5704# Check to see if we have the Hypervisor framework 5705if [ "$darwin" = "yes" ] ; then 5706 cat > $TMPC << EOF 5707#include <Hypervisor/hv.h> 5708int main() { return 0;} 5709EOF 5710 if ! compile_object ""; then 5711 hvf='no' 5712 else 5713 hvf='yes' 5714 LDFLAGS="-framework Hypervisor $LDFLAGS" 5715 fi 5716fi 5717 5718################################################# 5719# Sparc implicitly links with --relax, which is 5720# incompatible with -r, so --no-relax should be 5721# given. It does no harm to give it on other 5722# platforms too. 5723 5724# Note: the prototype is needed since QEMU_CFLAGS 5725# contains -Wmissing-prototypes 5726cat > $TMPC << EOF 5727extern int foo(void); 5728int foo(void) { return 0; } 5729EOF 5730if ! compile_object ""; then 5731 error_exit "Failed to compile object file for LD_REL_FLAGS test" 5732fi 5733for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 5734 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 5735 LD_REL_FLAGS=$i 5736 break 5737 fi 5738done 5739if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 5740 feature_not_found "modules" "Cannot find how to build relocatable objects" 5741fi 5742 5743########################################## 5744# check for sysmacros.h 5745 5746have_sysmacros=no 5747cat > $TMPC << EOF 5748#include <sys/sysmacros.h> 5749int main(void) { 5750 return makedev(0, 0); 5751} 5752EOF 5753if compile_prog "" "" ; then 5754 have_sysmacros=yes 5755fi 5756 5757########################################## 5758# Veritas HyperScale block driver VxHS 5759# Check if libvxhs is installed 5760 5761if test "$vxhs" != "no" ; then 5762 cat > $TMPC <<EOF 5763#include <stdint.h> 5764#include <qnio/qnio_api.h> 5765 5766void *vxhs_callback; 5767 5768int main(void) { 5769 iio_init(QNIO_VERSION, vxhs_callback); 5770 return 0; 5771} 5772EOF 5773 vxhs_libs="-lvxhs -lssl" 5774 if compile_prog "" "$vxhs_libs" ; then 5775 vxhs=yes 5776 else 5777 if test "$vxhs" = "yes" ; then 5778 feature_not_found "vxhs block device" "Install libvxhs See github" 5779 fi 5780 vxhs=no 5781 fi 5782fi 5783 5784########################################## 5785# check for _Static_assert() 5786 5787have_static_assert=no 5788cat > $TMPC << EOF 5789_Static_assert(1, "success"); 5790int main(void) { 5791 return 0; 5792} 5793EOF 5794if compile_prog "" "" ; then 5795 have_static_assert=yes 5796fi 5797 5798########################################## 5799# check for utmpx.h, it is missing e.g. on OpenBSD 5800 5801have_utmpx=no 5802cat > $TMPC << EOF 5803#include <utmpx.h> 5804struct utmpx user_info; 5805int main(void) { 5806 return 0; 5807} 5808EOF 5809if compile_prog "" "" ; then 5810 have_utmpx=yes 5811fi 5812 5813########################################## 5814# check for getrandom() 5815 5816have_getrandom=no 5817cat > $TMPC << EOF 5818#include <sys/random.h> 5819int main(void) { 5820 return getrandom(0, 0, GRND_NONBLOCK); 5821} 5822EOF 5823if compile_prog "" "" ; then 5824 have_getrandom=yes 5825fi 5826 5827########################################## 5828# checks for sanitizers 5829 5830have_asan=no 5831have_ubsan=no 5832have_asan_iface_h=no 5833have_asan_iface_fiber=no 5834 5835if test "$sanitizers" = "yes" ; then 5836 write_c_skeleton 5837 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5838 have_asan=yes 5839 fi 5840 5841 # we could use a simple skeleton for flags checks, but this also 5842 # detect the static linking issue of ubsan, see also: 5843 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5844 cat > $TMPC << EOF 5845#include <stdlib.h> 5846int main(void) { 5847 void *tmp = malloc(10); 5848 return *(int *)(tmp + 2); 5849} 5850EOF 5851 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5852 have_ubsan=yes 5853 fi 5854 5855 if check_include "sanitizer/asan_interface.h" ; then 5856 have_asan_iface_h=yes 5857 fi 5858 5859 cat > $TMPC << EOF 5860#include <sanitizer/asan_interface.h> 5861int main(void) { 5862 __sanitizer_start_switch_fiber(0, 0, 0); 5863 return 0; 5864} 5865EOF 5866 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5867 have_asan_iface_fiber=yes 5868 fi 5869fi 5870 5871########################################## 5872# check for libpmem 5873 5874if test "$libpmem" != "no"; then 5875 if $pkg_config --exists "libpmem"; then 5876 libpmem="yes" 5877 libpmem_libs=$($pkg_config --libs libpmem) 5878 libpmem_cflags=$($pkg_config --cflags libpmem) 5879 libs_softmmu="$libs_softmmu $libpmem_libs" 5880 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 5881 else 5882 if test "$libpmem" = "yes" ; then 5883 feature_not_found "libpmem" "Install nvml or pmdk" 5884 fi 5885 libpmem="no" 5886 fi 5887fi 5888 5889########################################## 5890# check for slirp 5891 5892case "$slirp" in 5893 "" | yes) 5894 if $pkg_config slirp; then 5895 slirp=system 5896 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5897 slirp=git 5898 elif test -e "${source_path}/slirp/Makefile" ; then 5899 slirp=internal 5900 elif test -z "$slirp" ; then 5901 slirp=no 5902 else 5903 feature_not_found "slirp" "Install slirp devel or git submodule" 5904 fi 5905 ;; 5906 5907 system) 5908 if ! $pkg_config slirp; then 5909 feature_not_found "slirp" "Install slirp devel" 5910 fi 5911 ;; 5912esac 5913 5914case "$slirp" in 5915 git | internal) 5916 if test "$slirp" = git; then 5917 git_submodules="${git_submodules} slirp" 5918 fi 5919 mkdir -p slirp 5920 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src" 5921 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp" 5922 ;; 5923 5924 system) 5925 slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 5926 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 5927 slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 5928 ;; 5929 5930 no) 5931 ;; 5932 *) 5933 error_exit "Unknown state for slirp: $slirp" 5934 ;; 5935esac 5936 5937 5938########################################## 5939# End of CC checks 5940# After here, no more $cc or $ld runs 5941 5942write_c_skeleton 5943 5944if test "$gcov" = "yes" ; then 5945 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 5946 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 5947elif test "$fortify_source" = "yes" ; then 5948 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 5949elif test "$debug" = "no"; then 5950 CFLAGS="-O2 $CFLAGS" 5951fi 5952 5953if test "$have_asan" = "yes"; then 5954 CFLAGS="-fsanitize=address $CFLAGS" 5955 if test "$have_asan_iface_h" = "no" ; then 5956 echo "ASAN build enabled, but ASAN header missing." \ 5957 "Without code annotation, the report may be inferior." 5958 elif test "$have_asan_iface_fiber" = "no" ; then 5959 echo "ASAN build enabled, but ASAN header is too old." \ 5960 "Without code annotation, the report may be inferior." 5961 fi 5962fi 5963if test "$have_ubsan" = "yes"; then 5964 CFLAGS="-fsanitize=undefined $CFLAGS" 5965fi 5966 5967########################################## 5968# Do we have libnfs 5969if test "$libnfs" != "no" ; then 5970 if $pkg_config --atleast-version=1.9.3 libnfs; then 5971 libnfs="yes" 5972 libnfs_libs=$($pkg_config --libs libnfs) 5973 else 5974 if test "$libnfs" = "yes" ; then 5975 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 5976 fi 5977 libnfs="no" 5978 fi 5979fi 5980 5981########################################## 5982# Do we have libudev 5983if test "$libudev" != "no" ; then 5984 if $pkg_config libudev && test "$static" != "yes"; then 5985 libudev="yes" 5986 libudev_libs=$($pkg_config --libs libudev) 5987 else 5988 libudev="no" 5989 fi 5990fi 5991 5992# Now we've finished running tests it's OK to add -Werror to the compiler flags 5993if test "$werror" = "yes"; then 5994 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 5995fi 5996 5997if test "$solaris" = "no" ; then 5998 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5999 LDFLAGS="-Wl,--warn-common $LDFLAGS" 6000 fi 6001fi 6002 6003# test if pod2man has --utf8 option 6004if pod2man --help | grep -q utf8; then 6005 POD2MAN="pod2man --utf8" 6006else 6007 POD2MAN="pod2man" 6008fi 6009 6010# Use ASLR, no-SEH and DEP if available 6011if test "$mingw32" = "yes" ; then 6012 for flag in --dynamicbase --no-seh --nxcompat; do 6013 if ld_has $flag ; then 6014 LDFLAGS="-Wl,$flag $LDFLAGS" 6015 fi 6016 done 6017fi 6018 6019# Disable OpenBSD W^X if available 6020if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then 6021 cat > $TMPC <<EOF 6022 int main(void) { return 0; } 6023EOF 6024 wx_ldflags="-Wl,-z,wxneeded" 6025 if compile_prog "" "$wx_ldflags"; then 6026 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" 6027 fi 6028fi 6029 6030qemu_confdir=$sysconfdir$confsuffix 6031qemu_moddir=$libdir$confsuffix 6032qemu_datadir=$datadir$confsuffix 6033qemu_localedir="$datadir/locale" 6034qemu_icondir="$datadir/icons" 6035qemu_desktopdir="$datadir/applications" 6036 6037# We can only support ivshmem if we have eventfd 6038if [ "$eventfd" = "yes" ]; then 6039 ivshmem=yes 6040fi 6041 6042tools="" 6043if test "$want_tools" = "yes" ; then 6044 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools" 6045 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 6046 tools="qemu-nbd\$(EXESUF) $tools" 6047 fi 6048 if [ "$ivshmem" = "yes" ]; then 6049 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 6050 fi 6051 if [ "$curl" = "yes" ]; then 6052 tools="elf2dmp\$(EXESUF) $tools" 6053 fi 6054fi 6055if test "$softmmu" = yes ; then 6056 if test "$linux" = yes; then 6057 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then 6058 virtfs=yes 6059 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 6060 else 6061 if test "$virtfs" = yes; then 6062 error_exit "VirtFS requires libcap devel and libattr devel" 6063 fi 6064 virtfs=no 6065 fi 6066 if test "$mpath" != no && test "$mpathpersist" = yes ; then 6067 mpath=yes 6068 else 6069 if test "$mpath" = yes; then 6070 error_exit "Multipath requires libmpathpersist devel" 6071 fi 6072 mpath=no 6073 fi 6074 tools="$tools scsi/qemu-pr-helper\$(EXESUF)" 6075 else 6076 if test "$virtfs" = yes; then 6077 error_exit "VirtFS is supported only on Linux" 6078 fi 6079 virtfs=no 6080 if test "$mpath" = yes; then 6081 error_exit "Multipath is supported only on Linux" 6082 fi 6083 mpath=no 6084 fi 6085 if test "$xkbcommon" = "yes"; then 6086 tools="qemu-keymap\$(EXESUF) $tools" 6087 fi 6088fi 6089 6090# Probe for guest agent support/options 6091 6092if [ "$guest_agent" != "no" ]; then 6093 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6094 guest_agent=no 6095 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6096 tools="qemu-ga\$(EXESUF) $tools" 6097 guest_agent=yes 6098 elif [ "$guest_agent" != yes ]; then 6099 guest_agent=no 6100 else 6101 error_exit "Guest agent is not supported on this platform" 6102 fi 6103fi 6104 6105# Guest agent Window MSI package 6106 6107if test "$guest_agent" != yes; then 6108 if test "$guest_agent_msi" = yes; then 6109 error_exit "MSI guest agent package requires guest agent enabled" 6110 fi 6111 guest_agent_msi=no 6112elif test "$mingw32" != "yes"; then 6113 if test "$guest_agent_msi" = "yes"; then 6114 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6115 fi 6116 guest_agent_msi=no 6117elif ! has wixl; then 6118 if test "$guest_agent_msi" = "yes"; then 6119 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6120 fi 6121 guest_agent_msi=no 6122else 6123 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6124 # disabled explicitly 6125 if test "$guest_agent_msi" != "no"; then 6126 guest_agent_msi=yes 6127 fi 6128fi 6129 6130if test "$guest_agent_msi" = "yes"; then 6131 if test "$guest_agent_with_vss" = "yes"; then 6132 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6133 fi 6134 6135 if test "$QEMU_GA_MANUFACTURER" = ""; then 6136 QEMU_GA_MANUFACTURER=QEMU 6137 fi 6138 6139 if test "$QEMU_GA_DISTRO" = ""; then 6140 QEMU_GA_DISTRO=Linux 6141 fi 6142 6143 if test "$QEMU_GA_VERSION" = ""; then 6144 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6145 fi 6146 6147 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6148 6149 case "$cpu" in 6150 x86_64) 6151 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6152 ;; 6153 i386) 6154 QEMU_GA_MSI_ARCH="-D Arch=32" 6155 ;; 6156 *) 6157 error_exit "CPU $cpu not supported for building installation package" 6158 ;; 6159 esac 6160fi 6161 6162# Mac OS X ships with a broken assembler 6163roms= 6164if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6165 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6166 test "$softmmu" = yes ; then 6167 # Different host OS linkers have different ideas about the name of the ELF 6168 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6169 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6170 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6171 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6172 ld_i386_emulation="$emu" 6173 roms="optionrom" 6174 break 6175 fi 6176 done 6177fi 6178 6179# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6180if test "$cpu" = "s390x" ; then 6181 write_c_skeleton 6182 if compile_prog "-march=z900" ""; then 6183 roms="$roms s390-ccw" 6184 fi 6185fi 6186 6187# Probe for the need for relocating the user-only binary. 6188if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 6189 textseg_addr= 6190 case "$cpu" in 6191 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 6192 # ??? Rationale for choosing this address 6193 textseg_addr=0x60000000 6194 ;; 6195 mips) 6196 # A 256M aligned address, high in the address space, with enough 6197 # room for the code_gen_buffer above it before the stack. 6198 textseg_addr=0x60000000 6199 ;; 6200 esac 6201 if [ -n "$textseg_addr" ]; then 6202 cat > $TMPC <<EOF 6203 int main(void) { return 0; } 6204EOF 6205 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 6206 if ! compile_prog "" "$textseg_ldflags"; then 6207 # In case ld does not support -Ttext-segment, edit the default linker 6208 # script via sed to set the .text start addr. This is needed on FreeBSD 6209 # at least. 6210 if ! $ld --verbose >/dev/null 2>&1; then 6211 error_exit \ 6212 "We need to link the QEMU user mode binaries at a" \ 6213 "specific text address. Unfortunately your linker" \ 6214 "doesn't support either the -Ttext-segment option or" \ 6215 "printing the default linker script with --verbose." \ 6216 "If you don't want the user mode binaries, pass the" \ 6217 "--disable-user option to configure." 6218 fi 6219 6220 $ld --verbose | sed \ 6221 -e '1,/==================================================/d' \ 6222 -e '/==================================================/,$d' \ 6223 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 6224 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 6225 textseg_ldflags="-Wl,-T../config-host.ld" 6226 fi 6227 fi 6228fi 6229 6230# Check that the C++ compiler exists and works with the C compiler. 6231# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6232if has $cxx; then 6233 cat > $TMPC <<EOF 6234int c_function(void); 6235int main(void) { return c_function(); } 6236EOF 6237 6238 compile_object 6239 6240 cat > $TMPCXX <<EOF 6241extern "C" { 6242 int c_function(void); 6243} 6244int c_function(void) { return 42; } 6245EOF 6246 6247 update_cxxflags 6248 6249 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then 6250 # C++ compiler $cxx works ok with C compiler $cc 6251 : 6252 else 6253 echo "C++ compiler $cxx does not work with C compiler $cc" 6254 echo "Disabling C++ specific optional code" 6255 cxx= 6256 fi 6257else 6258 echo "No C++ compiler available; disabling C++ specific optional code" 6259 cxx= 6260fi 6261 6262echo_version() { 6263 if test "$1" = "yes" ; then 6264 echo "($2)" 6265 fi 6266} 6267 6268# prepend pixman and ftd flags after all config tests are done 6269QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 6270QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 6271libs_softmmu="$pixman_libs $libs_softmmu" 6272 6273echo "Install prefix $prefix" 6274echo "BIOS directory $(eval echo $qemu_datadir)" 6275echo "firmware path $(eval echo $firmwarepath)" 6276echo "binary directory $(eval echo $bindir)" 6277echo "library directory $(eval echo $libdir)" 6278echo "module directory $(eval echo $qemu_moddir)" 6279echo "libexec directory $(eval echo $libexecdir)" 6280echo "include directory $(eval echo $includedir)" 6281echo "config directory $(eval echo $sysconfdir)" 6282if test "$mingw32" = "no" ; then 6283echo "local state directory $(eval echo $local_statedir)" 6284echo "Manual directory $(eval echo $mandir)" 6285echo "ELF interp prefix $interp_prefix" 6286else 6287echo "local state directory queried at runtime" 6288echo "Windows SDK $win_sdk" 6289fi 6290echo "Source path $source_path" 6291echo "GIT binary $git" 6292echo "GIT submodules $git_submodules" 6293echo "C compiler $cc" 6294echo "Host C compiler $host_cc" 6295echo "C++ compiler $cxx" 6296echo "Objective-C compiler $objcc" 6297echo "ARFLAGS $ARFLAGS" 6298echo "CFLAGS $CFLAGS" 6299echo "QEMU_CFLAGS $QEMU_CFLAGS" 6300echo "LDFLAGS $LDFLAGS" 6301echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 6302echo "make $make" 6303echo "install $install" 6304echo "python $python ($python_version)" 6305echo "slirp support $slirp $(echo_version $slirp $slirp_version)" 6306if test "$slirp" != "no" ; then 6307 echo "smbd $smbd" 6308fi 6309echo "module support $modules" 6310echo "host CPU $cpu" 6311echo "host big endian $bigendian" 6312echo "target list $target_list" 6313echo "gprof enabled $gprof" 6314echo "sparse enabled $sparse" 6315echo "strip binaries $strip_opt" 6316echo "profiler $profiler" 6317echo "static build $static" 6318if test "$darwin" = "yes" ; then 6319 echo "Cocoa support $cocoa" 6320fi 6321echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 6322echo "SDL image support $sdl_image" 6323echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 6324echo "GTK GL support $gtk_gl" 6325echo "VTE support $vte $(echo_version $vte $vteversion)" 6326echo "TLS priority $tls_priority" 6327echo "GNUTLS support $gnutls" 6328echo "libgcrypt $gcrypt" 6329echo "nettle $nettle $(echo_version $nettle $nettle_version)" 6330echo "libtasn1 $tasn1" 6331echo "PAM $auth_pam" 6332echo "iconv support $iconv" 6333echo "curses support $curses" 6334echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6335echo "curl support $curl" 6336echo "mingw32 support $mingw32" 6337echo "Audio drivers $audio_drv_list" 6338echo "Block whitelist (rw) $block_drv_rw_whitelist" 6339echo "Block whitelist (ro) $block_drv_ro_whitelist" 6340echo "VirtFS support $virtfs" 6341echo "Multipath support $mpath" 6342echo "VNC support $vnc" 6343if test "$vnc" = "yes" ; then 6344 echo "VNC SASL support $vnc_sasl" 6345 echo "VNC JPEG support $vnc_jpeg" 6346 echo "VNC PNG support $vnc_png" 6347fi 6348echo "xen support $xen" 6349if test "$xen" = "yes" ; then 6350 echo "xen ctrl version $xen_ctrl_version" 6351fi 6352echo "brlapi support $brlapi" 6353echo "bluez support $bluez" 6354echo "Documentation $docs" 6355echo "PIE $pie" 6356echo "vde support $vde" 6357echo "netmap support $netmap" 6358echo "Linux AIO support $linux_aio" 6359echo "ATTR/XATTR support $attr" 6360echo "Install blobs $blobs" 6361echo "KVM support $kvm" 6362echo "HAX support $hax" 6363echo "HVF support $hvf" 6364echo "WHPX support $whpx" 6365echo "TCG support $tcg" 6366if test "$tcg" = "yes" ; then 6367 echo "TCG debug enabled $debug_tcg" 6368 echo "TCG interpreter $tcg_interpreter" 6369fi 6370echo "malloc trim support $malloc_trim" 6371echo "RDMA support $rdma" 6372echo "PVRDMA support $pvrdma" 6373echo "fdt support $fdt" 6374echo "membarrier $membarrier" 6375echo "preadv support $preadv" 6376echo "fdatasync $fdatasync" 6377echo "madvise $madvise" 6378echo "posix_madvise $posix_madvise" 6379echo "posix_memalign $posix_memalign" 6380echo "libcap-ng support $cap_ng" 6381echo "vhost-net support $vhost_net" 6382echo "vhost-crypto support $vhost_crypto" 6383echo "vhost-scsi support $vhost_scsi" 6384echo "vhost-vsock support $vhost_vsock" 6385echo "vhost-user support $vhost_user" 6386echo "vhost-user-fs support $vhost_user_fs" 6387echo "Trace backends $trace_backends" 6388if have_backend "simple"; then 6389echo "Trace output file $trace_file-<pid>" 6390fi 6391echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6392echo "rbd support $rbd" 6393echo "xfsctl support $xfs" 6394echo "smartcard support $smartcard" 6395echo "libusb $libusb" 6396echo "usb net redir $usb_redir" 6397echo "OpenGL support $opengl" 6398echo "OpenGL dmabufs $opengl_dmabuf" 6399echo "libiscsi support $libiscsi" 6400echo "libnfs support $libnfs" 6401echo "build guest agent $guest_agent" 6402echo "QGA VSS support $guest_agent_with_vss" 6403echo "QGA w32 disk info $guest_agent_ntddscsi" 6404echo "QGA MSI support $guest_agent_msi" 6405echo "seccomp support $seccomp" 6406echo "coroutine backend $coroutine" 6407echo "coroutine pool $coroutine_pool" 6408echo "debug stack usage $debug_stack_usage" 6409echo "mutex debugging $debug_mutex" 6410echo "crypto afalg $crypto_afalg" 6411echo "GlusterFS support $glusterfs" 6412echo "gcov $gcov_tool" 6413echo "gcov enabled $gcov" 6414echo "TPM support $tpm" 6415echo "libssh support $libssh" 6416echo "QOM debugging $qom_cast_debug" 6417echo "Live block migration $live_block_migration" 6418echo "lzo support $lzo" 6419echo "snappy support $snappy" 6420echo "bzip2 support $bzip2" 6421echo "lzfse support $lzfse" 6422echo "NUMA host support $numa" 6423echo "libxml2 $libxml2" 6424echo "tcmalloc support $tcmalloc" 6425echo "jemalloc support $jemalloc" 6426echo "avx2 optimization $avx2_opt" 6427echo "replication support $replication" 6428echo "VxHS block device $vxhs" 6429echo "bochs support $bochs" 6430echo "cloop support $cloop" 6431echo "dmg support $dmg" 6432echo "qcow v1 support $qcow1" 6433echo "vdi support $vdi" 6434echo "vvfat support $vvfat" 6435echo "qed support $qed" 6436echo "parallels support $parallels" 6437echo "sheepdog support $sheepdog" 6438echo "capstone $capstone" 6439echo "libpmem support $libpmem" 6440echo "libudev $libudev" 6441echo "default devices $default_devices" 6442 6443if test "$supported_cpu" = "no"; then 6444 echo 6445 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 6446 echo 6447 echo "CPU host architecture $cpu support is not currently maintained." 6448 echo "The QEMU project intends to remove support for this host CPU in" 6449 echo "a future release if nobody volunteers to maintain it and to" 6450 echo "provide a build host for our continuous integration setup." 6451 echo "configure has succeeded and you can continue to build, but" 6452 echo "if you care about QEMU on this platform you should contact" 6453 echo "us upstream at qemu-devel@nongnu.org." 6454fi 6455 6456if test "$supported_os" = "no"; then 6457 echo 6458 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 6459 echo 6460 echo "Host OS $targetos support is not currently maintained." 6461 echo "The QEMU project intends to remove support for this host OS in" 6462 echo "a future release if nobody volunteers to maintain it and to" 6463 echo "provide a build host for our continuous integration setup." 6464 echo "configure has succeeded and you can continue to build, but" 6465 echo "if you care about QEMU on this platform you should contact" 6466 echo "us upstream at qemu-devel@nongnu.org." 6467fi 6468 6469# Note that if the Python conditional here evaluates True we will exit 6470# with status 1 which is a shell 'false' value. 6471if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then 6472 echo 6473 echo "warning: Python 2 support is deprecated" >&2 6474 echo "warning: Python 3 will be required for building future versions of QEMU" >&2 6475 python2="y" 6476fi 6477 6478config_host_mak="config-host.mak" 6479 6480echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6481 6482echo "# Automatically generated by configure - do not modify" > $config_host_mak 6483echo >> $config_host_mak 6484 6485echo all: >> $config_host_mak 6486echo "prefix=$prefix" >> $config_host_mak 6487echo "bindir=$bindir" >> $config_host_mak 6488echo "libdir=$libdir" >> $config_host_mak 6489echo "libexecdir=$libexecdir" >> $config_host_mak 6490echo "includedir=$includedir" >> $config_host_mak 6491echo "mandir=$mandir" >> $config_host_mak 6492echo "sysconfdir=$sysconfdir" >> $config_host_mak 6493echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6494echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6495echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6496echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6497echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6498if test "$mingw32" = "no" ; then 6499 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6500fi 6501echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6502echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6503echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 6504echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 6505echo "libs_cpu=$libs_cpu" >> $config_host_mak 6506echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6507echo "GIT=$git" >> $config_host_mak 6508echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6509echo "GIT_UPDATE=$git_update" >> $config_host_mak 6510 6511echo "ARCH=$ARCH" >> $config_host_mak 6512 6513if test "$default_devices" = "yes" ; then 6514 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 6515else 6516 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 6517fi 6518if test "$debug_tcg" = "yes" ; then 6519 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6520fi 6521if test "$strip_opt" = "yes" ; then 6522 echo "STRIP=${strip}" >> $config_host_mak 6523fi 6524if test "$bigendian" = "yes" ; then 6525 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6526fi 6527if test "$mingw32" = "yes" ; then 6528 echo "CONFIG_WIN32=y" >> $config_host_mak 6529 rc_version=$(cat $source_path/VERSION) 6530 version_major=${rc_version%%.*} 6531 rc_version=${rc_version#*.} 6532 version_minor=${rc_version%%.*} 6533 rc_version=${rc_version#*.} 6534 version_subminor=${rc_version%%.*} 6535 version_micro=0 6536 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6537 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6538 if test "$guest_agent_with_vss" = "yes" ; then 6539 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6540 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6541 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6542 fi 6543 if test "$guest_agent_ntddscsi" = "yes" ; then 6544 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 6545 fi 6546 if test "$guest_agent_msi" = "yes"; then 6547 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6548 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6549 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6550 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6551 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6552 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6553 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6554 fi 6555else 6556 echo "CONFIG_POSIX=y" >> $config_host_mak 6557fi 6558 6559if test "$linux" = "yes" ; then 6560 echo "CONFIG_LINUX=y" >> $config_host_mak 6561fi 6562 6563if test "$darwin" = "yes" ; then 6564 echo "CONFIG_DARWIN=y" >> $config_host_mak 6565fi 6566 6567if test "$solaris" = "yes" ; then 6568 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6569fi 6570if test "$haiku" = "yes" ; then 6571 echo "CONFIG_HAIKU=y" >> $config_host_mak 6572fi 6573if test "$static" = "yes" ; then 6574 echo "CONFIG_STATIC=y" >> $config_host_mak 6575fi 6576if test "$profiler" = "yes" ; then 6577 echo "CONFIG_PROFILER=y" >> $config_host_mak 6578fi 6579if test "$want_tools" = "yes" ; then 6580 echo "CONFIG_TOOLS=y" >> $config_host_mak 6581fi 6582if test "$slirp" != "no"; then 6583 echo "CONFIG_SLIRP=y" >> $config_host_mak 6584 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6585 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 6586 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 6587fi 6588if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 6589 echo "config-host.h: slirp/all" >> $config_host_mak 6590fi 6591if test "$vde" = "yes" ; then 6592 echo "CONFIG_VDE=y" >> $config_host_mak 6593 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6594fi 6595if test "$netmap" = "yes" ; then 6596 echo "CONFIG_NETMAP=y" >> $config_host_mak 6597fi 6598if test "$l2tpv3" = "yes" ; then 6599 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6600fi 6601if test "$cap_ng" = "yes" ; then 6602 echo "CONFIG_LIBCAP=y" >> $config_host_mak 6603fi 6604echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6605for drv in $audio_drv_list; do 6606 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6607 case "$drv" in 6608 alsa | oss | pa | sdl) 6609 echo "$def=m" >> $config_host_mak ;; 6610 *) 6611 echo "$def=y" >> $config_host_mak ;; 6612 esac 6613done 6614echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6615echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6616echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6617echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6618echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6619if test "$audio_win_int" = "yes" ; then 6620 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6621fi 6622echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6623echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6624if test "$vnc" = "yes" ; then 6625 echo "CONFIG_VNC=y" >> $config_host_mak 6626fi 6627if test "$vnc_sasl" = "yes" ; then 6628 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6629fi 6630if test "$vnc_jpeg" = "yes" ; then 6631 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6632fi 6633if test "$vnc_png" = "yes" ; then 6634 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6635fi 6636if test "$xkbcommon" = "yes" ; then 6637 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6638 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6639fi 6640if test "$xfs" = "yes" ; then 6641 echo "CONFIG_XFS=y" >> $config_host_mak 6642fi 6643qemu_version=$(head $source_path/VERSION) 6644echo "VERSION=$qemu_version" >>$config_host_mak 6645echo "PKGVERSION=$pkgversion" >>$config_host_mak 6646echo "SRC_PATH=$source_path" >> $config_host_mak 6647echo "TARGET_DIRS=$target_list" >> $config_host_mak 6648if [ "$docs" = "yes" ] ; then 6649 echo "BUILD_DOCS=yes" >> $config_host_mak 6650fi 6651if test "$modules" = "yes"; then 6652 # $shacmd can generate a hash started with digit, which the compiler doesn't 6653 # like as an symbol. So prefix it with an underscore 6654 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6655 echo "CONFIG_MODULES=y" >> $config_host_mak 6656fi 6657if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 6658 echo "CONFIG_X11=y" >> $config_host_mak 6659 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6660 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6661fi 6662if test "$sdl" = "yes" ; then 6663 echo "CONFIG_SDL=m" >> $config_host_mak 6664 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6665 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6666 if test "$sdl_image" = "yes" ; then 6667 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak 6668 fi 6669fi 6670if test "$cocoa" = "yes" ; then 6671 echo "CONFIG_COCOA=y" >> $config_host_mak 6672fi 6673if test "$iconv" = "yes" ; then 6674 echo "CONFIG_ICONV=y" >> $config_host_mak 6675 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 6676 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 6677fi 6678if test "$curses" = "yes" ; then 6679 echo "CONFIG_CURSES=m" >> $config_host_mak 6680 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6681 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6682fi 6683if test "$pipe2" = "yes" ; then 6684 echo "CONFIG_PIPE2=y" >> $config_host_mak 6685fi 6686if test "$accept4" = "yes" ; then 6687 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6688fi 6689if test "$splice" = "yes" ; then 6690 echo "CONFIG_SPLICE=y" >> $config_host_mak 6691fi 6692if test "$eventfd" = "yes" ; then 6693 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6694fi 6695if test "$memfd" = "yes" ; then 6696 echo "CONFIG_MEMFD=y" >> $config_host_mak 6697fi 6698if test "$have_usbfs" = "yes" ; then 6699 echo "CONFIG_USBFS=y" >> $config_host_mak 6700fi 6701if test "$fallocate" = "yes" ; then 6702 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6703fi 6704if test "$fallocate_punch_hole" = "yes" ; then 6705 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6706fi 6707if test "$fallocate_zero_range" = "yes" ; then 6708 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6709fi 6710if test "$posix_fallocate" = "yes" ; then 6711 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6712fi 6713if test "$sync_file_range" = "yes" ; then 6714 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6715fi 6716if test "$fiemap" = "yes" ; then 6717 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6718fi 6719if test "$dup3" = "yes" ; then 6720 echo "CONFIG_DUP3=y" >> $config_host_mak 6721fi 6722if test "$ppoll" = "yes" ; then 6723 echo "CONFIG_PPOLL=y" >> $config_host_mak 6724fi 6725if test "$prctl_pr_set_timerslack" = "yes" ; then 6726 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6727fi 6728if test "$epoll" = "yes" ; then 6729 echo "CONFIG_EPOLL=y" >> $config_host_mak 6730fi 6731if test "$epoll_create1" = "yes" ; then 6732 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6733fi 6734if test "$sendfile" = "yes" ; then 6735 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6736fi 6737if test "$timerfd" = "yes" ; then 6738 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6739fi 6740if test "$setns" = "yes" ; then 6741 echo "CONFIG_SETNS=y" >> $config_host_mak 6742fi 6743if test "$clock_adjtime" = "yes" ; then 6744 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6745fi 6746if test "$syncfs" = "yes" ; then 6747 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6748fi 6749if test "$inotify" = "yes" ; then 6750 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6751fi 6752if test "$inotify1" = "yes" ; then 6753 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6754fi 6755if test "$sem_timedwait" = "yes" ; then 6756 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6757fi 6758if test "$strchrnul" = "yes" ; then 6759 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6760fi 6761if test "$byteswap_h" = "yes" ; then 6762 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6763fi 6764if test "$bswap_h" = "yes" ; then 6765 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6766fi 6767if test "$curl" = "yes" ; then 6768 echo "CONFIG_CURL=m" >> $config_host_mak 6769 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6770 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6771fi 6772if test "$brlapi" = "yes" ; then 6773 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6774 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6775fi 6776if test "$bluez" = "yes" ; then 6777 echo "CONFIG_BLUEZ=y" >> $config_host_mak 6778 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 6779fi 6780if test "$gtk" = "yes" ; then 6781 echo "CONFIG_GTK=m" >> $config_host_mak 6782 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6783 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6784 if test "$gtk_gl" = "yes" ; then 6785 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6786 fi 6787fi 6788if test "$gio" = "yes" ; then 6789 echo "CONFIG_GIO=y" >> $config_host_mak 6790 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 6791 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 6792fi 6793echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6794if test "$gnutls" = "yes" ; then 6795 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6796fi 6797if test "$gcrypt" = "yes" ; then 6798 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6799 if test "$gcrypt_hmac" = "yes" ; then 6800 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6801 fi 6802fi 6803if test "$nettle" = "yes" ; then 6804 echo "CONFIG_NETTLE=y" >> $config_host_mak 6805 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6806fi 6807if test "$tasn1" = "yes" ; then 6808 echo "CONFIG_TASN1=y" >> $config_host_mak 6809fi 6810if test "$auth_pam" = "yes" ; then 6811 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 6812fi 6813if test "$have_ifaddrs_h" = "yes" ; then 6814 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6815fi 6816if test "$have_broken_size_max" = "yes" ; then 6817 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6818fi 6819 6820# Work around a system header bug with some kernel/XFS header 6821# versions where they both try to define 'struct fsxattr': 6822# xfs headers will not try to redefine structs from linux headers 6823# if this macro is set. 6824if test "$have_fsxattr" = "yes" ; then 6825 echo "HAVE_FSXATTR=y" >> $config_host_mak 6826fi 6827if test "$have_copy_file_range" = "yes" ; then 6828 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6829fi 6830if test "$vte" = "yes" ; then 6831 echo "CONFIG_VTE=y" >> $config_host_mak 6832 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6833 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6834fi 6835if test "$virglrenderer" = "yes" ; then 6836 echo "CONFIG_VIRGL=y" >> $config_host_mak 6837 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6838 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6839fi 6840if test "$xen" = "yes" ; then 6841 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6842 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6843fi 6844if test "$linux_aio" = "yes" ; then 6845 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6846fi 6847if test "$attr" = "yes" ; then 6848 echo "CONFIG_ATTR=y" >> $config_host_mak 6849fi 6850if test "$libattr" = "yes" ; then 6851 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6852fi 6853if test "$virtfs" = "yes" ; then 6854 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6855fi 6856if test "$mpath" = "yes" ; then 6857 echo "CONFIG_MPATH=y" >> $config_host_mak 6858 if test "$mpathpersist_new_api" = "yes"; then 6859 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 6860 fi 6861fi 6862if test "$vhost_scsi" = "yes" ; then 6863 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6864fi 6865if test "$vhost_net" = "yes" ; then 6866 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 6867fi 6868if test "$vhost_net_user" = "yes" ; then 6869 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 6870fi 6871if test "$vhost_crypto" = "yes" ; then 6872 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6873fi 6874if test "$vhost_vsock" = "yes" ; then 6875 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6876fi 6877if test "$vhost_kernel" = "yes" ; then 6878 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 6879fi 6880if test "$vhost_user" = "yes" ; then 6881 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6882fi 6883if test "$vhost_user_fs" = "yes" ; then 6884 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 6885fi 6886if test "$blobs" = "yes" ; then 6887 echo "INSTALL_BLOBS=yes" >> $config_host_mak 6888fi 6889if test "$iovec" = "yes" ; then 6890 echo "CONFIG_IOVEC=y" >> $config_host_mak 6891fi 6892if test "$preadv" = "yes" ; then 6893 echo "CONFIG_PREADV=y" >> $config_host_mak 6894fi 6895if test "$fdt" != "no" ; then 6896 echo "CONFIG_FDT=y" >> $config_host_mak 6897fi 6898if test "$membarrier" = "yes" ; then 6899 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6900fi 6901if test "$signalfd" = "yes" ; then 6902 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6903fi 6904if test "$optreset" = "yes" ; then 6905 echo "HAVE_OPTRESET=y" >> $config_host_mak 6906fi 6907if test "$tcg" = "yes"; then 6908 echo "CONFIG_TCG=y" >> $config_host_mak 6909 if test "$tcg_interpreter" = "yes" ; then 6910 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6911 fi 6912fi 6913if test "$fdatasync" = "yes" ; then 6914 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6915fi 6916if test "$madvise" = "yes" ; then 6917 echo "CONFIG_MADVISE=y" >> $config_host_mak 6918fi 6919if test "$posix_madvise" = "yes" ; then 6920 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6921fi 6922if test "$posix_memalign" = "yes" ; then 6923 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6924fi 6925 6926if test "$spice" = "yes" ; then 6927 echo "CONFIG_SPICE=y" >> $config_host_mak 6928fi 6929 6930if test "$smartcard" = "yes" ; then 6931 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6932 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6933 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6934fi 6935 6936if test "$libusb" = "yes" ; then 6937 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6938 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6939 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6940fi 6941 6942if test "$usb_redir" = "yes" ; then 6943 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6944 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6945 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6946fi 6947 6948if test "$opengl" = "yes" ; then 6949 echo "CONFIG_OPENGL=y" >> $config_host_mak 6950 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6951 if test "$opengl_dmabuf" = "yes" ; then 6952 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6953 fi 6954fi 6955 6956if test "$gbm" = "yes" ; then 6957 echo "CONFIG_GBM=y" >> $config_host_mak 6958 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 6959 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 6960fi 6961 6962 6963if test "$malloc_trim" = "yes" ; then 6964 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 6965fi 6966 6967if test "$avx2_opt" = "yes" ; then 6968 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6969fi 6970 6971if test "$lzo" = "yes" ; then 6972 echo "CONFIG_LZO=y" >> $config_host_mak 6973fi 6974 6975if test "$snappy" = "yes" ; then 6976 echo "CONFIG_SNAPPY=y" >> $config_host_mak 6977fi 6978 6979if test "$bzip2" = "yes" ; then 6980 echo "CONFIG_BZIP2=y" >> $config_host_mak 6981 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 6982fi 6983 6984if test "$lzfse" = "yes" ; then 6985 echo "CONFIG_LZFSE=y" >> $config_host_mak 6986 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 6987fi 6988 6989if test "$libiscsi" = "yes" ; then 6990 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 6991 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 6992 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6993fi 6994 6995if test "$libnfs" = "yes" ; then 6996 echo "CONFIG_LIBNFS=m" >> $config_host_mak 6997 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 6998fi 6999 7000if test "$seccomp" = "yes"; then 7001 echo "CONFIG_SECCOMP=y" >> $config_host_mak 7002 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 7003 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 7004fi 7005 7006# XXX: suppress that 7007if [ "$bsd" = "yes" ] ; then 7008 echo "CONFIG_BSD=y" >> $config_host_mak 7009fi 7010 7011if test "$localtime_r" = "yes" ; then 7012 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 7013fi 7014if test "$qom_cast_debug" = "yes" ; then 7015 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 7016fi 7017if test "$rbd" = "yes" ; then 7018 echo "CONFIG_RBD=m" >> $config_host_mak 7019 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 7020 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 7021fi 7022 7023echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 7024if test "$coroutine_pool" = "yes" ; then 7025 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7026else 7027 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7028fi 7029 7030if test "$debug_stack_usage" = "yes" ; then 7031 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7032fi 7033 7034if test "$crypto_afalg" = "yes" ; then 7035 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7036fi 7037 7038if test "$open_by_handle_at" = "yes" ; then 7039 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7040fi 7041 7042if test "$linux_magic_h" = "yes" ; then 7043 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7044fi 7045 7046if test "$pragma_diagnostic_available" = "yes" ; then 7047 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 7048fi 7049 7050if test "$valgrind_h" = "yes" ; then 7051 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 7052fi 7053 7054if test "$have_asan_iface_fiber" = "yes" ; then 7055 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 7056fi 7057 7058if test "$has_environ" = "yes" ; then 7059 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 7060fi 7061 7062if test "$cpuid_h" = "yes" ; then 7063 echo "CONFIG_CPUID_H=y" >> $config_host_mak 7064fi 7065 7066if test "$int128" = "yes" ; then 7067 echo "CONFIG_INT128=y" >> $config_host_mak 7068fi 7069 7070if test "$atomic128" = "yes" ; then 7071 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 7072fi 7073 7074if test "$cmpxchg128" = "yes" ; then 7075 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 7076fi 7077 7078if test "$atomic64" = "yes" ; then 7079 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 7080fi 7081 7082if test "$vector16" = "yes" ; then 7083 echo "CONFIG_VECTOR16=y" >> $config_host_mak 7084fi 7085 7086if test "$getauxval" = "yes" ; then 7087 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 7088fi 7089 7090if test "$glusterfs" = "yes" ; then 7091 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 7092 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 7093 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 7094fi 7095 7096if test "$glusterfs_xlator_opt" = "yes" ; then 7097 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 7098fi 7099 7100if test "$glusterfs_discard" = "yes" ; then 7101 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 7102fi 7103 7104if test "$glusterfs_fallocate" = "yes" ; then 7105 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 7106fi 7107 7108if test "$glusterfs_zerofill" = "yes" ; then 7109 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 7110fi 7111 7112if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 7113 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 7114fi 7115 7116if test "$glusterfs_iocb_has_stat" = "yes" ; then 7117 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 7118fi 7119 7120if test "$libssh" = "yes" ; then 7121 echo "CONFIG_LIBSSH=m" >> $config_host_mak 7122 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 7123 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 7124fi 7125 7126if test "$live_block_migration" = "yes" ; then 7127 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 7128fi 7129 7130if test "$tpm" = "yes"; then 7131 echo 'CONFIG_TPM=y' >> $config_host_mak 7132fi 7133 7134echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 7135if have_backend "nop"; then 7136 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 7137fi 7138if have_backend "simple"; then 7139 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 7140 # Set the appropriate trace file. 7141 trace_file="\"$trace_file-\" FMT_pid" 7142fi 7143if have_backend "log"; then 7144 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 7145fi 7146if have_backend "ust"; then 7147 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 7148fi 7149if have_backend "dtrace"; then 7150 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 7151 if test "$trace_backend_stap" = "yes" ; then 7152 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 7153 fi 7154fi 7155if have_backend "ftrace"; then 7156 if test "$linux" = "yes" ; then 7157 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 7158 else 7159 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 7160 fi 7161fi 7162if have_backend "syslog"; then 7163 if test "$posix_syslog" = "yes" ; then 7164 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 7165 else 7166 feature_not_found "syslog(trace backend)" "syslog not available" 7167 fi 7168fi 7169echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 7170 7171if test "$rdma" = "yes" ; then 7172 echo "CONFIG_RDMA=y" >> $config_host_mak 7173 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 7174fi 7175 7176if test "$pvrdma" = "yes" ; then 7177 echo "CONFIG_PVRDMA=y" >> $config_host_mak 7178fi 7179 7180if test "$have_rtnetlink" = "yes" ; then 7181 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 7182fi 7183 7184if test "$libxml2" = "yes" ; then 7185 echo "CONFIG_LIBXML2=y" >> $config_host_mak 7186 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 7187 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 7188fi 7189 7190if test "$replication" = "yes" ; then 7191 echo "CONFIG_REPLICATION=y" >> $config_host_mak 7192fi 7193 7194if test "$have_af_vsock" = "yes" ; then 7195 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 7196fi 7197 7198if test "$have_sysmacros" = "yes" ; then 7199 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 7200fi 7201 7202if test "$have_static_assert" = "yes" ; then 7203 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 7204fi 7205 7206if test "$have_utmpx" = "yes" ; then 7207 echo "HAVE_UTMPX=y" >> $config_host_mak 7208fi 7209if test "$have_getrandom" = "yes" ; then 7210 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 7211fi 7212if test "$ivshmem" = "yes" ; then 7213 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 7214fi 7215if test "$capstone" != "no" ; then 7216 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 7217fi 7218if test "$debug_mutex" = "yes" ; then 7219 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 7220fi 7221 7222# Hold two types of flag: 7223# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 7224# a thread we have a handle to 7225# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 7226# platform 7227if test "$pthread_setname_np_w_tid" = "yes" ; then 7228 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7229 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 7230elif test "$pthread_setname_np_wo_tid" = "yes" ; then 7231 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7232 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 7233fi 7234 7235if test "$vxhs" = "yes" ; then 7236 echo "CONFIG_VXHS=y" >> $config_host_mak 7237 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 7238fi 7239 7240if test "$libpmem" = "yes" ; then 7241 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 7242fi 7243 7244if test "$bochs" = "yes" ; then 7245 echo "CONFIG_BOCHS=y" >> $config_host_mak 7246fi 7247if test "$cloop" = "yes" ; then 7248 echo "CONFIG_CLOOP=y" >> $config_host_mak 7249fi 7250if test "$dmg" = "yes" ; then 7251 echo "CONFIG_DMG=y" >> $config_host_mak 7252fi 7253if test "$qcow1" = "yes" ; then 7254 echo "CONFIG_QCOW1=y" >> $config_host_mak 7255fi 7256if test "$vdi" = "yes" ; then 7257 echo "CONFIG_VDI=y" >> $config_host_mak 7258fi 7259if test "$vvfat" = "yes" ; then 7260 echo "CONFIG_VVFAT=y" >> $config_host_mak 7261fi 7262if test "$qed" = "yes" ; then 7263 echo "CONFIG_QED=y" >> $config_host_mak 7264fi 7265if test "$parallels" = "yes" ; then 7266 echo "CONFIG_PARALLELS=y" >> $config_host_mak 7267fi 7268if test "$sheepdog" = "yes" ; then 7269 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 7270fi 7271 7272if test "$tcg_interpreter" = "yes"; then 7273 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 7274elif test "$ARCH" = "sparc64" ; then 7275 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 7276elif test "$ARCH" = "s390x" ; then 7277 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 7278elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7279 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 7280elif test "$ARCH" = "ppc64" ; then 7281 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 7282elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7283 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES" 7284else 7285 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 7286fi 7287QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES" 7288 7289echo "TOOLS=$tools" >> $config_host_mak 7290echo "ROMS=$roms" >> $config_host_mak 7291echo "MAKE=$make" >> $config_host_mak 7292echo "INSTALL=$install" >> $config_host_mak 7293echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 7294echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 7295echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 7296echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 7297echo "PYTHON=$python" >> $config_host_mak 7298echo "PYTHON2=$python2" >> $config_host_mak 7299echo "CC=$cc" >> $config_host_mak 7300if $iasl -h > /dev/null 2>&1; then 7301 echo "IASL=$iasl" >> $config_host_mak 7302fi 7303echo "HOST_CC=$host_cc" >> $config_host_mak 7304echo "CXX=$cxx" >> $config_host_mak 7305echo "OBJCC=$objcc" >> $config_host_mak 7306echo "AR=$ar" >> $config_host_mak 7307echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 7308echo "AS=$as" >> $config_host_mak 7309echo "CCAS=$ccas" >> $config_host_mak 7310echo "CPP=$cpp" >> $config_host_mak 7311echo "OBJCOPY=$objcopy" >> $config_host_mak 7312echo "LD=$ld" >> $config_host_mak 7313echo "RANLIB=$ranlib" >> $config_host_mak 7314echo "NM=$nm" >> $config_host_mak 7315echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 7316echo "WINDRES=$windres" >> $config_host_mak 7317echo "CFLAGS=$CFLAGS" >> $config_host_mak 7318echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 7319echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 7320echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 7321echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 7322if test "$sparse" = "yes" ; then 7323 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 7324 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 7325 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 7326 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 7327 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 7328fi 7329echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 7330echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 7331echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 7332echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 7333echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 7334echo "LIBS+=$LIBS" >> $config_host_mak 7335echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 7336echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 7337echo "EXESUF=$EXESUF" >> $config_host_mak 7338echo "DSOSUF=$DSOSUF" >> $config_host_mak 7339echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 7340echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 7341echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 7342echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 7343echo "POD2MAN=$POD2MAN" >> $config_host_mak 7344if test "$gcov" = "yes" ; then 7345 echo "CONFIG_GCOV=y" >> $config_host_mak 7346 echo "GCOV=$gcov_tool" >> $config_host_mak 7347fi 7348 7349if test "$libudev" != "no"; then 7350 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 7351 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 7352fi 7353 7354# use included Linux headers 7355if test "$linux" = "yes" ; then 7356 mkdir -p linux-headers 7357 case "$cpu" in 7358 i386|x86_64|x32) 7359 linux_arch=x86 7360 ;; 7361 ppc|ppc64|ppc64le) 7362 linux_arch=powerpc 7363 ;; 7364 s390x) 7365 linux_arch=s390 7366 ;; 7367 aarch64) 7368 linux_arch=arm64 7369 ;; 7370 mips64) 7371 linux_arch=mips 7372 ;; 7373 *) 7374 # For most CPUs the kernel architecture name and QEMU CPU name match. 7375 linux_arch="$cpu" 7376 ;; 7377 esac 7378 # For non-KVM architectures we will not have asm headers 7379 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 7380 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 7381 fi 7382fi 7383 7384for target in $target_list; do 7385target_dir="$target" 7386config_target_mak=$target_dir/config-target.mak 7387target_name=$(echo $target | cut -d '-' -f 1) 7388target_aligned_only="no" 7389case "$target_name" in 7390 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) 7391 target_aligned_only="yes" 7392 ;; 7393esac 7394target_bigendian="no" 7395case "$target_name" in 7396 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 7397 target_bigendian="yes" 7398 ;; 7399esac 7400target_softmmu="no" 7401target_user_only="no" 7402target_linux_user="no" 7403target_bsd_user="no" 7404case "$target" in 7405 ${target_name}-softmmu) 7406 target_softmmu="yes" 7407 ;; 7408 ${target_name}-linux-user) 7409 target_user_only="yes" 7410 target_linux_user="yes" 7411 ;; 7412 ${target_name}-bsd-user) 7413 target_user_only="yes" 7414 target_bsd_user="yes" 7415 ;; 7416 *) 7417 error_exit "Target '$target' not recognised" 7418 exit 1 7419 ;; 7420esac 7421 7422mkdir -p $target_dir 7423echo "# Automatically generated by configure - do not modify" > $config_target_mak 7424 7425bflt="no" 7426mttcg="no" 7427interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7428gdb_xml_files="" 7429 7430TARGET_ARCH="$target_name" 7431TARGET_BASE_ARCH="" 7432TARGET_ABI_DIR="" 7433 7434case "$target_name" in 7435 i386) 7436 mttcg="yes" 7437 gdb_xml_files="i386-32bit.xml" 7438 ;; 7439 x86_64) 7440 TARGET_BASE_ARCH=i386 7441 mttcg="yes" 7442 gdb_xml_files="i386-64bit.xml" 7443 ;; 7444 alpha) 7445 mttcg="yes" 7446 ;; 7447 arm|armeb) 7448 TARGET_ARCH=arm 7449 bflt="yes" 7450 mttcg="yes" 7451 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7452 ;; 7453 aarch64|aarch64_be) 7454 TARGET_ARCH=aarch64 7455 TARGET_BASE_ARCH=arm 7456 bflt="yes" 7457 mttcg="yes" 7458 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7459 ;; 7460 cris) 7461 ;; 7462 hppa) 7463 mttcg="yes" 7464 ;; 7465 lm32) 7466 ;; 7467 m68k) 7468 bflt="yes" 7469 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 7470 ;; 7471 microblaze|microblazeel) 7472 TARGET_ARCH=microblaze 7473 bflt="yes" 7474 echo "TARGET_ABI32=y" >> $config_target_mak 7475 ;; 7476 mips|mipsel) 7477 mttcg="yes" 7478 TARGET_ARCH=mips 7479 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7480 ;; 7481 mipsn32|mipsn32el) 7482 mttcg="yes" 7483 TARGET_ARCH=mips64 7484 TARGET_BASE_ARCH=mips 7485 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7486 echo "TARGET_ABI32=y" >> $config_target_mak 7487 ;; 7488 mips64|mips64el) 7489 mttcg="yes" 7490 TARGET_ARCH=mips64 7491 TARGET_BASE_ARCH=mips 7492 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7493 ;; 7494 moxie) 7495 ;; 7496 nios2) 7497 ;; 7498 or1k) 7499 TARGET_ARCH=openrisc 7500 TARGET_BASE_ARCH=openrisc 7501 ;; 7502 ppc) 7503 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7504 ;; 7505 ppc64) 7506 TARGET_BASE_ARCH=ppc 7507 TARGET_ABI_DIR=ppc 7508 mttcg=yes 7509 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7510 ;; 7511 ppc64le) 7512 TARGET_ARCH=ppc64 7513 TARGET_BASE_ARCH=ppc 7514 TARGET_ABI_DIR=ppc 7515 mttcg=yes 7516 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7517 ;; 7518 ppc64abi32) 7519 TARGET_ARCH=ppc64 7520 TARGET_BASE_ARCH=ppc 7521 TARGET_ABI_DIR=ppc 7522 echo "TARGET_ABI32=y" >> $config_target_mak 7523 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7524 ;; 7525 riscv32) 7526 TARGET_BASE_ARCH=riscv 7527 TARGET_ABI_DIR=riscv 7528 mttcg=yes 7529 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml" 7530 ;; 7531 riscv64) 7532 TARGET_BASE_ARCH=riscv 7533 TARGET_ABI_DIR=riscv 7534 mttcg=yes 7535 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml" 7536 ;; 7537 sh4|sh4eb) 7538 TARGET_ARCH=sh4 7539 bflt="yes" 7540 ;; 7541 sparc) 7542 ;; 7543 sparc64) 7544 TARGET_BASE_ARCH=sparc 7545 ;; 7546 sparc32plus) 7547 TARGET_ARCH=sparc64 7548 TARGET_BASE_ARCH=sparc 7549 TARGET_ABI_DIR=sparc 7550 echo "TARGET_ABI32=y" >> $config_target_mak 7551 ;; 7552 s390x) 7553 mttcg=yes 7554 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7555 ;; 7556 tilegx) 7557 ;; 7558 tricore) 7559 ;; 7560 unicore32) 7561 ;; 7562 xtensa|xtensaeb) 7563 TARGET_ARCH=xtensa 7564 bflt="yes" 7565 mttcg="yes" 7566 ;; 7567 *) 7568 error_exit "Unsupported target CPU" 7569 ;; 7570esac 7571# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7572if [ "$TARGET_BASE_ARCH" = "" ]; then 7573 TARGET_BASE_ARCH=$TARGET_ARCH 7574fi 7575 7576symlink "$source_path/Makefile.target" "$target_dir/Makefile" 7577 7578upper() { 7579 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7580} 7581 7582target_arch_name="$(upper $TARGET_ARCH)" 7583echo "TARGET_$target_arch_name=y" >> $config_target_mak 7584echo "TARGET_NAME=$target_name" >> $config_target_mak 7585echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7586if [ "$TARGET_ABI_DIR" = "" ]; then 7587 TARGET_ABI_DIR=$TARGET_ARCH 7588fi 7589echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7590if [ "$HOST_VARIANT_DIR" != "" ]; then 7591 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7592fi 7593 7594if supported_xen_target $target; then 7595 echo "CONFIG_XEN=y" >> $config_target_mak 7596 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak 7597 if test "$xen_pci_passthrough" = yes; then 7598 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7599 fi 7600else 7601 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak 7602fi 7603if supported_kvm_target $target; then 7604 echo "CONFIG_KVM=y" >> $config_target_mak 7605 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak 7606else 7607 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak 7608fi 7609if supported_hax_target $target; then 7610 echo "CONFIG_HAX=y" >> $config_target_mak 7611fi 7612if supported_hvf_target $target; then 7613 echo "CONFIG_HVF=y" >> $config_target_mak 7614fi 7615if supported_whpx_target $target; then 7616 echo "CONFIG_WHPX=y" >> $config_target_mak 7617fi 7618if test "$target_aligned_only" = "yes" ; then 7619 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak 7620fi 7621if test "$target_bigendian" = "yes" ; then 7622 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7623fi 7624if test "$target_softmmu" = "yes" ; then 7625 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7626 if test "$mttcg" = "yes" ; then 7627 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7628 fi 7629fi 7630if test "$target_user_only" = "yes" ; then 7631 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7632 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7633fi 7634if test "$target_linux_user" = "yes" ; then 7635 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7636fi 7637list="" 7638if test ! -z "$gdb_xml_files" ; then 7639 for x in $gdb_xml_files; do 7640 list="$list $source_path/gdb-xml/$x" 7641 done 7642 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7643fi 7644 7645if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 7646 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7647fi 7648if test "$target_bsd_user" = "yes" ; then 7649 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7650fi 7651 7652 7653# generate QEMU_CFLAGS/LDFLAGS for targets 7654 7655cflags="" 7656ldflags="" 7657 7658disas_config() { 7659 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7660 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7661} 7662 7663for i in $ARCH $TARGET_BASE_ARCH ; do 7664 case "$i" in 7665 alpha) 7666 disas_config "ALPHA" 7667 ;; 7668 aarch64) 7669 if test -n "${cxx}"; then 7670 disas_config "ARM_A64" 7671 fi 7672 ;; 7673 arm) 7674 disas_config "ARM" 7675 if test -n "${cxx}"; then 7676 disas_config "ARM_A64" 7677 fi 7678 ;; 7679 cris) 7680 disas_config "CRIS" 7681 ;; 7682 hppa) 7683 disas_config "HPPA" 7684 ;; 7685 i386|x86_64|x32) 7686 disas_config "I386" 7687 ;; 7688 lm32) 7689 disas_config "LM32" 7690 ;; 7691 m68k) 7692 disas_config "M68K" 7693 ;; 7694 microblaze*) 7695 disas_config "MICROBLAZE" 7696 ;; 7697 mips*) 7698 disas_config "MIPS" 7699 if test -n "${cxx}"; then 7700 disas_config "NANOMIPS" 7701 fi 7702 ;; 7703 moxie*) 7704 disas_config "MOXIE" 7705 ;; 7706 nios2) 7707 disas_config "NIOS2" 7708 ;; 7709 or1k) 7710 disas_config "OPENRISC" 7711 ;; 7712 ppc*) 7713 disas_config "PPC" 7714 ;; 7715 riscv*) 7716 disas_config "RISCV" 7717 ;; 7718 s390*) 7719 disas_config "S390" 7720 ;; 7721 sh4) 7722 disas_config "SH4" 7723 ;; 7724 sparc*) 7725 disas_config "SPARC" 7726 ;; 7727 xtensa*) 7728 disas_config "XTENSA" 7729 ;; 7730 esac 7731done 7732if test "$tcg_interpreter" = "yes" ; then 7733 disas_config "TCI" 7734fi 7735 7736case "$ARCH" in 7737alpha) 7738 # Ensure there's only a single GP 7739 cflags="-msmall-data $cflags" 7740;; 7741esac 7742 7743if test "$gprof" = "yes" ; then 7744 echo "TARGET_GPROF=y" >> $config_target_mak 7745 if test "$target_linux_user" = "yes" ; then 7746 cflags="-p $cflags" 7747 ldflags="-p $ldflags" 7748 fi 7749 if test "$target_softmmu" = "yes" ; then 7750 ldflags="-p $ldflags" 7751 echo "GPROF_CFLAGS=-p" >> $config_target_mak 7752 fi 7753fi 7754 7755if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then 7756 ldflags="$ldflags $textseg_ldflags" 7757fi 7758 7759# Newer kernels on s390 check for an S390_PGSTE program header and 7760# enable the pgste page table extensions in that case. This makes 7761# the vm.allocate_pgste sysctl unnecessary. We enable this program 7762# header if 7763# - we build on s390x 7764# - we build the system emulation for s390x (qemu-system-s390x) 7765# - KVM is enabled 7766# - the linker supports --s390-pgste 7767if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \ 7768 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then 7769 if ld_has --s390-pgste ; then 7770 ldflags="-Wl,--s390-pgste $ldflags" 7771 fi 7772fi 7773 7774echo "LDFLAGS+=$ldflags" >> $config_target_mak 7775echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 7776 7777done # for target in $targets 7778 7779echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak 7780echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak 7781 7782if [ "$fdt" = "git" ]; then 7783 echo "config-host.h: dtc/all" >> $config_host_mak 7784fi 7785if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7786 echo "config-host.h: capstone/all" >> $config_host_mak 7787fi 7788if test -n "$LIBCAPSTONE"; then 7789 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7790fi 7791 7792if test "$numa" = "yes"; then 7793 echo "CONFIG_NUMA=y" >> $config_host_mak 7794fi 7795 7796if test "$ccache_cpp2" = "yes"; then 7797 echo "export CCACHE_CPP2=y" >> $config_host_mak 7798fi 7799 7800# If we're using a separate build tree, set it up now. 7801# DIRS are directories which we simply mkdir in the build tree; 7802# LINKS are things to symlink back into the source tree 7803# (these can be both files and directories). 7804# Caution: do not add files or directories here using wildcards. This 7805# will result in problems later if a new file matching the wildcard is 7806# added to the source tree -- nothing will cause configure to be rerun 7807# so the build tree will be missing the link back to the new file, and 7808# tests might fail. Prefer to keep the relevant files in their own 7809# directory and symlink the directory instead. 7810DIRS="tests tests/tcg tests/tcg/lm32 tests/libqos tests/qapi-schema tests/qemu-iotests tests/vm" 7811DIRS="$DIRS tests/fp tests/qgraph" 7812DIRS="$DIRS docs docs/interop fsdev scsi" 7813DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 7814DIRS="$DIRS roms/seabios roms/vgabios" 7815LINKS="Makefile" 7816LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile" 7817LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile" 7818LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" 7819LINKS="$LINKS pc-bios/s390-ccw/Makefile" 7820LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile" 7821LINKS="$LINKS pc-bios/qemu-icon.bmp" 7822LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 7823LINKS="$LINKS tests/acceptance tests/data" 7824LINKS="$LINKS tests/qemu-iotests/check" 7825LINKS="$LINKS python" 7826for bios_file in \ 7827 $source_path/pc-bios/*.bin \ 7828 $source_path/pc-bios/*.lid \ 7829 $source_path/pc-bios/*.rom \ 7830 $source_path/pc-bios/*.dtb \ 7831 $source_path/pc-bios/*.img \ 7832 $source_path/pc-bios/openbios-* \ 7833 $source_path/pc-bios/u-boot.* \ 7834 $source_path/pc-bios/edk2-*.fd.bz2 \ 7835 $source_path/pc-bios/palcode-* 7836do 7837 LINKS="$LINKS pc-bios/$(basename $bios_file)" 7838done 7839mkdir -p $DIRS 7840for f in $LINKS ; do 7841 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 7842 symlink "$source_path/$f" "$f" 7843 fi 7844done 7845 7846(for i in $cross_cc_vars; do 7847 export $i 7848done 7849export target_list source_path 7850$source_path/tests/tcg/configure.sh) 7851 7852# temporary config to build submodules 7853for rom in seabios vgabios ; do 7854 config_mak=roms/$rom/config.mak 7855 echo "# Automatically generated by configure - do not modify" > $config_mak 7856 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7857 echo "AS=$as" >> $config_mak 7858 echo "CCAS=$ccas" >> $config_mak 7859 echo "CC=$cc" >> $config_mak 7860 echo "BCC=bcc" >> $config_mak 7861 echo "CPP=$cpp" >> $config_mak 7862 echo "OBJCOPY=objcopy" >> $config_mak 7863 echo "IASL=$iasl" >> $config_mak 7864 echo "LD=$ld" >> $config_mak 7865 echo "RANLIB=$ranlib" >> $config_mak 7866done 7867 7868# set up qemu-iotests in this build directory 7869iotests_common_env="tests/qemu-iotests/common.env" 7870 7871echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 7872echo >> "$iotests_common_env" 7873echo "export PYTHON='$python'" >> "$iotests_common_env" 7874 7875# Save the configure command line for later reuse. 7876cat <<EOD >config.status 7877#!/bin/sh 7878# Generated by configure. 7879# Run this file to recreate the current configuration. 7880# Compiler output produced by configure, useful for debugging 7881# configure, is in config.log if it exists. 7882EOD 7883 7884preserve_env() { 7885 envname=$1 7886 7887 eval envval=\$$envname 7888 7889 if test -n "$envval" 7890 then 7891 echo "$envname='$envval'" >> config.status 7892 echo "export $envname" >> config.status 7893 else 7894 echo "unset $envname" >> config.status 7895 fi 7896} 7897 7898# Preserve various env variables that influence what 7899# features/build target configure will detect 7900preserve_env AR 7901preserve_env AS 7902preserve_env CC 7903preserve_env CPP 7904preserve_env CXX 7905preserve_env INSTALL 7906preserve_env LD 7907preserve_env LD_LIBRARY_PATH 7908preserve_env LIBTOOL 7909preserve_env MAKE 7910preserve_env NM 7911preserve_env OBJCOPY 7912preserve_env PATH 7913preserve_env PKG_CONFIG 7914preserve_env PKG_CONFIG_LIBDIR 7915preserve_env PKG_CONFIG_PATH 7916preserve_env PYTHON 7917preserve_env SDL2_CONFIG 7918preserve_env SMBD 7919preserve_env STRIP 7920preserve_env WINDRES 7921 7922printf "exec" >>config.status 7923printf " '%s'" "$0" "$@" >>config.status 7924echo ' "$@"' >>config.status 7925chmod +x config.status 7926 7927rm -r "$TMPDIR1" 7928