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# clock_adjtime probe 3915clock_adjtime=no 3916cat > $TMPC <<EOF 3917#include <time.h> 3918 3919int main(void) 3920{ 3921 return clock_adjtime(0, 0); 3922} 3923EOF 3924clock_adjtime=no 3925if compile_prog "" "" ; then 3926 clock_adjtime=yes 3927fi 3928 3929# syncfs probe 3930syncfs=no 3931cat > $TMPC <<EOF 3932#include <unistd.h> 3933 3934int main(void) 3935{ 3936 return syncfs(0); 3937} 3938EOF 3939syncfs=no 3940if compile_prog "" "" ; then 3941 syncfs=yes 3942fi 3943 3944# Check if tools are available to build documentation. 3945if test "$docs" != "no" ; then 3946 if has makeinfo && has pod2man; then 3947 docs=yes 3948 else 3949 if test "$docs" = "yes" ; then 3950 feature_not_found "docs" "Install texinfo and Perl/perl-podlators" 3951 fi 3952 docs=no 3953 fi 3954fi 3955 3956# Search for bswap_32 function 3957byteswap_h=no 3958cat > $TMPC << EOF 3959#include <byteswap.h> 3960int main(void) { return bswap_32(0); } 3961EOF 3962if compile_prog "" "" ; then 3963 byteswap_h=yes 3964fi 3965 3966# Search for bswap32 function 3967bswap_h=no 3968cat > $TMPC << EOF 3969#include <sys/endian.h> 3970#include <sys/types.h> 3971#include <machine/bswap.h> 3972int main(void) { return bswap32(0); } 3973EOF 3974if compile_prog "" "" ; then 3975 bswap_h=yes 3976fi 3977 3978########################################## 3979# Do we have libiscsi >= 1.9.0 3980if test "$libiscsi" != "no" ; then 3981 if $pkg_config --atleast-version=1.9.0 libiscsi; then 3982 libiscsi="yes" 3983 libiscsi_cflags=$($pkg_config --cflags libiscsi) 3984 libiscsi_libs=$($pkg_config --libs libiscsi) 3985 else 3986 if test "$libiscsi" = "yes" ; then 3987 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 3988 fi 3989 libiscsi="no" 3990 fi 3991fi 3992 3993########################################## 3994# Do we need libm 3995cat > $TMPC << EOF 3996#include <math.h> 3997int main(int argc, char **argv) { return isnan(sin((double)argc)); } 3998EOF 3999if compile_prog "" "" ; then 4000 : 4001elif compile_prog "" "-lm" ; then 4002 LIBS="-lm $LIBS" 4003 libs_qga="-lm $libs_qga" 4004else 4005 error_exit "libm check failed" 4006fi 4007 4008########################################## 4009# Do we need librt 4010# uClibc provides 2 versions of clock_gettime(), one with realtime 4011# support and one without. This means that the clock_gettime() don't 4012# need -lrt. We still need it for timer_create() so we check for this 4013# function in addition. 4014cat > $TMPC <<EOF 4015#include <signal.h> 4016#include <time.h> 4017int main(void) { 4018 timer_create(CLOCK_REALTIME, NULL, NULL); 4019 return clock_gettime(CLOCK_REALTIME, NULL); 4020} 4021EOF 4022 4023if compile_prog "" "" ; then 4024 : 4025# we need pthread for static linking. use previous pthread test result 4026elif compile_prog "" "$pthread_lib -lrt" ; then 4027 LIBS="$LIBS -lrt" 4028 libs_qga="$libs_qga -lrt" 4029fi 4030 4031if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ 4032 "$aix" != "yes" -a "$haiku" != "yes" ; then 4033 libs_softmmu="-lutil $libs_softmmu" 4034fi 4035 4036########################################## 4037# spice probe 4038if test "$spice" != "no" ; then 4039 cat > $TMPC << EOF 4040#include <spice.h> 4041int main(void) { spice_server_new(); return 0; } 4042EOF 4043 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4044 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4045 if $pkg_config --atleast-version=0.12.0 spice-server && \ 4046 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4047 compile_prog "$spice_cflags" "$spice_libs" ; then 4048 spice="yes" 4049 libs_softmmu="$libs_softmmu $spice_libs" 4050 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 4051 spice_protocol_version=$($pkg_config --modversion spice-protocol) 4052 spice_server_version=$($pkg_config --modversion spice-server) 4053 else 4054 if test "$spice" = "yes" ; then 4055 feature_not_found "spice" \ 4056 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel" 4057 fi 4058 spice="no" 4059 fi 4060fi 4061 4062# check for smartcard support 4063smartcard_cflags="" 4064if test "$smartcard" != "no"; then 4065 if $pkg_config libcacard; then 4066 libcacard_cflags=$($pkg_config --cflags libcacard) 4067 libcacard_libs=$($pkg_config --libs libcacard) 4068 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags" 4069 libs_softmmu="$libs_softmmu $libcacard_libs" 4070 smartcard="yes" 4071 else 4072 if test "$smartcard" = "yes"; then 4073 feature_not_found "smartcard" "Install libcacard devel" 4074 fi 4075 smartcard="no" 4076 fi 4077fi 4078 4079# check for libusb 4080if test "$libusb" != "no" ; then 4081 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4082 libusb="yes" 4083 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4084 libusb_libs=$($pkg_config --libs libusb-1.0) 4085 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags" 4086 libs_softmmu="$libs_softmmu $libusb_libs" 4087 else 4088 if test "$libusb" = "yes"; then 4089 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4090 fi 4091 libusb="no" 4092 fi 4093fi 4094 4095# check for usbredirparser for usb network redirection support 4096if test "$usb_redir" != "no" ; then 4097 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4098 usb_redir="yes" 4099 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4100 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4101 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags" 4102 libs_softmmu="$libs_softmmu $usb_redir_libs" 4103 else 4104 if test "$usb_redir" = "yes"; then 4105 feature_not_found "usb-redir" "Install usbredir devel" 4106 fi 4107 usb_redir="no" 4108 fi 4109fi 4110 4111########################################## 4112# check if we have VSS SDK headers for win 4113 4114if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then 4115 case "$vss_win32_sdk" in 4116 "") vss_win32_include="-isystem $source_path" ;; 4117 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4118 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4119 vss_win32_include="-isystem $source_path/.sdk/vss" 4120 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4121 ;; 4122 *) vss_win32_include="-isystem $vss_win32_sdk" 4123 esac 4124 cat > $TMPC << EOF 4125#define __MIDL_user_allocate_free_DEFINED__ 4126#include <inc/win2003/vss.h> 4127int main(void) { return VSS_CTX_BACKUP; } 4128EOF 4129 if compile_prog "$vss_win32_include" "" ; then 4130 guest_agent_with_vss="yes" 4131 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4132 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4133 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4134 else 4135 if test "$vss_win32_sdk" != "" ; then 4136 echo "ERROR: Please download and install Microsoft VSS SDK:" 4137 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4138 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4139 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4140 echo "ERROR: The headers are extracted in the directory \`inc'." 4141 feature_not_found "VSS support" 4142 fi 4143 guest_agent_with_vss="no" 4144 fi 4145fi 4146 4147########################################## 4148# lookup Windows platform SDK (if not specified) 4149# The SDK is needed only to build .tlb (type library) file of guest agent 4150# VSS provider from the source. It is usually unnecessary because the 4151# pre-compiled .tlb file is included. 4152 4153if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then 4154 if test -z "$win_sdk"; then 4155 programfiles="$PROGRAMFILES" 4156 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4157 if test -n "$programfiles"; then 4158 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4159 else 4160 feature_not_found "Windows SDK" 4161 fi 4162 elif test "$win_sdk" = "no"; then 4163 win_sdk="" 4164 fi 4165fi 4166 4167########################################## 4168# check if mingw environment provides a recent ntddscsi.h 4169if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then 4170 cat > $TMPC << EOF 4171#include <windows.h> 4172#include <ntddscsi.h> 4173int main(void) { 4174#if !defined(IOCTL_SCSI_GET_ADDRESS) 4175#error Missing required ioctl definitions 4176#endif 4177 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4178 return addr.Lun; 4179} 4180EOF 4181 if compile_prog "" "" ; then 4182 guest_agent_ntddscsi=yes 4183 libs_qga="-lsetupapi $libs_qga" 4184 fi 4185fi 4186 4187########################################## 4188# virgl renderer probe 4189 4190if test "$virglrenderer" != "no" ; then 4191 cat > $TMPC << EOF 4192#include <virglrenderer.h> 4193int main(void) { virgl_renderer_poll(); return 0; } 4194EOF 4195 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4196 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4197 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4198 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4199 virglrenderer="yes" 4200 else 4201 if test "$virglrenderer" = "yes" ; then 4202 feature_not_found "virglrenderer" 4203 fi 4204 virglrenderer="no" 4205 fi 4206fi 4207 4208########################################## 4209# check if we have fdatasync 4210 4211fdatasync=no 4212cat > $TMPC << EOF 4213#include <unistd.h> 4214int main(void) { 4215#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4216return fdatasync(0); 4217#else 4218#error Not supported 4219#endif 4220} 4221EOF 4222if compile_prog "" "" ; then 4223 fdatasync=yes 4224fi 4225 4226########################################## 4227# check if we have madvise 4228 4229madvise=no 4230cat > $TMPC << EOF 4231#include <sys/types.h> 4232#include <sys/mman.h> 4233#include <stddef.h> 4234int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4235EOF 4236if compile_prog "" "" ; then 4237 madvise=yes 4238fi 4239 4240########################################## 4241# check if we have posix_madvise 4242 4243posix_madvise=no 4244cat > $TMPC << EOF 4245#include <sys/mman.h> 4246#include <stddef.h> 4247int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4248EOF 4249if compile_prog "" "" ; then 4250 posix_madvise=yes 4251fi 4252 4253########################################## 4254# check if we have posix_syslog 4255 4256posix_syslog=no 4257cat > $TMPC << EOF 4258#include <syslog.h> 4259int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4260EOF 4261if compile_prog "" "" ; then 4262 posix_syslog=yes 4263fi 4264 4265########################################## 4266# check if trace backend exists 4267 4268$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4269if test "$?" -ne 0 ; then 4270 error_exit "invalid trace backends" \ 4271 "Please choose supported trace backends." 4272fi 4273 4274########################################## 4275# For 'ust' backend, test if ust headers are present 4276if have_backend "ust"; then 4277 cat > $TMPC << EOF 4278#include <lttng/tracepoint.h> 4279int main(void) { return 0; } 4280EOF 4281 if compile_prog "" "" ; then 4282 if $pkg_config lttng-ust --exists; then 4283 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4284 else 4285 lttng_ust_libs="-llttng-ust" 4286 fi 4287 if $pkg_config liburcu-bp --exists; then 4288 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4289 else 4290 urcu_bp_libs="-lurcu-bp" 4291 fi 4292 4293 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 4294 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 4295 else 4296 error_exit "Trace backend 'ust' missing lttng-ust header files" 4297 fi 4298fi 4299 4300########################################## 4301# For 'dtrace' backend, test if 'dtrace' command is present 4302if have_backend "dtrace"; then 4303 if ! has 'dtrace' ; then 4304 error_exit "dtrace command is not found in PATH $PATH" 4305 fi 4306 trace_backend_stap="no" 4307 if has 'stap' ; then 4308 trace_backend_stap="yes" 4309 fi 4310fi 4311 4312########################################## 4313# check and set a backend for coroutine 4314 4315# We prefer ucontext, but it's not always possible. The fallback 4316# is sigcontext. gthread is not selectable except explicitly, because 4317# it is not functional enough to run QEMU proper. (It is occasionally 4318# useful for debugging purposes.) On Windows the only valid backend 4319# is the Windows-specific one. 4320 4321ucontext_works=no 4322if test "$darwin" != "yes"; then 4323 cat > $TMPC << EOF 4324#include <ucontext.h> 4325#ifdef __stub_makecontext 4326#error Ignoring glibc stub makecontext which will always fail 4327#endif 4328int main(void) { makecontext(0, 0, 0); return 0; } 4329EOF 4330 if compile_prog "" "" ; then 4331 ucontext_works=yes 4332 fi 4333fi 4334 4335if test "$coroutine" = ""; then 4336 if test "$mingw32" = "yes"; then 4337 coroutine=win32 4338 elif test "$ucontext_works" = "yes"; then 4339 coroutine=ucontext 4340 else 4341 coroutine=sigaltstack 4342 fi 4343else 4344 case $coroutine in 4345 windows) 4346 if test "$mingw32" != "yes"; then 4347 error_exit "'windows' coroutine backend only valid for Windows" 4348 fi 4349 # Unfortunately the user visible backend name doesn't match the 4350 # coroutine-*.c filename for this case, so we have to adjust it here. 4351 coroutine=win32 4352 ;; 4353 ucontext) 4354 if test "$ucontext_works" != "yes"; then 4355 feature_not_found "ucontext" 4356 fi 4357 ;; 4358 gthread|sigaltstack) 4359 if test "$mingw32" = "yes"; then 4360 error_exit "only the 'windows' coroutine backend is valid for Windows" 4361 fi 4362 ;; 4363 *) 4364 error_exit "unknown coroutine backend $coroutine" 4365 ;; 4366 esac 4367fi 4368 4369if test "$coroutine_pool" = ""; then 4370 if test "$coroutine" = "gthread"; then 4371 coroutine_pool=no 4372 else 4373 coroutine_pool=yes 4374 fi 4375fi 4376if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then 4377 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)" 4378fi 4379 4380if test "$debug_stack_usage" = "yes"; then 4381 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then 4382 error_exit "stack usage debugging is not supported for $cpu" 4383 fi 4384 if test "$coroutine_pool" = "yes"; then 4385 echo "WARN: disabling coroutine pool for stack usage debugging" 4386 coroutine_pool=no 4387 fi 4388fi 4389 4390 4391########################################## 4392# check if we have open_by_handle_at 4393 4394open_by_handle_at=no 4395cat > $TMPC << EOF 4396#include <fcntl.h> 4397#if !defined(AT_EMPTY_PATH) 4398# error missing definition 4399#else 4400int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4401#endif 4402EOF 4403if compile_prog "" "" ; then 4404 open_by_handle_at=yes 4405fi 4406 4407######################################## 4408# check if we have linux/magic.h 4409 4410linux_magic_h=no 4411cat > $TMPC << EOF 4412#include <linux/magic.h> 4413int main(void) { 4414 return 0; 4415} 4416EOF 4417if compile_prog "" "" ; then 4418 linux_magic_h=yes 4419fi 4420 4421######################################## 4422# check whether we can disable warning option with a pragma (this is needed 4423# to silence warnings in the headers of some versions of external libraries). 4424# This test has to be compiled with -Werror as otherwise an unknown pragma is 4425# only a warning. 4426# 4427# If we can't selectively disable warning in the code, disable -Werror so that 4428# the build doesn't fail anyway. 4429 4430pragma_disable_unused_but_set=no 4431cat > $TMPC << EOF 4432#pragma GCC diagnostic push 4433#pragma GCC diagnostic ignored "-Wunused-but-set-variable" 4434#pragma GCC diagnostic ignored "-Wstrict-prototypes" 4435#pragma GCC diagnostic pop 4436 4437int main(void) { 4438 return 0; 4439} 4440EOF 4441if compile_prog "-Werror" "" ; then 4442 pragma_diagnostic_available=yes 4443else 4444 werror=no 4445fi 4446 4447######################################## 4448# check if we have valgrind/valgrind.h 4449 4450valgrind_h=no 4451cat > $TMPC << EOF 4452#include <valgrind/valgrind.h> 4453int main(void) { 4454 return 0; 4455} 4456EOF 4457if compile_prog "" "" ; then 4458 valgrind_h=yes 4459fi 4460 4461######################################## 4462# check if environ is declared 4463 4464has_environ=no 4465cat > $TMPC << EOF 4466#include <unistd.h> 4467int main(void) { 4468 environ = 0; 4469 return 0; 4470} 4471EOF 4472if compile_prog "" "" ; then 4473 has_environ=yes 4474fi 4475 4476######################################## 4477# check if cpuid.h is usable. 4478 4479cpuid_h=no 4480cat > $TMPC << EOF 4481#include <cpuid.h> 4482int main(void) { 4483 unsigned a, b, c, d; 4484 int max = __get_cpuid_max(0, 0); 4485 4486 if (max >= 1) { 4487 __cpuid(1, a, b, c, d); 4488 } 4489 4490 if (max >= 7) { 4491 __cpuid_count(7, 0, a, b, c, d); 4492 } 4493 4494 return 0; 4495} 4496EOF 4497if compile_prog "" "" ; then 4498 cpuid_h=yes 4499fi 4500 4501######################################## 4502# check if __[u]int128_t is usable. 4503 4504int128=no 4505cat > $TMPC << EOF 4506#if defined(__clang_major__) && defined(__clang_minor__) 4507# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2)) 4508# error __int128_t does not work in CLANG before 3.2 4509# endif 4510#endif 4511__int128_t a; 4512__uint128_t b; 4513int main (void) { 4514 a = a + b; 4515 b = a * b; 4516 a = a * a; 4517 return 0; 4518} 4519EOF 4520if compile_prog "" "" ; then 4521 int128=yes 4522fi 4523 4524######################################## 4525# check if getauxval is available. 4526 4527getauxval=no 4528cat > $TMPC << EOF 4529#include <sys/auxv.h> 4530int main(void) { 4531 return getauxval(AT_HWCAP) == 0; 4532} 4533EOF 4534if compile_prog "" "" ; then 4535 getauxval=yes 4536fi 4537 4538######################################## 4539# check if ccache is interfering with 4540# semantic analysis of macros 4541 4542unset CCACHE_CPP2 4543ccache_cpp2=no 4544cat > $TMPC << EOF 4545static const int Z = 1; 4546#define fn() ({ Z; }) 4547#define TAUT(X) ((X) == Z) 4548#define PAREN(X, Y) (X == Y) 4549#define ID(X) (X) 4550int main(int argc, char *argv[]) 4551{ 4552 int x = 0, y = 0; 4553 x = ID(x); 4554 x = fn(); 4555 fn(); 4556 if (PAREN(x, y)) return 0; 4557 if (TAUT(Z)) return 0; 4558 return 0; 4559} 4560EOF 4561 4562if ! compile_object "-Werror"; then 4563 ccache_cpp2=yes 4564fi 4565 4566################################################# 4567# clang does not support glibc + FORTIFY_SOURCE. 4568 4569if test "$fortify_source" != "no"; then 4570 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 4571 fortify_source="no"; 4572 elif test -n "$cxx" && 4573 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 4574 fortify_source="no"; 4575 else 4576 fortify_source="yes" 4577 fi 4578fi 4579 4580########################################## 4581# check if struct fsxattr is available via linux/fs.h 4582 4583have_fsxattr=no 4584cat > $TMPC << EOF 4585#include <linux/fs.h> 4586struct fsxattr foo; 4587int main(void) { 4588 return 0; 4589} 4590EOF 4591if compile_prog "" "" ; then 4592 have_fsxattr=yes 4593fi 4594 4595########################################## 4596# check if rtnetlink.h exists and is useful 4597have_rtnetlink=no 4598cat > $TMPC << EOF 4599#include <linux/rtnetlink.h> 4600int main(void) { 4601 return IFLA_PROTO_DOWN; 4602} 4603EOF 4604if compile_prog "" "" ; then 4605 have_rtnetlink=yes 4606fi 4607 4608################################################# 4609# Sparc implicitly links with --relax, which is 4610# incompatible with -r, so --no-relax should be 4611# given. It does no harm to give it on other 4612# platforms too. 4613 4614# Note: the prototype is needed since QEMU_CFLAGS 4615# contains -Wmissing-prototypes 4616cat > $TMPC << EOF 4617extern int foo(void); 4618int foo(void) { return 0; } 4619EOF 4620if ! compile_object ""; then 4621 error_exit "Failed to compile object file for LD_REL_FLAGS test" 4622fi 4623if do_cc -nostdlib -Wl,-r -Wl,--no-relax -o $TMPMO $TMPO; then 4624 LD_REL_FLAGS="-Wl,--no-relax" 4625fi 4626 4627########################################## 4628# End of CC checks 4629# After here, no more $cc or $ld runs 4630 4631if test "$gcov" = "yes" ; then 4632 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 4633 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 4634elif test "$fortify_source" = "yes" ; then 4635 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 4636elif test "$debug" = "no"; then 4637 CFLAGS="-O2 $CFLAGS" 4638fi 4639 4640########################################## 4641# Do we have libnfs 4642if test "$libnfs" != "no" ; then 4643 if $pkg_config --atleast-version=1.9.3 libnfs; then 4644 libnfs="yes" 4645 libnfs_libs=$($pkg_config --libs libnfs) 4646 else 4647 if test "$libnfs" = "yes" ; then 4648 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 4649 fi 4650 libnfs="no" 4651 fi 4652fi 4653 4654# Now we've finished running tests it's OK to add -Werror to the compiler flags 4655if test "$werror" = "yes"; then 4656 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 4657fi 4658 4659if test "$solaris" = "no" ; then 4660 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 4661 LDFLAGS="-Wl,--warn-common $LDFLAGS" 4662 fi 4663fi 4664 4665# test if pod2man has --utf8 option 4666if pod2man --help | grep -q utf8; then 4667 POD2MAN="pod2man --utf8" 4668else 4669 POD2MAN="pod2man" 4670fi 4671 4672# Use ASLR, no-SEH and DEP if available 4673if test "$mingw32" = "yes" ; then 4674 for flag in --dynamicbase --no-seh --nxcompat; do 4675 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then 4676 LDFLAGS="-Wl,$flag $LDFLAGS" 4677 fi 4678 done 4679fi 4680 4681qemu_confdir=$sysconfdir$confsuffix 4682qemu_moddir=$libdir$confsuffix 4683qemu_datadir=$datadir$confsuffix 4684qemu_localedir="$datadir/locale" 4685 4686tools="" 4687if test "$want_tools" = "yes" ; then 4688 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" 4689 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 4690 tools="qemu-nbd\$(EXESUF) $tools" 4691 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 4692 fi 4693fi 4694if test "$softmmu" = yes ; then 4695 if test "$virtfs" != no ; then 4696 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then 4697 virtfs=yes 4698 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 4699 else 4700 if test "$virtfs" = yes; then 4701 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel" 4702 fi 4703 virtfs=no 4704 fi 4705 fi 4706fi 4707 4708# Probe for guest agent support/options 4709 4710if [ "$guest_agent" != "no" ]; then 4711 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 4712 tools="qemu-ga $tools" 4713 guest_agent=yes 4714 elif [ "$guest_agent" != yes ]; then 4715 guest_agent=no 4716 else 4717 error_exit "Guest agent is not supported on this platform" 4718 fi 4719fi 4720 4721# Guest agent Window MSI package 4722 4723if test "$guest_agent" != yes; then 4724 if test "$guest_agent_msi" = yes; then 4725 error_exit "MSI guest agent package requires guest agent enabled" 4726 fi 4727 guest_agent_msi=no 4728elif test "$mingw32" != "yes"; then 4729 if test "$guest_agent_msi" = "yes"; then 4730 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 4731 fi 4732 guest_agent_msi=no 4733elif ! has wixl; then 4734 if test "$guest_agent_msi" = "yes"; then 4735 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 4736 fi 4737 guest_agent_msi=no 4738else 4739 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 4740 # disabled explicitly 4741 if test "$guest_agent_msi" != "no"; then 4742 guest_agent_msi=yes 4743 fi 4744fi 4745 4746if test "$guest_agent_msi" = "yes"; then 4747 if test "$guest_agent_with_vss" = "yes"; then 4748 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 4749 fi 4750 4751 if test "$QEMU_GA_MANUFACTURER" = ""; then 4752 QEMU_GA_MANUFACTURER=QEMU 4753 fi 4754 4755 if test "$QEMU_GA_DISTRO" = ""; then 4756 QEMU_GA_DISTRO=Linux 4757 fi 4758 4759 if test "$QEMU_GA_VERSION" = ""; then 4760 QEMU_GA_VERSION=$(cat $source_path/VERSION) 4761 fi 4762 4763 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 4764 4765 case "$cpu" in 4766 x86_64) 4767 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 4768 ;; 4769 i386) 4770 QEMU_GA_MSI_ARCH="-D Arch=32" 4771 ;; 4772 *) 4773 error_exit "CPU $cpu not supported for building installation package" 4774 ;; 4775 esac 4776fi 4777 4778# Mac OS X ships with a broken assembler 4779roms= 4780if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 4781 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 4782 "$softmmu" = yes ; then 4783 # Different host OS linkers have different ideas about the name of the ELF 4784 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd 4785 # variant; and Windows uses i386pe. 4786 for emu in elf_i386 elf_i386_fbsd i386pe; do 4787 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 4788 ld_i386_emulation="$emu" 4789 roms="optionrom" 4790 break 4791 fi 4792 done 4793fi 4794if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 4795 roms="$roms spapr-rtas" 4796fi 4797 4798if test "$cpu" = "s390x" ; then 4799 roms="$roms s390-ccw" 4800fi 4801 4802# Probe for the need for relocating the user-only binary. 4803if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 4804 textseg_addr= 4805 case "$cpu" in 4806 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 4807 # ??? Rationale for choosing this address 4808 textseg_addr=0x60000000 4809 ;; 4810 mips) 4811 # A 256M aligned address, high in the address space, with enough 4812 # room for the code_gen_buffer above it before the stack. 4813 textseg_addr=0x60000000 4814 ;; 4815 esac 4816 if [ -n "$textseg_addr" ]; then 4817 cat > $TMPC <<EOF 4818 int main(void) { return 0; } 4819EOF 4820 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 4821 if ! compile_prog "" "$textseg_ldflags"; then 4822 # In case ld does not support -Ttext-segment, edit the default linker 4823 # script via sed to set the .text start addr. This is needed on FreeBSD 4824 # at least. 4825 if ! $ld --verbose >/dev/null 2>&1; then 4826 error_exit \ 4827 "We need to link the QEMU user mode binaries at a" \ 4828 "specific text address. Unfortunately your linker" \ 4829 "doesn't support either the -Ttext-segment option or" \ 4830 "printing the default linker script with --verbose." \ 4831 "If you don't want the user mode binaries, pass the" \ 4832 "--disable-user option to configure." 4833 fi 4834 4835 $ld --verbose | sed \ 4836 -e '1,/==================================================/d' \ 4837 -e '/==================================================/,$d' \ 4838 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 4839 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 4840 textseg_ldflags="-Wl,-T../config-host.ld" 4841 fi 4842 fi 4843fi 4844 4845echo_version() { 4846 if test "$1" = "yes" ; then 4847 echo "($2)" 4848 fi 4849} 4850 4851# prepend pixman and ftd flags after all config tests are done 4852QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 4853libs_softmmu="$pixman_libs $libs_softmmu" 4854 4855echo "Install prefix $prefix" 4856echo "BIOS directory $(eval echo $qemu_datadir)" 4857echo "binary directory $(eval echo $bindir)" 4858echo "library directory $(eval echo $libdir)" 4859echo "module directory $(eval echo $qemu_moddir)" 4860echo "libexec directory $(eval echo $libexecdir)" 4861echo "include directory $(eval echo $includedir)" 4862echo "config directory $(eval echo $sysconfdir)" 4863if test "$mingw32" = "no" ; then 4864echo "local state directory $(eval echo $local_statedir)" 4865echo "Manual directory $(eval echo $mandir)" 4866echo "ELF interp prefix $interp_prefix" 4867else 4868echo "local state directory queried at runtime" 4869echo "Windows SDK $win_sdk" 4870fi 4871echo "Source path $source_path" 4872echo "C compiler $cc" 4873echo "Host C compiler $host_cc" 4874echo "C++ compiler $cxx" 4875echo "Objective-C compiler $objcc" 4876echo "ARFLAGS $ARFLAGS" 4877echo "CFLAGS $CFLAGS" 4878echo "QEMU_CFLAGS $QEMU_CFLAGS" 4879echo "LDFLAGS $LDFLAGS" 4880echo "make $make" 4881echo "install $install" 4882echo "python $python" 4883if test "$slirp" = "yes" ; then 4884 echo "smbd $smbd" 4885fi 4886echo "module support $modules" 4887echo "host CPU $cpu" 4888echo "host big endian $bigendian" 4889echo "target list $target_list" 4890echo "tcg debug enabled $debug_tcg" 4891echo "gprof enabled $gprof" 4892echo "sparse enabled $sparse" 4893echo "strip binaries $strip_opt" 4894echo "profiler $profiler" 4895echo "static build $static" 4896if test "$darwin" = "yes" ; then 4897 echo "Cocoa support $cocoa" 4898fi 4899echo "pixman $pixman" 4900echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 4901echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 4902echo "GTK GL support $gtk_gl" 4903echo "VTE support $vte $(echo_version $vte $vteversion)" 4904echo "TLS priority $tls_priority" 4905echo "GNUTLS support $gnutls" 4906echo "GNUTLS rnd $gnutls_rnd" 4907echo "libgcrypt $gcrypt" 4908echo "libgcrypt kdf $gcrypt_kdf" 4909echo "nettle $nettle $(echo_version $nettle $nettle_version)" 4910echo "nettle kdf $nettle_kdf" 4911echo "libtasn1 $tasn1" 4912echo "curses support $curses" 4913echo "virgl support $virglrenderer" 4914echo "curl support $curl" 4915echo "mingw32 support $mingw32" 4916echo "Audio drivers $audio_drv_list" 4917echo "Block whitelist (rw) $block_drv_rw_whitelist" 4918echo "Block whitelist (ro) $block_drv_ro_whitelist" 4919echo "VirtFS support $virtfs" 4920echo "VNC support $vnc" 4921if test "$vnc" = "yes" ; then 4922 echo "VNC SASL support $vnc_sasl" 4923 echo "VNC JPEG support $vnc_jpeg" 4924 echo "VNC PNG support $vnc_png" 4925fi 4926if test -n "$sparc_cpu"; then 4927 echo "Target Sparc Arch $sparc_cpu" 4928fi 4929echo "xen support $xen" 4930if test "$xen" = "yes" ; then 4931 echo "xen ctrl version $xen_ctrl_version" 4932 echo "pv dom build $xen_pv_domain_build" 4933fi 4934echo "brlapi support $brlapi" 4935echo "bluez support $bluez" 4936echo "Documentation $docs" 4937echo "PIE $pie" 4938echo "vde support $vde" 4939echo "netmap support $netmap" 4940echo "Linux AIO support $linux_aio" 4941echo "ATTR/XATTR support $attr" 4942echo "Install blobs $blobs" 4943echo "KVM support $kvm" 4944echo "RDMA support $rdma" 4945echo "TCG interpreter $tcg_interpreter" 4946echo "fdt support $fdt" 4947echo "preadv support $preadv" 4948echo "fdatasync $fdatasync" 4949echo "madvise $madvise" 4950echo "posix_madvise $posix_madvise" 4951echo "libcap-ng support $cap_ng" 4952echo "vhost-net support $vhost_net" 4953echo "vhost-scsi support $vhost_scsi" 4954echo "vhost-vsock support $vhost_vsock" 4955echo "Trace backends $trace_backends" 4956if have_backend "simple"; then 4957echo "Trace output file $trace_file-<pid>" 4958fi 4959echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 4960echo "rbd support $rbd" 4961echo "xfsctl support $xfs" 4962echo "smartcard support $smartcard" 4963echo "libusb $libusb" 4964echo "usb net redir $usb_redir" 4965echo "OpenGL support $opengl" 4966echo "OpenGL dmabufs $opengl_dmabuf" 4967echo "libiscsi support $libiscsi" 4968echo "libnfs support $libnfs" 4969echo "build guest agent $guest_agent" 4970echo "QGA VSS support $guest_agent_with_vss" 4971echo "QGA w32 disk info $guest_agent_ntddscsi" 4972echo "QGA MSI support $guest_agent_msi" 4973echo "seccomp support $seccomp" 4974echo "coroutine backend $coroutine" 4975echo "coroutine pool $coroutine_pool" 4976echo "debug stack usage $debug_stack_usage" 4977echo "GlusterFS support $glusterfs" 4978echo "Archipelago support $archipelago" 4979echo "gcov $gcov_tool" 4980echo "gcov enabled $gcov" 4981echo "TPM support $tpm" 4982echo "libssh2 support $libssh2" 4983echo "TPM passthrough $tpm_passthrough" 4984echo "QOM debugging $qom_cast_debug" 4985echo "lzo support $lzo" 4986echo "snappy support $snappy" 4987echo "bzip2 support $bzip2" 4988echo "NUMA host support $numa" 4989echo "tcmalloc support $tcmalloc" 4990echo "jemalloc support $jemalloc" 4991echo "avx2 optimization $avx2_opt" 4992echo "replication support $replication" 4993 4994if test "$sdl_too_old" = "yes"; then 4995echo "-> Your SDL version is too old - please upgrade to have SDL support" 4996fi 4997 4998config_host_mak="config-host.mak" 4999 5000echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 5001 5002echo "# Automatically generated by configure - do not modify" > $config_host_mak 5003echo >> $config_host_mak 5004 5005echo all: >> $config_host_mak 5006echo "prefix=$prefix" >> $config_host_mak 5007echo "bindir=$bindir" >> $config_host_mak 5008echo "libdir=$libdir" >> $config_host_mak 5009echo "libexecdir=$libexecdir" >> $config_host_mak 5010echo "includedir=$includedir" >> $config_host_mak 5011echo "mandir=$mandir" >> $config_host_mak 5012echo "sysconfdir=$sysconfdir" >> $config_host_mak 5013echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 5014echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 5015echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 5016echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 5017if test "$mingw32" = "no" ; then 5018 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 5019fi 5020echo "qemu_helperdir=$libexecdir" >> $config_host_mak 5021echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak 5022echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak 5023echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 5024echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 5025 5026echo "ARCH=$ARCH" >> $config_host_mak 5027 5028if test "$debug_tcg" = "yes" ; then 5029 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 5030fi 5031if test "$strip_opt" = "yes" ; then 5032 echo "STRIP=${strip}" >> $config_host_mak 5033fi 5034if test "$bigendian" = "yes" ; then 5035 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 5036fi 5037if test "$mingw32" = "yes" ; then 5038 echo "CONFIG_WIN32=y" >> $config_host_mak 5039 rc_version=$(cat $source_path/VERSION) 5040 version_major=${rc_version%%.*} 5041 rc_version=${rc_version#*.} 5042 version_minor=${rc_version%%.*} 5043 rc_version=${rc_version#*.} 5044 version_subminor=${rc_version%%.*} 5045 version_micro=0 5046 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5047 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5048 if test "$guest_agent_with_vss" = "yes" ; then 5049 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 5050 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 5051 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 5052 fi 5053 if test "$guest_agent_ntddscsi" = "yes" ; then 5054 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 5055 fi 5056 if test "$guest_agent_msi" = "yes"; then 5057 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 5058 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 5059 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 5060 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 5061 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 5062 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 5063 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 5064 fi 5065else 5066 echo "CONFIG_POSIX=y" >> $config_host_mak 5067fi 5068 5069if test "$linux" = "yes" ; then 5070 echo "CONFIG_LINUX=y" >> $config_host_mak 5071fi 5072 5073if test "$darwin" = "yes" ; then 5074 echo "CONFIG_DARWIN=y" >> $config_host_mak 5075fi 5076 5077if test "$aix" = "yes" ; then 5078 echo "CONFIG_AIX=y" >> $config_host_mak 5079fi 5080 5081if test "$solaris" = "yes" ; then 5082 echo "CONFIG_SOLARIS=y" >> $config_host_mak 5083 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak 5084 if test "$needs_libsunmath" = "yes" ; then 5085 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak 5086 fi 5087fi 5088if test "$haiku" = "yes" ; then 5089 echo "CONFIG_HAIKU=y" >> $config_host_mak 5090fi 5091if test "$static" = "yes" ; then 5092 echo "CONFIG_STATIC=y" >> $config_host_mak 5093fi 5094if test "$profiler" = "yes" ; then 5095 echo "CONFIG_PROFILER=y" >> $config_host_mak 5096fi 5097if test "$slirp" = "yes" ; then 5098 echo "CONFIG_SLIRP=y" >> $config_host_mak 5099 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 5100fi 5101if test "$vde" = "yes" ; then 5102 echo "CONFIG_VDE=y" >> $config_host_mak 5103fi 5104if test "$netmap" = "yes" ; then 5105 echo "CONFIG_NETMAP=y" >> $config_host_mak 5106fi 5107if test "$l2tpv3" = "yes" ; then 5108 echo "CONFIG_L2TPV3=y" >> $config_host_mak 5109fi 5110if test "$cap_ng" = "yes" ; then 5111 echo "CONFIG_LIBCAP=y" >> $config_host_mak 5112fi 5113echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 5114for drv in $audio_drv_list; do 5115 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 5116 echo "$def=y" >> $config_host_mak 5117done 5118if test "$audio_pt_int" = "yes" ; then 5119 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 5120fi 5121if test "$audio_win_int" = "yes" ; then 5122 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 5123fi 5124echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 5125echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 5126if test "$vnc" = "yes" ; then 5127 echo "CONFIG_VNC=y" >> $config_host_mak 5128fi 5129if test "$vnc_sasl" = "yes" ; then 5130 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 5131fi 5132if test "$vnc_jpeg" = "yes" ; then 5133 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 5134fi 5135if test "$vnc_png" = "yes" ; then 5136 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 5137fi 5138if test "$fnmatch" = "yes" ; then 5139 echo "CONFIG_FNMATCH=y" >> $config_host_mak 5140fi 5141if test "$xfs" = "yes" ; then 5142 echo "CONFIG_XFS=y" >> $config_host_mak 5143fi 5144qemu_version=$(head $source_path/VERSION) 5145echo "VERSION=$qemu_version" >>$config_host_mak 5146echo "PKGVERSION=$pkgversion" >>$config_host_mak 5147echo "SRC_PATH=$source_path" >> $config_host_mak 5148echo "TARGET_DIRS=$target_list" >> $config_host_mak 5149if [ "$docs" = "yes" ] ; then 5150 echo "BUILD_DOCS=yes" >> $config_host_mak 5151fi 5152if test "$modules" = "yes"; then 5153 # $shacmd can generate a hash started with digit, which the compiler doesn't 5154 # like as an symbol. So prefix it with an underscore 5155 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 5156 echo "CONFIG_MODULES=y" >> $config_host_mak 5157fi 5158if test "$sdl" = "yes" ; then 5159 echo "CONFIG_SDL=y" >> $config_host_mak 5160 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 5161 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 5162fi 5163if test "$cocoa" = "yes" ; then 5164 echo "CONFIG_COCOA=y" >> $config_host_mak 5165fi 5166if test "$curses" = "yes" ; then 5167 echo "CONFIG_CURSES=y" >> $config_host_mak 5168fi 5169if test "$utimens" = "yes" ; then 5170 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak 5171fi 5172if test "$pipe2" = "yes" ; then 5173 echo "CONFIG_PIPE2=y" >> $config_host_mak 5174fi 5175if test "$accept4" = "yes" ; then 5176 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 5177fi 5178if test "$splice" = "yes" ; then 5179 echo "CONFIG_SPLICE=y" >> $config_host_mak 5180fi 5181if test "$eventfd" = "yes" ; then 5182 echo "CONFIG_EVENTFD=y" >> $config_host_mak 5183fi 5184if test "$memfd" = "yes" ; then 5185 echo "CONFIG_MEMFD=y" >> $config_host_mak 5186fi 5187if test "$fallocate" = "yes" ; then 5188 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 5189fi 5190if test "$fallocate_punch_hole" = "yes" ; then 5191 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 5192fi 5193if test "$fallocate_zero_range" = "yes" ; then 5194 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 5195fi 5196if test "$posix_fallocate" = "yes" ; then 5197 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 5198fi 5199if test "$sync_file_range" = "yes" ; then 5200 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 5201fi 5202if test "$fiemap" = "yes" ; then 5203 echo "CONFIG_FIEMAP=y" >> $config_host_mak 5204fi 5205if test "$dup3" = "yes" ; then 5206 echo "CONFIG_DUP3=y" >> $config_host_mak 5207fi 5208if test "$ppoll" = "yes" ; then 5209 echo "CONFIG_PPOLL=y" >> $config_host_mak 5210fi 5211if test "$prctl_pr_set_timerslack" = "yes" ; then 5212 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 5213fi 5214if test "$epoll" = "yes" ; then 5215 echo "CONFIG_EPOLL=y" >> $config_host_mak 5216fi 5217if test "$epoll_create1" = "yes" ; then 5218 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 5219fi 5220if test "$sendfile" = "yes" ; then 5221 echo "CONFIG_SENDFILE=y" >> $config_host_mak 5222fi 5223if test "$timerfd" = "yes" ; then 5224 echo "CONFIG_TIMERFD=y" >> $config_host_mak 5225fi 5226if test "$setns" = "yes" ; then 5227 echo "CONFIG_SETNS=y" >> $config_host_mak 5228fi 5229if test "$clock_adjtime" = "yes" ; then 5230 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 5231fi 5232if test "$syncfs" = "yes" ; then 5233 echo "CONFIG_SYNCFS=y" >> $config_host_mak 5234fi 5235if test "$inotify" = "yes" ; then 5236 echo "CONFIG_INOTIFY=y" >> $config_host_mak 5237fi 5238if test "$inotify1" = "yes" ; then 5239 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 5240fi 5241if test "$byteswap_h" = "yes" ; then 5242 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 5243fi 5244if test "$bswap_h" = "yes" ; then 5245 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 5246fi 5247if test "$curl" = "yes" ; then 5248 echo "CONFIG_CURL=m" >> $config_host_mak 5249 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 5250 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 5251fi 5252if test "$brlapi" = "yes" ; then 5253 echo "CONFIG_BRLAPI=y" >> $config_host_mak 5254fi 5255if test "$bluez" = "yes" ; then 5256 echo "CONFIG_BLUEZ=y" >> $config_host_mak 5257 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 5258fi 5259if test "$glib_subprocess" = "yes" ; then 5260 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak 5261fi 5262if test "$gtk" = "yes" ; then 5263 echo "CONFIG_GTK=y" >> $config_host_mak 5264 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak 5265 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 5266 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 5267 if test "$gtk_gl" = "yes" ; then 5268 echo "CONFIG_GTK_GL=y" >> $config_host_mak 5269 fi 5270fi 5271echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 5272if test "$gnutls" = "yes" ; then 5273 echo "CONFIG_GNUTLS=y" >> $config_host_mak 5274fi 5275if test "$gnutls_rnd" = "yes" ; then 5276 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak 5277fi 5278if test "$gcrypt" = "yes" ; then 5279 echo "CONFIG_GCRYPT=y" >> $config_host_mak 5280 if test "$gcrypt_kdf" = "yes" ; then 5281 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak 5282 fi 5283fi 5284if test "$nettle" = "yes" ; then 5285 echo "CONFIG_NETTLE=y" >> $config_host_mak 5286 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 5287 if test "$nettle_kdf" = "yes" ; then 5288 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak 5289 fi 5290fi 5291if test "$tasn1" = "yes" ; then 5292 echo "CONFIG_TASN1=y" >> $config_host_mak 5293fi 5294if test "$have_ifaddrs_h" = "yes" ; then 5295 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 5296fi 5297if test "$have_broken_size_max" = "yes" ; then 5298 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 5299fi 5300 5301# Work around a system header bug with some kernel/XFS header 5302# versions where they both try to define 'struct fsxattr': 5303# xfs headers will not try to redefine structs from linux headers 5304# if this macro is set. 5305if test "$have_fsxattr" = "yes" ; then 5306 echo "HAVE_FSXATTR=y" >> $config_host_mak 5307fi 5308if test "$vte" = "yes" ; then 5309 echo "CONFIG_VTE=y" >> $config_host_mak 5310 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 5311fi 5312if test "$virglrenderer" = "yes" ; then 5313 echo "CONFIG_VIRGL=y" >> $config_host_mak 5314 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 5315 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 5316fi 5317if test "$xen" = "yes" ; then 5318 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 5319 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 5320 if test "$xen_pv_domain_build" = "yes" ; then 5321 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 5322 fi 5323fi 5324if test "$linux_aio" = "yes" ; then 5325 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 5326fi 5327if test "$attr" = "yes" ; then 5328 echo "CONFIG_ATTR=y" >> $config_host_mak 5329fi 5330if test "$libattr" = "yes" ; then 5331 echo "CONFIG_LIBATTR=y" >> $config_host_mak 5332fi 5333if test "$virtfs" = "yes" ; then 5334 echo "CONFIG_VIRTFS=y" >> $config_host_mak 5335fi 5336if test "$vhost_scsi" = "yes" ; then 5337 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 5338fi 5339if test "$vhost_net" = "yes" ; then 5340 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 5341fi 5342if test "$vhost_vsock" = "yes" ; then 5343 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 5344fi 5345if test "$blobs" = "yes" ; then 5346 echo "INSTALL_BLOBS=yes" >> $config_host_mak 5347fi 5348if test "$iovec" = "yes" ; then 5349 echo "CONFIG_IOVEC=y" >> $config_host_mak 5350fi 5351if test "$preadv" = "yes" ; then 5352 echo "CONFIG_PREADV=y" >> $config_host_mak 5353fi 5354if test "$fdt" = "yes" ; then 5355 echo "CONFIG_FDT=y" >> $config_host_mak 5356fi 5357if test "$signalfd" = "yes" ; then 5358 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 5359fi 5360if test "$tcg_interpreter" = "yes" ; then 5361 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 5362fi 5363if test "$fdatasync" = "yes" ; then 5364 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 5365fi 5366if test "$madvise" = "yes" ; then 5367 echo "CONFIG_MADVISE=y" >> $config_host_mak 5368fi 5369if test "$posix_madvise" = "yes" ; then 5370 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 5371fi 5372 5373if test "$spice" = "yes" ; then 5374 echo "CONFIG_SPICE=y" >> $config_host_mak 5375fi 5376 5377if test "$smartcard" = "yes" ; then 5378 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 5379fi 5380 5381if test "$libusb" = "yes" ; then 5382 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 5383fi 5384 5385if test "$usb_redir" = "yes" ; then 5386 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 5387fi 5388 5389if test "$opengl" = "yes" ; then 5390 echo "CONFIG_OPENGL=y" >> $config_host_mak 5391 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 5392 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 5393 if test "$opengl_dmabuf" = "yes" ; then 5394 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 5395 fi 5396fi 5397 5398if test "$avx2_opt" = "yes" ; then 5399 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 5400fi 5401 5402if test "$lzo" = "yes" ; then 5403 echo "CONFIG_LZO=y" >> $config_host_mak 5404fi 5405 5406if test "$snappy" = "yes" ; then 5407 echo "CONFIG_SNAPPY=y" >> $config_host_mak 5408fi 5409 5410if test "$bzip2" = "yes" ; then 5411 echo "CONFIG_BZIP2=y" >> $config_host_mak 5412 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 5413fi 5414 5415if test "$libiscsi" = "yes" ; then 5416 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 5417 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 5418 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 5419fi 5420 5421if test "$libnfs" = "yes" ; then 5422 echo "CONFIG_LIBNFS=m" >> $config_host_mak 5423 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 5424fi 5425 5426if test "$seccomp" = "yes"; then 5427 echo "CONFIG_SECCOMP=y" >> $config_host_mak 5428fi 5429 5430# XXX: suppress that 5431if [ "$bsd" = "yes" ] ; then 5432 echo "CONFIG_BSD=y" >> $config_host_mak 5433fi 5434 5435if test "$localtime_r" = "yes" ; then 5436 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 5437fi 5438if test "$qom_cast_debug" = "yes" ; then 5439 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 5440fi 5441if test "$rbd" = "yes" ; then 5442 echo "CONFIG_RBD=m" >> $config_host_mak 5443 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 5444 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 5445fi 5446 5447echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 5448if test "$coroutine_pool" = "yes" ; then 5449 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 5450else 5451 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 5452fi 5453 5454if test "$debug_stack_usage" = "yes" ; then 5455 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 5456fi 5457 5458if test "$open_by_handle_at" = "yes" ; then 5459 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 5460fi 5461 5462if test "$linux_magic_h" = "yes" ; then 5463 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 5464fi 5465 5466if test "$pragma_diagnostic_available" = "yes" ; then 5467 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 5468fi 5469 5470if test "$valgrind_h" = "yes" ; then 5471 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 5472fi 5473 5474if test "$has_environ" = "yes" ; then 5475 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 5476fi 5477 5478if test "$cpuid_h" = "yes" ; then 5479 echo "CONFIG_CPUID_H=y" >> $config_host_mak 5480fi 5481 5482if test "$int128" = "yes" ; then 5483 echo "CONFIG_INT128=y" >> $config_host_mak 5484fi 5485 5486if test "$getauxval" = "yes" ; then 5487 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 5488fi 5489 5490if test "$glusterfs" = "yes" ; then 5491 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 5492 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 5493 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 5494fi 5495 5496if test "$glusterfs_xlator_opt" = "yes" ; then 5497 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 5498fi 5499 5500if test "$glusterfs_discard" = "yes" ; then 5501 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 5502fi 5503 5504if test "$glusterfs_zerofill" = "yes" ; then 5505 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 5506fi 5507 5508if test "$archipelago" = "yes" ; then 5509 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak 5510 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak 5511fi 5512 5513if test "$libssh2" = "yes" ; then 5514 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 5515 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 5516 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 5517fi 5518 5519# USB host support 5520if test "$libusb" = "yes"; then 5521 echo "HOST_USB=libusb legacy" >> $config_host_mak 5522else 5523 echo "HOST_USB=stub" >> $config_host_mak 5524fi 5525 5526# TPM passthrough support? 5527if test "$tpm" = "yes"; then 5528 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 5529 if test "$tpm_passthrough" = "yes"; then 5530 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 5531 fi 5532fi 5533 5534echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 5535if have_backend "nop"; then 5536 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 5537fi 5538if have_backend "simple"; then 5539 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 5540 # Set the appropriate trace file. 5541 trace_file="\"$trace_file-\" FMT_pid" 5542fi 5543if have_backend "log"; then 5544 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 5545fi 5546if have_backend "ust"; then 5547 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 5548fi 5549if have_backend "dtrace"; then 5550 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 5551 if test "$trace_backend_stap" = "yes" ; then 5552 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 5553 fi 5554fi 5555if have_backend "ftrace"; then 5556 if test "$linux" = "yes" ; then 5557 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 5558 else 5559 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 5560 fi 5561fi 5562if have_backend "syslog"; then 5563 if test "$posix_syslog" = "yes" ; then 5564 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 5565 else 5566 feature_not_found "syslog(trace backend)" "syslog not available" 5567 fi 5568fi 5569echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 5570 5571if test "$rdma" = "yes" ; then 5572 echo "CONFIG_RDMA=y" >> $config_host_mak 5573fi 5574 5575if test "$have_rtnetlink" = "yes" ; then 5576 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 5577fi 5578 5579if test "$replication" = "yes" ; then 5580 echo "CONFIG_REPLICATION=y" >> $config_host_mak 5581fi 5582 5583# Hold two types of flag: 5584# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 5585# a thread we have a handle to 5586# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 5587# platform 5588if test "$pthread_setname_np" = "yes" ; then 5589 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 5590 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 5591fi 5592 5593if test "$tcg_interpreter" = "yes"; then 5594 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 5595elif test "$ARCH" = "sparc64" ; then 5596 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 5597elif test "$ARCH" = "s390x" ; then 5598 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 5599elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 5600 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 5601elif test "$ARCH" = "ppc64" ; then 5602 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 5603else 5604 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 5605fi 5606QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES" 5607 5608echo "TOOLS=$tools" >> $config_host_mak 5609echo "ROMS=$roms" >> $config_host_mak 5610echo "MAKE=$make" >> $config_host_mak 5611echo "INSTALL=$install" >> $config_host_mak 5612echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 5613echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 5614echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 5615echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 5616echo "PYTHON=$python" >> $config_host_mak 5617echo "CC=$cc" >> $config_host_mak 5618if $iasl -h > /dev/null 2>&1; then 5619 echo "IASL=$iasl" >> $config_host_mak 5620fi 5621echo "CC_I386=$cc_i386" >> $config_host_mak 5622echo "HOST_CC=$host_cc" >> $config_host_mak 5623echo "CXX=$cxx" >> $config_host_mak 5624echo "OBJCC=$objcc" >> $config_host_mak 5625echo "AR=$ar" >> $config_host_mak 5626echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 5627echo "AS=$as" >> $config_host_mak 5628echo "CCAS=$ccas" >> $config_host_mak 5629echo "CPP=$cpp" >> $config_host_mak 5630echo "OBJCOPY=$objcopy" >> $config_host_mak 5631echo "LD=$ld" >> $config_host_mak 5632echo "NM=$nm" >> $config_host_mak 5633echo "WINDRES=$windres" >> $config_host_mak 5634echo "CFLAGS=$CFLAGS" >> $config_host_mak 5635echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 5636echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 5637echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 5638if test "$sparse" = "yes" ; then 5639 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 5640 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 5641 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 5642 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 5643 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 5644fi 5645if test "$cross_prefix" != ""; then 5646 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 5647else 5648 echo "AUTOCONF_HOST := " >> $config_host_mak 5649fi 5650echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 5651echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 5652echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 5653echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 5654echo "LIBS+=$LIBS" >> $config_host_mak 5655echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 5656echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 5657echo "EXESUF=$EXESUF" >> $config_host_mak 5658echo "DSOSUF=$DSOSUF" >> $config_host_mak 5659echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 5660echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 5661echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 5662echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 5663echo "POD2MAN=$POD2MAN" >> $config_host_mak 5664echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 5665if test "$gcov" = "yes" ; then 5666 echo "CONFIG_GCOV=y" >> $config_host_mak 5667 echo "GCOV=$gcov_tool" >> $config_host_mak 5668fi 5669 5670# use included Linux headers 5671if test "$linux" = "yes" ; then 5672 mkdir -p linux-headers 5673 case "$cpu" in 5674 i386|x86_64|x32) 5675 linux_arch=x86 5676 ;; 5677 ppcemb|ppc|ppc64) 5678 linux_arch=powerpc 5679 ;; 5680 s390x) 5681 linux_arch=s390 5682 ;; 5683 aarch64) 5684 linux_arch=arm64 5685 ;; 5686 mips64) 5687 linux_arch=mips 5688 ;; 5689 *) 5690 # For most CPUs the kernel architecture name and QEMU CPU name match. 5691 linux_arch="$cpu" 5692 ;; 5693 esac 5694 # For non-KVM architectures we will not have asm headers 5695 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 5696 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 5697 fi 5698fi 5699 5700for target in $target_list; do 5701target_dir="$target" 5702config_target_mak=$target_dir/config-target.mak 5703target_name=$(echo $target | cut -d '-' -f 1) 5704target_bigendian="no" 5705 5706case "$target_name" in 5707 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 5708 target_bigendian=yes 5709 ;; 5710esac 5711target_softmmu="no" 5712target_user_only="no" 5713target_linux_user="no" 5714target_bsd_user="no" 5715case "$target" in 5716 ${target_name}-softmmu) 5717 target_softmmu="yes" 5718 ;; 5719 ${target_name}-linux-user) 5720 if test "$linux" != "yes" ; then 5721 error_exit "Target '$target' is only available on a Linux host" 5722 fi 5723 target_user_only="yes" 5724 target_linux_user="yes" 5725 ;; 5726 ${target_name}-bsd-user) 5727 if test "$bsd" != "yes" ; then 5728 error_exit "Target '$target' is only available on a BSD host" 5729 fi 5730 target_user_only="yes" 5731 target_bsd_user="yes" 5732 ;; 5733 *) 5734 error_exit "Target '$target' not recognised" 5735 exit 1 5736 ;; 5737esac 5738 5739mkdir -p $target_dir 5740echo "# Automatically generated by configure - do not modify" > $config_target_mak 5741 5742bflt="no" 5743interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 5744gdb_xml_files="" 5745 5746TARGET_ARCH="$target_name" 5747TARGET_BASE_ARCH="" 5748TARGET_ABI_DIR="" 5749 5750case "$target_name" in 5751 i386) 5752 ;; 5753 x86_64) 5754 TARGET_BASE_ARCH=i386 5755 ;; 5756 alpha) 5757 ;; 5758 arm|armeb) 5759 TARGET_ARCH=arm 5760 bflt="yes" 5761 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 5762 ;; 5763 aarch64) 5764 TARGET_BASE_ARCH=arm 5765 bflt="yes" 5766 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 5767 ;; 5768 cris) 5769 ;; 5770 lm32) 5771 ;; 5772 m68k) 5773 bflt="yes" 5774 gdb_xml_files="cf-core.xml cf-fp.xml" 5775 ;; 5776 microblaze|microblazeel) 5777 TARGET_ARCH=microblaze 5778 bflt="yes" 5779 ;; 5780 mips|mipsel) 5781 TARGET_ARCH=mips 5782 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 5783 ;; 5784 mipsn32|mipsn32el) 5785 TARGET_ARCH=mips64 5786 TARGET_BASE_ARCH=mips 5787 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 5788 echo "TARGET_ABI32=y" >> $config_target_mak 5789 ;; 5790 mips64|mips64el) 5791 TARGET_ARCH=mips64 5792 TARGET_BASE_ARCH=mips 5793 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 5794 ;; 5795 moxie) 5796 ;; 5797 or32) 5798 TARGET_ARCH=openrisc 5799 TARGET_BASE_ARCH=openrisc 5800 ;; 5801 ppc) 5802 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5803 ;; 5804 ppcemb) 5805 TARGET_BASE_ARCH=ppc 5806 TARGET_ABI_DIR=ppc 5807 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5808 ;; 5809 ppc64) 5810 TARGET_BASE_ARCH=ppc 5811 TARGET_ABI_DIR=ppc 5812 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 5813 ;; 5814 ppc64le) 5815 TARGET_ARCH=ppc64 5816 TARGET_BASE_ARCH=ppc 5817 TARGET_ABI_DIR=ppc 5818 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 5819 ;; 5820 ppc64abi32) 5821 TARGET_ARCH=ppc64 5822 TARGET_BASE_ARCH=ppc 5823 TARGET_ABI_DIR=ppc 5824 echo "TARGET_ABI32=y" >> $config_target_mak 5825 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 5826 ;; 5827 sh4|sh4eb) 5828 TARGET_ARCH=sh4 5829 bflt="yes" 5830 ;; 5831 sparc) 5832 ;; 5833 sparc64) 5834 TARGET_BASE_ARCH=sparc 5835 ;; 5836 sparc32plus) 5837 TARGET_ARCH=sparc64 5838 TARGET_BASE_ARCH=sparc 5839 TARGET_ABI_DIR=sparc 5840 echo "TARGET_ABI32=y" >> $config_target_mak 5841 ;; 5842 s390x) 5843 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml" 5844 ;; 5845 tilegx) 5846 ;; 5847 tricore) 5848 ;; 5849 unicore32) 5850 ;; 5851 xtensa|xtensaeb) 5852 TARGET_ARCH=xtensa 5853 ;; 5854 *) 5855 error_exit "Unsupported target CPU" 5856 ;; 5857esac 5858# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 5859if [ "$TARGET_BASE_ARCH" = "" ]; then 5860 TARGET_BASE_ARCH=$TARGET_ARCH 5861fi 5862 5863symlink "$source_path/Makefile.target" "$target_dir/Makefile" 5864 5865upper() { 5866 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 5867} 5868 5869target_arch_name="$(upper $TARGET_ARCH)" 5870echo "TARGET_$target_arch_name=y" >> $config_target_mak 5871echo "TARGET_NAME=$target_name" >> $config_target_mak 5872echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 5873if [ "$TARGET_ABI_DIR" = "" ]; then 5874 TARGET_ABI_DIR=$TARGET_ARCH 5875fi 5876echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 5877if [ "$HOST_VARIANT_DIR" != "" ]; then 5878 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 5879fi 5880case "$target_name" in 5881 i386|x86_64) 5882 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then 5883 echo "CONFIG_XEN=y" >> $config_target_mak 5884 if test "$xen_pci_passthrough" = yes; then 5885 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 5886 fi 5887 fi 5888 ;; 5889 *) 5890esac 5891case "$target_name" in 5892 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips) 5893 # Make sure the target and host cpus are compatible 5894 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \ 5895 \( "$target_name" = "$cpu" -o \ 5896 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \ 5897 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \ 5898 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \ 5899 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \ 5900 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \ 5901 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \ 5902 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \ 5903 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \ 5904 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then 5905 echo "CONFIG_KVM=y" >> $config_target_mak 5906 if test "$vhost_net" = "yes" ; then 5907 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 5908 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak 5909 fi 5910 fi 5911esac 5912if test "$target_bigendian" = "yes" ; then 5913 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 5914fi 5915if test "$target_softmmu" = "yes" ; then 5916 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 5917fi 5918if test "$target_user_only" = "yes" ; then 5919 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 5920 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 5921fi 5922if test "$target_linux_user" = "yes" ; then 5923 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 5924fi 5925list="" 5926if test ! -z "$gdb_xml_files" ; then 5927 for x in $gdb_xml_files; do 5928 list="$list $source_path/gdb-xml/$x" 5929 done 5930 echo "TARGET_XML_FILES=$list" >> $config_target_mak 5931fi 5932 5933if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 5934 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 5935fi 5936if test "$target_bsd_user" = "yes" ; then 5937 echo "CONFIG_BSD_USER=y" >> $config_target_mak 5938fi 5939 5940# generate QEMU_CFLAGS/LDFLAGS for targets 5941 5942cflags="" 5943ldflags="" 5944 5945disas_config() { 5946 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 5947 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 5948} 5949 5950for i in $ARCH $TARGET_BASE_ARCH ; do 5951 case "$i" in 5952 alpha) 5953 disas_config "ALPHA" 5954 ;; 5955 aarch64) 5956 if test -n "${cxx}"; then 5957 disas_config "ARM_A64" 5958 fi 5959 ;; 5960 arm) 5961 disas_config "ARM" 5962 if test -n "${cxx}"; then 5963 disas_config "ARM_A64" 5964 fi 5965 ;; 5966 cris) 5967 disas_config "CRIS" 5968 ;; 5969 i386|x86_64|x32) 5970 disas_config "I386" 5971 ;; 5972 ia64*) 5973 disas_config "IA64" 5974 ;; 5975 lm32) 5976 disas_config "LM32" 5977 ;; 5978 m68k) 5979 disas_config "M68K" 5980 ;; 5981 microblaze*) 5982 disas_config "MICROBLAZE" 5983 ;; 5984 mips*) 5985 disas_config "MIPS" 5986 ;; 5987 moxie*) 5988 disas_config "MOXIE" 5989 ;; 5990 or32) 5991 disas_config "OPENRISC" 5992 ;; 5993 ppc*) 5994 disas_config "PPC" 5995 ;; 5996 s390*) 5997 disas_config "S390" 5998 ;; 5999 sh4) 6000 disas_config "SH4" 6001 ;; 6002 sparc*) 6003 disas_config "SPARC" 6004 ;; 6005 xtensa*) 6006 disas_config "XTENSA" 6007 ;; 6008 esac 6009done 6010if test "$tcg_interpreter" = "yes" ; then 6011 disas_config "TCI" 6012fi 6013 6014case "$ARCH" in 6015alpha) 6016 # Ensure there's only a single GP 6017 cflags="-msmall-data $cflags" 6018;; 6019esac 6020 6021if test "$gprof" = "yes" ; then 6022 echo "TARGET_GPROF=yes" >> $config_target_mak 6023 if test "$target_linux_user" = "yes" ; then 6024 cflags="-p $cflags" 6025 ldflags="-p $ldflags" 6026 fi 6027 if test "$target_softmmu" = "yes" ; then 6028 ldflags="-p $ldflags" 6029 echo "GPROF_CFLAGS=-p" >> $config_target_mak 6030 fi 6031fi 6032 6033if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 6034 ldflags="$ldflags $textseg_ldflags" 6035fi 6036 6037echo "LDFLAGS+=$ldflags" >> $config_target_mak 6038echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 6039 6040done # for target in $targets 6041 6042if [ "$pixman" = "internal" ]; then 6043 echo "config-host.h: subdir-pixman" >> $config_host_mak 6044fi 6045 6046if [ "$dtc_internal" = "yes" ]; then 6047 echo "config-host.h: subdir-dtc" >> $config_host_mak 6048fi 6049 6050if test "$numa" = "yes"; then 6051 echo "CONFIG_NUMA=y" >> $config_host_mak 6052fi 6053 6054if test "$ccache_cpp2" = "yes"; then 6055 echo "export CCACHE_CPP2=y" >> $config_host_mak 6056fi 6057 6058# build tree in object directory in case the source is not in the current directory 6059DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests" 6060DIRS="$DIRS fsdev" 6061DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 6062DIRS="$DIRS roms/seabios roms/vgabios" 6063DIRS="$DIRS qapi-generated" 6064FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 6065FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 6066FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 6067FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 6068FILES="$FILES pc-bios/spapr-rtas/Makefile" 6069FILES="$FILES pc-bios/s390-ccw/Makefile" 6070FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 6071FILES="$FILES pc-bios/qemu-icon.bmp" 6072for bios_file in \ 6073 $source_path/pc-bios/*.bin \ 6074 $source_path/pc-bios/*.aml \ 6075 $source_path/pc-bios/*.rom \ 6076 $source_path/pc-bios/*.dtb \ 6077 $source_path/pc-bios/*.img \ 6078 $source_path/pc-bios/openbios-* \ 6079 $source_path/pc-bios/u-boot.* \ 6080 $source_path/pc-bios/palcode-* 6081do 6082 FILES="$FILES pc-bios/$(basename $bios_file)" 6083done 6084for test_file in $(find $source_path/tests/acpi-test-data -type f) 6085do 6086 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')" 6087done 6088mkdir -p $DIRS 6089for f in $FILES ; do 6090 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 6091 symlink "$source_path/$f" "$f" 6092 fi 6093done 6094 6095# temporary config to build submodules 6096for rom in seabios vgabios ; do 6097 config_mak=roms/$rom/config.mak 6098 echo "# Automatically generated by configure - do not modify" > $config_mak 6099 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 6100 echo "AS=$as" >> $config_mak 6101 echo "CCAS=$ccas" >> $config_mak 6102 echo "CC=$cc" >> $config_mak 6103 echo "BCC=bcc" >> $config_mak 6104 echo "CPP=$cpp" >> $config_mak 6105 echo "OBJCOPY=objcopy" >> $config_mak 6106 echo "IASL=$iasl" >> $config_mak 6107 echo "LD=$ld" >> $config_mak 6108done 6109 6110# set up tests data directory 6111if [ ! -e tests/data ]; then 6112 symlink "$source_path/tests/data" tests/data 6113fi 6114 6115# set up qemu-iotests in this build directory 6116iotests_common_env="tests/qemu-iotests/common.env" 6117iotests_check="tests/qemu-iotests/check" 6118 6119echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 6120echo >> "$iotests_common_env" 6121echo "export PYTHON='$python'" >> "$iotests_common_env" 6122 6123if [ ! -e "$iotests_check" ]; then 6124 symlink "$source_path/$iotests_check" "$iotests_check" 6125fi 6126 6127# Save the configure command line for later reuse. 6128cat <<EOD >config.status 6129#!/bin/sh 6130# Generated by configure. 6131# Run this file to recreate the current configuration. 6132# Compiler output produced by configure, useful for debugging 6133# configure, is in config.log if it exists. 6134EOD 6135printf "exec" >>config.status 6136printf " '%s'" "$0" "$@" >>config.status 6137echo ' "$@"' >>config.status 6138chmod +x config.status 6139 6140rm -r "$TMPDIR1" 6141