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