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