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 2231libseccomp_minver="2.2.0" 2232if test "$seccomp" != "no" ; then 2233 case "$cpu" in 2234 i386|x86_64|mips) 2235 ;; 2236 arm|aarch64) 2237 libseccomp_minver="2.2.3" 2238 ;; 2239 ppc|ppc64|s390x) 2240 libseccomp_minver="2.3.0" 2241 ;; 2242 *) 2243 libseccomp_minver="" 2244 ;; 2245 esac 2246 2247 if test "$libseccomp_minver" != "" && 2248 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then 2249 seccomp_cflags="$($pkg_config --cflags libseccomp)" 2250 seccomp_libs="$($pkg_config --libs libseccomp)" 2251 seccomp="yes" 2252 else 2253 if test "$seccomp" = "yes" ; then 2254 if test "$libseccomp_minver" != "" ; then 2255 feature_not_found "libseccomp" \ 2256 "Install libseccomp devel >= $libseccomp_minver" 2257 else 2258 feature_not_found "libseccomp" \ 2259 "libseccomp is not supported for host cpu $cpu" 2260 fi 2261 fi 2262 seccomp="no" 2263 fi 2264fi 2265########################################## 2266# xen probe 2267 2268if test "$xen" != "no" ; then 2269 # Check whether Xen library path is specified via --extra-ldflags to avoid 2270 # overriding this setting with pkg-config output. If not, try pkg-config 2271 # to obtain all needed flags. 2272 2273 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2274 $pkg_config --exists xencontrol ; then 2275 xen_ctrl_version="$(printf '%d%02d%02d' \ 2276 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2277 xen=yes 2278 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" 2279 xen_pc="$xen_pc xenevtchn xendevicemodel" 2280 if $pkg_config --exists xentoolcore; then 2281 xen_pc="$xen_pc xentoolcore" 2282 fi 2283 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)" 2284 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu" 2285 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS" 2286 else 2287 2288 xen_libs="-lxenstore -lxenctrl -lxenguest" 2289 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2290 2291 # First we test whether Xen headers and libraries are available. 2292 # If no, we are done and there is no Xen support. 2293 # If yes, more tests are run to detect the Xen version. 2294 2295 # Xen (any) 2296 cat > $TMPC <<EOF 2297#include <xenctrl.h> 2298int main(void) { 2299 return 0; 2300} 2301EOF 2302 if ! compile_prog "" "$xen_libs" ; then 2303 # Xen not found 2304 if test "$xen" = "yes" ; then 2305 feature_not_found "xen" "Install xen devel" 2306 fi 2307 xen=no 2308 2309 # Xen unstable 2310 elif 2311 cat > $TMPC <<EOF && 2312#undef XC_WANT_COMPAT_DEVICEMODEL_API 2313#define __XEN_TOOLS__ 2314#include <xendevicemodel.h> 2315#include <xenforeignmemory.h> 2316int main(void) { 2317 xendevicemodel_handle *xd; 2318 xenforeignmemory_handle *xfmem; 2319 2320 xd = xendevicemodel_open(0, 0); 2321 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 2322 2323 xfmem = xenforeignmemory_open(0, 0); 2324 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2325 2326 return 0; 2327} 2328EOF 2329 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2330 then 2331 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2332 xen_ctrl_version=41100 2333 xen=yes 2334 elif 2335 cat > $TMPC <<EOF && 2336#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2337#include <xenforeignmemory.h> 2338#include <xentoolcore.h> 2339int main(void) { 2340 xenforeignmemory_handle *xfmem; 2341 2342 xfmem = xenforeignmemory_open(0, 0); 2343 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2344 xentoolcore_restrict_all(0); 2345 2346 return 0; 2347} 2348EOF 2349 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2350 then 2351 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2352 xen_ctrl_version=41000 2353 xen=yes 2354 elif 2355 cat > $TMPC <<EOF && 2356#undef XC_WANT_COMPAT_DEVICEMODEL_API 2357#define __XEN_TOOLS__ 2358#include <xendevicemodel.h> 2359int main(void) { 2360 xendevicemodel_handle *xd; 2361 2362 xd = xendevicemodel_open(0, 0); 2363 xendevicemodel_close(xd); 2364 2365 return 0; 2366} 2367EOF 2368 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2369 then 2370 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2371 xen_ctrl_version=40900 2372 xen=yes 2373 elif 2374 cat > $TMPC <<EOF && 2375/* 2376 * If we have stable libs the we don't want the libxc compat 2377 * layers, regardless of what CFLAGS we may have been given. 2378 * 2379 * Also, check if xengnttab_grant_copy_segment_t is defined and 2380 * grant copy operation is implemented. 2381 */ 2382#undef XC_WANT_COMPAT_EVTCHN_API 2383#undef XC_WANT_COMPAT_GNTTAB_API 2384#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2385#include <xenctrl.h> 2386#include <xenstore.h> 2387#include <xenevtchn.h> 2388#include <xengnttab.h> 2389#include <xenforeignmemory.h> 2390#include <stdint.h> 2391#include <xen/hvm/hvm_info_table.h> 2392#if !defined(HVM_MAX_VCPUS) 2393# error HVM_MAX_VCPUS not defined 2394#endif 2395int main(void) { 2396 xc_interface *xc = NULL; 2397 xenforeignmemory_handle *xfmem; 2398 xenevtchn_handle *xe; 2399 xengnttab_handle *xg; 2400 xen_domain_handle_t handle; 2401 xengnttab_grant_copy_segment_t* seg = NULL; 2402 2403 xs_daemon_open(); 2404 2405 xc = xc_interface_open(0, 0, 0); 2406 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2407 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2408 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2409 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2410 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2411 2412 xfmem = xenforeignmemory_open(0, 0); 2413 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2414 2415 xe = xenevtchn_open(0, 0); 2416 xenevtchn_fd(xe); 2417 2418 xg = xengnttab_open(0, 0); 2419 xengnttab_grant_copy(xg, 0, seg); 2420 2421 return 0; 2422} 2423EOF 2424 compile_prog "" "$xen_libs $xen_stable_libs" 2425 then 2426 xen_ctrl_version=40800 2427 xen=yes 2428 elif 2429 cat > $TMPC <<EOF && 2430/* 2431 * If we have stable libs the we don't want the libxc compat 2432 * layers, regardless of what CFLAGS we may have been given. 2433 */ 2434#undef XC_WANT_COMPAT_EVTCHN_API 2435#undef XC_WANT_COMPAT_GNTTAB_API 2436#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2437#include <xenctrl.h> 2438#include <xenstore.h> 2439#include <xenevtchn.h> 2440#include <xengnttab.h> 2441#include <xenforeignmemory.h> 2442#include <stdint.h> 2443#include <xen/hvm/hvm_info_table.h> 2444#if !defined(HVM_MAX_VCPUS) 2445# error HVM_MAX_VCPUS not defined 2446#endif 2447int main(void) { 2448 xc_interface *xc = NULL; 2449 xenforeignmemory_handle *xfmem; 2450 xenevtchn_handle *xe; 2451 xengnttab_handle *xg; 2452 xen_domain_handle_t handle; 2453 2454 xs_daemon_open(); 2455 2456 xc = xc_interface_open(0, 0, 0); 2457 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2458 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2459 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2460 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2461 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2462 2463 xfmem = xenforeignmemory_open(0, 0); 2464 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2465 2466 xe = xenevtchn_open(0, 0); 2467 xenevtchn_fd(xe); 2468 2469 xg = xengnttab_open(0, 0); 2470 xengnttab_map_grant_ref(xg, 0, 0, 0); 2471 2472 return 0; 2473} 2474EOF 2475 compile_prog "" "$xen_libs $xen_stable_libs" 2476 then 2477 xen_ctrl_version=40701 2478 xen=yes 2479 elif 2480 cat > $TMPC <<EOF && 2481#include <xenctrl.h> 2482#include <stdint.h> 2483int main(void) { 2484 xc_interface *xc = NULL; 2485 xen_domain_handle_t handle; 2486 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2487 return 0; 2488} 2489EOF 2490 compile_prog "" "$xen_libs" 2491 then 2492 xen_ctrl_version=40700 2493 xen=yes 2494 2495 # Xen 4.6 2496 elif 2497 cat > $TMPC <<EOF && 2498#include <xenctrl.h> 2499#include <xenstore.h> 2500#include <stdint.h> 2501#include <xen/hvm/hvm_info_table.h> 2502#if !defined(HVM_MAX_VCPUS) 2503# error HVM_MAX_VCPUS not defined 2504#endif 2505int main(void) { 2506 xc_interface *xc; 2507 xs_daemon_open(); 2508 xc = xc_interface_open(0, 0, 0); 2509 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2510 xc_gnttab_open(NULL, 0); 2511 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2512 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2513 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2514 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2515 return 0; 2516} 2517EOF 2518 compile_prog "" "$xen_libs" 2519 then 2520 xen_ctrl_version=40600 2521 xen=yes 2522 2523 # Xen 4.5 2524 elif 2525 cat > $TMPC <<EOF && 2526#include <xenctrl.h> 2527#include <xenstore.h> 2528#include <stdint.h> 2529#include <xen/hvm/hvm_info_table.h> 2530#if !defined(HVM_MAX_VCPUS) 2531# error HVM_MAX_VCPUS not defined 2532#endif 2533int main(void) { 2534 xc_interface *xc; 2535 xs_daemon_open(); 2536 xc = xc_interface_open(0, 0, 0); 2537 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2538 xc_gnttab_open(NULL, 0); 2539 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2540 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2541 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2542 return 0; 2543} 2544EOF 2545 compile_prog "" "$xen_libs" 2546 then 2547 xen_ctrl_version=40500 2548 xen=yes 2549 2550 elif 2551 cat > $TMPC <<EOF && 2552#include <xenctrl.h> 2553#include <xenstore.h> 2554#include <stdint.h> 2555#include <xen/hvm/hvm_info_table.h> 2556#if !defined(HVM_MAX_VCPUS) 2557# error HVM_MAX_VCPUS not defined 2558#endif 2559int main(void) { 2560 xc_interface *xc; 2561 xs_daemon_open(); 2562 xc = xc_interface_open(0, 0, 0); 2563 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2564 xc_gnttab_open(NULL, 0); 2565 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2566 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2567 return 0; 2568} 2569EOF 2570 compile_prog "" "$xen_libs" 2571 then 2572 xen_ctrl_version=40200 2573 xen=yes 2574 2575 else 2576 if test "$xen" = "yes" ; then 2577 feature_not_found "xen (unsupported version)" \ 2578 "Install a supported xen (xen 4.2 or newer)" 2579 fi 2580 xen=no 2581 fi 2582 2583 if test "$xen" = yes; then 2584 if test $xen_ctrl_version -ge 40701 ; then 2585 libs_softmmu="$xen_stable_libs $libs_softmmu" 2586 fi 2587 libs_softmmu="$xen_libs $libs_softmmu" 2588 fi 2589 fi 2590fi 2591 2592if test "$xen_pci_passthrough" != "no"; then 2593 if test "$xen" = "yes" && test "$linux" = "yes"; then 2594 xen_pci_passthrough=yes 2595 else 2596 if test "$xen_pci_passthrough" = "yes"; then 2597 error_exit "User requested feature Xen PCI Passthrough" \ 2598 " but this feature requires /sys from Linux" 2599 fi 2600 xen_pci_passthrough=no 2601 fi 2602fi 2603 2604if test "$xen_pv_domain_build" = "yes" && 2605 test "$xen" != "yes"; then 2606 error_exit "User requested Xen PV domain builder support" \ 2607 "which requires Xen support." 2608fi 2609 2610########################################## 2611# Windows Hypervisor Platform accelerator (WHPX) check 2612if test "$whpx" != "no" ; then 2613 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then 2614 whpx="yes" 2615 else 2616 if test "$whpx" = "yes"; then 2617 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed" 2618 fi 2619 whpx="no" 2620 fi 2621fi 2622 2623########################################## 2624# Sparse probe 2625if test "$sparse" != "no" ; then 2626 if has cgcc; then 2627 sparse=yes 2628 else 2629 if test "$sparse" = "yes" ; then 2630 feature_not_found "sparse" "Install sparse binary" 2631 fi 2632 sparse=no 2633 fi 2634fi 2635 2636########################################## 2637# X11 probe 2638if $pkg_config --exists "x11"; then 2639 have_x11=yes 2640 x11_cflags=$($pkg_config --cflags x11) 2641 x11_libs=$($pkg_config --libs x11) 2642fi 2643 2644########################################## 2645# GTK probe 2646 2647if test "$gtk" != "no"; then 2648 if test "$gtkabi" = ""; then 2649 # The GTK ABI was not specified explicitly, so try whether 3.0 is available. 2650 # Use 2.0 as a fallback if that is available. 2651 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then 2652 gtkabi=3.0 2653 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then 2654 gtkabi=2.0 2655 else 2656 gtkabi=3.0 2657 fi 2658 fi 2659 gtkpackage="gtk+-$gtkabi" 2660 gtkx11package="gtk+-x11-$gtkabi" 2661 if test "$gtkabi" = "3.0" ; then 2662 gtkversion="3.0.0" 2663 else 2664 gtkversion="2.18.0" 2665 fi 2666 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 2667 gtk_cflags=$($pkg_config --cflags $gtkpackage) 2668 gtk_libs=$($pkg_config --libs $gtkpackage) 2669 gtk_version=$($pkg_config --modversion $gtkpackage) 2670 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 2671 need_x11=yes 2672 gtk_cflags="$gtk_cflags $x11_cflags" 2673 gtk_libs="$gtk_libs $x11_libs" 2674 fi 2675 gtk="yes" 2676 elif test "$gtk" = "yes"; then 2677 feature_not_found "gtk" "Install gtk3-devel" 2678 else 2679 gtk="no" 2680 fi 2681fi 2682 2683 2684########################################## 2685# GNUTLS probe 2686 2687gnutls_works() { 2688 # Unfortunately some distros have bad pkg-config information for gnutls 2689 # such that it claims to exist but you get a compiler error if you try 2690 # to use the options returned by --libs. Specifically, Ubuntu for --static 2691 # builds doesn't work: 2692 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035 2693 # 2694 # So sanity check the cflags/libs before assuming gnutls can be used. 2695 if ! $pkg_config --exists "gnutls"; then 2696 return 1 2697 fi 2698 2699 write_c_skeleton 2700 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)" 2701} 2702 2703gnutls_gcrypt=no 2704gnutls_nettle=no 2705if test "$gnutls" != "no"; then 2706 if gnutls_works; then 2707 gnutls_cflags=$($pkg_config --cflags gnutls) 2708 gnutls_libs=$($pkg_config --libs gnutls) 2709 libs_softmmu="$gnutls_libs $libs_softmmu" 2710 libs_tools="$gnutls_libs $libs_tools" 2711 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags" 2712 gnutls="yes" 2713 2714 # gnutls_rnd requires >= 2.11.0 2715 if $pkg_config --exists "gnutls >= 2.11.0"; then 2716 gnutls_rnd="yes" 2717 else 2718 gnutls_rnd="no" 2719 fi 2720 2721 if $pkg_config --exists 'gnutls >= 3.0'; then 2722 gnutls_gcrypt=no 2723 gnutls_nettle=yes 2724 elif $pkg_config --exists 'gnutls >= 2.12'; then 2725 case $($pkg_config --libs --static gnutls) in 2726 *gcrypt*) 2727 gnutls_gcrypt=yes 2728 gnutls_nettle=no 2729 ;; 2730 *nettle*) 2731 gnutls_gcrypt=no 2732 gnutls_nettle=yes 2733 ;; 2734 *) 2735 gnutls_gcrypt=yes 2736 gnutls_nettle=no 2737 ;; 2738 esac 2739 else 2740 gnutls_gcrypt=yes 2741 gnutls_nettle=no 2742 fi 2743 elif test "$gnutls" = "yes"; then 2744 feature_not_found "gnutls" "Install gnutls devel" 2745 else 2746 gnutls="no" 2747 gnutls_rnd="no" 2748 fi 2749else 2750 gnutls_rnd="no" 2751fi 2752 2753 2754# If user didn't give a --disable/enable-gcrypt flag, 2755# then mark as disabled if user requested nettle 2756# explicitly, or if gnutls links to nettle 2757if test -z "$gcrypt" 2758then 2759 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes" 2760 then 2761 gcrypt="no" 2762 fi 2763fi 2764 2765# If user didn't give a --disable/enable-nettle flag, 2766# then mark as disabled if user requested gcrypt 2767# explicitly, or if gnutls links to gcrypt 2768if test -z "$nettle" 2769then 2770 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes" 2771 then 2772 nettle="no" 2773 fi 2774fi 2775 2776has_libgcrypt_config() { 2777 if ! has "libgcrypt-config" 2778 then 2779 return 1 2780 fi 2781 2782 if test -n "$cross_prefix" 2783 then 2784 host=$(libgcrypt-config --host) 2785 if test "$host-" != $cross_prefix 2786 then 2787 return 1 2788 fi 2789 fi 2790 2791 return 0 2792} 2793 2794if test "$gcrypt" != "no"; then 2795 if has_libgcrypt_config; then 2796 gcrypt_cflags=$(libgcrypt-config --cflags) 2797 gcrypt_libs=$(libgcrypt-config --libs) 2798 # Debian has remove -lgpg-error from libgcrypt-config 2799 # as it "spreads unnecessary dependencies" which in 2800 # turn breaks static builds... 2801 if test "$static" = "yes" 2802 then 2803 gcrypt_libs="$gcrypt_libs -lgpg-error" 2804 fi 2805 libs_softmmu="$gcrypt_libs $libs_softmmu" 2806 libs_tools="$gcrypt_libs $libs_tools" 2807 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags" 2808 gcrypt="yes" 2809 if test -z "$nettle"; then 2810 nettle="no" 2811 fi 2812 2813 cat > $TMPC << EOF 2814#include <gcrypt.h> 2815int main(void) { 2816 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2, 2817 GCRY_MD_SHA256, 2818 NULL, 0, 0, 0, NULL); 2819 return 0; 2820} 2821EOF 2822 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 2823 gcrypt_kdf=yes 2824 fi 2825 2826 cat > $TMPC << EOF 2827#include <gcrypt.h> 2828int main(void) { 2829 gcry_mac_hd_t handle; 2830 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 2831 GCRY_MAC_FLAG_SECURE, NULL); 2832 return 0; 2833} 2834EOF 2835 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 2836 gcrypt_hmac=yes 2837 fi 2838 else 2839 if test "$gcrypt" = "yes"; then 2840 feature_not_found "gcrypt" "Install gcrypt devel" 2841 else 2842 gcrypt="no" 2843 fi 2844 fi 2845fi 2846 2847 2848if test "$nettle" != "no"; then 2849 if $pkg_config --exists "nettle"; then 2850 nettle_cflags=$($pkg_config --cflags nettle) 2851 nettle_libs=$($pkg_config --libs nettle) 2852 nettle_version=$($pkg_config --modversion nettle) 2853 libs_softmmu="$nettle_libs $libs_softmmu" 2854 libs_tools="$nettle_libs $libs_tools" 2855 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags" 2856 nettle="yes" 2857 2858 cat > $TMPC << EOF 2859#include <stddef.h> 2860#include <nettle/pbkdf2.h> 2861int main(void) { 2862 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL); 2863 return 0; 2864} 2865EOF 2866 if compile_prog "$nettle_cflags" "$nettle_libs" ; then 2867 nettle_kdf=yes 2868 fi 2869 else 2870 if test "$nettle" = "yes"; then 2871 feature_not_found "nettle" "Install nettle devel" 2872 else 2873 nettle="no" 2874 fi 2875 fi 2876fi 2877 2878if test "$gcrypt" = "yes" && test "$nettle" = "yes" 2879then 2880 error_exit "Only one of gcrypt & nettle can be enabled" 2881fi 2882 2883########################################## 2884# libtasn1 - only for the TLS creds/session test suite 2885 2886tasn1=yes 2887tasn1_cflags="" 2888tasn1_libs="" 2889if $pkg_config --exists "libtasn1"; then 2890 tasn1_cflags=$($pkg_config --cflags libtasn1) 2891 tasn1_libs=$($pkg_config --libs libtasn1) 2892else 2893 tasn1=no 2894fi 2895 2896 2897########################################## 2898# getifaddrs (for tests/test-io-channel-socket ) 2899 2900have_ifaddrs_h=yes 2901if ! check_include "ifaddrs.h" ; then 2902 have_ifaddrs_h=no 2903fi 2904 2905########################################## 2906# VTE probe 2907 2908if test "$vte" != "no"; then 2909 if test "$gtkabi" = "3.0"; then 2910 vteminversion="0.32.0" 2911 if $pkg_config --exists "vte-2.91"; then 2912 vtepackage="vte-2.91" 2913 else 2914 vtepackage="vte-2.90" 2915 fi 2916 else 2917 vtepackage="vte" 2918 vteminversion="0.24.0" 2919 fi 2920 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 2921 vte_cflags=$($pkg_config --cflags $vtepackage) 2922 vte_libs=$($pkg_config --libs $vtepackage) 2923 vteversion=$($pkg_config --modversion $vtepackage) 2924 vte="yes" 2925 elif test "$vte" = "yes"; then 2926 if test "$gtkabi" = "3.0"; then 2927 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 2928 else 2929 feature_not_found "vte" "Install libvte devel" 2930 fi 2931 else 2932 vte="no" 2933 fi 2934fi 2935 2936########################################## 2937# SDL probe 2938 2939# Look for sdl configuration program (pkg-config or sdl-config). Try 2940# sdl-config even without cross prefix, and favour pkg-config over sdl-config. 2941 2942sdl_probe () 2943{ 2944 sdl_too_old=no 2945 if test "$sdlabi" = ""; then 2946 if $pkg_config --exists "sdl2"; then 2947 sdlabi=2.0 2948 elif $pkg_config --exists "sdl"; then 2949 sdlabi=1.2 2950 else 2951 sdlabi=2.0 2952 fi 2953 fi 2954 2955 if test $sdlabi = "2.0"; then 2956 sdl_config=$sdl2_config 2957 sdlname=sdl2 2958 sdlconfigname=sdl2_config 2959 elif test $sdlabi = "1.2"; then 2960 sdlname=sdl 2961 sdlconfigname=sdl_config 2962 else 2963 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0" 2964 fi 2965 2966 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then 2967 sdl_config=$sdlconfigname 2968 fi 2969 2970 if $pkg_config $sdlname --exists; then 2971 sdlconfig="$pkg_config $sdlname" 2972 sdlversion=$($sdlconfig --modversion 2>/dev/null) 2973 elif has ${sdl_config}; then 2974 sdlconfig="$sdl_config" 2975 sdlversion=$($sdlconfig --version) 2976 else 2977 if test "$sdl" = "yes" ; then 2978 feature_not_found "sdl" "Install SDL2-devel" 2979 fi 2980 sdl=no 2981 # no need to do the rest 2982 return 2983 fi 2984 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then 2985 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2 2986 fi 2987 2988 cat > $TMPC << EOF 2989#include <SDL.h> 2990#undef main /* We don't want SDL to override our main() */ 2991int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 2992EOF 2993 sdl_cflags=$($sdlconfig --cflags 2>/dev/null) 2994 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug 2995 if test "$static" = "yes" ; then 2996 if $pkg_config $sdlname --exists; then 2997 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null) 2998 else 2999 sdl_libs=$($sdlconfig --static-libs 2>/dev/null) 3000 fi 3001 else 3002 sdl_libs=$($sdlconfig --libs 2>/dev/null) 3003 fi 3004 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 3005 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then 3006 sdl_too_old=yes 3007 else 3008 sdl=yes 3009 fi 3010 3011 # static link with sdl ? (note: sdl.pc's --static --libs is broken) 3012 if test "$sdl" = "yes" -a "$static" = "yes" ; then 3013 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then 3014 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)" 3015 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)" 3016 fi 3017 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 3018 : 3019 else 3020 sdl=no 3021 fi 3022 fi # static link 3023 else # sdl not found 3024 if test "$sdl" = "yes" ; then 3025 feature_not_found "sdl" "Install SDL devel" 3026 fi 3027 sdl=no 3028 fi # sdl compile test 3029} 3030 3031if test "$sdl" != "no" ; then 3032 sdl_probe 3033fi 3034 3035if test "$sdl" = "yes" ; then 3036 cat > $TMPC <<EOF 3037#include <SDL.h> 3038#if defined(SDL_VIDEO_DRIVER_X11) 3039#include <X11/XKBlib.h> 3040#else 3041#error No x11 support 3042#endif 3043int main(void) { return 0; } 3044EOF 3045 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then 3046 need_x11=yes 3047 sdl_cflags="$sdl_cflags $x11_cflags" 3048 sdl_libs="$sdl_libs $x11_libs" 3049 fi 3050fi 3051 3052########################################## 3053# RDMA needs OpenFabrics libraries 3054if test "$rdma" != "no" ; then 3055 cat > $TMPC <<EOF 3056#include <rdma/rdma_cma.h> 3057int main(void) { return 0; } 3058EOF 3059 rdma_libs="-lrdmacm -libverbs -libumad" 3060 if compile_prog "" "$rdma_libs" ; then 3061 rdma="yes" 3062 libs_softmmu="$libs_softmmu $rdma_libs" 3063 else 3064 if test "$rdma" = "yes" ; then 3065 error_exit \ 3066 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 3067 " Your options:" \ 3068 " (1) Fast: Install infiniband packages (devel) from your distro." \ 3069 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 3070 " (3) Also: Install softiwarp if you don't have RDMA hardware" 3071 fi 3072 rdma="no" 3073 fi 3074fi 3075 3076########################################## 3077# PVRDMA detection 3078 3079cat > $TMPC <<EOF && 3080#include <sys/mman.h> 3081 3082int 3083main(void) 3084{ 3085 char buf = 0; 3086 void *addr = &buf; 3087 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 3088 3089 return 0; 3090} 3091EOF 3092 3093if test "$rdma" = "yes" ; then 3094 case "$pvrdma" in 3095 "") 3096 if compile_prog "" ""; then 3097 pvrdma="yes" 3098 else 3099 pvrdma="no" 3100 fi 3101 ;; 3102 "yes") 3103 if ! compile_prog "" ""; then 3104 error_exit "PVRDMA is not supported since mremap is not implemented" 3105 fi 3106 pvrdma="yes" 3107 ;; 3108 "no") 3109 pvrdma="no" 3110 ;; 3111 esac 3112else 3113 if test "$pvrdma" = "yes" ; then 3114 error_exit "PVRDMA requires rdma suppport" 3115 fi 3116 pvrdma="no" 3117fi 3118 3119########################################## 3120# VNC SASL detection 3121if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then 3122 cat > $TMPC <<EOF 3123#include <sasl/sasl.h> 3124#include <stdio.h> 3125int main(void) { sasl_server_init(NULL, "qemu"); return 0; } 3126EOF 3127 # Assuming Cyrus-SASL installed in /usr prefix 3128 vnc_sasl_cflags="" 3129 vnc_sasl_libs="-lsasl2" 3130 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then 3131 vnc_sasl=yes 3132 libs_softmmu="$vnc_sasl_libs $libs_softmmu" 3133 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags" 3134 else 3135 if test "$vnc_sasl" = "yes" ; then 3136 feature_not_found "vnc-sasl" "Install Cyrus SASL devel" 3137 fi 3138 vnc_sasl=no 3139 fi 3140fi 3141 3142########################################## 3143# VNC JPEG detection 3144if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then 3145cat > $TMPC <<EOF 3146#include <stdio.h> 3147#include <jpeglib.h> 3148int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; } 3149EOF 3150 vnc_jpeg_cflags="" 3151 vnc_jpeg_libs="-ljpeg" 3152 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then 3153 vnc_jpeg=yes 3154 libs_softmmu="$vnc_jpeg_libs $libs_softmmu" 3155 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags" 3156 else 3157 if test "$vnc_jpeg" = "yes" ; then 3158 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel" 3159 fi 3160 vnc_jpeg=no 3161 fi 3162fi 3163 3164########################################## 3165# VNC PNG detection 3166if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then 3167cat > $TMPC <<EOF 3168//#include <stdio.h> 3169#include <png.h> 3170#include <stddef.h> 3171int main(void) { 3172 png_structp png_ptr; 3173 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 3174 return png_ptr != 0; 3175} 3176EOF 3177 if $pkg_config libpng --exists; then 3178 vnc_png_cflags=$($pkg_config libpng --cflags) 3179 vnc_png_libs=$($pkg_config libpng --libs) 3180 else 3181 vnc_png_cflags="" 3182 vnc_png_libs="-lpng" 3183 fi 3184 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then 3185 vnc_png=yes 3186 libs_softmmu="$vnc_png_libs $libs_softmmu" 3187 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags" 3188 else 3189 if test "$vnc_png" = "yes" ; then 3190 feature_not_found "vnc-png" "Install libpng devel" 3191 fi 3192 vnc_png=no 3193 fi 3194fi 3195 3196########################################## 3197# xkbcommon probe 3198if test "$xkbcommon" != "no" ; then 3199 if $pkg_config xkbcommon --exists; then 3200 xkbcommon_cflags=$($pkg_config xkbcommon --cflags) 3201 xkbcommon_libs=$($pkg_config xkbcommon --libs) 3202 xkbcommon=yes 3203 else 3204 if test "$xkbcommon" = "yes" ; then 3205 feature_not_found "xkbcommon" "Install libxkbcommon-devel" 3206 fi 3207 xkbcommon=no 3208 fi 3209fi 3210 3211########################################## 3212# fnmatch() probe, used for ACL routines 3213fnmatch="no" 3214cat > $TMPC << EOF 3215#include <fnmatch.h> 3216int main(void) 3217{ 3218 fnmatch("foo", "foo", 0); 3219 return 0; 3220} 3221EOF 3222if compile_prog "" "" ; then 3223 fnmatch="yes" 3224fi 3225 3226########################################## 3227# xfsctl() probe, used for file-posix.c 3228if test "$xfs" != "no" ; then 3229 cat > $TMPC << EOF 3230#include <stddef.h> /* NULL */ 3231#include <xfs/xfs.h> 3232int main(void) 3233{ 3234 xfsctl(NULL, 0, 0, NULL); 3235 return 0; 3236} 3237EOF 3238 if compile_prog "" "" ; then 3239 xfs="yes" 3240 else 3241 if test "$xfs" = "yes" ; then 3242 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel" 3243 fi 3244 xfs=no 3245 fi 3246fi 3247 3248########################################## 3249# vde libraries probe 3250if test "$vde" != "no" ; then 3251 vde_libs="-lvdeplug" 3252 cat > $TMPC << EOF 3253#include <libvdeplug.h> 3254int main(void) 3255{ 3256 struct vde_open_args a = {0, 0, 0}; 3257 char s[] = ""; 3258 vde_open(s, s, &a); 3259 return 0; 3260} 3261EOF 3262 if compile_prog "" "$vde_libs" ; then 3263 vde=yes 3264 else 3265 if test "$vde" = "yes" ; then 3266 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3267 fi 3268 vde=no 3269 fi 3270fi 3271 3272########################################## 3273# netmap support probe 3274# Apart from looking for netmap headers, we make sure that the host API version 3275# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 3276# a minor/major version number. Minor new features will be marked with values up 3277# to 15, and if something happens that requires a change to the backend we will 3278# move above 15, submit the backend fixes and modify this two bounds. 3279if test "$netmap" != "no" ; then 3280 cat > $TMPC << EOF 3281#include <inttypes.h> 3282#include <net/if.h> 3283#include <net/netmap.h> 3284#include <net/netmap_user.h> 3285#if (NETMAP_API < 11) || (NETMAP_API > 15) 3286#error 3287#endif 3288int main(void) { return 0; } 3289EOF 3290 if compile_prog "" "" ; then 3291 netmap=yes 3292 else 3293 if test "$netmap" = "yes" ; then 3294 feature_not_found "netmap" 3295 fi 3296 netmap=no 3297 fi 3298fi 3299 3300########################################## 3301# libcap-ng library probe 3302if test "$cap_ng" != "no" ; then 3303 cap_libs="-lcap-ng" 3304 cat > $TMPC << EOF 3305#include <cap-ng.h> 3306int main(void) 3307{ 3308 capng_capability_to_name(CAPNG_EFFECTIVE); 3309 return 0; 3310} 3311EOF 3312 if compile_prog "" "$cap_libs" ; then 3313 cap_ng=yes 3314 libs_tools="$cap_libs $libs_tools" 3315 else 3316 if test "$cap_ng" = "yes" ; then 3317 feature_not_found "cap_ng" "Install libcap-ng devel" 3318 fi 3319 cap_ng=no 3320 fi 3321fi 3322 3323########################################## 3324# Sound support libraries probe 3325 3326audio_drv_probe() 3327{ 3328 drv=$1 3329 hdr=$2 3330 lib=$3 3331 exp=$4 3332 cfl=$5 3333 cat > $TMPC << EOF 3334#include <$hdr> 3335int main(void) { $exp } 3336EOF 3337 if compile_prog "$cfl" "$lib" ; then 3338 : 3339 else 3340 error_exit "$drv check failed" \ 3341 "Make sure to have the $drv libs and headers installed." 3342 fi 3343} 3344 3345audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3346for drv in $audio_drv_list; do 3347 case $drv in 3348 alsa) 3349 audio_drv_probe $drv alsa/asoundlib.h -lasound \ 3350 "return snd_pcm_close((snd_pcm_t *)0);" 3351 alsa_libs="-lasound" 3352 ;; 3353 3354 pa) 3355 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \ 3356 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;" 3357 pulse_libs="-lpulse" 3358 audio_pt_int="yes" 3359 ;; 3360 3361 sdl) 3362 if test "$sdl" = "no"; then 3363 error_exit "sdl not found or disabled, can not use sdl audio driver" 3364 fi 3365 ;; 3366 3367 coreaudio) 3368 coreaudio_libs="-framework CoreAudio" 3369 ;; 3370 3371 dsound) 3372 dsound_libs="-lole32 -ldxguid" 3373 audio_win_int="yes" 3374 ;; 3375 3376 oss) 3377 oss_libs="$oss_lib" 3378 ;; 3379 3380 wav) 3381 # XXX: Probes for CoreAudio, DirectSound 3382 ;; 3383 3384 *) 3385 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 3386 error_exit "Unknown driver '$drv' selected" \ 3387 "Possible drivers are: $audio_possible_drivers" 3388 } 3389 ;; 3390 esac 3391done 3392 3393########################################## 3394# BrlAPI probe 3395 3396if test "$brlapi" != "no" ; then 3397 brlapi_libs="-lbrlapi" 3398 cat > $TMPC << EOF 3399#include <brlapi.h> 3400#include <stddef.h> 3401int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } 3402EOF 3403 if compile_prog "" "$brlapi_libs" ; then 3404 brlapi=yes 3405 else 3406 if test "$brlapi" = "yes" ; then 3407 feature_not_found "brlapi" "Install brlapi devel" 3408 fi 3409 brlapi=no 3410 fi 3411fi 3412 3413########################################## 3414# curses probe 3415if test "$curses" != "no" ; then 3416 if test "$mingw32" = "yes" ; then 3417 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):" 3418 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses" 3419 else 3420 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:" 3421 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw" 3422 fi 3423 curses_found=no 3424 cat > $TMPC << EOF 3425#include <locale.h> 3426#include <curses.h> 3427#include <wchar.h> 3428int main(void) { 3429 wchar_t wch = L'w'; 3430 setlocale(LC_ALL, ""); 3431 resize_term(0, 0); 3432 addwstr(L"wide chars\n"); 3433 addnwstr(&wch, 1); 3434 add_wch(WACS_DEGREE); 3435 return 0; 3436} 3437EOF 3438 IFS=: 3439 for curses_inc in $curses_inc_list; do 3440 # Make sure we get the wide character prototypes 3441 curses_inc="-DNCURSES_WIDECHAR $curses_inc" 3442 IFS=: 3443 for curses_lib in $curses_lib_list; do 3444 unset IFS 3445 if compile_prog "$curses_inc" "$curses_lib" ; then 3446 curses_found=yes 3447 break 3448 fi 3449 done 3450 if test "$curses_found" = yes ; then 3451 break 3452 fi 3453 done 3454 unset IFS 3455 if test "$curses_found" = "yes" ; then 3456 curses=yes 3457 else 3458 if test "$curses" = "yes" ; then 3459 feature_not_found "curses" "Install ncurses devel" 3460 fi 3461 curses=no 3462 fi 3463fi 3464 3465########################################## 3466# curl probe 3467if test "$curl" != "no" ; then 3468 if $pkg_config libcurl --exists; then 3469 curlconfig="$pkg_config libcurl" 3470 else 3471 curlconfig=curl-config 3472 fi 3473 cat > $TMPC << EOF 3474#include <curl/curl.h> 3475int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3476EOF 3477 curl_cflags=$($curlconfig --cflags 2>/dev/null) 3478 curl_libs=$($curlconfig --libs 2>/dev/null) 3479 if compile_prog "$curl_cflags" "$curl_libs" ; then 3480 curl=yes 3481 else 3482 if test "$curl" = "yes" ; then 3483 feature_not_found "curl" "Install libcurl devel" 3484 fi 3485 curl=no 3486 fi 3487fi # test "$curl" 3488 3489########################################## 3490# bluez support probe 3491if test "$bluez" != "no" ; then 3492 cat > $TMPC << EOF 3493#include <bluetooth/bluetooth.h> 3494int main(void) { return bt_error(0); } 3495EOF 3496 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null) 3497 bluez_libs=$($pkg_config --libs bluez 2>/dev/null) 3498 if compile_prog "$bluez_cflags" "$bluez_libs" ; then 3499 bluez=yes 3500 libs_softmmu="$bluez_libs $libs_softmmu" 3501 else 3502 if test "$bluez" = "yes" ; then 3503 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel" 3504 fi 3505 bluez="no" 3506 fi 3507fi 3508 3509########################################## 3510# glib support probe 3511 3512glib_req_ver=2.40 3513glib_modules=gthread-2.0 3514if test "$modules" = yes; then 3515 glib_modules="$glib_modules gmodule-export-2.0" 3516fi 3517 3518# This workaround is required due to a bug in pkg-config file for glib as it 3519# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3520 3521if test "$static" = yes -a "$mingw32" = yes; then 3522 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" 3523fi 3524 3525for i in $glib_modules; do 3526 if $pkg_config --atleast-version=$glib_req_ver $i; then 3527 glib_cflags=$($pkg_config --cflags $i) 3528 glib_libs=$($pkg_config --libs $i) 3529 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" 3530 LIBS="$glib_libs $LIBS" 3531 libs_qga="$glib_libs $libs_qga" 3532 else 3533 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3534 fi 3535done 3536 3537# Sanity check that the current size_t matches the 3538# size that glib thinks it should be. This catches 3539# problems on multi-arch where people try to build 3540# 32-bit QEMU while pointing at 64-bit glib headers 3541cat > $TMPC <<EOF 3542#include <glib.h> 3543#include <unistd.h> 3544 3545#define QEMU_BUILD_BUG_ON(x) \ 3546 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3547 3548int main(void) { 3549 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3550 return 0; 3551} 3552EOF 3553 3554if ! compile_prog "$CFLAGS" "$LIBS" ; then 3555 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3556 "You probably need to set PKG_CONFIG_LIBDIR"\ 3557 "to point to the right pkg-config files for your"\ 3558 "build target" 3559fi 3560 3561# g_test_trap_subprocess added in 2.38. Used by some tests. 3562glib_subprocess=yes 3563if ! $pkg_config --atleast-version=2.38 glib-2.0; then 3564 glib_subprocess=no 3565fi 3566 3567# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3568cat > $TMPC << EOF 3569#include <glib.h> 3570int main(void) { return 0; } 3571EOF 3572if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3573 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3574 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3575 CFLAGS="-Wno-unknown-attributes $CFLAGS" 3576 fi 3577fi 3578 3579########################################## 3580# SHA command probe for modules 3581if test "$modules" = yes; then 3582 shacmd_probe="sha1sum sha1 shasum" 3583 for c in $shacmd_probe; do 3584 if has $c; then 3585 shacmd="$c" 3586 break 3587 fi 3588 done 3589 if test "$shacmd" = ""; then 3590 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3591 fi 3592fi 3593 3594########################################## 3595# pixman support probe 3596 3597if test "$want_tools" = "no" -a "$softmmu" = "no"; then 3598 pixman_cflags= 3599 pixman_libs= 3600elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 3601 pixman_cflags=$($pkg_config --cflags pixman-1) 3602 pixman_libs=$($pkg_config --libs pixman-1) 3603else 3604 error_exit "pixman >= 0.21.8 not present." \ 3605 "Please install the pixman devel package." 3606fi 3607 3608########################################## 3609# libmpathpersist probe 3610 3611if test "$mpath" != "no" ; then 3612 # probe for the new API 3613 cat > $TMPC <<EOF 3614#include <libudev.h> 3615#include <mpath_persist.h> 3616unsigned mpath_mx_alloc_len = 1024; 3617int logsink; 3618static struct config *multipath_conf; 3619extern struct udev *udev; 3620extern struct config *get_multipath_config(void); 3621extern void put_multipath_config(struct config *conf); 3622struct udev *udev; 3623struct config *get_multipath_config(void) { return multipath_conf; } 3624void put_multipath_config(struct config *conf) { } 3625 3626int main(void) { 3627 udev = udev_new(); 3628 multipath_conf = mpath_lib_init(); 3629 return 0; 3630} 3631EOF 3632 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3633 mpathpersist=yes 3634 mpathpersist_new_api=yes 3635 else 3636 # probe for the old API 3637 cat > $TMPC <<EOF 3638#include <libudev.h> 3639#include <mpath_persist.h> 3640unsigned mpath_mx_alloc_len = 1024; 3641int logsink; 3642int main(void) { 3643 struct udev *udev = udev_new(); 3644 mpath_lib_init(udev); 3645 return 0; 3646} 3647EOF 3648 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3649 mpathpersist=yes 3650 mpathpersist_new_api=no 3651 else 3652 mpathpersist=no 3653 fi 3654 fi 3655else 3656 mpathpersist=no 3657fi 3658 3659########################################## 3660# libcap probe 3661 3662if test "$cap" != "no" ; then 3663 cat > $TMPC <<EOF 3664#include <stdio.h> 3665#include <sys/capability.h> 3666int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; } 3667EOF 3668 if compile_prog "" "-lcap" ; then 3669 cap=yes 3670 else 3671 cap=no 3672 fi 3673fi 3674 3675########################################## 3676# pthread probe 3677PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3678 3679pthread=no 3680cat > $TMPC << EOF 3681#include <pthread.h> 3682static void *f(void *p) { return NULL; } 3683int main(void) { 3684 pthread_t thread; 3685 pthread_create(&thread, 0, f, 0); 3686 return 0; 3687} 3688EOF 3689if compile_prog "" "" ; then 3690 pthread=yes 3691else 3692 for pthread_lib in $PTHREADLIBS_LIST; do 3693 if compile_prog "" "$pthread_lib" ; then 3694 pthread=yes 3695 found=no 3696 for lib_entry in $LIBS; do 3697 if test "$lib_entry" = "$pthread_lib"; then 3698 found=yes 3699 break 3700 fi 3701 done 3702 if test "$found" = "no"; then 3703 LIBS="$pthread_lib $LIBS" 3704 libs_qga="$pthread_lib $libs_qga" 3705 fi 3706 PTHREAD_LIB="$pthread_lib" 3707 break 3708 fi 3709 done 3710fi 3711 3712if test "$mingw32" != yes -a "$pthread" = no; then 3713 error_exit "pthread check failed" \ 3714 "Make sure to have the pthread libs and headers installed." 3715fi 3716 3717# check for pthread_setname_np 3718pthread_setname_np=no 3719cat > $TMPC << EOF 3720#include <pthread.h> 3721 3722static void *f(void *p) { return NULL; } 3723int main(void) 3724{ 3725 pthread_t thread; 3726 pthread_create(&thread, 0, f, 0); 3727 pthread_setname_np(thread, "QEMU"); 3728 return 0; 3729} 3730EOF 3731if compile_prog "" "$pthread_lib" ; then 3732 pthread_setname_np=yes 3733fi 3734 3735########################################## 3736# rbd probe 3737if test "$rbd" != "no" ; then 3738 cat > $TMPC <<EOF 3739#include <stdio.h> 3740#include <rbd/librbd.h> 3741int main(void) { 3742 rados_t cluster; 3743 rados_create(&cluster, NULL); 3744 return 0; 3745} 3746EOF 3747 rbd_libs="-lrbd -lrados" 3748 if compile_prog "" "$rbd_libs" ; then 3749 rbd=yes 3750 else 3751 if test "$rbd" = "yes" ; then 3752 feature_not_found "rados block device" "Install librbd/ceph devel" 3753 fi 3754 rbd=no 3755 fi 3756fi 3757 3758########################################## 3759# libssh2 probe 3760min_libssh2_version=1.2.8 3761if test "$libssh2" != "no" ; then 3762 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then 3763 libssh2_cflags=$($pkg_config libssh2 --cflags) 3764 libssh2_libs=$($pkg_config libssh2 --libs) 3765 libssh2=yes 3766 else 3767 if test "$libssh2" = "yes" ; then 3768 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2" 3769 fi 3770 libssh2=no 3771 fi 3772fi 3773 3774########################################## 3775# libssh2_sftp_fsync probe 3776 3777if test "$libssh2" = "yes"; then 3778 cat > $TMPC <<EOF 3779#include <stdio.h> 3780#include <libssh2.h> 3781#include <libssh2_sftp.h> 3782int main(void) { 3783 LIBSSH2_SESSION *session; 3784 LIBSSH2_SFTP *sftp; 3785 LIBSSH2_SFTP_HANDLE *sftp_handle; 3786 session = libssh2_session_init (); 3787 sftp = libssh2_sftp_init (session); 3788 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0); 3789 libssh2_sftp_fsync (sftp_handle); 3790 return 0; 3791} 3792EOF 3793 # libssh2_cflags/libssh2_libs defined in previous test. 3794 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then 3795 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS" 3796 fi 3797fi 3798 3799########################################## 3800# linux-aio probe 3801 3802if test "$linux_aio" != "no" ; then 3803 cat > $TMPC <<EOF 3804#include <libaio.h> 3805#include <sys/eventfd.h> 3806#include <stddef.h> 3807int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 3808EOF 3809 if compile_prog "" "-laio" ; then 3810 linux_aio=yes 3811 else 3812 if test "$linux_aio" = "yes" ; then 3813 feature_not_found "linux AIO" "Install libaio devel" 3814 fi 3815 linux_aio=no 3816 fi 3817fi 3818 3819########################################## 3820# TPM passthrough is only on x86 Linux 3821 3822if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then 3823 tpm_passthrough=$tpm 3824else 3825 tpm_passthrough=no 3826fi 3827 3828# TPM emulator is for all posix systems 3829if test "$mingw32" != "yes"; then 3830 tpm_emulator=$tpm 3831else 3832 tpm_emulator=no 3833fi 3834########################################## 3835# attr probe 3836 3837if test "$attr" != "no" ; then 3838 cat > $TMPC <<EOF 3839#include <stdio.h> 3840#include <sys/types.h> 3841#ifdef CONFIG_LIBATTR 3842#include <attr/xattr.h> 3843#else 3844#include <sys/xattr.h> 3845#endif 3846int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 3847EOF 3848 if compile_prog "" "" ; then 3849 attr=yes 3850 # Older distros have <attr/xattr.h>, and need -lattr: 3851 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 3852 attr=yes 3853 LIBS="-lattr $LIBS" 3854 libattr=yes 3855 else 3856 if test "$attr" = "yes" ; then 3857 feature_not_found "ATTR" "Install libc6 or libattr devel" 3858 fi 3859 attr=no 3860 fi 3861fi 3862 3863########################################## 3864# iovec probe 3865cat > $TMPC <<EOF 3866#include <sys/types.h> 3867#include <sys/uio.h> 3868#include <unistd.h> 3869int main(void) { return sizeof(struct iovec); } 3870EOF 3871iovec=no 3872if compile_prog "" "" ; then 3873 iovec=yes 3874fi 3875 3876########################################## 3877# preadv probe 3878cat > $TMPC <<EOF 3879#include <sys/types.h> 3880#include <sys/uio.h> 3881#include <unistd.h> 3882int main(void) { return preadv(0, 0, 0, 0); } 3883EOF 3884preadv=no 3885if compile_prog "" "" ; then 3886 preadv=yes 3887fi 3888 3889########################################## 3890# fdt probe 3891# fdt support is mandatory for at least some target architectures, 3892# so insist on it if we're building those system emulators. 3893fdt_required=no 3894for target in $target_list; do 3895 case $target in 3896 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu) 3897 fdt_required=yes 3898 ;; 3899 esac 3900done 3901 3902if test "$fdt_required" = "yes"; then 3903 if test "$fdt" = "no"; then 3904 error_exit "fdt disabled but some requested targets require it." \ 3905 "You can turn off fdt only if you also disable all the system emulation" \ 3906 "targets which need it (by specifying a cut down --target-list)." 3907 fi 3908 fdt=yes 3909fi 3910 3911if test "$fdt" != "no" ; then 3912 fdt_libs="-lfdt" 3913 # explicitly check for libfdt_env.h as it is missing in some stable installs 3914 # and test for required functions to make sure we are on a version >= 1.4.2 3915 cat > $TMPC << EOF 3916#include <libfdt.h> 3917#include <libfdt_env.h> 3918int main(void) { fdt_first_subnode(0, 0); return 0; } 3919EOF 3920 if compile_prog "" "$fdt_libs" ; then 3921 # system DTC is good - use it 3922 fdt=system 3923 else 3924 # have GIT checkout, so activate dtc submodule 3925 if test -e "${source_path}/.git" ; then 3926 git_submodules="${git_submodules} dtc" 3927 fi 3928 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 3929 fdt=git 3930 mkdir -p dtc 3931 if [ "$pwd_is_source_path" != "y" ] ; then 3932 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 3933 symlink "$source_path/dtc/scripts" "dtc/scripts" 3934 fi 3935 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 3936 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt" 3937 fdt_libs="$fdt_libs" 3938 elif test "$fdt" = "yes" ; then 3939 # Not a git build & no libfdt found, prompt for system install 3940 error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 3941 "Please install the DTC (libfdt) devel package" 3942 else 3943 # don't have and don't want 3944 fdt_libs= 3945 fdt=no 3946 fi 3947 fi 3948fi 3949 3950libs_softmmu="$libs_softmmu $fdt_libs" 3951 3952########################################## 3953# opengl probe (for sdl2, gtk, milkymist-tmu2) 3954 3955if test "$opengl" != "no" ; then 3956 opengl_pkgs="epoxy gbm" 3957 if $pkg_config $opengl_pkgs; then 3958 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 3959 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 3960 opengl=yes 3961 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 3962 gtk_gl="yes" 3963 fi 3964 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 3965 else 3966 if test "$opengl" = "yes" ; then 3967 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 3968 fi 3969 opengl_cflags="" 3970 opengl_libs="" 3971 opengl=no 3972 fi 3973fi 3974 3975if test "$opengl" = "yes"; then 3976 cat > $TMPC << EOF 3977#include <epoxy/egl.h> 3978#ifndef EGL_MESA_image_dma_buf_export 3979# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 3980#endif 3981int main(void) { return 0; } 3982EOF 3983 if compile_prog "" "" ; then 3984 opengl_dmabuf=yes 3985 fi 3986fi 3987 3988########################################## 3989# libxml2 probe 3990if test "$libxml2" != "no" ; then 3991 if $pkg_config --exists libxml-2.0; then 3992 libxml2="yes" 3993 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 3994 libxml2_libs=$($pkg_config --libs libxml-2.0) 3995 else 3996 if test "$libxml2" = "yes"; then 3997 feature_not_found "libxml2" "Install libxml2 devel" 3998 fi 3999 libxml2="no" 4000 fi 4001fi 4002 4003########################################## 4004# glusterfs probe 4005if test "$glusterfs" != "no" ; then 4006 if $pkg_config --atleast-version=3 glusterfs-api; then 4007 glusterfs="yes" 4008 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 4009 glusterfs_libs=$($pkg_config --libs glusterfs-api) 4010 if $pkg_config --atleast-version=4 glusterfs-api; then 4011 glusterfs_xlator_opt="yes" 4012 fi 4013 if $pkg_config --atleast-version=5 glusterfs-api; then 4014 glusterfs_discard="yes" 4015 fi 4016 if $pkg_config --atleast-version=6 glusterfs-api; then 4017 glusterfs_fallocate="yes" 4018 glusterfs_zerofill="yes" 4019 fi 4020 else 4021 if test "$glusterfs" = "yes" ; then 4022 feature_not_found "GlusterFS backend support" \ 4023 "Install glusterfs-api devel >= 3" 4024 fi 4025 glusterfs="no" 4026 fi 4027fi 4028 4029# Check for inotify functions when we are building linux-user 4030# emulator. This is done because older glibc versions don't 4031# have syscall stubs for these implemented. In that case we 4032# don't provide them even if kernel supports them. 4033# 4034inotify=no 4035cat > $TMPC << EOF 4036#include <sys/inotify.h> 4037 4038int 4039main(void) 4040{ 4041 /* try to start inotify */ 4042 return inotify_init(); 4043} 4044EOF 4045if compile_prog "" "" ; then 4046 inotify=yes 4047fi 4048 4049inotify1=no 4050cat > $TMPC << EOF 4051#include <sys/inotify.h> 4052 4053int 4054main(void) 4055{ 4056 /* try to start inotify */ 4057 return inotify_init1(0); 4058} 4059EOF 4060if compile_prog "" "" ; then 4061 inotify1=yes 4062fi 4063 4064# check if pipe2 is there 4065pipe2=no 4066cat > $TMPC << EOF 4067#include <unistd.h> 4068#include <fcntl.h> 4069 4070int main(void) 4071{ 4072 int pipefd[2]; 4073 return pipe2(pipefd, O_CLOEXEC); 4074} 4075EOF 4076if compile_prog "" "" ; then 4077 pipe2=yes 4078fi 4079 4080# check if accept4 is there 4081accept4=no 4082cat > $TMPC << EOF 4083#include <sys/socket.h> 4084#include <stddef.h> 4085 4086int main(void) 4087{ 4088 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4089 return 0; 4090} 4091EOF 4092if compile_prog "" "" ; then 4093 accept4=yes 4094fi 4095 4096# check if tee/splice is there. vmsplice was added same time. 4097splice=no 4098cat > $TMPC << EOF 4099#include <unistd.h> 4100#include <fcntl.h> 4101#include <limits.h> 4102 4103int main(void) 4104{ 4105 int len, fd = 0; 4106 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4107 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4108 return 0; 4109} 4110EOF 4111if compile_prog "" "" ; then 4112 splice=yes 4113fi 4114 4115########################################## 4116# libnuma probe 4117 4118if test "$numa" != "no" ; then 4119 cat > $TMPC << EOF 4120#include <numa.h> 4121int main(void) { return numa_available(); } 4122EOF 4123 4124 if compile_prog "" "-lnuma" ; then 4125 numa=yes 4126 libs_softmmu="-lnuma $libs_softmmu" 4127 else 4128 if test "$numa" = "yes" ; then 4129 feature_not_found "numa" "install numactl devel" 4130 fi 4131 numa=no 4132 fi 4133fi 4134 4135if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4136 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4137 exit 1 4138fi 4139 4140# Even if malloc_trim() is available, these non-libc memory allocators 4141# do not support it. 4142if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4143 if test "$malloc_trim" = "yes" ; then 4144 echo "Disabling malloc_trim with non-libc memory allocator" 4145 fi 4146 malloc_trim="no" 4147fi 4148 4149####################################### 4150# malloc_trim 4151 4152if test "$malloc_trim" != "no" ; then 4153 cat > $TMPC << EOF 4154#include <malloc.h> 4155int main(void) { malloc_trim(0); return 0; } 4156EOF 4157 if compile_prog "" "" ; then 4158 malloc_trim="yes" 4159 else 4160 malloc_trim="no" 4161 fi 4162fi 4163 4164########################################## 4165# tcmalloc probe 4166 4167if test "$tcmalloc" = "yes" ; then 4168 cat > $TMPC << EOF 4169#include <stdlib.h> 4170int main(void) { malloc(1); return 0; } 4171EOF 4172 4173 if compile_prog "" "-ltcmalloc" ; then 4174 LIBS="-ltcmalloc $LIBS" 4175 else 4176 feature_not_found "tcmalloc" "install gperftools devel" 4177 fi 4178fi 4179 4180########################################## 4181# jemalloc probe 4182 4183if test "$jemalloc" = "yes" ; then 4184 cat > $TMPC << EOF 4185#include <stdlib.h> 4186int main(void) { malloc(1); return 0; } 4187EOF 4188 4189 if compile_prog "" "-ljemalloc" ; then 4190 LIBS="-ljemalloc $LIBS" 4191 else 4192 feature_not_found "jemalloc" "install jemalloc devel" 4193 fi 4194fi 4195 4196########################################## 4197# signalfd probe 4198signalfd="no" 4199cat > $TMPC << EOF 4200#include <unistd.h> 4201#include <sys/syscall.h> 4202#include <signal.h> 4203int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4204EOF 4205 4206if compile_prog "" "" ; then 4207 signalfd=yes 4208fi 4209 4210# check if eventfd is supported 4211eventfd=no 4212cat > $TMPC << EOF 4213#include <sys/eventfd.h> 4214 4215int main(void) 4216{ 4217 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4218} 4219EOF 4220if compile_prog "" "" ; then 4221 eventfd=yes 4222fi 4223 4224# check if memfd is supported 4225memfd=no 4226cat > $TMPC << EOF 4227#include <sys/mman.h> 4228 4229int main(void) 4230{ 4231 return memfd_create("foo", MFD_ALLOW_SEALING); 4232} 4233EOF 4234if compile_prog "" "" ; then 4235 memfd=yes 4236fi 4237 4238 4239 4240# check for fallocate 4241fallocate=no 4242cat > $TMPC << EOF 4243#include <fcntl.h> 4244 4245int main(void) 4246{ 4247 fallocate(0, 0, 0, 0); 4248 return 0; 4249} 4250EOF 4251if compile_prog "" "" ; then 4252 fallocate=yes 4253fi 4254 4255# check for fallocate hole punching 4256fallocate_punch_hole=no 4257cat > $TMPC << EOF 4258#include <fcntl.h> 4259#include <linux/falloc.h> 4260 4261int main(void) 4262{ 4263 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4264 return 0; 4265} 4266EOF 4267if compile_prog "" "" ; then 4268 fallocate_punch_hole=yes 4269fi 4270 4271# check that fallocate supports range zeroing inside the file 4272fallocate_zero_range=no 4273cat > $TMPC << EOF 4274#include <fcntl.h> 4275#include <linux/falloc.h> 4276 4277int main(void) 4278{ 4279 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4280 return 0; 4281} 4282EOF 4283if compile_prog "" "" ; then 4284 fallocate_zero_range=yes 4285fi 4286 4287# check for posix_fallocate 4288posix_fallocate=no 4289cat > $TMPC << EOF 4290#include <fcntl.h> 4291 4292int main(void) 4293{ 4294 posix_fallocate(0, 0, 0); 4295 return 0; 4296} 4297EOF 4298if compile_prog "" "" ; then 4299 posix_fallocate=yes 4300fi 4301 4302# check for sync_file_range 4303sync_file_range=no 4304cat > $TMPC << EOF 4305#include <fcntl.h> 4306 4307int main(void) 4308{ 4309 sync_file_range(0, 0, 0, 0); 4310 return 0; 4311} 4312EOF 4313if compile_prog "" "" ; then 4314 sync_file_range=yes 4315fi 4316 4317# check for linux/fiemap.h and FS_IOC_FIEMAP 4318fiemap=no 4319cat > $TMPC << EOF 4320#include <sys/ioctl.h> 4321#include <linux/fs.h> 4322#include <linux/fiemap.h> 4323 4324int main(void) 4325{ 4326 ioctl(0, FS_IOC_FIEMAP, 0); 4327 return 0; 4328} 4329EOF 4330if compile_prog "" "" ; then 4331 fiemap=yes 4332fi 4333 4334# check for dup3 4335dup3=no 4336cat > $TMPC << EOF 4337#include <unistd.h> 4338 4339int main(void) 4340{ 4341 dup3(0, 0, 0); 4342 return 0; 4343} 4344EOF 4345if compile_prog "" "" ; then 4346 dup3=yes 4347fi 4348 4349# check for ppoll support 4350ppoll=no 4351cat > $TMPC << EOF 4352#include <poll.h> 4353 4354int main(void) 4355{ 4356 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4357 ppoll(&pfd, 1, 0, 0); 4358 return 0; 4359} 4360EOF 4361if compile_prog "" "" ; then 4362 ppoll=yes 4363fi 4364 4365# check for prctl(PR_SET_TIMERSLACK , ... ) support 4366prctl_pr_set_timerslack=no 4367cat > $TMPC << EOF 4368#include <sys/prctl.h> 4369 4370int main(void) 4371{ 4372 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4373 return 0; 4374} 4375EOF 4376if compile_prog "" "" ; then 4377 prctl_pr_set_timerslack=yes 4378fi 4379 4380# check for epoll support 4381epoll=no 4382cat > $TMPC << EOF 4383#include <sys/epoll.h> 4384 4385int main(void) 4386{ 4387 epoll_create(0); 4388 return 0; 4389} 4390EOF 4391if compile_prog "" "" ; then 4392 epoll=yes 4393fi 4394 4395# epoll_create1 is a later addition 4396# so we must check separately for its presence 4397epoll_create1=no 4398cat > $TMPC << EOF 4399#include <sys/epoll.h> 4400 4401int main(void) 4402{ 4403 /* Note that we use epoll_create1 as a value, not as 4404 * a function being called. This is necessary so that on 4405 * old SPARC glibc versions where the function was present in 4406 * the library but not declared in the header file we will 4407 * fail the configure check. (Otherwise we will get a compiler 4408 * warning but not an error, and will proceed to fail the 4409 * qemu compile where we compile with -Werror.) 4410 */ 4411 return (int)(uintptr_t)&epoll_create1; 4412} 4413EOF 4414if compile_prog "" "" ; then 4415 epoll_create1=yes 4416fi 4417 4418# check for sendfile support 4419sendfile=no 4420cat > $TMPC << EOF 4421#include <sys/sendfile.h> 4422 4423int main(void) 4424{ 4425 return sendfile(0, 0, 0, 0); 4426} 4427EOF 4428if compile_prog "" "" ; then 4429 sendfile=yes 4430fi 4431 4432# check for timerfd support (glibc 2.8 and newer) 4433timerfd=no 4434cat > $TMPC << EOF 4435#include <sys/timerfd.h> 4436 4437int main(void) 4438{ 4439 return(timerfd_create(CLOCK_REALTIME, 0)); 4440} 4441EOF 4442if compile_prog "" "" ; then 4443 timerfd=yes 4444fi 4445 4446# check for setns and unshare support 4447setns=no 4448cat > $TMPC << EOF 4449#include <sched.h> 4450 4451int main(void) 4452{ 4453 int ret; 4454 ret = setns(0, 0); 4455 ret = unshare(0); 4456 return ret; 4457} 4458EOF 4459if compile_prog "" "" ; then 4460 setns=yes 4461fi 4462 4463# clock_adjtime probe 4464clock_adjtime=no 4465cat > $TMPC <<EOF 4466#include <time.h> 4467 4468int main(void) 4469{ 4470 return clock_adjtime(0, 0); 4471} 4472EOF 4473clock_adjtime=no 4474if compile_prog "" "" ; then 4475 clock_adjtime=yes 4476fi 4477 4478# syncfs probe 4479syncfs=no 4480cat > $TMPC <<EOF 4481#include <unistd.h> 4482 4483int main(void) 4484{ 4485 return syncfs(0); 4486} 4487EOF 4488syncfs=no 4489if compile_prog "" "" ; then 4490 syncfs=yes 4491fi 4492 4493# Check if tools are available to build documentation. 4494if test "$docs" != "no" ; then 4495 if has makeinfo && has pod2man; then 4496 docs=yes 4497 else 4498 if test "$docs" = "yes" ; then 4499 feature_not_found "docs" "Install texinfo and Perl/perl-podlators" 4500 fi 4501 docs=no 4502 fi 4503fi 4504 4505# Search for bswap_32 function 4506byteswap_h=no 4507cat > $TMPC << EOF 4508#include <byteswap.h> 4509int main(void) { return bswap_32(0); } 4510EOF 4511if compile_prog "" "" ; then 4512 byteswap_h=yes 4513fi 4514 4515# Search for bswap32 function 4516bswap_h=no 4517cat > $TMPC << EOF 4518#include <sys/endian.h> 4519#include <sys/types.h> 4520#include <machine/bswap.h> 4521int main(void) { return bswap32(0); } 4522EOF 4523if compile_prog "" "" ; then 4524 bswap_h=yes 4525fi 4526 4527########################################## 4528# Do we have libiscsi >= 1.9.0 4529if test "$libiscsi" != "no" ; then 4530 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4531 libiscsi="yes" 4532 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4533 libiscsi_libs=$($pkg_config --libs libiscsi) 4534 else 4535 if test "$libiscsi" = "yes" ; then 4536 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4537 fi 4538 libiscsi="no" 4539 fi 4540fi 4541 4542########################################## 4543# Do we need libm 4544cat > $TMPC << EOF 4545#include <math.h> 4546int main(int argc, char **argv) { return isnan(sin((double)argc)); } 4547EOF 4548if compile_prog "" "" ; then 4549 : 4550elif compile_prog "" "-lm" ; then 4551 LIBS="-lm $LIBS" 4552 libs_qga="-lm $libs_qga" 4553else 4554 error_exit "libm check failed" 4555fi 4556 4557########################################## 4558# Do we need librt 4559# uClibc provides 2 versions of clock_gettime(), one with realtime 4560# support and one without. This means that the clock_gettime() don't 4561# need -lrt. We still need it for timer_create() so we check for this 4562# function in addition. 4563cat > $TMPC <<EOF 4564#include <signal.h> 4565#include <time.h> 4566int main(void) { 4567 timer_create(CLOCK_REALTIME, NULL, NULL); 4568 return clock_gettime(CLOCK_REALTIME, NULL); 4569} 4570EOF 4571 4572if compile_prog "" "" ; then 4573 : 4574# we need pthread for static linking. use previous pthread test result 4575elif compile_prog "" "$pthread_lib -lrt" ; then 4576 LIBS="$LIBS -lrt" 4577 libs_qga="$libs_qga -lrt" 4578fi 4579 4580if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ 4581 "$haiku" != "yes" ; then 4582 libs_softmmu="-lutil $libs_softmmu" 4583fi 4584 4585########################################## 4586# spice probe 4587if test "$spice" != "no" ; then 4588 cat > $TMPC << EOF 4589#include <spice.h> 4590int main(void) { spice_server_new(); return 0; } 4591EOF 4592 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4593 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4594 if $pkg_config --atleast-version=0.12.0 spice-server && \ 4595 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4596 compile_prog "$spice_cflags" "$spice_libs" ; then 4597 spice="yes" 4598 libs_softmmu="$libs_softmmu $spice_libs" 4599 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 4600 spice_protocol_version=$($pkg_config --modversion spice-protocol) 4601 spice_server_version=$($pkg_config --modversion spice-server) 4602 else 4603 if test "$spice" = "yes" ; then 4604 feature_not_found "spice" \ 4605 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel" 4606 fi 4607 spice="no" 4608 fi 4609fi 4610 4611# check for smartcard support 4612if test "$smartcard" != "no"; then 4613 if $pkg_config --atleast-version=2.5.1 libcacard; then 4614 libcacard_cflags=$($pkg_config --cflags libcacard) 4615 libcacard_libs=$($pkg_config --libs libcacard) 4616 smartcard="yes" 4617 else 4618 if test "$smartcard" = "yes"; then 4619 feature_not_found "smartcard" "Install libcacard devel" 4620 fi 4621 smartcard="no" 4622 fi 4623fi 4624 4625# check for libusb 4626if test "$libusb" != "no" ; then 4627 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4628 libusb="yes" 4629 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4630 libusb_libs=$($pkg_config --libs libusb-1.0) 4631 else 4632 if test "$libusb" = "yes"; then 4633 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4634 fi 4635 libusb="no" 4636 fi 4637fi 4638 4639# check for usbredirparser for usb network redirection support 4640if test "$usb_redir" != "no" ; then 4641 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4642 usb_redir="yes" 4643 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4644 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4645 else 4646 if test "$usb_redir" = "yes"; then 4647 feature_not_found "usb-redir" "Install usbredir devel" 4648 fi 4649 usb_redir="no" 4650 fi 4651fi 4652 4653########################################## 4654# check if we have VSS SDK headers for win 4655 4656if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then 4657 case "$vss_win32_sdk" in 4658 "") vss_win32_include="-isystem $source_path" ;; 4659 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4660 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4661 vss_win32_include="-isystem $source_path/.sdk/vss" 4662 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4663 ;; 4664 *) vss_win32_include="-isystem $vss_win32_sdk" 4665 esac 4666 cat > $TMPC << EOF 4667#define __MIDL_user_allocate_free_DEFINED__ 4668#include <inc/win2003/vss.h> 4669int main(void) { return VSS_CTX_BACKUP; } 4670EOF 4671 if compile_prog "$vss_win32_include" "" ; then 4672 guest_agent_with_vss="yes" 4673 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4674 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4675 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4676 else 4677 if test "$vss_win32_sdk" != "" ; then 4678 echo "ERROR: Please download and install Microsoft VSS SDK:" 4679 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4680 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4681 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4682 echo "ERROR: The headers are extracted in the directory \`inc'." 4683 feature_not_found "VSS support" 4684 fi 4685 guest_agent_with_vss="no" 4686 fi 4687fi 4688 4689########################################## 4690# lookup Windows platform SDK (if not specified) 4691# The SDK is needed only to build .tlb (type library) file of guest agent 4692# VSS provider from the source. It is usually unnecessary because the 4693# pre-compiled .tlb file is included. 4694 4695if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then 4696 if test -z "$win_sdk"; then 4697 programfiles="$PROGRAMFILES" 4698 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4699 if test -n "$programfiles"; then 4700 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4701 else 4702 feature_not_found "Windows SDK" 4703 fi 4704 elif test "$win_sdk" = "no"; then 4705 win_sdk="" 4706 fi 4707fi 4708 4709########################################## 4710# check if mingw environment provides a recent ntddscsi.h 4711if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then 4712 cat > $TMPC << EOF 4713#include <windows.h> 4714#include <ntddscsi.h> 4715int main(void) { 4716#if !defined(IOCTL_SCSI_GET_ADDRESS) 4717#error Missing required ioctl definitions 4718#endif 4719 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4720 return addr.Lun; 4721} 4722EOF 4723 if compile_prog "" "" ; then 4724 guest_agent_ntddscsi=yes 4725 libs_qga="-lsetupapi $libs_qga" 4726 fi 4727fi 4728 4729########################################## 4730# virgl renderer probe 4731 4732if test "$virglrenderer" != "no" ; then 4733 cat > $TMPC << EOF 4734#include <virglrenderer.h> 4735int main(void) { virgl_renderer_poll(); return 0; } 4736EOF 4737 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4738 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4739 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 4740 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4741 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4742 virglrenderer="yes" 4743 else 4744 if test "$virglrenderer" = "yes" ; then 4745 feature_not_found "virglrenderer" 4746 fi 4747 virglrenderer="no" 4748 fi 4749fi 4750 4751########################################## 4752# capstone 4753 4754case "$capstone" in 4755 "" | yes) 4756 if $pkg_config capstone; then 4757 capstone=system 4758 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then 4759 capstone=git 4760 elif test -e "${source_path}/capstone/Makefile" ; then 4761 capstone=internal 4762 elif test -z "$capstone" ; then 4763 capstone=no 4764 else 4765 feature_not_found "capstone" "Install capstone devel or git submodule" 4766 fi 4767 ;; 4768 4769 system) 4770 if ! $pkg_config capstone; then 4771 feature_not_found "capstone" "Install capstone devel" 4772 fi 4773 ;; 4774esac 4775 4776case "$capstone" in 4777 git | internal) 4778 if test "$capstone" = git; then 4779 git_submodules="${git_submodules} capstone" 4780 fi 4781 mkdir -p capstone 4782 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 4783 if test "$mingw32" = "yes"; then 4784 LIBCAPSTONE=capstone.lib 4785 else 4786 LIBCAPSTONE=libcapstone.a 4787 fi 4788 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS" 4789 ;; 4790 4791 system) 4792 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 4793 LIBS="$($pkg_config --libs capstone) $LIBS" 4794 ;; 4795 4796 no) 4797 ;; 4798 *) 4799 error_exit "Unknown state for capstone: $capstone" 4800 ;; 4801esac 4802 4803########################################## 4804# check if we have fdatasync 4805 4806fdatasync=no 4807cat > $TMPC << EOF 4808#include <unistd.h> 4809int main(void) { 4810#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4811return fdatasync(0); 4812#else 4813#error Not supported 4814#endif 4815} 4816EOF 4817if compile_prog "" "" ; then 4818 fdatasync=yes 4819fi 4820 4821########################################## 4822# check if we have madvise 4823 4824madvise=no 4825cat > $TMPC << EOF 4826#include <sys/types.h> 4827#include <sys/mman.h> 4828#include <stddef.h> 4829int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4830EOF 4831if compile_prog "" "" ; then 4832 madvise=yes 4833fi 4834 4835########################################## 4836# check if we have posix_madvise 4837 4838posix_madvise=no 4839cat > $TMPC << EOF 4840#include <sys/mman.h> 4841#include <stddef.h> 4842int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4843EOF 4844if compile_prog "" "" ; then 4845 posix_madvise=yes 4846fi 4847 4848########################################## 4849# check if we have posix_memalign() 4850 4851posix_memalign=no 4852cat > $TMPC << EOF 4853#include <stdlib.h> 4854int main(void) { 4855 void *p; 4856 return posix_memalign(&p, 8, 8); 4857} 4858EOF 4859if compile_prog "" "" ; then 4860 posix_memalign=yes 4861fi 4862 4863########################################## 4864# check if we have posix_syslog 4865 4866posix_syslog=no 4867cat > $TMPC << EOF 4868#include <syslog.h> 4869int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4870EOF 4871if compile_prog "" "" ; then 4872 posix_syslog=yes 4873fi 4874 4875########################################## 4876# check if we have sem_timedwait 4877 4878sem_timedwait=no 4879cat > $TMPC << EOF 4880#include <semaphore.h> 4881int main(void) { return sem_timedwait(0, 0); } 4882EOF 4883if compile_prog "" "" ; then 4884 sem_timedwait=yes 4885fi 4886 4887########################################## 4888# check if we have strchrnul 4889 4890strchrnul=no 4891cat > $TMPC << EOF 4892#include <string.h> 4893int main(void); 4894// Use a haystack that the compiler shouldn't be able to constant fold 4895char *haystack = (char*)&main; 4896int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 4897EOF 4898if compile_prog "" "" ; then 4899 strchrnul=yes 4900fi 4901 4902########################################## 4903# check if trace backend exists 4904 4905$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4906if test "$?" -ne 0 ; then 4907 error_exit "invalid trace backends" \ 4908 "Please choose supported trace backends." 4909fi 4910 4911########################################## 4912# For 'ust' backend, test if ust headers are present 4913if have_backend "ust"; then 4914 cat > $TMPC << EOF 4915#include <lttng/tracepoint.h> 4916int main(void) { return 0; } 4917EOF 4918 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4919 if $pkg_config lttng-ust --exists; then 4920 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4921 else 4922 lttng_ust_libs="-llttng-ust -ldl" 4923 fi 4924 if $pkg_config liburcu-bp --exists; then 4925 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4926 else 4927 urcu_bp_libs="-lurcu-bp" 4928 fi 4929 4930 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 4931 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 4932 else 4933 error_exit "Trace backend 'ust' missing lttng-ust header files" 4934 fi 4935fi 4936 4937########################################## 4938# For 'dtrace' backend, test if 'dtrace' command is present 4939if have_backend "dtrace"; then 4940 if ! has 'dtrace' ; then 4941 error_exit "dtrace command is not found in PATH $PATH" 4942 fi 4943 trace_backend_stap="no" 4944 if has 'stap' ; then 4945 trace_backend_stap="yes" 4946 fi 4947fi 4948 4949########################################## 4950# check and set a backend for coroutine 4951 4952# We prefer ucontext, but it's not always possible. The fallback 4953# is sigcontext. On Windows the only valid backend is the Windows 4954# specific one. 4955 4956ucontext_works=no 4957if test "$darwin" != "yes"; then 4958 cat > $TMPC << EOF 4959#include <ucontext.h> 4960#ifdef __stub_makecontext 4961#error Ignoring glibc stub makecontext which will always fail 4962#endif 4963int main(void) { makecontext(0, 0, 0); return 0; } 4964EOF 4965 if compile_prog "" "" ; then 4966 ucontext_works=yes 4967 fi 4968fi 4969 4970if test "$coroutine" = ""; then 4971 if test "$mingw32" = "yes"; then 4972 coroutine=win32 4973 elif test "$ucontext_works" = "yes"; then 4974 coroutine=ucontext 4975 else 4976 coroutine=sigaltstack 4977 fi 4978else 4979 case $coroutine in 4980 windows) 4981 if test "$mingw32" != "yes"; then 4982 error_exit "'windows' coroutine backend only valid for Windows" 4983 fi 4984 # Unfortunately the user visible backend name doesn't match the 4985 # coroutine-*.c filename for this case, so we have to adjust it here. 4986 coroutine=win32 4987 ;; 4988 ucontext) 4989 if test "$ucontext_works" != "yes"; then 4990 feature_not_found "ucontext" 4991 fi 4992 ;; 4993 sigaltstack) 4994 if test "$mingw32" = "yes"; then 4995 error_exit "only the 'windows' coroutine backend is valid for Windows" 4996 fi 4997 ;; 4998 *) 4999 error_exit "unknown coroutine backend $coroutine" 5000 ;; 5001 esac 5002fi 5003 5004if test "$coroutine_pool" = ""; then 5005 coroutine_pool=yes 5006fi 5007 5008if test "$debug_stack_usage" = "yes"; then 5009 if test "$coroutine_pool" = "yes"; then 5010 echo "WARN: disabling coroutine pool for stack usage debugging" 5011 coroutine_pool=no 5012 fi 5013fi 5014 5015 5016########################################## 5017# check if we have open_by_handle_at 5018 5019open_by_handle_at=no 5020cat > $TMPC << EOF 5021#include <fcntl.h> 5022#if !defined(AT_EMPTY_PATH) 5023# error missing definition 5024#else 5025int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5026#endif 5027EOF 5028if compile_prog "" "" ; then 5029 open_by_handle_at=yes 5030fi 5031 5032######################################## 5033# check if we have linux/magic.h 5034 5035linux_magic_h=no 5036cat > $TMPC << EOF 5037#include <linux/magic.h> 5038int main(void) { 5039 return 0; 5040} 5041EOF 5042if compile_prog "" "" ; then 5043 linux_magic_h=yes 5044fi 5045 5046######################################## 5047# check whether we can disable warning option with a pragma (this is needed 5048# to silence warnings in the headers of some versions of external libraries). 5049# This test has to be compiled with -Werror as otherwise an unknown pragma is 5050# only a warning. 5051# 5052# If we can't selectively disable warning in the code, disable -Werror so that 5053# the build doesn't fail anyway. 5054 5055pragma_disable_unused_but_set=no 5056cat > $TMPC << EOF 5057#pragma GCC diagnostic push 5058#pragma GCC diagnostic ignored "-Wstrict-prototypes" 5059#pragma GCC diagnostic pop 5060 5061int main(void) { 5062 return 0; 5063} 5064EOF 5065if compile_prog "-Werror" "" ; then 5066 pragma_diagnostic_available=yes 5067else 5068 werror=no 5069fi 5070 5071######################################## 5072# check if we have valgrind/valgrind.h 5073 5074valgrind_h=no 5075cat > $TMPC << EOF 5076#include <valgrind/valgrind.h> 5077int main(void) { 5078 return 0; 5079} 5080EOF 5081if compile_prog "" "" ; then 5082 valgrind_h=yes 5083fi 5084 5085######################################## 5086# check if environ is declared 5087 5088has_environ=no 5089cat > $TMPC << EOF 5090#include <unistd.h> 5091int main(void) { 5092 environ = 0; 5093 return 0; 5094} 5095EOF 5096if compile_prog "" "" ; then 5097 has_environ=yes 5098fi 5099 5100######################################## 5101# check if cpuid.h is usable. 5102 5103cat > $TMPC << EOF 5104#include <cpuid.h> 5105int main(void) { 5106 unsigned a, b, c, d; 5107 int max = __get_cpuid_max(0, 0); 5108 5109 if (max >= 1) { 5110 __cpuid(1, a, b, c, d); 5111 } 5112 5113 if (max >= 7) { 5114 __cpuid_count(7, 0, a, b, c, d); 5115 } 5116 5117 return 0; 5118} 5119EOF 5120if compile_prog "" "" ; then 5121 cpuid_h=yes 5122fi 5123 5124########################################## 5125# avx2 optimization requirement check 5126# 5127# There is no point enabling this if cpuid.h is not usable, 5128# since we won't be able to select the new routines. 5129 5130if test $cpuid_h = yes; then 5131 cat > $TMPC << EOF 5132#pragma GCC push_options 5133#pragma GCC target("avx2") 5134#include <cpuid.h> 5135#include <immintrin.h> 5136static int bar(void *a) { 5137 __m256i x = *(__m256i *)a; 5138 return _mm256_testz_si256(x, x); 5139} 5140int main(int argc, char *argv[]) { return bar(argv[0]); } 5141EOF 5142 if compile_object "" ; then 5143 avx2_opt="yes" 5144 fi 5145fi 5146 5147######################################## 5148# check if __[u]int128_t is usable. 5149 5150int128=no 5151cat > $TMPC << EOF 5152#if defined(__clang_major__) && defined(__clang_minor__) 5153# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2)) 5154# error __int128_t does not work in CLANG before 3.2 5155# endif 5156#endif 5157__int128_t a; 5158__uint128_t b; 5159int main (void) { 5160 a = a + b; 5161 b = a * b; 5162 a = a * a; 5163 return 0; 5164} 5165EOF 5166if compile_prog "" "" ; then 5167 int128=yes 5168fi 5169 5170######################################### 5171# See if 128-bit atomic operations are supported. 5172 5173atomic128=no 5174if test "$int128" = "yes"; then 5175 cat > $TMPC << EOF 5176int main(void) 5177{ 5178 unsigned __int128 x = 0, y = 0; 5179 y = __atomic_load_16(&x, 0); 5180 __atomic_store_16(&x, y, 0); 5181 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5182 return 0; 5183} 5184EOF 5185 if compile_prog "" "" ; then 5186 atomic128=yes 5187 fi 5188fi 5189 5190######################################### 5191# See if 64-bit atomic operations are supported. 5192# Note that without __atomic builtins, we can only 5193# assume atomic loads/stores max at pointer size. 5194 5195cat > $TMPC << EOF 5196#include <stdint.h> 5197int main(void) 5198{ 5199 uint64_t x = 0, y = 0; 5200#ifdef __ATOMIC_RELAXED 5201 y = __atomic_load_8(&x, 0); 5202 __atomic_store_8(&x, y, 0); 5203 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5204 __atomic_exchange_8(&x, y, 0); 5205 __atomic_fetch_add_8(&x, y, 0); 5206#else 5207 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5208 __sync_lock_test_and_set(&x, y); 5209 __sync_val_compare_and_swap(&x, y, 0); 5210 __sync_fetch_and_add(&x, y); 5211#endif 5212 return 0; 5213} 5214EOF 5215if compile_prog "" "" ; then 5216 atomic64=yes 5217fi 5218 5219######################################## 5220# See if 16-byte vector operations are supported. 5221# Even without a vector unit the compiler may expand these. 5222# There is a bug in old GCC for PPC that crashes here. 5223# Unfortunately it's the system compiler for Centos 7. 5224 5225cat > $TMPC << EOF 5226typedef unsigned char U1 __attribute__((vector_size(16))); 5227typedef unsigned short U2 __attribute__((vector_size(16))); 5228typedef unsigned int U4 __attribute__((vector_size(16))); 5229typedef unsigned long long U8 __attribute__((vector_size(16))); 5230typedef signed char S1 __attribute__((vector_size(16))); 5231typedef signed short S2 __attribute__((vector_size(16))); 5232typedef signed int S4 __attribute__((vector_size(16))); 5233typedef signed long long S8 __attribute__((vector_size(16))); 5234static U1 a1, b1; 5235static U2 a2, b2; 5236static U4 a4, b4; 5237static U8 a8, b8; 5238static S1 c1; 5239static S2 c2; 5240static S4 c4; 5241static S8 c8; 5242static int i; 5243void helper(void *d, void *a, int shift, int i); 5244void helper(void *d, void *a, int shift, int i) 5245{ 5246 *(U1 *)(d + i) = *(U1 *)(a + i) << shift; 5247 *(U2 *)(d + i) = *(U2 *)(a + i) << shift; 5248 *(U4 *)(d + i) = *(U4 *)(a + i) << shift; 5249 *(U8 *)(d + i) = *(U8 *)(a + i) << shift; 5250} 5251int main(void) 5252{ 5253 a1 += b1; a2 += b2; a4 += b4; a8 += b8; 5254 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8; 5255 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8; 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 <<= i; a2 <<= i; a4 <<= i; a8 <<= i; 5260 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i; 5261 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i; 5262 return 0; 5263} 5264EOF 5265 5266vector16=no 5267if compile_prog "" "" ; then 5268 vector16=yes 5269fi 5270 5271######################################## 5272# check if getauxval is available. 5273 5274getauxval=no 5275cat > $TMPC << EOF 5276#include <sys/auxv.h> 5277int main(void) { 5278 return getauxval(AT_HWCAP) == 0; 5279} 5280EOF 5281if compile_prog "" "" ; then 5282 getauxval=yes 5283fi 5284 5285######################################## 5286# check if ccache is interfering with 5287# semantic analysis of macros 5288 5289unset CCACHE_CPP2 5290ccache_cpp2=no 5291cat > $TMPC << EOF 5292static const int Z = 1; 5293#define fn() ({ Z; }) 5294#define TAUT(X) ((X) == Z) 5295#define PAREN(X, Y) (X == Y) 5296#define ID(X) (X) 5297int main(int argc, char *argv[]) 5298{ 5299 int x = 0, y = 0; 5300 x = ID(x); 5301 x = fn(); 5302 fn(); 5303 if (PAREN(x, y)) return 0; 5304 if (TAUT(Z)) return 0; 5305 return 0; 5306} 5307EOF 5308 5309if ! compile_object "-Werror"; then 5310 ccache_cpp2=yes 5311fi 5312 5313################################################# 5314# clang does not support glibc + FORTIFY_SOURCE. 5315 5316if test "$fortify_source" != "no"; then 5317 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5318 fortify_source="no"; 5319 elif test -n "$cxx" && has $cxx && 5320 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5321 fortify_source="no"; 5322 else 5323 fortify_source="yes" 5324 fi 5325fi 5326 5327############################################### 5328# Check if copy_file_range is provided by glibc 5329have_copy_file_range=no 5330cat > $TMPC << EOF 5331#include <unistd.h> 5332int main(void) { 5333 copy_file_range(0, NULL, 0, NULL, 0, 0); 5334 return 0; 5335} 5336EOF 5337if compile_prog "" "" ; then 5338 have_copy_file_range=yes 5339fi 5340 5341########################################## 5342# check if struct fsxattr is available via linux/fs.h 5343 5344have_fsxattr=no 5345cat > $TMPC << EOF 5346#include <linux/fs.h> 5347struct fsxattr foo; 5348int main(void) { 5349 return 0; 5350} 5351EOF 5352if compile_prog "" "" ; then 5353 have_fsxattr=yes 5354fi 5355 5356########################################## 5357# check for usable membarrier system call 5358if test "$membarrier" = "yes"; then 5359 have_membarrier=no 5360 if test "$mingw32" = "yes" ; then 5361 have_membarrier=yes 5362 elif test "$linux" = "yes" ; then 5363 cat > $TMPC << EOF 5364 #include <linux/membarrier.h> 5365 #include <sys/syscall.h> 5366 #include <unistd.h> 5367 #include <stdlib.h> 5368 int main(void) { 5369 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5370 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5371 exit(0); 5372 } 5373EOF 5374 if compile_prog "" "" ; then 5375 have_membarrier=yes 5376 fi 5377 fi 5378 if test "$have_membarrier" = "no"; then 5379 feature_not_found "membarrier" "membarrier system call not available" 5380 fi 5381else 5382 # Do not enable it by default even for Mingw32, because it doesn't 5383 # work on Wine. 5384 membarrier=no 5385fi 5386 5387########################################## 5388# check if rtnetlink.h exists and is useful 5389have_rtnetlink=no 5390cat > $TMPC << EOF 5391#include <linux/rtnetlink.h> 5392int main(void) { 5393 return IFLA_PROTO_DOWN; 5394} 5395EOF 5396if compile_prog "" "" ; then 5397 have_rtnetlink=yes 5398fi 5399 5400########################################## 5401# check for usable AF_VSOCK environment 5402have_af_vsock=no 5403cat > $TMPC << EOF 5404#include <errno.h> 5405#include <sys/types.h> 5406#include <sys/socket.h> 5407#if !defined(AF_VSOCK) 5408# error missing AF_VSOCK flag 5409#endif 5410#include <linux/vm_sockets.h> 5411int main(void) { 5412 int sock, ret; 5413 struct sockaddr_vm svm; 5414 socklen_t len = sizeof(svm); 5415 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5416 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5417 if ((ret == -1) && (errno == ENOTCONN)) { 5418 return 0; 5419 } 5420 return -1; 5421} 5422EOF 5423if compile_prog "" "" ; then 5424 have_af_vsock=yes 5425fi 5426 5427########################################## 5428# check for usable AF_ALG environment 5429hava_afalg=no 5430cat > $TMPC << EOF 5431#include <errno.h> 5432#include <sys/types.h> 5433#include <sys/socket.h> 5434#include <linux/if_alg.h> 5435int main(void) { 5436 int sock; 5437 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5438 return sock; 5439} 5440EOF 5441if compile_prog "" "" ; then 5442 have_afalg=yes 5443fi 5444if test "$crypto_afalg" = "yes" 5445then 5446 if test "$have_afalg" != "yes" 5447 then 5448 error_exit "AF_ALG requested but could not be detected" 5449 fi 5450fi 5451 5452 5453################################################# 5454# Check to see if we have the Hypervisor framework 5455if [ "$darwin" = "yes" ] ; then 5456 cat > $TMPC << EOF 5457#include <Hypervisor/hv.h> 5458int main() { return 0;} 5459EOF 5460 if ! compile_object ""; then 5461 hvf='no' 5462 else 5463 hvf='yes' 5464 LDFLAGS="-framework Hypervisor $LDFLAGS" 5465 fi 5466fi 5467 5468################################################# 5469# Sparc implicitly links with --relax, which is 5470# incompatible with -r, so --no-relax should be 5471# given. It does no harm to give it on other 5472# platforms too. 5473 5474# Note: the prototype is needed since QEMU_CFLAGS 5475# contains -Wmissing-prototypes 5476cat > $TMPC << EOF 5477extern int foo(void); 5478int foo(void) { return 0; } 5479EOF 5480if ! compile_object ""; then 5481 error_exit "Failed to compile object file for LD_REL_FLAGS test" 5482fi 5483for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 5484 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 5485 LD_REL_FLAGS=$i 5486 break 5487 fi 5488done 5489if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 5490 feature_not_found "modules" "Cannot find how to build relocatable objects" 5491fi 5492 5493########################################## 5494# check for sysmacros.h 5495 5496have_sysmacros=no 5497cat > $TMPC << EOF 5498#include <sys/sysmacros.h> 5499int main(void) { 5500 return makedev(0, 0); 5501} 5502EOF 5503if compile_prog "" "" ; then 5504 have_sysmacros=yes 5505fi 5506 5507########################################## 5508# Veritas HyperScale block driver VxHS 5509# Check if libvxhs is installed 5510 5511if test "$vxhs" != "no" ; then 5512 cat > $TMPC <<EOF 5513#include <stdint.h> 5514#include <qnio/qnio_api.h> 5515 5516void *vxhs_callback; 5517 5518int main(void) { 5519 iio_init(QNIO_VERSION, vxhs_callback); 5520 return 0; 5521} 5522EOF 5523 vxhs_libs="-lvxhs -lssl" 5524 if compile_prog "" "$vxhs_libs" ; then 5525 vxhs=yes 5526 else 5527 if test "$vxhs" = "yes" ; then 5528 feature_not_found "vxhs block device" "Install libvxhs See github" 5529 fi 5530 vxhs=no 5531 fi 5532fi 5533 5534########################################## 5535# check for _Static_assert() 5536 5537have_static_assert=no 5538cat > $TMPC << EOF 5539_Static_assert(1, "success"); 5540int main(void) { 5541 return 0; 5542} 5543EOF 5544if compile_prog "" "" ; then 5545 have_static_assert=yes 5546fi 5547 5548########################################## 5549# check for utmpx.h, it is missing e.g. on OpenBSD 5550 5551have_utmpx=no 5552cat > $TMPC << EOF 5553#include <utmpx.h> 5554struct utmpx user_info; 5555int main(void) { 5556 return 0; 5557} 5558EOF 5559if compile_prog "" "" ; then 5560 have_utmpx=yes 5561fi 5562 5563########################################## 5564# checks for sanitizers 5565 5566have_asan=no 5567have_ubsan=no 5568have_asan_iface_h=no 5569have_asan_iface_fiber=no 5570 5571if test "$sanitizers" = "yes" ; then 5572 write_c_skeleton 5573 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5574 have_asan=yes 5575 fi 5576 5577 # we could use a simple skeleton for flags checks, but this also 5578 # detect the static linking issue of ubsan, see also: 5579 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5580 cat > $TMPC << EOF 5581#include <stdlib.h> 5582int main(void) { 5583 void *tmp = malloc(10); 5584 return *(int *)(tmp + 2); 5585} 5586EOF 5587 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5588 have_ubsan=yes 5589 fi 5590 5591 if check_include "sanitizer/asan_interface.h" ; then 5592 have_asan_iface_h=yes 5593 fi 5594 5595 cat > $TMPC << EOF 5596#include <sanitizer/asan_interface.h> 5597int main(void) { 5598 __sanitizer_start_switch_fiber(0, 0, 0); 5599 return 0; 5600} 5601EOF 5602 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5603 have_asan_iface_fiber=yes 5604 fi 5605fi 5606 5607########################################## 5608# Docker and cross-compiler support 5609# 5610# This is specifically for building test 5611# cases for foreign architectures, not 5612# cross-compiling QEMU itself. 5613 5614if has "docker"; then 5615 docker=$($python $source_path/tests/docker/docker.py probe) 5616fi 5617 5618########################################## 5619# check for libpmem 5620 5621if test "$libpmem" != "no"; then 5622 if $pkg_config --exists "libpmem"; then 5623 libpmem="yes" 5624 libpmem_libs=$($pkg_config --libs libpmem) 5625 libpmem_cflags=$($pkg_config --cflags libpmem) 5626 libs_softmmu="$libs_softmmu $libpmem_libs" 5627 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 5628 else 5629 if test "$libpmem" = "yes" ; then 5630 feature_not_found "libpmem" "Install nvml or pmdk" 5631 fi 5632 libpmem="no" 5633 fi 5634fi 5635 5636########################################## 5637# End of CC checks 5638# After here, no more $cc or $ld runs 5639 5640write_c_skeleton 5641 5642if test "$gcov" = "yes" ; then 5643 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 5644 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 5645elif test "$fortify_source" = "yes" ; then 5646 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 5647elif test "$debug" = "no"; then 5648 CFLAGS="-O2 $CFLAGS" 5649fi 5650 5651if test "$have_asan" = "yes"; then 5652 CFLAGS="-fsanitize=address $CFLAGS" 5653 if test "$have_asan_iface_h" = "no" ; then 5654 echo "ASAN build enabled, but ASAN header missing." \ 5655 "Without code annotation, the report may be inferior." 5656 elif test "$have_asan_iface_fiber" = "no" ; then 5657 echo "ASAN build enabled, but ASAN header is too old." \ 5658 "Without code annotation, the report may be inferior." 5659 fi 5660fi 5661if test "$have_ubsan" = "yes"; then 5662 CFLAGS="-fsanitize=undefined $CFLAGS" 5663fi 5664 5665########################################## 5666# Do we have libnfs 5667if test "$libnfs" != "no" ; then 5668 if $pkg_config --atleast-version=1.9.3 libnfs; then 5669 libnfs="yes" 5670 libnfs_libs=$($pkg_config --libs libnfs) 5671 else 5672 if test "$libnfs" = "yes" ; then 5673 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 5674 fi 5675 libnfs="no" 5676 fi 5677fi 5678 5679# Now we've finished running tests it's OK to add -Werror to the compiler flags 5680if test "$werror" = "yes"; then 5681 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 5682fi 5683 5684if test "$solaris" = "no" ; then 5685 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5686 LDFLAGS="-Wl,--warn-common $LDFLAGS" 5687 fi 5688fi 5689 5690# test if pod2man has --utf8 option 5691if pod2man --help | grep -q utf8; then 5692 POD2MAN="pod2man --utf8" 5693else 5694 POD2MAN="pod2man" 5695fi 5696 5697# Use ASLR, no-SEH and DEP if available 5698if test "$mingw32" = "yes" ; then 5699 for flag in --dynamicbase --no-seh --nxcompat; do 5700 if ld_has $flag ; then 5701 LDFLAGS="-Wl,$flag $LDFLAGS" 5702 fi 5703 done 5704fi 5705 5706qemu_confdir=$sysconfdir$confsuffix 5707qemu_moddir=$libdir$confsuffix 5708qemu_datadir=$datadir$confsuffix 5709qemu_localedir="$datadir/locale" 5710 5711# We can only support ivshmem if we have eventfd 5712if [ "$eventfd" = "yes" ]; then 5713 ivshmem=yes 5714fi 5715 5716tools="" 5717if test "$want_tools" = "yes" ; then 5718 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" 5719 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 5720 tools="qemu-nbd\$(EXESUF) $tools" 5721 fi 5722 if [ "$ivshmem" = "yes" ]; then 5723 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 5724 fi 5725fi 5726if test "$softmmu" = yes ; then 5727 if test "$linux" = yes; then 5728 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then 5729 virtfs=yes 5730 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 5731 else 5732 if test "$virtfs" = yes; then 5733 error_exit "VirtFS requires libcap devel and libattr devel" 5734 fi 5735 virtfs=no 5736 fi 5737 if test "$mpath" != no && test "$mpathpersist" = yes ; then 5738 mpath=yes 5739 else 5740 if test "$mpath" = yes; then 5741 error_exit "Multipath requires libmpathpersist devel" 5742 fi 5743 mpath=no 5744 fi 5745 tools="$tools scsi/qemu-pr-helper\$(EXESUF)" 5746 else 5747 if test "$virtfs" = yes; then 5748 error_exit "VirtFS is supported only on Linux" 5749 fi 5750 virtfs=no 5751 if test "$mpath" = yes; then 5752 error_exit "Multipath is supported only on Linux" 5753 fi 5754 mpath=no 5755 fi 5756 if test "$xkbcommon" = "yes"; then 5757 tools="qemu-keymap\$(EXESUF) $tools" 5758 fi 5759fi 5760 5761# Probe for guest agent support/options 5762 5763if [ "$guest_agent" != "no" ]; then 5764 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5765 tools="qemu-ga $tools" 5766 guest_agent=yes 5767 elif [ "$guest_agent" != yes ]; then 5768 guest_agent=no 5769 else 5770 error_exit "Guest agent is not supported on this platform" 5771 fi 5772fi 5773 5774# Guest agent Window MSI package 5775 5776if test "$guest_agent" != yes; then 5777 if test "$guest_agent_msi" = yes; then 5778 error_exit "MSI guest agent package requires guest agent enabled" 5779 fi 5780 guest_agent_msi=no 5781elif test "$mingw32" != "yes"; then 5782 if test "$guest_agent_msi" = "yes"; then 5783 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 5784 fi 5785 guest_agent_msi=no 5786elif ! has wixl; then 5787 if test "$guest_agent_msi" = "yes"; then 5788 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 5789 fi 5790 guest_agent_msi=no 5791else 5792 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 5793 # disabled explicitly 5794 if test "$guest_agent_msi" != "no"; then 5795 guest_agent_msi=yes 5796 fi 5797fi 5798 5799if test "$guest_agent_msi" = "yes"; then 5800 if test "$guest_agent_with_vss" = "yes"; then 5801 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 5802 fi 5803 5804 if test "$QEMU_GA_MANUFACTURER" = ""; then 5805 QEMU_GA_MANUFACTURER=QEMU 5806 fi 5807 5808 if test "$QEMU_GA_DISTRO" = ""; then 5809 QEMU_GA_DISTRO=Linux 5810 fi 5811 5812 if test "$QEMU_GA_VERSION" = ""; then 5813 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5814 fi 5815 5816 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5817 5818 case "$cpu" in 5819 x86_64) 5820 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5821 ;; 5822 i386) 5823 QEMU_GA_MSI_ARCH="-D Arch=32" 5824 ;; 5825 *) 5826 error_exit "CPU $cpu not supported for building installation package" 5827 ;; 5828 esac 5829fi 5830 5831# Mac OS X ships with a broken assembler 5832roms= 5833if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 5834 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 5835 "$softmmu" = yes ; then 5836 # Different host OS linkers have different ideas about the name of the ELF 5837 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5838 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5839 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5840 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5841 ld_i386_emulation="$emu" 5842 roms="optionrom" 5843 break 5844 fi 5845 done 5846fi 5847if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 5848 roms="$roms spapr-rtas" 5849fi 5850 5851if test "$cpu" = "s390x" ; then 5852 roms="$roms s390-ccw" 5853fi 5854 5855# Probe for the need for relocating the user-only binary. 5856if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 5857 textseg_addr= 5858 case "$cpu" in 5859 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 5860 # ??? Rationale for choosing this address 5861 textseg_addr=0x60000000 5862 ;; 5863 mips) 5864 # A 256M aligned address, high in the address space, with enough 5865 # room for the code_gen_buffer above it before the stack. 5866 textseg_addr=0x60000000 5867 ;; 5868 esac 5869 if [ -n "$textseg_addr" ]; then 5870 cat > $TMPC <<EOF 5871 int main(void) { return 0; } 5872EOF 5873 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 5874 if ! compile_prog "" "$textseg_ldflags"; then 5875 # In case ld does not support -Ttext-segment, edit the default linker 5876 # script via sed to set the .text start addr. This is needed on FreeBSD 5877 # at least. 5878 if ! $ld --verbose >/dev/null 2>&1; then 5879 error_exit \ 5880 "We need to link the QEMU user mode binaries at a" \ 5881 "specific text address. Unfortunately your linker" \ 5882 "doesn't support either the -Ttext-segment option or" \ 5883 "printing the default linker script with --verbose." \ 5884 "If you don't want the user mode binaries, pass the" \ 5885 "--disable-user option to configure." 5886 fi 5887 5888 $ld --verbose | sed \ 5889 -e '1,/==================================================/d' \ 5890 -e '/==================================================/,$d' \ 5891 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 5892 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 5893 textseg_ldflags="-Wl,-T../config-host.ld" 5894 fi 5895 fi 5896fi 5897 5898# Check that the C++ compiler exists and works with the C compiler. 5899# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5900if has $cxx; then 5901 cat > $TMPC <<EOF 5902int c_function(void); 5903int main(void) { return c_function(); } 5904EOF 5905 5906 compile_object 5907 5908 cat > $TMPCXX <<EOF 5909extern "C" { 5910 int c_function(void); 5911} 5912int c_function(void) { return 42; } 5913EOF 5914 5915 update_cxxflags 5916 5917 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then 5918 # C++ compiler $cxx works ok with C compiler $cc 5919 : 5920 else 5921 echo "C++ compiler $cxx does not work with C compiler $cc" 5922 echo "Disabling C++ specific optional code" 5923 cxx= 5924 fi 5925else 5926 echo "No C++ compiler available; disabling C++ specific optional code" 5927 cxx= 5928fi 5929 5930echo_version() { 5931 if test "$1" = "yes" ; then 5932 echo "($2)" 5933 fi 5934} 5935 5936# prepend pixman and ftd flags after all config tests are done 5937QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 5938QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 5939libs_softmmu="$pixman_libs $libs_softmmu" 5940 5941echo "Install prefix $prefix" 5942echo "BIOS directory $(eval echo $qemu_datadir)" 5943echo "firmware path $(eval echo $firmwarepath)" 5944echo "binary directory $(eval echo $bindir)" 5945echo "library directory $(eval echo $libdir)" 5946echo "module directory $(eval echo $qemu_moddir)" 5947echo "libexec directory $(eval echo $libexecdir)" 5948echo "include directory $(eval echo $includedir)" 5949echo "config directory $(eval echo $sysconfdir)" 5950if test "$mingw32" = "no" ; then 5951echo "local state directory $(eval echo $local_statedir)" 5952echo "Manual directory $(eval echo $mandir)" 5953echo "ELF interp prefix $interp_prefix" 5954else 5955echo "local state directory queried at runtime" 5956echo "Windows SDK $win_sdk" 5957fi 5958echo "Source path $source_path" 5959echo "GIT binary $git" 5960echo "GIT submodules $git_submodules" 5961echo "C compiler $cc" 5962echo "Host C compiler $host_cc" 5963echo "C++ compiler $cxx" 5964echo "Objective-C compiler $objcc" 5965echo "ARFLAGS $ARFLAGS" 5966echo "CFLAGS $CFLAGS" 5967echo "QEMU_CFLAGS $QEMU_CFLAGS" 5968echo "LDFLAGS $LDFLAGS" 5969echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 5970echo "make $make" 5971echo "install $install" 5972echo "python $python" 5973if test "$slirp" = "yes" ; then 5974 echo "smbd $smbd" 5975fi 5976echo "module support $modules" 5977echo "host CPU $cpu" 5978echo "host big endian $bigendian" 5979echo "target list $target_list" 5980echo "gprof enabled $gprof" 5981echo "sparse enabled $sparse" 5982echo "strip binaries $strip_opt" 5983echo "profiler $profiler" 5984echo "static build $static" 5985if test "$darwin" = "yes" ; then 5986 echo "Cocoa support $cocoa" 5987fi 5988echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 5989echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 5990echo "GTK GL support $gtk_gl" 5991echo "VTE support $vte $(echo_version $vte $vteversion)" 5992echo "TLS priority $tls_priority" 5993echo "GNUTLS support $gnutls" 5994echo "GNUTLS rnd $gnutls_rnd" 5995echo "libgcrypt $gcrypt" 5996echo "libgcrypt kdf $gcrypt_kdf" 5997echo "nettle $nettle $(echo_version $nettle $nettle_version)" 5998echo "nettle kdf $nettle_kdf" 5999echo "libtasn1 $tasn1" 6000echo "curses support $curses" 6001echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6002echo "curl support $curl" 6003echo "mingw32 support $mingw32" 6004echo "Audio drivers $audio_drv_list" 6005echo "Block whitelist (rw) $block_drv_rw_whitelist" 6006echo "Block whitelist (ro) $block_drv_ro_whitelist" 6007echo "VirtFS support $virtfs" 6008echo "Multipath support $mpath" 6009echo "VNC support $vnc" 6010if test "$vnc" = "yes" ; then 6011 echo "VNC SASL support $vnc_sasl" 6012 echo "VNC JPEG support $vnc_jpeg" 6013 echo "VNC PNG support $vnc_png" 6014fi 6015if test -n "$sparc_cpu"; then 6016 echo "Target Sparc Arch $sparc_cpu" 6017fi 6018echo "xen support $xen" 6019if test "$xen" = "yes" ; then 6020 echo "xen ctrl version $xen_ctrl_version" 6021 echo "pv dom build $xen_pv_domain_build" 6022fi 6023echo "brlapi support $brlapi" 6024echo "bluez support $bluez" 6025echo "Documentation $docs" 6026echo "PIE $pie" 6027echo "vde support $vde" 6028echo "netmap support $netmap" 6029echo "Linux AIO support $linux_aio" 6030echo "ATTR/XATTR support $attr" 6031echo "Install blobs $blobs" 6032echo "KVM support $kvm" 6033echo "HAX support $hax" 6034echo "HVF support $hvf" 6035echo "WHPX support $whpx" 6036echo "TCG support $tcg" 6037if test "$tcg" = "yes" ; then 6038 echo "TCG debug enabled $debug_tcg" 6039 echo "TCG interpreter $tcg_interpreter" 6040fi 6041echo "malloc trim support $malloc_trim" 6042echo "RDMA support $rdma" 6043echo "PVRDMA support $pvrdma" 6044echo "fdt support $fdt" 6045echo "membarrier $membarrier" 6046echo "preadv support $preadv" 6047echo "fdatasync $fdatasync" 6048echo "madvise $madvise" 6049echo "posix_madvise $posix_madvise" 6050echo "posix_memalign $posix_memalign" 6051echo "libcap-ng support $cap_ng" 6052echo "vhost-net support $vhost_net" 6053echo "vhost-crypto support $vhost_crypto" 6054echo "vhost-scsi support $vhost_scsi" 6055echo "vhost-vsock support $vhost_vsock" 6056echo "vhost-user support $vhost_user" 6057echo "Trace backends $trace_backends" 6058if have_backend "simple"; then 6059echo "Trace output file $trace_file-<pid>" 6060fi 6061echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6062echo "rbd support $rbd" 6063echo "xfsctl support $xfs" 6064echo "smartcard support $smartcard" 6065echo "libusb $libusb" 6066echo "usb net redir $usb_redir" 6067echo "OpenGL support $opengl" 6068echo "OpenGL dmabufs $opengl_dmabuf" 6069echo "libiscsi support $libiscsi" 6070echo "libnfs support $libnfs" 6071echo "build guest agent $guest_agent" 6072echo "QGA VSS support $guest_agent_with_vss" 6073echo "QGA w32 disk info $guest_agent_ntddscsi" 6074echo "QGA MSI support $guest_agent_msi" 6075echo "seccomp support $seccomp" 6076echo "coroutine backend $coroutine" 6077echo "coroutine pool $coroutine_pool" 6078echo "debug stack usage $debug_stack_usage" 6079echo "mutex debugging $debug_mutex" 6080echo "crypto afalg $crypto_afalg" 6081echo "GlusterFS support $glusterfs" 6082echo "gcov $gcov_tool" 6083echo "gcov enabled $gcov" 6084echo "TPM support $tpm" 6085echo "libssh2 support $libssh2" 6086echo "TPM passthrough $tpm_passthrough" 6087echo "TPM emulator $tpm_emulator" 6088echo "QOM debugging $qom_cast_debug" 6089echo "Live block migration $live_block_migration" 6090echo "lzo support $lzo" 6091echo "snappy support $snappy" 6092echo "bzip2 support $bzip2" 6093echo "NUMA host support $numa" 6094echo "libxml2 $libxml2" 6095echo "tcmalloc support $tcmalloc" 6096echo "jemalloc support $jemalloc" 6097echo "avx2 optimization $avx2_opt" 6098echo "replication support $replication" 6099echo "VxHS block device $vxhs" 6100echo "capstone $capstone" 6101echo "docker $docker" 6102echo "libpmem support $libpmem" 6103 6104if test "$sdl_too_old" = "yes"; then 6105echo "-> Your SDL version is too old - please upgrade to have SDL support" 6106fi 6107 6108if test "$gtkabi" = "2.0"; then 6109 echo 6110 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in" 6111 echo "WARNING: future releases. Please switch to using GTK 3.0" 6112fi 6113 6114if test "$sdlabi" = "1.2"; then 6115 echo 6116 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in" 6117 echo "WARNING: future releases. Please switch to using SDL 2.0" 6118fi 6119 6120if test "$supported_cpu" = "no"; then 6121 echo 6122 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 6123 echo 6124 echo "CPU host architecture $cpu support is not currently maintained." 6125 echo "The QEMU project intends to remove support for this host CPU in" 6126 echo "a future release if nobody volunteers to maintain it and to" 6127 echo "provide a build host for our continuous integration setup." 6128 echo "configure has succeeded and you can continue to build, but" 6129 echo "if you care about QEMU on this platform you should contact" 6130 echo "us upstream at qemu-devel@nongnu.org." 6131fi 6132 6133if test "$supported_os" = "no"; then 6134 echo 6135 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 6136 echo 6137 echo "Host OS $targetos support is not currently maintained." 6138 echo "The QEMU project intends to remove support for this host OS in" 6139 echo "a future release if nobody volunteers to maintain it and to" 6140 echo "provide a build host for our continuous integration setup." 6141 echo "configure has succeeded and you can continue to build, but" 6142 echo "if you care about QEMU on this platform you should contact" 6143 echo "us upstream at qemu-devel@nongnu.org." 6144fi 6145 6146config_host_mak="config-host.mak" 6147 6148echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6149 6150echo "# Automatically generated by configure - do not modify" > $config_host_mak 6151echo >> $config_host_mak 6152 6153echo all: >> $config_host_mak 6154echo "prefix=$prefix" >> $config_host_mak 6155echo "bindir=$bindir" >> $config_host_mak 6156echo "libdir=$libdir" >> $config_host_mak 6157echo "libexecdir=$libexecdir" >> $config_host_mak 6158echo "includedir=$includedir" >> $config_host_mak 6159echo "mandir=$mandir" >> $config_host_mak 6160echo "sysconfdir=$sysconfdir" >> $config_host_mak 6161echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6162echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6163echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6164echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6165echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6166if test "$mingw32" = "no" ; then 6167 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6168fi 6169echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6170echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6171echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6172echo "GIT=$git" >> $config_host_mak 6173echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6174echo "GIT_UPDATE=$git_update" >> $config_host_mak 6175 6176echo "ARCH=$ARCH" >> $config_host_mak 6177 6178if test "$debug_tcg" = "yes" ; then 6179 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6180fi 6181if test "$strip_opt" = "yes" ; then 6182 echo "STRIP=${strip}" >> $config_host_mak 6183fi 6184if test "$bigendian" = "yes" ; then 6185 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6186fi 6187if test "$mingw32" = "yes" ; then 6188 echo "CONFIG_WIN32=y" >> $config_host_mak 6189 rc_version=$(cat $source_path/VERSION) 6190 version_major=${rc_version%%.*} 6191 rc_version=${rc_version#*.} 6192 version_minor=${rc_version%%.*} 6193 rc_version=${rc_version#*.} 6194 version_subminor=${rc_version%%.*} 6195 version_micro=0 6196 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6197 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6198 if test "$guest_agent_with_vss" = "yes" ; then 6199 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6200 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6201 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6202 fi 6203 if test "$guest_agent_ntddscsi" = "yes" ; then 6204 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 6205 fi 6206 if test "$guest_agent_msi" = "yes"; then 6207 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6208 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6209 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6210 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6211 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6212 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6213 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6214 fi 6215else 6216 echo "CONFIG_POSIX=y" >> $config_host_mak 6217fi 6218 6219if test "$linux" = "yes" ; then 6220 echo "CONFIG_LINUX=y" >> $config_host_mak 6221fi 6222 6223if test "$darwin" = "yes" ; then 6224 echo "CONFIG_DARWIN=y" >> $config_host_mak 6225fi 6226 6227if test "$solaris" = "yes" ; then 6228 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6229fi 6230if test "$haiku" = "yes" ; then 6231 echo "CONFIG_HAIKU=y" >> $config_host_mak 6232fi 6233if test "$static" = "yes" ; then 6234 echo "CONFIG_STATIC=y" >> $config_host_mak 6235fi 6236if test "$profiler" = "yes" ; then 6237 echo "CONFIG_PROFILER=y" >> $config_host_mak 6238fi 6239if test "$slirp" = "yes" ; then 6240 echo "CONFIG_SLIRP=y" >> $config_host_mak 6241 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6242fi 6243if test "$vde" = "yes" ; then 6244 echo "CONFIG_VDE=y" >> $config_host_mak 6245 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6246fi 6247if test "$netmap" = "yes" ; then 6248 echo "CONFIG_NETMAP=y" >> $config_host_mak 6249fi 6250if test "$l2tpv3" = "yes" ; then 6251 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6252fi 6253if test "$cap_ng" = "yes" ; then 6254 echo "CONFIG_LIBCAP=y" >> $config_host_mak 6255fi 6256echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6257for drv in $audio_drv_list; do 6258 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6259 case "$drv" in 6260 alsa | oss | pa | sdl) 6261 echo "$def=m" >> $config_host_mak ;; 6262 *) 6263 echo "$def=y" >> $config_host_mak ;; 6264 esac 6265done 6266echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6267echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6268echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6269echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6270echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6271if test "$audio_pt_int" = "yes" ; then 6272 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 6273fi 6274if test "$audio_win_int" = "yes" ; then 6275 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6276fi 6277echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6278echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6279if test "$vnc" = "yes" ; then 6280 echo "CONFIG_VNC=y" >> $config_host_mak 6281fi 6282if test "$vnc_sasl" = "yes" ; then 6283 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6284fi 6285if test "$vnc_jpeg" = "yes" ; then 6286 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6287fi 6288if test "$vnc_png" = "yes" ; then 6289 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6290fi 6291if test "$xkbcommon" = "yes" ; then 6292 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6293 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6294fi 6295if test "$fnmatch" = "yes" ; then 6296 echo "CONFIG_FNMATCH=y" >> $config_host_mak 6297fi 6298if test "$xfs" = "yes" ; then 6299 echo "CONFIG_XFS=y" >> $config_host_mak 6300fi 6301qemu_version=$(head $source_path/VERSION) 6302echo "VERSION=$qemu_version" >>$config_host_mak 6303echo "PKGVERSION=$pkgversion" >>$config_host_mak 6304echo "SRC_PATH=$source_path" >> $config_host_mak 6305echo "TARGET_DIRS=$target_list" >> $config_host_mak 6306if [ "$docs" = "yes" ] ; then 6307 echo "BUILD_DOCS=yes" >> $config_host_mak 6308fi 6309if test "$modules" = "yes"; then 6310 # $shacmd can generate a hash started with digit, which the compiler doesn't 6311 # like as an symbol. So prefix it with an underscore 6312 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6313 echo "CONFIG_MODULES=y" >> $config_host_mak 6314fi 6315if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then 6316 echo "CONFIG_X11=y" >> $config_host_mak 6317 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6318 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6319fi 6320if test "$sdl" = "yes" ; then 6321 echo "CONFIG_SDL=m" >> $config_host_mak 6322 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 6323 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6324 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6325fi 6326if test "$cocoa" = "yes" ; then 6327 echo "CONFIG_COCOA=y" >> $config_host_mak 6328fi 6329if test "$curses" = "yes" ; then 6330 echo "CONFIG_CURSES=m" >> $config_host_mak 6331 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6332 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6333fi 6334if test "$pipe2" = "yes" ; then 6335 echo "CONFIG_PIPE2=y" >> $config_host_mak 6336fi 6337if test "$accept4" = "yes" ; then 6338 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6339fi 6340if test "$splice" = "yes" ; then 6341 echo "CONFIG_SPLICE=y" >> $config_host_mak 6342fi 6343if test "$eventfd" = "yes" ; then 6344 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6345fi 6346if test "$memfd" = "yes" ; then 6347 echo "CONFIG_MEMFD=y" >> $config_host_mak 6348fi 6349if test "$fallocate" = "yes" ; then 6350 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6351fi 6352if test "$fallocate_punch_hole" = "yes" ; then 6353 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6354fi 6355if test "$fallocate_zero_range" = "yes" ; then 6356 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6357fi 6358if test "$posix_fallocate" = "yes" ; then 6359 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6360fi 6361if test "$sync_file_range" = "yes" ; then 6362 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6363fi 6364if test "$fiemap" = "yes" ; then 6365 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6366fi 6367if test "$dup3" = "yes" ; then 6368 echo "CONFIG_DUP3=y" >> $config_host_mak 6369fi 6370if test "$ppoll" = "yes" ; then 6371 echo "CONFIG_PPOLL=y" >> $config_host_mak 6372fi 6373if test "$prctl_pr_set_timerslack" = "yes" ; then 6374 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6375fi 6376if test "$epoll" = "yes" ; then 6377 echo "CONFIG_EPOLL=y" >> $config_host_mak 6378fi 6379if test "$epoll_create1" = "yes" ; then 6380 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6381fi 6382if test "$sendfile" = "yes" ; then 6383 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6384fi 6385if test "$timerfd" = "yes" ; then 6386 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6387fi 6388if test "$setns" = "yes" ; then 6389 echo "CONFIG_SETNS=y" >> $config_host_mak 6390fi 6391if test "$clock_adjtime" = "yes" ; then 6392 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6393fi 6394if test "$syncfs" = "yes" ; then 6395 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6396fi 6397if test "$inotify" = "yes" ; then 6398 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6399fi 6400if test "$inotify1" = "yes" ; then 6401 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6402fi 6403if test "$sem_timedwait" = "yes" ; then 6404 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6405fi 6406if test "$strchrnul" = "yes" ; then 6407 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6408fi 6409if test "$byteswap_h" = "yes" ; then 6410 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6411fi 6412if test "$bswap_h" = "yes" ; then 6413 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6414fi 6415if test "$curl" = "yes" ; then 6416 echo "CONFIG_CURL=m" >> $config_host_mak 6417 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6418 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6419fi 6420if test "$brlapi" = "yes" ; then 6421 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6422 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6423fi 6424if test "$bluez" = "yes" ; then 6425 echo "CONFIG_BLUEZ=y" >> $config_host_mak 6426 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 6427fi 6428if test "$gtk" = "yes" ; then 6429 echo "CONFIG_GTK=m" >> $config_host_mak 6430 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak 6431 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6432 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6433 if test "$gtk_gl" = "yes" ; then 6434 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6435 fi 6436fi 6437echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6438if test "$gnutls" = "yes" ; then 6439 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6440fi 6441if test "$gnutls_rnd" = "yes" ; then 6442 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak 6443fi 6444if test "$gcrypt" = "yes" ; then 6445 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6446 if test "$gcrypt_hmac" = "yes" ; then 6447 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6448 fi 6449 if test "$gcrypt_kdf" = "yes" ; then 6450 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak 6451 fi 6452fi 6453if test "$nettle" = "yes" ; then 6454 echo "CONFIG_NETTLE=y" >> $config_host_mak 6455 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6456 if test "$nettle_kdf" = "yes" ; then 6457 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak 6458 fi 6459fi 6460if test "$tasn1" = "yes" ; then 6461 echo "CONFIG_TASN1=y" >> $config_host_mak 6462fi 6463if test "$have_ifaddrs_h" = "yes" ; then 6464 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6465fi 6466if test "$have_broken_size_max" = "yes" ; then 6467 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6468fi 6469 6470# Work around a system header bug with some kernel/XFS header 6471# versions where they both try to define 'struct fsxattr': 6472# xfs headers will not try to redefine structs from linux headers 6473# if this macro is set. 6474if test "$have_fsxattr" = "yes" ; then 6475 echo "HAVE_FSXATTR=y" >> $config_host_mak 6476fi 6477if test "$have_copy_file_range" = "yes" ; then 6478 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6479fi 6480if test "$vte" = "yes" ; then 6481 echo "CONFIG_VTE=y" >> $config_host_mak 6482 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6483 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6484fi 6485if test "$virglrenderer" = "yes" ; then 6486 echo "CONFIG_VIRGL=y" >> $config_host_mak 6487 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6488 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6489fi 6490if test "$xen" = "yes" ; then 6491 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6492 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6493 if test "$xen_pv_domain_build" = "yes" ; then 6494 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 6495 fi 6496fi 6497if test "$linux_aio" = "yes" ; then 6498 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6499fi 6500if test "$attr" = "yes" ; then 6501 echo "CONFIG_ATTR=y" >> $config_host_mak 6502fi 6503if test "$libattr" = "yes" ; then 6504 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6505fi 6506if test "$virtfs" = "yes" ; then 6507 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6508fi 6509if test "$mpath" = "yes" ; then 6510 echo "CONFIG_MPATH=y" >> $config_host_mak 6511 if test "$mpathpersist_new_api" = "yes"; then 6512 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 6513 fi 6514fi 6515if test "$vhost_scsi" = "yes" ; then 6516 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6517fi 6518if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then 6519 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 6520fi 6521if test "$vhost_crypto" = "yes" ; then 6522 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6523fi 6524if test "$vhost_vsock" = "yes" ; then 6525 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6526fi 6527if test "$vhost_user" = "yes" ; then 6528 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6529fi 6530if test "$blobs" = "yes" ; then 6531 echo "INSTALL_BLOBS=yes" >> $config_host_mak 6532fi 6533if test "$iovec" = "yes" ; then 6534 echo "CONFIG_IOVEC=y" >> $config_host_mak 6535fi 6536if test "$preadv" = "yes" ; then 6537 echo "CONFIG_PREADV=y" >> $config_host_mak 6538fi 6539if test "$fdt" != "no" ; then 6540 echo "CONFIG_FDT=y" >> $config_host_mak 6541fi 6542if test "$membarrier" = "yes" ; then 6543 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6544fi 6545if test "$signalfd" = "yes" ; then 6546 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6547fi 6548if test "$tcg" = "yes"; then 6549 echo "CONFIG_TCG=y" >> $config_host_mak 6550 if test "$tcg_interpreter" = "yes" ; then 6551 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6552 fi 6553fi 6554if test "$fdatasync" = "yes" ; then 6555 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6556fi 6557if test "$madvise" = "yes" ; then 6558 echo "CONFIG_MADVISE=y" >> $config_host_mak 6559fi 6560if test "$posix_madvise" = "yes" ; then 6561 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6562fi 6563if test "$posix_memalign" = "yes" ; then 6564 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6565fi 6566 6567if test "$spice" = "yes" ; then 6568 echo "CONFIG_SPICE=y" >> $config_host_mak 6569fi 6570 6571if test "$smartcard" = "yes" ; then 6572 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6573 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6574 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6575fi 6576 6577if test "$libusb" = "yes" ; then 6578 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6579 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6580 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6581fi 6582 6583if test "$usb_redir" = "yes" ; then 6584 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6585 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6586 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6587fi 6588 6589if test "$opengl" = "yes" ; then 6590 echo "CONFIG_OPENGL=y" >> $config_host_mak 6591 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6592 if test "$opengl_dmabuf" = "yes" ; then 6593 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6594 fi 6595fi 6596 6597if test "$malloc_trim" = "yes" ; then 6598 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 6599fi 6600 6601if test "$avx2_opt" = "yes" ; then 6602 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6603fi 6604 6605if test "$lzo" = "yes" ; then 6606 echo "CONFIG_LZO=y" >> $config_host_mak 6607fi 6608 6609if test "$snappy" = "yes" ; then 6610 echo "CONFIG_SNAPPY=y" >> $config_host_mak 6611fi 6612 6613if test "$bzip2" = "yes" ; then 6614 echo "CONFIG_BZIP2=y" >> $config_host_mak 6615 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 6616fi 6617 6618if test "$libiscsi" = "yes" ; then 6619 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 6620 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 6621 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6622fi 6623 6624if test "$libnfs" = "yes" ; then 6625 echo "CONFIG_LIBNFS=m" >> $config_host_mak 6626 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 6627fi 6628 6629if test "$seccomp" = "yes"; then 6630 echo "CONFIG_SECCOMP=y" >> $config_host_mak 6631 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 6632 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 6633fi 6634 6635# XXX: suppress that 6636if [ "$bsd" = "yes" ] ; then 6637 echo "CONFIG_BSD=y" >> $config_host_mak 6638fi 6639 6640if test "$localtime_r" = "yes" ; then 6641 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 6642fi 6643if test "$qom_cast_debug" = "yes" ; then 6644 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 6645fi 6646if test "$rbd" = "yes" ; then 6647 echo "CONFIG_RBD=m" >> $config_host_mak 6648 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 6649 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 6650fi 6651 6652echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 6653if test "$coroutine_pool" = "yes" ; then 6654 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 6655else 6656 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 6657fi 6658 6659if test "$debug_stack_usage" = "yes" ; then 6660 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 6661fi 6662 6663if test "$crypto_afalg" = "yes" ; then 6664 echo "CONFIG_AF_ALG=y" >> $config_host_mak 6665fi 6666 6667if test "$open_by_handle_at" = "yes" ; then 6668 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 6669fi 6670 6671if test "$linux_magic_h" = "yes" ; then 6672 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 6673fi 6674 6675if test "$pragma_diagnostic_available" = "yes" ; then 6676 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 6677fi 6678 6679if test "$valgrind_h" = "yes" ; then 6680 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 6681fi 6682 6683if test "$have_asan_iface_fiber" = "yes" ; then 6684 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 6685fi 6686 6687if test "$has_environ" = "yes" ; then 6688 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 6689fi 6690 6691if test "$cpuid_h" = "yes" ; then 6692 echo "CONFIG_CPUID_H=y" >> $config_host_mak 6693fi 6694 6695if test "$int128" = "yes" ; then 6696 echo "CONFIG_INT128=y" >> $config_host_mak 6697fi 6698 6699if test "$atomic128" = "yes" ; then 6700 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 6701fi 6702 6703if test "$atomic64" = "yes" ; then 6704 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 6705fi 6706 6707if test "$vector16" = "yes" ; then 6708 echo "CONFIG_VECTOR16=y" >> $config_host_mak 6709fi 6710 6711if test "$getauxval" = "yes" ; then 6712 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 6713fi 6714 6715if test "$glusterfs" = "yes" ; then 6716 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 6717 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 6718 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 6719fi 6720 6721if test "$glusterfs_xlator_opt" = "yes" ; then 6722 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 6723fi 6724 6725if test "$glusterfs_discard" = "yes" ; then 6726 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 6727fi 6728 6729if test "$glusterfs_fallocate" = "yes" ; then 6730 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 6731fi 6732 6733if test "$glusterfs_zerofill" = "yes" ; then 6734 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 6735fi 6736 6737if test "$libssh2" = "yes" ; then 6738 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 6739 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 6740 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 6741fi 6742 6743if test "$live_block_migration" = "yes" ; then 6744 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 6745fi 6746 6747if test "$tpm" = "yes"; then 6748 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 6749 # TPM passthrough support? 6750 if test "$tpm_passthrough" = "yes"; then 6751 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 6752 fi 6753 # TPM emulator support? 6754 if test "$tpm_emulator" = "yes"; then 6755 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak 6756 fi 6757fi 6758 6759echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 6760if have_backend "nop"; then 6761 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 6762fi 6763if have_backend "simple"; then 6764 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 6765 # Set the appropriate trace file. 6766 trace_file="\"$trace_file-\" FMT_pid" 6767fi 6768if have_backend "log"; then 6769 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 6770fi 6771if have_backend "ust"; then 6772 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6773fi 6774if have_backend "dtrace"; then 6775 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 6776 if test "$trace_backend_stap" = "yes" ; then 6777 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 6778 fi 6779fi 6780if have_backend "ftrace"; then 6781 if test "$linux" = "yes" ; then 6782 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6783 else 6784 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6785 fi 6786fi 6787if have_backend "syslog"; then 6788 if test "$posix_syslog" = "yes" ; then 6789 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 6790 else 6791 feature_not_found "syslog(trace backend)" "syslog not available" 6792 fi 6793fi 6794echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 6795 6796if test "$rdma" = "yes" ; then 6797 echo "CONFIG_RDMA=y" >> $config_host_mak 6798 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 6799fi 6800 6801if test "$pvrdma" = "yes" ; then 6802 echo "CONFIG_PVRDMA=y" >> $config_host_mak 6803fi 6804 6805if test "$have_rtnetlink" = "yes" ; then 6806 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6807fi 6808 6809if test "$libxml2" = "yes" ; then 6810 echo "CONFIG_LIBXML2=y" >> $config_host_mak 6811 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 6812 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 6813fi 6814 6815if test "$replication" = "yes" ; then 6816 echo "CONFIG_REPLICATION=y" >> $config_host_mak 6817fi 6818 6819if test "$have_af_vsock" = "yes" ; then 6820 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 6821fi 6822 6823if test "$have_sysmacros" = "yes" ; then 6824 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 6825fi 6826 6827if test "$have_static_assert" = "yes" ; then 6828 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 6829fi 6830 6831if test "$have_utmpx" = "yes" ; then 6832 echo "HAVE_UTMPX=y" >> $config_host_mak 6833fi 6834 6835if test "$ivshmem" = "yes" ; then 6836 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6837fi 6838if test "$capstone" != "no" ; then 6839 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 6840fi 6841if test "$debug_mutex" = "yes" ; then 6842 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 6843fi 6844 6845# Hold two types of flag: 6846# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6847# a thread we have a handle to 6848# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 6849# platform 6850if test "$pthread_setname_np" = "yes" ; then 6851 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6852 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 6853fi 6854 6855if test "$vxhs" = "yes" ; then 6856 echo "CONFIG_VXHS=y" >> $config_host_mak 6857 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 6858fi 6859 6860if test "$libpmem" = "yes" ; then 6861 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 6862fi 6863 6864if test "$tcg_interpreter" = "yes"; then 6865 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 6866elif test "$ARCH" = "sparc64" ; then 6867 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 6868elif test "$ARCH" = "s390x" ; then 6869 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 6870elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 6871 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 6872elif test "$ARCH" = "ppc64" ; then 6873 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 6874else 6875 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 6876fi 6877QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES" 6878 6879echo "TOOLS=$tools" >> $config_host_mak 6880echo "ROMS=$roms" >> $config_host_mak 6881echo "MAKE=$make" >> $config_host_mak 6882echo "INSTALL=$install" >> $config_host_mak 6883echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 6884echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 6885echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 6886echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 6887echo "PYTHON=$python" >> $config_host_mak 6888echo "CC=$cc" >> $config_host_mak 6889if $iasl -h > /dev/null 2>&1; then 6890 echo "IASL=$iasl" >> $config_host_mak 6891fi 6892echo "HOST_CC=$host_cc" >> $config_host_mak 6893echo "CXX=$cxx" >> $config_host_mak 6894echo "OBJCC=$objcc" >> $config_host_mak 6895echo "AR=$ar" >> $config_host_mak 6896echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6897echo "AS=$as" >> $config_host_mak 6898echo "CCAS=$ccas" >> $config_host_mak 6899echo "CPP=$cpp" >> $config_host_mak 6900echo "OBJCOPY=$objcopy" >> $config_host_mak 6901echo "LD=$ld" >> $config_host_mak 6902echo "RANLIB=$ranlib" >> $config_host_mak 6903echo "NM=$nm" >> $config_host_mak 6904echo "WINDRES=$windres" >> $config_host_mak 6905echo "CFLAGS=$CFLAGS" >> $config_host_mak 6906echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6907echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6908echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6909echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 6910if test "$sparse" = "yes" ; then 6911 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 6912 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 6913 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 6914 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 6915 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 6916fi 6917if test "$cross_prefix" != ""; then 6918 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 6919else 6920 echo "AUTOCONF_HOST := " >> $config_host_mak 6921fi 6922echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 6923echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 6924echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 6925echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 6926echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6927echo "LIBS+=$LIBS" >> $config_host_mak 6928echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 6929echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 6930echo "EXESUF=$EXESUF" >> $config_host_mak 6931echo "DSOSUF=$DSOSUF" >> $config_host_mak 6932echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 6933echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 6934echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6935echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6936echo "POD2MAN=$POD2MAN" >> $config_host_mak 6937echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 6938if test "$gcov" = "yes" ; then 6939 echo "CONFIG_GCOV=y" >> $config_host_mak 6940 echo "GCOV=$gcov_tool" >> $config_host_mak 6941fi 6942 6943if test "$docker" != "no"; then 6944 echo "HAVE_USER_DOCKER=y" >> $config_host_mak 6945fi 6946 6947# use included Linux headers 6948if test "$linux" = "yes" ; then 6949 mkdir -p linux-headers 6950 case "$cpu" in 6951 i386|x86_64|x32) 6952 linux_arch=x86 6953 ;; 6954 ppcemb|ppc|ppc64) 6955 linux_arch=powerpc 6956 ;; 6957 s390x) 6958 linux_arch=s390 6959 ;; 6960 aarch64) 6961 linux_arch=arm64 6962 ;; 6963 mips64) 6964 linux_arch=mips 6965 ;; 6966 *) 6967 # For most CPUs the kernel architecture name and QEMU CPU name match. 6968 linux_arch="$cpu" 6969 ;; 6970 esac 6971 # For non-KVM architectures we will not have asm headers 6972 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 6973 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 6974 fi 6975fi 6976 6977for target in $target_list; do 6978target_dir="$target" 6979config_target_mak=$target_dir/config-target.mak 6980target_name=$(echo $target | cut -d '-' -f 1) 6981target_bigendian="no" 6982 6983case "$target_name" in 6984 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 6985 target_bigendian=yes 6986 ;; 6987esac 6988target_softmmu="no" 6989target_user_only="no" 6990target_linux_user="no" 6991target_bsd_user="no" 6992case "$target" in 6993 ${target_name}-softmmu) 6994 target_softmmu="yes" 6995 ;; 6996 ${target_name}-linux-user) 6997 target_user_only="yes" 6998 target_linux_user="yes" 6999 ;; 7000 ${target_name}-bsd-user) 7001 target_user_only="yes" 7002 target_bsd_user="yes" 7003 ;; 7004 *) 7005 error_exit "Target '$target' not recognised" 7006 exit 1 7007 ;; 7008esac 7009 7010target_compiler="" 7011target_compiler_static="" 7012target_compiler_cflags="" 7013 7014mkdir -p $target_dir 7015echo "# Automatically generated by configure - do not modify" > $config_target_mak 7016 7017bflt="no" 7018mttcg="no" 7019interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7020gdb_xml_files="" 7021 7022TARGET_ARCH="$target_name" 7023TARGET_BASE_ARCH="" 7024TARGET_ABI_DIR="" 7025 7026case "$target_name" in 7027 i386) 7028 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml" 7029 target_compiler=$cross_cc_i386 7030 target_compiler_cflags=$cross_cc_ccflags_i386 7031 ;; 7032 x86_64) 7033 TARGET_BASE_ARCH=i386 7034 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml" 7035 target_compiler=$cross_cc_x86_64 7036 ;; 7037 alpha) 7038 mttcg="yes" 7039 target_compiler=$cross_cc_alpha 7040 ;; 7041 arm|armeb) 7042 TARGET_ARCH=arm 7043 bflt="yes" 7044 mttcg="yes" 7045 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7046 target_compiler=$cross_cc_arm 7047 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7048 ;; 7049 aarch64|aarch64_be) 7050 TARGET_ARCH=aarch64 7051 TARGET_BASE_ARCH=arm 7052 bflt="yes" 7053 mttcg="yes" 7054 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7055 target_compiler=$cross_cc_aarch64 7056 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7057 ;; 7058 cris) 7059 target_compiler=$cross_cc_cris 7060 ;; 7061 hppa) 7062 mttcg="yes" 7063 target_compiler=$cross_cc_hppa 7064 ;; 7065 lm32) 7066 target_compiler=$cross_cc_lm32 7067 ;; 7068 m68k) 7069 bflt="yes" 7070 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 7071 target_compiler=$cross_cc_m68k 7072 ;; 7073 microblaze|microblazeel) 7074 TARGET_ARCH=microblaze 7075 bflt="yes" 7076 echo "TARGET_ABI32=y" >> $config_target_mak 7077 target_compiler=$cross_cc_microblaze 7078 ;; 7079 mips|mipsel) 7080 TARGET_ARCH=mips 7081 target_compiler=$cross_cc_mips 7082 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7083 ;; 7084 mipsn32|mipsn32el) 7085 TARGET_ARCH=mips64 7086 TARGET_BASE_ARCH=mips 7087 target_compiler=$cross_cc_mipsn32 7088 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7089 echo "TARGET_ABI32=y" >> $config_target_mak 7090 ;; 7091 mips64|mips64el) 7092 TARGET_ARCH=mips64 7093 TARGET_BASE_ARCH=mips 7094 target_compiler=$cross_cc_mips64 7095 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7096 ;; 7097 moxie) 7098 target_compiler=$cross_cc_moxie 7099 ;; 7100 nios2) 7101 target_compiler=$cross_cc_nios2 7102 ;; 7103 or1k) 7104 target_compiler=$cross_cc_or1k 7105 TARGET_ARCH=openrisc 7106 TARGET_BASE_ARCH=openrisc 7107 ;; 7108 ppc) 7109 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7110 target_compiler=$cross_cc_powerpc 7111 ;; 7112 ppcemb) 7113 TARGET_BASE_ARCH=ppc 7114 TARGET_ABI_DIR=ppc 7115 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7116 target_compiler=$cross_cc_ppcemb 7117 ;; 7118 ppc64) 7119 TARGET_BASE_ARCH=ppc 7120 TARGET_ABI_DIR=ppc 7121 mttcg=yes 7122 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7123 target_compiler=$cross_cc_ppc64 7124 ;; 7125 ppc64le) 7126 TARGET_ARCH=ppc64 7127 TARGET_BASE_ARCH=ppc 7128 TARGET_ABI_DIR=ppc 7129 mttcg=yes 7130 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7131 target_compiler=$cross_cc_ppc64le 7132 ;; 7133 ppc64abi32) 7134 TARGET_ARCH=ppc64 7135 TARGET_BASE_ARCH=ppc 7136 TARGET_ABI_DIR=ppc 7137 echo "TARGET_ABI32=y" >> $config_target_mak 7138 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7139 target_compiler=$cross_cc_ppc64abi32 7140 ;; 7141 riscv32) 7142 TARGET_BASE_ARCH=riscv 7143 TARGET_ABI_DIR=riscv 7144 mttcg=yes 7145 target_compiler=$cross_cc_riscv32 7146 ;; 7147 riscv64) 7148 TARGET_BASE_ARCH=riscv 7149 TARGET_ABI_DIR=riscv 7150 mttcg=yes 7151 target_compiler=$cross_cc_riscv64 7152 ;; 7153 sh4|sh4eb) 7154 TARGET_ARCH=sh4 7155 bflt="yes" 7156 target_compiler=$cross_cc_sh4 7157 ;; 7158 sparc) 7159 target_compiler=$cross_cc_sparc 7160 ;; 7161 sparc64) 7162 TARGET_BASE_ARCH=sparc 7163 target_compiler=$cross_cc_sparc64 7164 ;; 7165 sparc32plus) 7166 TARGET_ARCH=sparc64 7167 TARGET_BASE_ARCH=sparc 7168 TARGET_ABI_DIR=sparc 7169 target_compiler=$cross_cc_sparc32plus 7170 echo "TARGET_ABI32=y" >> $config_target_mak 7171 ;; 7172 s390x) 7173 mttcg=yes 7174 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7175 target_compiler=$cross_cc_s390x 7176 ;; 7177 tilegx) 7178 target_compiler=$cross_cc_tilegx 7179 ;; 7180 tricore) 7181 target_compiler=$cross_cc_tricore 7182 ;; 7183 unicore32) 7184 target_compiler=$cross_cc_unicore32 7185 ;; 7186 xtensa|xtensaeb) 7187 TARGET_ARCH=xtensa 7188 mttcg="yes" 7189 target_compiler=$cross_cc_xtensa 7190 ;; 7191 *) 7192 error_exit "Unsupported target CPU" 7193 ;; 7194esac 7195# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7196if [ "$TARGET_BASE_ARCH" = "" ]; then 7197 TARGET_BASE_ARCH=$TARGET_ARCH 7198fi 7199 7200# Do we have a cross compiler for this target? 7201if has $target_compiler; then 7202 7203 write_c_skeleton 7204 7205 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then 7206 # For host systems we might get away with building without -static 7207 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then 7208 target_compiler="" 7209 else 7210 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7211 target_compiler_static="n" 7212 fi 7213 else 7214 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7215 target_compiler_static="y" 7216 fi 7217else 7218 target_compiler="" 7219fi 7220 7221symlink "$source_path/Makefile.target" "$target_dir/Makefile" 7222 7223upper() { 7224 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7225} 7226 7227target_arch_name="$(upper $TARGET_ARCH)" 7228echo "TARGET_$target_arch_name=y" >> $config_target_mak 7229echo "TARGET_NAME=$target_name" >> $config_target_mak 7230echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7231if [ "$TARGET_ABI_DIR" = "" ]; then 7232 TARGET_ABI_DIR=$TARGET_ARCH 7233fi 7234echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7235if [ "$HOST_VARIANT_DIR" != "" ]; then 7236 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7237fi 7238 7239if supported_xen_target $target; then 7240 echo "CONFIG_XEN=y" >> $config_target_mak 7241 if test "$xen_pci_passthrough" = yes; then 7242 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7243 fi 7244fi 7245if supported_kvm_target $target; then 7246 echo "CONFIG_KVM=y" >> $config_target_mak 7247 if test "$vhost_net" = "yes" ; then 7248 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 7249 if test "$vhost_user" = "yes" ; then 7250 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak 7251 fi 7252 fi 7253fi 7254if supported_hax_target $target; then 7255 echo "CONFIG_HAX=y" >> $config_target_mak 7256fi 7257if supported_hvf_target $target; then 7258 echo "CONFIG_HVF=y" >> $config_target_mak 7259fi 7260if supported_whpx_target $target; then 7261 echo "CONFIG_WHPX=y" >> $config_target_mak 7262fi 7263if test "$target_bigendian" = "yes" ; then 7264 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7265fi 7266if test "$target_softmmu" = "yes" ; then 7267 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7268 if test "$mttcg" = "yes" ; then 7269 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7270 fi 7271fi 7272if test "$target_user_only" = "yes" ; then 7273 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7274 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7275fi 7276if test "$target_linux_user" = "yes" ; then 7277 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7278fi 7279list="" 7280if test ! -z "$gdb_xml_files" ; then 7281 for x in $gdb_xml_files; do 7282 list="$list $source_path/gdb-xml/$x" 7283 done 7284 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7285fi 7286 7287if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 7288 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7289fi 7290if test "$target_bsd_user" = "yes" ; then 7291 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7292fi 7293 7294if test -n "$target_compiler"; then 7295 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak 7296 7297 if test -n "$target_compiler_static"; then 7298 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak 7299 fi 7300 7301 if test -n "$target_compiler_cflags"; then 7302 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak 7303 fi 7304fi 7305 7306 7307# generate QEMU_CFLAGS/LDFLAGS for targets 7308 7309cflags="" 7310ldflags="" 7311 7312disas_config() { 7313 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7314 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7315} 7316 7317for i in $ARCH $TARGET_BASE_ARCH ; do 7318 case "$i" in 7319 alpha) 7320 disas_config "ALPHA" 7321 ;; 7322 aarch64) 7323 if test -n "${cxx}"; then 7324 disas_config "ARM_A64" 7325 fi 7326 ;; 7327 arm) 7328 disas_config "ARM" 7329 if test -n "${cxx}"; then 7330 disas_config "ARM_A64" 7331 fi 7332 ;; 7333 cris) 7334 disas_config "CRIS" 7335 ;; 7336 hppa) 7337 disas_config "HPPA" 7338 ;; 7339 i386|x86_64|x32) 7340 disas_config "I386" 7341 ;; 7342 lm32) 7343 disas_config "LM32" 7344 ;; 7345 m68k) 7346 disas_config "M68K" 7347 ;; 7348 microblaze*) 7349 disas_config "MICROBLAZE" 7350 ;; 7351 mips*) 7352 disas_config "MIPS" 7353 ;; 7354 moxie*) 7355 disas_config "MOXIE" 7356 ;; 7357 nios2) 7358 disas_config "NIOS2" 7359 ;; 7360 or1k) 7361 disas_config "OPENRISC" 7362 ;; 7363 ppc*) 7364 disas_config "PPC" 7365 ;; 7366 riscv) 7367 disas_config "RISCV" 7368 ;; 7369 s390*) 7370 disas_config "S390" 7371 ;; 7372 sh4) 7373 disas_config "SH4" 7374 ;; 7375 sparc*) 7376 disas_config "SPARC" 7377 ;; 7378 xtensa*) 7379 disas_config "XTENSA" 7380 ;; 7381 esac 7382done 7383if test "$tcg_interpreter" = "yes" ; then 7384 disas_config "TCI" 7385fi 7386 7387case "$ARCH" in 7388alpha) 7389 # Ensure there's only a single GP 7390 cflags="-msmall-data $cflags" 7391;; 7392esac 7393 7394if test "$gprof" = "yes" ; then 7395 echo "TARGET_GPROF=yes" >> $config_target_mak 7396 if test "$target_linux_user" = "yes" ; then 7397 cflags="-p $cflags" 7398 ldflags="-p $ldflags" 7399 fi 7400 if test "$target_softmmu" = "yes" ; then 7401 ldflags="-p $ldflags" 7402 echo "GPROF_CFLAGS=-p" >> $config_target_mak 7403 fi 7404fi 7405 7406if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 7407 ldflags="$ldflags $textseg_ldflags" 7408fi 7409 7410# Newer kernels on s390 check for an S390_PGSTE program header and 7411# enable the pgste page table extensions in that case. This makes 7412# the vm.allocate_pgste sysctl unnecessary. We enable this program 7413# header if 7414# - we build on s390x 7415# - we build the system emulation for s390x (qemu-system-s390x) 7416# - KVM is enabled 7417# - the linker supports --s390-pgste 7418if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then 7419 if ld_has --s390-pgste ; then 7420 ldflags="-Wl,--s390-pgste $ldflags" 7421 fi 7422fi 7423 7424echo "LDFLAGS+=$ldflags" >> $config_target_mak 7425echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 7426 7427done # for target in $targets 7428 7429if test -n "$enabled_cross_compilers"; then 7430 echo 7431 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers" 7432fi 7433 7434if [ "$fdt" = "git" ]; then 7435 echo "config-host.h: subdir-dtc" >> $config_host_mak 7436fi 7437if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7438 echo "config-host.h: subdir-capstone" >> $config_host_mak 7439fi 7440if test -n "$LIBCAPSTONE"; then 7441 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7442fi 7443 7444if test "$numa" = "yes"; then 7445 echo "CONFIG_NUMA=y" >> $config_host_mak 7446fi 7447 7448if test "$ccache_cpp2" = "yes"; then 7449 echo "export CCACHE_CPP2=y" >> $config_host_mak 7450fi 7451 7452# build tree in object directory in case the source is not in the current directory 7453DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm" 7454DIRS="$DIRS docs docs/interop fsdev scsi" 7455DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 7456DIRS="$DIRS roms/seabios roms/vgabios" 7457FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 7458FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 7459FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 7460FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 7461FILES="$FILES pc-bios/spapr-rtas/Makefile" 7462FILES="$FILES pc-bios/s390-ccw/Makefile" 7463FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 7464FILES="$FILES pc-bios/qemu-icon.bmp" 7465FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit 7466for bios_file in \ 7467 $source_path/pc-bios/*.bin \ 7468 $source_path/pc-bios/*.lid \ 7469 $source_path/pc-bios/*.aml \ 7470 $source_path/pc-bios/*.rom \ 7471 $source_path/pc-bios/*.dtb \ 7472 $source_path/pc-bios/*.img \ 7473 $source_path/pc-bios/openbios-* \ 7474 $source_path/pc-bios/u-boot.* \ 7475 $source_path/pc-bios/palcode-* 7476do 7477 FILES="$FILES pc-bios/$(basename $bios_file)" 7478done 7479for test_file in $(find $source_path/tests/acpi-test-data -type f) 7480do 7481 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')" 7482done 7483for test_file in $(find $source_path/tests/hex-loader-check-data -type f) 7484do 7485 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')" 7486done 7487mkdir -p $DIRS 7488for f in $FILES ; do 7489 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 7490 symlink "$source_path/$f" "$f" 7491 fi 7492done 7493 7494# temporary config to build submodules 7495for rom in seabios vgabios ; do 7496 config_mak=roms/$rom/config.mak 7497 echo "# Automatically generated by configure - do not modify" > $config_mak 7498 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7499 echo "AS=$as" >> $config_mak 7500 echo "CCAS=$ccas" >> $config_mak 7501 echo "CC=$cc" >> $config_mak 7502 echo "BCC=bcc" >> $config_mak 7503 echo "CPP=$cpp" >> $config_mak 7504 echo "OBJCOPY=objcopy" >> $config_mak 7505 echo "IASL=$iasl" >> $config_mak 7506 echo "LD=$ld" >> $config_mak 7507 echo "RANLIB=$ranlib" >> $config_mak 7508done 7509 7510# set up tests data directory 7511for tests_subdir in acceptance data; do 7512 if [ ! -e tests/$tests_subdir ]; then 7513 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir 7514 fi 7515done 7516 7517# set up qemu-iotests in this build directory 7518iotests_common_env="tests/qemu-iotests/common.env" 7519iotests_check="tests/qemu-iotests/check" 7520 7521echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 7522echo >> "$iotests_common_env" 7523echo "export PYTHON='$python'" >> "$iotests_common_env" 7524 7525if [ ! -e "$iotests_check" ]; then 7526 symlink "$source_path/$iotests_check" "$iotests_check" 7527fi 7528 7529# Save the configure command line for later reuse. 7530cat <<EOD >config.status 7531#!/bin/sh 7532# Generated by configure. 7533# Run this file to recreate the current configuration. 7534# Compiler output produced by configure, useful for debugging 7535# configure, is in config.log if it exists. 7536EOD 7537printf "exec" >>config.status 7538printf " '%s'" "$0" "$@" >>config.status 7539echo ' "$@"' >>config.status 7540chmod +x config.status 7541 7542rm -r "$TMPDIR1" 7543