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