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