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