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