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