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