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