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