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