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