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