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