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