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