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