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) $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 5724fi 5725if test "$softmmu" = yes ; then 5726 if test "$linux" = yes; then 5727 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then 5728 virtfs=yes 5729 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 5730 else 5731 if test "$virtfs" = yes; then 5732 error_exit "VirtFS requires libcap devel and libattr devel" 5733 fi 5734 virtfs=no 5735 fi 5736 if test "$mpath" != no && test "$mpathpersist" = yes ; then 5737 mpath=yes 5738 else 5739 if test "$mpath" = yes; then 5740 error_exit "Multipath requires libmpathpersist devel" 5741 fi 5742 mpath=no 5743 fi 5744 tools="$tools scsi/qemu-pr-helper\$(EXESUF)" 5745 else 5746 if test "$virtfs" = yes; then 5747 error_exit "VirtFS is supported only on Linux" 5748 fi 5749 virtfs=no 5750 if test "$mpath" = yes; then 5751 error_exit "Multipath is supported only on Linux" 5752 fi 5753 mpath=no 5754 fi 5755 if test "$xkbcommon" = "yes"; then 5756 tools="qemu-keymap\$(EXESUF) $tools" 5757 fi 5758fi 5759 5760# Probe for guest agent support/options 5761 5762if [ "$guest_agent" != "no" ]; then 5763 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5764 tools="qemu-ga $tools" 5765 guest_agent=yes 5766 elif [ "$guest_agent" != yes ]; then 5767 guest_agent=no 5768 else 5769 error_exit "Guest agent is not supported on this platform" 5770 fi 5771fi 5772 5773# Guest agent Window MSI package 5774 5775if test "$guest_agent" != yes; then 5776 if test "$guest_agent_msi" = yes; then 5777 error_exit "MSI guest agent package requires guest agent enabled" 5778 fi 5779 guest_agent_msi=no 5780elif test "$mingw32" != "yes"; then 5781 if test "$guest_agent_msi" = "yes"; then 5782 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 5783 fi 5784 guest_agent_msi=no 5785elif ! has wixl; then 5786 if test "$guest_agent_msi" = "yes"; then 5787 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 5788 fi 5789 guest_agent_msi=no 5790else 5791 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 5792 # disabled explicitly 5793 if test "$guest_agent_msi" != "no"; then 5794 guest_agent_msi=yes 5795 fi 5796fi 5797 5798if test "$guest_agent_msi" = "yes"; then 5799 if test "$guest_agent_with_vss" = "yes"; then 5800 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 5801 fi 5802 5803 if test "$QEMU_GA_MANUFACTURER" = ""; then 5804 QEMU_GA_MANUFACTURER=QEMU 5805 fi 5806 5807 if test "$QEMU_GA_DISTRO" = ""; then 5808 QEMU_GA_DISTRO=Linux 5809 fi 5810 5811 if test "$QEMU_GA_VERSION" = ""; then 5812 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5813 fi 5814 5815 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5816 5817 case "$cpu" in 5818 x86_64) 5819 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5820 ;; 5821 i386) 5822 QEMU_GA_MSI_ARCH="-D Arch=32" 5823 ;; 5824 *) 5825 error_exit "CPU $cpu not supported for building installation package" 5826 ;; 5827 esac 5828fi 5829 5830# Mac OS X ships with a broken assembler 5831roms= 5832if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 5833 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 5834 "$softmmu" = yes ; then 5835 # Different host OS linkers have different ideas about the name of the ELF 5836 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5837 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5838 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5839 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5840 ld_i386_emulation="$emu" 5841 roms="optionrom" 5842 break 5843 fi 5844 done 5845fi 5846if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 5847 roms="$roms spapr-rtas" 5848fi 5849 5850if test "$cpu" = "s390x" ; then 5851 roms="$roms s390-ccw" 5852fi 5853 5854# Probe for the need for relocating the user-only binary. 5855if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 5856 textseg_addr= 5857 case "$cpu" in 5858 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 5859 # ??? Rationale for choosing this address 5860 textseg_addr=0x60000000 5861 ;; 5862 mips) 5863 # A 256M aligned address, high in the address space, with enough 5864 # room for the code_gen_buffer above it before the stack. 5865 textseg_addr=0x60000000 5866 ;; 5867 esac 5868 if [ -n "$textseg_addr" ]; then 5869 cat > $TMPC <<EOF 5870 int main(void) { return 0; } 5871EOF 5872 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 5873 if ! compile_prog "" "$textseg_ldflags"; then 5874 # In case ld does not support -Ttext-segment, edit the default linker 5875 # script via sed to set the .text start addr. This is needed on FreeBSD 5876 # at least. 5877 if ! $ld --verbose >/dev/null 2>&1; then 5878 error_exit \ 5879 "We need to link the QEMU user mode binaries at a" \ 5880 "specific text address. Unfortunately your linker" \ 5881 "doesn't support either the -Ttext-segment option or" \ 5882 "printing the default linker script with --verbose." \ 5883 "If you don't want the user mode binaries, pass the" \ 5884 "--disable-user option to configure." 5885 fi 5886 5887 $ld --verbose | sed \ 5888 -e '1,/==================================================/d' \ 5889 -e '/==================================================/,$d' \ 5890 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 5891 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 5892 textseg_ldflags="-Wl,-T../config-host.ld" 5893 fi 5894 fi 5895fi 5896 5897# Check that the C++ compiler exists and works with the C compiler. 5898# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5899if has $cxx; then 5900 cat > $TMPC <<EOF 5901int c_function(void); 5902int main(void) { return c_function(); } 5903EOF 5904 5905 compile_object 5906 5907 cat > $TMPCXX <<EOF 5908extern "C" { 5909 int c_function(void); 5910} 5911int c_function(void) { return 42; } 5912EOF 5913 5914 update_cxxflags 5915 5916 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then 5917 # C++ compiler $cxx works ok with C compiler $cc 5918 : 5919 else 5920 echo "C++ compiler $cxx does not work with C compiler $cc" 5921 echo "Disabling C++ specific optional code" 5922 cxx= 5923 fi 5924else 5925 echo "No C++ compiler available; disabling C++ specific optional code" 5926 cxx= 5927fi 5928 5929echo_version() { 5930 if test "$1" = "yes" ; then 5931 echo "($2)" 5932 fi 5933} 5934 5935# prepend pixman and ftd flags after all config tests are done 5936QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 5937QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 5938libs_softmmu="$pixman_libs $libs_softmmu" 5939 5940echo "Install prefix $prefix" 5941echo "BIOS directory $(eval echo $qemu_datadir)" 5942echo "firmware path $(eval echo $firmwarepath)" 5943echo "binary directory $(eval echo $bindir)" 5944echo "library directory $(eval echo $libdir)" 5945echo "module directory $(eval echo $qemu_moddir)" 5946echo "libexec directory $(eval echo $libexecdir)" 5947echo "include directory $(eval echo $includedir)" 5948echo "config directory $(eval echo $sysconfdir)" 5949if test "$mingw32" = "no" ; then 5950echo "local state directory $(eval echo $local_statedir)" 5951echo "Manual directory $(eval echo $mandir)" 5952echo "ELF interp prefix $interp_prefix" 5953else 5954echo "local state directory queried at runtime" 5955echo "Windows SDK $win_sdk" 5956fi 5957echo "Source path $source_path" 5958echo "GIT binary $git" 5959echo "GIT submodules $git_submodules" 5960echo "C compiler $cc" 5961echo "Host C compiler $host_cc" 5962echo "C++ compiler $cxx" 5963echo "Objective-C compiler $objcc" 5964echo "ARFLAGS $ARFLAGS" 5965echo "CFLAGS $CFLAGS" 5966echo "QEMU_CFLAGS $QEMU_CFLAGS" 5967echo "LDFLAGS $LDFLAGS" 5968echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 5969echo "make $make" 5970echo "install $install" 5971echo "python $python" 5972if test "$slirp" = "yes" ; then 5973 echo "smbd $smbd" 5974fi 5975echo "module support $modules" 5976echo "host CPU $cpu" 5977echo "host big endian $bigendian" 5978echo "target list $target_list" 5979echo "gprof enabled $gprof" 5980echo "sparse enabled $sparse" 5981echo "strip binaries $strip_opt" 5982echo "profiler $profiler" 5983echo "static build $static" 5984if test "$darwin" = "yes" ; then 5985 echo "Cocoa support $cocoa" 5986fi 5987echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 5988echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 5989echo "GTK GL support $gtk_gl" 5990echo "VTE support $vte $(echo_version $vte $vteversion)" 5991echo "TLS priority $tls_priority" 5992echo "GNUTLS support $gnutls" 5993echo "GNUTLS rnd $gnutls_rnd" 5994echo "libgcrypt $gcrypt" 5995echo "libgcrypt kdf $gcrypt_kdf" 5996echo "nettle $nettle $(echo_version $nettle $nettle_version)" 5997echo "nettle kdf $nettle_kdf" 5998echo "libtasn1 $tasn1" 5999echo "curses support $curses" 6000echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6001echo "curl support $curl" 6002echo "mingw32 support $mingw32" 6003echo "Audio drivers $audio_drv_list" 6004echo "Block whitelist (rw) $block_drv_rw_whitelist" 6005echo "Block whitelist (ro) $block_drv_ro_whitelist" 6006echo "VirtFS support $virtfs" 6007echo "Multipath support $mpath" 6008echo "VNC support $vnc" 6009if test "$vnc" = "yes" ; then 6010 echo "VNC SASL support $vnc_sasl" 6011 echo "VNC JPEG support $vnc_jpeg" 6012 echo "VNC PNG support $vnc_png" 6013fi 6014if test -n "$sparc_cpu"; then 6015 echo "Target Sparc Arch $sparc_cpu" 6016fi 6017echo "xen support $xen" 6018if test "$xen" = "yes" ; then 6019 echo "xen ctrl version $xen_ctrl_version" 6020 echo "pv dom build $xen_pv_domain_build" 6021fi 6022echo "brlapi support $brlapi" 6023echo "bluez support $bluez" 6024echo "Documentation $docs" 6025echo "PIE $pie" 6026echo "vde support $vde" 6027echo "netmap support $netmap" 6028echo "Linux AIO support $linux_aio" 6029echo "ATTR/XATTR support $attr" 6030echo "Install blobs $blobs" 6031echo "KVM support $kvm" 6032echo "HAX support $hax" 6033echo "HVF support $hvf" 6034echo "WHPX support $whpx" 6035echo "TCG support $tcg" 6036if test "$tcg" = "yes" ; then 6037 echo "TCG debug enabled $debug_tcg" 6038 echo "TCG interpreter $tcg_interpreter" 6039fi 6040echo "malloc trim support $malloc_trim" 6041echo "RDMA support $rdma" 6042echo "PVRDMA support $pvrdma" 6043echo "fdt support $fdt" 6044echo "membarrier $membarrier" 6045echo "preadv support $preadv" 6046echo "fdatasync $fdatasync" 6047echo "madvise $madvise" 6048echo "posix_madvise $posix_madvise" 6049echo "posix_memalign $posix_memalign" 6050echo "libcap-ng support $cap_ng" 6051echo "vhost-net support $vhost_net" 6052echo "vhost-crypto support $vhost_crypto" 6053echo "vhost-scsi support $vhost_scsi" 6054echo "vhost-vsock support $vhost_vsock" 6055echo "vhost-user support $vhost_user" 6056echo "Trace backends $trace_backends" 6057if have_backend "simple"; then 6058echo "Trace output file $trace_file-<pid>" 6059fi 6060echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6061echo "rbd support $rbd" 6062echo "xfsctl support $xfs" 6063echo "smartcard support $smartcard" 6064echo "libusb $libusb" 6065echo "usb net redir $usb_redir" 6066echo "OpenGL support $opengl" 6067echo "OpenGL dmabufs $opengl_dmabuf" 6068echo "libiscsi support $libiscsi" 6069echo "libnfs support $libnfs" 6070echo "build guest agent $guest_agent" 6071echo "QGA VSS support $guest_agent_with_vss" 6072echo "QGA w32 disk info $guest_agent_ntddscsi" 6073echo "QGA MSI support $guest_agent_msi" 6074echo "seccomp support $seccomp" 6075echo "coroutine backend $coroutine" 6076echo "coroutine pool $coroutine_pool" 6077echo "debug stack usage $debug_stack_usage" 6078echo "mutex debugging $debug_mutex" 6079echo "crypto afalg $crypto_afalg" 6080echo "GlusterFS support $glusterfs" 6081echo "gcov $gcov_tool" 6082echo "gcov enabled $gcov" 6083echo "TPM support $tpm" 6084echo "libssh2 support $libssh2" 6085echo "TPM passthrough $tpm_passthrough" 6086echo "TPM emulator $tpm_emulator" 6087echo "QOM debugging $qom_cast_debug" 6088echo "Live block migration $live_block_migration" 6089echo "lzo support $lzo" 6090echo "snappy support $snappy" 6091echo "bzip2 support $bzip2" 6092echo "NUMA host support $numa" 6093echo "libxml2 $libxml2" 6094echo "tcmalloc support $tcmalloc" 6095echo "jemalloc support $jemalloc" 6096echo "avx2 optimization $avx2_opt" 6097echo "replication support $replication" 6098echo "VxHS block device $vxhs" 6099echo "capstone $capstone" 6100echo "docker $docker" 6101echo "libpmem support $libpmem" 6102 6103if test "$sdl_too_old" = "yes"; then 6104echo "-> Your SDL version is too old - please upgrade to have SDL support" 6105fi 6106 6107if test "$gtkabi" = "2.0"; then 6108 echo 6109 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in" 6110 echo "WARNING: future releases. Please switch to using GTK 3.0" 6111fi 6112 6113if test "$sdlabi" = "1.2"; then 6114 echo 6115 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in" 6116 echo "WARNING: future releases. Please switch to using SDL 2.0" 6117fi 6118 6119if test "$supported_cpu" = "no"; then 6120 echo 6121 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 6122 echo 6123 echo "CPU host architecture $cpu support is not currently maintained." 6124 echo "The QEMU project intends to remove support for this host CPU in" 6125 echo "a future release if nobody volunteers to maintain it and to" 6126 echo "provide a build host for our continuous integration setup." 6127 echo "configure has succeeded and you can continue to build, but" 6128 echo "if you care about QEMU on this platform you should contact" 6129 echo "us upstream at qemu-devel@nongnu.org." 6130fi 6131 6132if test "$supported_os" = "no"; then 6133 echo 6134 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 6135 echo 6136 echo "Host OS $targetos support is not currently maintained." 6137 echo "The QEMU project intends to remove support for this host OS in" 6138 echo "a future release if nobody volunteers to maintain it and to" 6139 echo "provide a build host for our continuous integration setup." 6140 echo "configure has succeeded and you can continue to build, but" 6141 echo "if you care about QEMU on this platform you should contact" 6142 echo "us upstream at qemu-devel@nongnu.org." 6143fi 6144 6145config_host_mak="config-host.mak" 6146 6147echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6148 6149echo "# Automatically generated by configure - do not modify" > $config_host_mak 6150echo >> $config_host_mak 6151 6152echo all: >> $config_host_mak 6153echo "prefix=$prefix" >> $config_host_mak 6154echo "bindir=$bindir" >> $config_host_mak 6155echo "libdir=$libdir" >> $config_host_mak 6156echo "libexecdir=$libexecdir" >> $config_host_mak 6157echo "includedir=$includedir" >> $config_host_mak 6158echo "mandir=$mandir" >> $config_host_mak 6159echo "sysconfdir=$sysconfdir" >> $config_host_mak 6160echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6161echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6162echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6163echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6164echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6165if test "$mingw32" = "no" ; then 6166 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6167fi 6168echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6169echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6170echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6171echo "GIT=$git" >> $config_host_mak 6172echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6173echo "GIT_UPDATE=$git_update" >> $config_host_mak 6174 6175echo "ARCH=$ARCH" >> $config_host_mak 6176 6177if test "$debug_tcg" = "yes" ; then 6178 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6179fi 6180if test "$strip_opt" = "yes" ; then 6181 echo "STRIP=${strip}" >> $config_host_mak 6182fi 6183if test "$bigendian" = "yes" ; then 6184 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6185fi 6186if test "$mingw32" = "yes" ; then 6187 echo "CONFIG_WIN32=y" >> $config_host_mak 6188 rc_version=$(cat $source_path/VERSION) 6189 version_major=${rc_version%%.*} 6190 rc_version=${rc_version#*.} 6191 version_minor=${rc_version%%.*} 6192 rc_version=${rc_version#*.} 6193 version_subminor=${rc_version%%.*} 6194 version_micro=0 6195 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6196 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6197 if test "$guest_agent_with_vss" = "yes" ; then 6198 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6199 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6200 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6201 fi 6202 if test "$guest_agent_ntddscsi" = "yes" ; then 6203 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 6204 fi 6205 if test "$guest_agent_msi" = "yes"; then 6206 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6207 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6208 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6209 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6210 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6211 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6212 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6213 fi 6214else 6215 echo "CONFIG_POSIX=y" >> $config_host_mak 6216fi 6217 6218if test "$linux" = "yes" ; then 6219 echo "CONFIG_LINUX=y" >> $config_host_mak 6220fi 6221 6222if test "$darwin" = "yes" ; then 6223 echo "CONFIG_DARWIN=y" >> $config_host_mak 6224fi 6225 6226if test "$solaris" = "yes" ; then 6227 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6228fi 6229if test "$haiku" = "yes" ; then 6230 echo "CONFIG_HAIKU=y" >> $config_host_mak 6231fi 6232if test "$static" = "yes" ; then 6233 echo "CONFIG_STATIC=y" >> $config_host_mak 6234fi 6235if test "$profiler" = "yes" ; then 6236 echo "CONFIG_PROFILER=y" >> $config_host_mak 6237fi 6238if test "$slirp" = "yes" ; then 6239 echo "CONFIG_SLIRP=y" >> $config_host_mak 6240 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6241fi 6242if test "$vde" = "yes" ; then 6243 echo "CONFIG_VDE=y" >> $config_host_mak 6244 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6245fi 6246if test "$netmap" = "yes" ; then 6247 echo "CONFIG_NETMAP=y" >> $config_host_mak 6248fi 6249if test "$l2tpv3" = "yes" ; then 6250 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6251fi 6252if test "$cap_ng" = "yes" ; then 6253 echo "CONFIG_LIBCAP=y" >> $config_host_mak 6254fi 6255echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6256for drv in $audio_drv_list; do 6257 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6258 case "$drv" in 6259 alsa | oss | pa | sdl) 6260 echo "$def=m" >> $config_host_mak ;; 6261 *) 6262 echo "$def=y" >> $config_host_mak ;; 6263 esac 6264done 6265echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6266echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6267echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6268echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6269echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6270if test "$audio_pt_int" = "yes" ; then 6271 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 6272fi 6273if test "$audio_win_int" = "yes" ; then 6274 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6275fi 6276echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6277echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6278if test "$vnc" = "yes" ; then 6279 echo "CONFIG_VNC=y" >> $config_host_mak 6280fi 6281if test "$vnc_sasl" = "yes" ; then 6282 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6283fi 6284if test "$vnc_jpeg" = "yes" ; then 6285 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6286fi 6287if test "$vnc_png" = "yes" ; then 6288 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6289fi 6290if test "$xkbcommon" = "yes" ; then 6291 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6292 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6293fi 6294if test "$fnmatch" = "yes" ; then 6295 echo "CONFIG_FNMATCH=y" >> $config_host_mak 6296fi 6297if test "$xfs" = "yes" ; then 6298 echo "CONFIG_XFS=y" >> $config_host_mak 6299fi 6300qemu_version=$(head $source_path/VERSION) 6301echo "VERSION=$qemu_version" >>$config_host_mak 6302echo "PKGVERSION=$pkgversion" >>$config_host_mak 6303echo "SRC_PATH=$source_path" >> $config_host_mak 6304echo "TARGET_DIRS=$target_list" >> $config_host_mak 6305if [ "$docs" = "yes" ] ; then 6306 echo "BUILD_DOCS=yes" >> $config_host_mak 6307fi 6308if test "$modules" = "yes"; then 6309 # $shacmd can generate a hash started with digit, which the compiler doesn't 6310 # like as an symbol. So prefix it with an underscore 6311 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6312 echo "CONFIG_MODULES=y" >> $config_host_mak 6313fi 6314if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then 6315 echo "CONFIG_X11=y" >> $config_host_mak 6316 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6317 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6318fi 6319if test "$sdl" = "yes" ; then 6320 echo "CONFIG_SDL=m" >> $config_host_mak 6321 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 6322 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6323 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6324fi 6325if test "$cocoa" = "yes" ; then 6326 echo "CONFIG_COCOA=y" >> $config_host_mak 6327fi 6328if test "$curses" = "yes" ; then 6329 echo "CONFIG_CURSES=m" >> $config_host_mak 6330 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6331 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6332fi 6333if test "$pipe2" = "yes" ; then 6334 echo "CONFIG_PIPE2=y" >> $config_host_mak 6335fi 6336if test "$accept4" = "yes" ; then 6337 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6338fi 6339if test "$splice" = "yes" ; then 6340 echo "CONFIG_SPLICE=y" >> $config_host_mak 6341fi 6342if test "$eventfd" = "yes" ; then 6343 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6344fi 6345if test "$memfd" = "yes" ; then 6346 echo "CONFIG_MEMFD=y" >> $config_host_mak 6347fi 6348if test "$fallocate" = "yes" ; then 6349 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6350fi 6351if test "$fallocate_punch_hole" = "yes" ; then 6352 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6353fi 6354if test "$fallocate_zero_range" = "yes" ; then 6355 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6356fi 6357if test "$posix_fallocate" = "yes" ; then 6358 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6359fi 6360if test "$sync_file_range" = "yes" ; then 6361 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6362fi 6363if test "$fiemap" = "yes" ; then 6364 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6365fi 6366if test "$dup3" = "yes" ; then 6367 echo "CONFIG_DUP3=y" >> $config_host_mak 6368fi 6369if test "$ppoll" = "yes" ; then 6370 echo "CONFIG_PPOLL=y" >> $config_host_mak 6371fi 6372if test "$prctl_pr_set_timerslack" = "yes" ; then 6373 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6374fi 6375if test "$epoll" = "yes" ; then 6376 echo "CONFIG_EPOLL=y" >> $config_host_mak 6377fi 6378if test "$epoll_create1" = "yes" ; then 6379 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6380fi 6381if test "$sendfile" = "yes" ; then 6382 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6383fi 6384if test "$timerfd" = "yes" ; then 6385 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6386fi 6387if test "$setns" = "yes" ; then 6388 echo "CONFIG_SETNS=y" >> $config_host_mak 6389fi 6390if test "$clock_adjtime" = "yes" ; then 6391 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6392fi 6393if test "$syncfs" = "yes" ; then 6394 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6395fi 6396if test "$inotify" = "yes" ; then 6397 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6398fi 6399if test "$inotify1" = "yes" ; then 6400 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6401fi 6402if test "$sem_timedwait" = "yes" ; then 6403 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6404fi 6405if test "$strchrnul" = "yes" ; then 6406 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6407fi 6408if test "$byteswap_h" = "yes" ; then 6409 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6410fi 6411if test "$bswap_h" = "yes" ; then 6412 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6413fi 6414if test "$curl" = "yes" ; then 6415 echo "CONFIG_CURL=m" >> $config_host_mak 6416 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6417 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6418fi 6419if test "$brlapi" = "yes" ; then 6420 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6421 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6422fi 6423if test "$bluez" = "yes" ; then 6424 echo "CONFIG_BLUEZ=y" >> $config_host_mak 6425 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 6426fi 6427if test "$gtk" = "yes" ; then 6428 echo "CONFIG_GTK=m" >> $config_host_mak 6429 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak 6430 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6431 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6432 if test "$gtk_gl" = "yes" ; then 6433 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6434 fi 6435fi 6436echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6437if test "$gnutls" = "yes" ; then 6438 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6439fi 6440if test "$gnutls_rnd" = "yes" ; then 6441 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak 6442fi 6443if test "$gcrypt" = "yes" ; then 6444 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6445 if test "$gcrypt_hmac" = "yes" ; then 6446 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6447 fi 6448 if test "$gcrypt_kdf" = "yes" ; then 6449 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak 6450 fi 6451fi 6452if test "$nettle" = "yes" ; then 6453 echo "CONFIG_NETTLE=y" >> $config_host_mak 6454 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6455 if test "$nettle_kdf" = "yes" ; then 6456 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak 6457 fi 6458fi 6459if test "$tasn1" = "yes" ; then 6460 echo "CONFIG_TASN1=y" >> $config_host_mak 6461fi 6462if test "$have_ifaddrs_h" = "yes" ; then 6463 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6464fi 6465if test "$have_broken_size_max" = "yes" ; then 6466 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6467fi 6468 6469# Work around a system header bug with some kernel/XFS header 6470# versions where they both try to define 'struct fsxattr': 6471# xfs headers will not try to redefine structs from linux headers 6472# if this macro is set. 6473if test "$have_fsxattr" = "yes" ; then 6474 echo "HAVE_FSXATTR=y" >> $config_host_mak 6475fi 6476if test "$have_copy_file_range" = "yes" ; then 6477 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6478fi 6479if test "$vte" = "yes" ; then 6480 echo "CONFIG_VTE=y" >> $config_host_mak 6481 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6482 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6483fi 6484if test "$virglrenderer" = "yes" ; then 6485 echo "CONFIG_VIRGL=y" >> $config_host_mak 6486 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6487 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6488fi 6489if test "$xen" = "yes" ; then 6490 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6491 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6492 if test "$xen_pv_domain_build" = "yes" ; then 6493 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 6494 fi 6495fi 6496if test "$linux_aio" = "yes" ; then 6497 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6498fi 6499if test "$attr" = "yes" ; then 6500 echo "CONFIG_ATTR=y" >> $config_host_mak 6501fi 6502if test "$libattr" = "yes" ; then 6503 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6504fi 6505if test "$virtfs" = "yes" ; then 6506 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6507fi 6508if test "$mpath" = "yes" ; then 6509 echo "CONFIG_MPATH=y" >> $config_host_mak 6510 if test "$mpathpersist_new_api" = "yes"; then 6511 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 6512 fi 6513fi 6514if test "$vhost_scsi" = "yes" ; then 6515 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6516fi 6517if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then 6518 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 6519fi 6520if test "$vhost_crypto" = "yes" ; then 6521 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6522fi 6523if test "$vhost_vsock" = "yes" ; then 6524 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6525fi 6526if test "$vhost_user" = "yes" ; then 6527 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6528fi 6529if test "$blobs" = "yes" ; then 6530 echo "INSTALL_BLOBS=yes" >> $config_host_mak 6531fi 6532if test "$iovec" = "yes" ; then 6533 echo "CONFIG_IOVEC=y" >> $config_host_mak 6534fi 6535if test "$preadv" = "yes" ; then 6536 echo "CONFIG_PREADV=y" >> $config_host_mak 6537fi 6538if test "$fdt" != "no" ; then 6539 echo "CONFIG_FDT=y" >> $config_host_mak 6540fi 6541if test "$membarrier" = "yes" ; then 6542 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6543fi 6544if test "$signalfd" = "yes" ; then 6545 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6546fi 6547if test "$tcg" = "yes"; then 6548 echo "CONFIG_TCG=y" >> $config_host_mak 6549 if test "$tcg_interpreter" = "yes" ; then 6550 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6551 fi 6552fi 6553if test "$fdatasync" = "yes" ; then 6554 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6555fi 6556if test "$madvise" = "yes" ; then 6557 echo "CONFIG_MADVISE=y" >> $config_host_mak 6558fi 6559if test "$posix_madvise" = "yes" ; then 6560 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6561fi 6562if test "$posix_memalign" = "yes" ; then 6563 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6564fi 6565 6566if test "$spice" = "yes" ; then 6567 echo "CONFIG_SPICE=y" >> $config_host_mak 6568fi 6569 6570if test "$smartcard" = "yes" ; then 6571 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6572 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6573 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6574fi 6575 6576if test "$libusb" = "yes" ; then 6577 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6578 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6579 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6580fi 6581 6582if test "$usb_redir" = "yes" ; then 6583 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6584 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6585 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6586fi 6587 6588if test "$opengl" = "yes" ; then 6589 echo "CONFIG_OPENGL=y" >> $config_host_mak 6590 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6591 if test "$opengl_dmabuf" = "yes" ; then 6592 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6593 fi 6594fi 6595 6596if test "$malloc_trim" = "yes" ; then 6597 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 6598fi 6599 6600if test "$avx2_opt" = "yes" ; then 6601 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6602fi 6603 6604if test "$lzo" = "yes" ; then 6605 echo "CONFIG_LZO=y" >> $config_host_mak 6606fi 6607 6608if test "$snappy" = "yes" ; then 6609 echo "CONFIG_SNAPPY=y" >> $config_host_mak 6610fi 6611 6612if test "$bzip2" = "yes" ; then 6613 echo "CONFIG_BZIP2=y" >> $config_host_mak 6614 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 6615fi 6616 6617if test "$libiscsi" = "yes" ; then 6618 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 6619 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 6620 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6621fi 6622 6623if test "$libnfs" = "yes" ; then 6624 echo "CONFIG_LIBNFS=m" >> $config_host_mak 6625 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 6626fi 6627 6628if test "$seccomp" = "yes"; then 6629 echo "CONFIG_SECCOMP=y" >> $config_host_mak 6630 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 6631 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 6632fi 6633 6634# XXX: suppress that 6635if [ "$bsd" = "yes" ] ; then 6636 echo "CONFIG_BSD=y" >> $config_host_mak 6637fi 6638 6639if test "$localtime_r" = "yes" ; then 6640 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 6641fi 6642if test "$qom_cast_debug" = "yes" ; then 6643 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 6644fi 6645if test "$rbd" = "yes" ; then 6646 echo "CONFIG_RBD=m" >> $config_host_mak 6647 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 6648 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 6649fi 6650 6651echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 6652if test "$coroutine_pool" = "yes" ; then 6653 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 6654else 6655 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 6656fi 6657 6658if test "$debug_stack_usage" = "yes" ; then 6659 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 6660fi 6661 6662if test "$crypto_afalg" = "yes" ; then 6663 echo "CONFIG_AF_ALG=y" >> $config_host_mak 6664fi 6665 6666if test "$open_by_handle_at" = "yes" ; then 6667 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 6668fi 6669 6670if test "$linux_magic_h" = "yes" ; then 6671 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 6672fi 6673 6674if test "$pragma_diagnostic_available" = "yes" ; then 6675 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 6676fi 6677 6678if test "$valgrind_h" = "yes" ; then 6679 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 6680fi 6681 6682if test "$have_asan_iface_fiber" = "yes" ; then 6683 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 6684fi 6685 6686if test "$has_environ" = "yes" ; then 6687 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 6688fi 6689 6690if test "$cpuid_h" = "yes" ; then 6691 echo "CONFIG_CPUID_H=y" >> $config_host_mak 6692fi 6693 6694if test "$int128" = "yes" ; then 6695 echo "CONFIG_INT128=y" >> $config_host_mak 6696fi 6697 6698if test "$atomic128" = "yes" ; then 6699 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 6700fi 6701 6702if test "$atomic64" = "yes" ; then 6703 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 6704fi 6705 6706if test "$vector16" = "yes" ; then 6707 echo "CONFIG_VECTOR16=y" >> $config_host_mak 6708fi 6709 6710if test "$getauxval" = "yes" ; then 6711 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 6712fi 6713 6714if test "$glusterfs" = "yes" ; then 6715 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 6716 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 6717 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 6718fi 6719 6720if test "$glusterfs_xlator_opt" = "yes" ; then 6721 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 6722fi 6723 6724if test "$glusterfs_discard" = "yes" ; then 6725 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 6726fi 6727 6728if test "$glusterfs_fallocate" = "yes" ; then 6729 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 6730fi 6731 6732if test "$glusterfs_zerofill" = "yes" ; then 6733 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 6734fi 6735 6736if test "$libssh2" = "yes" ; then 6737 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 6738 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 6739 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 6740fi 6741 6742if test "$live_block_migration" = "yes" ; then 6743 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 6744fi 6745 6746if test "$tpm" = "yes"; then 6747 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 6748 # TPM passthrough support? 6749 if test "$tpm_passthrough" = "yes"; then 6750 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 6751 fi 6752 # TPM emulator support? 6753 if test "$tpm_emulator" = "yes"; then 6754 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak 6755 fi 6756fi 6757 6758echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 6759if have_backend "nop"; then 6760 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 6761fi 6762if have_backend "simple"; then 6763 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 6764 # Set the appropriate trace file. 6765 trace_file="\"$trace_file-\" FMT_pid" 6766fi 6767if have_backend "log"; then 6768 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 6769fi 6770if have_backend "ust"; then 6771 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6772fi 6773if have_backend "dtrace"; then 6774 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 6775 if test "$trace_backend_stap" = "yes" ; then 6776 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 6777 fi 6778fi 6779if have_backend "ftrace"; then 6780 if test "$linux" = "yes" ; then 6781 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6782 else 6783 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6784 fi 6785fi 6786if have_backend "syslog"; then 6787 if test "$posix_syslog" = "yes" ; then 6788 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 6789 else 6790 feature_not_found "syslog(trace backend)" "syslog not available" 6791 fi 6792fi 6793echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 6794 6795if test "$rdma" = "yes" ; then 6796 echo "CONFIG_RDMA=y" >> $config_host_mak 6797 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 6798fi 6799 6800if test "$pvrdma" = "yes" ; then 6801 echo "CONFIG_PVRDMA=y" >> $config_host_mak 6802fi 6803 6804if test "$have_rtnetlink" = "yes" ; then 6805 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6806fi 6807 6808if test "$libxml2" = "yes" ; then 6809 echo "CONFIG_LIBXML2=y" >> $config_host_mak 6810 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 6811 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 6812fi 6813 6814if test "$replication" = "yes" ; then 6815 echo "CONFIG_REPLICATION=y" >> $config_host_mak 6816fi 6817 6818if test "$have_af_vsock" = "yes" ; then 6819 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 6820fi 6821 6822if test "$have_sysmacros" = "yes" ; then 6823 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 6824fi 6825 6826if test "$have_static_assert" = "yes" ; then 6827 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 6828fi 6829 6830if test "$have_utmpx" = "yes" ; then 6831 echo "HAVE_UTMPX=y" >> $config_host_mak 6832fi 6833 6834if test "$ivshmem" = "yes" ; then 6835 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6836fi 6837if test "$capstone" != "no" ; then 6838 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 6839fi 6840if test "$debug_mutex" = "yes" ; then 6841 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 6842fi 6843 6844# Hold two types of flag: 6845# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6846# a thread we have a handle to 6847# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 6848# platform 6849if test "$pthread_setname_np" = "yes" ; then 6850 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6851 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 6852fi 6853 6854if test "$vxhs" = "yes" ; then 6855 echo "CONFIG_VXHS=y" >> $config_host_mak 6856 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 6857fi 6858 6859if test "$libpmem" = "yes" ; then 6860 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 6861fi 6862 6863if test "$tcg_interpreter" = "yes"; then 6864 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 6865elif test "$ARCH" = "sparc64" ; then 6866 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 6867elif test "$ARCH" = "s390x" ; then 6868 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 6869elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 6870 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 6871elif test "$ARCH" = "ppc64" ; then 6872 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 6873else 6874 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 6875fi 6876QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES" 6877 6878echo "TOOLS=$tools" >> $config_host_mak 6879echo "ROMS=$roms" >> $config_host_mak 6880echo "MAKE=$make" >> $config_host_mak 6881echo "INSTALL=$install" >> $config_host_mak 6882echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 6883echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 6884echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 6885echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 6886echo "PYTHON=$python" >> $config_host_mak 6887echo "CC=$cc" >> $config_host_mak 6888if $iasl -h > /dev/null 2>&1; then 6889 echo "IASL=$iasl" >> $config_host_mak 6890fi 6891echo "HOST_CC=$host_cc" >> $config_host_mak 6892echo "CXX=$cxx" >> $config_host_mak 6893echo "OBJCC=$objcc" >> $config_host_mak 6894echo "AR=$ar" >> $config_host_mak 6895echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6896echo "AS=$as" >> $config_host_mak 6897echo "CCAS=$ccas" >> $config_host_mak 6898echo "CPP=$cpp" >> $config_host_mak 6899echo "OBJCOPY=$objcopy" >> $config_host_mak 6900echo "LD=$ld" >> $config_host_mak 6901echo "RANLIB=$ranlib" >> $config_host_mak 6902echo "NM=$nm" >> $config_host_mak 6903echo "WINDRES=$windres" >> $config_host_mak 6904echo "CFLAGS=$CFLAGS" >> $config_host_mak 6905echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6906echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6907echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6908echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 6909if test "$sparse" = "yes" ; then 6910 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 6911 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 6912 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 6913 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 6914 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 6915fi 6916if test "$cross_prefix" != ""; then 6917 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 6918else 6919 echo "AUTOCONF_HOST := " >> $config_host_mak 6920fi 6921echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 6922echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 6923echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 6924echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 6925echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6926echo "LIBS+=$LIBS" >> $config_host_mak 6927echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 6928echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 6929echo "EXESUF=$EXESUF" >> $config_host_mak 6930echo "DSOSUF=$DSOSUF" >> $config_host_mak 6931echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 6932echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 6933echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6934echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6935echo "POD2MAN=$POD2MAN" >> $config_host_mak 6936echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 6937if test "$gcov" = "yes" ; then 6938 echo "CONFIG_GCOV=y" >> $config_host_mak 6939 echo "GCOV=$gcov_tool" >> $config_host_mak 6940fi 6941 6942if test "$docker" != "no"; then 6943 echo "HAVE_USER_DOCKER=y" >> $config_host_mak 6944fi 6945 6946# use included Linux headers 6947if test "$linux" = "yes" ; then 6948 mkdir -p linux-headers 6949 case "$cpu" in 6950 i386|x86_64|x32) 6951 linux_arch=x86 6952 ;; 6953 ppc|ppc64) 6954 linux_arch=powerpc 6955 ;; 6956 s390x) 6957 linux_arch=s390 6958 ;; 6959 aarch64) 6960 linux_arch=arm64 6961 ;; 6962 mips64) 6963 linux_arch=mips 6964 ;; 6965 *) 6966 # For most CPUs the kernel architecture name and QEMU CPU name match. 6967 linux_arch="$cpu" 6968 ;; 6969 esac 6970 # For non-KVM architectures we will not have asm headers 6971 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 6972 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 6973 fi 6974fi 6975 6976for target in $target_list; do 6977target_dir="$target" 6978config_target_mak=$target_dir/config-target.mak 6979target_name=$(echo $target | cut -d '-' -f 1) 6980target_bigendian="no" 6981 6982case "$target_name" in 6983 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 6984 target_bigendian=yes 6985 ;; 6986esac 6987target_softmmu="no" 6988target_user_only="no" 6989target_linux_user="no" 6990target_bsd_user="no" 6991case "$target" in 6992 ${target_name}-softmmu) 6993 target_softmmu="yes" 6994 ;; 6995 ${target_name}-linux-user) 6996 target_user_only="yes" 6997 target_linux_user="yes" 6998 ;; 6999 ${target_name}-bsd-user) 7000 target_user_only="yes" 7001 target_bsd_user="yes" 7002 ;; 7003 *) 7004 error_exit "Target '$target' not recognised" 7005 exit 1 7006 ;; 7007esac 7008 7009target_compiler="" 7010target_compiler_static="" 7011target_compiler_cflags="" 7012 7013mkdir -p $target_dir 7014echo "# Automatically generated by configure - do not modify" > $config_target_mak 7015 7016bflt="no" 7017mttcg="no" 7018interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7019gdb_xml_files="" 7020 7021TARGET_ARCH="$target_name" 7022TARGET_BASE_ARCH="" 7023TARGET_ABI_DIR="" 7024 7025case "$target_name" in 7026 i386) 7027 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml" 7028 target_compiler=$cross_cc_i386 7029 target_compiler_cflags=$cross_cc_ccflags_i386 7030 ;; 7031 x86_64) 7032 TARGET_BASE_ARCH=i386 7033 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml" 7034 target_compiler=$cross_cc_x86_64 7035 ;; 7036 alpha) 7037 mttcg="yes" 7038 target_compiler=$cross_cc_alpha 7039 ;; 7040 arm|armeb) 7041 TARGET_ARCH=arm 7042 bflt="yes" 7043 mttcg="yes" 7044 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7045 target_compiler=$cross_cc_arm 7046 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7047 ;; 7048 aarch64|aarch64_be) 7049 TARGET_ARCH=aarch64 7050 TARGET_BASE_ARCH=arm 7051 bflt="yes" 7052 mttcg="yes" 7053 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7054 target_compiler=$cross_cc_aarch64 7055 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7056 ;; 7057 cris) 7058 target_compiler=$cross_cc_cris 7059 ;; 7060 hppa) 7061 mttcg="yes" 7062 target_compiler=$cross_cc_hppa 7063 ;; 7064 lm32) 7065 target_compiler=$cross_cc_lm32 7066 ;; 7067 m68k) 7068 bflt="yes" 7069 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 7070 target_compiler=$cross_cc_m68k 7071 ;; 7072 microblaze|microblazeel) 7073 TARGET_ARCH=microblaze 7074 bflt="yes" 7075 echo "TARGET_ABI32=y" >> $config_target_mak 7076 target_compiler=$cross_cc_microblaze 7077 ;; 7078 mips|mipsel) 7079 TARGET_ARCH=mips 7080 target_compiler=$cross_cc_mips 7081 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7082 ;; 7083 mipsn32|mipsn32el) 7084 TARGET_ARCH=mips64 7085 TARGET_BASE_ARCH=mips 7086 target_compiler=$cross_cc_mipsn32 7087 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7088 echo "TARGET_ABI32=y" >> $config_target_mak 7089 ;; 7090 mips64|mips64el) 7091 TARGET_ARCH=mips64 7092 TARGET_BASE_ARCH=mips 7093 target_compiler=$cross_cc_mips64 7094 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7095 ;; 7096 moxie) 7097 target_compiler=$cross_cc_moxie 7098 ;; 7099 nios2) 7100 target_compiler=$cross_cc_nios2 7101 ;; 7102 or1k) 7103 target_compiler=$cross_cc_or1k 7104 TARGET_ARCH=openrisc 7105 TARGET_BASE_ARCH=openrisc 7106 ;; 7107 ppc) 7108 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7109 target_compiler=$cross_cc_powerpc 7110 ;; 7111 ppc64) 7112 TARGET_BASE_ARCH=ppc 7113 TARGET_ABI_DIR=ppc 7114 mttcg=yes 7115 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7116 target_compiler=$cross_cc_ppc64 7117 ;; 7118 ppc64le) 7119 TARGET_ARCH=ppc64 7120 TARGET_BASE_ARCH=ppc 7121 TARGET_ABI_DIR=ppc 7122 mttcg=yes 7123 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7124 target_compiler=$cross_cc_ppc64le 7125 ;; 7126 ppc64abi32) 7127 TARGET_ARCH=ppc64 7128 TARGET_BASE_ARCH=ppc 7129 TARGET_ABI_DIR=ppc 7130 echo "TARGET_ABI32=y" >> $config_target_mak 7131 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7132 target_compiler=$cross_cc_ppc64abi32 7133 ;; 7134 riscv32) 7135 TARGET_BASE_ARCH=riscv 7136 TARGET_ABI_DIR=riscv 7137 mttcg=yes 7138 target_compiler=$cross_cc_riscv32 7139 ;; 7140 riscv64) 7141 TARGET_BASE_ARCH=riscv 7142 TARGET_ABI_DIR=riscv 7143 mttcg=yes 7144 target_compiler=$cross_cc_riscv64 7145 ;; 7146 sh4|sh4eb) 7147 TARGET_ARCH=sh4 7148 bflt="yes" 7149 target_compiler=$cross_cc_sh4 7150 ;; 7151 sparc) 7152 target_compiler=$cross_cc_sparc 7153 ;; 7154 sparc64) 7155 TARGET_BASE_ARCH=sparc 7156 target_compiler=$cross_cc_sparc64 7157 ;; 7158 sparc32plus) 7159 TARGET_ARCH=sparc64 7160 TARGET_BASE_ARCH=sparc 7161 TARGET_ABI_DIR=sparc 7162 target_compiler=$cross_cc_sparc32plus 7163 echo "TARGET_ABI32=y" >> $config_target_mak 7164 ;; 7165 s390x) 7166 mttcg=yes 7167 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7168 target_compiler=$cross_cc_s390x 7169 ;; 7170 tilegx) 7171 target_compiler=$cross_cc_tilegx 7172 ;; 7173 tricore) 7174 target_compiler=$cross_cc_tricore 7175 ;; 7176 unicore32) 7177 target_compiler=$cross_cc_unicore32 7178 ;; 7179 xtensa|xtensaeb) 7180 TARGET_ARCH=xtensa 7181 mttcg="yes" 7182 target_compiler=$cross_cc_xtensa 7183 ;; 7184 *) 7185 error_exit "Unsupported target CPU" 7186 ;; 7187esac 7188# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7189if [ "$TARGET_BASE_ARCH" = "" ]; then 7190 TARGET_BASE_ARCH=$TARGET_ARCH 7191fi 7192 7193# Do we have a cross compiler for this target? 7194if has $target_compiler; then 7195 7196 write_c_skeleton 7197 7198 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then 7199 # For host systems we might get away with building without -static 7200 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then 7201 target_compiler="" 7202 else 7203 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7204 target_compiler_static="n" 7205 fi 7206 else 7207 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7208 target_compiler_static="y" 7209 fi 7210else 7211 target_compiler="" 7212fi 7213 7214symlink "$source_path/Makefile.target" "$target_dir/Makefile" 7215 7216upper() { 7217 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7218} 7219 7220target_arch_name="$(upper $TARGET_ARCH)" 7221echo "TARGET_$target_arch_name=y" >> $config_target_mak 7222echo "TARGET_NAME=$target_name" >> $config_target_mak 7223echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7224if [ "$TARGET_ABI_DIR" = "" ]; then 7225 TARGET_ABI_DIR=$TARGET_ARCH 7226fi 7227echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7228if [ "$HOST_VARIANT_DIR" != "" ]; then 7229 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7230fi 7231 7232if supported_xen_target $target; then 7233 echo "CONFIG_XEN=y" >> $config_target_mak 7234 if test "$xen_pci_passthrough" = yes; then 7235 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7236 fi 7237fi 7238if supported_kvm_target $target; then 7239 echo "CONFIG_KVM=y" >> $config_target_mak 7240 if test "$vhost_net" = "yes" ; then 7241 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 7242 if test "$vhost_user" = "yes" ; then 7243 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak 7244 fi 7245 fi 7246fi 7247if supported_hax_target $target; then 7248 echo "CONFIG_HAX=y" >> $config_target_mak 7249fi 7250if supported_hvf_target $target; then 7251 echo "CONFIG_HVF=y" >> $config_target_mak 7252fi 7253if supported_whpx_target $target; then 7254 echo "CONFIG_WHPX=y" >> $config_target_mak 7255fi 7256if test "$target_bigendian" = "yes" ; then 7257 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7258fi 7259if test "$target_softmmu" = "yes" ; then 7260 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7261 if test "$mttcg" = "yes" ; then 7262 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7263 fi 7264fi 7265if test "$target_user_only" = "yes" ; then 7266 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7267 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7268fi 7269if test "$target_linux_user" = "yes" ; then 7270 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7271fi 7272list="" 7273if test ! -z "$gdb_xml_files" ; then 7274 for x in $gdb_xml_files; do 7275 list="$list $source_path/gdb-xml/$x" 7276 done 7277 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7278fi 7279 7280if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 7281 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7282fi 7283if test "$target_bsd_user" = "yes" ; then 7284 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7285fi 7286 7287if test -n "$target_compiler"; then 7288 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak 7289 7290 if test -n "$target_compiler_static"; then 7291 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak 7292 fi 7293 7294 if test -n "$target_compiler_cflags"; then 7295 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak 7296 fi 7297fi 7298 7299 7300# generate QEMU_CFLAGS/LDFLAGS for targets 7301 7302cflags="" 7303ldflags="" 7304 7305disas_config() { 7306 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7307 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7308} 7309 7310for i in $ARCH $TARGET_BASE_ARCH ; do 7311 case "$i" in 7312 alpha) 7313 disas_config "ALPHA" 7314 ;; 7315 aarch64) 7316 if test -n "${cxx}"; then 7317 disas_config "ARM_A64" 7318 fi 7319 ;; 7320 arm) 7321 disas_config "ARM" 7322 if test -n "${cxx}"; then 7323 disas_config "ARM_A64" 7324 fi 7325 ;; 7326 cris) 7327 disas_config "CRIS" 7328 ;; 7329 hppa) 7330 disas_config "HPPA" 7331 ;; 7332 i386|x86_64|x32) 7333 disas_config "I386" 7334 ;; 7335 lm32) 7336 disas_config "LM32" 7337 ;; 7338 m68k) 7339 disas_config "M68K" 7340 ;; 7341 microblaze*) 7342 disas_config "MICROBLAZE" 7343 ;; 7344 mips*) 7345 disas_config "MIPS" 7346 ;; 7347 moxie*) 7348 disas_config "MOXIE" 7349 ;; 7350 nios2) 7351 disas_config "NIOS2" 7352 ;; 7353 or1k) 7354 disas_config "OPENRISC" 7355 ;; 7356 ppc*) 7357 disas_config "PPC" 7358 ;; 7359 riscv) 7360 disas_config "RISCV" 7361 ;; 7362 s390*) 7363 disas_config "S390" 7364 ;; 7365 sh4) 7366 disas_config "SH4" 7367 ;; 7368 sparc*) 7369 disas_config "SPARC" 7370 ;; 7371 xtensa*) 7372 disas_config "XTENSA" 7373 ;; 7374 esac 7375done 7376if test "$tcg_interpreter" = "yes" ; then 7377 disas_config "TCI" 7378fi 7379 7380case "$ARCH" in 7381alpha) 7382 # Ensure there's only a single GP 7383 cflags="-msmall-data $cflags" 7384;; 7385esac 7386 7387if test "$gprof" = "yes" ; then 7388 echo "TARGET_GPROF=yes" >> $config_target_mak 7389 if test "$target_linux_user" = "yes" ; then 7390 cflags="-p $cflags" 7391 ldflags="-p $ldflags" 7392 fi 7393 if test "$target_softmmu" = "yes" ; then 7394 ldflags="-p $ldflags" 7395 echo "GPROF_CFLAGS=-p" >> $config_target_mak 7396 fi 7397fi 7398 7399if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 7400 ldflags="$ldflags $textseg_ldflags" 7401fi 7402 7403# Newer kernels on s390 check for an S390_PGSTE program header and 7404# enable the pgste page table extensions in that case. This makes 7405# the vm.allocate_pgste sysctl unnecessary. We enable this program 7406# header if 7407# - we build on s390x 7408# - we build the system emulation for s390x (qemu-system-s390x) 7409# - KVM is enabled 7410# - the linker supports --s390-pgste 7411if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then 7412 if ld_has --s390-pgste ; then 7413 ldflags="-Wl,--s390-pgste $ldflags" 7414 fi 7415fi 7416 7417echo "LDFLAGS+=$ldflags" >> $config_target_mak 7418echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 7419 7420done # for target in $targets 7421 7422if test -n "$enabled_cross_compilers"; then 7423 echo 7424 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers" 7425fi 7426 7427if [ "$fdt" = "git" ]; then 7428 echo "config-host.h: subdir-dtc" >> $config_host_mak 7429fi 7430if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7431 echo "config-host.h: subdir-capstone" >> $config_host_mak 7432fi 7433if test -n "$LIBCAPSTONE"; then 7434 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7435fi 7436 7437if test "$numa" = "yes"; then 7438 echo "CONFIG_NUMA=y" >> $config_host_mak 7439fi 7440 7441if test "$ccache_cpp2" = "yes"; then 7442 echo "export CCACHE_CPP2=y" >> $config_host_mak 7443fi 7444 7445# build tree in object directory in case the source is not in the current directory 7446DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm" 7447DIRS="$DIRS docs docs/interop fsdev scsi" 7448DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 7449DIRS="$DIRS roms/seabios roms/vgabios" 7450FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 7451FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 7452FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 7453FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 7454FILES="$FILES pc-bios/spapr-rtas/Makefile" 7455FILES="$FILES pc-bios/s390-ccw/Makefile" 7456FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 7457FILES="$FILES pc-bios/qemu-icon.bmp" 7458FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit 7459for bios_file in \ 7460 $source_path/pc-bios/*.bin \ 7461 $source_path/pc-bios/*.lid \ 7462 $source_path/pc-bios/*.aml \ 7463 $source_path/pc-bios/*.rom \ 7464 $source_path/pc-bios/*.dtb \ 7465 $source_path/pc-bios/*.img \ 7466 $source_path/pc-bios/openbios-* \ 7467 $source_path/pc-bios/u-boot.* \ 7468 $source_path/pc-bios/palcode-* 7469do 7470 FILES="$FILES pc-bios/$(basename $bios_file)" 7471done 7472for test_file in $(find $source_path/tests/acpi-test-data -type f) 7473do 7474 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')" 7475done 7476for test_file in $(find $source_path/tests/hex-loader-check-data -type f) 7477do 7478 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')" 7479done 7480mkdir -p $DIRS 7481for f in $FILES ; do 7482 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 7483 symlink "$source_path/$f" "$f" 7484 fi 7485done 7486 7487# temporary config to build submodules 7488for rom in seabios vgabios ; do 7489 config_mak=roms/$rom/config.mak 7490 echo "# Automatically generated by configure - do not modify" > $config_mak 7491 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7492 echo "AS=$as" >> $config_mak 7493 echo "CCAS=$ccas" >> $config_mak 7494 echo "CC=$cc" >> $config_mak 7495 echo "BCC=bcc" >> $config_mak 7496 echo "CPP=$cpp" >> $config_mak 7497 echo "OBJCOPY=objcopy" >> $config_mak 7498 echo "IASL=$iasl" >> $config_mak 7499 echo "LD=$ld" >> $config_mak 7500 echo "RANLIB=$ranlib" >> $config_mak 7501done 7502 7503# set up tests data directory 7504for tests_subdir in acceptance data; do 7505 if [ ! -e tests/$tests_subdir ]; then 7506 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir 7507 fi 7508done 7509 7510# set up qemu-iotests in this build directory 7511iotests_common_env="tests/qemu-iotests/common.env" 7512iotests_check="tests/qemu-iotests/check" 7513 7514echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 7515echo >> "$iotests_common_env" 7516echo "export PYTHON='$python'" >> "$iotests_common_env" 7517 7518if [ ! -e "$iotests_check" ]; then 7519 symlink "$source_path/$iotests_check" "$iotests_check" 7520fi 7521 7522# Save the configure command line for later reuse. 7523cat <<EOD >config.status 7524#!/bin/sh 7525# Generated by configure. 7526# Run this file to recreate the current configuration. 7527# Compiler output produced by configure, useful for debugging 7528# configure, is in config.log if it exists. 7529EOD 7530printf "exec" >>config.status 7531printf " '%s'" "$0" "$@" >>config.status 7532echo ' "$@"' >>config.status 7533chmod +x config.status 7534 7535rm -r "$TMPDIR1" 7536