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