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