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