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