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