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