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