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 fi 4512fi 4513if test "$softmmu" = yes ; then 4514 if test "$virtfs" != no ; then 4515 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then 4516 virtfs=yes 4517 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 4518 else 4519 if test "$virtfs" = yes; then 4520 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel" 4521 fi 4522 virtfs=no 4523 fi 4524 fi 4525fi 4526 4527# Probe for guest agent support/options 4528 4529if [ "$guest_agent" != "no" ]; then 4530 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 4531 tools="qemu-ga $tools" 4532 guest_agent=yes 4533 elif [ "$guest_agent" != yes ]; then 4534 guest_agent=no 4535 else 4536 error_exit "Guest agent is not supported on this platform" 4537 fi 4538fi 4539 4540# Guest agent Window MSI package 4541 4542if test "$guest_agent" != yes; then 4543 if test "$guest_agent_msi" = yes; then 4544 error_exit "MSI guest agent package requires guest agent enabled" 4545 fi 4546 guest_agent_msi=no 4547elif test "$mingw32" != "yes"; then 4548 if test "$guest_agent_msi" = "yes"; then 4549 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 4550 fi 4551 guest_agent_msi=no 4552elif ! has wixl; then 4553 if test "$guest_agent_msi" = "yes"; then 4554 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 4555 fi 4556 guest_agent_msi=no 4557else 4558 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 4559 # disabled explicitly 4560 if test "$guest_agent_msi" != "no"; then 4561 guest_agent_msi=yes 4562 fi 4563fi 4564 4565if test "$guest_agent_msi" = "yes"; then 4566 if test "$guest_agent_with_vss" = "yes"; then 4567 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 4568 fi 4569 4570 if test "$QEMU_GA_MANUFACTURER" = ""; then 4571 QEMU_GA_MANUFACTURER=QEMU 4572 fi 4573 4574 if test "$QEMU_GA_DISTRO" = ""; then 4575 QEMU_GA_DISTRO=Linux 4576 fi 4577 4578 if test "$QEMU_GA_VERSION" = ""; then 4579 QEMU_GA_VERSION=`cat $source_path/VERSION` 4580 fi 4581 4582 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin" 4583 4584 case "$cpu" in 4585 x86_64) 4586 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 4587 ;; 4588 i386) 4589 QEMU_GA_MSI_ARCH="-D Arch=32" 4590 ;; 4591 *) 4592 error_exit "CPU $cpu not supported for building installation package" 4593 ;; 4594 esac 4595fi 4596 4597# Mac OS X ships with a broken assembler 4598roms= 4599if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 4600 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 4601 "$softmmu" = yes ; then 4602 roms="optionrom" 4603fi 4604if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 4605 roms="$roms spapr-rtas" 4606fi 4607 4608if test "$cpu" = "s390x" ; then 4609 roms="$roms s390-ccw" 4610fi 4611 4612# Probe for the need for relocating the user-only binary. 4613if test "$pie" = "no" ; then 4614 textseg_addr= 4615 case "$cpu" in 4616 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 4617 # ??? Rationale for choosing this address 4618 textseg_addr=0x60000000 4619 ;; 4620 mips) 4621 # A 256M aligned address, high in the address space, with enough 4622 # room for the code_gen_buffer above it before the stack. 4623 textseg_addr=0x60000000 4624 ;; 4625 esac 4626 if [ -n "$textseg_addr" ]; then 4627 cat > $TMPC <<EOF 4628 int main(void) { return 0; } 4629EOF 4630 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 4631 if ! compile_prog "" "$textseg_ldflags"; then 4632 # In case ld does not support -Ttext-segment, edit the default linker 4633 # script via sed to set the .text start addr. This is needed on FreeBSD 4634 # at least. 4635 $ld --verbose | sed \ 4636 -e '1,/==================================================/d' \ 4637 -e '/==================================================/,$d' \ 4638 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 4639 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 4640 textseg_ldflags="-Wl,-T../config-host.ld" 4641 fi 4642 fi 4643fi 4644 4645# prepend pixman and ftd flags after all config tests are done 4646QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 4647libs_softmmu="$pixman_libs $libs_softmmu" 4648 4649echo "Install prefix $prefix" 4650echo "BIOS directory `eval echo $qemu_datadir`" 4651echo "binary directory `eval echo $bindir`" 4652echo "library directory `eval echo $libdir`" 4653echo "module directory `eval echo $qemu_moddir`" 4654echo "libexec directory `eval echo $libexecdir`" 4655echo "include directory `eval echo $includedir`" 4656echo "config directory `eval echo $sysconfdir`" 4657if test "$mingw32" = "no" ; then 4658echo "local state directory `eval echo $local_statedir`" 4659echo "Manual directory `eval echo $mandir`" 4660echo "ELF interp prefix $interp_prefix" 4661else 4662echo "local state directory queried at runtime" 4663echo "Windows SDK $win_sdk" 4664fi 4665echo "Source path $source_path" 4666echo "C compiler $cc" 4667echo "Host C compiler $host_cc" 4668echo "C++ compiler $cxx" 4669echo "Objective-C compiler $objcc" 4670echo "ARFLAGS $ARFLAGS" 4671echo "CFLAGS $CFLAGS" 4672echo "QEMU_CFLAGS $QEMU_CFLAGS" 4673echo "LDFLAGS $LDFLAGS" 4674echo "make $make" 4675echo "install $install" 4676echo "python $python" 4677if test "$slirp" = "yes" ; then 4678 echo "smbd $smbd" 4679fi 4680echo "module support $modules" 4681echo "host CPU $cpu" 4682echo "host big endian $bigendian" 4683echo "target list $target_list" 4684echo "tcg debug enabled $debug_tcg" 4685echo "gprof enabled $gprof" 4686echo "sparse enabled $sparse" 4687echo "strip binaries $strip_opt" 4688echo "profiler $profiler" 4689echo "static build $static" 4690if test "$darwin" = "yes" ; then 4691 echo "Cocoa support $cocoa" 4692fi 4693echo "pixman $pixman" 4694echo "SDL support $sdl" 4695echo "GTK support $gtk" 4696echo "GTK GL support $gtk_gl" 4697echo "GNUTLS support $gnutls" 4698echo "GNUTLS hash $gnutls_hash" 4699echo "libgcrypt $gcrypt" 4700echo "nettle $nettle ${nettle+($nettle_version)}" 4701echo "libtasn1 $tasn1" 4702echo "VTE support $vte" 4703echo "curses support $curses" 4704echo "virgl support $virglrenderer" 4705echo "curl support $curl" 4706echo "mingw32 support $mingw32" 4707echo "Audio drivers $audio_drv_list" 4708echo "Block whitelist (rw) $block_drv_rw_whitelist" 4709echo "Block whitelist (ro) $block_drv_ro_whitelist" 4710echo "VirtFS support $virtfs" 4711echo "VNC support $vnc" 4712if test "$vnc" = "yes" ; then 4713 echo "VNC SASL support $vnc_sasl" 4714 echo "VNC JPEG support $vnc_jpeg" 4715 echo "VNC PNG support $vnc_png" 4716fi 4717if test -n "$sparc_cpu"; then 4718 echo "Target Sparc Arch $sparc_cpu" 4719fi 4720echo "xen support $xen" 4721if test "$xen" = "yes" ; then 4722 echo "xen ctrl version $xen_ctrl_version" 4723fi 4724echo "brlapi support $brlapi" 4725echo "bluez support $bluez" 4726echo "Documentation $docs" 4727echo "PIE $pie" 4728echo "vde support $vde" 4729echo "netmap support $netmap" 4730echo "Linux AIO support $linux_aio" 4731echo "ATTR/XATTR support $attr" 4732echo "Install blobs $blobs" 4733echo "KVM support $kvm" 4734echo "RDMA support $rdma" 4735echo "TCG interpreter $tcg_interpreter" 4736echo "fdt support $fdt" 4737echo "preadv support $preadv" 4738echo "fdatasync $fdatasync" 4739echo "madvise $madvise" 4740echo "posix_madvise $posix_madvise" 4741echo "sigev_thread_id $sigev_thread_id" 4742echo "uuid support $uuid" 4743echo "libcap-ng support $cap_ng" 4744echo "vhost-net support $vhost_net" 4745echo "vhost-scsi support $vhost_scsi" 4746echo "Trace backends $trace_backends" 4747if test "$trace_backend" = "simple"; then 4748echo "Trace output file $trace_file-<pid>" 4749fi 4750if test "$spice" = "yes"; then 4751echo "spice support $spice ($spice_protocol_version/$spice_server_version)" 4752else 4753echo "spice support $spice" 4754fi 4755echo "rbd support $rbd" 4756echo "xfsctl support $xfs" 4757echo "smartcard support $smartcard" 4758echo "libusb $libusb" 4759echo "usb net redir $usb_redir" 4760echo "OpenGL support $opengl" 4761echo "libiscsi support $libiscsi" 4762echo "libnfs support $libnfs" 4763echo "build guest agent $guest_agent" 4764echo "QGA VSS support $guest_agent_with_vss" 4765echo "QGA w32 disk info $guest_agent_ntddscsi" 4766echo "QGA MSI support $guest_agent_msi" 4767echo "seccomp support $seccomp" 4768echo "coroutine backend $coroutine" 4769echo "coroutine pool $coroutine_pool" 4770echo "GlusterFS support $glusterfs" 4771echo "Archipelago support $archipelago" 4772echo "gcov $gcov_tool" 4773echo "gcov enabled $gcov" 4774echo "TPM support $tpm" 4775echo "libssh2 support $libssh2" 4776echo "TPM passthrough $tpm_passthrough" 4777echo "QOM debugging $qom_cast_debug" 4778echo "vhdx $vhdx" 4779echo "lzo support $lzo" 4780echo "snappy support $snappy" 4781echo "bzip2 support $bzip2" 4782echo "NUMA host support $numa" 4783echo "tcmalloc support $tcmalloc" 4784echo "jemalloc support $jemalloc" 4785 4786if test "$sdl_too_old" = "yes"; then 4787echo "-> Your SDL version is too old - please upgrade to have SDL support" 4788fi 4789 4790config_host_mak="config-host.mak" 4791 4792echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 4793 4794echo "# Automatically generated by configure - do not modify" > $config_host_mak 4795echo >> $config_host_mak 4796 4797echo all: >> $config_host_mak 4798echo "prefix=$prefix" >> $config_host_mak 4799echo "bindir=$bindir" >> $config_host_mak 4800echo "libdir=$libdir" >> $config_host_mak 4801echo "libexecdir=$libexecdir" >> $config_host_mak 4802echo "includedir=$includedir" >> $config_host_mak 4803echo "mandir=$mandir" >> $config_host_mak 4804echo "sysconfdir=$sysconfdir" >> $config_host_mak 4805echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 4806echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 4807echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 4808echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 4809if test "$mingw32" = "no" ; then 4810 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 4811fi 4812echo "qemu_helperdir=$libexecdir" >> $config_host_mak 4813echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak 4814echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak 4815echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 4816echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 4817 4818echo "ARCH=$ARCH" >> $config_host_mak 4819 4820if test "$debug_tcg" = "yes" ; then 4821 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 4822fi 4823if test "$strip_opt" = "yes" ; then 4824 echo "STRIP=${strip}" >> $config_host_mak 4825fi 4826if test "$bigendian" = "yes" ; then 4827 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 4828fi 4829if test "$mingw32" = "yes" ; then 4830 echo "CONFIG_WIN32=y" >> $config_host_mak 4831 rc_version=`cat $source_path/VERSION` 4832 version_major=${rc_version%%.*} 4833 rc_version=${rc_version#*.} 4834 version_minor=${rc_version%%.*} 4835 rc_version=${rc_version#*.} 4836 version_subminor=${rc_version%%.*} 4837 version_micro=0 4838 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 4839 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 4840 if test "$guest_agent_with_vss" = "yes" ; then 4841 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 4842 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 4843 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 4844 fi 4845 if test "$guest_agent_ntddscsi" = "yes" ; then 4846 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 4847 fi 4848 if test "$guest_agent_msi" = "yes"; then 4849 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 4850 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 4851 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 4852 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 4853 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 4854 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 4855 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 4856 fi 4857else 4858 echo "CONFIG_POSIX=y" >> $config_host_mak 4859fi 4860 4861if test "$linux" = "yes" ; then 4862 echo "CONFIG_LINUX=y" >> $config_host_mak 4863fi 4864 4865if test "$darwin" = "yes" ; then 4866 echo "CONFIG_DARWIN=y" >> $config_host_mak 4867fi 4868 4869if test "$aix" = "yes" ; then 4870 echo "CONFIG_AIX=y" >> $config_host_mak 4871fi 4872 4873if test "$solaris" = "yes" ; then 4874 echo "CONFIG_SOLARIS=y" >> $config_host_mak 4875 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak 4876 if test "$needs_libsunmath" = "yes" ; then 4877 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak 4878 fi 4879fi 4880if test "$haiku" = "yes" ; then 4881 echo "CONFIG_HAIKU=y" >> $config_host_mak 4882fi 4883if test "$static" = "yes" ; then 4884 echo "CONFIG_STATIC=y" >> $config_host_mak 4885fi 4886if test "$profiler" = "yes" ; then 4887 echo "CONFIG_PROFILER=y" >> $config_host_mak 4888fi 4889if test "$slirp" = "yes" ; then 4890 echo "CONFIG_SLIRP=y" >> $config_host_mak 4891 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 4892fi 4893if test "$vde" = "yes" ; then 4894 echo "CONFIG_VDE=y" >> $config_host_mak 4895fi 4896if test "$netmap" = "yes" ; then 4897 echo "CONFIG_NETMAP=y" >> $config_host_mak 4898fi 4899if test "$l2tpv3" = "yes" ; then 4900 echo "CONFIG_L2TPV3=y" >> $config_host_mak 4901fi 4902if test "$cap_ng" = "yes" ; then 4903 echo "CONFIG_LIBCAP=y" >> $config_host_mak 4904fi 4905echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 4906for drv in $audio_drv_list; do 4907 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'` 4908 echo "$def=y" >> $config_host_mak 4909done 4910if test "$audio_pt_int" = "yes" ; then 4911 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 4912fi 4913if test "$audio_win_int" = "yes" ; then 4914 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 4915fi 4916echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 4917echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 4918if test "$vnc" = "yes" ; then 4919 echo "CONFIG_VNC=y" >> $config_host_mak 4920fi 4921if test "$vnc_sasl" = "yes" ; then 4922 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 4923fi 4924if test "$vnc_jpeg" = "yes" ; then 4925 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 4926fi 4927if test "$vnc_png" = "yes" ; then 4928 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 4929fi 4930if test "$fnmatch" = "yes" ; then 4931 echo "CONFIG_FNMATCH=y" >> $config_host_mak 4932fi 4933if test "$uuid" = "yes" ; then 4934 echo "CONFIG_UUID=y" >> $config_host_mak 4935fi 4936if test "$xfs" = "yes" ; then 4937 echo "CONFIG_XFS=y" >> $config_host_mak 4938fi 4939qemu_version=`head $source_path/VERSION` 4940echo "VERSION=$qemu_version" >>$config_host_mak 4941echo "PKGVERSION=$pkgversion" >>$config_host_mak 4942echo "SRC_PATH=$source_path" >> $config_host_mak 4943echo "TARGET_DIRS=$target_list" >> $config_host_mak 4944if [ "$docs" = "yes" ] ; then 4945 echo "BUILD_DOCS=yes" >> $config_host_mak 4946fi 4947if test "$modules" = "yes"; then 4948 # $shacmd can generate a hash started with digit, which the compiler doesn't 4949 # like as an symbol. So prefix it with an underscore 4950 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak 4951 echo "CONFIG_MODULES=y" >> $config_host_mak 4952fi 4953if test "$sdl" = "yes" ; then 4954 echo "CONFIG_SDL=y" >> $config_host_mak 4955 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 4956 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 4957fi 4958if test "$cocoa" = "yes" ; then 4959 echo "CONFIG_COCOA=y" >> $config_host_mak 4960fi 4961if test "$curses" = "yes" ; then 4962 echo "CONFIG_CURSES=y" >> $config_host_mak 4963fi 4964if test "$utimens" = "yes" ; then 4965 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak 4966fi 4967if test "$pipe2" = "yes" ; then 4968 echo "CONFIG_PIPE2=y" >> $config_host_mak 4969fi 4970if test "$accept4" = "yes" ; then 4971 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 4972fi 4973if test "$splice" = "yes" ; then 4974 echo "CONFIG_SPLICE=y" >> $config_host_mak 4975fi 4976if test "$eventfd" = "yes" ; then 4977 echo "CONFIG_EVENTFD=y" >> $config_host_mak 4978fi 4979if test "$memfd" = "yes" ; then 4980 echo "CONFIG_MEMFD=y" >> $config_host_mak 4981fi 4982if test "$fallocate" = "yes" ; then 4983 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 4984fi 4985if test "$fallocate_punch_hole" = "yes" ; then 4986 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 4987fi 4988if test "$fallocate_zero_range" = "yes" ; then 4989 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 4990fi 4991if test "$posix_fallocate" = "yes" ; then 4992 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 4993fi 4994if test "$sync_file_range" = "yes" ; then 4995 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 4996fi 4997if test "$fiemap" = "yes" ; then 4998 echo "CONFIG_FIEMAP=y" >> $config_host_mak 4999fi 5000if test "$dup3" = "yes" ; then 5001 echo "CONFIG_DUP3=y" >> $config_host_mak 5002fi 5003if test "$ppoll" = "yes" ; then 5004 echo "CONFIG_PPOLL=y" >> $config_host_mak 5005fi 5006if test "$prctl_pr_set_timerslack" = "yes" ; then 5007 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 5008fi 5009if test "$epoll" = "yes" ; then 5010 echo "CONFIG_EPOLL=y" >> $config_host_mak 5011fi 5012if test "$epoll_create1" = "yes" ; then 5013 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 5014fi 5015if test "$epoll_pwait" = "yes" ; then 5016 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak 5017fi 5018if test "$sendfile" = "yes" ; then 5019 echo "CONFIG_SENDFILE=y" >> $config_host_mak 5020fi 5021if test "$timerfd" = "yes" ; then 5022 echo "CONFIG_TIMERFD=y" >> $config_host_mak 5023fi 5024if test "$setns" = "yes" ; then 5025 echo "CONFIG_SETNS=y" >> $config_host_mak 5026fi 5027if test "$inotify" = "yes" ; then 5028 echo "CONFIG_INOTIFY=y" >> $config_host_mak 5029fi 5030if test "$inotify1" = "yes" ; then 5031 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 5032fi 5033if test "$byteswap_h" = "yes" ; then 5034 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 5035fi 5036if test "$bswap_h" = "yes" ; then 5037 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 5038fi 5039if test "$curl" = "yes" ; then 5040 echo "CONFIG_CURL=m" >> $config_host_mak 5041 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 5042 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 5043fi 5044if test "$brlapi" = "yes" ; then 5045 echo "CONFIG_BRLAPI=y" >> $config_host_mak 5046fi 5047if test "$bluez" = "yes" ; then 5048 echo "CONFIG_BLUEZ=y" >> $config_host_mak 5049 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 5050fi 5051if test "$glib_subprocess" = "yes" ; then 5052 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak 5053fi 5054echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 5055if test "$gtk" = "yes" ; then 5056 echo "CONFIG_GTK=y" >> $config_host_mak 5057 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak 5058 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 5059 if test "$gtk_gl" = "yes" ; then 5060 echo "CONFIG_GTK_GL=y" >> $config_host_mak 5061 fi 5062fi 5063if test "$gnutls" = "yes" ; then 5064 echo "CONFIG_GNUTLS=y" >> $config_host_mak 5065fi 5066if test "$gnutls_hash" = "yes" ; then 5067 echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak 5068fi 5069if test "$gcrypt" = "yes" ; then 5070 echo "CONFIG_GCRYPT=y" >> $config_host_mak 5071fi 5072if test "$nettle" = "yes" ; then 5073 echo "CONFIG_NETTLE=y" >> $config_host_mak 5074 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 5075fi 5076if test "$tasn1" = "yes" ; then 5077 echo "CONFIG_TASN1=y" >> $config_host_mak 5078fi 5079if test "$vte" = "yes" ; then 5080 echo "CONFIG_VTE=y" >> $config_host_mak 5081 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 5082fi 5083if test "$virglrenderer" = "yes" ; then 5084 echo "CONFIG_VIRGL=y" >> $config_host_mak 5085 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 5086 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 5087fi 5088if test "$xen" = "yes" ; then 5089 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 5090 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 5091fi 5092if test "$linux_aio" = "yes" ; then 5093 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 5094fi 5095if test "$attr" = "yes" ; then 5096 echo "CONFIG_ATTR=y" >> $config_host_mak 5097fi 5098if test "$libattr" = "yes" ; then 5099 echo "CONFIG_LIBATTR=y" >> $config_host_mak 5100fi 5101if test "$virtfs" = "yes" ; then 5102 echo "CONFIG_VIRTFS=y" >> $config_host_mak 5103fi 5104if test "$vhost_scsi" = "yes" ; then 5105 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 5106fi 5107if test "$vhost_net" = "yes" ; then 5108 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 5109fi 5110if test "$blobs" = "yes" ; then 5111 echo "INSTALL_BLOBS=yes" >> $config_host_mak 5112fi 5113if test "$iovec" = "yes" ; then 5114 echo "CONFIG_IOVEC=y" >> $config_host_mak 5115fi 5116if test "$preadv" = "yes" ; then 5117 echo "CONFIG_PREADV=y" >> $config_host_mak 5118fi 5119if test "$fdt" = "yes" ; then 5120 echo "CONFIG_FDT=y" >> $config_host_mak 5121fi 5122if test "$signalfd" = "yes" ; then 5123 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 5124fi 5125if test "$tcg_interpreter" = "yes" ; then 5126 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 5127fi 5128if test "$fdatasync" = "yes" ; then 5129 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 5130fi 5131if test "$madvise" = "yes" ; then 5132 echo "CONFIG_MADVISE=y" >> $config_host_mak 5133fi 5134if test "$posix_madvise" = "yes" ; then 5135 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 5136fi 5137if test "$sigev_thread_id" = "yes" ; then 5138 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak 5139fi 5140 5141if test "$spice" = "yes" ; then 5142 echo "CONFIG_SPICE=y" >> $config_host_mak 5143fi 5144 5145if test "$smartcard" = "yes" ; then 5146 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 5147fi 5148 5149if test "$libusb" = "yes" ; then 5150 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 5151fi 5152 5153if test "$usb_redir" = "yes" ; then 5154 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 5155fi 5156 5157if test "$opengl" = "yes" ; then 5158 echo "CONFIG_OPENGL=y" >> $config_host_mak 5159 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 5160 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 5161fi 5162 5163if test "$lzo" = "yes" ; then 5164 echo "CONFIG_LZO=y" >> $config_host_mak 5165fi 5166 5167if test "$snappy" = "yes" ; then 5168 echo "CONFIG_SNAPPY=y" >> $config_host_mak 5169fi 5170 5171if test "$bzip2" = "yes" ; then 5172 echo "CONFIG_BZIP2=y" >> $config_host_mak 5173 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 5174fi 5175 5176if test "$libiscsi" = "yes" ; then 5177 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 5178 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 5179 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 5180fi 5181 5182if test "$libnfs" = "yes" ; then 5183 echo "CONFIG_LIBNFS=y" >> $config_host_mak 5184fi 5185 5186if test "$seccomp" = "yes"; then 5187 echo "CONFIG_SECCOMP=y" >> $config_host_mak 5188fi 5189 5190# XXX: suppress that 5191if [ "$bsd" = "yes" ] ; then 5192 echo "CONFIG_BSD=y" >> $config_host_mak 5193fi 5194 5195if test "$zero_malloc" = "yes" ; then 5196 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak 5197fi 5198if test "$localtime_r" = "yes" ; then 5199 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 5200fi 5201if test "$qom_cast_debug" = "yes" ; then 5202 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 5203fi 5204if test "$rbd" = "yes" ; then 5205 echo "CONFIG_RBD=m" >> $config_host_mak 5206 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 5207 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 5208fi 5209 5210echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 5211if test "$coroutine_pool" = "yes" ; then 5212 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 5213else 5214 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 5215fi 5216 5217if test "$open_by_handle_at" = "yes" ; then 5218 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 5219fi 5220 5221if test "$linux_magic_h" = "yes" ; then 5222 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 5223fi 5224 5225if test "$pragma_diagnostic_available" = "yes" ; then 5226 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 5227fi 5228 5229if test "$valgrind_h" = "yes" ; then 5230 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 5231fi 5232 5233if test "$has_environ" = "yes" ; then 5234 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 5235fi 5236 5237if test "$cpuid_h" = "yes" ; then 5238 echo "CONFIG_CPUID_H=y" >> $config_host_mak 5239fi 5240 5241if test "$int128" = "yes" ; then 5242 echo "CONFIG_INT128=y" >> $config_host_mak 5243fi 5244 5245if test "$getauxval" = "yes" ; then 5246 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 5247fi 5248 5249if test "$glusterfs" = "yes" ; then 5250 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 5251 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 5252 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 5253fi 5254 5255if test "$glusterfs_discard" = "yes" ; then 5256 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 5257fi 5258 5259if test "$glusterfs_zerofill" = "yes" ; then 5260 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 5261fi 5262 5263if test "$archipelago" = "yes" ; then 5264 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak 5265 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak 5266fi 5267 5268if test "$libssh2" = "yes" ; then 5269 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 5270 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 5271 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 5272fi 5273 5274if test "$vhdx" = "yes" ; then 5275 echo "CONFIG_VHDX=y" >> $config_host_mak 5276fi 5277 5278# USB host support 5279if test "$libusb" = "yes"; then 5280 echo "HOST_USB=libusb legacy" >> $config_host_mak 5281else 5282 echo "HOST_USB=stub" >> $config_host_mak 5283fi 5284 5285# TPM passthrough support? 5286if test "$tpm" = "yes"; then 5287 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 5288 if test "$tpm_passthrough" = "yes"; then 5289 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 5290 fi 5291fi 5292 5293echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 5294if have_backend "nop"; then 5295 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 5296fi 5297if have_backend "simple"; then 5298 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 5299 # Set the appropriate trace file. 5300 trace_file="\"$trace_file-\" FMT_pid" 5301fi 5302if have_backend "stderr"; then 5303 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak 5304fi 5305if have_backend "ust"; then 5306 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 5307fi 5308if have_backend "dtrace"; then 5309 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 5310 if test "$trace_backend_stap" = "yes" ; then 5311 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 5312 fi 5313fi 5314if have_backend "ftrace"; then 5315 if test "$linux" = "yes" ; then 5316 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 5317 else 5318 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 5319 fi 5320fi 5321echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 5322 5323if test "$rdma" = "yes" ; then 5324 echo "CONFIG_RDMA=y" >> $config_host_mak 5325fi 5326 5327# Hold two types of flag: 5328# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 5329# a thread we have a handle to 5330# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 5331# platform 5332if test "$pthread_setname_np" = "yes" ; then 5333 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 5334 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 5335fi 5336 5337if test "$tcg_interpreter" = "yes"; then 5338 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 5339elif test "$ARCH" = "sparc64" ; then 5340 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 5341elif test "$ARCH" = "s390x" ; then 5342 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 5343elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 5344 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 5345elif test "$ARCH" = "ppc64" ; then 5346 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 5347else 5348 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 5349fi 5350QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES" 5351 5352echo "TOOLS=$tools" >> $config_host_mak 5353echo "ROMS=$roms" >> $config_host_mak 5354echo "MAKE=$make" >> $config_host_mak 5355echo "INSTALL=$install" >> $config_host_mak 5356echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 5357echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 5358if test -n "$libtool"; then 5359 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak 5360 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak 5361else 5362 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 5363 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 5364fi 5365echo "PYTHON=$python" >> $config_host_mak 5366echo "CC=$cc" >> $config_host_mak 5367if $iasl -h > /dev/null 2>&1; then 5368 echo "IASL=$iasl" >> $config_host_mak 5369fi 5370echo "CC_I386=$cc_i386" >> $config_host_mak 5371echo "HOST_CC=$host_cc" >> $config_host_mak 5372echo "CXX=$cxx" >> $config_host_mak 5373echo "OBJCC=$objcc" >> $config_host_mak 5374echo "AR=$ar" >> $config_host_mak 5375echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 5376echo "AS=$as" >> $config_host_mak 5377echo "CPP=$cpp" >> $config_host_mak 5378echo "OBJCOPY=$objcopy" >> $config_host_mak 5379echo "LD=$ld" >> $config_host_mak 5380echo "NM=$nm" >> $config_host_mak 5381echo "WINDRES=$windres" >> $config_host_mak 5382echo "LIBTOOL=$libtool" >> $config_host_mak 5383echo "CFLAGS=$CFLAGS" >> $config_host_mak 5384echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 5385echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 5386echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 5387if test "$sparse" = "yes" ; then 5388 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 5389 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 5390 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 5391 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 5392 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 5393fi 5394if test "$cross_prefix" != ""; then 5395 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 5396else 5397 echo "AUTOCONF_HOST := " >> $config_host_mak 5398fi 5399echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 5400echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 5401echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak 5402echo "LIBS+=$LIBS" >> $config_host_mak 5403echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 5404echo "EXESUF=$EXESUF" >> $config_host_mak 5405echo "DSOSUF=$DSOSUF" >> $config_host_mak 5406echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 5407echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 5408echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 5409echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 5410echo "POD2MAN=$POD2MAN" >> $config_host_mak 5411echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 5412if test "$gcov" = "yes" ; then 5413 echo "CONFIG_GCOV=y" >> $config_host_mak 5414 echo "GCOV=$gcov_tool" >> $config_host_mak 5415fi 5416 5417# use included Linux headers 5418if test "$linux" = "yes" ; then 5419 mkdir -p linux-headers 5420 case "$cpu" in 5421 i386|x86_64|x32) 5422 linux_arch=x86 5423 ;; 5424 ppcemb|ppc|ppc64) 5425 linux_arch=powerpc 5426 ;; 5427 s390x) 5428 linux_arch=s390 5429 ;; 5430 aarch64) 5431 linux_arch=arm64 5432 ;; 5433 mips64) 5434 linux_arch=mips 5435 ;; 5436 *) 5437 # For most CPUs the kernel architecture name and QEMU CPU name match. 5438 linux_arch="$cpu" 5439 ;; 5440 esac 5441 # For non-KVM architectures we will not have asm headers 5442 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 5443 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 5444 fi 5445fi 5446 5447for target in $target_list; do 5448target_dir="$target" 5449config_target_mak=$target_dir/config-target.mak 5450target_name=`echo $target | cut -d '-' -f 1` 5451target_bigendian="no" 5452 5453case "$target_name" in 5454 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 5455 target_bigendian=yes 5456 ;; 5457esac 5458target_softmmu="no" 5459target_user_only="no" 5460target_linux_user="no" 5461target_bsd_user="no" 5462case "$target" in 5463 ${target_name}-softmmu) 5464 target_softmmu="yes" 5465 ;; 5466 ${target_name}-linux-user) 5467 if test "$linux" != "yes" ; then 5468 error_exit "Target '$target' is only available on a Linux host" 5469 fi 5470 target_user_only="yes" 5471 target_linux_user="yes" 5472 ;; 5473 ${target_name}-bsd-user) 5474 if test "$bsd" != "yes" ; then 5475 error_exit "Target '$target' is only available on a BSD host" 5476 fi 5477 target_user_only="yes" 5478 target_bsd_user="yes" 5479 ;; 5480 *) 5481 error_exit "Target '$target' not recognised" 5482 exit 1 5483 ;; 5484esac 5485 5486mkdir -p $target_dir 5487echo "# Automatically generated by configure - do not modify" > $config_target_mak 5488 5489bflt="no" 5490interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"` 5491gdb_xml_files="" 5492 5493TARGET_ARCH="$target_name" 5494TARGET_BASE_ARCH="" 5495TARGET_ABI_DIR="" 5496 5497case "$target_name" in 5498 i386) 5499 ;; 5500 x86_64) 5501 TARGET_BASE_ARCH=i386 5502 ;; 5503 alpha) 5504 ;; 5505 arm|armeb) 5506 TARGET_ARCH=arm 5507 bflt="yes" 5508 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 5509 ;; 5510 aarch64) 5511 TARGET_BASE_ARCH=arm 5512 bflt="yes" 5513 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 5514 ;; 5515 cris) 5516 ;; 5517 lm32) 5518 ;; 5519 m68k) 5520 bflt="yes" 5521 gdb_xml_files="cf-core.xml cf-fp.xml" 5522 ;; 5523 microblaze|microblazeel) 5524 TARGET_ARCH=microblaze 5525 bflt="yes" 5526 ;; 5527 mips|mipsel) 5528 TARGET_ARCH=mips 5529 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 5530 ;; 5531 mipsn32|mipsn32el) 5532 TARGET_ARCH=mips64 5533 TARGET_BASE_ARCH=mips 5534 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 5535 echo "TARGET_ABI32=y" >> $config_target_mak 5536 ;; 5537 mips64|mips64el) 5538 TARGET_ARCH=mips64 5539 TARGET_BASE_ARCH=mips 5540 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 5541 ;; 5542 moxie) 5543 ;; 5544 or32) 5545 TARGET_ARCH=openrisc 5546 TARGET_BASE_ARCH=openrisc 5547 ;; 5548 ppc) 5549 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5550 ;; 5551 ppcemb) 5552 TARGET_BASE_ARCH=ppc 5553 TARGET_ABI_DIR=ppc 5554 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5555 ;; 5556 ppc64) 5557 TARGET_BASE_ARCH=ppc 5558 TARGET_ABI_DIR=ppc 5559 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5560 ;; 5561 ppc64le) 5562 TARGET_ARCH=ppc64 5563 TARGET_BASE_ARCH=ppc 5564 TARGET_ABI_DIR=ppc 5565 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5566 ;; 5567 ppc64abi32) 5568 TARGET_ARCH=ppc64 5569 TARGET_BASE_ARCH=ppc 5570 TARGET_ABI_DIR=ppc 5571 echo "TARGET_ABI32=y" >> $config_target_mak 5572 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5573 ;; 5574 sh4|sh4eb) 5575 TARGET_ARCH=sh4 5576 bflt="yes" 5577 ;; 5578 sparc) 5579 ;; 5580 sparc64) 5581 TARGET_BASE_ARCH=sparc 5582 ;; 5583 sparc32plus) 5584 TARGET_ARCH=sparc64 5585 TARGET_BASE_ARCH=sparc 5586 TARGET_ABI_DIR=sparc 5587 echo "TARGET_ABI32=y" >> $config_target_mak 5588 ;; 5589 s390x) 5590 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml" 5591 ;; 5592 tilegx) 5593 ;; 5594 tricore) 5595 ;; 5596 unicore32) 5597 ;; 5598 xtensa|xtensaeb) 5599 TARGET_ARCH=xtensa 5600 ;; 5601 *) 5602 error_exit "Unsupported target CPU" 5603 ;; 5604esac 5605# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 5606if [ "$TARGET_BASE_ARCH" = "" ]; then 5607 TARGET_BASE_ARCH=$TARGET_ARCH 5608fi 5609 5610symlink "$source_path/Makefile.target" "$target_dir/Makefile" 5611 5612upper() { 5613 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 5614} 5615 5616target_arch_name="`upper $TARGET_ARCH`" 5617echo "TARGET_$target_arch_name=y" >> $config_target_mak 5618echo "TARGET_NAME=$target_name" >> $config_target_mak 5619echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 5620if [ "$TARGET_ABI_DIR" = "" ]; then 5621 TARGET_ABI_DIR=$TARGET_ARCH 5622fi 5623echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 5624if [ "$HOST_VARIANT_DIR" != "" ]; then 5625 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 5626fi 5627case "$target_name" in 5628 i386|x86_64) 5629 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then 5630 echo "CONFIG_XEN=y" >> $config_target_mak 5631 if test "$xen_pci_passthrough" = yes; then 5632 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 5633 fi 5634 fi 5635 ;; 5636 *) 5637esac 5638case "$target_name" in 5639 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips) 5640 # Make sure the target and host cpus are compatible 5641 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \ 5642 \( "$target_name" = "$cpu" -o \ 5643 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \ 5644 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \ 5645 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \ 5646 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \ 5647 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \ 5648 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \ 5649 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \ 5650 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \ 5651 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then 5652 echo "CONFIG_KVM=y" >> $config_target_mak 5653 if test "$vhost_net" = "yes" ; then 5654 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 5655 fi 5656 fi 5657esac 5658if test "$target_bigendian" = "yes" ; then 5659 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 5660fi 5661if test "$target_softmmu" = "yes" ; then 5662 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 5663fi 5664if test "$target_user_only" = "yes" ; then 5665 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 5666 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 5667fi 5668if test "$target_linux_user" = "yes" ; then 5669 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 5670fi 5671list="" 5672if test ! -z "$gdb_xml_files" ; then 5673 for x in $gdb_xml_files; do 5674 list="$list $source_path/gdb-xml/$x" 5675 done 5676 echo "TARGET_XML_FILES=$list" >> $config_target_mak 5677fi 5678 5679if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 5680 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 5681fi 5682if test "$target_bsd_user" = "yes" ; then 5683 echo "CONFIG_BSD_USER=y" >> $config_target_mak 5684fi 5685 5686# generate QEMU_CFLAGS/LDFLAGS for targets 5687 5688cflags="" 5689ldflags="" 5690 5691disas_config() { 5692 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 5693 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 5694} 5695 5696for i in $ARCH $TARGET_BASE_ARCH ; do 5697 case "$i" in 5698 alpha) 5699 disas_config "ALPHA" 5700 ;; 5701 aarch64) 5702 if test -n "${cxx}"; then 5703 disas_config "ARM_A64" 5704 fi 5705 ;; 5706 arm) 5707 disas_config "ARM" 5708 if test -n "${cxx}"; then 5709 disas_config "ARM_A64" 5710 fi 5711 ;; 5712 cris) 5713 disas_config "CRIS" 5714 ;; 5715 hppa) 5716 disas_config "HPPA" 5717 ;; 5718 i386|x86_64|x32) 5719 disas_config "I386" 5720 ;; 5721 ia64*) 5722 disas_config "IA64" 5723 ;; 5724 lm32) 5725 disas_config "LM32" 5726 ;; 5727 m68k) 5728 disas_config "M68K" 5729 ;; 5730 microblaze*) 5731 disas_config "MICROBLAZE" 5732 ;; 5733 mips*) 5734 disas_config "MIPS" 5735 ;; 5736 moxie*) 5737 disas_config "MOXIE" 5738 ;; 5739 or32) 5740 disas_config "OPENRISC" 5741 ;; 5742 ppc*) 5743 disas_config "PPC" 5744 ;; 5745 s390*) 5746 disas_config "S390" 5747 ;; 5748 sh4) 5749 disas_config "SH4" 5750 ;; 5751 sparc*) 5752 disas_config "SPARC" 5753 ;; 5754 xtensa*) 5755 disas_config "XTENSA" 5756 ;; 5757 esac 5758done 5759if test "$tcg_interpreter" = "yes" ; then 5760 disas_config "TCI" 5761fi 5762 5763case "$ARCH" in 5764alpha) 5765 # Ensure there's only a single GP 5766 cflags="-msmall-data $cflags" 5767;; 5768esac 5769 5770if test "$gprof" = "yes" ; then 5771 echo "TARGET_GPROF=yes" >> $config_target_mak 5772 if test "$target_linux_user" = "yes" ; then 5773 cflags="-p $cflags" 5774 ldflags="-p $ldflags" 5775 fi 5776 if test "$target_softmmu" = "yes" ; then 5777 ldflags="-p $ldflags" 5778 echo "GPROF_CFLAGS=-p" >> $config_target_mak 5779 fi 5780fi 5781 5782if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 5783 ldflags="$ldflags $textseg_ldflags" 5784fi 5785 5786echo "LDFLAGS+=$ldflags" >> $config_target_mak 5787echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 5788 5789done # for target in $targets 5790 5791if [ "$pixman" = "internal" ]; then 5792 echo "config-host.h: subdir-pixman" >> $config_host_mak 5793fi 5794 5795if [ "$dtc_internal" = "yes" ]; then 5796 echo "config-host.h: subdir-dtc" >> $config_host_mak 5797fi 5798 5799if test "$numa" = "yes"; then 5800 echo "CONFIG_NUMA=y" >> $config_host_mak 5801fi 5802 5803if test "$ccache_cpp2" = "yes"; then 5804 echo "export CCACHE_CPP2=y" >> $config_host_mak 5805fi 5806 5807# build tree in object directory in case the source is not in the current directory 5808DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests" 5809DIRS="$DIRS fsdev" 5810DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 5811DIRS="$DIRS roms/seabios roms/vgabios" 5812DIRS="$DIRS qapi-generated" 5813FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 5814FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 5815FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 5816FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 5817FILES="$FILES pc-bios/spapr-rtas/Makefile" 5818FILES="$FILES pc-bios/s390-ccw/Makefile" 5819FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 5820FILES="$FILES pc-bios/qemu-icon.bmp" 5821for bios_file in \ 5822 $source_path/pc-bios/*.bin \ 5823 $source_path/pc-bios/*.aml \ 5824 $source_path/pc-bios/*.rom \ 5825 $source_path/pc-bios/*.dtb \ 5826 $source_path/pc-bios/*.img \ 5827 $source_path/pc-bios/openbios-* \ 5828 $source_path/pc-bios/u-boot.* \ 5829 $source_path/pc-bios/palcode-* 5830do 5831 FILES="$FILES pc-bios/`basename $bios_file`" 5832done 5833for test_file in `find $source_path/tests/acpi-test-data -type f` 5834do 5835 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`" 5836done 5837mkdir -p $DIRS 5838for f in $FILES ; do 5839 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 5840 symlink "$source_path/$f" "$f" 5841 fi 5842done 5843 5844# temporary config to build submodules 5845for rom in seabios vgabios ; do 5846 config_mak=roms/$rom/config.mak 5847 echo "# Automatically generated by configure - do not modify" > $config_mak 5848 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 5849 echo "AS=$as" >> $config_mak 5850 echo "CC=$cc" >> $config_mak 5851 echo "BCC=bcc" >> $config_mak 5852 echo "CPP=$cpp" >> $config_mak 5853 echo "OBJCOPY=objcopy" >> $config_mak 5854 echo "IASL=$iasl" >> $config_mak 5855 echo "LD=$ld" >> $config_mak 5856done 5857 5858# set up qemu-iotests in this build directory 5859iotests_common_env="tests/qemu-iotests/common.env" 5860iotests_check="tests/qemu-iotests/check" 5861 5862echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 5863echo >> "$iotests_common_env" 5864echo "export PYTHON='$python'" >> "$iotests_common_env" 5865 5866if [ ! -e "$iotests_check" ]; then 5867 symlink "$source_path/$iotests_check" "$iotests_check" 5868fi 5869 5870# Save the configure command line for later reuse. 5871cat <<EOD >config.status 5872#!/bin/sh 5873# Generated by configure. 5874# Run this file to recreate the current configuration. 5875# Compiler output produced by configure, useful for debugging 5876# configure, is in config.log if it exists. 5877EOD 5878printf "exec" >>config.status 5879printf " '%s'" "$0" "$@" >>config.status 5880echo >>config.status 5881chmod +x config.status 5882 5883rm -r "$TMPDIR1" 5884