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 3076if test "$mingw32" = yes; then 3077 glib_req_ver=2.30 3078else 3079 glib_req_ver=2.22 3080fi 3081glib_modules=gthread-2.0 3082if test "$modules" = yes; then 3083 glib_modules="$glib_modules gmodule-2.0" 3084fi 3085 3086# This workaround is required due to a bug in pkg-config file for glib as it 3087# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3088 3089if test "$static" = yes -a "$mingw32" = yes; then 3090 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" 3091fi 3092 3093for i in $glib_modules; do 3094 if $pkg_config --atleast-version=$glib_req_ver $i; then 3095 glib_cflags=$($pkg_config --cflags $i) 3096 glib_libs=$($pkg_config --libs $i) 3097 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" 3098 LIBS="$glib_libs $LIBS" 3099 libs_qga="$glib_libs $libs_qga" 3100 else 3101 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3102 fi 3103done 3104 3105# Sanity check that the current size_t matches the 3106# size that glib thinks it should be. This catches 3107# problems on multi-arch where people try to build 3108# 32-bit QEMU while pointing at 64-bit glib headers 3109cat > $TMPC <<EOF 3110#include <glib.h> 3111#include <unistd.h> 3112 3113#define QEMU_BUILD_BUG_ON(x) \ 3114 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3115 3116int main(void) { 3117 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3118 return 0; 3119} 3120EOF 3121 3122if ! compile_prog "$CFLAGS" "$LIBS" ; then 3123 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3124 "You probably need to set PKG_CONFIG_LIBDIR"\ 3125 "to point to the right pkg-config files for your"\ 3126 "build target" 3127fi 3128 3129# g_test_trap_subprocess added in 2.38. Used by some tests. 3130glib_subprocess=yes 3131if ! $pkg_config --atleast-version=2.38 glib-2.0; then 3132 glib_subprocess=no 3133fi 3134 3135# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3136cat > $TMPC << EOF 3137#include <glib.h> 3138int main(void) { return 0; } 3139EOF 3140if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3141 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3142 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3143 CFLAGS="-Wno-unknown-attributes $CFLAGS" 3144 fi 3145fi 3146 3147########################################## 3148# SHA command probe for modules 3149if test "$modules" = yes; then 3150 shacmd_probe="sha1sum sha1 shasum" 3151 for c in $shacmd_probe; do 3152 if has $c; then 3153 shacmd="$c" 3154 break 3155 fi 3156 done 3157 if test "$shacmd" = ""; then 3158 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3159 fi 3160fi 3161 3162########################################## 3163# pixman support probe 3164 3165if test "$pixman" = ""; then 3166 if test "$want_tools" = "no" -a "$softmmu" = "no"; then 3167 pixman="none" 3168 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 3169 pixman="system" 3170 else 3171 pixman="internal" 3172 fi 3173fi 3174if test "$pixman" = "none"; then 3175 if test "$want_tools" != "no" -o "$softmmu" != "no"; then 3176 error_exit "pixman disabled but system emulation or tools build" \ 3177 "enabled. You can turn off pixman only if you also" \ 3178 "disable all system emulation targets and the tools" \ 3179 "build with '--disable-tools --disable-system'." 3180 fi 3181 pixman_cflags= 3182 pixman_libs= 3183elif test "$pixman" = "system"; then 3184 # pixman version has been checked above 3185 pixman_cflags=$($pkg_config --cflags pixman-1) 3186 pixman_libs=$($pkg_config --libs pixman-1) 3187else 3188 if test ! -d ${source_path}/pixman/pixman; then 3189 error_exit "pixman >= 0.21.8 not present. Your options:" \ 3190 " (1) Preferred: Install the pixman devel package (any recent" \ 3191 " distro should have packages as Xorg needs pixman too)." \ 3192 " (2) Fetch the pixman submodule, using:" \ 3193 " git submodule update --init pixman" 3194 fi 3195 mkdir -p pixman/pixman 3196 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman" 3197 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1" 3198fi 3199 3200########################################## 3201# libcap probe 3202 3203if test "$cap" != "no" ; then 3204 cat > $TMPC <<EOF 3205#include <stdio.h> 3206#include <sys/capability.h> 3207int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; } 3208EOF 3209 if compile_prog "" "-lcap" ; then 3210 cap=yes 3211 else 3212 cap=no 3213 fi 3214fi 3215 3216########################################## 3217# pthread probe 3218PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3219 3220pthread=no 3221cat > $TMPC << EOF 3222#include <pthread.h> 3223static void *f(void *p) { return NULL; } 3224int main(void) { 3225 pthread_t thread; 3226 pthread_create(&thread, 0, f, 0); 3227 return 0; 3228} 3229EOF 3230if compile_prog "" "" ; then 3231 pthread=yes 3232else 3233 for pthread_lib in $PTHREADLIBS_LIST; do 3234 if compile_prog "" "$pthread_lib" ; then 3235 pthread=yes 3236 found=no 3237 for lib_entry in $LIBS; do 3238 if test "$lib_entry" = "$pthread_lib"; then 3239 found=yes 3240 break 3241 fi 3242 done 3243 if test "$found" = "no"; then 3244 LIBS="$pthread_lib $LIBS" 3245 fi 3246 PTHREAD_LIB="$pthread_lib" 3247 break 3248 fi 3249 done 3250fi 3251 3252if test "$mingw32" != yes -a "$pthread" = no; then 3253 error_exit "pthread check failed" \ 3254 "Make sure to have the pthread libs and headers installed." 3255fi 3256 3257# check for pthread_setname_np 3258pthread_setname_np=no 3259cat > $TMPC << EOF 3260#include <pthread.h> 3261 3262static void *f(void *p) { return NULL; } 3263int main(void) 3264{ 3265 pthread_t thread; 3266 pthread_create(&thread, 0, f, 0); 3267 pthread_setname_np(thread, "QEMU"); 3268 return 0; 3269} 3270EOF 3271if compile_prog "" "$pthread_lib" ; then 3272 pthread_setname_np=yes 3273fi 3274 3275########################################## 3276# rbd probe 3277if test "$rbd" != "no" ; then 3278 cat > $TMPC <<EOF 3279#include <stdio.h> 3280#include <rbd/librbd.h> 3281int main(void) { 3282 rados_t cluster; 3283 rados_create(&cluster, NULL); 3284 return 0; 3285} 3286EOF 3287 rbd_libs="-lrbd -lrados" 3288 if compile_prog "" "$rbd_libs" ; then 3289 rbd=yes 3290 else 3291 if test "$rbd" = "yes" ; then 3292 feature_not_found "rados block device" "Install librbd/ceph devel" 3293 fi 3294 rbd=no 3295 fi 3296fi 3297 3298########################################## 3299# libssh2 probe 3300min_libssh2_version=1.2.8 3301if test "$libssh2" != "no" ; then 3302 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then 3303 libssh2_cflags=$($pkg_config libssh2 --cflags) 3304 libssh2_libs=$($pkg_config libssh2 --libs) 3305 libssh2=yes 3306 else 3307 if test "$libssh2" = "yes" ; then 3308 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2" 3309 fi 3310 libssh2=no 3311 fi 3312fi 3313 3314########################################## 3315# libssh2_sftp_fsync probe 3316 3317if test "$libssh2" = "yes"; then 3318 cat > $TMPC <<EOF 3319#include <stdio.h> 3320#include <libssh2.h> 3321#include <libssh2_sftp.h> 3322int main(void) { 3323 LIBSSH2_SESSION *session; 3324 LIBSSH2_SFTP *sftp; 3325 LIBSSH2_SFTP_HANDLE *sftp_handle; 3326 session = libssh2_session_init (); 3327 sftp = libssh2_sftp_init (session); 3328 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0); 3329 libssh2_sftp_fsync (sftp_handle); 3330 return 0; 3331} 3332EOF 3333 # libssh2_cflags/libssh2_libs defined in previous test. 3334 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then 3335 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS" 3336 fi 3337fi 3338 3339########################################## 3340# linux-aio probe 3341 3342if test "$linux_aio" != "no" ; then 3343 cat > $TMPC <<EOF 3344#include <libaio.h> 3345#include <sys/eventfd.h> 3346#include <stddef.h> 3347int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 3348EOF 3349 if compile_prog "" "-laio" ; then 3350 linux_aio=yes 3351 else 3352 if test "$linux_aio" = "yes" ; then 3353 feature_not_found "linux AIO" "Install libaio devel" 3354 fi 3355 linux_aio=no 3356 fi 3357fi 3358 3359########################################## 3360# TPM passthrough is only on x86 Linux 3361 3362if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then 3363 tpm_passthrough=$tpm 3364else 3365 tpm_passthrough=no 3366fi 3367 3368########################################## 3369# attr probe 3370 3371if test "$attr" != "no" ; then 3372 cat > $TMPC <<EOF 3373#include <stdio.h> 3374#include <sys/types.h> 3375#ifdef CONFIG_LIBATTR 3376#include <attr/xattr.h> 3377#else 3378#include <sys/xattr.h> 3379#endif 3380int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 3381EOF 3382 if compile_prog "" "" ; then 3383 attr=yes 3384 # Older distros have <attr/xattr.h>, and need -lattr: 3385 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 3386 attr=yes 3387 LIBS="-lattr $LIBS" 3388 libattr=yes 3389 else 3390 if test "$attr" = "yes" ; then 3391 feature_not_found "ATTR" "Install libc6 or libattr devel" 3392 fi 3393 attr=no 3394 fi 3395fi 3396 3397########################################## 3398# iovec probe 3399cat > $TMPC <<EOF 3400#include <sys/types.h> 3401#include <sys/uio.h> 3402#include <unistd.h> 3403int main(void) { return sizeof(struct iovec); } 3404EOF 3405iovec=no 3406if compile_prog "" "" ; then 3407 iovec=yes 3408fi 3409 3410########################################## 3411# preadv probe 3412cat > $TMPC <<EOF 3413#include <sys/types.h> 3414#include <sys/uio.h> 3415#include <unistd.h> 3416int main(void) { return preadv(0, 0, 0, 0); } 3417EOF 3418preadv=no 3419if compile_prog "" "" ; then 3420 preadv=yes 3421fi 3422 3423########################################## 3424# fdt probe 3425# fdt support is mandatory for at least some target architectures, 3426# so insist on it if we're building those system emulators. 3427fdt_required=no 3428for target in $target_list; do 3429 case $target in 3430 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu) 3431 fdt_required=yes 3432 ;; 3433 esac 3434done 3435 3436if test "$fdt_required" = "yes"; then 3437 if test "$fdt" = "no"; then 3438 error_exit "fdt disabled but some requested targets require it." \ 3439 "You can turn off fdt only if you also disable all the system emulation" \ 3440 "targets which need it (by specifying a cut down --target-list)." 3441 fi 3442 fdt=yes 3443fi 3444 3445if test "$fdt" != "no" ; then 3446 fdt_libs="-lfdt" 3447 # explicitly check for libfdt_env.h as it is missing in some stable installs 3448 # and test for required functions to make sure we are on a version >= 1.4.2 3449 cat > $TMPC << EOF 3450#include <libfdt.h> 3451#include <libfdt_env.h> 3452int main(void) { fdt_first_subnode(0, 0); return 0; } 3453EOF 3454 if compile_prog "" "$fdt_libs" ; then 3455 # system DTC is good - use it 3456 fdt=yes 3457 elif test -d ${source_path}/dtc/libfdt ; then 3458 # have submodule DTC - use it 3459 fdt=yes 3460 dtc_internal="yes" 3461 mkdir -p dtc 3462 if [ "$pwd_is_source_path" != "y" ] ; then 3463 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 3464 symlink "$source_path/dtc/scripts" "dtc/scripts" 3465 fi 3466 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 3467 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs" 3468 elif test "$fdt" = "yes" ; then 3469 # have neither and want - prompt for system/submodule install 3470 error_exit "DTC (libfdt) version >= 1.4.2 not present. Your options:" \ 3471 " (1) Preferred: Install the DTC (libfdt) devel package" \ 3472 " (2) Fetch the DTC submodule, using:" \ 3473 " git submodule update --init dtc" 3474 else 3475 # don't have and don't want 3476 fdt_libs= 3477 fdt=no 3478 fi 3479fi 3480 3481libs_softmmu="$libs_softmmu $fdt_libs" 3482 3483########################################## 3484# opengl probe (for sdl2, gtk, milkymist-tmu2) 3485 3486if test "$opengl" != "no" ; then 3487 opengl_pkgs="epoxy libdrm gbm" 3488 if $pkg_config $opengl_pkgs x11; then 3489 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags" 3490 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs" 3491 opengl=yes 3492 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 3493 gtk_gl="yes" 3494 fi 3495 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 3496 else 3497 if test "$opengl" = "yes" ; then 3498 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 3499 fi 3500 opengl_cflags="" 3501 opengl_libs="" 3502 opengl=no 3503 fi 3504fi 3505 3506if test "$opengl" = "yes"; then 3507 cat > $TMPC << EOF 3508#include <epoxy/egl.h> 3509#ifndef EGL_MESA_image_dma_buf_export 3510# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 3511#endif 3512int main(void) { return 0; } 3513EOF 3514 if compile_prog "" "" ; then 3515 opengl_dmabuf=yes 3516 fi 3517fi 3518 3519 3520########################################## 3521# glusterfs probe 3522if test "$glusterfs" != "no" ; then 3523 if $pkg_config --atleast-version=3 glusterfs-api; then 3524 glusterfs="yes" 3525 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 3526 glusterfs_libs=$($pkg_config --libs glusterfs-api) 3527 if $pkg_config --atleast-version=4 glusterfs-api; then 3528 glusterfs_xlator_opt="yes" 3529 fi 3530 if $pkg_config --atleast-version=5 glusterfs-api; then 3531 glusterfs_discard="yes" 3532 fi 3533 if $pkg_config --atleast-version=6 glusterfs-api; then 3534 glusterfs_zerofill="yes" 3535 fi 3536 else 3537 if test "$glusterfs" = "yes" ; then 3538 feature_not_found "GlusterFS backend support" \ 3539 "Install glusterfs-api devel >= 3" 3540 fi 3541 glusterfs="no" 3542 fi 3543fi 3544 3545# Check for inotify functions when we are building linux-user 3546# emulator. This is done because older glibc versions don't 3547# have syscall stubs for these implemented. In that case we 3548# don't provide them even if kernel supports them. 3549# 3550inotify=no 3551cat > $TMPC << EOF 3552#include <sys/inotify.h> 3553 3554int 3555main(void) 3556{ 3557 /* try to start inotify */ 3558 return inotify_init(); 3559} 3560EOF 3561if compile_prog "" "" ; then 3562 inotify=yes 3563fi 3564 3565inotify1=no 3566cat > $TMPC << EOF 3567#include <sys/inotify.h> 3568 3569int 3570main(void) 3571{ 3572 /* try to start inotify */ 3573 return inotify_init1(0); 3574} 3575EOF 3576if compile_prog "" "" ; then 3577 inotify1=yes 3578fi 3579 3580# check if utimensat and futimens are supported 3581utimens=no 3582cat > $TMPC << EOF 3583#define _ATFILE_SOURCE 3584#include <stddef.h> 3585#include <fcntl.h> 3586#include <sys/stat.h> 3587 3588int main(void) 3589{ 3590 utimensat(AT_FDCWD, "foo", NULL, 0); 3591 futimens(0, NULL); 3592 return 0; 3593} 3594EOF 3595if compile_prog "" "" ; then 3596 utimens=yes 3597fi 3598 3599# check if pipe2 is there 3600pipe2=no 3601cat > $TMPC << EOF 3602#include <unistd.h> 3603#include <fcntl.h> 3604 3605int main(void) 3606{ 3607 int pipefd[2]; 3608 return pipe2(pipefd, O_CLOEXEC); 3609} 3610EOF 3611if compile_prog "" "" ; then 3612 pipe2=yes 3613fi 3614 3615# check if accept4 is there 3616accept4=no 3617cat > $TMPC << EOF 3618#include <sys/socket.h> 3619#include <stddef.h> 3620 3621int main(void) 3622{ 3623 accept4(0, NULL, NULL, SOCK_CLOEXEC); 3624 return 0; 3625} 3626EOF 3627if compile_prog "" "" ; then 3628 accept4=yes 3629fi 3630 3631# check if tee/splice is there. vmsplice was added same time. 3632splice=no 3633cat > $TMPC << EOF 3634#include <unistd.h> 3635#include <fcntl.h> 3636#include <limits.h> 3637 3638int main(void) 3639{ 3640 int len, fd = 0; 3641 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 3642 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 3643 return 0; 3644} 3645EOF 3646if compile_prog "" "" ; then 3647 splice=yes 3648fi 3649 3650########################################## 3651# libnuma probe 3652 3653if test "$numa" != "no" ; then 3654 cat > $TMPC << EOF 3655#include <numa.h> 3656int main(void) { return numa_available(); } 3657EOF 3658 3659 if compile_prog "" "-lnuma" ; then 3660 numa=yes 3661 libs_softmmu="-lnuma $libs_softmmu" 3662 else 3663 if test "$numa" = "yes" ; then 3664 feature_not_found "numa" "install numactl devel" 3665 fi 3666 numa=no 3667 fi 3668fi 3669 3670if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 3671 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 3672 exit 1 3673fi 3674 3675########################################## 3676# tcmalloc probe 3677 3678if test "$tcmalloc" = "yes" ; then 3679 cat > $TMPC << EOF 3680#include <stdlib.h> 3681int main(void) { malloc(1); return 0; } 3682EOF 3683 3684 if compile_prog "" "-ltcmalloc" ; then 3685 LIBS="-ltcmalloc $LIBS" 3686 else 3687 feature_not_found "tcmalloc" "install gperftools devel" 3688 fi 3689fi 3690 3691########################################## 3692# jemalloc probe 3693 3694if test "$jemalloc" = "yes" ; then 3695 cat > $TMPC << EOF 3696#include <stdlib.h> 3697int main(void) { malloc(1); return 0; } 3698EOF 3699 3700 if compile_prog "" "-ljemalloc" ; then 3701 LIBS="-ljemalloc $LIBS" 3702 else 3703 feature_not_found "jemalloc" "install jemalloc devel" 3704 fi 3705fi 3706 3707########################################## 3708# signalfd probe 3709signalfd="no" 3710cat > $TMPC << EOF 3711#include <unistd.h> 3712#include <sys/syscall.h> 3713#include <signal.h> 3714int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 3715EOF 3716 3717if compile_prog "" "" ; then 3718 signalfd=yes 3719fi 3720 3721# check if eventfd is supported 3722eventfd=no 3723cat > $TMPC << EOF 3724#include <sys/eventfd.h> 3725 3726int main(void) 3727{ 3728 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 3729} 3730EOF 3731if compile_prog "" "" ; then 3732 eventfd=yes 3733fi 3734 3735# check if memfd is supported 3736memfd=no 3737cat > $TMPC << EOF 3738#include <sys/memfd.h> 3739 3740int main(void) 3741{ 3742 return memfd_create("foo", MFD_ALLOW_SEALING); 3743} 3744EOF 3745if compile_prog "" "" ; then 3746 memfd=yes 3747fi 3748 3749 3750 3751# check for fallocate 3752fallocate=no 3753cat > $TMPC << EOF 3754#include <fcntl.h> 3755 3756int main(void) 3757{ 3758 fallocate(0, 0, 0, 0); 3759 return 0; 3760} 3761EOF 3762if compile_prog "" "" ; then 3763 fallocate=yes 3764fi 3765 3766# check for fallocate hole punching 3767fallocate_punch_hole=no 3768cat > $TMPC << EOF 3769#include <fcntl.h> 3770#include <linux/falloc.h> 3771 3772int main(void) 3773{ 3774 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 3775 return 0; 3776} 3777EOF 3778if compile_prog "" "" ; then 3779 fallocate_punch_hole=yes 3780fi 3781 3782# check that fallocate supports range zeroing inside the file 3783fallocate_zero_range=no 3784cat > $TMPC << EOF 3785#include <fcntl.h> 3786#include <linux/falloc.h> 3787 3788int main(void) 3789{ 3790 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 3791 return 0; 3792} 3793EOF 3794if compile_prog "" "" ; then 3795 fallocate_zero_range=yes 3796fi 3797 3798# check for posix_fallocate 3799posix_fallocate=no 3800cat > $TMPC << EOF 3801#include <fcntl.h> 3802 3803int main(void) 3804{ 3805 posix_fallocate(0, 0, 0); 3806 return 0; 3807} 3808EOF 3809if compile_prog "" "" ; then 3810 posix_fallocate=yes 3811fi 3812 3813# check for sync_file_range 3814sync_file_range=no 3815cat > $TMPC << EOF 3816#include <fcntl.h> 3817 3818int main(void) 3819{ 3820 sync_file_range(0, 0, 0, 0); 3821 return 0; 3822} 3823EOF 3824if compile_prog "" "" ; then 3825 sync_file_range=yes 3826fi 3827 3828# check for linux/fiemap.h and FS_IOC_FIEMAP 3829fiemap=no 3830cat > $TMPC << EOF 3831#include <sys/ioctl.h> 3832#include <linux/fs.h> 3833#include <linux/fiemap.h> 3834 3835int main(void) 3836{ 3837 ioctl(0, FS_IOC_FIEMAP, 0); 3838 return 0; 3839} 3840EOF 3841if compile_prog "" "" ; then 3842 fiemap=yes 3843fi 3844 3845# check for dup3 3846dup3=no 3847cat > $TMPC << EOF 3848#include <unistd.h> 3849 3850int main(void) 3851{ 3852 dup3(0, 0, 0); 3853 return 0; 3854} 3855EOF 3856if compile_prog "" "" ; then 3857 dup3=yes 3858fi 3859 3860# check for ppoll support 3861ppoll=no 3862cat > $TMPC << EOF 3863#include <poll.h> 3864 3865int main(void) 3866{ 3867 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 3868 ppoll(&pfd, 1, 0, 0); 3869 return 0; 3870} 3871EOF 3872if compile_prog "" "" ; then 3873 ppoll=yes 3874fi 3875 3876# check for prctl(PR_SET_TIMERSLACK , ... ) support 3877prctl_pr_set_timerslack=no 3878cat > $TMPC << EOF 3879#include <sys/prctl.h> 3880 3881int main(void) 3882{ 3883 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 3884 return 0; 3885} 3886EOF 3887if compile_prog "" "" ; then 3888 prctl_pr_set_timerslack=yes 3889fi 3890 3891# check for epoll support 3892epoll=no 3893cat > $TMPC << EOF 3894#include <sys/epoll.h> 3895 3896int main(void) 3897{ 3898 epoll_create(0); 3899 return 0; 3900} 3901EOF 3902if compile_prog "" "" ; then 3903 epoll=yes 3904fi 3905 3906# epoll_create1 is a later addition 3907# so we must check separately for its presence 3908epoll_create1=no 3909cat > $TMPC << EOF 3910#include <sys/epoll.h> 3911 3912int main(void) 3913{ 3914 /* Note that we use epoll_create1 as a value, not as 3915 * a function being called. This is necessary so that on 3916 * old SPARC glibc versions where the function was present in 3917 * the library but not declared in the header file we will 3918 * fail the configure check. (Otherwise we will get a compiler 3919 * warning but not an error, and will proceed to fail the 3920 * qemu compile where we compile with -Werror.) 3921 */ 3922 return (int)(uintptr_t)&epoll_create1; 3923} 3924EOF 3925if compile_prog "" "" ; then 3926 epoll_create1=yes 3927fi 3928 3929# check for sendfile support 3930sendfile=no 3931cat > $TMPC << EOF 3932#include <sys/sendfile.h> 3933 3934int main(void) 3935{ 3936 return sendfile(0, 0, 0, 0); 3937} 3938EOF 3939if compile_prog "" "" ; then 3940 sendfile=yes 3941fi 3942 3943# check for timerfd support (glibc 2.8 and newer) 3944timerfd=no 3945cat > $TMPC << EOF 3946#include <sys/timerfd.h> 3947 3948int main(void) 3949{ 3950 return(timerfd_create(CLOCK_REALTIME, 0)); 3951} 3952EOF 3953if compile_prog "" "" ; then 3954 timerfd=yes 3955fi 3956 3957# check for setns and unshare support 3958setns=no 3959cat > $TMPC << EOF 3960#include <sched.h> 3961 3962int main(void) 3963{ 3964 int ret; 3965 ret = setns(0, 0); 3966 ret = unshare(0); 3967 return ret; 3968} 3969EOF 3970if compile_prog "" "" ; then 3971 setns=yes 3972fi 3973 3974# clock_adjtime probe 3975clock_adjtime=no 3976cat > $TMPC <<EOF 3977#include <time.h> 3978 3979int main(void) 3980{ 3981 return clock_adjtime(0, 0); 3982} 3983EOF 3984clock_adjtime=no 3985if compile_prog "" "" ; then 3986 clock_adjtime=yes 3987fi 3988 3989# syncfs probe 3990syncfs=no 3991cat > $TMPC <<EOF 3992#include <unistd.h> 3993 3994int main(void) 3995{ 3996 return syncfs(0); 3997} 3998EOF 3999syncfs=no 4000if compile_prog "" "" ; then 4001 syncfs=yes 4002fi 4003 4004# Check if tools are available to build documentation. 4005if test "$docs" != "no" ; then 4006 if has makeinfo && has pod2man; then 4007 docs=yes 4008 else 4009 if test "$docs" = "yes" ; then 4010 feature_not_found "docs" "Install texinfo and Perl/perl-podlators" 4011 fi 4012 docs=no 4013 fi 4014fi 4015 4016# Search for bswap_32 function 4017byteswap_h=no 4018cat > $TMPC << EOF 4019#include <byteswap.h> 4020int main(void) { return bswap_32(0); } 4021EOF 4022if compile_prog "" "" ; then 4023 byteswap_h=yes 4024fi 4025 4026# Search for bswap32 function 4027bswap_h=no 4028cat > $TMPC << EOF 4029#include <sys/endian.h> 4030#include <sys/types.h> 4031#include <machine/bswap.h> 4032int main(void) { return bswap32(0); } 4033EOF 4034if compile_prog "" "" ; then 4035 bswap_h=yes 4036fi 4037 4038########################################## 4039# Do we have libiscsi >= 1.9.0 4040if test "$libiscsi" != "no" ; then 4041 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4042 libiscsi="yes" 4043 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4044 libiscsi_libs=$($pkg_config --libs libiscsi) 4045 else 4046 if test "$libiscsi" = "yes" ; then 4047 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4048 fi 4049 libiscsi="no" 4050 fi 4051fi 4052 4053########################################## 4054# Do we need libm 4055cat > $TMPC << EOF 4056#include <math.h> 4057int main(int argc, char **argv) { return isnan(sin((double)argc)); } 4058EOF 4059if compile_prog "" "" ; then 4060 : 4061elif compile_prog "" "-lm" ; then 4062 LIBS="-lm $LIBS" 4063 libs_qga="-lm $libs_qga" 4064else 4065 error_exit "libm check failed" 4066fi 4067 4068########################################## 4069# Do we need librt 4070# uClibc provides 2 versions of clock_gettime(), one with realtime 4071# support and one without. This means that the clock_gettime() don't 4072# need -lrt. We still need it for timer_create() so we check for this 4073# function in addition. 4074cat > $TMPC <<EOF 4075#include <signal.h> 4076#include <time.h> 4077int main(void) { 4078 timer_create(CLOCK_REALTIME, NULL, NULL); 4079 return clock_gettime(CLOCK_REALTIME, NULL); 4080} 4081EOF 4082 4083if compile_prog "" "" ; then 4084 : 4085# we need pthread for static linking. use previous pthread test result 4086elif compile_prog "" "$pthread_lib -lrt" ; then 4087 LIBS="$LIBS -lrt" 4088 libs_qga="$libs_qga -lrt" 4089fi 4090 4091if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ 4092 "$aix" != "yes" -a "$haiku" != "yes" ; then 4093 libs_softmmu="-lutil $libs_softmmu" 4094fi 4095 4096########################################## 4097# spice probe 4098if test "$spice" != "no" ; then 4099 cat > $TMPC << EOF 4100#include <spice.h> 4101int main(void) { spice_server_new(); return 0; } 4102EOF 4103 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4104 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4105 if $pkg_config --atleast-version=0.12.0 spice-server && \ 4106 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4107 compile_prog "$spice_cflags" "$spice_libs" ; then 4108 spice="yes" 4109 libs_softmmu="$libs_softmmu $spice_libs" 4110 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 4111 spice_protocol_version=$($pkg_config --modversion spice-protocol) 4112 spice_server_version=$($pkg_config --modversion spice-server) 4113 else 4114 if test "$spice" = "yes" ; then 4115 feature_not_found "spice" \ 4116 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel" 4117 fi 4118 spice="no" 4119 fi 4120fi 4121 4122# check for smartcard support 4123smartcard_cflags="" 4124if test "$smartcard" != "no"; then 4125 if $pkg_config libcacard; then 4126 libcacard_cflags=$($pkg_config --cflags libcacard) 4127 libcacard_libs=$($pkg_config --libs libcacard) 4128 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags" 4129 libs_softmmu="$libs_softmmu $libcacard_libs" 4130 smartcard="yes" 4131 else 4132 if test "$smartcard" = "yes"; then 4133 feature_not_found "smartcard" "Install libcacard devel" 4134 fi 4135 smartcard="no" 4136 fi 4137fi 4138 4139# check for libusb 4140if test "$libusb" != "no" ; then 4141 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4142 libusb="yes" 4143 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4144 libusb_libs=$($pkg_config --libs libusb-1.0) 4145 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags" 4146 libs_softmmu="$libs_softmmu $libusb_libs" 4147 else 4148 if test "$libusb" = "yes"; then 4149 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4150 fi 4151 libusb="no" 4152 fi 4153fi 4154 4155# check for usbredirparser for usb network redirection support 4156if test "$usb_redir" != "no" ; then 4157 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4158 usb_redir="yes" 4159 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4160 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4161 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags" 4162 libs_softmmu="$libs_softmmu $usb_redir_libs" 4163 else 4164 if test "$usb_redir" = "yes"; then 4165 feature_not_found "usb-redir" "Install usbredir devel" 4166 fi 4167 usb_redir="no" 4168 fi 4169fi 4170 4171########################################## 4172# check if we have VSS SDK headers for win 4173 4174if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then 4175 case "$vss_win32_sdk" in 4176 "") vss_win32_include="-isystem $source_path" ;; 4177 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4178 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4179 vss_win32_include="-isystem $source_path/.sdk/vss" 4180 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4181 ;; 4182 *) vss_win32_include="-isystem $vss_win32_sdk" 4183 esac 4184 cat > $TMPC << EOF 4185#define __MIDL_user_allocate_free_DEFINED__ 4186#include <inc/win2003/vss.h> 4187int main(void) { return VSS_CTX_BACKUP; } 4188EOF 4189 if compile_prog "$vss_win32_include" "" ; then 4190 guest_agent_with_vss="yes" 4191 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4192 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4193 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4194 else 4195 if test "$vss_win32_sdk" != "" ; then 4196 echo "ERROR: Please download and install Microsoft VSS SDK:" 4197 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4198 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4199 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4200 echo "ERROR: The headers are extracted in the directory \`inc'." 4201 feature_not_found "VSS support" 4202 fi 4203 guest_agent_with_vss="no" 4204 fi 4205fi 4206 4207########################################## 4208# lookup Windows platform SDK (if not specified) 4209# The SDK is needed only to build .tlb (type library) file of guest agent 4210# VSS provider from the source. It is usually unnecessary because the 4211# pre-compiled .tlb file is included. 4212 4213if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then 4214 if test -z "$win_sdk"; then 4215 programfiles="$PROGRAMFILES" 4216 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4217 if test -n "$programfiles"; then 4218 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4219 else 4220 feature_not_found "Windows SDK" 4221 fi 4222 elif test "$win_sdk" = "no"; then 4223 win_sdk="" 4224 fi 4225fi 4226 4227########################################## 4228# check if mingw environment provides a recent ntddscsi.h 4229if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then 4230 cat > $TMPC << EOF 4231#include <windows.h> 4232#include <ntddscsi.h> 4233int main(void) { 4234#if !defined(IOCTL_SCSI_GET_ADDRESS) 4235#error Missing required ioctl definitions 4236#endif 4237 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4238 return addr.Lun; 4239} 4240EOF 4241 if compile_prog "" "" ; then 4242 guest_agent_ntddscsi=yes 4243 libs_qga="-lsetupapi $libs_qga" 4244 fi 4245fi 4246 4247########################################## 4248# virgl renderer probe 4249 4250if test "$virglrenderer" != "no" ; then 4251 cat > $TMPC << EOF 4252#include <virglrenderer.h> 4253int main(void) { virgl_renderer_poll(); return 0; } 4254EOF 4255 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4256 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4257 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4258 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4259 virglrenderer="yes" 4260 else 4261 if test "$virglrenderer" = "yes" ; then 4262 feature_not_found "virglrenderer" 4263 fi 4264 virglrenderer="no" 4265 fi 4266fi 4267 4268########################################## 4269# check if we have fdatasync 4270 4271fdatasync=no 4272cat > $TMPC << EOF 4273#include <unistd.h> 4274int main(void) { 4275#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4276return fdatasync(0); 4277#else 4278#error Not supported 4279#endif 4280} 4281EOF 4282if compile_prog "" "" ; then 4283 fdatasync=yes 4284fi 4285 4286########################################## 4287# check if we have madvise 4288 4289madvise=no 4290cat > $TMPC << EOF 4291#include <sys/types.h> 4292#include <sys/mman.h> 4293#include <stddef.h> 4294int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4295EOF 4296if compile_prog "" "" ; then 4297 madvise=yes 4298fi 4299 4300########################################## 4301# check if we have posix_madvise 4302 4303posix_madvise=no 4304cat > $TMPC << EOF 4305#include <sys/mman.h> 4306#include <stddef.h> 4307int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4308EOF 4309if compile_prog "" "" ; then 4310 posix_madvise=yes 4311fi 4312 4313########################################## 4314# check if we have posix_syslog 4315 4316posix_syslog=no 4317cat > $TMPC << EOF 4318#include <syslog.h> 4319int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4320EOF 4321if compile_prog "" "" ; then 4322 posix_syslog=yes 4323fi 4324 4325########################################## 4326# check if trace backend exists 4327 4328$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4329if test "$?" -ne 0 ; then 4330 error_exit "invalid trace backends" \ 4331 "Please choose supported trace backends." 4332fi 4333 4334########################################## 4335# For 'ust' backend, test if ust headers are present 4336if have_backend "ust"; then 4337 cat > $TMPC << EOF 4338#include <lttng/tracepoint.h> 4339int main(void) { return 0; } 4340EOF 4341 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4342 if $pkg_config lttng-ust --exists; then 4343 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4344 else 4345 lttng_ust_libs="-llttng-ust -ldl" 4346 fi 4347 if $pkg_config liburcu-bp --exists; then 4348 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4349 else 4350 urcu_bp_libs="-lurcu-bp" 4351 fi 4352 4353 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 4354 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 4355 else 4356 error_exit "Trace backend 'ust' missing lttng-ust header files" 4357 fi 4358fi 4359 4360########################################## 4361# For 'dtrace' backend, test if 'dtrace' command is present 4362if have_backend "dtrace"; then 4363 if ! has 'dtrace' ; then 4364 error_exit "dtrace command is not found in PATH $PATH" 4365 fi 4366 trace_backend_stap="no" 4367 if has 'stap' ; then 4368 trace_backend_stap="yes" 4369 fi 4370fi 4371 4372########################################## 4373# check and set a backend for coroutine 4374 4375# We prefer ucontext, but it's not always possible. The fallback 4376# is sigcontext. gthread is not selectable except explicitly, because 4377# it is not functional enough to run QEMU proper. (It is occasionally 4378# useful for debugging purposes.) On Windows the only valid backend 4379# is the Windows-specific one. 4380 4381ucontext_works=no 4382if test "$darwin" != "yes"; then 4383 cat > $TMPC << EOF 4384#include <ucontext.h> 4385#ifdef __stub_makecontext 4386#error Ignoring glibc stub makecontext which will always fail 4387#endif 4388int main(void) { makecontext(0, 0, 0); return 0; } 4389EOF 4390 if compile_prog "" "" ; then 4391 ucontext_works=yes 4392 fi 4393fi 4394 4395if test "$coroutine" = ""; then 4396 if test "$mingw32" = "yes"; then 4397 coroutine=win32 4398 elif test "$ucontext_works" = "yes"; then 4399 coroutine=ucontext 4400 else 4401 coroutine=sigaltstack 4402 fi 4403else 4404 case $coroutine in 4405 windows) 4406 if test "$mingw32" != "yes"; then 4407 error_exit "'windows' coroutine backend only valid for Windows" 4408 fi 4409 # Unfortunately the user visible backend name doesn't match the 4410 # coroutine-*.c filename for this case, so we have to adjust it here. 4411 coroutine=win32 4412 ;; 4413 ucontext) 4414 if test "$ucontext_works" != "yes"; then 4415 feature_not_found "ucontext" 4416 fi 4417 ;; 4418 gthread|sigaltstack) 4419 if test "$mingw32" = "yes"; then 4420 error_exit "only the 'windows' coroutine backend is valid for Windows" 4421 fi 4422 ;; 4423 *) 4424 error_exit "unknown coroutine backend $coroutine" 4425 ;; 4426 esac 4427fi 4428 4429if test "$coroutine_pool" = ""; then 4430 if test "$coroutine" = "gthread"; then 4431 coroutine_pool=no 4432 else 4433 coroutine_pool=yes 4434 fi 4435fi 4436if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then 4437 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)" 4438fi 4439 4440if test "$debug_stack_usage" = "yes"; then 4441 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then 4442 error_exit "stack usage debugging is not supported for $cpu" 4443 fi 4444 if test "$coroutine_pool" = "yes"; then 4445 echo "WARN: disabling coroutine pool for stack usage debugging" 4446 coroutine_pool=no 4447 fi 4448fi 4449 4450 4451########################################## 4452# check if we have open_by_handle_at 4453 4454open_by_handle_at=no 4455cat > $TMPC << EOF 4456#include <fcntl.h> 4457#if !defined(AT_EMPTY_PATH) 4458# error missing definition 4459#else 4460int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4461#endif 4462EOF 4463if compile_prog "" "" ; then 4464 open_by_handle_at=yes 4465fi 4466 4467######################################## 4468# check if we have linux/magic.h 4469 4470linux_magic_h=no 4471cat > $TMPC << EOF 4472#include <linux/magic.h> 4473int main(void) { 4474 return 0; 4475} 4476EOF 4477if compile_prog "" "" ; then 4478 linux_magic_h=yes 4479fi 4480 4481######################################## 4482# check whether we can disable warning option with a pragma (this is needed 4483# to silence warnings in the headers of some versions of external libraries). 4484# This test has to be compiled with -Werror as otherwise an unknown pragma is 4485# only a warning. 4486# 4487# If we can't selectively disable warning in the code, disable -Werror so that 4488# the build doesn't fail anyway. 4489 4490pragma_disable_unused_but_set=no 4491cat > $TMPC << EOF 4492#pragma GCC diagnostic push 4493#pragma GCC diagnostic ignored "-Wunused-but-set-variable" 4494#pragma GCC diagnostic ignored "-Wstrict-prototypes" 4495#pragma GCC diagnostic pop 4496 4497int main(void) { 4498 return 0; 4499} 4500EOF 4501if compile_prog "-Werror" "" ; then 4502 pragma_diagnostic_available=yes 4503else 4504 werror=no 4505fi 4506 4507######################################## 4508# check if we have valgrind/valgrind.h 4509 4510valgrind_h=no 4511cat > $TMPC << EOF 4512#include <valgrind/valgrind.h> 4513int main(void) { 4514 return 0; 4515} 4516EOF 4517if compile_prog "" "" ; then 4518 valgrind_h=yes 4519fi 4520 4521######################################## 4522# check if environ is declared 4523 4524has_environ=no 4525cat > $TMPC << EOF 4526#include <unistd.h> 4527int main(void) { 4528 environ = 0; 4529 return 0; 4530} 4531EOF 4532if compile_prog "" "" ; then 4533 has_environ=yes 4534fi 4535 4536######################################## 4537# check if cpuid.h is usable. 4538 4539cpuid_h=no 4540cat > $TMPC << EOF 4541#include <cpuid.h> 4542int main(void) { 4543 unsigned a, b, c, d; 4544 int max = __get_cpuid_max(0, 0); 4545 4546 if (max >= 1) { 4547 __cpuid(1, a, b, c, d); 4548 } 4549 4550 if (max >= 7) { 4551 __cpuid_count(7, 0, a, b, c, d); 4552 } 4553 4554 return 0; 4555} 4556EOF 4557if compile_prog "" "" ; then 4558 cpuid_h=yes 4559fi 4560 4561######################################## 4562# check if __[u]int128_t is usable. 4563 4564int128=no 4565cat > $TMPC << EOF 4566#if defined(__clang_major__) && defined(__clang_minor__) 4567# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2)) 4568# error __int128_t does not work in CLANG before 3.2 4569# endif 4570#endif 4571__int128_t a; 4572__uint128_t b; 4573int main (void) { 4574 a = a + b; 4575 b = a * b; 4576 a = a * a; 4577 return 0; 4578} 4579EOF 4580if compile_prog "" "" ; then 4581 int128=yes 4582fi 4583 4584######################################### 4585# See if 128-bit atomic operations are supported. 4586 4587atomic128=no 4588if test "$int128" = "yes"; then 4589 cat > $TMPC << EOF 4590int main(void) 4591{ 4592 unsigned __int128 x = 0, y = 0; 4593 y = __atomic_load_16(&x, 0); 4594 __atomic_store_16(&x, y, 0); 4595 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 4596 return 0; 4597} 4598EOF 4599 if compile_prog "" "" ; then 4600 atomic128=yes 4601 fi 4602fi 4603 4604######################################### 4605# See if 64-bit atomic operations are supported. 4606# Note that without __atomic builtins, we can only 4607# assume atomic loads/stores max at pointer size. 4608 4609cat > $TMPC << EOF 4610#include <stdint.h> 4611int main(void) 4612{ 4613 uint64_t x = 0, y = 0; 4614#ifdef __ATOMIC_RELAXED 4615 y = __atomic_load_8(&x, 0); 4616 __atomic_store_8(&x, y, 0); 4617 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 4618 __atomic_exchange_8(&x, y, 0); 4619 __atomic_fetch_add_8(&x, y, 0); 4620#else 4621 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 4622 __sync_lock_test_and_set(&x, y); 4623 __sync_val_compare_and_swap(&x, y, 0); 4624 __sync_fetch_and_add(&x, y); 4625#endif 4626 return 0; 4627} 4628EOF 4629if compile_prog "" "" ; then 4630 atomic64=yes 4631fi 4632 4633######################################## 4634# check if getauxval is available. 4635 4636getauxval=no 4637cat > $TMPC << EOF 4638#include <sys/auxv.h> 4639int main(void) { 4640 return getauxval(AT_HWCAP) == 0; 4641} 4642EOF 4643if compile_prog "" "" ; then 4644 getauxval=yes 4645fi 4646 4647######################################## 4648# check if ccache is interfering with 4649# semantic analysis of macros 4650 4651unset CCACHE_CPP2 4652ccache_cpp2=no 4653cat > $TMPC << EOF 4654static const int Z = 1; 4655#define fn() ({ Z; }) 4656#define TAUT(X) ((X) == Z) 4657#define PAREN(X, Y) (X == Y) 4658#define ID(X) (X) 4659int main(int argc, char *argv[]) 4660{ 4661 int x = 0, y = 0; 4662 x = ID(x); 4663 x = fn(); 4664 fn(); 4665 if (PAREN(x, y)) return 0; 4666 if (TAUT(Z)) return 0; 4667 return 0; 4668} 4669EOF 4670 4671if ! compile_object "-Werror"; then 4672 ccache_cpp2=yes 4673fi 4674 4675################################################# 4676# clang does not support glibc + FORTIFY_SOURCE. 4677 4678if test "$fortify_source" != "no"; then 4679 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 4680 fortify_source="no"; 4681 elif test -n "$cxx" && 4682 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 4683 fortify_source="no"; 4684 else 4685 fortify_source="yes" 4686 fi 4687fi 4688 4689########################################## 4690# check if struct fsxattr is available via linux/fs.h 4691 4692have_fsxattr=no 4693cat > $TMPC << EOF 4694#include <linux/fs.h> 4695struct fsxattr foo; 4696int main(void) { 4697 return 0; 4698} 4699EOF 4700if compile_prog "" "" ; then 4701 have_fsxattr=yes 4702fi 4703 4704########################################## 4705# check if rtnetlink.h exists and is useful 4706have_rtnetlink=no 4707cat > $TMPC << EOF 4708#include <linux/rtnetlink.h> 4709int main(void) { 4710 return IFLA_PROTO_DOWN; 4711} 4712EOF 4713if compile_prog "" "" ; then 4714 have_rtnetlink=yes 4715fi 4716 4717########################################## 4718# check for usable AF_VSOCK environment 4719have_af_vsock=no 4720cat > $TMPC << EOF 4721#include <errno.h> 4722#include <sys/types.h> 4723#include <sys/socket.h> 4724#if !defined(AF_VSOCK) 4725# error missing AF_VSOCK flag 4726#endif 4727#include <linux/vm_sockets.h> 4728int main(void) { 4729 int sock, ret; 4730 struct sockaddr_vm svm; 4731 socklen_t len = sizeof(svm); 4732 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 4733 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 4734 if ((ret == -1) && (errno == ENOTCONN)) { 4735 return 0; 4736 } 4737 return -1; 4738} 4739EOF 4740if compile_prog "" "" ; then 4741 have_af_vsock=yes 4742fi 4743 4744################################################# 4745# Sparc implicitly links with --relax, which is 4746# incompatible with -r, so --no-relax should be 4747# given. It does no harm to give it on other 4748# platforms too. 4749 4750# Note: the prototype is needed since QEMU_CFLAGS 4751# contains -Wmissing-prototypes 4752cat > $TMPC << EOF 4753extern int foo(void); 4754int foo(void) { return 0; } 4755EOF 4756if ! compile_object ""; then 4757 error_exit "Failed to compile object file for LD_REL_FLAGS test" 4758fi 4759for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 4760 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 4761 LD_REL_FLAGS=$i 4762 break 4763 fi 4764done 4765if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 4766 feature_not_found "modules" "Cannot find how to build relocatable objects" 4767fi 4768 4769########################################## 4770# check for sysmacros.h 4771 4772have_sysmacros=no 4773cat > $TMPC << EOF 4774#include <sys/sysmacros.h> 4775int main(void) { 4776 return makedev(0, 0); 4777} 4778EOF 4779if compile_prog "" "" ; then 4780 have_sysmacros=yes 4781fi 4782 4783########################################## 4784# End of CC checks 4785# After here, no more $cc or $ld runs 4786 4787if test "$gcov" = "yes" ; then 4788 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 4789 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 4790elif test "$fortify_source" = "yes" ; then 4791 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 4792elif test "$debug" = "no"; then 4793 CFLAGS="-O2 $CFLAGS" 4794fi 4795 4796########################################## 4797# Do we have libnfs 4798if test "$libnfs" != "no" ; then 4799 if $pkg_config --atleast-version=1.9.3 libnfs; then 4800 libnfs="yes" 4801 libnfs_libs=$($pkg_config --libs libnfs) 4802 else 4803 if test "$libnfs" = "yes" ; then 4804 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 4805 fi 4806 libnfs="no" 4807 fi 4808fi 4809 4810# Now we've finished running tests it's OK to add -Werror to the compiler flags 4811if test "$werror" = "yes"; then 4812 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 4813fi 4814 4815if test "$solaris" = "no" ; then 4816 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 4817 LDFLAGS="-Wl,--warn-common $LDFLAGS" 4818 fi 4819fi 4820 4821# test if pod2man has --utf8 option 4822if pod2man --help | grep -q utf8; then 4823 POD2MAN="pod2man --utf8" 4824else 4825 POD2MAN="pod2man" 4826fi 4827 4828# Use ASLR, no-SEH and DEP if available 4829if test "$mingw32" = "yes" ; then 4830 for flag in --dynamicbase --no-seh --nxcompat; do 4831 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then 4832 LDFLAGS="-Wl,$flag $LDFLAGS" 4833 fi 4834 done 4835fi 4836 4837qemu_confdir=$sysconfdir$confsuffix 4838qemu_moddir=$libdir$confsuffix 4839qemu_datadir=$datadir$confsuffix 4840qemu_localedir="$datadir/locale" 4841 4842tools="" 4843if test "$want_tools" = "yes" ; then 4844 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" 4845 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 4846 tools="qemu-nbd\$(EXESUF) $tools" 4847 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 4848 fi 4849fi 4850if test "$softmmu" = yes ; then 4851 if test "$virtfs" != no ; then 4852 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then 4853 virtfs=yes 4854 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 4855 else 4856 if test "$virtfs" = yes; then 4857 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel" 4858 fi 4859 virtfs=no 4860 fi 4861 fi 4862fi 4863 4864# Probe for guest agent support/options 4865 4866if [ "$guest_agent" != "no" ]; then 4867 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 4868 tools="qemu-ga $tools" 4869 guest_agent=yes 4870 elif [ "$guest_agent" != yes ]; then 4871 guest_agent=no 4872 else 4873 error_exit "Guest agent is not supported on this platform" 4874 fi 4875fi 4876 4877# Guest agent Window MSI package 4878 4879if test "$guest_agent" != yes; then 4880 if test "$guest_agent_msi" = yes; then 4881 error_exit "MSI guest agent package requires guest agent enabled" 4882 fi 4883 guest_agent_msi=no 4884elif test "$mingw32" != "yes"; then 4885 if test "$guest_agent_msi" = "yes"; then 4886 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 4887 fi 4888 guest_agent_msi=no 4889elif ! has wixl; then 4890 if test "$guest_agent_msi" = "yes"; then 4891 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 4892 fi 4893 guest_agent_msi=no 4894else 4895 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 4896 # disabled explicitly 4897 if test "$guest_agent_msi" != "no"; then 4898 guest_agent_msi=yes 4899 fi 4900fi 4901 4902if test "$guest_agent_msi" = "yes"; then 4903 if test "$guest_agent_with_vss" = "yes"; then 4904 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 4905 fi 4906 4907 if test "$QEMU_GA_MANUFACTURER" = ""; then 4908 QEMU_GA_MANUFACTURER=QEMU 4909 fi 4910 4911 if test "$QEMU_GA_DISTRO" = ""; then 4912 QEMU_GA_DISTRO=Linux 4913 fi 4914 4915 if test "$QEMU_GA_VERSION" = ""; then 4916 QEMU_GA_VERSION=$(cat $source_path/VERSION) 4917 fi 4918 4919 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 4920 4921 case "$cpu" in 4922 x86_64) 4923 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 4924 ;; 4925 i386) 4926 QEMU_GA_MSI_ARCH="-D Arch=32" 4927 ;; 4928 *) 4929 error_exit "CPU $cpu not supported for building installation package" 4930 ;; 4931 esac 4932fi 4933 4934# Mac OS X ships with a broken assembler 4935roms= 4936if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 4937 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 4938 "$softmmu" = yes ; then 4939 # Different host OS linkers have different ideas about the name of the ELF 4940 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd 4941 # variant; and Windows uses i386pe. 4942 for emu in elf_i386 elf_i386_fbsd i386pe; do 4943 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 4944 ld_i386_emulation="$emu" 4945 roms="optionrom" 4946 break 4947 fi 4948 done 4949fi 4950if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 4951 roms="$roms spapr-rtas" 4952fi 4953 4954if test "$cpu" = "s390x" ; then 4955 roms="$roms s390-ccw" 4956fi 4957 4958# Probe for the need for relocating the user-only binary. 4959if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 4960 textseg_addr= 4961 case "$cpu" in 4962 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 4963 # ??? Rationale for choosing this address 4964 textseg_addr=0x60000000 4965 ;; 4966 mips) 4967 # A 256M aligned address, high in the address space, with enough 4968 # room for the code_gen_buffer above it before the stack. 4969 textseg_addr=0x60000000 4970 ;; 4971 esac 4972 if [ -n "$textseg_addr" ]; then 4973 cat > $TMPC <<EOF 4974 int main(void) { return 0; } 4975EOF 4976 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 4977 if ! compile_prog "" "$textseg_ldflags"; then 4978 # In case ld does not support -Ttext-segment, edit the default linker 4979 # script via sed to set the .text start addr. This is needed on FreeBSD 4980 # at least. 4981 if ! $ld --verbose >/dev/null 2>&1; then 4982 error_exit \ 4983 "We need to link the QEMU user mode binaries at a" \ 4984 "specific text address. Unfortunately your linker" \ 4985 "doesn't support either the -Ttext-segment option or" \ 4986 "printing the default linker script with --verbose." \ 4987 "If you don't want the user mode binaries, pass the" \ 4988 "--disable-user option to configure." 4989 fi 4990 4991 $ld --verbose | sed \ 4992 -e '1,/==================================================/d' \ 4993 -e '/==================================================/,$d' \ 4994 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 4995 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 4996 textseg_ldflags="-Wl,-T../config-host.ld" 4997 fi 4998 fi 4999fi 5000 5001echo_version() { 5002 if test "$1" = "yes" ; then 5003 echo "($2)" 5004 fi 5005} 5006 5007# prepend pixman and ftd flags after all config tests are done 5008QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 5009libs_softmmu="$pixman_libs $libs_softmmu" 5010 5011echo "Install prefix $prefix" 5012echo "BIOS directory $(eval echo $qemu_datadir)" 5013echo "binary directory $(eval echo $bindir)" 5014echo "library directory $(eval echo $libdir)" 5015echo "module directory $(eval echo $qemu_moddir)" 5016echo "libexec directory $(eval echo $libexecdir)" 5017echo "include directory $(eval echo $includedir)" 5018echo "config directory $(eval echo $sysconfdir)" 5019if test "$mingw32" = "no" ; then 5020echo "local state directory $(eval echo $local_statedir)" 5021echo "Manual directory $(eval echo $mandir)" 5022echo "ELF interp prefix $interp_prefix" 5023else 5024echo "local state directory queried at runtime" 5025echo "Windows SDK $win_sdk" 5026fi 5027echo "Source path $source_path" 5028echo "C compiler $cc" 5029echo "Host C compiler $host_cc" 5030echo "C++ compiler $cxx" 5031echo "Objective-C compiler $objcc" 5032echo "ARFLAGS $ARFLAGS" 5033echo "CFLAGS $CFLAGS" 5034echo "QEMU_CFLAGS $QEMU_CFLAGS" 5035echo "LDFLAGS $LDFLAGS" 5036echo "make $make" 5037echo "install $install" 5038echo "python $python" 5039if test "$slirp" = "yes" ; then 5040 echo "smbd $smbd" 5041fi 5042echo "module support $modules" 5043echo "host CPU $cpu" 5044echo "host big endian $bigendian" 5045echo "target list $target_list" 5046echo "tcg debug enabled $debug_tcg" 5047echo "gprof enabled $gprof" 5048echo "sparse enabled $sparse" 5049echo "strip binaries $strip_opt" 5050echo "profiler $profiler" 5051echo "static build $static" 5052if test "$darwin" = "yes" ; then 5053 echo "Cocoa support $cocoa" 5054fi 5055echo "pixman $pixman" 5056echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 5057echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 5058echo "GTK GL support $gtk_gl" 5059echo "VTE support $vte $(echo_version $vte $vteversion)" 5060echo "TLS priority $tls_priority" 5061echo "GNUTLS support $gnutls" 5062echo "GNUTLS rnd $gnutls_rnd" 5063echo "libgcrypt $gcrypt" 5064echo "libgcrypt kdf $gcrypt_kdf" 5065echo "nettle $nettle $(echo_version $nettle $nettle_version)" 5066echo "nettle kdf $nettle_kdf" 5067echo "libtasn1 $tasn1" 5068echo "curses support $curses" 5069echo "virgl support $virglrenderer" 5070echo "curl support $curl" 5071echo "mingw32 support $mingw32" 5072echo "Audio drivers $audio_drv_list" 5073echo "Block whitelist (rw) $block_drv_rw_whitelist" 5074echo "Block whitelist (ro) $block_drv_ro_whitelist" 5075echo "VirtFS support $virtfs" 5076echo "VNC support $vnc" 5077if test "$vnc" = "yes" ; then 5078 echo "VNC SASL support $vnc_sasl" 5079 echo "VNC JPEG support $vnc_jpeg" 5080 echo "VNC PNG support $vnc_png" 5081fi 5082if test -n "$sparc_cpu"; then 5083 echo "Target Sparc Arch $sparc_cpu" 5084fi 5085echo "xen support $xen" 5086if test "$xen" = "yes" ; then 5087 echo "xen ctrl version $xen_ctrl_version" 5088 echo "pv dom build $xen_pv_domain_build" 5089fi 5090echo "brlapi support $brlapi" 5091echo "bluez support $bluez" 5092echo "Documentation $docs" 5093echo "PIE $pie" 5094echo "vde support $vde" 5095echo "netmap support $netmap" 5096echo "Linux AIO support $linux_aio" 5097echo "ATTR/XATTR support $attr" 5098echo "Install blobs $blobs" 5099echo "KVM support $kvm" 5100echo "HAX support $hax" 5101echo "RDMA support $rdma" 5102echo "TCG interpreter $tcg_interpreter" 5103echo "fdt support $fdt" 5104echo "preadv support $preadv" 5105echo "fdatasync $fdatasync" 5106echo "madvise $madvise" 5107echo "posix_madvise $posix_madvise" 5108echo "libcap-ng support $cap_ng" 5109echo "vhost-net support $vhost_net" 5110echo "vhost-scsi support $vhost_scsi" 5111echo "vhost-vsock support $vhost_vsock" 5112echo "Trace backends $trace_backends" 5113if have_backend "simple"; then 5114echo "Trace output file $trace_file-<pid>" 5115fi 5116echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 5117echo "rbd support $rbd" 5118echo "xfsctl support $xfs" 5119echo "smartcard support $smartcard" 5120echo "libusb $libusb" 5121echo "usb net redir $usb_redir" 5122echo "OpenGL support $opengl" 5123echo "OpenGL dmabufs $opengl_dmabuf" 5124echo "libiscsi support $libiscsi" 5125echo "libnfs support $libnfs" 5126echo "build guest agent $guest_agent" 5127echo "QGA VSS support $guest_agent_with_vss" 5128echo "QGA w32 disk info $guest_agent_ntddscsi" 5129echo "QGA MSI support $guest_agent_msi" 5130echo "seccomp support $seccomp" 5131echo "coroutine backend $coroutine" 5132echo "coroutine pool $coroutine_pool" 5133echo "debug stack usage $debug_stack_usage" 5134echo "GlusterFS support $glusterfs" 5135echo "gcov $gcov_tool" 5136echo "gcov enabled $gcov" 5137echo "TPM support $tpm" 5138echo "libssh2 support $libssh2" 5139echo "TPM passthrough $tpm_passthrough" 5140echo "QOM debugging $qom_cast_debug" 5141echo "lzo support $lzo" 5142echo "snappy support $snappy" 5143echo "bzip2 support $bzip2" 5144echo "NUMA host support $numa" 5145echo "tcmalloc support $tcmalloc" 5146echo "jemalloc support $jemalloc" 5147echo "avx2 optimization $avx2_opt" 5148echo "replication support $replication" 5149 5150if test "$sdl_too_old" = "yes"; then 5151echo "-> Your SDL version is too old - please upgrade to have SDL support" 5152fi 5153 5154if test "$supported_cpu" = "no"; then 5155 echo 5156 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 5157 echo 5158 echo "CPU host architecture $cpu support is not currently maintained." 5159 echo "The QEMU project intends to remove support for this host CPU in" 5160 echo "a future release if nobody volunteers to maintain it and to" 5161 echo "provide a build host for our continuous integration setup." 5162 echo "configure has succeeded and you can continue to build, but" 5163 echo "if you care about QEMU on this platform you should contact" 5164 echo "us upstream at qemu-devel@nongnu.org." 5165fi 5166 5167if test "$supported_os" = "no"; then 5168 echo 5169 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 5170 echo 5171 echo "Host OS $targetos support is not currently maintained." 5172 echo "The QEMU project intends to remove support for this host OS in" 5173 echo "a future release if nobody volunteers to maintain it and to" 5174 echo "provide a build host for our continuous integration setup." 5175 echo "configure has succeeded and you can continue to build, but" 5176 echo "if you care about QEMU on this platform you should contact" 5177 echo "us upstream at qemu-devel@nongnu.org." 5178fi 5179 5180config_host_mak="config-host.mak" 5181 5182echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 5183 5184echo "# Automatically generated by configure - do not modify" > $config_host_mak 5185echo >> $config_host_mak 5186 5187echo all: >> $config_host_mak 5188echo "prefix=$prefix" >> $config_host_mak 5189echo "bindir=$bindir" >> $config_host_mak 5190echo "libdir=$libdir" >> $config_host_mak 5191echo "libexecdir=$libexecdir" >> $config_host_mak 5192echo "includedir=$includedir" >> $config_host_mak 5193echo "mandir=$mandir" >> $config_host_mak 5194echo "sysconfdir=$sysconfdir" >> $config_host_mak 5195echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 5196echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 5197echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 5198echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 5199if test "$mingw32" = "no" ; then 5200 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 5201fi 5202echo "qemu_helperdir=$libexecdir" >> $config_host_mak 5203echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak 5204echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak 5205echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 5206echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 5207 5208echo "ARCH=$ARCH" >> $config_host_mak 5209 5210if test "$debug_tcg" = "yes" ; then 5211 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 5212fi 5213if test "$strip_opt" = "yes" ; then 5214 echo "STRIP=${strip}" >> $config_host_mak 5215fi 5216if test "$bigendian" = "yes" ; then 5217 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 5218fi 5219if test "$mingw32" = "yes" ; then 5220 echo "CONFIG_WIN32=y" >> $config_host_mak 5221 rc_version=$(cat $source_path/VERSION) 5222 version_major=${rc_version%%.*} 5223 rc_version=${rc_version#*.} 5224 version_minor=${rc_version%%.*} 5225 rc_version=${rc_version#*.} 5226 version_subminor=${rc_version%%.*} 5227 version_micro=0 5228 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5229 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5230 if test "$guest_agent_with_vss" = "yes" ; then 5231 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 5232 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 5233 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 5234 fi 5235 if test "$guest_agent_ntddscsi" = "yes" ; then 5236 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 5237 fi 5238 if test "$guest_agent_msi" = "yes"; then 5239 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 5240 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 5241 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 5242 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 5243 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 5244 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 5245 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 5246 fi 5247else 5248 echo "CONFIG_POSIX=y" >> $config_host_mak 5249fi 5250 5251if test "$linux" = "yes" ; then 5252 echo "CONFIG_LINUX=y" >> $config_host_mak 5253fi 5254 5255if test "$darwin" = "yes" ; then 5256 echo "CONFIG_DARWIN=y" >> $config_host_mak 5257fi 5258 5259if test "$aix" = "yes" ; then 5260 echo "CONFIG_AIX=y" >> $config_host_mak 5261fi 5262 5263if test "$solaris" = "yes" ; then 5264 echo "CONFIG_SOLARIS=y" >> $config_host_mak 5265 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak 5266 if test "$needs_libsunmath" = "yes" ; then 5267 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak 5268 fi 5269fi 5270if test "$haiku" = "yes" ; then 5271 echo "CONFIG_HAIKU=y" >> $config_host_mak 5272fi 5273if test "$static" = "yes" ; then 5274 echo "CONFIG_STATIC=y" >> $config_host_mak 5275fi 5276if test "$profiler" = "yes" ; then 5277 echo "CONFIG_PROFILER=y" >> $config_host_mak 5278fi 5279if test "$slirp" = "yes" ; then 5280 echo "CONFIG_SLIRP=y" >> $config_host_mak 5281 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 5282fi 5283if test "$vde" = "yes" ; then 5284 echo "CONFIG_VDE=y" >> $config_host_mak 5285fi 5286if test "$netmap" = "yes" ; then 5287 echo "CONFIG_NETMAP=y" >> $config_host_mak 5288fi 5289if test "$l2tpv3" = "yes" ; then 5290 echo "CONFIG_L2TPV3=y" >> $config_host_mak 5291fi 5292if test "$cap_ng" = "yes" ; then 5293 echo "CONFIG_LIBCAP=y" >> $config_host_mak 5294fi 5295echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 5296for drv in $audio_drv_list; do 5297 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 5298 echo "$def=y" >> $config_host_mak 5299done 5300if test "$audio_pt_int" = "yes" ; then 5301 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 5302fi 5303if test "$audio_win_int" = "yes" ; then 5304 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 5305fi 5306echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 5307echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 5308if test "$vnc" = "yes" ; then 5309 echo "CONFIG_VNC=y" >> $config_host_mak 5310fi 5311if test "$vnc_sasl" = "yes" ; then 5312 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 5313fi 5314if test "$vnc_jpeg" = "yes" ; then 5315 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 5316fi 5317if test "$vnc_png" = "yes" ; then 5318 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 5319fi 5320if test "$fnmatch" = "yes" ; then 5321 echo "CONFIG_FNMATCH=y" >> $config_host_mak 5322fi 5323if test "$xfs" = "yes" ; then 5324 echo "CONFIG_XFS=y" >> $config_host_mak 5325fi 5326qemu_version=$(head $source_path/VERSION) 5327echo "VERSION=$qemu_version" >>$config_host_mak 5328echo "PKGVERSION=$pkgversion" >>$config_host_mak 5329echo "SRC_PATH=$source_path" >> $config_host_mak 5330echo "TARGET_DIRS=$target_list" >> $config_host_mak 5331if [ "$docs" = "yes" ] ; then 5332 echo "BUILD_DOCS=yes" >> $config_host_mak 5333fi 5334if test "$modules" = "yes"; then 5335 # $shacmd can generate a hash started with digit, which the compiler doesn't 5336 # like as an symbol. So prefix it with an underscore 5337 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 5338 echo "CONFIG_MODULES=y" >> $config_host_mak 5339fi 5340if test "$sdl" = "yes" ; then 5341 echo "CONFIG_SDL=y" >> $config_host_mak 5342 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 5343 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 5344fi 5345if test "$cocoa" = "yes" ; then 5346 echo "CONFIG_COCOA=y" >> $config_host_mak 5347fi 5348if test "$curses" = "yes" ; then 5349 echo "CONFIG_CURSES=y" >> $config_host_mak 5350fi 5351if test "$utimens" = "yes" ; then 5352 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak 5353fi 5354if test "$pipe2" = "yes" ; then 5355 echo "CONFIG_PIPE2=y" >> $config_host_mak 5356fi 5357if test "$accept4" = "yes" ; then 5358 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 5359fi 5360if test "$splice" = "yes" ; then 5361 echo "CONFIG_SPLICE=y" >> $config_host_mak 5362fi 5363if test "$eventfd" = "yes" ; then 5364 echo "CONFIG_EVENTFD=y" >> $config_host_mak 5365fi 5366if test "$memfd" = "yes" ; then 5367 echo "CONFIG_MEMFD=y" >> $config_host_mak 5368fi 5369if test "$fallocate" = "yes" ; then 5370 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 5371fi 5372if test "$fallocate_punch_hole" = "yes" ; then 5373 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 5374fi 5375if test "$fallocate_zero_range" = "yes" ; then 5376 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 5377fi 5378if test "$posix_fallocate" = "yes" ; then 5379 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 5380fi 5381if test "$sync_file_range" = "yes" ; then 5382 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 5383fi 5384if test "$fiemap" = "yes" ; then 5385 echo "CONFIG_FIEMAP=y" >> $config_host_mak 5386fi 5387if test "$dup3" = "yes" ; then 5388 echo "CONFIG_DUP3=y" >> $config_host_mak 5389fi 5390if test "$ppoll" = "yes" ; then 5391 echo "CONFIG_PPOLL=y" >> $config_host_mak 5392fi 5393if test "$prctl_pr_set_timerslack" = "yes" ; then 5394 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 5395fi 5396if test "$epoll" = "yes" ; then 5397 echo "CONFIG_EPOLL=y" >> $config_host_mak 5398fi 5399if test "$epoll_create1" = "yes" ; then 5400 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 5401fi 5402if test "$sendfile" = "yes" ; then 5403 echo "CONFIG_SENDFILE=y" >> $config_host_mak 5404fi 5405if test "$timerfd" = "yes" ; then 5406 echo "CONFIG_TIMERFD=y" >> $config_host_mak 5407fi 5408if test "$setns" = "yes" ; then 5409 echo "CONFIG_SETNS=y" >> $config_host_mak 5410fi 5411if test "$clock_adjtime" = "yes" ; then 5412 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 5413fi 5414if test "$syncfs" = "yes" ; then 5415 echo "CONFIG_SYNCFS=y" >> $config_host_mak 5416fi 5417if test "$inotify" = "yes" ; then 5418 echo "CONFIG_INOTIFY=y" >> $config_host_mak 5419fi 5420if test "$inotify1" = "yes" ; then 5421 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 5422fi 5423if test "$byteswap_h" = "yes" ; then 5424 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 5425fi 5426if test "$bswap_h" = "yes" ; then 5427 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 5428fi 5429if test "$curl" = "yes" ; then 5430 echo "CONFIG_CURL=m" >> $config_host_mak 5431 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 5432 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 5433fi 5434if test "$brlapi" = "yes" ; then 5435 echo "CONFIG_BRLAPI=y" >> $config_host_mak 5436fi 5437if test "$bluez" = "yes" ; then 5438 echo "CONFIG_BLUEZ=y" >> $config_host_mak 5439 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 5440fi 5441if test "$glib_subprocess" = "yes" ; then 5442 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak 5443fi 5444if test "$gtk" = "yes" ; then 5445 echo "CONFIG_GTK=y" >> $config_host_mak 5446 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak 5447 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 5448 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 5449 if test "$gtk_gl" = "yes" ; then 5450 echo "CONFIG_GTK_GL=y" >> $config_host_mak 5451 fi 5452fi 5453echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 5454if test "$gnutls" = "yes" ; then 5455 echo "CONFIG_GNUTLS=y" >> $config_host_mak 5456fi 5457if test "$gnutls_rnd" = "yes" ; then 5458 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak 5459fi 5460if test "$gcrypt" = "yes" ; then 5461 echo "CONFIG_GCRYPT=y" >> $config_host_mak 5462 if test "$gcrypt_hmac" = "yes" ; then 5463 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 5464 fi 5465 if test "$gcrypt_kdf" = "yes" ; then 5466 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak 5467 fi 5468fi 5469if test "$nettle" = "yes" ; then 5470 echo "CONFIG_NETTLE=y" >> $config_host_mak 5471 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 5472 if test "$nettle_kdf" = "yes" ; then 5473 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak 5474 fi 5475fi 5476if test "$tasn1" = "yes" ; then 5477 echo "CONFIG_TASN1=y" >> $config_host_mak 5478fi 5479if test "$have_ifaddrs_h" = "yes" ; then 5480 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 5481fi 5482if test "$have_broken_size_max" = "yes" ; then 5483 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 5484fi 5485 5486# Work around a system header bug with some kernel/XFS header 5487# versions where they both try to define 'struct fsxattr': 5488# xfs headers will not try to redefine structs from linux headers 5489# if this macro is set. 5490if test "$have_fsxattr" = "yes" ; then 5491 echo "HAVE_FSXATTR=y" >> $config_host_mak 5492fi 5493if test "$vte" = "yes" ; then 5494 echo "CONFIG_VTE=y" >> $config_host_mak 5495 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 5496fi 5497if test "$virglrenderer" = "yes" ; then 5498 echo "CONFIG_VIRGL=y" >> $config_host_mak 5499 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 5500 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 5501fi 5502if test "$xen" = "yes" ; then 5503 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 5504 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 5505 if test "$xen_pv_domain_build" = "yes" ; then 5506 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 5507 fi 5508fi 5509if test "$linux_aio" = "yes" ; then 5510 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 5511fi 5512if test "$attr" = "yes" ; then 5513 echo "CONFIG_ATTR=y" >> $config_host_mak 5514fi 5515if test "$libattr" = "yes" ; then 5516 echo "CONFIG_LIBATTR=y" >> $config_host_mak 5517fi 5518if test "$virtfs" = "yes" ; then 5519 echo "CONFIG_VIRTFS=y" >> $config_host_mak 5520fi 5521if test "$vhost_scsi" = "yes" ; then 5522 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 5523fi 5524if test "$vhost_net" = "yes" ; then 5525 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 5526fi 5527if test "$vhost_vsock" = "yes" ; then 5528 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 5529fi 5530if test "$blobs" = "yes" ; then 5531 echo "INSTALL_BLOBS=yes" >> $config_host_mak 5532fi 5533if test "$iovec" = "yes" ; then 5534 echo "CONFIG_IOVEC=y" >> $config_host_mak 5535fi 5536if test "$preadv" = "yes" ; then 5537 echo "CONFIG_PREADV=y" >> $config_host_mak 5538fi 5539if test "$fdt" = "yes" ; then 5540 echo "CONFIG_FDT=y" >> $config_host_mak 5541fi 5542if test "$signalfd" = "yes" ; then 5543 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 5544fi 5545if test "$tcg_interpreter" = "yes" ; then 5546 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 5547fi 5548if test "$fdatasync" = "yes" ; then 5549 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 5550fi 5551if test "$madvise" = "yes" ; then 5552 echo "CONFIG_MADVISE=y" >> $config_host_mak 5553fi 5554if test "$posix_madvise" = "yes" ; then 5555 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 5556fi 5557 5558if test "$spice" = "yes" ; then 5559 echo "CONFIG_SPICE=y" >> $config_host_mak 5560fi 5561 5562if test "$smartcard" = "yes" ; then 5563 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 5564fi 5565 5566if test "$libusb" = "yes" ; then 5567 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 5568fi 5569 5570if test "$usb_redir" = "yes" ; then 5571 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 5572fi 5573 5574if test "$opengl" = "yes" ; then 5575 echo "CONFIG_OPENGL=y" >> $config_host_mak 5576 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 5577 if test "$opengl_dmabuf" = "yes" ; then 5578 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 5579 fi 5580fi 5581 5582if test "$avx2_opt" = "yes" ; then 5583 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 5584fi 5585 5586if test "$lzo" = "yes" ; then 5587 echo "CONFIG_LZO=y" >> $config_host_mak 5588fi 5589 5590if test "$snappy" = "yes" ; then 5591 echo "CONFIG_SNAPPY=y" >> $config_host_mak 5592fi 5593 5594if test "$bzip2" = "yes" ; then 5595 echo "CONFIG_BZIP2=y" >> $config_host_mak 5596 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 5597fi 5598 5599if test "$libiscsi" = "yes" ; then 5600 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 5601 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 5602 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 5603fi 5604 5605if test "$libnfs" = "yes" ; then 5606 echo "CONFIG_LIBNFS=m" >> $config_host_mak 5607 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 5608fi 5609 5610if test "$seccomp" = "yes"; then 5611 echo "CONFIG_SECCOMP=y" >> $config_host_mak 5612fi 5613 5614# XXX: suppress that 5615if [ "$bsd" = "yes" ] ; then 5616 echo "CONFIG_BSD=y" >> $config_host_mak 5617fi 5618 5619if test "$localtime_r" = "yes" ; then 5620 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 5621fi 5622if test "$qom_cast_debug" = "yes" ; then 5623 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 5624fi 5625if test "$rbd" = "yes" ; then 5626 echo "CONFIG_RBD=m" >> $config_host_mak 5627 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 5628 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 5629fi 5630 5631echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 5632if test "$coroutine_pool" = "yes" ; then 5633 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 5634else 5635 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 5636fi 5637 5638if test "$debug_stack_usage" = "yes" ; then 5639 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 5640fi 5641 5642if test "$open_by_handle_at" = "yes" ; then 5643 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 5644fi 5645 5646if test "$linux_magic_h" = "yes" ; then 5647 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 5648fi 5649 5650if test "$pragma_diagnostic_available" = "yes" ; then 5651 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 5652fi 5653 5654if test "$valgrind_h" = "yes" ; then 5655 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 5656fi 5657 5658if test "$has_environ" = "yes" ; then 5659 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 5660fi 5661 5662if test "$cpuid_h" = "yes" ; then 5663 echo "CONFIG_CPUID_H=y" >> $config_host_mak 5664fi 5665 5666if test "$int128" = "yes" ; then 5667 echo "CONFIG_INT128=y" >> $config_host_mak 5668fi 5669 5670if test "$atomic128" = "yes" ; then 5671 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 5672fi 5673 5674if test "$atomic64" = "yes" ; then 5675 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 5676fi 5677 5678if test "$getauxval" = "yes" ; then 5679 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 5680fi 5681 5682if test "$glusterfs" = "yes" ; then 5683 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 5684 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 5685 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 5686fi 5687 5688if test "$glusterfs_xlator_opt" = "yes" ; then 5689 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 5690fi 5691 5692if test "$glusterfs_discard" = "yes" ; then 5693 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 5694fi 5695 5696if test "$glusterfs_zerofill" = "yes" ; then 5697 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 5698fi 5699 5700if test "$libssh2" = "yes" ; then 5701 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 5702 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 5703 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 5704fi 5705 5706# USB host support 5707if test "$libusb" = "yes"; then 5708 echo "HOST_USB=libusb legacy" >> $config_host_mak 5709else 5710 echo "HOST_USB=stub" >> $config_host_mak 5711fi 5712 5713# TPM passthrough support? 5714if test "$tpm" = "yes"; then 5715 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 5716 if test "$tpm_passthrough" = "yes"; then 5717 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 5718 fi 5719fi 5720 5721echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 5722if have_backend "nop"; then 5723 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 5724fi 5725if have_backend "simple"; then 5726 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 5727 # Set the appropriate trace file. 5728 trace_file="\"$trace_file-\" FMT_pid" 5729fi 5730if have_backend "log"; then 5731 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 5732fi 5733if have_backend "ust"; then 5734 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 5735fi 5736if have_backend "dtrace"; then 5737 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 5738 if test "$trace_backend_stap" = "yes" ; then 5739 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 5740 fi 5741fi 5742if have_backend "ftrace"; then 5743 if test "$linux" = "yes" ; then 5744 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 5745 else 5746 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 5747 fi 5748fi 5749if have_backend "syslog"; then 5750 if test "$posix_syslog" = "yes" ; then 5751 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 5752 else 5753 feature_not_found "syslog(trace backend)" "syslog not available" 5754 fi 5755fi 5756echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 5757 5758if test "$rdma" = "yes" ; then 5759 echo "CONFIG_RDMA=y" >> $config_host_mak 5760fi 5761 5762if test "$have_rtnetlink" = "yes" ; then 5763 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 5764fi 5765 5766if test "$replication" = "yes" ; then 5767 echo "CONFIG_REPLICATION=y" >> $config_host_mak 5768fi 5769 5770if test "$have_af_vsock" = "yes" ; then 5771 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 5772fi 5773 5774if test "$have_sysmacros" = "yes" ; then 5775 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 5776fi 5777 5778# Hold two types of flag: 5779# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 5780# a thread we have a handle to 5781# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 5782# platform 5783if test "$pthread_setname_np" = "yes" ; then 5784 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 5785 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 5786fi 5787 5788if test "$tcg_interpreter" = "yes"; then 5789 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 5790elif test "$ARCH" = "sparc64" ; then 5791 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 5792elif test "$ARCH" = "s390x" ; then 5793 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 5794elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 5795 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 5796elif test "$ARCH" = "ppc64" ; then 5797 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 5798else 5799 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 5800fi 5801QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES" 5802 5803echo "TOOLS=$tools" >> $config_host_mak 5804echo "ROMS=$roms" >> $config_host_mak 5805echo "MAKE=$make" >> $config_host_mak 5806echo "INSTALL=$install" >> $config_host_mak 5807echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 5808echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 5809echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 5810echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 5811echo "PYTHON=$python" >> $config_host_mak 5812echo "CC=$cc" >> $config_host_mak 5813if $iasl -h > /dev/null 2>&1; then 5814 echo "IASL=$iasl" >> $config_host_mak 5815fi 5816echo "CC_I386=$cc_i386" >> $config_host_mak 5817echo "HOST_CC=$host_cc" >> $config_host_mak 5818echo "CXX=$cxx" >> $config_host_mak 5819echo "OBJCC=$objcc" >> $config_host_mak 5820echo "AR=$ar" >> $config_host_mak 5821echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 5822echo "AS=$as" >> $config_host_mak 5823echo "CCAS=$ccas" >> $config_host_mak 5824echo "CPP=$cpp" >> $config_host_mak 5825echo "OBJCOPY=$objcopy" >> $config_host_mak 5826echo "LD=$ld" >> $config_host_mak 5827echo "NM=$nm" >> $config_host_mak 5828echo "WINDRES=$windres" >> $config_host_mak 5829echo "CFLAGS=$CFLAGS" >> $config_host_mak 5830echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 5831echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 5832echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 5833if test "$sparse" = "yes" ; then 5834 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 5835 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 5836 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 5837 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 5838 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 5839fi 5840if test "$cross_prefix" != ""; then 5841 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 5842else 5843 echo "AUTOCONF_HOST := " >> $config_host_mak 5844fi 5845echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 5846echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 5847echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 5848echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 5849echo "LIBS+=$LIBS" >> $config_host_mak 5850echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 5851echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 5852echo "EXESUF=$EXESUF" >> $config_host_mak 5853echo "DSOSUF=$DSOSUF" >> $config_host_mak 5854echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 5855echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 5856echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 5857echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 5858echo "POD2MAN=$POD2MAN" >> $config_host_mak 5859echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 5860if test "$gcov" = "yes" ; then 5861 echo "CONFIG_GCOV=y" >> $config_host_mak 5862 echo "GCOV=$gcov_tool" >> $config_host_mak 5863fi 5864 5865# use included Linux headers 5866if test "$linux" = "yes" ; then 5867 mkdir -p linux-headers 5868 case "$cpu" in 5869 i386|x86_64|x32) 5870 linux_arch=x86 5871 ;; 5872 ppcemb|ppc|ppc64) 5873 linux_arch=powerpc 5874 ;; 5875 s390x) 5876 linux_arch=s390 5877 ;; 5878 aarch64) 5879 linux_arch=arm64 5880 ;; 5881 mips64) 5882 linux_arch=mips 5883 ;; 5884 *) 5885 # For most CPUs the kernel architecture name and QEMU CPU name match. 5886 linux_arch="$cpu" 5887 ;; 5888 esac 5889 # For non-KVM architectures we will not have asm headers 5890 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 5891 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 5892 fi 5893fi 5894 5895for target in $target_list; do 5896target_dir="$target" 5897config_target_mak=$target_dir/config-target.mak 5898target_name=$(echo $target | cut -d '-' -f 1) 5899target_bigendian="no" 5900 5901case "$target_name" in 5902 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 5903 target_bigendian=yes 5904 ;; 5905esac 5906target_softmmu="no" 5907target_user_only="no" 5908target_linux_user="no" 5909target_bsd_user="no" 5910case "$target" in 5911 ${target_name}-softmmu) 5912 target_softmmu="yes" 5913 ;; 5914 ${target_name}-linux-user) 5915 if test "$linux" != "yes" ; then 5916 error_exit "Target '$target' is only available on a Linux host" 5917 fi 5918 target_user_only="yes" 5919 target_linux_user="yes" 5920 ;; 5921 ${target_name}-bsd-user) 5922 if test "$bsd" != "yes" ; then 5923 error_exit "Target '$target' is only available on a BSD host" 5924 fi 5925 target_user_only="yes" 5926 target_bsd_user="yes" 5927 ;; 5928 *) 5929 error_exit "Target '$target' not recognised" 5930 exit 1 5931 ;; 5932esac 5933 5934mkdir -p $target_dir 5935echo "# Automatically generated by configure - do not modify" > $config_target_mak 5936 5937bflt="no" 5938mttcg="no" 5939interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 5940gdb_xml_files="" 5941 5942TARGET_ARCH="$target_name" 5943TARGET_BASE_ARCH="" 5944TARGET_ABI_DIR="" 5945 5946case "$target_name" in 5947 i386) 5948 ;; 5949 x86_64) 5950 TARGET_BASE_ARCH=i386 5951 ;; 5952 alpha) 5953 mttcg="yes" 5954 ;; 5955 arm|armeb) 5956 TARGET_ARCH=arm 5957 bflt="yes" 5958 mttcg="yes" 5959 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 5960 ;; 5961 aarch64) 5962 TARGET_BASE_ARCH=arm 5963 bflt="yes" 5964 mttcg="yes" 5965 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 5966 ;; 5967 cris) 5968 ;; 5969 hppa) 5970 ;; 5971 lm32) 5972 ;; 5973 m68k) 5974 bflt="yes" 5975 gdb_xml_files="cf-core.xml cf-fp.xml" 5976 ;; 5977 microblaze|microblazeel) 5978 TARGET_ARCH=microblaze 5979 bflt="yes" 5980 ;; 5981 mips|mipsel) 5982 TARGET_ARCH=mips 5983 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 5984 ;; 5985 mipsn32|mipsn32el) 5986 TARGET_ARCH=mips64 5987 TARGET_BASE_ARCH=mips 5988 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 5989 echo "TARGET_ABI32=y" >> $config_target_mak 5990 ;; 5991 mips64|mips64el) 5992 TARGET_ARCH=mips64 5993 TARGET_BASE_ARCH=mips 5994 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 5995 ;; 5996 moxie) 5997 ;; 5998 nios2) 5999 ;; 6000 or1k) 6001 TARGET_ARCH=openrisc 6002 TARGET_BASE_ARCH=openrisc 6003 ;; 6004 ppc) 6005 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 6006 ;; 6007 ppcemb) 6008 TARGET_BASE_ARCH=ppc 6009 TARGET_ABI_DIR=ppc 6010 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 6011 ;; 6012 ppc64) 6013 TARGET_BASE_ARCH=ppc 6014 TARGET_ABI_DIR=ppc 6015 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6016 ;; 6017 ppc64le) 6018 TARGET_ARCH=ppc64 6019 TARGET_BASE_ARCH=ppc 6020 TARGET_ABI_DIR=ppc 6021 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6022 ;; 6023 ppc64abi32) 6024 TARGET_ARCH=ppc64 6025 TARGET_BASE_ARCH=ppc 6026 TARGET_ABI_DIR=ppc 6027 echo "TARGET_ABI32=y" >> $config_target_mak 6028 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6029 ;; 6030 sh4|sh4eb) 6031 TARGET_ARCH=sh4 6032 bflt="yes" 6033 ;; 6034 sparc) 6035 ;; 6036 sparc64) 6037 TARGET_BASE_ARCH=sparc 6038 ;; 6039 sparc32plus) 6040 TARGET_ARCH=sparc64 6041 TARGET_BASE_ARCH=sparc 6042 TARGET_ABI_DIR=sparc 6043 echo "TARGET_ABI32=y" >> $config_target_mak 6044 ;; 6045 s390x) 6046 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml" 6047 ;; 6048 tilegx) 6049 ;; 6050 tricore) 6051 ;; 6052 unicore32) 6053 ;; 6054 xtensa|xtensaeb) 6055 TARGET_ARCH=xtensa 6056 ;; 6057 *) 6058 error_exit "Unsupported target CPU" 6059 ;; 6060esac 6061# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 6062if [ "$TARGET_BASE_ARCH" = "" ]; then 6063 TARGET_BASE_ARCH=$TARGET_ARCH 6064fi 6065 6066symlink "$source_path/Makefile.target" "$target_dir/Makefile" 6067 6068upper() { 6069 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 6070} 6071 6072target_arch_name="$(upper $TARGET_ARCH)" 6073echo "TARGET_$target_arch_name=y" >> $config_target_mak 6074echo "TARGET_NAME=$target_name" >> $config_target_mak 6075echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 6076if [ "$TARGET_ABI_DIR" = "" ]; then 6077 TARGET_ABI_DIR=$TARGET_ARCH 6078fi 6079echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 6080if [ "$HOST_VARIANT_DIR" != "" ]; then 6081 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 6082fi 6083case "$target_name" in 6084 i386|x86_64) 6085 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then 6086 echo "CONFIG_XEN=y" >> $config_target_mak 6087 if test "$xen_pci_passthrough" = yes; then 6088 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 6089 fi 6090 fi 6091 ;; 6092 *) 6093esac 6094case "$target_name" in 6095 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips) 6096 # Make sure the target and host cpus are compatible 6097 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \ 6098 \( "$target_name" = "$cpu" -o \ 6099 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \ 6100 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \ 6101 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \ 6102 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \ 6103 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \ 6104 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \ 6105 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \ 6106 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \ 6107 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then 6108 echo "CONFIG_KVM=y" >> $config_target_mak 6109 if test "$vhost_net" = "yes" ; then 6110 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 6111 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak 6112 fi 6113 fi 6114esac 6115if test "$hax" = "yes" ; then 6116 if test "$target_softmmu" = "yes" ; then 6117 case "$target_name" in 6118 i386|x86_64) 6119 echo "CONFIG_HAX=y" >> $config_target_mak 6120 ;; 6121 esac 6122 fi 6123fi 6124if test "$target_bigendian" = "yes" ; then 6125 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 6126fi 6127if test "$target_softmmu" = "yes" ; then 6128 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 6129 if test "$mttcg" = "yes" ; then 6130 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 6131 fi 6132fi 6133if test "$target_user_only" = "yes" ; then 6134 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 6135 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 6136fi 6137if test "$target_linux_user" = "yes" ; then 6138 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 6139fi 6140list="" 6141if test ! -z "$gdb_xml_files" ; then 6142 for x in $gdb_xml_files; do 6143 list="$list $source_path/gdb-xml/$x" 6144 done 6145 echo "TARGET_XML_FILES=$list" >> $config_target_mak 6146fi 6147 6148if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 6149 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 6150fi 6151if test "$target_bsd_user" = "yes" ; then 6152 echo "CONFIG_BSD_USER=y" >> $config_target_mak 6153fi 6154 6155# generate QEMU_CFLAGS/LDFLAGS for targets 6156 6157cflags="" 6158ldflags="" 6159 6160disas_config() { 6161 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 6162 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 6163} 6164 6165for i in $ARCH $TARGET_BASE_ARCH ; do 6166 case "$i" in 6167 alpha) 6168 disas_config "ALPHA" 6169 ;; 6170 aarch64) 6171 if test -n "${cxx}"; then 6172 disas_config "ARM_A64" 6173 fi 6174 ;; 6175 arm) 6176 disas_config "ARM" 6177 if test -n "${cxx}"; then 6178 disas_config "ARM_A64" 6179 fi 6180 ;; 6181 cris) 6182 disas_config "CRIS" 6183 ;; 6184 hppa) 6185 disas_config "HPPA" 6186 ;; 6187 i386|x86_64|x32) 6188 disas_config "I386" 6189 ;; 6190 ia64*) 6191 disas_config "IA64" 6192 ;; 6193 lm32) 6194 disas_config "LM32" 6195 ;; 6196 m68k) 6197 disas_config "M68K" 6198 ;; 6199 microblaze*) 6200 disas_config "MICROBLAZE" 6201 ;; 6202 mips*) 6203 disas_config "MIPS" 6204 ;; 6205 moxie*) 6206 disas_config "MOXIE" 6207 ;; 6208 nios2) 6209 disas_config "NIOS2" 6210 ;; 6211 or1k) 6212 disas_config "OPENRISC" 6213 ;; 6214 ppc*) 6215 disas_config "PPC" 6216 ;; 6217 s390*) 6218 disas_config "S390" 6219 ;; 6220 sh4) 6221 disas_config "SH4" 6222 ;; 6223 sparc*) 6224 disas_config "SPARC" 6225 ;; 6226 xtensa*) 6227 disas_config "XTENSA" 6228 ;; 6229 esac 6230done 6231if test "$tcg_interpreter" = "yes" ; then 6232 disas_config "TCI" 6233fi 6234 6235case "$ARCH" in 6236alpha) 6237 # Ensure there's only a single GP 6238 cflags="-msmall-data $cflags" 6239;; 6240esac 6241 6242if test "$gprof" = "yes" ; then 6243 echo "TARGET_GPROF=yes" >> $config_target_mak 6244 if test "$target_linux_user" = "yes" ; then 6245 cflags="-p $cflags" 6246 ldflags="-p $ldflags" 6247 fi 6248 if test "$target_softmmu" = "yes" ; then 6249 ldflags="-p $ldflags" 6250 echo "GPROF_CFLAGS=-p" >> $config_target_mak 6251 fi 6252fi 6253 6254if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 6255 ldflags="$ldflags $textseg_ldflags" 6256fi 6257 6258echo "LDFLAGS+=$ldflags" >> $config_target_mak 6259echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 6260 6261done # for target in $targets 6262 6263if [ "$pixman" = "internal" ]; then 6264 echo "config-host.h: subdir-pixman" >> $config_host_mak 6265fi 6266 6267if [ "$dtc_internal" = "yes" ]; then 6268 echo "config-host.h: subdir-dtc" >> $config_host_mak 6269fi 6270 6271if test "$numa" = "yes"; then 6272 echo "CONFIG_NUMA=y" >> $config_host_mak 6273fi 6274 6275if test "$ccache_cpp2" = "yes"; then 6276 echo "export CCACHE_CPP2=y" >> $config_host_mak 6277fi 6278 6279# build tree in object directory in case the source is not in the current directory 6280DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests" 6281DIRS="$DIRS docs fsdev" 6282DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 6283DIRS="$DIRS roms/seabios roms/vgabios" 6284DIRS="$DIRS qapi-generated" 6285FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 6286FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 6287FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 6288FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 6289FILES="$FILES pc-bios/spapr-rtas/Makefile" 6290FILES="$FILES pc-bios/s390-ccw/Makefile" 6291FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 6292FILES="$FILES pc-bios/qemu-icon.bmp" 6293for bios_file in \ 6294 $source_path/pc-bios/*.bin \ 6295 $source_path/pc-bios/*.lid \ 6296 $source_path/pc-bios/*.aml \ 6297 $source_path/pc-bios/*.rom \ 6298 $source_path/pc-bios/*.dtb \ 6299 $source_path/pc-bios/*.img \ 6300 $source_path/pc-bios/openbios-* \ 6301 $source_path/pc-bios/u-boot.* \ 6302 $source_path/pc-bios/palcode-* 6303do 6304 FILES="$FILES pc-bios/$(basename $bios_file)" 6305done 6306for test_file in $(find $source_path/tests/acpi-test-data -type f) 6307do 6308 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')" 6309done 6310mkdir -p $DIRS 6311for f in $FILES ; do 6312 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 6313 symlink "$source_path/$f" "$f" 6314 fi 6315done 6316 6317# temporary config to build submodules 6318for rom in seabios vgabios ; do 6319 config_mak=roms/$rom/config.mak 6320 echo "# Automatically generated by configure - do not modify" > $config_mak 6321 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 6322 echo "AS=$as" >> $config_mak 6323 echo "CCAS=$ccas" >> $config_mak 6324 echo "CC=$cc" >> $config_mak 6325 echo "BCC=bcc" >> $config_mak 6326 echo "CPP=$cpp" >> $config_mak 6327 echo "OBJCOPY=objcopy" >> $config_mak 6328 echo "IASL=$iasl" >> $config_mak 6329 echo "LD=$ld" >> $config_mak 6330done 6331 6332# set up tests data directory 6333if [ ! -e tests/data ]; then 6334 symlink "$source_path/tests/data" tests/data 6335fi 6336 6337# set up qemu-iotests in this build directory 6338iotests_common_env="tests/qemu-iotests/common.env" 6339iotests_check="tests/qemu-iotests/check" 6340 6341echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 6342echo >> "$iotests_common_env" 6343echo "export PYTHON='$python'" >> "$iotests_common_env" 6344 6345if [ ! -e "$iotests_check" ]; then 6346 symlink "$source_path/$iotests_check" "$iotests_check" 6347fi 6348 6349# Save the configure command line for later reuse. 6350cat <<EOD >config.status 6351#!/bin/sh 6352# Generated by configure. 6353# Run this file to recreate the current configuration. 6354# Compiler output produced by configure, useful for debugging 6355# configure, is in config.log if it exists. 6356EOD 6357printf "exec" >>config.status 6358printf " '%s'" "$0" "$@" >>config.status 6359echo ' "$@"' >>config.status 6360chmod +x config.status 6361 6362rm -r "$TMPDIR1" 6363