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