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