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, gtk, milkymist-tmu2) 3290 3291if test "$opengl" != "no" ; then 3292 opengl_pkgs="epoxy" 3293 if $pkg_config $opengl_pkgs x11; then 3294 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags" 3295 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs" 3296 opengl=yes 3297 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 3298 gtk_gl="yes" 3299 fi 3300 else 3301 if test "$opengl" = "yes" ; then 3302 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 3303 fi 3304 opengl_cflags="" 3305 opengl_libs="" 3306 opengl=no 3307 fi 3308fi 3309 3310 3311########################################## 3312# archipelago probe 3313if test "$archipelago" != "no" ; then 3314 cat > $TMPC <<EOF 3315#include <stdio.h> 3316#include <xseg/xseg.h> 3317#include <xseg/protocol.h> 3318int main(void) { 3319 xseg_initialize(); 3320 return 0; 3321} 3322EOF 3323 archipelago_libs=-lxseg 3324 if compile_prog "" "$archipelago_libs"; then 3325 archipelago="yes" 3326 libs_tools="$archipelago_libs $libs_tools" 3327 libs_softmmu="$archipelago_libs $libs_softmmu" 3328 3329 echo "WARNING: Please check the licenses of QEMU and libxseg carefully." 3330 echo "GPLv3 versions of libxseg may not be compatible with QEMU's" 3331 echo "license and therefore prevent redistribution." 3332 echo 3333 echo "To disable Archipelago, use --disable-archipelago" 3334 else 3335 if test "$archipelago" = "yes" ; then 3336 feature_not_found "Archipelago backend support" "Install libxseg devel" 3337 fi 3338 archipelago="no" 3339 fi 3340fi 3341 3342 3343########################################## 3344# glusterfs probe 3345if test "$glusterfs" != "no" ; then 3346 if $pkg_config --atleast-version=3 glusterfs-api; then 3347 glusterfs="yes" 3348 glusterfs_cflags=`$pkg_config --cflags glusterfs-api` 3349 glusterfs_libs=`$pkg_config --libs glusterfs-api` 3350 if $pkg_config --atleast-version=5 glusterfs-api; then 3351 glusterfs_discard="yes" 3352 fi 3353 if $pkg_config --atleast-version=6 glusterfs-api; then 3354 glusterfs_zerofill="yes" 3355 fi 3356 else 3357 if test "$glusterfs" = "yes" ; then 3358 feature_not_found "GlusterFS backend support" \ 3359 "Install glusterfs-api devel >= 3" 3360 fi 3361 glusterfs="no" 3362 fi 3363fi 3364 3365# Check for inotify functions when we are building linux-user 3366# emulator. This is done because older glibc versions don't 3367# have syscall stubs for these implemented. In that case we 3368# don't provide them even if kernel supports them. 3369# 3370inotify=no 3371cat > $TMPC << EOF 3372#include <sys/inotify.h> 3373 3374int 3375main(void) 3376{ 3377 /* try to start inotify */ 3378 return inotify_init(); 3379} 3380EOF 3381if compile_prog "" "" ; then 3382 inotify=yes 3383fi 3384 3385inotify1=no 3386cat > $TMPC << EOF 3387#include <sys/inotify.h> 3388 3389int 3390main(void) 3391{ 3392 /* try to start inotify */ 3393 return inotify_init1(0); 3394} 3395EOF 3396if compile_prog "" "" ; then 3397 inotify1=yes 3398fi 3399 3400# check if utimensat and futimens are supported 3401utimens=no 3402cat > $TMPC << EOF 3403#define _ATFILE_SOURCE 3404#include <stddef.h> 3405#include <fcntl.h> 3406#include <sys/stat.h> 3407 3408int main(void) 3409{ 3410 utimensat(AT_FDCWD, "foo", NULL, 0); 3411 futimens(0, NULL); 3412 return 0; 3413} 3414EOF 3415if compile_prog "" "" ; then 3416 utimens=yes 3417fi 3418 3419# check if pipe2 is there 3420pipe2=no 3421cat > $TMPC << EOF 3422#include <unistd.h> 3423#include <fcntl.h> 3424 3425int main(void) 3426{ 3427 int pipefd[2]; 3428 return pipe2(pipefd, O_CLOEXEC); 3429} 3430EOF 3431if compile_prog "" "" ; then 3432 pipe2=yes 3433fi 3434 3435# check if accept4 is there 3436accept4=no 3437cat > $TMPC << EOF 3438#include <sys/socket.h> 3439#include <stddef.h> 3440 3441int main(void) 3442{ 3443 accept4(0, NULL, NULL, SOCK_CLOEXEC); 3444 return 0; 3445} 3446EOF 3447if compile_prog "" "" ; then 3448 accept4=yes 3449fi 3450 3451# check if tee/splice is there. vmsplice was added same time. 3452splice=no 3453cat > $TMPC << EOF 3454#include <unistd.h> 3455#include <fcntl.h> 3456#include <limits.h> 3457 3458int main(void) 3459{ 3460 int len, fd = 0; 3461 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 3462 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 3463 return 0; 3464} 3465EOF 3466if compile_prog "" "" ; then 3467 splice=yes 3468fi 3469 3470########################################## 3471# libnuma probe 3472 3473if test "$numa" != "no" ; then 3474 cat > $TMPC << EOF 3475#include <numa.h> 3476int main(void) { return numa_available(); } 3477EOF 3478 3479 if compile_prog "" "-lnuma" ; then 3480 numa=yes 3481 libs_softmmu="-lnuma $libs_softmmu" 3482 else 3483 if test "$numa" = "yes" ; then 3484 feature_not_found "numa" "install numactl devel" 3485 fi 3486 numa=no 3487 fi 3488fi 3489 3490if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 3491 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 3492 exit 1 3493fi 3494 3495########################################## 3496# tcmalloc probe 3497 3498if test "$tcmalloc" = "yes" ; then 3499 cat > $TMPC << EOF 3500#include <stdlib.h> 3501int main(void) { malloc(1); return 0; } 3502EOF 3503 3504 if compile_prog "" "-ltcmalloc" ; then 3505 LIBS="-ltcmalloc $LIBS" 3506 else 3507 feature_not_found "tcmalloc" "install gperftools devel" 3508 fi 3509fi 3510 3511########################################## 3512# jemalloc probe 3513 3514if test "$jemalloc" = "yes" ; then 3515 cat > $TMPC << EOF 3516#include <stdlib.h> 3517int main(void) { malloc(1); return 0; } 3518EOF 3519 3520 if compile_prog "" "-ljemalloc" ; then 3521 LIBS="-ljemalloc $LIBS" 3522 else 3523 feature_not_found "jemalloc" "install jemalloc devel" 3524 fi 3525fi 3526 3527########################################## 3528# signalfd probe 3529signalfd="no" 3530cat > $TMPC << EOF 3531#include <unistd.h> 3532#include <sys/syscall.h> 3533#include <signal.h> 3534int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 3535EOF 3536 3537if compile_prog "" "" ; then 3538 signalfd=yes 3539fi 3540 3541# check if eventfd is supported 3542eventfd=no 3543cat > $TMPC << EOF 3544#include <sys/eventfd.h> 3545 3546int main(void) 3547{ 3548 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 3549} 3550EOF 3551if compile_prog "" "" ; then 3552 eventfd=yes 3553fi 3554 3555# check if memfd is supported 3556memfd=no 3557cat > $TMPC << EOF 3558#include <sys/memfd.h> 3559 3560int main(void) 3561{ 3562 return memfd_create("foo", MFD_ALLOW_SEALING); 3563} 3564EOF 3565if compile_prog "" "" ; then 3566 memfd=yes 3567fi 3568 3569 3570 3571# check for fallocate 3572fallocate=no 3573cat > $TMPC << EOF 3574#include <fcntl.h> 3575 3576int main(void) 3577{ 3578 fallocate(0, 0, 0, 0); 3579 return 0; 3580} 3581EOF 3582if compile_prog "" "" ; then 3583 fallocate=yes 3584fi 3585 3586# check for fallocate hole punching 3587fallocate_punch_hole=no 3588cat > $TMPC << EOF 3589#include <fcntl.h> 3590#include <linux/falloc.h> 3591 3592int main(void) 3593{ 3594 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 3595 return 0; 3596} 3597EOF 3598if compile_prog "" "" ; then 3599 fallocate_punch_hole=yes 3600fi 3601 3602# check that fallocate supports range zeroing inside the file 3603fallocate_zero_range=no 3604cat > $TMPC << EOF 3605#include <fcntl.h> 3606#include <linux/falloc.h> 3607 3608int main(void) 3609{ 3610 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 3611 return 0; 3612} 3613EOF 3614if compile_prog "" "" ; then 3615 fallocate_zero_range=yes 3616fi 3617 3618# check for posix_fallocate 3619posix_fallocate=no 3620cat > $TMPC << EOF 3621#include <fcntl.h> 3622 3623int main(void) 3624{ 3625 posix_fallocate(0, 0, 0); 3626 return 0; 3627} 3628EOF 3629if compile_prog "" "" ; then 3630 posix_fallocate=yes 3631fi 3632 3633# check for sync_file_range 3634sync_file_range=no 3635cat > $TMPC << EOF 3636#include <fcntl.h> 3637 3638int main(void) 3639{ 3640 sync_file_range(0, 0, 0, 0); 3641 return 0; 3642} 3643EOF 3644if compile_prog "" "" ; then 3645 sync_file_range=yes 3646fi 3647 3648# check for linux/fiemap.h and FS_IOC_FIEMAP 3649fiemap=no 3650cat > $TMPC << EOF 3651#include <sys/ioctl.h> 3652#include <linux/fs.h> 3653#include <linux/fiemap.h> 3654 3655int main(void) 3656{ 3657 ioctl(0, FS_IOC_FIEMAP, 0); 3658 return 0; 3659} 3660EOF 3661if compile_prog "" "" ; then 3662 fiemap=yes 3663fi 3664 3665# check for dup3 3666dup3=no 3667cat > $TMPC << EOF 3668#include <unistd.h> 3669 3670int main(void) 3671{ 3672 dup3(0, 0, 0); 3673 return 0; 3674} 3675EOF 3676if compile_prog "" "" ; then 3677 dup3=yes 3678fi 3679 3680# check for ppoll support 3681ppoll=no 3682cat > $TMPC << EOF 3683#include <poll.h> 3684 3685int main(void) 3686{ 3687 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 3688 ppoll(&pfd, 1, 0, 0); 3689 return 0; 3690} 3691EOF 3692if compile_prog "" "" ; then 3693 ppoll=yes 3694fi 3695 3696# check for prctl(PR_SET_TIMERSLACK , ... ) support 3697prctl_pr_set_timerslack=no 3698cat > $TMPC << EOF 3699#include <sys/prctl.h> 3700 3701int main(void) 3702{ 3703 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 3704 return 0; 3705} 3706EOF 3707if compile_prog "" "" ; then 3708 prctl_pr_set_timerslack=yes 3709fi 3710 3711# check for epoll support 3712epoll=no 3713cat > $TMPC << EOF 3714#include <sys/epoll.h> 3715 3716int main(void) 3717{ 3718 epoll_create(0); 3719 return 0; 3720} 3721EOF 3722if compile_prog "" "" ; then 3723 epoll=yes 3724fi 3725 3726# epoll_create1 and epoll_pwait are later additions 3727# so we must check separately for their presence 3728epoll_create1=no 3729cat > $TMPC << EOF 3730#include <sys/epoll.h> 3731 3732int main(void) 3733{ 3734 /* Note that we use epoll_create1 as a value, not as 3735 * a function being called. This is necessary so that on 3736 * old SPARC glibc versions where the function was present in 3737 * the library but not declared in the header file we will 3738 * fail the configure check. (Otherwise we will get a compiler 3739 * warning but not an error, and will proceed to fail the 3740 * qemu compile where we compile with -Werror.) 3741 */ 3742 return (int)(uintptr_t)&epoll_create1; 3743} 3744EOF 3745if compile_prog "" "" ; then 3746 epoll_create1=yes 3747fi 3748 3749epoll_pwait=no 3750cat > $TMPC << EOF 3751#include <sys/epoll.h> 3752 3753int main(void) 3754{ 3755 epoll_pwait(0, 0, 0, 0, 0); 3756 return 0; 3757} 3758EOF 3759if compile_prog "" "" ; then 3760 epoll_pwait=yes 3761fi 3762 3763# check for sendfile support 3764sendfile=no 3765cat > $TMPC << EOF 3766#include <sys/sendfile.h> 3767 3768int main(void) 3769{ 3770 return sendfile(0, 0, 0, 0); 3771} 3772EOF 3773if compile_prog "" "" ; then 3774 sendfile=yes 3775fi 3776 3777# check for timerfd support (glibc 2.8 and newer) 3778timerfd=no 3779cat > $TMPC << EOF 3780#include <sys/timerfd.h> 3781 3782int main(void) 3783{ 3784 return(timerfd_create(CLOCK_REALTIME, 0)); 3785} 3786EOF 3787if compile_prog "" "" ; then 3788 timerfd=yes 3789fi 3790 3791# check for setns and unshare support 3792setns=no 3793cat > $TMPC << EOF 3794#include <sched.h> 3795 3796int main(void) 3797{ 3798 int ret; 3799 ret = setns(0, 0); 3800 ret = unshare(0); 3801 return ret; 3802} 3803EOF 3804if compile_prog "" "" ; then 3805 setns=yes 3806fi 3807 3808# Check if tools are available to build documentation. 3809if test "$docs" != "no" ; then 3810 if has makeinfo && has pod2man; then 3811 docs=yes 3812 else 3813 if test "$docs" = "yes" ; then 3814 feature_not_found "docs" "Install texinfo and Perl/perl-podlators" 3815 fi 3816 docs=no 3817 fi 3818fi 3819 3820# Search for bswap_32 function 3821byteswap_h=no 3822cat > $TMPC << EOF 3823#include <byteswap.h> 3824int main(void) { return bswap_32(0); } 3825EOF 3826if compile_prog "" "" ; then 3827 byteswap_h=yes 3828fi 3829 3830# Search for bswap32 function 3831bswap_h=no 3832cat > $TMPC << EOF 3833#include <sys/endian.h> 3834#include <sys/types.h> 3835#include <machine/bswap.h> 3836int main(void) { return bswap32(0); } 3837EOF 3838if compile_prog "" "" ; then 3839 bswap_h=yes 3840fi 3841 3842########################################## 3843# Do we have libiscsi >= 1.9.0 3844if test "$libiscsi" != "no" ; then 3845 if $pkg_config --atleast-version=1.9.0 libiscsi; then 3846 libiscsi="yes" 3847 libiscsi_cflags=$($pkg_config --cflags libiscsi) 3848 libiscsi_libs=$($pkg_config --libs libiscsi) 3849 else 3850 if test "$libiscsi" = "yes" ; then 3851 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 3852 fi 3853 libiscsi="no" 3854 fi 3855fi 3856 3857########################################## 3858# Do we need libm 3859cat > $TMPC << EOF 3860#include <math.h> 3861int main(int argc, char **argv) { return isnan(sin((double)argc)); } 3862EOF 3863if compile_prog "" "" ; then 3864 : 3865elif compile_prog "" "-lm" ; then 3866 LIBS="-lm $LIBS" 3867 libs_qga="-lm $libs_qga" 3868else 3869 error_exit "libm check failed" 3870fi 3871 3872########################################## 3873# Do we need librt 3874# uClibc provides 2 versions of clock_gettime(), one with realtime 3875# support and one without. This means that the clock_gettime() don't 3876# need -lrt. We still need it for timer_create() so we check for this 3877# function in addition. 3878cat > $TMPC <<EOF 3879#include <signal.h> 3880#include <time.h> 3881int main(void) { 3882 timer_create(CLOCK_REALTIME, NULL, NULL); 3883 return clock_gettime(CLOCK_REALTIME, NULL); 3884} 3885EOF 3886 3887if compile_prog "" "" ; then 3888 : 3889# we need pthread for static linking. use previous pthread test result 3890elif compile_prog "" "$pthread_lib -lrt" ; then 3891 LIBS="$LIBS -lrt" 3892 libs_qga="$libs_qga -lrt" 3893fi 3894 3895if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ 3896 "$aix" != "yes" -a "$haiku" != "yes" ; then 3897 libs_softmmu="-lutil $libs_softmmu" 3898fi 3899 3900########################################## 3901# spice probe 3902if test "$spice" != "no" ; then 3903 cat > $TMPC << EOF 3904#include <spice.h> 3905int main(void) { spice_server_new(); return 0; } 3906EOF 3907 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 3908 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 3909 if $pkg_config --atleast-version=0.12.0 spice-server && \ 3910 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 3911 compile_prog "$spice_cflags" "$spice_libs" ; then 3912 spice="yes" 3913 libs_softmmu="$libs_softmmu $spice_libs" 3914 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 3915 spice_protocol_version=$($pkg_config --modversion spice-protocol) 3916 spice_server_version=$($pkg_config --modversion spice-server) 3917 else 3918 if test "$spice" = "yes" ; then 3919 feature_not_found "spice" \ 3920 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel" 3921 fi 3922 spice="no" 3923 fi 3924fi 3925 3926# check for smartcard support 3927smartcard_cflags="" 3928if test "$smartcard" != "no"; then 3929 if $pkg_config libcacard; then 3930 libcacard_cflags=$($pkg_config --cflags libcacard) 3931 libcacard_libs=$($pkg_config --libs libcacard) 3932 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags" 3933 libs_softmmu="$libs_softmmu $libcacard_libs" 3934 smartcard="yes" 3935 else 3936 if test "$smartcard" = "yes"; then 3937 feature_not_found "smartcard" "Install libcacard devel" 3938 fi 3939 smartcard="no" 3940 fi 3941fi 3942 3943# check for libusb 3944if test "$libusb" != "no" ; then 3945 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 3946 libusb="yes" 3947 libusb_cflags=$($pkg_config --cflags libusb-1.0) 3948 libusb_libs=$($pkg_config --libs libusb-1.0) 3949 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags" 3950 libs_softmmu="$libs_softmmu $libusb_libs" 3951 else 3952 if test "$libusb" = "yes"; then 3953 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 3954 fi 3955 libusb="no" 3956 fi 3957fi 3958 3959# check for usbredirparser for usb network redirection support 3960if test "$usb_redir" != "no" ; then 3961 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 3962 usb_redir="yes" 3963 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 3964 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 3965 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags" 3966 libs_softmmu="$libs_softmmu $usb_redir_libs" 3967 else 3968 if test "$usb_redir" = "yes"; then 3969 feature_not_found "usb-redir" "Install usbredir devel" 3970 fi 3971 usb_redir="no" 3972 fi 3973fi 3974 3975########################################## 3976# check if we have VSS SDK headers for win 3977 3978if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then 3979 case "$vss_win32_sdk" in 3980 "") vss_win32_include="-I$source_path" ;; 3981 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 3982 # handle path with spaces. So we symlink the headers into ".sdk/vss". 3983 vss_win32_include="-I$source_path/.sdk/vss" 3984 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 3985 ;; 3986 *) vss_win32_include="-I$vss_win32_sdk" 3987 esac 3988 cat > $TMPC << EOF 3989#define __MIDL_user_allocate_free_DEFINED__ 3990#include <inc/win2003/vss.h> 3991int main(void) { return VSS_CTX_BACKUP; } 3992EOF 3993 if compile_prog "$vss_win32_include" "" ; then 3994 guest_agent_with_vss="yes" 3995 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 3996 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 3997 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 3998 else 3999 if test "$vss_win32_sdk" != "" ; then 4000 echo "ERROR: Please download and install Microsoft VSS SDK:" 4001 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4002 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4003 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4004 echo "ERROR: The headers are extracted in the directory \`inc'." 4005 feature_not_found "VSS support" 4006 fi 4007 guest_agent_with_vss="no" 4008 fi 4009fi 4010 4011########################################## 4012# lookup Windows platform SDK (if not specified) 4013# The SDK is needed only to build .tlb (type library) file of guest agent 4014# VSS provider from the source. It is usually unnecessary because the 4015# pre-compiled .tlb file is included. 4016 4017if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then 4018 if test -z "$win_sdk"; then 4019 programfiles="$PROGRAMFILES" 4020 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4021 if test -n "$programfiles"; then 4022 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4023 else 4024 feature_not_found "Windows SDK" 4025 fi 4026 elif test "$win_sdk" = "no"; then 4027 win_sdk="" 4028 fi 4029fi 4030 4031########################################## 4032# check if mingw environment provides a recent ntddscsi.h 4033if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then 4034 cat > $TMPC << EOF 4035#include <windows.h> 4036#include <ntddscsi.h> 4037int main(void) { 4038#if !defined(IOCTL_SCSI_GET_ADDRESS) 4039#error Missing required ioctl definitions 4040#endif 4041 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4042 return addr.Lun; 4043} 4044EOF 4045 if compile_prog "" "" ; then 4046 guest_agent_ntddscsi=yes 4047 libs_qga="-lsetupapi $libs_qga" 4048 fi 4049fi 4050 4051########################################## 4052# virgl renderer probe 4053 4054if test "$virglrenderer" != "no" ; then 4055 cat > $TMPC << EOF 4056#include <virglrenderer.h> 4057int main(void) { virgl_renderer_poll(); return 0; } 4058EOF 4059 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4060 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4061 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4062 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4063 virglrenderer="yes" 4064 else 4065 if test "$virglrenderer" = "yes" ; then 4066 feature_not_found "virglrenderer" 4067 fi 4068 virglrenderer="no" 4069 fi 4070fi 4071 4072########################################## 4073# check if we have fdatasync 4074 4075fdatasync=no 4076cat > $TMPC << EOF 4077#include <unistd.h> 4078int main(void) { 4079#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4080return fdatasync(0); 4081#else 4082#error Not supported 4083#endif 4084} 4085EOF 4086if compile_prog "" "" ; then 4087 fdatasync=yes 4088fi 4089 4090########################################## 4091# check if we have madvise 4092 4093madvise=no 4094cat > $TMPC << EOF 4095#include <sys/types.h> 4096#include <sys/mman.h> 4097#include <stddef.h> 4098int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4099EOF 4100if compile_prog "" "" ; then 4101 madvise=yes 4102fi 4103 4104########################################## 4105# check if we have posix_madvise 4106 4107posix_madvise=no 4108cat > $TMPC << EOF 4109#include <sys/mman.h> 4110#include <stddef.h> 4111int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4112EOF 4113if compile_prog "" "" ; then 4114 posix_madvise=yes 4115fi 4116 4117########################################## 4118# check if we have usable SIGEV_THREAD_ID 4119 4120sigev_thread_id=no 4121cat > $TMPC << EOF 4122#include <signal.h> 4123int main(void) { 4124 struct sigevent ev; 4125 ev.sigev_notify = SIGEV_THREAD_ID; 4126 ev._sigev_un._tid = 0; 4127 asm volatile("" : : "g"(&ev)); 4128 return 0; 4129} 4130EOF 4131if compile_prog "" "" ; then 4132 sigev_thread_id=yes 4133fi 4134 4135########################################## 4136# check if trace backend exists 4137 4138$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4139if test "$?" -ne 0 ; then 4140 error_exit "invalid trace backends" \ 4141 "Please choose supported trace backends." 4142fi 4143 4144########################################## 4145# For 'ust' backend, test if ust headers are present 4146if have_backend "ust"; then 4147 cat > $TMPC << EOF 4148#include <lttng/tracepoint.h> 4149int main(void) { return 0; } 4150EOF 4151 if compile_prog "" "" ; then 4152 if $pkg_config lttng-ust --exists; then 4153 lttng_ust_libs=`$pkg_config --libs lttng-ust` 4154 else 4155 lttng_ust_libs="-llttng-ust" 4156 fi 4157 if $pkg_config liburcu-bp --exists; then 4158 urcu_bp_libs=`$pkg_config --libs liburcu-bp` 4159 else 4160 urcu_bp_libs="-lurcu-bp" 4161 fi 4162 4163 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 4164 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 4165 else 4166 error_exit "Trace backend 'ust' missing lttng-ust header files" 4167 fi 4168fi 4169 4170########################################## 4171# For 'dtrace' backend, test if 'dtrace' command is present 4172if have_backend "dtrace"; then 4173 if ! has 'dtrace' ; then 4174 error_exit "dtrace command is not found in PATH $PATH" 4175 fi 4176 trace_backend_stap="no" 4177 if has 'stap' ; then 4178 trace_backend_stap="yes" 4179 fi 4180fi 4181 4182########################################## 4183# check and set a backend for coroutine 4184 4185# We prefer ucontext, but it's not always possible. The fallback 4186# is sigcontext. gthread is not selectable except explicitly, because 4187# it is not functional enough to run QEMU proper. (It is occasionally 4188# useful for debugging purposes.) On Windows the only valid backend 4189# is the Windows-specific one. 4190 4191ucontext_works=no 4192if test "$darwin" != "yes"; then 4193 cat > $TMPC << EOF 4194#include <ucontext.h> 4195#ifdef __stub_makecontext 4196#error Ignoring glibc stub makecontext which will always fail 4197#endif 4198int main(void) { makecontext(0, 0, 0); return 0; } 4199EOF 4200 if compile_prog "" "" ; then 4201 ucontext_works=yes 4202 fi 4203fi 4204 4205if test "$coroutine" = ""; then 4206 if test "$mingw32" = "yes"; then 4207 coroutine=win32 4208 elif test "$ucontext_works" = "yes"; then 4209 coroutine=ucontext 4210 else 4211 coroutine=sigaltstack 4212 fi 4213else 4214 case $coroutine in 4215 windows) 4216 if test "$mingw32" != "yes"; then 4217 error_exit "'windows' coroutine backend only valid for Windows" 4218 fi 4219 # Unfortunately the user visible backend name doesn't match the 4220 # coroutine-*.c filename for this case, so we have to adjust it here. 4221 coroutine=win32 4222 ;; 4223 ucontext) 4224 if test "$ucontext_works" != "yes"; then 4225 feature_not_found "ucontext" 4226 fi 4227 ;; 4228 gthread|sigaltstack) 4229 if test "$mingw32" = "yes"; then 4230 error_exit "only the 'windows' coroutine backend is valid for Windows" 4231 fi 4232 ;; 4233 *) 4234 error_exit "unknown coroutine backend $coroutine" 4235 ;; 4236 esac 4237fi 4238 4239if test "$coroutine_pool" = ""; then 4240 if test "$coroutine" = "gthread"; then 4241 coroutine_pool=no 4242 else 4243 coroutine_pool=yes 4244 fi 4245fi 4246if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then 4247 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)" 4248fi 4249 4250########################################## 4251# check if we have open_by_handle_at 4252 4253open_by_handle_at=no 4254cat > $TMPC << EOF 4255#include <fcntl.h> 4256#if !defined(AT_EMPTY_PATH) 4257# error missing definition 4258#else 4259int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4260#endif 4261EOF 4262if compile_prog "" "" ; then 4263 open_by_handle_at=yes 4264fi 4265 4266######################################## 4267# check if we have linux/magic.h 4268 4269linux_magic_h=no 4270cat > $TMPC << EOF 4271#include <linux/magic.h> 4272int main(void) { 4273 return 0; 4274} 4275EOF 4276if compile_prog "" "" ; then 4277 linux_magic_h=yes 4278fi 4279 4280######################################## 4281# check whether we can disable warning option with a pragma (this is needed 4282# to silence warnings in the headers of some versions of external libraries). 4283# This test has to be compiled with -Werror as otherwise an unknown pragma is 4284# only a warning. 4285# 4286# If we can't selectively disable warning in the code, disable -Werror so that 4287# the build doesn't fail anyway. 4288 4289pragma_disable_unused_but_set=no 4290cat > $TMPC << EOF 4291#pragma GCC diagnostic push 4292#pragma GCC diagnostic ignored "-Wunused-but-set-variable" 4293#pragma GCC diagnostic ignored "-Wstrict-prototypes" 4294#pragma GCC diagnostic pop 4295 4296int main(void) { 4297 return 0; 4298} 4299EOF 4300if compile_prog "-Werror" "" ; then 4301 pragma_diagnostic_available=yes 4302else 4303 werror=no 4304fi 4305 4306######################################## 4307# check if we have valgrind/valgrind.h 4308 4309valgrind_h=no 4310cat > $TMPC << EOF 4311#include <valgrind/valgrind.h> 4312int main(void) { 4313 return 0; 4314} 4315EOF 4316if compile_prog "" "" ; then 4317 valgrind_h=yes 4318fi 4319 4320######################################## 4321# check if environ is declared 4322 4323has_environ=no 4324cat > $TMPC << EOF 4325#include <unistd.h> 4326int main(void) { 4327 environ = 0; 4328 return 0; 4329} 4330EOF 4331if compile_prog "" "" ; then 4332 has_environ=yes 4333fi 4334 4335######################################## 4336# check if cpuid.h is usable. 4337 4338cpuid_h=no 4339cat > $TMPC << EOF 4340#include <cpuid.h> 4341int main(void) { 4342 unsigned a, b, c, d; 4343 int max = __get_cpuid_max(0, 0); 4344 4345 if (max >= 1) { 4346 __cpuid(1, a, b, c, d); 4347 } 4348 4349 if (max >= 7) { 4350 __cpuid_count(7, 0, a, b, c, d); 4351 } 4352 4353 return 0; 4354} 4355EOF 4356if compile_prog "" "" ; then 4357 cpuid_h=yes 4358fi 4359 4360######################################## 4361# check if __[u]int128_t is usable. 4362 4363int128=no 4364cat > $TMPC << EOF 4365#if defined(__clang_major__) && defined(__clang_minor__) 4366# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2)) 4367# error __int128_t does not work in CLANG before 3.2 4368# endif 4369#endif 4370__int128_t a; 4371__uint128_t b; 4372int main (void) { 4373 a = a + b; 4374 b = a * b; 4375 a = a * a; 4376 return 0; 4377} 4378EOF 4379if compile_prog "" "" ; then 4380 int128=yes 4381fi 4382 4383######################################## 4384# check if getauxval is available. 4385 4386getauxval=no 4387cat > $TMPC << EOF 4388#include <sys/auxv.h> 4389int main(void) { 4390 return getauxval(AT_HWCAP) == 0; 4391} 4392EOF 4393if compile_prog "" "" ; then 4394 getauxval=yes 4395fi 4396 4397######################################## 4398# check if ccache is interfering with 4399# semantic analysis of macros 4400 4401ccache_cpp2=no 4402cat > $TMPC << EOF 4403static const int Z = 1; 4404#define fn() ({ Z; }) 4405#define TAUT(X) ((X) == Z) 4406#define PAREN(X, Y) (X == Y) 4407#define ID(X) (X) 4408int main(int argc, char *argv[]) 4409{ 4410 int x = 0, y = 0; 4411 x = ID(x); 4412 x = fn(); 4413 fn(); 4414 if (PAREN(x, y)) return 0; 4415 if (TAUT(Z)) return 0; 4416 return 0; 4417} 4418EOF 4419 4420if ! compile_object "-Werror"; then 4421 ccache_cpp2=yes 4422fi 4423 4424########################################## 4425# End of CC checks 4426# After here, no more $cc or $ld runs 4427 4428if test "$gcov" = "yes" ; then 4429 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 4430 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 4431elif test "$debug" = "no" ; then 4432 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 4433fi 4434 4435########################################## 4436# Do we have libnfs 4437if test "$libnfs" != "no" ; then 4438 if $pkg_config --atleast-version=1.9.3 libnfs; then 4439 libnfs="yes" 4440 libnfs_libs=$($pkg_config --libs libnfs) 4441 LIBS="$LIBS $libnfs_libs" 4442 else 4443 if test "$libnfs" = "yes" ; then 4444 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 4445 fi 4446 libnfs="no" 4447 fi 4448fi 4449 4450# Disable zero malloc errors for official releases unless explicitly told to 4451# enable/disable 4452if test -z "$zero_malloc" ; then 4453 if test "$z_version" = "50" ; then 4454 zero_malloc="no" 4455 else 4456 zero_malloc="yes" 4457 fi 4458fi 4459 4460# Now we've finished running tests it's OK to add -Werror to the compiler flags 4461if test "$werror" = "yes"; then 4462 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 4463fi 4464 4465if test "$solaris" = "no" ; then 4466 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 4467 LDFLAGS="-Wl,--warn-common $LDFLAGS" 4468 fi 4469fi 4470 4471# test if pod2man has --utf8 option 4472if pod2man --help | grep -q utf8; then 4473 POD2MAN="pod2man --utf8" 4474else 4475 POD2MAN="pod2man" 4476fi 4477 4478# Use ASLR, no-SEH and DEP if available 4479if test "$mingw32" = "yes" ; then 4480 for flag in --dynamicbase --no-seh --nxcompat; do 4481 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then 4482 LDFLAGS="-Wl,$flag $LDFLAGS" 4483 fi 4484 done 4485fi 4486 4487qemu_confdir=$sysconfdir$confsuffix 4488qemu_moddir=$libdir$confsuffix 4489qemu_datadir=$datadir$confsuffix 4490qemu_localedir="$datadir/locale" 4491 4492tools="" 4493if test "$want_tools" = "yes" ; then 4494 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" 4495 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 4496 tools="qemu-nbd\$(EXESUF) $tools" 4497 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 4498 fi 4499fi 4500if test "$softmmu" = yes ; then 4501 if test "$virtfs" != no ; then 4502 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then 4503 virtfs=yes 4504 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 4505 else 4506 if test "$virtfs" = yes; then 4507 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel" 4508 fi 4509 virtfs=no 4510 fi 4511 fi 4512fi 4513 4514# Probe for guest agent support/options 4515 4516if [ "$guest_agent" != "no" ]; then 4517 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 4518 tools="qemu-ga $tools" 4519 guest_agent=yes 4520 elif [ "$guest_agent" != yes ]; then 4521 guest_agent=no 4522 else 4523 error_exit "Guest agent is not supported on this platform" 4524 fi 4525fi 4526 4527# Guest agent Window MSI package 4528 4529if test "$guest_agent" != yes; then 4530 if test "$guest_agent_msi" = yes; then 4531 error_exit "MSI guest agent package requires guest agent enabled" 4532 fi 4533 guest_agent_msi=no 4534elif test "$mingw32" != "yes"; then 4535 if test "$guest_agent_msi" = "yes"; then 4536 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 4537 fi 4538 guest_agent_msi=no 4539elif ! has wixl; then 4540 if test "$guest_agent_msi" = "yes"; then 4541 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 4542 fi 4543 guest_agent_msi=no 4544else 4545 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 4546 # disabled explicitly 4547 if test "$guest_agent_msi" != "no"; then 4548 guest_agent_msi=yes 4549 fi 4550fi 4551 4552if test "$guest_agent_msi" = "yes"; then 4553 if test "$guest_agent_with_vss" = "yes"; then 4554 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 4555 fi 4556 4557 if test "$QEMU_GA_MANUFACTURER" = ""; then 4558 QEMU_GA_MANUFACTURER=QEMU 4559 fi 4560 4561 if test "$QEMU_GA_DISTRO" = ""; then 4562 QEMU_GA_DISTRO=Linux 4563 fi 4564 4565 if test "$QEMU_GA_VERSION" = ""; then 4566 QEMU_GA_VERSION=`cat $source_path/VERSION` 4567 fi 4568 4569 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin" 4570 4571 case "$cpu" in 4572 x86_64) 4573 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 4574 ;; 4575 i386) 4576 QEMU_GA_MSI_ARCH="-D Arch=32" 4577 ;; 4578 *) 4579 error_exit "CPU $cpu not supported for building installation package" 4580 ;; 4581 esac 4582fi 4583 4584# Mac OS X ships with a broken assembler 4585roms= 4586if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 4587 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 4588 "$softmmu" = yes ; then 4589 roms="optionrom" 4590fi 4591if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 4592 roms="$roms spapr-rtas" 4593fi 4594 4595if test "$cpu" = "s390x" ; then 4596 roms="$roms s390-ccw" 4597fi 4598 4599# Probe for the need for relocating the user-only binary. 4600if test "$pie" = "no" ; then 4601 textseg_addr= 4602 case "$cpu" in 4603 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 4604 # ??? Rationale for choosing this address 4605 textseg_addr=0x60000000 4606 ;; 4607 mips) 4608 # A 256M aligned address, high in the address space, with enough 4609 # room for the code_gen_buffer above it before the stack. 4610 textseg_addr=0x60000000 4611 ;; 4612 esac 4613 if [ -n "$textseg_addr" ]; then 4614 cat > $TMPC <<EOF 4615 int main(void) { return 0; } 4616EOF 4617 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 4618 if ! compile_prog "" "$textseg_ldflags"; then 4619 # In case ld does not support -Ttext-segment, edit the default linker 4620 # script via sed to set the .text start addr. This is needed on FreeBSD 4621 # at least. 4622 $ld --verbose | sed \ 4623 -e '1,/==================================================/d' \ 4624 -e '/==================================================/,$d' \ 4625 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 4626 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 4627 textseg_ldflags="-Wl,-T../config-host.ld" 4628 fi 4629 fi 4630fi 4631 4632# prepend pixman and ftd flags after all config tests are done 4633QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 4634libs_softmmu="$pixman_libs $libs_softmmu" 4635 4636echo "Install prefix $prefix" 4637echo "BIOS directory `eval echo $qemu_datadir`" 4638echo "binary directory `eval echo $bindir`" 4639echo "library directory `eval echo $libdir`" 4640echo "module directory `eval echo $qemu_moddir`" 4641echo "libexec directory `eval echo $libexecdir`" 4642echo "include directory `eval echo $includedir`" 4643echo "config directory `eval echo $sysconfdir`" 4644if test "$mingw32" = "no" ; then 4645echo "local state directory `eval echo $local_statedir`" 4646echo "Manual directory `eval echo $mandir`" 4647echo "ELF interp prefix $interp_prefix" 4648else 4649echo "local state directory queried at runtime" 4650echo "Windows SDK $win_sdk" 4651fi 4652echo "Source path $source_path" 4653echo "C compiler $cc" 4654echo "Host C compiler $host_cc" 4655echo "C++ compiler $cxx" 4656echo "Objective-C compiler $objcc" 4657echo "ARFLAGS $ARFLAGS" 4658echo "CFLAGS $CFLAGS" 4659echo "QEMU_CFLAGS $QEMU_CFLAGS" 4660echo "LDFLAGS $LDFLAGS" 4661echo "make $make" 4662echo "install $install" 4663echo "python $python" 4664if test "$slirp" = "yes" ; then 4665 echo "smbd $smbd" 4666fi 4667echo "module support $modules" 4668echo "host CPU $cpu" 4669echo "host big endian $bigendian" 4670echo "target list $target_list" 4671echo "tcg debug enabled $debug_tcg" 4672echo "gprof enabled $gprof" 4673echo "sparse enabled $sparse" 4674echo "strip binaries $strip_opt" 4675echo "profiler $profiler" 4676echo "static build $static" 4677if test "$darwin" = "yes" ; then 4678 echo "Cocoa support $cocoa" 4679fi 4680echo "pixman $pixman" 4681echo "SDL support $sdl" 4682echo "GTK support $gtk" 4683echo "GTK GL support $gtk_gl" 4684echo "GNUTLS support $gnutls" 4685echo "GNUTLS hash $gnutls_hash" 4686echo "libgcrypt $gcrypt" 4687echo "nettle $nettle ${nettle+($nettle_version)}" 4688echo "libtasn1 $tasn1" 4689echo "VTE support $vte" 4690echo "curses support $curses" 4691echo "virgl support $virglrenderer" 4692echo "curl support $curl" 4693echo "mingw32 support $mingw32" 4694echo "Audio drivers $audio_drv_list" 4695echo "Block whitelist (rw) $block_drv_rw_whitelist" 4696echo "Block whitelist (ro) $block_drv_ro_whitelist" 4697echo "VirtFS support $virtfs" 4698echo "VNC support $vnc" 4699if test "$vnc" = "yes" ; then 4700 echo "VNC SASL support $vnc_sasl" 4701 echo "VNC JPEG support $vnc_jpeg" 4702 echo "VNC PNG support $vnc_png" 4703fi 4704if test -n "$sparc_cpu"; then 4705 echo "Target Sparc Arch $sparc_cpu" 4706fi 4707echo "xen support $xen" 4708if test "$xen" = "yes" ; then 4709 echo "xen ctrl version $xen_ctrl_version" 4710fi 4711echo "brlapi support $brlapi" 4712echo "bluez support $bluez" 4713echo "Documentation $docs" 4714echo "PIE $pie" 4715echo "vde support $vde" 4716echo "netmap support $netmap" 4717echo "Linux AIO support $linux_aio" 4718echo "ATTR/XATTR support $attr" 4719echo "Install blobs $blobs" 4720echo "KVM support $kvm" 4721echo "RDMA support $rdma" 4722echo "TCG interpreter $tcg_interpreter" 4723echo "fdt support $fdt" 4724echo "preadv support $preadv" 4725echo "fdatasync $fdatasync" 4726echo "madvise $madvise" 4727echo "posix_madvise $posix_madvise" 4728echo "sigev_thread_id $sigev_thread_id" 4729echo "uuid support $uuid" 4730echo "libcap-ng support $cap_ng" 4731echo "vhost-net support $vhost_net" 4732echo "vhost-scsi support $vhost_scsi" 4733echo "Trace backends $trace_backends" 4734if test "$trace_backend" = "simple"; then 4735echo "Trace output file $trace_file-<pid>" 4736fi 4737if test "$spice" = "yes"; then 4738echo "spice support $spice ($spice_protocol_version/$spice_server_version)" 4739else 4740echo "spice support $spice" 4741fi 4742echo "rbd support $rbd" 4743echo "xfsctl support $xfs" 4744echo "smartcard support $smartcard" 4745echo "libusb $libusb" 4746echo "usb net redir $usb_redir" 4747echo "OpenGL support $opengl" 4748echo "libiscsi support $libiscsi" 4749echo "libnfs support $libnfs" 4750echo "build guest agent $guest_agent" 4751echo "QGA VSS support $guest_agent_with_vss" 4752echo "QGA w32 disk info $guest_agent_ntddscsi" 4753echo "QGA MSI support $guest_agent_msi" 4754echo "seccomp support $seccomp" 4755echo "coroutine backend $coroutine" 4756echo "coroutine pool $coroutine_pool" 4757echo "GlusterFS support $glusterfs" 4758echo "Archipelago support $archipelago" 4759echo "gcov $gcov_tool" 4760echo "gcov enabled $gcov" 4761echo "TPM support $tpm" 4762echo "libssh2 support $libssh2" 4763echo "TPM passthrough $tpm_passthrough" 4764echo "QOM debugging $qom_cast_debug" 4765echo "vhdx $vhdx" 4766echo "lzo support $lzo" 4767echo "snappy support $snappy" 4768echo "bzip2 support $bzip2" 4769echo "NUMA host support $numa" 4770echo "tcmalloc support $tcmalloc" 4771echo "jemalloc support $jemalloc" 4772 4773if test "$sdl_too_old" = "yes"; then 4774echo "-> Your SDL version is too old - please upgrade to have SDL support" 4775fi 4776 4777config_host_mak="config-host.mak" 4778 4779echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 4780 4781echo "# Automatically generated by configure - do not modify" > $config_host_mak 4782echo >> $config_host_mak 4783 4784echo all: >> $config_host_mak 4785echo "prefix=$prefix" >> $config_host_mak 4786echo "bindir=$bindir" >> $config_host_mak 4787echo "libdir=$libdir" >> $config_host_mak 4788echo "libexecdir=$libexecdir" >> $config_host_mak 4789echo "includedir=$includedir" >> $config_host_mak 4790echo "mandir=$mandir" >> $config_host_mak 4791echo "sysconfdir=$sysconfdir" >> $config_host_mak 4792echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 4793echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 4794echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 4795echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 4796if test "$mingw32" = "no" ; then 4797 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 4798fi 4799echo "qemu_helperdir=$libexecdir" >> $config_host_mak 4800echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak 4801echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak 4802echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 4803echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 4804 4805echo "ARCH=$ARCH" >> $config_host_mak 4806 4807if test "$debug_tcg" = "yes" ; then 4808 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 4809fi 4810if test "$strip_opt" = "yes" ; then 4811 echo "STRIP=${strip}" >> $config_host_mak 4812fi 4813if test "$bigendian" = "yes" ; then 4814 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 4815fi 4816if test "$mingw32" = "yes" ; then 4817 echo "CONFIG_WIN32=y" >> $config_host_mak 4818 rc_version=`cat $source_path/VERSION` 4819 version_major=${rc_version%%.*} 4820 rc_version=${rc_version#*.} 4821 version_minor=${rc_version%%.*} 4822 rc_version=${rc_version#*.} 4823 version_subminor=${rc_version%%.*} 4824 version_micro=0 4825 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 4826 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 4827 if test "$guest_agent_with_vss" = "yes" ; then 4828 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 4829 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 4830 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 4831 fi 4832 if test "$guest_agent_ntddscsi" = "yes" ; then 4833 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 4834 fi 4835 if test "$guest_agent_msi" = "yes"; then 4836 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 4837 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 4838 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 4839 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 4840 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 4841 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 4842 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 4843 fi 4844else 4845 echo "CONFIG_POSIX=y" >> $config_host_mak 4846fi 4847 4848if test "$linux" = "yes" ; then 4849 echo "CONFIG_LINUX=y" >> $config_host_mak 4850fi 4851 4852if test "$darwin" = "yes" ; then 4853 echo "CONFIG_DARWIN=y" >> $config_host_mak 4854fi 4855 4856if test "$aix" = "yes" ; then 4857 echo "CONFIG_AIX=y" >> $config_host_mak 4858fi 4859 4860if test "$solaris" = "yes" ; then 4861 echo "CONFIG_SOLARIS=y" >> $config_host_mak 4862 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak 4863 if test "$needs_libsunmath" = "yes" ; then 4864 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak 4865 fi 4866fi 4867if test "$haiku" = "yes" ; then 4868 echo "CONFIG_HAIKU=y" >> $config_host_mak 4869fi 4870if test "$static" = "yes" ; then 4871 echo "CONFIG_STATIC=y" >> $config_host_mak 4872fi 4873if test "$profiler" = "yes" ; then 4874 echo "CONFIG_PROFILER=y" >> $config_host_mak 4875fi 4876if test "$slirp" = "yes" ; then 4877 echo "CONFIG_SLIRP=y" >> $config_host_mak 4878 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 4879fi 4880if test "$vde" = "yes" ; then 4881 echo "CONFIG_VDE=y" >> $config_host_mak 4882fi 4883if test "$netmap" = "yes" ; then 4884 echo "CONFIG_NETMAP=y" >> $config_host_mak 4885fi 4886if test "$l2tpv3" = "yes" ; then 4887 echo "CONFIG_L2TPV3=y" >> $config_host_mak 4888fi 4889if test "$cap_ng" = "yes" ; then 4890 echo "CONFIG_LIBCAP=y" >> $config_host_mak 4891fi 4892echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 4893for drv in $audio_drv_list; do 4894 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'` 4895 echo "$def=y" >> $config_host_mak 4896done 4897if test "$audio_pt_int" = "yes" ; then 4898 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 4899fi 4900if test "$audio_win_int" = "yes" ; then 4901 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 4902fi 4903echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 4904echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 4905if test "$vnc" = "yes" ; then 4906 echo "CONFIG_VNC=y" >> $config_host_mak 4907fi 4908if test "$vnc_sasl" = "yes" ; then 4909 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 4910fi 4911if test "$vnc_jpeg" = "yes" ; then 4912 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 4913fi 4914if test "$vnc_png" = "yes" ; then 4915 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 4916fi 4917if test "$fnmatch" = "yes" ; then 4918 echo "CONFIG_FNMATCH=y" >> $config_host_mak 4919fi 4920if test "$uuid" = "yes" ; then 4921 echo "CONFIG_UUID=y" >> $config_host_mak 4922fi 4923if test "$xfs" = "yes" ; then 4924 echo "CONFIG_XFS=y" >> $config_host_mak 4925fi 4926qemu_version=`head $source_path/VERSION` 4927echo "VERSION=$qemu_version" >>$config_host_mak 4928echo "PKGVERSION=$pkgversion" >>$config_host_mak 4929echo "SRC_PATH=$source_path" >> $config_host_mak 4930echo "TARGET_DIRS=$target_list" >> $config_host_mak 4931if [ "$docs" = "yes" ] ; then 4932 echo "BUILD_DOCS=yes" >> $config_host_mak 4933fi 4934if test "$modules" = "yes"; then 4935 # $shacmd can generate a hash started with digit, which the compiler doesn't 4936 # like as an symbol. So prefix it with an underscore 4937 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak 4938 echo "CONFIG_MODULES=y" >> $config_host_mak 4939fi 4940if test "$sdl" = "yes" ; then 4941 echo "CONFIG_SDL=y" >> $config_host_mak 4942 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 4943 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 4944fi 4945if test "$cocoa" = "yes" ; then 4946 echo "CONFIG_COCOA=y" >> $config_host_mak 4947fi 4948if test "$curses" = "yes" ; then 4949 echo "CONFIG_CURSES=y" >> $config_host_mak 4950fi 4951if test "$utimens" = "yes" ; then 4952 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak 4953fi 4954if test "$pipe2" = "yes" ; then 4955 echo "CONFIG_PIPE2=y" >> $config_host_mak 4956fi 4957if test "$accept4" = "yes" ; then 4958 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 4959fi 4960if test "$splice" = "yes" ; then 4961 echo "CONFIG_SPLICE=y" >> $config_host_mak 4962fi 4963if test "$eventfd" = "yes" ; then 4964 echo "CONFIG_EVENTFD=y" >> $config_host_mak 4965fi 4966if test "$memfd" = "yes" ; then 4967 echo "CONFIG_MEMFD=y" >> $config_host_mak 4968fi 4969if test "$fallocate" = "yes" ; then 4970 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 4971fi 4972if test "$fallocate_punch_hole" = "yes" ; then 4973 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 4974fi 4975if test "$fallocate_zero_range" = "yes" ; then 4976 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 4977fi 4978if test "$posix_fallocate" = "yes" ; then 4979 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 4980fi 4981if test "$sync_file_range" = "yes" ; then 4982 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 4983fi 4984if test "$fiemap" = "yes" ; then 4985 echo "CONFIG_FIEMAP=y" >> $config_host_mak 4986fi 4987if test "$dup3" = "yes" ; then 4988 echo "CONFIG_DUP3=y" >> $config_host_mak 4989fi 4990if test "$ppoll" = "yes" ; then 4991 echo "CONFIG_PPOLL=y" >> $config_host_mak 4992fi 4993if test "$prctl_pr_set_timerslack" = "yes" ; then 4994 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 4995fi 4996if test "$epoll" = "yes" ; then 4997 echo "CONFIG_EPOLL=y" >> $config_host_mak 4998fi 4999if test "$epoll_create1" = "yes" ; then 5000 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 5001fi 5002if test "$epoll_pwait" = "yes" ; then 5003 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak 5004fi 5005if test "$sendfile" = "yes" ; then 5006 echo "CONFIG_SENDFILE=y" >> $config_host_mak 5007fi 5008if test "$timerfd" = "yes" ; then 5009 echo "CONFIG_TIMERFD=y" >> $config_host_mak 5010fi 5011if test "$setns" = "yes" ; then 5012 echo "CONFIG_SETNS=y" >> $config_host_mak 5013fi 5014if test "$inotify" = "yes" ; then 5015 echo "CONFIG_INOTIFY=y" >> $config_host_mak 5016fi 5017if test "$inotify1" = "yes" ; then 5018 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 5019fi 5020if test "$byteswap_h" = "yes" ; then 5021 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 5022fi 5023if test "$bswap_h" = "yes" ; then 5024 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 5025fi 5026if test "$curl" = "yes" ; then 5027 echo "CONFIG_CURL=m" >> $config_host_mak 5028 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 5029 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 5030fi 5031if test "$brlapi" = "yes" ; then 5032 echo "CONFIG_BRLAPI=y" >> $config_host_mak 5033fi 5034if test "$bluez" = "yes" ; then 5035 echo "CONFIG_BLUEZ=y" >> $config_host_mak 5036 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 5037fi 5038if test "$glib_subprocess" = "yes" ; then 5039 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak 5040fi 5041echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 5042if test "$gtk" = "yes" ; then 5043 echo "CONFIG_GTK=y" >> $config_host_mak 5044 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak 5045 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 5046 if test "$gtk_gl" = "yes" ; then 5047 echo "CONFIG_GTK_GL=y" >> $config_host_mak 5048 fi 5049fi 5050if test "$gnutls" = "yes" ; then 5051 echo "CONFIG_GNUTLS=y" >> $config_host_mak 5052fi 5053if test "$gnutls_hash" = "yes" ; then 5054 echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak 5055fi 5056if test "$gcrypt" = "yes" ; then 5057 echo "CONFIG_GCRYPT=y" >> $config_host_mak 5058fi 5059if test "$nettle" = "yes" ; then 5060 echo "CONFIG_NETTLE=y" >> $config_host_mak 5061 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 5062fi 5063if test "$tasn1" = "yes" ; then 5064 echo "CONFIG_TASN1=y" >> $config_host_mak 5065fi 5066if test "$vte" = "yes" ; then 5067 echo "CONFIG_VTE=y" >> $config_host_mak 5068 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 5069fi 5070if test "$virglrenderer" = "yes" ; then 5071 echo "CONFIG_VIRGL=y" >> $config_host_mak 5072 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 5073 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 5074fi 5075if test "$xen" = "yes" ; then 5076 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 5077 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 5078fi 5079if test "$linux_aio" = "yes" ; then 5080 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 5081fi 5082if test "$attr" = "yes" ; then 5083 echo "CONFIG_ATTR=y" >> $config_host_mak 5084fi 5085if test "$libattr" = "yes" ; then 5086 echo "CONFIG_LIBATTR=y" >> $config_host_mak 5087fi 5088if test "$virtfs" = "yes" ; then 5089 echo "CONFIG_VIRTFS=y" >> $config_host_mak 5090fi 5091if test "$vhost_scsi" = "yes" ; then 5092 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 5093fi 5094if test "$vhost_net" = "yes" ; then 5095 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 5096fi 5097if test "$blobs" = "yes" ; then 5098 echo "INSTALL_BLOBS=yes" >> $config_host_mak 5099fi 5100if test "$iovec" = "yes" ; then 5101 echo "CONFIG_IOVEC=y" >> $config_host_mak 5102fi 5103if test "$preadv" = "yes" ; then 5104 echo "CONFIG_PREADV=y" >> $config_host_mak 5105fi 5106if test "$fdt" = "yes" ; then 5107 echo "CONFIG_FDT=y" >> $config_host_mak 5108fi 5109if test "$signalfd" = "yes" ; then 5110 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 5111fi 5112if test "$tcg_interpreter" = "yes" ; then 5113 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 5114fi 5115if test "$fdatasync" = "yes" ; then 5116 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 5117fi 5118if test "$madvise" = "yes" ; then 5119 echo "CONFIG_MADVISE=y" >> $config_host_mak 5120fi 5121if test "$posix_madvise" = "yes" ; then 5122 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 5123fi 5124if test "$sigev_thread_id" = "yes" ; then 5125 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak 5126fi 5127 5128if test "$spice" = "yes" ; then 5129 echo "CONFIG_SPICE=y" >> $config_host_mak 5130fi 5131 5132if test "$smartcard" = "yes" ; then 5133 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 5134fi 5135 5136if test "$libusb" = "yes" ; then 5137 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 5138fi 5139 5140if test "$usb_redir" = "yes" ; then 5141 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 5142fi 5143 5144if test "$opengl" = "yes" ; then 5145 echo "CONFIG_OPENGL=y" >> $config_host_mak 5146 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 5147 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 5148fi 5149 5150if test "$lzo" = "yes" ; then 5151 echo "CONFIG_LZO=y" >> $config_host_mak 5152fi 5153 5154if test "$snappy" = "yes" ; then 5155 echo "CONFIG_SNAPPY=y" >> $config_host_mak 5156fi 5157 5158if test "$bzip2" = "yes" ; then 5159 echo "CONFIG_BZIP2=y" >> $config_host_mak 5160 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 5161fi 5162 5163if test "$libiscsi" = "yes" ; then 5164 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 5165 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 5166 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 5167fi 5168 5169if test "$libnfs" = "yes" ; then 5170 echo "CONFIG_LIBNFS=y" >> $config_host_mak 5171fi 5172 5173if test "$seccomp" = "yes"; then 5174 echo "CONFIG_SECCOMP=y" >> $config_host_mak 5175fi 5176 5177# XXX: suppress that 5178if [ "$bsd" = "yes" ] ; then 5179 echo "CONFIG_BSD=y" >> $config_host_mak 5180fi 5181 5182if test "$zero_malloc" = "yes" ; then 5183 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak 5184fi 5185if test "$localtime_r" = "yes" ; then 5186 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 5187fi 5188if test "$qom_cast_debug" = "yes" ; then 5189 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 5190fi 5191if test "$rbd" = "yes" ; then 5192 echo "CONFIG_RBD=m" >> $config_host_mak 5193 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 5194 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 5195fi 5196 5197echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 5198if test "$coroutine_pool" = "yes" ; then 5199 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 5200else 5201 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 5202fi 5203 5204if test "$open_by_handle_at" = "yes" ; then 5205 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 5206fi 5207 5208if test "$linux_magic_h" = "yes" ; then 5209 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 5210fi 5211 5212if test "$pragma_diagnostic_available" = "yes" ; then 5213 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 5214fi 5215 5216if test "$valgrind_h" = "yes" ; then 5217 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 5218fi 5219 5220if test "$has_environ" = "yes" ; then 5221 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 5222fi 5223 5224if test "$cpuid_h" = "yes" ; then 5225 echo "CONFIG_CPUID_H=y" >> $config_host_mak 5226fi 5227 5228if test "$int128" = "yes" ; then 5229 echo "CONFIG_INT128=y" >> $config_host_mak 5230fi 5231 5232if test "$getauxval" = "yes" ; then 5233 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 5234fi 5235 5236if test "$glusterfs" = "yes" ; then 5237 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 5238 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 5239 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 5240fi 5241 5242if test "$glusterfs_discard" = "yes" ; then 5243 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 5244fi 5245 5246if test "$glusterfs_zerofill" = "yes" ; then 5247 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 5248fi 5249 5250if test "$archipelago" = "yes" ; then 5251 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak 5252 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak 5253fi 5254 5255if test "$libssh2" = "yes" ; then 5256 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 5257 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 5258 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 5259fi 5260 5261if test "$vhdx" = "yes" ; then 5262 echo "CONFIG_VHDX=y" >> $config_host_mak 5263fi 5264 5265# USB host support 5266if test "$libusb" = "yes"; then 5267 echo "HOST_USB=libusb legacy" >> $config_host_mak 5268else 5269 echo "HOST_USB=stub" >> $config_host_mak 5270fi 5271 5272# TPM passthrough support? 5273if test "$tpm" = "yes"; then 5274 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 5275 if test "$tpm_passthrough" = "yes"; then 5276 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 5277 fi 5278fi 5279 5280echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 5281if have_backend "nop"; then 5282 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 5283fi 5284if have_backend "simple"; then 5285 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 5286 # Set the appropriate trace file. 5287 trace_file="\"$trace_file-\" FMT_pid" 5288fi 5289if have_backend "stderr"; then 5290 echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak 5291fi 5292if have_backend "ust"; then 5293 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 5294fi 5295if have_backend "dtrace"; then 5296 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 5297 if test "$trace_backend_stap" = "yes" ; then 5298 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 5299 fi 5300fi 5301if have_backend "ftrace"; then 5302 if test "$linux" = "yes" ; then 5303 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 5304 else 5305 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 5306 fi 5307fi 5308echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 5309 5310if test "$rdma" = "yes" ; then 5311 echo "CONFIG_RDMA=y" >> $config_host_mak 5312fi 5313 5314# Hold two types of flag: 5315# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 5316# a thread we have a handle to 5317# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 5318# platform 5319if test "$pthread_setname_np" = "yes" ; then 5320 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 5321 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 5322fi 5323 5324if test "$tcg_interpreter" = "yes"; then 5325 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 5326elif test "$ARCH" = "sparc64" ; then 5327 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 5328elif test "$ARCH" = "s390x" ; then 5329 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 5330elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 5331 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 5332elif test "$ARCH" = "ppc64" ; then 5333 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 5334else 5335 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 5336fi 5337QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES" 5338 5339echo "TOOLS=$tools" >> $config_host_mak 5340echo "ROMS=$roms" >> $config_host_mak 5341echo "MAKE=$make" >> $config_host_mak 5342echo "INSTALL=$install" >> $config_host_mak 5343echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 5344echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 5345if test -n "$libtool"; then 5346 echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak 5347 echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak 5348else 5349 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 5350 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 5351fi 5352echo "PYTHON=$python" >> $config_host_mak 5353echo "CC=$cc" >> $config_host_mak 5354if $iasl -h > /dev/null 2>&1; then 5355 echo "IASL=$iasl" >> $config_host_mak 5356fi 5357echo "CC_I386=$cc_i386" >> $config_host_mak 5358echo "HOST_CC=$host_cc" >> $config_host_mak 5359echo "CXX=$cxx" >> $config_host_mak 5360echo "OBJCC=$objcc" >> $config_host_mak 5361echo "AR=$ar" >> $config_host_mak 5362echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 5363echo "AS=$as" >> $config_host_mak 5364echo "CPP=$cpp" >> $config_host_mak 5365echo "OBJCOPY=$objcopy" >> $config_host_mak 5366echo "LD=$ld" >> $config_host_mak 5367echo "NM=$nm" >> $config_host_mak 5368echo "WINDRES=$windres" >> $config_host_mak 5369echo "LIBTOOL=$libtool" >> $config_host_mak 5370echo "CFLAGS=$CFLAGS" >> $config_host_mak 5371echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 5372echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 5373echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 5374if test "$sparse" = "yes" ; then 5375 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 5376 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 5377 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 5378 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 5379 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 5380fi 5381if test "$cross_prefix" != ""; then 5382 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 5383else 5384 echo "AUTOCONF_HOST := " >> $config_host_mak 5385fi 5386echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 5387echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 5388echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak 5389echo "LIBS+=$LIBS" >> $config_host_mak 5390echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 5391echo "EXESUF=$EXESUF" >> $config_host_mak 5392echo "DSOSUF=$DSOSUF" >> $config_host_mak 5393echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 5394echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 5395echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 5396echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 5397echo "POD2MAN=$POD2MAN" >> $config_host_mak 5398echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 5399if test "$gcov" = "yes" ; then 5400 echo "CONFIG_GCOV=y" >> $config_host_mak 5401 echo "GCOV=$gcov_tool" >> $config_host_mak 5402fi 5403 5404# use included Linux headers 5405if test "$linux" = "yes" ; then 5406 mkdir -p linux-headers 5407 case "$cpu" in 5408 i386|x86_64|x32) 5409 linux_arch=x86 5410 ;; 5411 ppcemb|ppc|ppc64) 5412 linux_arch=powerpc 5413 ;; 5414 s390x) 5415 linux_arch=s390 5416 ;; 5417 aarch64) 5418 linux_arch=arm64 5419 ;; 5420 mips64) 5421 linux_arch=mips 5422 ;; 5423 *) 5424 # For most CPUs the kernel architecture name and QEMU CPU name match. 5425 linux_arch="$cpu" 5426 ;; 5427 esac 5428 # For non-KVM architectures we will not have asm headers 5429 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 5430 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 5431 fi 5432fi 5433 5434for target in $target_list; do 5435target_dir="$target" 5436config_target_mak=$target_dir/config-target.mak 5437target_name=`echo $target | cut -d '-' -f 1` 5438target_bigendian="no" 5439 5440case "$target_name" in 5441 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 5442 target_bigendian=yes 5443 ;; 5444esac 5445target_softmmu="no" 5446target_user_only="no" 5447target_linux_user="no" 5448target_bsd_user="no" 5449case "$target" in 5450 ${target_name}-softmmu) 5451 target_softmmu="yes" 5452 ;; 5453 ${target_name}-linux-user) 5454 if test "$linux" != "yes" ; then 5455 error_exit "Target '$target' is only available on a Linux host" 5456 fi 5457 target_user_only="yes" 5458 target_linux_user="yes" 5459 ;; 5460 ${target_name}-bsd-user) 5461 if test "$bsd" != "yes" ; then 5462 error_exit "Target '$target' is only available on a BSD host" 5463 fi 5464 target_user_only="yes" 5465 target_bsd_user="yes" 5466 ;; 5467 *) 5468 error_exit "Target '$target' not recognised" 5469 exit 1 5470 ;; 5471esac 5472 5473mkdir -p $target_dir 5474echo "# Automatically generated by configure - do not modify" > $config_target_mak 5475 5476bflt="no" 5477interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"` 5478gdb_xml_files="" 5479 5480TARGET_ARCH="$target_name" 5481TARGET_BASE_ARCH="" 5482TARGET_ABI_DIR="" 5483 5484case "$target_name" in 5485 i386) 5486 ;; 5487 x86_64) 5488 TARGET_BASE_ARCH=i386 5489 ;; 5490 alpha) 5491 ;; 5492 arm|armeb) 5493 TARGET_ARCH=arm 5494 bflt="yes" 5495 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 5496 ;; 5497 aarch64) 5498 TARGET_BASE_ARCH=arm 5499 bflt="yes" 5500 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 5501 ;; 5502 cris) 5503 ;; 5504 lm32) 5505 ;; 5506 m68k) 5507 bflt="yes" 5508 gdb_xml_files="cf-core.xml cf-fp.xml" 5509 ;; 5510 microblaze|microblazeel) 5511 TARGET_ARCH=microblaze 5512 bflt="yes" 5513 ;; 5514 mips|mipsel) 5515 TARGET_ARCH=mips 5516 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 5517 ;; 5518 mipsn32|mipsn32el) 5519 TARGET_ARCH=mips64 5520 TARGET_BASE_ARCH=mips 5521 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 5522 echo "TARGET_ABI32=y" >> $config_target_mak 5523 ;; 5524 mips64|mips64el) 5525 TARGET_ARCH=mips64 5526 TARGET_BASE_ARCH=mips 5527 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 5528 ;; 5529 moxie) 5530 ;; 5531 or32) 5532 TARGET_ARCH=openrisc 5533 TARGET_BASE_ARCH=openrisc 5534 ;; 5535 ppc) 5536 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5537 ;; 5538 ppcemb) 5539 TARGET_BASE_ARCH=ppc 5540 TARGET_ABI_DIR=ppc 5541 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5542 ;; 5543 ppc64) 5544 TARGET_BASE_ARCH=ppc 5545 TARGET_ABI_DIR=ppc 5546 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5547 ;; 5548 ppc64le) 5549 TARGET_ARCH=ppc64 5550 TARGET_BASE_ARCH=ppc 5551 TARGET_ABI_DIR=ppc 5552 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5553 ;; 5554 ppc64abi32) 5555 TARGET_ARCH=ppc64 5556 TARGET_BASE_ARCH=ppc 5557 TARGET_ABI_DIR=ppc 5558 echo "TARGET_ABI32=y" >> $config_target_mak 5559 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5560 ;; 5561 sh4|sh4eb) 5562 TARGET_ARCH=sh4 5563 bflt="yes" 5564 ;; 5565 sparc) 5566 ;; 5567 sparc64) 5568 TARGET_BASE_ARCH=sparc 5569 ;; 5570 sparc32plus) 5571 TARGET_ARCH=sparc64 5572 TARGET_BASE_ARCH=sparc 5573 TARGET_ABI_DIR=sparc 5574 echo "TARGET_ABI32=y" >> $config_target_mak 5575 ;; 5576 s390x) 5577 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml" 5578 ;; 5579 tilegx) 5580 ;; 5581 tricore) 5582 ;; 5583 unicore32) 5584 ;; 5585 xtensa|xtensaeb) 5586 TARGET_ARCH=xtensa 5587 ;; 5588 *) 5589 error_exit "Unsupported target CPU" 5590 ;; 5591esac 5592# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 5593if [ "$TARGET_BASE_ARCH" = "" ]; then 5594 TARGET_BASE_ARCH=$TARGET_ARCH 5595fi 5596 5597symlink "$source_path/Makefile.target" "$target_dir/Makefile" 5598 5599upper() { 5600 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 5601} 5602 5603target_arch_name="`upper $TARGET_ARCH`" 5604echo "TARGET_$target_arch_name=y" >> $config_target_mak 5605echo "TARGET_NAME=$target_name" >> $config_target_mak 5606echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 5607if [ "$TARGET_ABI_DIR" = "" ]; then 5608 TARGET_ABI_DIR=$TARGET_ARCH 5609fi 5610echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 5611if [ "$HOST_VARIANT_DIR" != "" ]; then 5612 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 5613fi 5614case "$target_name" in 5615 i386|x86_64) 5616 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then 5617 echo "CONFIG_XEN=y" >> $config_target_mak 5618 if test "$xen_pci_passthrough" = yes; then 5619 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 5620 fi 5621 fi 5622 ;; 5623 *) 5624esac 5625case "$target_name" in 5626 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips) 5627 # Make sure the target and host cpus are compatible 5628 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \ 5629 \( "$target_name" = "$cpu" -o \ 5630 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \ 5631 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \ 5632 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \ 5633 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \ 5634 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \ 5635 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \ 5636 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \ 5637 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \ 5638 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then 5639 echo "CONFIG_KVM=y" >> $config_target_mak 5640 if test "$vhost_net" = "yes" ; then 5641 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 5642 fi 5643 fi 5644esac 5645if test "$target_bigendian" = "yes" ; then 5646 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 5647fi 5648if test "$target_softmmu" = "yes" ; then 5649 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 5650fi 5651if test "$target_user_only" = "yes" ; then 5652 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 5653 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 5654fi 5655if test "$target_linux_user" = "yes" ; then 5656 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 5657fi 5658list="" 5659if test ! -z "$gdb_xml_files" ; then 5660 for x in $gdb_xml_files; do 5661 list="$list $source_path/gdb-xml/$x" 5662 done 5663 echo "TARGET_XML_FILES=$list" >> $config_target_mak 5664fi 5665 5666if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 5667 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 5668fi 5669if test "$target_bsd_user" = "yes" ; then 5670 echo "CONFIG_BSD_USER=y" >> $config_target_mak 5671fi 5672 5673# generate QEMU_CFLAGS/LDFLAGS for targets 5674 5675cflags="" 5676ldflags="" 5677 5678disas_config() { 5679 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 5680 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 5681} 5682 5683for i in $ARCH $TARGET_BASE_ARCH ; do 5684 case "$i" in 5685 alpha) 5686 disas_config "ALPHA" 5687 ;; 5688 aarch64) 5689 if test -n "${cxx}"; then 5690 disas_config "ARM_A64" 5691 fi 5692 ;; 5693 arm) 5694 disas_config "ARM" 5695 if test -n "${cxx}"; then 5696 disas_config "ARM_A64" 5697 fi 5698 ;; 5699 cris) 5700 disas_config "CRIS" 5701 ;; 5702 hppa) 5703 disas_config "HPPA" 5704 ;; 5705 i386|x86_64|x32) 5706 disas_config "I386" 5707 ;; 5708 ia64*) 5709 disas_config "IA64" 5710 ;; 5711 lm32) 5712 disas_config "LM32" 5713 ;; 5714 m68k) 5715 disas_config "M68K" 5716 ;; 5717 microblaze*) 5718 disas_config "MICROBLAZE" 5719 ;; 5720 mips*) 5721 disas_config "MIPS" 5722 ;; 5723 moxie*) 5724 disas_config "MOXIE" 5725 ;; 5726 or32) 5727 disas_config "OPENRISC" 5728 ;; 5729 ppc*) 5730 disas_config "PPC" 5731 ;; 5732 s390*) 5733 disas_config "S390" 5734 ;; 5735 sh4) 5736 disas_config "SH4" 5737 ;; 5738 sparc*) 5739 disas_config "SPARC" 5740 ;; 5741 xtensa*) 5742 disas_config "XTENSA" 5743 ;; 5744 esac 5745done 5746if test "$tcg_interpreter" = "yes" ; then 5747 disas_config "TCI" 5748fi 5749 5750case "$ARCH" in 5751alpha) 5752 # Ensure there's only a single GP 5753 cflags="-msmall-data $cflags" 5754;; 5755esac 5756 5757if test "$gprof" = "yes" ; then 5758 echo "TARGET_GPROF=yes" >> $config_target_mak 5759 if test "$target_linux_user" = "yes" ; then 5760 cflags="-p $cflags" 5761 ldflags="-p $ldflags" 5762 fi 5763 if test "$target_softmmu" = "yes" ; then 5764 ldflags="-p $ldflags" 5765 echo "GPROF_CFLAGS=-p" >> $config_target_mak 5766 fi 5767fi 5768 5769if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 5770 ldflags="$ldflags $textseg_ldflags" 5771fi 5772 5773echo "LDFLAGS+=$ldflags" >> $config_target_mak 5774echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 5775 5776done # for target in $targets 5777 5778if [ "$pixman" = "internal" ]; then 5779 echo "config-host.h: subdir-pixman" >> $config_host_mak 5780fi 5781 5782if [ "$dtc_internal" = "yes" ]; then 5783 echo "config-host.h: subdir-dtc" >> $config_host_mak 5784fi 5785 5786if test "$numa" = "yes"; then 5787 echo "CONFIG_NUMA=y" >> $config_host_mak 5788fi 5789 5790if test "$ccache_cpp2" = "yes"; then 5791 echo "export CCACHE_CPP2=y" >> $config_host_mak 5792fi 5793 5794# build tree in object directory in case the source is not in the current directory 5795DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests" 5796DIRS="$DIRS fsdev" 5797DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 5798DIRS="$DIRS roms/seabios roms/vgabios" 5799DIRS="$DIRS qapi-generated" 5800FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 5801FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 5802FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 5803FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 5804FILES="$FILES pc-bios/spapr-rtas/Makefile" 5805FILES="$FILES pc-bios/s390-ccw/Makefile" 5806FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 5807FILES="$FILES pc-bios/qemu-icon.bmp" 5808for bios_file in \ 5809 $source_path/pc-bios/*.bin \ 5810 $source_path/pc-bios/*.aml \ 5811 $source_path/pc-bios/*.rom \ 5812 $source_path/pc-bios/*.dtb \ 5813 $source_path/pc-bios/*.img \ 5814 $source_path/pc-bios/openbios-* \ 5815 $source_path/pc-bios/u-boot.* \ 5816 $source_path/pc-bios/palcode-* 5817do 5818 FILES="$FILES pc-bios/`basename $bios_file`" 5819done 5820for test_file in `find $source_path/tests/acpi-test-data -type f` 5821do 5822 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`" 5823done 5824mkdir -p $DIRS 5825for f in $FILES ; do 5826 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 5827 symlink "$source_path/$f" "$f" 5828 fi 5829done 5830 5831# temporary config to build submodules 5832for rom in seabios vgabios ; do 5833 config_mak=roms/$rom/config.mak 5834 echo "# Automatically generated by configure - do not modify" > $config_mak 5835 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 5836 echo "AS=$as" >> $config_mak 5837 echo "CC=$cc" >> $config_mak 5838 echo "BCC=bcc" >> $config_mak 5839 echo "CPP=$cpp" >> $config_mak 5840 echo "OBJCOPY=objcopy" >> $config_mak 5841 echo "IASL=$iasl" >> $config_mak 5842 echo "LD=$ld" >> $config_mak 5843done 5844 5845# set up qemu-iotests in this build directory 5846iotests_common_env="tests/qemu-iotests/common.env" 5847iotests_check="tests/qemu-iotests/check" 5848 5849echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 5850echo >> "$iotests_common_env" 5851echo "export PYTHON='$python'" >> "$iotests_common_env" 5852 5853if [ ! -e "$iotests_check" ]; then 5854 symlink "$source_path/$iotests_check" "$iotests_check" 5855fi 5856 5857# Save the configure command line for later reuse. 5858cat <<EOD >config.status 5859#!/bin/sh 5860# Generated by configure. 5861# Run this file to recreate the current configuration. 5862# Compiler output produced by configure, useful for debugging 5863# configure, is in config.log if it exists. 5864EOD 5865printf "exec" >>config.status 5866printf " '%s'" "$0" "$@" >>config.status 5867echo >>config.status 5868chmod +x config.status 5869 5870rm -r "$TMPDIR1" 5871