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