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