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