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