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 LDFLAGS="-m32 $LDFLAGS" 1217 CPU_CFLAGS="-m32 -mcpu=ultrasparc" 1218 ;; 1219 sparc64) 1220 LDFLAGS="-m64 $LDFLAGS" 1221 CPU_CFLAGS="-m64 -mcpu=ultrasparc" 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 const char *s = curses_version(); 3046 wchar_t wch = L'w'; 3047 setlocale(LC_ALL, ""); 3048 resize_term(0, 0); 3049 addwstr(L"wide chars\n"); 3050 addnwstr(&wch, 1); 3051 add_wch(WACS_DEGREE); 3052 return s != 0; 3053} 3054EOF 3055 IFS=: 3056 for curses_inc in $curses_inc_list; do 3057 IFS=: 3058 for curses_lib in $curses_lib_list; do 3059 unset IFS 3060 if compile_prog "$curses_inc" "$curses_lib" ; then 3061 curses_found=yes 3062 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS" 3063 libs_softmmu="$curses_lib $libs_softmmu" 3064 break 3065 fi 3066 done 3067 if test "$curses_found" = yes ; then 3068 break 3069 fi 3070 done 3071 unset IFS 3072 if test "$curses_found" = "yes" ; then 3073 curses=yes 3074 else 3075 if test "$curses" = "yes" ; then 3076 feature_not_found "curses" "Install ncurses devel" 3077 fi 3078 curses=no 3079 fi 3080fi 3081 3082########################################## 3083# curl probe 3084if test "$curl" != "no" ; then 3085 if $pkg_config libcurl --exists; then 3086 curlconfig="$pkg_config libcurl" 3087 else 3088 curlconfig=curl-config 3089 fi 3090 cat > $TMPC << EOF 3091#include <curl/curl.h> 3092int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3093EOF 3094 curl_cflags=$($curlconfig --cflags 2>/dev/null) 3095 curl_libs=$($curlconfig --libs 2>/dev/null) 3096 if compile_prog "$curl_cflags" "$curl_libs" ; then 3097 curl=yes 3098 else 3099 if test "$curl" = "yes" ; then 3100 feature_not_found "curl" "Install libcurl devel" 3101 fi 3102 curl=no 3103 fi 3104fi # test "$curl" 3105 3106########################################## 3107# bluez support probe 3108if test "$bluez" != "no" ; then 3109 cat > $TMPC << EOF 3110#include <bluetooth/bluetooth.h> 3111int main(void) { return bt_error(0); } 3112EOF 3113 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null) 3114 bluez_libs=$($pkg_config --libs bluez 2>/dev/null) 3115 if compile_prog "$bluez_cflags" "$bluez_libs" ; then 3116 bluez=yes 3117 libs_softmmu="$bluez_libs $libs_softmmu" 3118 else 3119 if test "$bluez" = "yes" ; then 3120 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel" 3121 fi 3122 bluez="no" 3123 fi 3124fi 3125 3126########################################## 3127# glib support probe 3128 3129if test "$mingw32" = yes; then 3130 glib_req_ver=2.30 3131else 3132 glib_req_ver=2.22 3133fi 3134glib_modules=gthread-2.0 3135if test "$modules" = yes; then 3136 glib_modules="$glib_modules gmodule-2.0" 3137fi 3138 3139# This workaround is required due to a bug in pkg-config file for glib as it 3140# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3141 3142if test "$static" = yes -a "$mingw32" = yes; then 3143 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" 3144fi 3145 3146for i in $glib_modules; do 3147 if $pkg_config --atleast-version=$glib_req_ver $i; then 3148 glib_cflags=$($pkg_config --cflags $i) 3149 glib_libs=$($pkg_config --libs $i) 3150 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" 3151 LIBS="$glib_libs $LIBS" 3152 libs_qga="$glib_libs $libs_qga" 3153 else 3154 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3155 fi 3156done 3157 3158# Sanity check that the current size_t matches the 3159# size that glib thinks it should be. This catches 3160# problems on multi-arch where people try to build 3161# 32-bit QEMU while pointing at 64-bit glib headers 3162cat > $TMPC <<EOF 3163#include <glib.h> 3164#include <unistd.h> 3165 3166#define QEMU_BUILD_BUG_ON(x) \ 3167 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3168 3169int main(void) { 3170 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3171 return 0; 3172} 3173EOF 3174 3175if ! compile_prog "$CFLAGS" "$LIBS" ; then 3176 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3177 "You probably need to set PKG_CONFIG_LIBDIR"\ 3178 "to point to the right pkg-config files for your"\ 3179 "build target" 3180fi 3181 3182# g_test_trap_subprocess added in 2.38. Used by some tests. 3183glib_subprocess=yes 3184if ! $pkg_config --atleast-version=2.38 glib-2.0; then 3185 glib_subprocess=no 3186fi 3187 3188# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3189cat > $TMPC << EOF 3190#include <glib.h> 3191int main(void) { return 0; } 3192EOF 3193if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3194 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3195 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3196 CFLAGS="-Wno-unknown-attributes $CFLAGS" 3197 fi 3198fi 3199 3200########################################## 3201# SHA command probe for modules 3202if test "$modules" = yes; then 3203 shacmd_probe="sha1sum sha1 shasum" 3204 for c in $shacmd_probe; do 3205 if has $c; then 3206 shacmd="$c" 3207 break 3208 fi 3209 done 3210 if test "$shacmd" = ""; then 3211 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3212 fi 3213fi 3214 3215########################################## 3216# pixman support probe 3217 3218if test "$pixman" = ""; then 3219 if test "$want_tools" = "no" -a "$softmmu" = "no"; then 3220 pixman="none" 3221 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 3222 pixman="system" 3223 else 3224 pixman="internal" 3225 fi 3226fi 3227if test "$pixman" = "none"; then 3228 if test "$want_tools" != "no" -o "$softmmu" != "no"; then 3229 error_exit "pixman disabled but system emulation or tools build" \ 3230 "enabled. You can turn off pixman only if you also" \ 3231 "disable all system emulation targets and the tools" \ 3232 "build with '--disable-tools --disable-system'." 3233 fi 3234 pixman_cflags= 3235 pixman_libs= 3236elif test "$pixman" = "system"; then 3237 # pixman version has been checked above 3238 pixman_cflags=$($pkg_config --cflags pixman-1) 3239 pixman_libs=$($pkg_config --libs pixman-1) 3240else 3241 if test ! -d ${source_path}/pixman/pixman; then 3242 error_exit "pixman >= 0.21.8 not present. Your options:" \ 3243 " (1) Preferred: Install the pixman devel package (any recent" \ 3244 " distro should have packages as Xorg needs pixman too)." \ 3245 " (2) Fetch the pixman submodule, using:" \ 3246 " git submodule update --init pixman" 3247 fi 3248 mkdir -p pixman/pixman 3249 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman" 3250 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1" 3251fi 3252 3253########################################## 3254# libcap probe 3255 3256if test "$cap" != "no" ; then 3257 cat > $TMPC <<EOF 3258#include <stdio.h> 3259#include <sys/capability.h> 3260int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; } 3261EOF 3262 if compile_prog "" "-lcap" ; then 3263 cap=yes 3264 else 3265 cap=no 3266 fi 3267fi 3268 3269########################################## 3270# pthread probe 3271PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3272 3273pthread=no 3274cat > $TMPC << EOF 3275#include <pthread.h> 3276static void *f(void *p) { return NULL; } 3277int main(void) { 3278 pthread_t thread; 3279 pthread_create(&thread, 0, f, 0); 3280 return 0; 3281} 3282EOF 3283if compile_prog "" "" ; then 3284 pthread=yes 3285else 3286 for pthread_lib in $PTHREADLIBS_LIST; do 3287 if compile_prog "" "$pthread_lib" ; then 3288 pthread=yes 3289 found=no 3290 for lib_entry in $LIBS; do 3291 if test "$lib_entry" = "$pthread_lib"; then 3292 found=yes 3293 break 3294 fi 3295 done 3296 if test "$found" = "no"; then 3297 LIBS="$pthread_lib $LIBS" 3298 fi 3299 PTHREAD_LIB="$pthread_lib" 3300 break 3301 fi 3302 done 3303fi 3304 3305if test "$mingw32" != yes -a "$pthread" = no; then 3306 error_exit "pthread check failed" \ 3307 "Make sure to have the pthread libs and headers installed." 3308fi 3309 3310# check for pthread_setname_np 3311pthread_setname_np=no 3312cat > $TMPC << EOF 3313#include <pthread.h> 3314 3315static void *f(void *p) { return NULL; } 3316int main(void) 3317{ 3318 pthread_t thread; 3319 pthread_create(&thread, 0, f, 0); 3320 pthread_setname_np(thread, "QEMU"); 3321 return 0; 3322} 3323EOF 3324if compile_prog "" "$pthread_lib" ; then 3325 pthread_setname_np=yes 3326fi 3327 3328########################################## 3329# rbd probe 3330if test "$rbd" != "no" ; then 3331 cat > $TMPC <<EOF 3332#include <stdio.h> 3333#include <rbd/librbd.h> 3334int main(void) { 3335 rados_t cluster; 3336 rados_create(&cluster, NULL); 3337 return 0; 3338} 3339EOF 3340 rbd_libs="-lrbd -lrados" 3341 if compile_prog "" "$rbd_libs" ; then 3342 rbd=yes 3343 else 3344 if test "$rbd" = "yes" ; then 3345 feature_not_found "rados block device" "Install librbd/ceph devel" 3346 fi 3347 rbd=no 3348 fi 3349fi 3350 3351########################################## 3352# libssh2 probe 3353min_libssh2_version=1.2.8 3354if test "$libssh2" != "no" ; then 3355 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then 3356 libssh2_cflags=$($pkg_config libssh2 --cflags) 3357 libssh2_libs=$($pkg_config libssh2 --libs) 3358 libssh2=yes 3359 else 3360 if test "$libssh2" = "yes" ; then 3361 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2" 3362 fi 3363 libssh2=no 3364 fi 3365fi 3366 3367########################################## 3368# libssh2_sftp_fsync probe 3369 3370if test "$libssh2" = "yes"; then 3371 cat > $TMPC <<EOF 3372#include <stdio.h> 3373#include <libssh2.h> 3374#include <libssh2_sftp.h> 3375int main(void) { 3376 LIBSSH2_SESSION *session; 3377 LIBSSH2_SFTP *sftp; 3378 LIBSSH2_SFTP_HANDLE *sftp_handle; 3379 session = libssh2_session_init (); 3380 sftp = libssh2_sftp_init (session); 3381 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0); 3382 libssh2_sftp_fsync (sftp_handle); 3383 return 0; 3384} 3385EOF 3386 # libssh2_cflags/libssh2_libs defined in previous test. 3387 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then 3388 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS" 3389 fi 3390fi 3391 3392########################################## 3393# linux-aio probe 3394 3395if test "$linux_aio" != "no" ; then 3396 cat > $TMPC <<EOF 3397#include <libaio.h> 3398#include <sys/eventfd.h> 3399#include <stddef.h> 3400int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 3401EOF 3402 if compile_prog "" "-laio" ; then 3403 linux_aio=yes 3404 else 3405 if test "$linux_aio" = "yes" ; then 3406 feature_not_found "linux AIO" "Install libaio devel" 3407 fi 3408 linux_aio=no 3409 fi 3410fi 3411 3412########################################## 3413# TPM passthrough is only on x86 Linux 3414 3415if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then 3416 tpm_passthrough=$tpm 3417else 3418 tpm_passthrough=no 3419fi 3420 3421########################################## 3422# attr probe 3423 3424if test "$attr" != "no" ; then 3425 cat > $TMPC <<EOF 3426#include <stdio.h> 3427#include <sys/types.h> 3428#ifdef CONFIG_LIBATTR 3429#include <attr/xattr.h> 3430#else 3431#include <sys/xattr.h> 3432#endif 3433int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 3434EOF 3435 if compile_prog "" "" ; then 3436 attr=yes 3437 # Older distros have <attr/xattr.h>, and need -lattr: 3438 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 3439 attr=yes 3440 LIBS="-lattr $LIBS" 3441 libattr=yes 3442 else 3443 if test "$attr" = "yes" ; then 3444 feature_not_found "ATTR" "Install libc6 or libattr devel" 3445 fi 3446 attr=no 3447 fi 3448fi 3449 3450########################################## 3451# iovec probe 3452cat > $TMPC <<EOF 3453#include <sys/types.h> 3454#include <sys/uio.h> 3455#include <unistd.h> 3456int main(void) { return sizeof(struct iovec); } 3457EOF 3458iovec=no 3459if compile_prog "" "" ; then 3460 iovec=yes 3461fi 3462 3463########################################## 3464# preadv probe 3465cat > $TMPC <<EOF 3466#include <sys/types.h> 3467#include <sys/uio.h> 3468#include <unistd.h> 3469int main(void) { return preadv(0, 0, 0, 0); } 3470EOF 3471preadv=no 3472if compile_prog "" "" ; then 3473 preadv=yes 3474fi 3475 3476########################################## 3477# fdt probe 3478# fdt support is mandatory for at least some target architectures, 3479# so insist on it if we're building those system emulators. 3480fdt_required=no 3481for target in $target_list; do 3482 case $target in 3483 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu) 3484 fdt_required=yes 3485 ;; 3486 esac 3487done 3488 3489if test "$fdt_required" = "yes"; then 3490 if test "$fdt" = "no"; then 3491 error_exit "fdt disabled but some requested targets require it." \ 3492 "You can turn off fdt only if you also disable all the system emulation" \ 3493 "targets which need it (by specifying a cut down --target-list)." 3494 fi 3495 fdt=yes 3496fi 3497 3498if test "$fdt" != "no" ; then 3499 fdt_libs="-lfdt" 3500 # explicitly check for libfdt_env.h as it is missing in some stable installs 3501 # and test for required functions to make sure we are on a version >= 1.4.2 3502 cat > $TMPC << EOF 3503#include <libfdt.h> 3504#include <libfdt_env.h> 3505int main(void) { fdt_first_subnode(0, 0); return 0; } 3506EOF 3507 if compile_prog "" "$fdt_libs" ; then 3508 # system DTC is good - use it 3509 fdt=yes 3510 elif test -d ${source_path}/dtc/libfdt ; then 3511 # have submodule DTC - use it 3512 fdt=yes 3513 dtc_internal="yes" 3514 mkdir -p dtc 3515 if [ "$pwd_is_source_path" != "y" ] ; then 3516 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 3517 symlink "$source_path/dtc/scripts" "dtc/scripts" 3518 fi 3519 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 3520 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs" 3521 elif test "$fdt" = "yes" ; then 3522 # have neither and want - prompt for system/submodule install 3523 error_exit "DTC (libfdt) version >= 1.4.2 not present. Your options:" \ 3524 " (1) Preferred: Install the DTC (libfdt) devel package" \ 3525 " (2) Fetch the DTC submodule, using:" \ 3526 " git submodule update --init dtc" 3527 else 3528 # don't have and don't want 3529 fdt_libs= 3530 fdt=no 3531 fi 3532fi 3533 3534libs_softmmu="$libs_softmmu $fdt_libs" 3535 3536########################################## 3537# opengl probe (for sdl2, gtk, milkymist-tmu2) 3538 3539if test "$opengl" != "no" ; then 3540 opengl_pkgs="epoxy libdrm gbm" 3541 if $pkg_config $opengl_pkgs x11; then 3542 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags" 3543 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs" 3544 opengl=yes 3545 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 3546 gtk_gl="yes" 3547 fi 3548 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 3549 else 3550 if test "$opengl" = "yes" ; then 3551 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 3552 fi 3553 opengl_cflags="" 3554 opengl_libs="" 3555 opengl=no 3556 fi 3557fi 3558 3559if test "$opengl" = "yes"; then 3560 cat > $TMPC << EOF 3561#include <epoxy/egl.h> 3562#ifndef EGL_MESA_image_dma_buf_export 3563# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 3564#endif 3565int main(void) { return 0; } 3566EOF 3567 if compile_prog "" "" ; then 3568 opengl_dmabuf=yes 3569 fi 3570fi 3571 3572 3573########################################## 3574# glusterfs probe 3575if test "$glusterfs" != "no" ; then 3576 if $pkg_config --atleast-version=3 glusterfs-api; then 3577 glusterfs="yes" 3578 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 3579 glusterfs_libs=$($pkg_config --libs glusterfs-api) 3580 if $pkg_config --atleast-version=4 glusterfs-api; then 3581 glusterfs_xlator_opt="yes" 3582 fi 3583 if $pkg_config --atleast-version=5 glusterfs-api; then 3584 glusterfs_discard="yes" 3585 fi 3586 if $pkg_config --atleast-version=6 glusterfs-api; then 3587 glusterfs_fallocate="yes" 3588 glusterfs_zerofill="yes" 3589 fi 3590 else 3591 if test "$glusterfs" = "yes" ; then 3592 feature_not_found "GlusterFS backend support" \ 3593 "Install glusterfs-api devel >= 3" 3594 fi 3595 glusterfs="no" 3596 fi 3597fi 3598 3599# Check for inotify functions when we are building linux-user 3600# emulator. This is done because older glibc versions don't 3601# have syscall stubs for these implemented. In that case we 3602# don't provide them even if kernel supports them. 3603# 3604inotify=no 3605cat > $TMPC << EOF 3606#include <sys/inotify.h> 3607 3608int 3609main(void) 3610{ 3611 /* try to start inotify */ 3612 return inotify_init(); 3613} 3614EOF 3615if compile_prog "" "" ; then 3616 inotify=yes 3617fi 3618 3619inotify1=no 3620cat > $TMPC << EOF 3621#include <sys/inotify.h> 3622 3623int 3624main(void) 3625{ 3626 /* try to start inotify */ 3627 return inotify_init1(0); 3628} 3629EOF 3630if compile_prog "" "" ; then 3631 inotify1=yes 3632fi 3633 3634# check if pipe2 is there 3635pipe2=no 3636cat > $TMPC << EOF 3637#include <unistd.h> 3638#include <fcntl.h> 3639 3640int main(void) 3641{ 3642 int pipefd[2]; 3643 return pipe2(pipefd, O_CLOEXEC); 3644} 3645EOF 3646if compile_prog "" "" ; then 3647 pipe2=yes 3648fi 3649 3650# check if accept4 is there 3651accept4=no 3652cat > $TMPC << EOF 3653#include <sys/socket.h> 3654#include <stddef.h> 3655 3656int main(void) 3657{ 3658 accept4(0, NULL, NULL, SOCK_CLOEXEC); 3659 return 0; 3660} 3661EOF 3662if compile_prog "" "" ; then 3663 accept4=yes 3664fi 3665 3666# check if tee/splice is there. vmsplice was added same time. 3667splice=no 3668cat > $TMPC << EOF 3669#include <unistd.h> 3670#include <fcntl.h> 3671#include <limits.h> 3672 3673int main(void) 3674{ 3675 int len, fd = 0; 3676 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 3677 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 3678 return 0; 3679} 3680EOF 3681if compile_prog "" "" ; then 3682 splice=yes 3683fi 3684 3685########################################## 3686# libnuma probe 3687 3688if test "$numa" != "no" ; then 3689 cat > $TMPC << EOF 3690#include <numa.h> 3691int main(void) { return numa_available(); } 3692EOF 3693 3694 if compile_prog "" "-lnuma" ; then 3695 numa=yes 3696 libs_softmmu="-lnuma $libs_softmmu" 3697 else 3698 if test "$numa" = "yes" ; then 3699 feature_not_found "numa" "install numactl devel" 3700 fi 3701 numa=no 3702 fi 3703fi 3704 3705if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 3706 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 3707 exit 1 3708fi 3709 3710########################################## 3711# tcmalloc probe 3712 3713if test "$tcmalloc" = "yes" ; then 3714 cat > $TMPC << EOF 3715#include <stdlib.h> 3716int main(void) { malloc(1); return 0; } 3717EOF 3718 3719 if compile_prog "" "-ltcmalloc" ; then 3720 LIBS="-ltcmalloc $LIBS" 3721 else 3722 feature_not_found "tcmalloc" "install gperftools devel" 3723 fi 3724fi 3725 3726########################################## 3727# jemalloc probe 3728 3729if test "$jemalloc" = "yes" ; then 3730 cat > $TMPC << EOF 3731#include <stdlib.h> 3732int main(void) { malloc(1); return 0; } 3733EOF 3734 3735 if compile_prog "" "-ljemalloc" ; then 3736 LIBS="-ljemalloc $LIBS" 3737 else 3738 feature_not_found "jemalloc" "install jemalloc devel" 3739 fi 3740fi 3741 3742########################################## 3743# signalfd probe 3744signalfd="no" 3745cat > $TMPC << EOF 3746#include <unistd.h> 3747#include <sys/syscall.h> 3748#include <signal.h> 3749int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 3750EOF 3751 3752if compile_prog "" "" ; then 3753 signalfd=yes 3754fi 3755 3756# check if eventfd is supported 3757eventfd=no 3758cat > $TMPC << EOF 3759#include <sys/eventfd.h> 3760 3761int main(void) 3762{ 3763 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 3764} 3765EOF 3766if compile_prog "" "" ; then 3767 eventfd=yes 3768fi 3769 3770# check if memfd is supported 3771memfd=no 3772cat > $TMPC << EOF 3773#include <sys/memfd.h> 3774 3775int main(void) 3776{ 3777 return memfd_create("foo", MFD_ALLOW_SEALING); 3778} 3779EOF 3780if compile_prog "" "" ; then 3781 memfd=yes 3782fi 3783 3784 3785 3786# check for fallocate 3787fallocate=no 3788cat > $TMPC << EOF 3789#include <fcntl.h> 3790 3791int main(void) 3792{ 3793 fallocate(0, 0, 0, 0); 3794 return 0; 3795} 3796EOF 3797if compile_prog "" "" ; then 3798 fallocate=yes 3799fi 3800 3801# check for fallocate hole punching 3802fallocate_punch_hole=no 3803cat > $TMPC << EOF 3804#include <fcntl.h> 3805#include <linux/falloc.h> 3806 3807int main(void) 3808{ 3809 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 3810 return 0; 3811} 3812EOF 3813if compile_prog "" "" ; then 3814 fallocate_punch_hole=yes 3815fi 3816 3817# check that fallocate supports range zeroing inside the file 3818fallocate_zero_range=no 3819cat > $TMPC << EOF 3820#include <fcntl.h> 3821#include <linux/falloc.h> 3822 3823int main(void) 3824{ 3825 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 3826 return 0; 3827} 3828EOF 3829if compile_prog "" "" ; then 3830 fallocate_zero_range=yes 3831fi 3832 3833# check for posix_fallocate 3834posix_fallocate=no 3835cat > $TMPC << EOF 3836#include <fcntl.h> 3837 3838int main(void) 3839{ 3840 posix_fallocate(0, 0, 0); 3841 return 0; 3842} 3843EOF 3844if compile_prog "" "" ; then 3845 posix_fallocate=yes 3846fi 3847 3848# check for sync_file_range 3849sync_file_range=no 3850cat > $TMPC << EOF 3851#include <fcntl.h> 3852 3853int main(void) 3854{ 3855 sync_file_range(0, 0, 0, 0); 3856 return 0; 3857} 3858EOF 3859if compile_prog "" "" ; then 3860 sync_file_range=yes 3861fi 3862 3863# check for linux/fiemap.h and FS_IOC_FIEMAP 3864fiemap=no 3865cat > $TMPC << EOF 3866#include <sys/ioctl.h> 3867#include <linux/fs.h> 3868#include <linux/fiemap.h> 3869 3870int main(void) 3871{ 3872 ioctl(0, FS_IOC_FIEMAP, 0); 3873 return 0; 3874} 3875EOF 3876if compile_prog "" "" ; then 3877 fiemap=yes 3878fi 3879 3880# check for dup3 3881dup3=no 3882cat > $TMPC << EOF 3883#include <unistd.h> 3884 3885int main(void) 3886{ 3887 dup3(0, 0, 0); 3888 return 0; 3889} 3890EOF 3891if compile_prog "" "" ; then 3892 dup3=yes 3893fi 3894 3895# check for ppoll support 3896ppoll=no 3897cat > $TMPC << EOF 3898#include <poll.h> 3899 3900int main(void) 3901{ 3902 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 3903 ppoll(&pfd, 1, 0, 0); 3904 return 0; 3905} 3906EOF 3907if compile_prog "" "" ; then 3908 ppoll=yes 3909fi 3910 3911# check for prctl(PR_SET_TIMERSLACK , ... ) support 3912prctl_pr_set_timerslack=no 3913cat > $TMPC << EOF 3914#include <sys/prctl.h> 3915 3916int main(void) 3917{ 3918 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 3919 return 0; 3920} 3921EOF 3922if compile_prog "" "" ; then 3923 prctl_pr_set_timerslack=yes 3924fi 3925 3926# check for epoll support 3927epoll=no 3928cat > $TMPC << EOF 3929#include <sys/epoll.h> 3930 3931int main(void) 3932{ 3933 epoll_create(0); 3934 return 0; 3935} 3936EOF 3937if compile_prog "" "" ; then 3938 epoll=yes 3939fi 3940 3941# epoll_create1 is a later addition 3942# so we must check separately for its presence 3943epoll_create1=no 3944cat > $TMPC << EOF 3945#include <sys/epoll.h> 3946 3947int main(void) 3948{ 3949 /* Note that we use epoll_create1 as a value, not as 3950 * a function being called. This is necessary so that on 3951 * old SPARC glibc versions where the function was present in 3952 * the library but not declared in the header file we will 3953 * fail the configure check. (Otherwise we will get a compiler 3954 * warning but not an error, and will proceed to fail the 3955 * qemu compile where we compile with -Werror.) 3956 */ 3957 return (int)(uintptr_t)&epoll_create1; 3958} 3959EOF 3960if compile_prog "" "" ; then 3961 epoll_create1=yes 3962fi 3963 3964# check for sendfile support 3965sendfile=no 3966cat > $TMPC << EOF 3967#include <sys/sendfile.h> 3968 3969int main(void) 3970{ 3971 return sendfile(0, 0, 0, 0); 3972} 3973EOF 3974if compile_prog "" "" ; then 3975 sendfile=yes 3976fi 3977 3978# check for timerfd support (glibc 2.8 and newer) 3979timerfd=no 3980cat > $TMPC << EOF 3981#include <sys/timerfd.h> 3982 3983int main(void) 3984{ 3985 return(timerfd_create(CLOCK_REALTIME, 0)); 3986} 3987EOF 3988if compile_prog "" "" ; then 3989 timerfd=yes 3990fi 3991 3992# check for setns and unshare support 3993setns=no 3994cat > $TMPC << EOF 3995#include <sched.h> 3996 3997int main(void) 3998{ 3999 int ret; 4000 ret = setns(0, 0); 4001 ret = unshare(0); 4002 return ret; 4003} 4004EOF 4005if compile_prog "" "" ; then 4006 setns=yes 4007fi 4008 4009# clock_adjtime probe 4010clock_adjtime=no 4011cat > $TMPC <<EOF 4012#include <time.h> 4013 4014int main(void) 4015{ 4016 return clock_adjtime(0, 0); 4017} 4018EOF 4019clock_adjtime=no 4020if compile_prog "" "" ; then 4021 clock_adjtime=yes 4022fi 4023 4024# syncfs probe 4025syncfs=no 4026cat > $TMPC <<EOF 4027#include <unistd.h> 4028 4029int main(void) 4030{ 4031 return syncfs(0); 4032} 4033EOF 4034syncfs=no 4035if compile_prog "" "" ; then 4036 syncfs=yes 4037fi 4038 4039# Check if tools are available to build documentation. 4040if test "$docs" != "no" ; then 4041 if has makeinfo && has pod2man; then 4042 docs=yes 4043 else 4044 if test "$docs" = "yes" ; then 4045 feature_not_found "docs" "Install texinfo and Perl/perl-podlators" 4046 fi 4047 docs=no 4048 fi 4049fi 4050 4051# Search for bswap_32 function 4052byteswap_h=no 4053cat > $TMPC << EOF 4054#include <byteswap.h> 4055int main(void) { return bswap_32(0); } 4056EOF 4057if compile_prog "" "" ; then 4058 byteswap_h=yes 4059fi 4060 4061# Search for bswap32 function 4062bswap_h=no 4063cat > $TMPC << EOF 4064#include <sys/endian.h> 4065#include <sys/types.h> 4066#include <machine/bswap.h> 4067int main(void) { return bswap32(0); } 4068EOF 4069if compile_prog "" "" ; then 4070 bswap_h=yes 4071fi 4072 4073########################################## 4074# Do we have libiscsi >= 1.9.0 4075if test "$libiscsi" != "no" ; then 4076 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4077 libiscsi="yes" 4078 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4079 libiscsi_libs=$($pkg_config --libs libiscsi) 4080 else 4081 if test "$libiscsi" = "yes" ; then 4082 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4083 fi 4084 libiscsi="no" 4085 fi 4086fi 4087 4088########################################## 4089# Do we need libm 4090cat > $TMPC << EOF 4091#include <math.h> 4092int main(int argc, char **argv) { return isnan(sin((double)argc)); } 4093EOF 4094if compile_prog "" "" ; then 4095 : 4096elif compile_prog "" "-lm" ; then 4097 LIBS="-lm $LIBS" 4098 libs_qga="-lm $libs_qga" 4099else 4100 error_exit "libm check failed" 4101fi 4102 4103########################################## 4104# Do we need librt 4105# uClibc provides 2 versions of clock_gettime(), one with realtime 4106# support and one without. This means that the clock_gettime() don't 4107# need -lrt. We still need it for timer_create() so we check for this 4108# function in addition. 4109cat > $TMPC <<EOF 4110#include <signal.h> 4111#include <time.h> 4112int main(void) { 4113 timer_create(CLOCK_REALTIME, NULL, NULL); 4114 return clock_gettime(CLOCK_REALTIME, NULL); 4115} 4116EOF 4117 4118if compile_prog "" "" ; then 4119 : 4120# we need pthread for static linking. use previous pthread test result 4121elif compile_prog "" "$pthread_lib -lrt" ; then 4122 LIBS="$LIBS -lrt" 4123 libs_qga="$libs_qga -lrt" 4124fi 4125 4126if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ 4127 "$aix" != "yes" -a "$haiku" != "yes" ; then 4128 libs_softmmu="-lutil $libs_softmmu" 4129fi 4130 4131########################################## 4132# spice probe 4133if test "$spice" != "no" ; then 4134 cat > $TMPC << EOF 4135#include <spice.h> 4136int main(void) { spice_server_new(); return 0; } 4137EOF 4138 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4139 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4140 if $pkg_config --atleast-version=0.12.0 spice-server && \ 4141 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4142 compile_prog "$spice_cflags" "$spice_libs" ; then 4143 spice="yes" 4144 libs_softmmu="$libs_softmmu $spice_libs" 4145 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 4146 spice_protocol_version=$($pkg_config --modversion spice-protocol) 4147 spice_server_version=$($pkg_config --modversion spice-server) 4148 else 4149 if test "$spice" = "yes" ; then 4150 feature_not_found "spice" \ 4151 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel" 4152 fi 4153 spice="no" 4154 fi 4155fi 4156 4157# check for smartcard support 4158smartcard_cflags="" 4159if test "$smartcard" != "no"; then 4160 if $pkg_config libcacard; then 4161 libcacard_cflags=$($pkg_config --cflags libcacard) 4162 libcacard_libs=$($pkg_config --libs libcacard) 4163 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags" 4164 libs_softmmu="$libs_softmmu $libcacard_libs" 4165 smartcard="yes" 4166 else 4167 if test "$smartcard" = "yes"; then 4168 feature_not_found "smartcard" "Install libcacard devel" 4169 fi 4170 smartcard="no" 4171 fi 4172fi 4173 4174# check for libusb 4175if test "$libusb" != "no" ; then 4176 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4177 libusb="yes" 4178 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4179 libusb_libs=$($pkg_config --libs libusb-1.0) 4180 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags" 4181 libs_softmmu="$libs_softmmu $libusb_libs" 4182 else 4183 if test "$libusb" = "yes"; then 4184 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4185 fi 4186 libusb="no" 4187 fi 4188fi 4189 4190# check for usbredirparser for usb network redirection support 4191if test "$usb_redir" != "no" ; then 4192 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4193 usb_redir="yes" 4194 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4195 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4196 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags" 4197 libs_softmmu="$libs_softmmu $usb_redir_libs" 4198 else 4199 if test "$usb_redir" = "yes"; then 4200 feature_not_found "usb-redir" "Install usbredir devel" 4201 fi 4202 usb_redir="no" 4203 fi 4204fi 4205 4206########################################## 4207# check if we have VSS SDK headers for win 4208 4209if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then 4210 case "$vss_win32_sdk" in 4211 "") vss_win32_include="-isystem $source_path" ;; 4212 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4213 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4214 vss_win32_include="-isystem $source_path/.sdk/vss" 4215 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4216 ;; 4217 *) vss_win32_include="-isystem $vss_win32_sdk" 4218 esac 4219 cat > $TMPC << EOF 4220#define __MIDL_user_allocate_free_DEFINED__ 4221#include <inc/win2003/vss.h> 4222int main(void) { return VSS_CTX_BACKUP; } 4223EOF 4224 if compile_prog "$vss_win32_include" "" ; then 4225 guest_agent_with_vss="yes" 4226 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4227 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4228 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4229 else 4230 if test "$vss_win32_sdk" != "" ; then 4231 echo "ERROR: Please download and install Microsoft VSS SDK:" 4232 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4233 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4234 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4235 echo "ERROR: The headers are extracted in the directory \`inc'." 4236 feature_not_found "VSS support" 4237 fi 4238 guest_agent_with_vss="no" 4239 fi 4240fi 4241 4242########################################## 4243# lookup Windows platform SDK (if not specified) 4244# The SDK is needed only to build .tlb (type library) file of guest agent 4245# VSS provider from the source. It is usually unnecessary because the 4246# pre-compiled .tlb file is included. 4247 4248if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then 4249 if test -z "$win_sdk"; then 4250 programfiles="$PROGRAMFILES" 4251 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4252 if test -n "$programfiles"; then 4253 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4254 else 4255 feature_not_found "Windows SDK" 4256 fi 4257 elif test "$win_sdk" = "no"; then 4258 win_sdk="" 4259 fi 4260fi 4261 4262########################################## 4263# check if mingw environment provides a recent ntddscsi.h 4264if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then 4265 cat > $TMPC << EOF 4266#include <windows.h> 4267#include <ntddscsi.h> 4268int main(void) { 4269#if !defined(IOCTL_SCSI_GET_ADDRESS) 4270#error Missing required ioctl definitions 4271#endif 4272 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4273 return addr.Lun; 4274} 4275EOF 4276 if compile_prog "" "" ; then 4277 guest_agent_ntddscsi=yes 4278 libs_qga="-lsetupapi $libs_qga" 4279 fi 4280fi 4281 4282########################################## 4283# virgl renderer probe 4284 4285if test "$virglrenderer" != "no" ; then 4286 cat > $TMPC << EOF 4287#include <virglrenderer.h> 4288int main(void) { virgl_renderer_poll(); return 0; } 4289EOF 4290 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4291 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4292 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4293 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4294 virglrenderer="yes" 4295 else 4296 if test "$virglrenderer" = "yes" ; then 4297 feature_not_found "virglrenderer" 4298 fi 4299 virglrenderer="no" 4300 fi 4301fi 4302 4303########################################## 4304# check if we have fdatasync 4305 4306fdatasync=no 4307cat > $TMPC << EOF 4308#include <unistd.h> 4309int main(void) { 4310#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4311return fdatasync(0); 4312#else 4313#error Not supported 4314#endif 4315} 4316EOF 4317if compile_prog "" "" ; then 4318 fdatasync=yes 4319fi 4320 4321########################################## 4322# check if we have madvise 4323 4324madvise=no 4325cat > $TMPC << EOF 4326#include <sys/types.h> 4327#include <sys/mman.h> 4328#include <stddef.h> 4329int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4330EOF 4331if compile_prog "" "" ; then 4332 madvise=yes 4333fi 4334 4335########################################## 4336# check if we have posix_madvise 4337 4338posix_madvise=no 4339cat > $TMPC << EOF 4340#include <sys/mman.h> 4341#include <stddef.h> 4342int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4343EOF 4344if compile_prog "" "" ; then 4345 posix_madvise=yes 4346fi 4347 4348########################################## 4349# check if we have posix_syslog 4350 4351posix_syslog=no 4352cat > $TMPC << EOF 4353#include <syslog.h> 4354int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4355EOF 4356if compile_prog "" "" ; then 4357 posix_syslog=yes 4358fi 4359 4360########################################## 4361# check if trace backend exists 4362 4363$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4364if test "$?" -ne 0 ; then 4365 error_exit "invalid trace backends" \ 4366 "Please choose supported trace backends." 4367fi 4368 4369########################################## 4370# For 'ust' backend, test if ust headers are present 4371if have_backend "ust"; then 4372 cat > $TMPC << EOF 4373#include <lttng/tracepoint.h> 4374int main(void) { return 0; } 4375EOF 4376 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4377 if $pkg_config lttng-ust --exists; then 4378 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4379 else 4380 lttng_ust_libs="-llttng-ust -ldl" 4381 fi 4382 if $pkg_config liburcu-bp --exists; then 4383 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4384 else 4385 urcu_bp_libs="-lurcu-bp" 4386 fi 4387 4388 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 4389 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 4390 else 4391 error_exit "Trace backend 'ust' missing lttng-ust header files" 4392 fi 4393fi 4394 4395########################################## 4396# For 'dtrace' backend, test if 'dtrace' command is present 4397if have_backend "dtrace"; then 4398 if ! has 'dtrace' ; then 4399 error_exit "dtrace command is not found in PATH $PATH" 4400 fi 4401 trace_backend_stap="no" 4402 if has 'stap' ; then 4403 trace_backend_stap="yes" 4404 fi 4405fi 4406 4407########################################## 4408# check and set a backend for coroutine 4409 4410# We prefer ucontext, but it's not always possible. The fallback 4411# is sigcontext. On Windows the only valid backend is the Windows 4412# specific one. 4413 4414ucontext_works=no 4415if test "$darwin" != "yes"; then 4416 cat > $TMPC << EOF 4417#include <ucontext.h> 4418#ifdef __stub_makecontext 4419#error Ignoring glibc stub makecontext which will always fail 4420#endif 4421int main(void) { makecontext(0, 0, 0); return 0; } 4422EOF 4423 if compile_prog "" "" ; then 4424 ucontext_works=yes 4425 fi 4426fi 4427 4428if test "$coroutine" = ""; then 4429 if test "$mingw32" = "yes"; then 4430 coroutine=win32 4431 elif test "$ucontext_works" = "yes"; then 4432 coroutine=ucontext 4433 else 4434 coroutine=sigaltstack 4435 fi 4436else 4437 case $coroutine in 4438 windows) 4439 if test "$mingw32" != "yes"; then 4440 error_exit "'windows' coroutine backend only valid for Windows" 4441 fi 4442 # Unfortunately the user visible backend name doesn't match the 4443 # coroutine-*.c filename for this case, so we have to adjust it here. 4444 coroutine=win32 4445 ;; 4446 ucontext) 4447 if test "$ucontext_works" != "yes"; then 4448 feature_not_found "ucontext" 4449 fi 4450 ;; 4451 sigaltstack) 4452 if test "$mingw32" = "yes"; then 4453 error_exit "only the 'windows' coroutine backend is valid for Windows" 4454 fi 4455 ;; 4456 *) 4457 error_exit "unknown coroutine backend $coroutine" 4458 ;; 4459 esac 4460fi 4461 4462if test "$coroutine_pool" = ""; then 4463 coroutine_pool=yes 4464fi 4465 4466if test "$debug_stack_usage" = "yes"; then 4467 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then 4468 error_exit "stack usage debugging is not supported for $cpu" 4469 fi 4470 if test "$coroutine_pool" = "yes"; then 4471 echo "WARN: disabling coroutine pool for stack usage debugging" 4472 coroutine_pool=no 4473 fi 4474fi 4475 4476 4477########################################## 4478# check if we have open_by_handle_at 4479 4480open_by_handle_at=no 4481cat > $TMPC << EOF 4482#include <fcntl.h> 4483#if !defined(AT_EMPTY_PATH) 4484# error missing definition 4485#else 4486int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4487#endif 4488EOF 4489if compile_prog "" "" ; then 4490 open_by_handle_at=yes 4491fi 4492 4493######################################## 4494# check if we have linux/magic.h 4495 4496linux_magic_h=no 4497cat > $TMPC << EOF 4498#include <linux/magic.h> 4499int main(void) { 4500 return 0; 4501} 4502EOF 4503if compile_prog "" "" ; then 4504 linux_magic_h=yes 4505fi 4506 4507######################################## 4508# check whether we can disable warning option with a pragma (this is needed 4509# to silence warnings in the headers of some versions of external libraries). 4510# This test has to be compiled with -Werror as otherwise an unknown pragma is 4511# only a warning. 4512# 4513# If we can't selectively disable warning in the code, disable -Werror so that 4514# the build doesn't fail anyway. 4515 4516pragma_disable_unused_but_set=no 4517cat > $TMPC << EOF 4518#pragma GCC diagnostic push 4519#pragma GCC diagnostic ignored "-Wunused-but-set-variable" 4520#pragma GCC diagnostic ignored "-Wstrict-prototypes" 4521#pragma GCC diagnostic pop 4522 4523int main(void) { 4524 return 0; 4525} 4526EOF 4527if compile_prog "-Werror" "" ; then 4528 pragma_diagnostic_available=yes 4529else 4530 werror=no 4531fi 4532 4533######################################## 4534# check if we have valgrind/valgrind.h 4535 4536valgrind_h=no 4537cat > $TMPC << EOF 4538#include <valgrind/valgrind.h> 4539int main(void) { 4540 return 0; 4541} 4542EOF 4543if compile_prog "" "" ; then 4544 valgrind_h=yes 4545fi 4546 4547######################################## 4548# check if environ is declared 4549 4550has_environ=no 4551cat > $TMPC << EOF 4552#include <unistd.h> 4553int main(void) { 4554 environ = 0; 4555 return 0; 4556} 4557EOF 4558if compile_prog "" "" ; then 4559 has_environ=yes 4560fi 4561 4562######################################## 4563# check if cpuid.h is usable. 4564 4565cpuid_h=no 4566cat > $TMPC << EOF 4567#include <cpuid.h> 4568int main(void) { 4569 unsigned a, b, c, d; 4570 int max = __get_cpuid_max(0, 0); 4571 4572 if (max >= 1) { 4573 __cpuid(1, a, b, c, d); 4574 } 4575 4576 if (max >= 7) { 4577 __cpuid_count(7, 0, a, b, c, d); 4578 } 4579 4580 return 0; 4581} 4582EOF 4583if compile_prog "" "" ; then 4584 cpuid_h=yes 4585fi 4586 4587######################################## 4588# check if __[u]int128_t is usable. 4589 4590int128=no 4591cat > $TMPC << EOF 4592#if defined(__clang_major__) && defined(__clang_minor__) 4593# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2)) 4594# error __int128_t does not work in CLANG before 3.2 4595# endif 4596#endif 4597__int128_t a; 4598__uint128_t b; 4599int main (void) { 4600 a = a + b; 4601 b = a * b; 4602 a = a * a; 4603 return 0; 4604} 4605EOF 4606if compile_prog "" "" ; then 4607 int128=yes 4608fi 4609 4610######################################### 4611# See if 128-bit atomic operations are supported. 4612 4613atomic128=no 4614if test "$int128" = "yes"; then 4615 cat > $TMPC << EOF 4616int main(void) 4617{ 4618 unsigned __int128 x = 0, y = 0; 4619 y = __atomic_load_16(&x, 0); 4620 __atomic_store_16(&x, y, 0); 4621 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 4622 return 0; 4623} 4624EOF 4625 if compile_prog "" "" ; then 4626 atomic128=yes 4627 fi 4628fi 4629 4630######################################### 4631# See if 64-bit atomic operations are supported. 4632# Note that without __atomic builtins, we can only 4633# assume atomic loads/stores max at pointer size. 4634 4635cat > $TMPC << EOF 4636#include <stdint.h> 4637int main(void) 4638{ 4639 uint64_t x = 0, y = 0; 4640#ifdef __ATOMIC_RELAXED 4641 y = __atomic_load_8(&x, 0); 4642 __atomic_store_8(&x, y, 0); 4643 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 4644 __atomic_exchange_8(&x, y, 0); 4645 __atomic_fetch_add_8(&x, y, 0); 4646#else 4647 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 4648 __sync_lock_test_and_set(&x, y); 4649 __sync_val_compare_and_swap(&x, y, 0); 4650 __sync_fetch_and_add(&x, y); 4651#endif 4652 return 0; 4653} 4654EOF 4655if compile_prog "" "" ; then 4656 atomic64=yes 4657fi 4658 4659######################################## 4660# check if getauxval is available. 4661 4662getauxval=no 4663cat > $TMPC << EOF 4664#include <sys/auxv.h> 4665int main(void) { 4666 return getauxval(AT_HWCAP) == 0; 4667} 4668EOF 4669if compile_prog "" "" ; then 4670 getauxval=yes 4671fi 4672 4673######################################## 4674# check if ccache is interfering with 4675# semantic analysis of macros 4676 4677unset CCACHE_CPP2 4678ccache_cpp2=no 4679cat > $TMPC << EOF 4680static const int Z = 1; 4681#define fn() ({ Z; }) 4682#define TAUT(X) ((X) == Z) 4683#define PAREN(X, Y) (X == Y) 4684#define ID(X) (X) 4685int main(int argc, char *argv[]) 4686{ 4687 int x = 0, y = 0; 4688 x = ID(x); 4689 x = fn(); 4690 fn(); 4691 if (PAREN(x, y)) return 0; 4692 if (TAUT(Z)) return 0; 4693 return 0; 4694} 4695EOF 4696 4697if ! compile_object "-Werror"; then 4698 ccache_cpp2=yes 4699fi 4700 4701################################################# 4702# clang does not support glibc + FORTIFY_SOURCE. 4703 4704if test "$fortify_source" != "no"; then 4705 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 4706 fortify_source="no"; 4707 elif test -n "$cxx" && 4708 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 4709 fortify_source="no"; 4710 else 4711 fortify_source="yes" 4712 fi 4713fi 4714 4715########################################## 4716# check if struct fsxattr is available via linux/fs.h 4717 4718have_fsxattr=no 4719cat > $TMPC << EOF 4720#include <linux/fs.h> 4721struct fsxattr foo; 4722int main(void) { 4723 return 0; 4724} 4725EOF 4726if compile_prog "" "" ; then 4727 have_fsxattr=yes 4728fi 4729 4730########################################## 4731# check if rtnetlink.h exists and is useful 4732have_rtnetlink=no 4733cat > $TMPC << EOF 4734#include <linux/rtnetlink.h> 4735int main(void) { 4736 return IFLA_PROTO_DOWN; 4737} 4738EOF 4739if compile_prog "" "" ; then 4740 have_rtnetlink=yes 4741fi 4742 4743########################################## 4744# check for usable AF_VSOCK environment 4745have_af_vsock=no 4746cat > $TMPC << EOF 4747#include <errno.h> 4748#include <sys/types.h> 4749#include <sys/socket.h> 4750#if !defined(AF_VSOCK) 4751# error missing AF_VSOCK flag 4752#endif 4753#include <linux/vm_sockets.h> 4754int main(void) { 4755 int sock, ret; 4756 struct sockaddr_vm svm; 4757 socklen_t len = sizeof(svm); 4758 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 4759 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 4760 if ((ret == -1) && (errno == ENOTCONN)) { 4761 return 0; 4762 } 4763 return -1; 4764} 4765EOF 4766if compile_prog "" "" ; then 4767 have_af_vsock=yes 4768fi 4769 4770################################################# 4771# Sparc implicitly links with --relax, which is 4772# incompatible with -r, so --no-relax should be 4773# given. It does no harm to give it on other 4774# platforms too. 4775 4776# Note: the prototype is needed since QEMU_CFLAGS 4777# contains -Wmissing-prototypes 4778cat > $TMPC << EOF 4779extern int foo(void); 4780int foo(void) { return 0; } 4781EOF 4782if ! compile_object ""; then 4783 error_exit "Failed to compile object file for LD_REL_FLAGS test" 4784fi 4785for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 4786 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 4787 LD_REL_FLAGS=$i 4788 break 4789 fi 4790done 4791if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 4792 feature_not_found "modules" "Cannot find how to build relocatable objects" 4793fi 4794 4795########################################## 4796# check for sysmacros.h 4797 4798have_sysmacros=no 4799cat > $TMPC << EOF 4800#include <sys/sysmacros.h> 4801int main(void) { 4802 return makedev(0, 0); 4803} 4804EOF 4805if compile_prog "" "" ; then 4806 have_sysmacros=yes 4807fi 4808 4809########################################## 4810# Veritas HyperScale block driver VxHS 4811# Check if libvxhs is installed 4812 4813if test "$vxhs" != "no" ; then 4814 cat > $TMPC <<EOF 4815#include <stdint.h> 4816#include <qnio/qnio_api.h> 4817 4818void *vxhs_callback; 4819 4820int main(void) { 4821 iio_init(QNIO_VERSION, vxhs_callback); 4822 return 0; 4823} 4824EOF 4825 vxhs_libs="-lvxhs -lssl" 4826 if compile_prog "" "$vxhs_libs" ; then 4827 vxhs=yes 4828 else 4829 if test "$vxhs" = "yes" ; then 4830 feature_not_found "vxhs block device" "Install libvxhs See github" 4831 fi 4832 vxhs=no 4833 fi 4834fi 4835 4836########################################## 4837# check for _Static_assert() 4838 4839have_static_assert=no 4840cat > $TMPC << EOF 4841_Static_assert(1, "success"); 4842int main(void) { 4843 return 0; 4844} 4845EOF 4846if compile_prog "" "" ; then 4847 have_static_assert=yes 4848fi 4849 4850########################################## 4851# End of CC checks 4852# After here, no more $cc or $ld runs 4853 4854if test "$gcov" = "yes" ; then 4855 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 4856 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 4857elif test "$fortify_source" = "yes" ; then 4858 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 4859elif test "$debug" = "no"; then 4860 CFLAGS="-O2 $CFLAGS" 4861fi 4862 4863########################################## 4864# Do we have libnfs 4865if test "$libnfs" != "no" ; then 4866 if $pkg_config --atleast-version=1.9.3 libnfs; then 4867 libnfs="yes" 4868 libnfs_libs=$($pkg_config --libs libnfs) 4869 else 4870 if test "$libnfs" = "yes" ; then 4871 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 4872 fi 4873 libnfs="no" 4874 fi 4875fi 4876 4877# Now we've finished running tests it's OK to add -Werror to the compiler flags 4878if test "$werror" = "yes"; then 4879 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 4880fi 4881 4882if test "$solaris" = "no" ; then 4883 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 4884 LDFLAGS="-Wl,--warn-common $LDFLAGS" 4885 fi 4886fi 4887 4888# test if pod2man has --utf8 option 4889if pod2man --help | grep -q utf8; then 4890 POD2MAN="pod2man --utf8" 4891else 4892 POD2MAN="pod2man" 4893fi 4894 4895# Use ASLR, no-SEH and DEP if available 4896if test "$mingw32" = "yes" ; then 4897 for flag in --dynamicbase --no-seh --nxcompat; do 4898 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then 4899 LDFLAGS="-Wl,$flag $LDFLAGS" 4900 fi 4901 done 4902fi 4903 4904qemu_confdir=$sysconfdir$confsuffix 4905qemu_moddir=$libdir$confsuffix 4906qemu_datadir=$datadir$confsuffix 4907qemu_localedir="$datadir/locale" 4908 4909tools="" 4910if test "$want_tools" = "yes" ; then 4911 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" 4912 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 4913 tools="qemu-nbd\$(EXESUF) $tools" 4914 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 4915 fi 4916fi 4917if test "$softmmu" = yes ; then 4918 if test "$virtfs" != no ; then 4919 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then 4920 virtfs=yes 4921 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 4922 else 4923 if test "$virtfs" = yes; then 4924 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel" 4925 fi 4926 virtfs=no 4927 fi 4928 fi 4929fi 4930 4931# Probe for guest agent support/options 4932 4933if [ "$guest_agent" != "no" ]; then 4934 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 4935 tools="qemu-ga $tools" 4936 guest_agent=yes 4937 elif [ "$guest_agent" != yes ]; then 4938 guest_agent=no 4939 else 4940 error_exit "Guest agent is not supported on this platform" 4941 fi 4942fi 4943 4944# Guest agent Window MSI package 4945 4946if test "$guest_agent" != yes; then 4947 if test "$guest_agent_msi" = yes; then 4948 error_exit "MSI guest agent package requires guest agent enabled" 4949 fi 4950 guest_agent_msi=no 4951elif test "$mingw32" != "yes"; then 4952 if test "$guest_agent_msi" = "yes"; then 4953 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 4954 fi 4955 guest_agent_msi=no 4956elif ! has wixl; then 4957 if test "$guest_agent_msi" = "yes"; then 4958 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 4959 fi 4960 guest_agent_msi=no 4961else 4962 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 4963 # disabled explicitly 4964 if test "$guest_agent_msi" != "no"; then 4965 guest_agent_msi=yes 4966 fi 4967fi 4968 4969if test "$guest_agent_msi" = "yes"; then 4970 if test "$guest_agent_with_vss" = "yes"; then 4971 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 4972 fi 4973 4974 if test "$QEMU_GA_MANUFACTURER" = ""; then 4975 QEMU_GA_MANUFACTURER=QEMU 4976 fi 4977 4978 if test "$QEMU_GA_DISTRO" = ""; then 4979 QEMU_GA_DISTRO=Linux 4980 fi 4981 4982 if test "$QEMU_GA_VERSION" = ""; then 4983 QEMU_GA_VERSION=$(cat $source_path/VERSION) 4984 fi 4985 4986 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 4987 4988 case "$cpu" in 4989 x86_64) 4990 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 4991 ;; 4992 i386) 4993 QEMU_GA_MSI_ARCH="-D Arch=32" 4994 ;; 4995 *) 4996 error_exit "CPU $cpu not supported for building installation package" 4997 ;; 4998 esac 4999fi 5000 5001# Mac OS X ships with a broken assembler 5002roms= 5003if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 5004 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 5005 "$softmmu" = yes ; then 5006 # Different host OS linkers have different ideas about the name of the ELF 5007 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd 5008 # variant; and Windows uses i386pe. 5009 for emu in elf_i386 elf_i386_fbsd i386pe; do 5010 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5011 ld_i386_emulation="$emu" 5012 roms="optionrom" 5013 break 5014 fi 5015 done 5016fi 5017if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 5018 roms="$roms spapr-rtas" 5019fi 5020 5021if test "$cpu" = "s390x" ; then 5022 roms="$roms s390-ccw" 5023fi 5024 5025# Probe for the need for relocating the user-only binary. 5026if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 5027 textseg_addr= 5028 case "$cpu" in 5029 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 5030 # ??? Rationale for choosing this address 5031 textseg_addr=0x60000000 5032 ;; 5033 mips) 5034 # A 256M aligned address, high in the address space, with enough 5035 # room for the code_gen_buffer above it before the stack. 5036 textseg_addr=0x60000000 5037 ;; 5038 esac 5039 if [ -n "$textseg_addr" ]; then 5040 cat > $TMPC <<EOF 5041 int main(void) { return 0; } 5042EOF 5043 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 5044 if ! compile_prog "" "$textseg_ldflags"; then 5045 # In case ld does not support -Ttext-segment, edit the default linker 5046 # script via sed to set the .text start addr. This is needed on FreeBSD 5047 # at least. 5048 if ! $ld --verbose >/dev/null 2>&1; then 5049 error_exit \ 5050 "We need to link the QEMU user mode binaries at a" \ 5051 "specific text address. Unfortunately your linker" \ 5052 "doesn't support either the -Ttext-segment option or" \ 5053 "printing the default linker script with --verbose." \ 5054 "If you don't want the user mode binaries, pass the" \ 5055 "--disable-user option to configure." 5056 fi 5057 5058 $ld --verbose | sed \ 5059 -e '1,/==================================================/d' \ 5060 -e '/==================================================/,$d' \ 5061 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 5062 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 5063 textseg_ldflags="-Wl,-T../config-host.ld" 5064 fi 5065 fi 5066fi 5067 5068echo_version() { 5069 if test "$1" = "yes" ; then 5070 echo "($2)" 5071 fi 5072} 5073 5074# prepend pixman and ftd flags after all config tests are done 5075QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 5076libs_softmmu="$pixman_libs $libs_softmmu" 5077 5078echo "Install prefix $prefix" 5079echo "BIOS directory $(eval echo $qemu_datadir)" 5080echo "binary directory $(eval echo $bindir)" 5081echo "library directory $(eval echo $libdir)" 5082echo "module directory $(eval echo $qemu_moddir)" 5083echo "libexec directory $(eval echo $libexecdir)" 5084echo "include directory $(eval echo $includedir)" 5085echo "config directory $(eval echo $sysconfdir)" 5086if test "$mingw32" = "no" ; then 5087echo "local state directory $(eval echo $local_statedir)" 5088echo "Manual directory $(eval echo $mandir)" 5089echo "ELF interp prefix $interp_prefix" 5090else 5091echo "local state directory queried at runtime" 5092echo "Windows SDK $win_sdk" 5093fi 5094echo "Source path $source_path" 5095echo "C compiler $cc" 5096echo "Host C compiler $host_cc" 5097echo "C++ compiler $cxx" 5098echo "Objective-C compiler $objcc" 5099echo "ARFLAGS $ARFLAGS" 5100echo "CFLAGS $CFLAGS" 5101echo "QEMU_CFLAGS $QEMU_CFLAGS" 5102echo "LDFLAGS $LDFLAGS" 5103echo "make $make" 5104echo "install $install" 5105echo "python $python" 5106if test "$slirp" = "yes" ; then 5107 echo "smbd $smbd" 5108fi 5109echo "module support $modules" 5110echo "host CPU $cpu" 5111echo "host big endian $bigendian" 5112echo "target list $target_list" 5113echo "tcg debug enabled $debug_tcg" 5114echo "gprof enabled $gprof" 5115echo "sparse enabled $sparse" 5116echo "strip binaries $strip_opt" 5117echo "profiler $profiler" 5118echo "static build $static" 5119if test "$darwin" = "yes" ; then 5120 echo "Cocoa support $cocoa" 5121fi 5122echo "pixman $pixman" 5123echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 5124echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 5125echo "GTK GL support $gtk_gl" 5126echo "VTE support $vte $(echo_version $vte $vteversion)" 5127echo "TLS priority $tls_priority" 5128echo "GNUTLS support $gnutls" 5129echo "GNUTLS rnd $gnutls_rnd" 5130echo "libgcrypt $gcrypt" 5131echo "libgcrypt kdf $gcrypt_kdf" 5132echo "nettle $nettle $(echo_version $nettle $nettle_version)" 5133echo "nettle kdf $nettle_kdf" 5134echo "libtasn1 $tasn1" 5135echo "curses support $curses" 5136echo "virgl support $virglrenderer" 5137echo "curl support $curl" 5138echo "mingw32 support $mingw32" 5139echo "Audio drivers $audio_drv_list" 5140echo "Block whitelist (rw) $block_drv_rw_whitelist" 5141echo "Block whitelist (ro) $block_drv_ro_whitelist" 5142echo "VirtFS support $virtfs" 5143echo "VNC support $vnc" 5144if test "$vnc" = "yes" ; then 5145 echo "VNC SASL support $vnc_sasl" 5146 echo "VNC JPEG support $vnc_jpeg" 5147 echo "VNC PNG support $vnc_png" 5148fi 5149if test -n "$sparc_cpu"; then 5150 echo "Target Sparc Arch $sparc_cpu" 5151fi 5152echo "xen support $xen" 5153if test "$xen" = "yes" ; then 5154 echo "xen ctrl version $xen_ctrl_version" 5155 echo "pv dom build $xen_pv_domain_build" 5156fi 5157echo "brlapi support $brlapi" 5158echo "bluez support $bluez" 5159echo "Documentation $docs" 5160echo "PIE $pie" 5161echo "vde support $vde" 5162echo "netmap support $netmap" 5163echo "Linux AIO support $linux_aio" 5164echo "ATTR/XATTR support $attr" 5165echo "Install blobs $blobs" 5166echo "KVM support $kvm" 5167echo "HAX support $hax" 5168echo "RDMA support $rdma" 5169echo "TCG interpreter $tcg_interpreter" 5170echo "fdt support $fdt" 5171echo "preadv support $preadv" 5172echo "fdatasync $fdatasync" 5173echo "madvise $madvise" 5174echo "posix_madvise $posix_madvise" 5175echo "libcap-ng support $cap_ng" 5176echo "vhost-net support $vhost_net" 5177echo "vhost-scsi support $vhost_scsi" 5178echo "vhost-vsock support $vhost_vsock" 5179echo "Trace backends $trace_backends" 5180if have_backend "simple"; then 5181echo "Trace output file $trace_file-<pid>" 5182fi 5183echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 5184echo "rbd support $rbd" 5185echo "xfsctl support $xfs" 5186echo "smartcard support $smartcard" 5187echo "libusb $libusb" 5188echo "usb net redir $usb_redir" 5189echo "OpenGL support $opengl" 5190echo "OpenGL dmabufs $opengl_dmabuf" 5191echo "libiscsi support $libiscsi" 5192echo "libnfs support $libnfs" 5193echo "build guest agent $guest_agent" 5194echo "QGA VSS support $guest_agent_with_vss" 5195echo "QGA w32 disk info $guest_agent_ntddscsi" 5196echo "QGA MSI support $guest_agent_msi" 5197echo "seccomp support $seccomp" 5198echo "coroutine backend $coroutine" 5199echo "coroutine pool $coroutine_pool" 5200echo "debug stack usage $debug_stack_usage" 5201echo "GlusterFS support $glusterfs" 5202echo "gcov $gcov_tool" 5203echo "gcov enabled $gcov" 5204echo "TPM support $tpm" 5205echo "libssh2 support $libssh2" 5206echo "TPM passthrough $tpm_passthrough" 5207echo "QOM debugging $qom_cast_debug" 5208echo "Live block migration $live_block_migration" 5209echo "lzo support $lzo" 5210echo "snappy support $snappy" 5211echo "bzip2 support $bzip2" 5212echo "NUMA host support $numa" 5213echo "tcmalloc support $tcmalloc" 5214echo "jemalloc support $jemalloc" 5215echo "avx2 optimization $avx2_opt" 5216echo "replication support $replication" 5217echo "VxHS block device $vxhs" 5218 5219if test "$sdl_too_old" = "yes"; then 5220echo "-> Your SDL version is too old - please upgrade to have SDL support" 5221fi 5222 5223if test "$supported_cpu" = "no"; then 5224 echo 5225 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 5226 echo 5227 echo "CPU host architecture $cpu support is not currently maintained." 5228 echo "The QEMU project intends to remove support for this host CPU in" 5229 echo "a future release if nobody volunteers to maintain it and to" 5230 echo "provide a build host for our continuous integration setup." 5231 echo "configure has succeeded and you can continue to build, but" 5232 echo "if you care about QEMU on this platform you should contact" 5233 echo "us upstream at qemu-devel@nongnu.org." 5234fi 5235 5236if test "$supported_os" = "no"; then 5237 echo 5238 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 5239 echo 5240 echo "Host OS $targetos support is not currently maintained." 5241 echo "The QEMU project intends to remove support for this host OS in" 5242 echo "a future release if nobody volunteers to maintain it and to" 5243 echo "provide a build host for our continuous integration setup." 5244 echo "configure has succeeded and you can continue to build, but" 5245 echo "if you care about QEMU on this platform you should contact" 5246 echo "us upstream at qemu-devel@nongnu.org." 5247fi 5248 5249config_host_mak="config-host.mak" 5250 5251echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 5252 5253echo "# Automatically generated by configure - do not modify" > $config_host_mak 5254echo >> $config_host_mak 5255 5256echo all: >> $config_host_mak 5257echo "prefix=$prefix" >> $config_host_mak 5258echo "bindir=$bindir" >> $config_host_mak 5259echo "libdir=$libdir" >> $config_host_mak 5260echo "libexecdir=$libexecdir" >> $config_host_mak 5261echo "includedir=$includedir" >> $config_host_mak 5262echo "mandir=$mandir" >> $config_host_mak 5263echo "sysconfdir=$sysconfdir" >> $config_host_mak 5264echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 5265echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 5266echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 5267echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 5268if test "$mingw32" = "no" ; then 5269 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 5270fi 5271echo "qemu_helperdir=$libexecdir" >> $config_host_mak 5272echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak 5273echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak 5274echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 5275echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 5276 5277echo "ARCH=$ARCH" >> $config_host_mak 5278 5279if test "$debug_tcg" = "yes" ; then 5280 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 5281fi 5282if test "$strip_opt" = "yes" ; then 5283 echo "STRIP=${strip}" >> $config_host_mak 5284fi 5285if test "$bigendian" = "yes" ; then 5286 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 5287fi 5288if test "$mingw32" = "yes" ; then 5289 echo "CONFIG_WIN32=y" >> $config_host_mak 5290 rc_version=$(cat $source_path/VERSION) 5291 version_major=${rc_version%%.*} 5292 rc_version=${rc_version#*.} 5293 version_minor=${rc_version%%.*} 5294 rc_version=${rc_version#*.} 5295 version_subminor=${rc_version%%.*} 5296 version_micro=0 5297 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5298 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5299 if test "$guest_agent_with_vss" = "yes" ; then 5300 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 5301 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 5302 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 5303 fi 5304 if test "$guest_agent_ntddscsi" = "yes" ; then 5305 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 5306 fi 5307 if test "$guest_agent_msi" = "yes"; then 5308 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 5309 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 5310 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 5311 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 5312 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 5313 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 5314 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 5315 fi 5316else 5317 echo "CONFIG_POSIX=y" >> $config_host_mak 5318fi 5319 5320if test "$linux" = "yes" ; then 5321 echo "CONFIG_LINUX=y" >> $config_host_mak 5322fi 5323 5324if test "$darwin" = "yes" ; then 5325 echo "CONFIG_DARWIN=y" >> $config_host_mak 5326fi 5327 5328if test "$aix" = "yes" ; then 5329 echo "CONFIG_AIX=y" >> $config_host_mak 5330fi 5331 5332if test "$solaris" = "yes" ; then 5333 echo "CONFIG_SOLARIS=y" >> $config_host_mak 5334 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak 5335 if test "$needs_libsunmath" = "yes" ; then 5336 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak 5337 fi 5338fi 5339if test "$haiku" = "yes" ; then 5340 echo "CONFIG_HAIKU=y" >> $config_host_mak 5341fi 5342if test "$static" = "yes" ; then 5343 echo "CONFIG_STATIC=y" >> $config_host_mak 5344fi 5345if test "$profiler" = "yes" ; then 5346 echo "CONFIG_PROFILER=y" >> $config_host_mak 5347fi 5348if test "$slirp" = "yes" ; then 5349 echo "CONFIG_SLIRP=y" >> $config_host_mak 5350 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 5351fi 5352if test "$vde" = "yes" ; then 5353 echo "CONFIG_VDE=y" >> $config_host_mak 5354fi 5355if test "$netmap" = "yes" ; then 5356 echo "CONFIG_NETMAP=y" >> $config_host_mak 5357fi 5358if test "$l2tpv3" = "yes" ; then 5359 echo "CONFIG_L2TPV3=y" >> $config_host_mak 5360fi 5361if test "$cap_ng" = "yes" ; then 5362 echo "CONFIG_LIBCAP=y" >> $config_host_mak 5363fi 5364echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 5365for drv in $audio_drv_list; do 5366 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 5367 echo "$def=y" >> $config_host_mak 5368done 5369if test "$audio_pt_int" = "yes" ; then 5370 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 5371fi 5372if test "$audio_win_int" = "yes" ; then 5373 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 5374fi 5375echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 5376echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 5377if test "$vnc" = "yes" ; then 5378 echo "CONFIG_VNC=y" >> $config_host_mak 5379fi 5380if test "$vnc_sasl" = "yes" ; then 5381 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 5382fi 5383if test "$vnc_jpeg" = "yes" ; then 5384 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 5385fi 5386if test "$vnc_png" = "yes" ; then 5387 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 5388fi 5389if test "$fnmatch" = "yes" ; then 5390 echo "CONFIG_FNMATCH=y" >> $config_host_mak 5391fi 5392if test "$xfs" = "yes" ; then 5393 echo "CONFIG_XFS=y" >> $config_host_mak 5394fi 5395qemu_version=$(head $source_path/VERSION) 5396echo "VERSION=$qemu_version" >>$config_host_mak 5397echo "PKGVERSION=$pkgversion" >>$config_host_mak 5398echo "SRC_PATH=$source_path" >> $config_host_mak 5399echo "TARGET_DIRS=$target_list" >> $config_host_mak 5400if [ "$docs" = "yes" ] ; then 5401 echo "BUILD_DOCS=yes" >> $config_host_mak 5402fi 5403if test "$modules" = "yes"; then 5404 # $shacmd can generate a hash started with digit, which the compiler doesn't 5405 # like as an symbol. So prefix it with an underscore 5406 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 5407 echo "CONFIG_MODULES=y" >> $config_host_mak 5408fi 5409if test "$sdl" = "yes" ; then 5410 echo "CONFIG_SDL=y" >> $config_host_mak 5411 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 5412 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 5413fi 5414if test "$cocoa" = "yes" ; then 5415 echo "CONFIG_COCOA=y" >> $config_host_mak 5416fi 5417if test "$curses" = "yes" ; then 5418 echo "CONFIG_CURSES=y" >> $config_host_mak 5419fi 5420if test "$pipe2" = "yes" ; then 5421 echo "CONFIG_PIPE2=y" >> $config_host_mak 5422fi 5423if test "$accept4" = "yes" ; then 5424 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 5425fi 5426if test "$splice" = "yes" ; then 5427 echo "CONFIG_SPLICE=y" >> $config_host_mak 5428fi 5429if test "$eventfd" = "yes" ; then 5430 echo "CONFIG_EVENTFD=y" >> $config_host_mak 5431fi 5432if test "$memfd" = "yes" ; then 5433 echo "CONFIG_MEMFD=y" >> $config_host_mak 5434fi 5435if test "$fallocate" = "yes" ; then 5436 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 5437fi 5438if test "$fallocate_punch_hole" = "yes" ; then 5439 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 5440fi 5441if test "$fallocate_zero_range" = "yes" ; then 5442 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 5443fi 5444if test "$posix_fallocate" = "yes" ; then 5445 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 5446fi 5447if test "$sync_file_range" = "yes" ; then 5448 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 5449fi 5450if test "$fiemap" = "yes" ; then 5451 echo "CONFIG_FIEMAP=y" >> $config_host_mak 5452fi 5453if test "$dup3" = "yes" ; then 5454 echo "CONFIG_DUP3=y" >> $config_host_mak 5455fi 5456if test "$ppoll" = "yes" ; then 5457 echo "CONFIG_PPOLL=y" >> $config_host_mak 5458fi 5459if test "$prctl_pr_set_timerslack" = "yes" ; then 5460 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 5461fi 5462if test "$epoll" = "yes" ; then 5463 echo "CONFIG_EPOLL=y" >> $config_host_mak 5464fi 5465if test "$epoll_create1" = "yes" ; then 5466 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 5467fi 5468if test "$sendfile" = "yes" ; then 5469 echo "CONFIG_SENDFILE=y" >> $config_host_mak 5470fi 5471if test "$timerfd" = "yes" ; then 5472 echo "CONFIG_TIMERFD=y" >> $config_host_mak 5473fi 5474if test "$setns" = "yes" ; then 5475 echo "CONFIG_SETNS=y" >> $config_host_mak 5476fi 5477if test "$clock_adjtime" = "yes" ; then 5478 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 5479fi 5480if test "$syncfs" = "yes" ; then 5481 echo "CONFIG_SYNCFS=y" >> $config_host_mak 5482fi 5483if test "$inotify" = "yes" ; then 5484 echo "CONFIG_INOTIFY=y" >> $config_host_mak 5485fi 5486if test "$inotify1" = "yes" ; then 5487 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 5488fi 5489if test "$byteswap_h" = "yes" ; then 5490 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 5491fi 5492if test "$bswap_h" = "yes" ; then 5493 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 5494fi 5495if test "$curl" = "yes" ; then 5496 echo "CONFIG_CURL=m" >> $config_host_mak 5497 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 5498 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 5499fi 5500if test "$brlapi" = "yes" ; then 5501 echo "CONFIG_BRLAPI=y" >> $config_host_mak 5502fi 5503if test "$bluez" = "yes" ; then 5504 echo "CONFIG_BLUEZ=y" >> $config_host_mak 5505 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 5506fi 5507if test "$glib_subprocess" = "yes" ; then 5508 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak 5509fi 5510if test "$gtk" = "yes" ; then 5511 echo "CONFIG_GTK=y" >> $config_host_mak 5512 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak 5513 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 5514 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 5515 if test "$gtk_gl" = "yes" ; then 5516 echo "CONFIG_GTK_GL=y" >> $config_host_mak 5517 fi 5518fi 5519echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 5520if test "$gnutls" = "yes" ; then 5521 echo "CONFIG_GNUTLS=y" >> $config_host_mak 5522fi 5523if test "$gnutls_rnd" = "yes" ; then 5524 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak 5525fi 5526if test "$gcrypt" = "yes" ; then 5527 echo "CONFIG_GCRYPT=y" >> $config_host_mak 5528 if test "$gcrypt_hmac" = "yes" ; then 5529 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 5530 fi 5531 if test "$gcrypt_kdf" = "yes" ; then 5532 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak 5533 fi 5534fi 5535if test "$nettle" = "yes" ; then 5536 echo "CONFIG_NETTLE=y" >> $config_host_mak 5537 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 5538 if test "$nettle_kdf" = "yes" ; then 5539 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak 5540 fi 5541fi 5542if test "$tasn1" = "yes" ; then 5543 echo "CONFIG_TASN1=y" >> $config_host_mak 5544fi 5545if test "$have_ifaddrs_h" = "yes" ; then 5546 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 5547fi 5548if test "$have_broken_size_max" = "yes" ; then 5549 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 5550fi 5551 5552# Work around a system header bug with some kernel/XFS header 5553# versions where they both try to define 'struct fsxattr': 5554# xfs headers will not try to redefine structs from linux headers 5555# if this macro is set. 5556if test "$have_fsxattr" = "yes" ; then 5557 echo "HAVE_FSXATTR=y" >> $config_host_mak 5558fi 5559if test "$vte" = "yes" ; then 5560 echo "CONFIG_VTE=y" >> $config_host_mak 5561 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 5562fi 5563if test "$virglrenderer" = "yes" ; then 5564 echo "CONFIG_VIRGL=y" >> $config_host_mak 5565 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 5566 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 5567fi 5568if test "$xen" = "yes" ; then 5569 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 5570 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 5571 if test "$xen_pv_domain_build" = "yes" ; then 5572 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 5573 fi 5574fi 5575if test "$linux_aio" = "yes" ; then 5576 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 5577fi 5578if test "$attr" = "yes" ; then 5579 echo "CONFIG_ATTR=y" >> $config_host_mak 5580fi 5581if test "$libattr" = "yes" ; then 5582 echo "CONFIG_LIBATTR=y" >> $config_host_mak 5583fi 5584if test "$virtfs" = "yes" ; then 5585 echo "CONFIG_VIRTFS=y" >> $config_host_mak 5586fi 5587if test "$vhost_scsi" = "yes" ; then 5588 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 5589fi 5590if test "$vhost_net" = "yes" ; then 5591 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 5592fi 5593if test "$vhost_vsock" = "yes" ; then 5594 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 5595fi 5596if test "$blobs" = "yes" ; then 5597 echo "INSTALL_BLOBS=yes" >> $config_host_mak 5598fi 5599if test "$iovec" = "yes" ; then 5600 echo "CONFIG_IOVEC=y" >> $config_host_mak 5601fi 5602if test "$preadv" = "yes" ; then 5603 echo "CONFIG_PREADV=y" >> $config_host_mak 5604fi 5605if test "$fdt" = "yes" ; then 5606 echo "CONFIG_FDT=y" >> $config_host_mak 5607fi 5608if test "$signalfd" = "yes" ; then 5609 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 5610fi 5611if test "$tcg_interpreter" = "yes" ; then 5612 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 5613fi 5614if test "$fdatasync" = "yes" ; then 5615 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 5616fi 5617if test "$madvise" = "yes" ; then 5618 echo "CONFIG_MADVISE=y" >> $config_host_mak 5619fi 5620if test "$posix_madvise" = "yes" ; then 5621 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 5622fi 5623 5624if test "$spice" = "yes" ; then 5625 echo "CONFIG_SPICE=y" >> $config_host_mak 5626fi 5627 5628if test "$smartcard" = "yes" ; then 5629 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 5630fi 5631 5632if test "$libusb" = "yes" ; then 5633 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 5634fi 5635 5636if test "$usb_redir" = "yes" ; then 5637 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 5638fi 5639 5640if test "$opengl" = "yes" ; then 5641 echo "CONFIG_OPENGL=y" >> $config_host_mak 5642 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 5643 if test "$opengl_dmabuf" = "yes" ; then 5644 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 5645 fi 5646fi 5647 5648if test "$avx2_opt" = "yes" ; then 5649 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 5650fi 5651 5652if test "$lzo" = "yes" ; then 5653 echo "CONFIG_LZO=y" >> $config_host_mak 5654fi 5655 5656if test "$snappy" = "yes" ; then 5657 echo "CONFIG_SNAPPY=y" >> $config_host_mak 5658fi 5659 5660if test "$bzip2" = "yes" ; then 5661 echo "CONFIG_BZIP2=y" >> $config_host_mak 5662 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 5663fi 5664 5665if test "$libiscsi" = "yes" ; then 5666 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 5667 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 5668 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 5669fi 5670 5671if test "$libnfs" = "yes" ; then 5672 echo "CONFIG_LIBNFS=m" >> $config_host_mak 5673 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 5674fi 5675 5676if test "$seccomp" = "yes"; then 5677 echo "CONFIG_SECCOMP=y" >> $config_host_mak 5678fi 5679 5680# XXX: suppress that 5681if [ "$bsd" = "yes" ] ; then 5682 echo "CONFIG_BSD=y" >> $config_host_mak 5683fi 5684 5685if test "$localtime_r" = "yes" ; then 5686 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 5687fi 5688if test "$qom_cast_debug" = "yes" ; then 5689 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 5690fi 5691if test "$rbd" = "yes" ; then 5692 echo "CONFIG_RBD=m" >> $config_host_mak 5693 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 5694 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 5695fi 5696 5697echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 5698if test "$coroutine_pool" = "yes" ; then 5699 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 5700else 5701 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 5702fi 5703 5704if test "$debug_stack_usage" = "yes" ; then 5705 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 5706fi 5707 5708if test "$open_by_handle_at" = "yes" ; then 5709 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 5710fi 5711 5712if test "$linux_magic_h" = "yes" ; then 5713 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 5714fi 5715 5716if test "$pragma_diagnostic_available" = "yes" ; then 5717 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 5718fi 5719 5720if test "$valgrind_h" = "yes" ; then 5721 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 5722fi 5723 5724if test "$has_environ" = "yes" ; then 5725 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 5726fi 5727 5728if test "$cpuid_h" = "yes" ; then 5729 echo "CONFIG_CPUID_H=y" >> $config_host_mak 5730fi 5731 5732if test "$int128" = "yes" ; then 5733 echo "CONFIG_INT128=y" >> $config_host_mak 5734fi 5735 5736if test "$atomic128" = "yes" ; then 5737 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 5738fi 5739 5740if test "$atomic64" = "yes" ; then 5741 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 5742fi 5743 5744if test "$getauxval" = "yes" ; then 5745 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 5746fi 5747 5748if test "$glusterfs" = "yes" ; then 5749 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 5750 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 5751 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 5752fi 5753 5754if test "$glusterfs_xlator_opt" = "yes" ; then 5755 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 5756fi 5757 5758if test "$glusterfs_discard" = "yes" ; then 5759 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 5760fi 5761 5762if test "$glusterfs_fallocate" = "yes" ; then 5763 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 5764fi 5765 5766if test "$glusterfs_zerofill" = "yes" ; then 5767 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 5768fi 5769 5770if test "$libssh2" = "yes" ; then 5771 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 5772 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 5773 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 5774fi 5775 5776if test "$live_block_migration" = "yes" ; then 5777 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 5778fi 5779 5780# USB host support 5781if test "$libusb" = "yes"; then 5782 echo "HOST_USB=libusb legacy" >> $config_host_mak 5783else 5784 echo "HOST_USB=stub" >> $config_host_mak 5785fi 5786 5787# TPM passthrough support? 5788if test "$tpm" = "yes"; then 5789 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 5790 if test "$tpm_passthrough" = "yes"; then 5791 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 5792 fi 5793fi 5794 5795echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 5796if have_backend "nop"; then 5797 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 5798fi 5799if have_backend "simple"; then 5800 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 5801 # Set the appropriate trace file. 5802 trace_file="\"$trace_file-\" FMT_pid" 5803fi 5804if have_backend "log"; then 5805 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 5806fi 5807if have_backend "ust"; then 5808 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 5809fi 5810if have_backend "dtrace"; then 5811 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 5812 if test "$trace_backend_stap" = "yes" ; then 5813 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 5814 fi 5815fi 5816if have_backend "ftrace"; then 5817 if test "$linux" = "yes" ; then 5818 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 5819 else 5820 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 5821 fi 5822fi 5823if have_backend "syslog"; then 5824 if test "$posix_syslog" = "yes" ; then 5825 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 5826 else 5827 feature_not_found "syslog(trace backend)" "syslog not available" 5828 fi 5829fi 5830echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 5831 5832if test "$rdma" = "yes" ; then 5833 echo "CONFIG_RDMA=y" >> $config_host_mak 5834fi 5835 5836if test "$have_rtnetlink" = "yes" ; then 5837 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 5838fi 5839 5840if test "$replication" = "yes" ; then 5841 echo "CONFIG_REPLICATION=y" >> $config_host_mak 5842fi 5843 5844if test "$have_af_vsock" = "yes" ; then 5845 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 5846fi 5847 5848if test "$have_sysmacros" = "yes" ; then 5849 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 5850fi 5851 5852if test "$have_static_assert" = "yes" ; then 5853 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 5854fi 5855 5856# Hold two types of flag: 5857# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 5858# a thread we have a handle to 5859# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 5860# platform 5861if test "$pthread_setname_np" = "yes" ; then 5862 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 5863 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 5864fi 5865 5866if test "$vxhs" = "yes" ; then 5867 echo "CONFIG_VXHS=y" >> $config_host_mak 5868 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 5869fi 5870 5871if test "$tcg_interpreter" = "yes"; then 5872 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 5873elif test "$ARCH" = "sparc64" ; then 5874 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 5875elif test "$ARCH" = "s390x" ; then 5876 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 5877elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 5878 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 5879elif test "$ARCH" = "ppc64" ; then 5880 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 5881else 5882 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 5883fi 5884QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES" 5885 5886echo "TOOLS=$tools" >> $config_host_mak 5887echo "ROMS=$roms" >> $config_host_mak 5888echo "MAKE=$make" >> $config_host_mak 5889echo "INSTALL=$install" >> $config_host_mak 5890echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 5891echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 5892echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 5893echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 5894echo "PYTHON=$python" >> $config_host_mak 5895echo "CC=$cc" >> $config_host_mak 5896if $iasl -h > /dev/null 2>&1; then 5897 echo "IASL=$iasl" >> $config_host_mak 5898fi 5899echo "CC_I386=$cc_i386" >> $config_host_mak 5900echo "HOST_CC=$host_cc" >> $config_host_mak 5901echo "CXX=$cxx" >> $config_host_mak 5902echo "OBJCC=$objcc" >> $config_host_mak 5903echo "AR=$ar" >> $config_host_mak 5904echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 5905echo "AS=$as" >> $config_host_mak 5906echo "CCAS=$ccas" >> $config_host_mak 5907echo "CPP=$cpp" >> $config_host_mak 5908echo "OBJCOPY=$objcopy" >> $config_host_mak 5909echo "LD=$ld" >> $config_host_mak 5910echo "NM=$nm" >> $config_host_mak 5911echo "WINDRES=$windres" >> $config_host_mak 5912echo "CFLAGS=$CFLAGS" >> $config_host_mak 5913echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 5914echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 5915echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 5916if test "$sparse" = "yes" ; then 5917 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 5918 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 5919 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 5920 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 5921 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 5922fi 5923if test "$cross_prefix" != ""; then 5924 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 5925else 5926 echo "AUTOCONF_HOST := " >> $config_host_mak 5927fi 5928echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 5929echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 5930echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 5931echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 5932echo "LIBS+=$LIBS" >> $config_host_mak 5933echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 5934echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 5935echo "EXESUF=$EXESUF" >> $config_host_mak 5936echo "DSOSUF=$DSOSUF" >> $config_host_mak 5937echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 5938echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 5939echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 5940echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 5941echo "POD2MAN=$POD2MAN" >> $config_host_mak 5942echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 5943if test "$gcov" = "yes" ; then 5944 echo "CONFIG_GCOV=y" >> $config_host_mak 5945 echo "GCOV=$gcov_tool" >> $config_host_mak 5946fi 5947 5948# use included Linux headers 5949if test "$linux" = "yes" ; then 5950 mkdir -p linux-headers 5951 case "$cpu" in 5952 i386|x86_64|x32) 5953 linux_arch=x86 5954 ;; 5955 ppcemb|ppc|ppc64) 5956 linux_arch=powerpc 5957 ;; 5958 s390x) 5959 linux_arch=s390 5960 ;; 5961 aarch64) 5962 linux_arch=arm64 5963 ;; 5964 mips64) 5965 linux_arch=mips 5966 ;; 5967 *) 5968 # For most CPUs the kernel architecture name and QEMU CPU name match. 5969 linux_arch="$cpu" 5970 ;; 5971 esac 5972 # For non-KVM architectures we will not have asm headers 5973 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 5974 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 5975 fi 5976fi 5977 5978for target in $target_list; do 5979target_dir="$target" 5980config_target_mak=$target_dir/config-target.mak 5981target_name=$(echo $target | cut -d '-' -f 1) 5982target_bigendian="no" 5983 5984case "$target_name" in 5985 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 5986 target_bigendian=yes 5987 ;; 5988esac 5989target_softmmu="no" 5990target_user_only="no" 5991target_linux_user="no" 5992target_bsd_user="no" 5993case "$target" in 5994 ${target_name}-softmmu) 5995 target_softmmu="yes" 5996 ;; 5997 ${target_name}-linux-user) 5998 if test "$linux" != "yes" ; then 5999 error_exit "Target '$target' is only available on a Linux host" 6000 fi 6001 target_user_only="yes" 6002 target_linux_user="yes" 6003 ;; 6004 ${target_name}-bsd-user) 6005 if test "$bsd" != "yes" ; then 6006 error_exit "Target '$target' is only available on a BSD host" 6007 fi 6008 target_user_only="yes" 6009 target_bsd_user="yes" 6010 ;; 6011 *) 6012 error_exit "Target '$target' not recognised" 6013 exit 1 6014 ;; 6015esac 6016 6017mkdir -p $target_dir 6018echo "# Automatically generated by configure - do not modify" > $config_target_mak 6019 6020bflt="no" 6021mttcg="no" 6022interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 6023gdb_xml_files="" 6024 6025TARGET_ARCH="$target_name" 6026TARGET_BASE_ARCH="" 6027TARGET_ABI_DIR="" 6028 6029case "$target_name" in 6030 i386) 6031 gdb_xml_files="i386-32bit-core.xml" 6032 ;; 6033 x86_64) 6034 TARGET_BASE_ARCH=i386 6035 gdb_xml_files="i386-64bit-core.xml" 6036 ;; 6037 alpha) 6038 mttcg="yes" 6039 ;; 6040 arm|armeb) 6041 TARGET_ARCH=arm 6042 bflt="yes" 6043 mttcg="yes" 6044 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 6045 ;; 6046 aarch64) 6047 TARGET_BASE_ARCH=arm 6048 bflt="yes" 6049 mttcg="yes" 6050 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 6051 ;; 6052 cris) 6053 ;; 6054 hppa) 6055 ;; 6056 lm32) 6057 ;; 6058 m68k) 6059 bflt="yes" 6060 gdb_xml_files="cf-core.xml cf-fp.xml" 6061 ;; 6062 microblaze|microblazeel) 6063 TARGET_ARCH=microblaze 6064 bflt="yes" 6065 ;; 6066 mips|mipsel) 6067 TARGET_ARCH=mips 6068 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 6069 ;; 6070 mipsn32|mipsn32el) 6071 TARGET_ARCH=mips64 6072 TARGET_BASE_ARCH=mips 6073 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 6074 echo "TARGET_ABI32=y" >> $config_target_mak 6075 ;; 6076 mips64|mips64el) 6077 TARGET_ARCH=mips64 6078 TARGET_BASE_ARCH=mips 6079 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 6080 ;; 6081 moxie) 6082 ;; 6083 nios2) 6084 ;; 6085 or1k) 6086 TARGET_ARCH=openrisc 6087 TARGET_BASE_ARCH=openrisc 6088 ;; 6089 ppc) 6090 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 6091 ;; 6092 ppcemb) 6093 TARGET_BASE_ARCH=ppc 6094 TARGET_ABI_DIR=ppc 6095 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 6096 ;; 6097 ppc64) 6098 TARGET_BASE_ARCH=ppc 6099 TARGET_ABI_DIR=ppc 6100 mttcg=yes 6101 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6102 ;; 6103 ppc64le) 6104 TARGET_ARCH=ppc64 6105 TARGET_BASE_ARCH=ppc 6106 TARGET_ABI_DIR=ppc 6107 mttcg=yes 6108 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6109 ;; 6110 ppc64abi32) 6111 TARGET_ARCH=ppc64 6112 TARGET_BASE_ARCH=ppc 6113 TARGET_ABI_DIR=ppc 6114 echo "TARGET_ABI32=y" >> $config_target_mak 6115 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6116 ;; 6117 sh4|sh4eb) 6118 TARGET_ARCH=sh4 6119 bflt="yes" 6120 ;; 6121 sparc) 6122 ;; 6123 sparc64) 6124 TARGET_BASE_ARCH=sparc 6125 ;; 6126 sparc32plus) 6127 TARGET_ARCH=sparc64 6128 TARGET_BASE_ARCH=sparc 6129 TARGET_ABI_DIR=sparc 6130 echo "TARGET_ABI32=y" >> $config_target_mak 6131 ;; 6132 s390x) 6133 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml" 6134 ;; 6135 tilegx) 6136 ;; 6137 tricore) 6138 ;; 6139 unicore32) 6140 ;; 6141 xtensa|xtensaeb) 6142 TARGET_ARCH=xtensa 6143 ;; 6144 *) 6145 error_exit "Unsupported target CPU" 6146 ;; 6147esac 6148# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 6149if [ "$TARGET_BASE_ARCH" = "" ]; then 6150 TARGET_BASE_ARCH=$TARGET_ARCH 6151fi 6152 6153symlink "$source_path/Makefile.target" "$target_dir/Makefile" 6154 6155upper() { 6156 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 6157} 6158 6159target_arch_name="$(upper $TARGET_ARCH)" 6160echo "TARGET_$target_arch_name=y" >> $config_target_mak 6161echo "TARGET_NAME=$target_name" >> $config_target_mak 6162echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 6163if [ "$TARGET_ABI_DIR" = "" ]; then 6164 TARGET_ABI_DIR=$TARGET_ARCH 6165fi 6166echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 6167if [ "$HOST_VARIANT_DIR" != "" ]; then 6168 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 6169fi 6170case "$target_name" in 6171 i386|x86_64) 6172 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then 6173 echo "CONFIG_XEN=y" >> $config_target_mak 6174 if test "$xen_pci_passthrough" = yes; then 6175 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 6176 fi 6177 fi 6178 ;; 6179 *) 6180esac 6181case "$target_name" in 6182 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips) 6183 # Make sure the target and host cpus are compatible 6184 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \ 6185 \( "$target_name" = "$cpu" -o \ 6186 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \ 6187 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \ 6188 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \ 6189 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \ 6190 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \ 6191 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \ 6192 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \ 6193 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \ 6194 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then 6195 echo "CONFIG_KVM=y" >> $config_target_mak 6196 if test "$vhost_net" = "yes" ; then 6197 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 6198 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak 6199 fi 6200 fi 6201esac 6202if test "$hax" = "yes" ; then 6203 if test "$target_softmmu" = "yes" ; then 6204 case "$target_name" in 6205 i386|x86_64) 6206 echo "CONFIG_HAX=y" >> $config_target_mak 6207 ;; 6208 esac 6209 fi 6210fi 6211if test "$target_bigendian" = "yes" ; then 6212 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 6213fi 6214if test "$target_softmmu" = "yes" ; then 6215 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 6216 if test "$mttcg" = "yes" ; then 6217 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 6218 fi 6219fi 6220if test "$target_user_only" = "yes" ; then 6221 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 6222 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 6223fi 6224if test "$target_linux_user" = "yes" ; then 6225 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 6226fi 6227list="" 6228if test ! -z "$gdb_xml_files" ; then 6229 for x in $gdb_xml_files; do 6230 list="$list $source_path/gdb-xml/$x" 6231 done 6232 echo "TARGET_XML_FILES=$list" >> $config_target_mak 6233fi 6234 6235if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 6236 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 6237fi 6238if test "$target_bsd_user" = "yes" ; then 6239 echo "CONFIG_BSD_USER=y" >> $config_target_mak 6240fi 6241 6242# generate QEMU_CFLAGS/LDFLAGS for targets 6243 6244cflags="" 6245ldflags="" 6246 6247disas_config() { 6248 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 6249 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 6250} 6251 6252for i in $ARCH $TARGET_BASE_ARCH ; do 6253 case "$i" in 6254 alpha) 6255 disas_config "ALPHA" 6256 ;; 6257 aarch64) 6258 if test -n "${cxx}"; then 6259 disas_config "ARM_A64" 6260 fi 6261 ;; 6262 arm) 6263 disas_config "ARM" 6264 if test -n "${cxx}"; then 6265 disas_config "ARM_A64" 6266 fi 6267 ;; 6268 cris) 6269 disas_config "CRIS" 6270 ;; 6271 hppa) 6272 disas_config "HPPA" 6273 ;; 6274 i386|x86_64|x32) 6275 disas_config "I386" 6276 ;; 6277 ia64*) 6278 disas_config "IA64" 6279 ;; 6280 lm32) 6281 disas_config "LM32" 6282 ;; 6283 m68k) 6284 disas_config "M68K" 6285 ;; 6286 microblaze*) 6287 disas_config "MICROBLAZE" 6288 ;; 6289 mips*) 6290 disas_config "MIPS" 6291 ;; 6292 moxie*) 6293 disas_config "MOXIE" 6294 ;; 6295 nios2) 6296 disas_config "NIOS2" 6297 ;; 6298 or1k) 6299 disas_config "OPENRISC" 6300 ;; 6301 ppc*) 6302 disas_config "PPC" 6303 ;; 6304 s390*) 6305 disas_config "S390" 6306 ;; 6307 sh4) 6308 disas_config "SH4" 6309 ;; 6310 sparc*) 6311 disas_config "SPARC" 6312 ;; 6313 xtensa*) 6314 disas_config "XTENSA" 6315 ;; 6316 esac 6317done 6318if test "$tcg_interpreter" = "yes" ; then 6319 disas_config "TCI" 6320fi 6321 6322case "$ARCH" in 6323alpha) 6324 # Ensure there's only a single GP 6325 cflags="-msmall-data $cflags" 6326;; 6327esac 6328 6329if test "$gprof" = "yes" ; then 6330 echo "TARGET_GPROF=yes" >> $config_target_mak 6331 if test "$target_linux_user" = "yes" ; then 6332 cflags="-p $cflags" 6333 ldflags="-p $ldflags" 6334 fi 6335 if test "$target_softmmu" = "yes" ; then 6336 ldflags="-p $ldflags" 6337 echo "GPROF_CFLAGS=-p" >> $config_target_mak 6338 fi 6339fi 6340 6341if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 6342 ldflags="$ldflags $textseg_ldflags" 6343fi 6344 6345echo "LDFLAGS+=$ldflags" >> $config_target_mak 6346echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 6347 6348done # for target in $targets 6349 6350if [ "$pixman" = "internal" ]; then 6351 echo "config-host.h: subdir-pixman" >> $config_host_mak 6352fi 6353 6354if [ "$dtc_internal" = "yes" ]; then 6355 echo "config-host.h: subdir-dtc" >> $config_host_mak 6356fi 6357 6358if test "$numa" = "yes"; then 6359 echo "CONFIG_NUMA=y" >> $config_host_mak 6360fi 6361 6362if test "$ccache_cpp2" = "yes"; then 6363 echo "export CCACHE_CPP2=y" >> $config_host_mak 6364fi 6365 6366# build tree in object directory in case the source is not in the current directory 6367DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests" 6368DIRS="$DIRS docs fsdev" 6369DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 6370DIRS="$DIRS roms/seabios roms/vgabios" 6371DIRS="$DIRS qapi-generated" 6372FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 6373FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 6374FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 6375FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 6376FILES="$FILES pc-bios/spapr-rtas/Makefile" 6377FILES="$FILES pc-bios/s390-ccw/Makefile" 6378FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 6379FILES="$FILES pc-bios/qemu-icon.bmp" 6380for bios_file in \ 6381 $source_path/pc-bios/*.bin \ 6382 $source_path/pc-bios/*.lid \ 6383 $source_path/pc-bios/*.aml \ 6384 $source_path/pc-bios/*.rom \ 6385 $source_path/pc-bios/*.dtb \ 6386 $source_path/pc-bios/*.img \ 6387 $source_path/pc-bios/openbios-* \ 6388 $source_path/pc-bios/u-boot.* \ 6389 $source_path/pc-bios/palcode-* 6390do 6391 FILES="$FILES pc-bios/$(basename $bios_file)" 6392done 6393for test_file in $(find $source_path/tests/acpi-test-data -type f) 6394do 6395 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')" 6396done 6397mkdir -p $DIRS 6398for f in $FILES ; do 6399 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 6400 symlink "$source_path/$f" "$f" 6401 fi 6402done 6403 6404# temporary config to build submodules 6405for rom in seabios vgabios ; do 6406 config_mak=roms/$rom/config.mak 6407 echo "# Automatically generated by configure - do not modify" > $config_mak 6408 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 6409 echo "AS=$as" >> $config_mak 6410 echo "CCAS=$ccas" >> $config_mak 6411 echo "CC=$cc" >> $config_mak 6412 echo "BCC=bcc" >> $config_mak 6413 echo "CPP=$cpp" >> $config_mak 6414 echo "OBJCOPY=objcopy" >> $config_mak 6415 echo "IASL=$iasl" >> $config_mak 6416 echo "LD=$ld" >> $config_mak 6417done 6418 6419# set up tests data directory 6420if [ ! -e tests/data ]; then 6421 symlink "$source_path/tests/data" tests/data 6422fi 6423 6424# set up qemu-iotests in this build directory 6425iotests_common_env="tests/qemu-iotests/common.env" 6426iotests_check="tests/qemu-iotests/check" 6427 6428echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 6429echo >> "$iotests_common_env" 6430echo "export PYTHON='$python'" >> "$iotests_common_env" 6431 6432if [ ! -e "$iotests_check" ]; then 6433 symlink "$source_path/$iotests_check" "$iotests_check" 6434fi 6435 6436# Save the configure command line for later reuse. 6437cat <<EOD >config.status 6438#!/bin/sh 6439# Generated by configure. 6440# Run this file to recreate the current configuration. 6441# Compiler output produced by configure, useful for debugging 6442# configure, is in config.log if it exists. 6443EOD 6444printf "exec" >>config.status 6445printf " '%s'" "$0" "$@" >>config.status 6446echo ' "$@"' >>config.status 6447chmod +x config.status 6448 6449rm -r "$TMPDIR1" 6450