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