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