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