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