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