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