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