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