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