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