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