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