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