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