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