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