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 utimensat and futimens are supported 3633utimens=no 3634cat > $TMPC << EOF 3635#define _ATFILE_SOURCE 3636#include <stddef.h> 3637#include <fcntl.h> 3638#include <sys/stat.h> 3639 3640int main(void) 3641{ 3642 utimensat(AT_FDCWD, "foo", NULL, 0); 3643 futimens(0, NULL); 3644 return 0; 3645} 3646EOF 3647if compile_prog "" "" ; then 3648 utimens=yes 3649fi 3650 3651# check if pipe2 is there 3652pipe2=no 3653cat > $TMPC << EOF 3654#include <unistd.h> 3655#include <fcntl.h> 3656 3657int main(void) 3658{ 3659 int pipefd[2]; 3660 return pipe2(pipefd, O_CLOEXEC); 3661} 3662EOF 3663if compile_prog "" "" ; then 3664 pipe2=yes 3665fi 3666 3667# check if accept4 is there 3668accept4=no 3669cat > $TMPC << EOF 3670#include <sys/socket.h> 3671#include <stddef.h> 3672 3673int main(void) 3674{ 3675 accept4(0, NULL, NULL, SOCK_CLOEXEC); 3676 return 0; 3677} 3678EOF 3679if compile_prog "" "" ; then 3680 accept4=yes 3681fi 3682 3683# check if tee/splice is there. vmsplice was added same time. 3684splice=no 3685cat > $TMPC << EOF 3686#include <unistd.h> 3687#include <fcntl.h> 3688#include <limits.h> 3689 3690int main(void) 3691{ 3692 int len, fd = 0; 3693 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 3694 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 3695 return 0; 3696} 3697EOF 3698if compile_prog "" "" ; then 3699 splice=yes 3700fi 3701 3702########################################## 3703# libnuma probe 3704 3705if test "$numa" != "no" ; then 3706 cat > $TMPC << EOF 3707#include <numa.h> 3708int main(void) { return numa_available(); } 3709EOF 3710 3711 if compile_prog "" "-lnuma" ; then 3712 numa=yes 3713 libs_softmmu="-lnuma $libs_softmmu" 3714 else 3715 if test "$numa" = "yes" ; then 3716 feature_not_found "numa" "install numactl devel" 3717 fi 3718 numa=no 3719 fi 3720fi 3721 3722if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 3723 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 3724 exit 1 3725fi 3726 3727########################################## 3728# tcmalloc probe 3729 3730if test "$tcmalloc" = "yes" ; then 3731 cat > $TMPC << EOF 3732#include <stdlib.h> 3733int main(void) { malloc(1); return 0; } 3734EOF 3735 3736 if compile_prog "" "-ltcmalloc" ; then 3737 LIBS="-ltcmalloc $LIBS" 3738 else 3739 feature_not_found "tcmalloc" "install gperftools devel" 3740 fi 3741fi 3742 3743########################################## 3744# jemalloc probe 3745 3746if test "$jemalloc" = "yes" ; then 3747 cat > $TMPC << EOF 3748#include <stdlib.h> 3749int main(void) { malloc(1); return 0; } 3750EOF 3751 3752 if compile_prog "" "-ljemalloc" ; then 3753 LIBS="-ljemalloc $LIBS" 3754 else 3755 feature_not_found "jemalloc" "install jemalloc devel" 3756 fi 3757fi 3758 3759########################################## 3760# signalfd probe 3761signalfd="no" 3762cat > $TMPC << EOF 3763#include <unistd.h> 3764#include <sys/syscall.h> 3765#include <signal.h> 3766int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 3767EOF 3768 3769if compile_prog "" "" ; then 3770 signalfd=yes 3771fi 3772 3773# check if eventfd is supported 3774eventfd=no 3775cat > $TMPC << EOF 3776#include <sys/eventfd.h> 3777 3778int main(void) 3779{ 3780 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 3781} 3782EOF 3783if compile_prog "" "" ; then 3784 eventfd=yes 3785fi 3786 3787# check if memfd is supported 3788memfd=no 3789cat > $TMPC << EOF 3790#include <sys/memfd.h> 3791 3792int main(void) 3793{ 3794 return memfd_create("foo", MFD_ALLOW_SEALING); 3795} 3796EOF 3797if compile_prog "" "" ; then 3798 memfd=yes 3799fi 3800 3801 3802 3803# check for fallocate 3804fallocate=no 3805cat > $TMPC << EOF 3806#include <fcntl.h> 3807 3808int main(void) 3809{ 3810 fallocate(0, 0, 0, 0); 3811 return 0; 3812} 3813EOF 3814if compile_prog "" "" ; then 3815 fallocate=yes 3816fi 3817 3818# check for fallocate hole punching 3819fallocate_punch_hole=no 3820cat > $TMPC << EOF 3821#include <fcntl.h> 3822#include <linux/falloc.h> 3823 3824int main(void) 3825{ 3826 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 3827 return 0; 3828} 3829EOF 3830if compile_prog "" "" ; then 3831 fallocate_punch_hole=yes 3832fi 3833 3834# check that fallocate supports range zeroing inside the file 3835fallocate_zero_range=no 3836cat > $TMPC << EOF 3837#include <fcntl.h> 3838#include <linux/falloc.h> 3839 3840int main(void) 3841{ 3842 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 3843 return 0; 3844} 3845EOF 3846if compile_prog "" "" ; then 3847 fallocate_zero_range=yes 3848fi 3849 3850# check for posix_fallocate 3851posix_fallocate=no 3852cat > $TMPC << EOF 3853#include <fcntl.h> 3854 3855int main(void) 3856{ 3857 posix_fallocate(0, 0, 0); 3858 return 0; 3859} 3860EOF 3861if compile_prog "" "" ; then 3862 posix_fallocate=yes 3863fi 3864 3865# check for sync_file_range 3866sync_file_range=no 3867cat > $TMPC << EOF 3868#include <fcntl.h> 3869 3870int main(void) 3871{ 3872 sync_file_range(0, 0, 0, 0); 3873 return 0; 3874} 3875EOF 3876if compile_prog "" "" ; then 3877 sync_file_range=yes 3878fi 3879 3880# check for linux/fiemap.h and FS_IOC_FIEMAP 3881fiemap=no 3882cat > $TMPC << EOF 3883#include <sys/ioctl.h> 3884#include <linux/fs.h> 3885#include <linux/fiemap.h> 3886 3887int main(void) 3888{ 3889 ioctl(0, FS_IOC_FIEMAP, 0); 3890 return 0; 3891} 3892EOF 3893if compile_prog "" "" ; then 3894 fiemap=yes 3895fi 3896 3897# check for dup3 3898dup3=no 3899cat > $TMPC << EOF 3900#include <unistd.h> 3901 3902int main(void) 3903{ 3904 dup3(0, 0, 0); 3905 return 0; 3906} 3907EOF 3908if compile_prog "" "" ; then 3909 dup3=yes 3910fi 3911 3912# check for ppoll support 3913ppoll=no 3914cat > $TMPC << EOF 3915#include <poll.h> 3916 3917int main(void) 3918{ 3919 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 3920 ppoll(&pfd, 1, 0, 0); 3921 return 0; 3922} 3923EOF 3924if compile_prog "" "" ; then 3925 ppoll=yes 3926fi 3927 3928# check for prctl(PR_SET_TIMERSLACK , ... ) support 3929prctl_pr_set_timerslack=no 3930cat > $TMPC << EOF 3931#include <sys/prctl.h> 3932 3933int main(void) 3934{ 3935 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 3936 return 0; 3937} 3938EOF 3939if compile_prog "" "" ; then 3940 prctl_pr_set_timerslack=yes 3941fi 3942 3943# check for epoll support 3944epoll=no 3945cat > $TMPC << EOF 3946#include <sys/epoll.h> 3947 3948int main(void) 3949{ 3950 epoll_create(0); 3951 return 0; 3952} 3953EOF 3954if compile_prog "" "" ; then 3955 epoll=yes 3956fi 3957 3958# epoll_create1 is a later addition 3959# so we must check separately for its presence 3960epoll_create1=no 3961cat > $TMPC << EOF 3962#include <sys/epoll.h> 3963 3964int main(void) 3965{ 3966 /* Note that we use epoll_create1 as a value, not as 3967 * a function being called. This is necessary so that on 3968 * old SPARC glibc versions where the function was present in 3969 * the library but not declared in the header file we will 3970 * fail the configure check. (Otherwise we will get a compiler 3971 * warning but not an error, and will proceed to fail the 3972 * qemu compile where we compile with -Werror.) 3973 */ 3974 return (int)(uintptr_t)&epoll_create1; 3975} 3976EOF 3977if compile_prog "" "" ; then 3978 epoll_create1=yes 3979fi 3980 3981# check for sendfile support 3982sendfile=no 3983cat > $TMPC << EOF 3984#include <sys/sendfile.h> 3985 3986int main(void) 3987{ 3988 return sendfile(0, 0, 0, 0); 3989} 3990EOF 3991if compile_prog "" "" ; then 3992 sendfile=yes 3993fi 3994 3995# check for timerfd support (glibc 2.8 and newer) 3996timerfd=no 3997cat > $TMPC << EOF 3998#include <sys/timerfd.h> 3999 4000int main(void) 4001{ 4002 return(timerfd_create(CLOCK_REALTIME, 0)); 4003} 4004EOF 4005if compile_prog "" "" ; then 4006 timerfd=yes 4007fi 4008 4009# check for setns and unshare support 4010setns=no 4011cat > $TMPC << EOF 4012#include <sched.h> 4013 4014int main(void) 4015{ 4016 int ret; 4017 ret = setns(0, 0); 4018 ret = unshare(0); 4019 return ret; 4020} 4021EOF 4022if compile_prog "" "" ; then 4023 setns=yes 4024fi 4025 4026# clock_adjtime probe 4027clock_adjtime=no 4028cat > $TMPC <<EOF 4029#include <time.h> 4030 4031int main(void) 4032{ 4033 return clock_adjtime(0, 0); 4034} 4035EOF 4036clock_adjtime=no 4037if compile_prog "" "" ; then 4038 clock_adjtime=yes 4039fi 4040 4041# syncfs probe 4042syncfs=no 4043cat > $TMPC <<EOF 4044#include <unistd.h> 4045 4046int main(void) 4047{ 4048 return syncfs(0); 4049} 4050EOF 4051syncfs=no 4052if compile_prog "" "" ; then 4053 syncfs=yes 4054fi 4055 4056# Check if tools are available to build documentation. 4057if test "$docs" != "no" ; then 4058 if has makeinfo && has pod2man; then 4059 docs=yes 4060 else 4061 if test "$docs" = "yes" ; then 4062 feature_not_found "docs" "Install texinfo and Perl/perl-podlators" 4063 fi 4064 docs=no 4065 fi 4066fi 4067 4068# Search for bswap_32 function 4069byteswap_h=no 4070cat > $TMPC << EOF 4071#include <byteswap.h> 4072int main(void) { return bswap_32(0); } 4073EOF 4074if compile_prog "" "" ; then 4075 byteswap_h=yes 4076fi 4077 4078# Search for bswap32 function 4079bswap_h=no 4080cat > $TMPC << EOF 4081#include <sys/endian.h> 4082#include <sys/types.h> 4083#include <machine/bswap.h> 4084int main(void) { return bswap32(0); } 4085EOF 4086if compile_prog "" "" ; then 4087 bswap_h=yes 4088fi 4089 4090########################################## 4091# Do we have libiscsi >= 1.9.0 4092if test "$libiscsi" != "no" ; then 4093 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4094 libiscsi="yes" 4095 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4096 libiscsi_libs=$($pkg_config --libs libiscsi) 4097 else 4098 if test "$libiscsi" = "yes" ; then 4099 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4100 fi 4101 libiscsi="no" 4102 fi 4103fi 4104 4105########################################## 4106# Do we need libm 4107cat > $TMPC << EOF 4108#include <math.h> 4109int main(int argc, char **argv) { return isnan(sin((double)argc)); } 4110EOF 4111if compile_prog "" "" ; then 4112 : 4113elif compile_prog "" "-lm" ; then 4114 LIBS="-lm $LIBS" 4115 libs_qga="-lm $libs_qga" 4116else 4117 error_exit "libm check failed" 4118fi 4119 4120########################################## 4121# Do we need librt 4122# uClibc provides 2 versions of clock_gettime(), one with realtime 4123# support and one without. This means that the clock_gettime() don't 4124# need -lrt. We still need it for timer_create() so we check for this 4125# function in addition. 4126cat > $TMPC <<EOF 4127#include <signal.h> 4128#include <time.h> 4129int main(void) { 4130 timer_create(CLOCK_REALTIME, NULL, NULL); 4131 return clock_gettime(CLOCK_REALTIME, NULL); 4132} 4133EOF 4134 4135if compile_prog "" "" ; then 4136 : 4137# we need pthread for static linking. use previous pthread test result 4138elif compile_prog "" "$pthread_lib -lrt" ; then 4139 LIBS="$LIBS -lrt" 4140 libs_qga="$libs_qga -lrt" 4141fi 4142 4143if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ 4144 "$aix" != "yes" -a "$haiku" != "yes" ; then 4145 libs_softmmu="-lutil $libs_softmmu" 4146fi 4147 4148########################################## 4149# spice probe 4150if test "$spice" != "no" ; then 4151 cat > $TMPC << EOF 4152#include <spice.h> 4153int main(void) { spice_server_new(); return 0; } 4154EOF 4155 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4156 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4157 if $pkg_config --atleast-version=0.12.0 spice-server && \ 4158 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4159 compile_prog "$spice_cflags" "$spice_libs" ; then 4160 spice="yes" 4161 libs_softmmu="$libs_softmmu $spice_libs" 4162 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 4163 spice_protocol_version=$($pkg_config --modversion spice-protocol) 4164 spice_server_version=$($pkg_config --modversion spice-server) 4165 else 4166 if test "$spice" = "yes" ; then 4167 feature_not_found "spice" \ 4168 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel" 4169 fi 4170 spice="no" 4171 fi 4172fi 4173 4174# check for smartcard support 4175smartcard_cflags="" 4176if test "$smartcard" != "no"; then 4177 if $pkg_config libcacard; then 4178 libcacard_cflags=$($pkg_config --cflags libcacard) 4179 libcacard_libs=$($pkg_config --libs libcacard) 4180 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags" 4181 libs_softmmu="$libs_softmmu $libcacard_libs" 4182 smartcard="yes" 4183 else 4184 if test "$smartcard" = "yes"; then 4185 feature_not_found "smartcard" "Install libcacard devel" 4186 fi 4187 smartcard="no" 4188 fi 4189fi 4190 4191# check for libusb 4192if test "$libusb" != "no" ; then 4193 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4194 libusb="yes" 4195 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4196 libusb_libs=$($pkg_config --libs libusb-1.0) 4197 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags" 4198 libs_softmmu="$libs_softmmu $libusb_libs" 4199 else 4200 if test "$libusb" = "yes"; then 4201 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4202 fi 4203 libusb="no" 4204 fi 4205fi 4206 4207# check for usbredirparser for usb network redirection support 4208if test "$usb_redir" != "no" ; then 4209 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4210 usb_redir="yes" 4211 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4212 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4213 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags" 4214 libs_softmmu="$libs_softmmu $usb_redir_libs" 4215 else 4216 if test "$usb_redir" = "yes"; then 4217 feature_not_found "usb-redir" "Install usbredir devel" 4218 fi 4219 usb_redir="no" 4220 fi 4221fi 4222 4223########################################## 4224# check if we have VSS SDK headers for win 4225 4226if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then 4227 case "$vss_win32_sdk" in 4228 "") vss_win32_include="-isystem $source_path" ;; 4229 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4230 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4231 vss_win32_include="-isystem $source_path/.sdk/vss" 4232 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4233 ;; 4234 *) vss_win32_include="-isystem $vss_win32_sdk" 4235 esac 4236 cat > $TMPC << EOF 4237#define __MIDL_user_allocate_free_DEFINED__ 4238#include <inc/win2003/vss.h> 4239int main(void) { return VSS_CTX_BACKUP; } 4240EOF 4241 if compile_prog "$vss_win32_include" "" ; then 4242 guest_agent_with_vss="yes" 4243 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4244 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4245 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4246 else 4247 if test "$vss_win32_sdk" != "" ; then 4248 echo "ERROR: Please download and install Microsoft VSS SDK:" 4249 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4250 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4251 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4252 echo "ERROR: The headers are extracted in the directory \`inc'." 4253 feature_not_found "VSS support" 4254 fi 4255 guest_agent_with_vss="no" 4256 fi 4257fi 4258 4259########################################## 4260# lookup Windows platform SDK (if not specified) 4261# The SDK is needed only to build .tlb (type library) file of guest agent 4262# VSS provider from the source. It is usually unnecessary because the 4263# pre-compiled .tlb file is included. 4264 4265if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then 4266 if test -z "$win_sdk"; then 4267 programfiles="$PROGRAMFILES" 4268 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4269 if test -n "$programfiles"; then 4270 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4271 else 4272 feature_not_found "Windows SDK" 4273 fi 4274 elif test "$win_sdk" = "no"; then 4275 win_sdk="" 4276 fi 4277fi 4278 4279########################################## 4280# check if mingw environment provides a recent ntddscsi.h 4281if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then 4282 cat > $TMPC << EOF 4283#include <windows.h> 4284#include <ntddscsi.h> 4285int main(void) { 4286#if !defined(IOCTL_SCSI_GET_ADDRESS) 4287#error Missing required ioctl definitions 4288#endif 4289 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4290 return addr.Lun; 4291} 4292EOF 4293 if compile_prog "" "" ; then 4294 guest_agent_ntddscsi=yes 4295 libs_qga="-lsetupapi $libs_qga" 4296 fi 4297fi 4298 4299########################################## 4300# virgl renderer probe 4301 4302if test "$virglrenderer" != "no" ; then 4303 cat > $TMPC << EOF 4304#include <virglrenderer.h> 4305int main(void) { virgl_renderer_poll(); return 0; } 4306EOF 4307 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4308 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4309 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4310 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4311 virglrenderer="yes" 4312 else 4313 if test "$virglrenderer" = "yes" ; then 4314 feature_not_found "virglrenderer" 4315 fi 4316 virglrenderer="no" 4317 fi 4318fi 4319 4320########################################## 4321# check if we have fdatasync 4322 4323fdatasync=no 4324cat > $TMPC << EOF 4325#include <unistd.h> 4326int main(void) { 4327#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4328return fdatasync(0); 4329#else 4330#error Not supported 4331#endif 4332} 4333EOF 4334if compile_prog "" "" ; then 4335 fdatasync=yes 4336fi 4337 4338########################################## 4339# check if we have madvise 4340 4341madvise=no 4342cat > $TMPC << EOF 4343#include <sys/types.h> 4344#include <sys/mman.h> 4345#include <stddef.h> 4346int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4347EOF 4348if compile_prog "" "" ; then 4349 madvise=yes 4350fi 4351 4352########################################## 4353# check if we have posix_madvise 4354 4355posix_madvise=no 4356cat > $TMPC << EOF 4357#include <sys/mman.h> 4358#include <stddef.h> 4359int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4360EOF 4361if compile_prog "" "" ; then 4362 posix_madvise=yes 4363fi 4364 4365########################################## 4366# check if we have posix_syslog 4367 4368posix_syslog=no 4369cat > $TMPC << EOF 4370#include <syslog.h> 4371int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4372EOF 4373if compile_prog "" "" ; then 4374 posix_syslog=yes 4375fi 4376 4377########################################## 4378# check if trace backend exists 4379 4380$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4381if test "$?" -ne 0 ; then 4382 error_exit "invalid trace backends" \ 4383 "Please choose supported trace backends." 4384fi 4385 4386########################################## 4387# For 'ust' backend, test if ust headers are present 4388if have_backend "ust"; then 4389 cat > $TMPC << EOF 4390#include <lttng/tracepoint.h> 4391int main(void) { return 0; } 4392EOF 4393 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4394 if $pkg_config lttng-ust --exists; then 4395 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4396 else 4397 lttng_ust_libs="-llttng-ust -ldl" 4398 fi 4399 if $pkg_config liburcu-bp --exists; then 4400 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4401 else 4402 urcu_bp_libs="-lurcu-bp" 4403 fi 4404 4405 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 4406 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 4407 else 4408 error_exit "Trace backend 'ust' missing lttng-ust header files" 4409 fi 4410fi 4411 4412########################################## 4413# For 'dtrace' backend, test if 'dtrace' command is present 4414if have_backend "dtrace"; then 4415 if ! has 'dtrace' ; then 4416 error_exit "dtrace command is not found in PATH $PATH" 4417 fi 4418 trace_backend_stap="no" 4419 if has 'stap' ; then 4420 trace_backend_stap="yes" 4421 fi 4422fi 4423 4424########################################## 4425# check and set a backend for coroutine 4426 4427# We prefer ucontext, but it's not always possible. The fallback 4428# is sigcontext. On Windows the only valid backend is the Windows 4429# specific one. 4430 4431ucontext_works=no 4432if test "$darwin" != "yes"; then 4433 cat > $TMPC << EOF 4434#include <ucontext.h> 4435#ifdef __stub_makecontext 4436#error Ignoring glibc stub makecontext which will always fail 4437#endif 4438int main(void) { makecontext(0, 0, 0); return 0; } 4439EOF 4440 if compile_prog "" "" ; then 4441 ucontext_works=yes 4442 fi 4443fi 4444 4445if test "$coroutine" = ""; then 4446 if test "$mingw32" = "yes"; then 4447 coroutine=win32 4448 elif test "$ucontext_works" = "yes"; then 4449 coroutine=ucontext 4450 else 4451 coroutine=sigaltstack 4452 fi 4453else 4454 case $coroutine in 4455 windows) 4456 if test "$mingw32" != "yes"; then 4457 error_exit "'windows' coroutine backend only valid for Windows" 4458 fi 4459 # Unfortunately the user visible backend name doesn't match the 4460 # coroutine-*.c filename for this case, so we have to adjust it here. 4461 coroutine=win32 4462 ;; 4463 ucontext) 4464 if test "$ucontext_works" != "yes"; then 4465 feature_not_found "ucontext" 4466 fi 4467 ;; 4468 sigaltstack) 4469 if test "$mingw32" = "yes"; then 4470 error_exit "only the 'windows' coroutine backend is valid for Windows" 4471 fi 4472 ;; 4473 *) 4474 error_exit "unknown coroutine backend $coroutine" 4475 ;; 4476 esac 4477fi 4478 4479if test "$coroutine_pool" = ""; then 4480 coroutine_pool=yes 4481fi 4482 4483if test "$debug_stack_usage" = "yes"; then 4484 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then 4485 error_exit "stack usage debugging is not supported for $cpu" 4486 fi 4487 if test "$coroutine_pool" = "yes"; then 4488 echo "WARN: disabling coroutine pool for stack usage debugging" 4489 coroutine_pool=no 4490 fi 4491fi 4492 4493 4494########################################## 4495# check if we have open_by_handle_at 4496 4497open_by_handle_at=no 4498cat > $TMPC << EOF 4499#include <fcntl.h> 4500#if !defined(AT_EMPTY_PATH) 4501# error missing definition 4502#else 4503int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4504#endif 4505EOF 4506if compile_prog "" "" ; then 4507 open_by_handle_at=yes 4508fi 4509 4510######################################## 4511# check if we have linux/magic.h 4512 4513linux_magic_h=no 4514cat > $TMPC << EOF 4515#include <linux/magic.h> 4516int main(void) { 4517 return 0; 4518} 4519EOF 4520if compile_prog "" "" ; then 4521 linux_magic_h=yes 4522fi 4523 4524######################################## 4525# check whether we can disable warning option with a pragma (this is needed 4526# to silence warnings in the headers of some versions of external libraries). 4527# This test has to be compiled with -Werror as otherwise an unknown pragma is 4528# only a warning. 4529# 4530# If we can't selectively disable warning in the code, disable -Werror so that 4531# the build doesn't fail anyway. 4532 4533pragma_disable_unused_but_set=no 4534cat > $TMPC << EOF 4535#pragma GCC diagnostic push 4536#pragma GCC diagnostic ignored "-Wunused-but-set-variable" 4537#pragma GCC diagnostic ignored "-Wstrict-prototypes" 4538#pragma GCC diagnostic pop 4539 4540int main(void) { 4541 return 0; 4542} 4543EOF 4544if compile_prog "-Werror" "" ; then 4545 pragma_diagnostic_available=yes 4546else 4547 werror=no 4548fi 4549 4550######################################## 4551# check if we have valgrind/valgrind.h 4552 4553valgrind_h=no 4554cat > $TMPC << EOF 4555#include <valgrind/valgrind.h> 4556int main(void) { 4557 return 0; 4558} 4559EOF 4560if compile_prog "" "" ; then 4561 valgrind_h=yes 4562fi 4563 4564######################################## 4565# check if environ is declared 4566 4567has_environ=no 4568cat > $TMPC << EOF 4569#include <unistd.h> 4570int main(void) { 4571 environ = 0; 4572 return 0; 4573} 4574EOF 4575if compile_prog "" "" ; then 4576 has_environ=yes 4577fi 4578 4579######################################## 4580# check if cpuid.h is usable. 4581 4582cpuid_h=no 4583cat > $TMPC << EOF 4584#include <cpuid.h> 4585int main(void) { 4586 unsigned a, b, c, d; 4587 int max = __get_cpuid_max(0, 0); 4588 4589 if (max >= 1) { 4590 __cpuid(1, a, b, c, d); 4591 } 4592 4593 if (max >= 7) { 4594 __cpuid_count(7, 0, a, b, c, d); 4595 } 4596 4597 return 0; 4598} 4599EOF 4600if compile_prog "" "" ; then 4601 cpuid_h=yes 4602fi 4603 4604######################################## 4605# check if __[u]int128_t is usable. 4606 4607int128=no 4608cat > $TMPC << EOF 4609#if defined(__clang_major__) && defined(__clang_minor__) 4610# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2)) 4611# error __int128_t does not work in CLANG before 3.2 4612# endif 4613#endif 4614__int128_t a; 4615__uint128_t b; 4616int main (void) { 4617 a = a + b; 4618 b = a * b; 4619 a = a * a; 4620 return 0; 4621} 4622EOF 4623if compile_prog "" "" ; then 4624 int128=yes 4625fi 4626 4627######################################### 4628# See if 128-bit atomic operations are supported. 4629 4630atomic128=no 4631if test "$int128" = "yes"; then 4632 cat > $TMPC << EOF 4633int main(void) 4634{ 4635 unsigned __int128 x = 0, y = 0; 4636 y = __atomic_load_16(&x, 0); 4637 __atomic_store_16(&x, y, 0); 4638 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 4639 return 0; 4640} 4641EOF 4642 if compile_prog "" "" ; then 4643 atomic128=yes 4644 fi 4645fi 4646 4647######################################### 4648# See if 64-bit atomic operations are supported. 4649# Note that without __atomic builtins, we can only 4650# assume atomic loads/stores max at pointer size. 4651 4652cat > $TMPC << EOF 4653#include <stdint.h> 4654int main(void) 4655{ 4656 uint64_t x = 0, y = 0; 4657#ifdef __ATOMIC_RELAXED 4658 y = __atomic_load_8(&x, 0); 4659 __atomic_store_8(&x, y, 0); 4660 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 4661 __atomic_exchange_8(&x, y, 0); 4662 __atomic_fetch_add_8(&x, y, 0); 4663#else 4664 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 4665 __sync_lock_test_and_set(&x, y); 4666 __sync_val_compare_and_swap(&x, y, 0); 4667 __sync_fetch_and_add(&x, y); 4668#endif 4669 return 0; 4670} 4671EOF 4672if compile_prog "" "" ; then 4673 atomic64=yes 4674fi 4675 4676######################################## 4677# check if getauxval is available. 4678 4679getauxval=no 4680cat > $TMPC << EOF 4681#include <sys/auxv.h> 4682int main(void) { 4683 return getauxval(AT_HWCAP) == 0; 4684} 4685EOF 4686if compile_prog "" "" ; then 4687 getauxval=yes 4688fi 4689 4690######################################## 4691# check if ccache is interfering with 4692# semantic analysis of macros 4693 4694unset CCACHE_CPP2 4695ccache_cpp2=no 4696cat > $TMPC << EOF 4697static const int Z = 1; 4698#define fn() ({ Z; }) 4699#define TAUT(X) ((X) == Z) 4700#define PAREN(X, Y) (X == Y) 4701#define ID(X) (X) 4702int main(int argc, char *argv[]) 4703{ 4704 int x = 0, y = 0; 4705 x = ID(x); 4706 x = fn(); 4707 fn(); 4708 if (PAREN(x, y)) return 0; 4709 if (TAUT(Z)) return 0; 4710 return 0; 4711} 4712EOF 4713 4714if ! compile_object "-Werror"; then 4715 ccache_cpp2=yes 4716fi 4717 4718################################################# 4719# clang does not support glibc + FORTIFY_SOURCE. 4720 4721if test "$fortify_source" != "no"; then 4722 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 4723 fortify_source="no"; 4724 elif test -n "$cxx" && 4725 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 4726 fortify_source="no"; 4727 else 4728 fortify_source="yes" 4729 fi 4730fi 4731 4732########################################## 4733# check if struct fsxattr is available via linux/fs.h 4734 4735have_fsxattr=no 4736cat > $TMPC << EOF 4737#include <linux/fs.h> 4738struct fsxattr foo; 4739int main(void) { 4740 return 0; 4741} 4742EOF 4743if compile_prog "" "" ; then 4744 have_fsxattr=yes 4745fi 4746 4747########################################## 4748# check if rtnetlink.h exists and is useful 4749have_rtnetlink=no 4750cat > $TMPC << EOF 4751#include <linux/rtnetlink.h> 4752int main(void) { 4753 return IFLA_PROTO_DOWN; 4754} 4755EOF 4756if compile_prog "" "" ; then 4757 have_rtnetlink=yes 4758fi 4759 4760########################################## 4761# check for usable AF_VSOCK environment 4762have_af_vsock=no 4763cat > $TMPC << EOF 4764#include <errno.h> 4765#include <sys/types.h> 4766#include <sys/socket.h> 4767#if !defined(AF_VSOCK) 4768# error missing AF_VSOCK flag 4769#endif 4770#include <linux/vm_sockets.h> 4771int main(void) { 4772 int sock, ret; 4773 struct sockaddr_vm svm; 4774 socklen_t len = sizeof(svm); 4775 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 4776 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 4777 if ((ret == -1) && (errno == ENOTCONN)) { 4778 return 0; 4779 } 4780 return -1; 4781} 4782EOF 4783if compile_prog "" "" ; then 4784 have_af_vsock=yes 4785fi 4786 4787################################################# 4788# Sparc implicitly links with --relax, which is 4789# incompatible with -r, so --no-relax should be 4790# given. It does no harm to give it on other 4791# platforms too. 4792 4793# Note: the prototype is needed since QEMU_CFLAGS 4794# contains -Wmissing-prototypes 4795cat > $TMPC << EOF 4796extern int foo(void); 4797int foo(void) { return 0; } 4798EOF 4799if ! compile_object ""; then 4800 error_exit "Failed to compile object file for LD_REL_FLAGS test" 4801fi 4802for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 4803 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 4804 LD_REL_FLAGS=$i 4805 break 4806 fi 4807done 4808if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 4809 feature_not_found "modules" "Cannot find how to build relocatable objects" 4810fi 4811 4812########################################## 4813# check for sysmacros.h 4814 4815have_sysmacros=no 4816cat > $TMPC << EOF 4817#include <sys/sysmacros.h> 4818int main(void) { 4819 return makedev(0, 0); 4820} 4821EOF 4822if compile_prog "" "" ; then 4823 have_sysmacros=yes 4824fi 4825 4826########################################## 4827# Veritas HyperScale block driver VxHS 4828# Check if libvxhs is installed 4829 4830if test "$vxhs" != "no" ; then 4831 cat > $TMPC <<EOF 4832#include <stdint.h> 4833#include <qnio/qnio_api.h> 4834 4835void *vxhs_callback; 4836 4837int main(void) { 4838 iio_init(QNIO_VERSION, vxhs_callback); 4839 return 0; 4840} 4841EOF 4842 vxhs_libs="-lvxhs -lssl" 4843 if compile_prog "" "$vxhs_libs" ; then 4844 vxhs=yes 4845 else 4846 if test "$vxhs" = "yes" ; then 4847 feature_not_found "vxhs block device" "Install libvxhs See github" 4848 fi 4849 vxhs=no 4850 fi 4851fi 4852 4853########################################## 4854# check for _Static_assert() 4855 4856have_static_assert=no 4857cat > $TMPC << EOF 4858_Static_assert(1, "success"); 4859int main(void) { 4860 return 0; 4861} 4862EOF 4863if compile_prog "" "" ; then 4864 have_static_assert=yes 4865fi 4866 4867########################################## 4868# End of CC checks 4869# After here, no more $cc or $ld runs 4870 4871if test "$gcov" = "yes" ; then 4872 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 4873 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 4874elif test "$fortify_source" = "yes" ; then 4875 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 4876elif test "$debug" = "no"; then 4877 CFLAGS="-O2 $CFLAGS" 4878fi 4879 4880########################################## 4881# Do we have libnfs 4882if test "$libnfs" != "no" ; then 4883 if $pkg_config --atleast-version=1.9.3 libnfs; then 4884 libnfs="yes" 4885 libnfs_libs=$($pkg_config --libs libnfs) 4886 else 4887 if test "$libnfs" = "yes" ; then 4888 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 4889 fi 4890 libnfs="no" 4891 fi 4892fi 4893 4894# Now we've finished running tests it's OK to add -Werror to the compiler flags 4895if test "$werror" = "yes"; then 4896 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 4897fi 4898 4899if test "$solaris" = "no" ; then 4900 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 4901 LDFLAGS="-Wl,--warn-common $LDFLAGS" 4902 fi 4903fi 4904 4905# test if pod2man has --utf8 option 4906if pod2man --help | grep -q utf8; then 4907 POD2MAN="pod2man --utf8" 4908else 4909 POD2MAN="pod2man" 4910fi 4911 4912# Use ASLR, no-SEH and DEP if available 4913if test "$mingw32" = "yes" ; then 4914 for flag in --dynamicbase --no-seh --nxcompat; do 4915 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then 4916 LDFLAGS="-Wl,$flag $LDFLAGS" 4917 fi 4918 done 4919fi 4920 4921qemu_confdir=$sysconfdir$confsuffix 4922qemu_moddir=$libdir$confsuffix 4923qemu_datadir=$datadir$confsuffix 4924qemu_localedir="$datadir/locale" 4925 4926tools="" 4927if test "$want_tools" = "yes" ; then 4928 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" 4929 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 4930 tools="qemu-nbd\$(EXESUF) $tools" 4931 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 4932 fi 4933fi 4934if test "$softmmu" = yes ; then 4935 if test "$virtfs" != no ; then 4936 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then 4937 virtfs=yes 4938 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 4939 else 4940 if test "$virtfs" = yes; then 4941 error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel" 4942 fi 4943 virtfs=no 4944 fi 4945 fi 4946fi 4947 4948# Probe for guest agent support/options 4949 4950if [ "$guest_agent" != "no" ]; then 4951 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 4952 tools="qemu-ga $tools" 4953 guest_agent=yes 4954 elif [ "$guest_agent" != yes ]; then 4955 guest_agent=no 4956 else 4957 error_exit "Guest agent is not supported on this platform" 4958 fi 4959fi 4960 4961# Guest agent Window MSI package 4962 4963if test "$guest_agent" != yes; then 4964 if test "$guest_agent_msi" = yes; then 4965 error_exit "MSI guest agent package requires guest agent enabled" 4966 fi 4967 guest_agent_msi=no 4968elif test "$mingw32" != "yes"; then 4969 if test "$guest_agent_msi" = "yes"; then 4970 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 4971 fi 4972 guest_agent_msi=no 4973elif ! has wixl; then 4974 if test "$guest_agent_msi" = "yes"; then 4975 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 4976 fi 4977 guest_agent_msi=no 4978else 4979 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 4980 # disabled explicitly 4981 if test "$guest_agent_msi" != "no"; then 4982 guest_agent_msi=yes 4983 fi 4984fi 4985 4986if test "$guest_agent_msi" = "yes"; then 4987 if test "$guest_agent_with_vss" = "yes"; then 4988 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 4989 fi 4990 4991 if test "$QEMU_GA_MANUFACTURER" = ""; then 4992 QEMU_GA_MANUFACTURER=QEMU 4993 fi 4994 4995 if test "$QEMU_GA_DISTRO" = ""; then 4996 QEMU_GA_DISTRO=Linux 4997 fi 4998 4999 if test "$QEMU_GA_VERSION" = ""; then 5000 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5001 fi 5002 5003 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5004 5005 case "$cpu" in 5006 x86_64) 5007 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5008 ;; 5009 i386) 5010 QEMU_GA_MSI_ARCH="-D Arch=32" 5011 ;; 5012 *) 5013 error_exit "CPU $cpu not supported for building installation package" 5014 ;; 5015 esac 5016fi 5017 5018# Mac OS X ships with a broken assembler 5019roms= 5020if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 5021 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 5022 "$softmmu" = yes ; then 5023 # Different host OS linkers have different ideas about the name of the ELF 5024 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd 5025 # variant; and Windows uses i386pe. 5026 for emu in elf_i386 elf_i386_fbsd i386pe; do 5027 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5028 ld_i386_emulation="$emu" 5029 roms="optionrom" 5030 break 5031 fi 5032 done 5033fi 5034if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 5035 roms="$roms spapr-rtas" 5036fi 5037 5038if test "$cpu" = "s390x" ; then 5039 roms="$roms s390-ccw" 5040fi 5041 5042# Probe for the need for relocating the user-only binary. 5043if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 5044 textseg_addr= 5045 case "$cpu" in 5046 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 5047 # ??? Rationale for choosing this address 5048 textseg_addr=0x60000000 5049 ;; 5050 mips) 5051 # A 256M aligned address, high in the address space, with enough 5052 # room for the code_gen_buffer above it before the stack. 5053 textseg_addr=0x60000000 5054 ;; 5055 esac 5056 if [ -n "$textseg_addr" ]; then 5057 cat > $TMPC <<EOF 5058 int main(void) { return 0; } 5059EOF 5060 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 5061 if ! compile_prog "" "$textseg_ldflags"; then 5062 # In case ld does not support -Ttext-segment, edit the default linker 5063 # script via sed to set the .text start addr. This is needed on FreeBSD 5064 # at least. 5065 if ! $ld --verbose >/dev/null 2>&1; then 5066 error_exit \ 5067 "We need to link the QEMU user mode binaries at a" \ 5068 "specific text address. Unfortunately your linker" \ 5069 "doesn't support either the -Ttext-segment option or" \ 5070 "printing the default linker script with --verbose." \ 5071 "If you don't want the user mode binaries, pass the" \ 5072 "--disable-user option to configure." 5073 fi 5074 5075 $ld --verbose | sed \ 5076 -e '1,/==================================================/d' \ 5077 -e '/==================================================/,$d' \ 5078 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 5079 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 5080 textseg_ldflags="-Wl,-T../config-host.ld" 5081 fi 5082 fi 5083fi 5084 5085echo_version() { 5086 if test "$1" = "yes" ; then 5087 echo "($2)" 5088 fi 5089} 5090 5091# prepend pixman and ftd flags after all config tests are done 5092QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 5093libs_softmmu="$pixman_libs $libs_softmmu" 5094 5095echo "Install prefix $prefix" 5096echo "BIOS directory $(eval echo $qemu_datadir)" 5097echo "binary directory $(eval echo $bindir)" 5098echo "library directory $(eval echo $libdir)" 5099echo "module directory $(eval echo $qemu_moddir)" 5100echo "libexec directory $(eval echo $libexecdir)" 5101echo "include directory $(eval echo $includedir)" 5102echo "config directory $(eval echo $sysconfdir)" 5103if test "$mingw32" = "no" ; then 5104echo "local state directory $(eval echo $local_statedir)" 5105echo "Manual directory $(eval echo $mandir)" 5106echo "ELF interp prefix $interp_prefix" 5107else 5108echo "local state directory queried at runtime" 5109echo "Windows SDK $win_sdk" 5110fi 5111echo "Source path $source_path" 5112echo "C compiler $cc" 5113echo "Host C compiler $host_cc" 5114echo "C++ compiler $cxx" 5115echo "Objective-C compiler $objcc" 5116echo "ARFLAGS $ARFLAGS" 5117echo "CFLAGS $CFLAGS" 5118echo "QEMU_CFLAGS $QEMU_CFLAGS" 5119echo "LDFLAGS $LDFLAGS" 5120echo "make $make" 5121echo "install $install" 5122echo "python $python" 5123if test "$slirp" = "yes" ; then 5124 echo "smbd $smbd" 5125fi 5126echo "module support $modules" 5127echo "host CPU $cpu" 5128echo "host big endian $bigendian" 5129echo "target list $target_list" 5130echo "tcg debug enabled $debug_tcg" 5131echo "gprof enabled $gprof" 5132echo "sparse enabled $sparse" 5133echo "strip binaries $strip_opt" 5134echo "profiler $profiler" 5135echo "static build $static" 5136if test "$darwin" = "yes" ; then 5137 echo "Cocoa support $cocoa" 5138fi 5139echo "pixman $pixman" 5140echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 5141echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 5142echo "GTK GL support $gtk_gl" 5143echo "VTE support $vte $(echo_version $vte $vteversion)" 5144echo "TLS priority $tls_priority" 5145echo "GNUTLS support $gnutls" 5146echo "GNUTLS rnd $gnutls_rnd" 5147echo "libgcrypt $gcrypt" 5148echo "libgcrypt kdf $gcrypt_kdf" 5149echo "nettle $nettle $(echo_version $nettle $nettle_version)" 5150echo "nettle kdf $nettle_kdf" 5151echo "libtasn1 $tasn1" 5152echo "curses support $curses" 5153echo "virgl support $virglrenderer" 5154echo "curl support $curl" 5155echo "mingw32 support $mingw32" 5156echo "Audio drivers $audio_drv_list" 5157echo "Block whitelist (rw) $block_drv_rw_whitelist" 5158echo "Block whitelist (ro) $block_drv_ro_whitelist" 5159echo "VirtFS support $virtfs" 5160echo "VNC support $vnc" 5161if test "$vnc" = "yes" ; then 5162 echo "VNC SASL support $vnc_sasl" 5163 echo "VNC JPEG support $vnc_jpeg" 5164 echo "VNC PNG support $vnc_png" 5165fi 5166if test -n "$sparc_cpu"; then 5167 echo "Target Sparc Arch $sparc_cpu" 5168fi 5169echo "xen support $xen" 5170if test "$xen" = "yes" ; then 5171 echo "xen ctrl version $xen_ctrl_version" 5172 echo "pv dom build $xen_pv_domain_build" 5173fi 5174echo "brlapi support $brlapi" 5175echo "bluez support $bluez" 5176echo "Documentation $docs" 5177echo "PIE $pie" 5178echo "vde support $vde" 5179echo "netmap support $netmap" 5180echo "Linux AIO support $linux_aio" 5181echo "ATTR/XATTR support $attr" 5182echo "Install blobs $blobs" 5183echo "KVM support $kvm" 5184echo "HAX support $hax" 5185echo "RDMA support $rdma" 5186echo "TCG interpreter $tcg_interpreter" 5187echo "fdt support $fdt" 5188echo "preadv support $preadv" 5189echo "fdatasync $fdatasync" 5190echo "madvise $madvise" 5191echo "posix_madvise $posix_madvise" 5192echo "libcap-ng support $cap_ng" 5193echo "vhost-net support $vhost_net" 5194echo "vhost-scsi support $vhost_scsi" 5195echo "vhost-vsock support $vhost_vsock" 5196echo "Trace backends $trace_backends" 5197if have_backend "simple"; then 5198echo "Trace output file $trace_file-<pid>" 5199fi 5200echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 5201echo "rbd support $rbd" 5202echo "xfsctl support $xfs" 5203echo "smartcard support $smartcard" 5204echo "libusb $libusb" 5205echo "usb net redir $usb_redir" 5206echo "OpenGL support $opengl" 5207echo "OpenGL dmabufs $opengl_dmabuf" 5208echo "libiscsi support $libiscsi" 5209echo "libnfs support $libnfs" 5210echo "build guest agent $guest_agent" 5211echo "QGA VSS support $guest_agent_with_vss" 5212echo "QGA w32 disk info $guest_agent_ntddscsi" 5213echo "QGA MSI support $guest_agent_msi" 5214echo "seccomp support $seccomp" 5215echo "coroutine backend $coroutine" 5216echo "coroutine pool $coroutine_pool" 5217echo "debug stack usage $debug_stack_usage" 5218echo "GlusterFS support $glusterfs" 5219echo "gcov $gcov_tool" 5220echo "gcov enabled $gcov" 5221echo "TPM support $tpm" 5222echo "libssh2 support $libssh2" 5223echo "TPM passthrough $tpm_passthrough" 5224echo "QOM debugging $qom_cast_debug" 5225echo "Live block migration $live_block_migration" 5226echo "lzo support $lzo" 5227echo "snappy support $snappy" 5228echo "bzip2 support $bzip2" 5229echo "NUMA host support $numa" 5230echo "tcmalloc support $tcmalloc" 5231echo "jemalloc support $jemalloc" 5232echo "avx2 optimization $avx2_opt" 5233echo "replication support $replication" 5234echo "VxHS block device $vxhs" 5235 5236if test "$sdl_too_old" = "yes"; then 5237echo "-> Your SDL version is too old - please upgrade to have SDL support" 5238fi 5239 5240if test "$supported_cpu" = "no"; then 5241 echo 5242 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 5243 echo 5244 echo "CPU host architecture $cpu support is not currently maintained." 5245 echo "The QEMU project intends to remove support for this host CPU in" 5246 echo "a future release if nobody volunteers to maintain it and to" 5247 echo "provide a build host for our continuous integration setup." 5248 echo "configure has succeeded and you can continue to build, but" 5249 echo "if you care about QEMU on this platform you should contact" 5250 echo "us upstream at qemu-devel@nongnu.org." 5251fi 5252 5253if test "$supported_os" = "no"; then 5254 echo 5255 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 5256 echo 5257 echo "Host OS $targetos support is not currently maintained." 5258 echo "The QEMU project intends to remove support for this host OS in" 5259 echo "a future release if nobody volunteers to maintain it and to" 5260 echo "provide a build host for our continuous integration setup." 5261 echo "configure has succeeded and you can continue to build, but" 5262 echo "if you care about QEMU on this platform you should contact" 5263 echo "us upstream at qemu-devel@nongnu.org." 5264fi 5265 5266config_host_mak="config-host.mak" 5267 5268echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 5269 5270echo "# Automatically generated by configure - do not modify" > $config_host_mak 5271echo >> $config_host_mak 5272 5273echo all: >> $config_host_mak 5274echo "prefix=$prefix" >> $config_host_mak 5275echo "bindir=$bindir" >> $config_host_mak 5276echo "libdir=$libdir" >> $config_host_mak 5277echo "libexecdir=$libexecdir" >> $config_host_mak 5278echo "includedir=$includedir" >> $config_host_mak 5279echo "mandir=$mandir" >> $config_host_mak 5280echo "sysconfdir=$sysconfdir" >> $config_host_mak 5281echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 5282echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 5283echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 5284echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 5285if test "$mingw32" = "no" ; then 5286 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 5287fi 5288echo "qemu_helperdir=$libexecdir" >> $config_host_mak 5289echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak 5290echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak 5291echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 5292echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 5293 5294echo "ARCH=$ARCH" >> $config_host_mak 5295 5296if test "$debug_tcg" = "yes" ; then 5297 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 5298fi 5299if test "$strip_opt" = "yes" ; then 5300 echo "STRIP=${strip}" >> $config_host_mak 5301fi 5302if test "$bigendian" = "yes" ; then 5303 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 5304fi 5305if test "$mingw32" = "yes" ; then 5306 echo "CONFIG_WIN32=y" >> $config_host_mak 5307 rc_version=$(cat $source_path/VERSION) 5308 version_major=${rc_version%%.*} 5309 rc_version=${rc_version#*.} 5310 version_minor=${rc_version%%.*} 5311 rc_version=${rc_version#*.} 5312 version_subminor=${rc_version%%.*} 5313 version_micro=0 5314 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5315 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 5316 if test "$guest_agent_with_vss" = "yes" ; then 5317 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 5318 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 5319 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 5320 fi 5321 if test "$guest_agent_ntddscsi" = "yes" ; then 5322 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 5323 fi 5324 if test "$guest_agent_msi" = "yes"; then 5325 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 5326 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 5327 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 5328 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 5329 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 5330 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 5331 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 5332 fi 5333else 5334 echo "CONFIG_POSIX=y" >> $config_host_mak 5335fi 5336 5337if test "$linux" = "yes" ; then 5338 echo "CONFIG_LINUX=y" >> $config_host_mak 5339fi 5340 5341if test "$darwin" = "yes" ; then 5342 echo "CONFIG_DARWIN=y" >> $config_host_mak 5343fi 5344 5345if test "$aix" = "yes" ; then 5346 echo "CONFIG_AIX=y" >> $config_host_mak 5347fi 5348 5349if test "$solaris" = "yes" ; then 5350 echo "CONFIG_SOLARIS=y" >> $config_host_mak 5351 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak 5352 if test "$needs_libsunmath" = "yes" ; then 5353 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak 5354 fi 5355fi 5356if test "$haiku" = "yes" ; then 5357 echo "CONFIG_HAIKU=y" >> $config_host_mak 5358fi 5359if test "$static" = "yes" ; then 5360 echo "CONFIG_STATIC=y" >> $config_host_mak 5361fi 5362if test "$profiler" = "yes" ; then 5363 echo "CONFIG_PROFILER=y" >> $config_host_mak 5364fi 5365if test "$slirp" = "yes" ; then 5366 echo "CONFIG_SLIRP=y" >> $config_host_mak 5367 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 5368fi 5369if test "$vde" = "yes" ; then 5370 echo "CONFIG_VDE=y" >> $config_host_mak 5371fi 5372if test "$netmap" = "yes" ; then 5373 echo "CONFIG_NETMAP=y" >> $config_host_mak 5374fi 5375if test "$l2tpv3" = "yes" ; then 5376 echo "CONFIG_L2TPV3=y" >> $config_host_mak 5377fi 5378if test "$cap_ng" = "yes" ; then 5379 echo "CONFIG_LIBCAP=y" >> $config_host_mak 5380fi 5381echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 5382for drv in $audio_drv_list; do 5383 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 5384 echo "$def=y" >> $config_host_mak 5385done 5386if test "$audio_pt_int" = "yes" ; then 5387 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 5388fi 5389if test "$audio_win_int" = "yes" ; then 5390 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 5391fi 5392echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 5393echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 5394if test "$vnc" = "yes" ; then 5395 echo "CONFIG_VNC=y" >> $config_host_mak 5396fi 5397if test "$vnc_sasl" = "yes" ; then 5398 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 5399fi 5400if test "$vnc_jpeg" = "yes" ; then 5401 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 5402fi 5403if test "$vnc_png" = "yes" ; then 5404 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 5405fi 5406if test "$fnmatch" = "yes" ; then 5407 echo "CONFIG_FNMATCH=y" >> $config_host_mak 5408fi 5409if test "$xfs" = "yes" ; then 5410 echo "CONFIG_XFS=y" >> $config_host_mak 5411fi 5412qemu_version=$(head $source_path/VERSION) 5413echo "VERSION=$qemu_version" >>$config_host_mak 5414echo "PKGVERSION=$pkgversion" >>$config_host_mak 5415echo "SRC_PATH=$source_path" >> $config_host_mak 5416echo "TARGET_DIRS=$target_list" >> $config_host_mak 5417if [ "$docs" = "yes" ] ; then 5418 echo "BUILD_DOCS=yes" >> $config_host_mak 5419fi 5420if test "$modules" = "yes"; then 5421 # $shacmd can generate a hash started with digit, which the compiler doesn't 5422 # like as an symbol. So prefix it with an underscore 5423 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 5424 echo "CONFIG_MODULES=y" >> $config_host_mak 5425fi 5426if test "$sdl" = "yes" ; then 5427 echo "CONFIG_SDL=y" >> $config_host_mak 5428 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 5429 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 5430fi 5431if test "$cocoa" = "yes" ; then 5432 echo "CONFIG_COCOA=y" >> $config_host_mak 5433fi 5434if test "$curses" = "yes" ; then 5435 echo "CONFIG_CURSES=y" >> $config_host_mak 5436fi 5437if test "$utimens" = "yes" ; then 5438 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak 5439fi 5440if test "$pipe2" = "yes" ; then 5441 echo "CONFIG_PIPE2=y" >> $config_host_mak 5442fi 5443if test "$accept4" = "yes" ; then 5444 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 5445fi 5446if test "$splice" = "yes" ; then 5447 echo "CONFIG_SPLICE=y" >> $config_host_mak 5448fi 5449if test "$eventfd" = "yes" ; then 5450 echo "CONFIG_EVENTFD=y" >> $config_host_mak 5451fi 5452if test "$memfd" = "yes" ; then 5453 echo "CONFIG_MEMFD=y" >> $config_host_mak 5454fi 5455if test "$fallocate" = "yes" ; then 5456 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 5457fi 5458if test "$fallocate_punch_hole" = "yes" ; then 5459 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 5460fi 5461if test "$fallocate_zero_range" = "yes" ; then 5462 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 5463fi 5464if test "$posix_fallocate" = "yes" ; then 5465 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 5466fi 5467if test "$sync_file_range" = "yes" ; then 5468 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 5469fi 5470if test "$fiemap" = "yes" ; then 5471 echo "CONFIG_FIEMAP=y" >> $config_host_mak 5472fi 5473if test "$dup3" = "yes" ; then 5474 echo "CONFIG_DUP3=y" >> $config_host_mak 5475fi 5476if test "$ppoll" = "yes" ; then 5477 echo "CONFIG_PPOLL=y" >> $config_host_mak 5478fi 5479if test "$prctl_pr_set_timerslack" = "yes" ; then 5480 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 5481fi 5482if test "$epoll" = "yes" ; then 5483 echo "CONFIG_EPOLL=y" >> $config_host_mak 5484fi 5485if test "$epoll_create1" = "yes" ; then 5486 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 5487fi 5488if test "$sendfile" = "yes" ; then 5489 echo "CONFIG_SENDFILE=y" >> $config_host_mak 5490fi 5491if test "$timerfd" = "yes" ; then 5492 echo "CONFIG_TIMERFD=y" >> $config_host_mak 5493fi 5494if test "$setns" = "yes" ; then 5495 echo "CONFIG_SETNS=y" >> $config_host_mak 5496fi 5497if test "$clock_adjtime" = "yes" ; then 5498 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 5499fi 5500if test "$syncfs" = "yes" ; then 5501 echo "CONFIG_SYNCFS=y" >> $config_host_mak 5502fi 5503if test "$inotify" = "yes" ; then 5504 echo "CONFIG_INOTIFY=y" >> $config_host_mak 5505fi 5506if test "$inotify1" = "yes" ; then 5507 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 5508fi 5509if test "$byteswap_h" = "yes" ; then 5510 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 5511fi 5512if test "$bswap_h" = "yes" ; then 5513 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 5514fi 5515if test "$curl" = "yes" ; then 5516 echo "CONFIG_CURL=m" >> $config_host_mak 5517 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 5518 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 5519fi 5520if test "$brlapi" = "yes" ; then 5521 echo "CONFIG_BRLAPI=y" >> $config_host_mak 5522fi 5523if test "$bluez" = "yes" ; then 5524 echo "CONFIG_BLUEZ=y" >> $config_host_mak 5525 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 5526fi 5527if test "$glib_subprocess" = "yes" ; then 5528 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak 5529fi 5530if test "$gtk" = "yes" ; then 5531 echo "CONFIG_GTK=y" >> $config_host_mak 5532 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak 5533 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 5534 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 5535 if test "$gtk_gl" = "yes" ; then 5536 echo "CONFIG_GTK_GL=y" >> $config_host_mak 5537 fi 5538fi 5539echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 5540if test "$gnutls" = "yes" ; then 5541 echo "CONFIG_GNUTLS=y" >> $config_host_mak 5542fi 5543if test "$gnutls_rnd" = "yes" ; then 5544 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak 5545fi 5546if test "$gcrypt" = "yes" ; then 5547 echo "CONFIG_GCRYPT=y" >> $config_host_mak 5548 if test "$gcrypt_hmac" = "yes" ; then 5549 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 5550 fi 5551 if test "$gcrypt_kdf" = "yes" ; then 5552 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak 5553 fi 5554fi 5555if test "$nettle" = "yes" ; then 5556 echo "CONFIG_NETTLE=y" >> $config_host_mak 5557 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 5558 if test "$nettle_kdf" = "yes" ; then 5559 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak 5560 fi 5561fi 5562if test "$tasn1" = "yes" ; then 5563 echo "CONFIG_TASN1=y" >> $config_host_mak 5564fi 5565if test "$have_ifaddrs_h" = "yes" ; then 5566 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 5567fi 5568if test "$have_broken_size_max" = "yes" ; then 5569 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 5570fi 5571 5572# Work around a system header bug with some kernel/XFS header 5573# versions where they both try to define 'struct fsxattr': 5574# xfs headers will not try to redefine structs from linux headers 5575# if this macro is set. 5576if test "$have_fsxattr" = "yes" ; then 5577 echo "HAVE_FSXATTR=y" >> $config_host_mak 5578fi 5579if test "$vte" = "yes" ; then 5580 echo "CONFIG_VTE=y" >> $config_host_mak 5581 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 5582fi 5583if test "$virglrenderer" = "yes" ; then 5584 echo "CONFIG_VIRGL=y" >> $config_host_mak 5585 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 5586 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 5587fi 5588if test "$xen" = "yes" ; then 5589 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 5590 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 5591 if test "$xen_pv_domain_build" = "yes" ; then 5592 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 5593 fi 5594fi 5595if test "$linux_aio" = "yes" ; then 5596 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 5597fi 5598if test "$attr" = "yes" ; then 5599 echo "CONFIG_ATTR=y" >> $config_host_mak 5600fi 5601if test "$libattr" = "yes" ; then 5602 echo "CONFIG_LIBATTR=y" >> $config_host_mak 5603fi 5604if test "$virtfs" = "yes" ; then 5605 echo "CONFIG_VIRTFS=y" >> $config_host_mak 5606fi 5607if test "$vhost_scsi" = "yes" ; then 5608 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 5609fi 5610if test "$vhost_net" = "yes" ; then 5611 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 5612fi 5613if test "$vhost_vsock" = "yes" ; then 5614 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 5615fi 5616if test "$blobs" = "yes" ; then 5617 echo "INSTALL_BLOBS=yes" >> $config_host_mak 5618fi 5619if test "$iovec" = "yes" ; then 5620 echo "CONFIG_IOVEC=y" >> $config_host_mak 5621fi 5622if test "$preadv" = "yes" ; then 5623 echo "CONFIG_PREADV=y" >> $config_host_mak 5624fi 5625if test "$fdt" = "yes" ; then 5626 echo "CONFIG_FDT=y" >> $config_host_mak 5627fi 5628if test "$signalfd" = "yes" ; then 5629 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 5630fi 5631if test "$tcg_interpreter" = "yes" ; then 5632 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 5633fi 5634if test "$fdatasync" = "yes" ; then 5635 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 5636fi 5637if test "$madvise" = "yes" ; then 5638 echo "CONFIG_MADVISE=y" >> $config_host_mak 5639fi 5640if test "$posix_madvise" = "yes" ; then 5641 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 5642fi 5643 5644if test "$spice" = "yes" ; then 5645 echo "CONFIG_SPICE=y" >> $config_host_mak 5646fi 5647 5648if test "$smartcard" = "yes" ; then 5649 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 5650fi 5651 5652if test "$libusb" = "yes" ; then 5653 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 5654fi 5655 5656if test "$usb_redir" = "yes" ; then 5657 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 5658fi 5659 5660if test "$opengl" = "yes" ; then 5661 echo "CONFIG_OPENGL=y" >> $config_host_mak 5662 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 5663 if test "$opengl_dmabuf" = "yes" ; then 5664 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 5665 fi 5666fi 5667 5668if test "$avx2_opt" = "yes" ; then 5669 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 5670fi 5671 5672if test "$lzo" = "yes" ; then 5673 echo "CONFIG_LZO=y" >> $config_host_mak 5674fi 5675 5676if test "$snappy" = "yes" ; then 5677 echo "CONFIG_SNAPPY=y" >> $config_host_mak 5678fi 5679 5680if test "$bzip2" = "yes" ; then 5681 echo "CONFIG_BZIP2=y" >> $config_host_mak 5682 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 5683fi 5684 5685if test "$libiscsi" = "yes" ; then 5686 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 5687 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 5688 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 5689fi 5690 5691if test "$libnfs" = "yes" ; then 5692 echo "CONFIG_LIBNFS=m" >> $config_host_mak 5693 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 5694fi 5695 5696if test "$seccomp" = "yes"; then 5697 echo "CONFIG_SECCOMP=y" >> $config_host_mak 5698fi 5699 5700# XXX: suppress that 5701if [ "$bsd" = "yes" ] ; then 5702 echo "CONFIG_BSD=y" >> $config_host_mak 5703fi 5704 5705if test "$localtime_r" = "yes" ; then 5706 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 5707fi 5708if test "$qom_cast_debug" = "yes" ; then 5709 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 5710fi 5711if test "$rbd" = "yes" ; then 5712 echo "CONFIG_RBD=m" >> $config_host_mak 5713 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 5714 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 5715fi 5716 5717echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 5718if test "$coroutine_pool" = "yes" ; then 5719 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 5720else 5721 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 5722fi 5723 5724if test "$debug_stack_usage" = "yes" ; then 5725 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 5726fi 5727 5728if test "$open_by_handle_at" = "yes" ; then 5729 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 5730fi 5731 5732if test "$linux_magic_h" = "yes" ; then 5733 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 5734fi 5735 5736if test "$pragma_diagnostic_available" = "yes" ; then 5737 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 5738fi 5739 5740if test "$valgrind_h" = "yes" ; then 5741 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 5742fi 5743 5744if test "$has_environ" = "yes" ; then 5745 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 5746fi 5747 5748if test "$cpuid_h" = "yes" ; then 5749 echo "CONFIG_CPUID_H=y" >> $config_host_mak 5750fi 5751 5752if test "$int128" = "yes" ; then 5753 echo "CONFIG_INT128=y" >> $config_host_mak 5754fi 5755 5756if test "$atomic128" = "yes" ; then 5757 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 5758fi 5759 5760if test "$atomic64" = "yes" ; then 5761 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 5762fi 5763 5764if test "$getauxval" = "yes" ; then 5765 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 5766fi 5767 5768if test "$glusterfs" = "yes" ; then 5769 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 5770 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 5771 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 5772fi 5773 5774if test "$glusterfs_xlator_opt" = "yes" ; then 5775 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 5776fi 5777 5778if test "$glusterfs_discard" = "yes" ; then 5779 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 5780fi 5781 5782if test "$glusterfs_zerofill" = "yes" ; then 5783 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 5784fi 5785 5786if test "$libssh2" = "yes" ; then 5787 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 5788 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 5789 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 5790fi 5791 5792if test "$live_block_migration" = "yes" ; then 5793 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 5794fi 5795 5796# USB host support 5797if test "$libusb" = "yes"; then 5798 echo "HOST_USB=libusb legacy" >> $config_host_mak 5799else 5800 echo "HOST_USB=stub" >> $config_host_mak 5801fi 5802 5803# TPM passthrough support? 5804if test "$tpm" = "yes"; then 5805 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 5806 if test "$tpm_passthrough" = "yes"; then 5807 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 5808 fi 5809fi 5810 5811echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 5812if have_backend "nop"; then 5813 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 5814fi 5815if have_backend "simple"; then 5816 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 5817 # Set the appropriate trace file. 5818 trace_file="\"$trace_file-\" FMT_pid" 5819fi 5820if have_backend "log"; then 5821 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 5822fi 5823if have_backend "ust"; then 5824 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 5825fi 5826if have_backend "dtrace"; then 5827 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 5828 if test "$trace_backend_stap" = "yes" ; then 5829 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 5830 fi 5831fi 5832if have_backend "ftrace"; then 5833 if test "$linux" = "yes" ; then 5834 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 5835 else 5836 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 5837 fi 5838fi 5839if have_backend "syslog"; then 5840 if test "$posix_syslog" = "yes" ; then 5841 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 5842 else 5843 feature_not_found "syslog(trace backend)" "syslog not available" 5844 fi 5845fi 5846echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 5847 5848if test "$rdma" = "yes" ; then 5849 echo "CONFIG_RDMA=y" >> $config_host_mak 5850fi 5851 5852if test "$have_rtnetlink" = "yes" ; then 5853 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 5854fi 5855 5856if test "$replication" = "yes" ; then 5857 echo "CONFIG_REPLICATION=y" >> $config_host_mak 5858fi 5859 5860if test "$have_af_vsock" = "yes" ; then 5861 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 5862fi 5863 5864if test "$have_sysmacros" = "yes" ; then 5865 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 5866fi 5867 5868if test "$have_static_assert" = "yes" ; then 5869 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 5870fi 5871 5872# Hold two types of flag: 5873# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 5874# a thread we have a handle to 5875# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 5876# platform 5877if test "$pthread_setname_np" = "yes" ; then 5878 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 5879 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 5880fi 5881 5882if test "$vxhs" = "yes" ; then 5883 echo "CONFIG_VXHS=y" >> $config_host_mak 5884 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 5885fi 5886 5887if test "$tcg_interpreter" = "yes"; then 5888 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 5889elif test "$ARCH" = "sparc64" ; then 5890 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 5891elif test "$ARCH" = "s390x" ; then 5892 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 5893elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 5894 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 5895elif test "$ARCH" = "ppc64" ; then 5896 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 5897else 5898 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 5899fi 5900QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES" 5901 5902echo "TOOLS=$tools" >> $config_host_mak 5903echo "ROMS=$roms" >> $config_host_mak 5904echo "MAKE=$make" >> $config_host_mak 5905echo "INSTALL=$install" >> $config_host_mak 5906echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 5907echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 5908echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 5909echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 5910echo "PYTHON=$python" >> $config_host_mak 5911echo "CC=$cc" >> $config_host_mak 5912if $iasl -h > /dev/null 2>&1; then 5913 echo "IASL=$iasl" >> $config_host_mak 5914fi 5915echo "CC_I386=$cc_i386" >> $config_host_mak 5916echo "HOST_CC=$host_cc" >> $config_host_mak 5917echo "CXX=$cxx" >> $config_host_mak 5918echo "OBJCC=$objcc" >> $config_host_mak 5919echo "AR=$ar" >> $config_host_mak 5920echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 5921echo "AS=$as" >> $config_host_mak 5922echo "CCAS=$ccas" >> $config_host_mak 5923echo "CPP=$cpp" >> $config_host_mak 5924echo "OBJCOPY=$objcopy" >> $config_host_mak 5925echo "LD=$ld" >> $config_host_mak 5926echo "NM=$nm" >> $config_host_mak 5927echo "WINDRES=$windres" >> $config_host_mak 5928echo "CFLAGS=$CFLAGS" >> $config_host_mak 5929echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 5930echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 5931echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 5932if test "$sparse" = "yes" ; then 5933 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 5934 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 5935 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 5936 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 5937 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 5938fi 5939if test "$cross_prefix" != ""; then 5940 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 5941else 5942 echo "AUTOCONF_HOST := " >> $config_host_mak 5943fi 5944echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 5945echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 5946echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 5947echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 5948echo "LIBS+=$LIBS" >> $config_host_mak 5949echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 5950echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 5951echo "EXESUF=$EXESUF" >> $config_host_mak 5952echo "DSOSUF=$DSOSUF" >> $config_host_mak 5953echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 5954echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 5955echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 5956echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 5957echo "POD2MAN=$POD2MAN" >> $config_host_mak 5958echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 5959if test "$gcov" = "yes" ; then 5960 echo "CONFIG_GCOV=y" >> $config_host_mak 5961 echo "GCOV=$gcov_tool" >> $config_host_mak 5962fi 5963 5964# use included Linux headers 5965if test "$linux" = "yes" ; then 5966 mkdir -p linux-headers 5967 case "$cpu" in 5968 i386|x86_64|x32) 5969 linux_arch=x86 5970 ;; 5971 ppcemb|ppc|ppc64) 5972 linux_arch=powerpc 5973 ;; 5974 s390x) 5975 linux_arch=s390 5976 ;; 5977 aarch64) 5978 linux_arch=arm64 5979 ;; 5980 mips64) 5981 linux_arch=mips 5982 ;; 5983 *) 5984 # For most CPUs the kernel architecture name and QEMU CPU name match. 5985 linux_arch="$cpu" 5986 ;; 5987 esac 5988 # For non-KVM architectures we will not have asm headers 5989 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 5990 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 5991 fi 5992fi 5993 5994for target in $target_list; do 5995target_dir="$target" 5996config_target_mak=$target_dir/config-target.mak 5997target_name=$(echo $target | cut -d '-' -f 1) 5998target_bigendian="no" 5999 6000case "$target_name" in 6001 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 6002 target_bigendian=yes 6003 ;; 6004esac 6005target_softmmu="no" 6006target_user_only="no" 6007target_linux_user="no" 6008target_bsd_user="no" 6009case "$target" in 6010 ${target_name}-softmmu) 6011 target_softmmu="yes" 6012 ;; 6013 ${target_name}-linux-user) 6014 if test "$linux" != "yes" ; then 6015 error_exit "Target '$target' is only available on a Linux host" 6016 fi 6017 target_user_only="yes" 6018 target_linux_user="yes" 6019 ;; 6020 ${target_name}-bsd-user) 6021 if test "$bsd" != "yes" ; then 6022 error_exit "Target '$target' is only available on a BSD host" 6023 fi 6024 target_user_only="yes" 6025 target_bsd_user="yes" 6026 ;; 6027 *) 6028 error_exit "Target '$target' not recognised" 6029 exit 1 6030 ;; 6031esac 6032 6033mkdir -p $target_dir 6034echo "# Automatically generated by configure - do not modify" > $config_target_mak 6035 6036bflt="no" 6037mttcg="no" 6038interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 6039gdb_xml_files="" 6040 6041TARGET_ARCH="$target_name" 6042TARGET_BASE_ARCH="" 6043TARGET_ABI_DIR="" 6044 6045case "$target_name" in 6046 i386) 6047 gdb_xml_files="i386-32bit-core.xml" 6048 ;; 6049 x86_64) 6050 TARGET_BASE_ARCH=i386 6051 gdb_xml_files="i386-64bit-core.xml" 6052 ;; 6053 alpha) 6054 mttcg="yes" 6055 ;; 6056 arm|armeb) 6057 TARGET_ARCH=arm 6058 bflt="yes" 6059 mttcg="yes" 6060 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 6061 ;; 6062 aarch64) 6063 TARGET_BASE_ARCH=arm 6064 bflt="yes" 6065 mttcg="yes" 6066 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 6067 ;; 6068 cris) 6069 ;; 6070 hppa) 6071 ;; 6072 lm32) 6073 ;; 6074 m68k) 6075 bflt="yes" 6076 gdb_xml_files="cf-core.xml cf-fp.xml" 6077 ;; 6078 microblaze|microblazeel) 6079 TARGET_ARCH=microblaze 6080 bflt="yes" 6081 ;; 6082 mips|mipsel) 6083 TARGET_ARCH=mips 6084 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 6085 ;; 6086 mipsn32|mipsn32el) 6087 TARGET_ARCH=mips64 6088 TARGET_BASE_ARCH=mips 6089 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 6090 echo "TARGET_ABI32=y" >> $config_target_mak 6091 ;; 6092 mips64|mips64el) 6093 TARGET_ARCH=mips64 6094 TARGET_BASE_ARCH=mips 6095 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 6096 ;; 6097 moxie) 6098 ;; 6099 nios2) 6100 ;; 6101 or1k) 6102 TARGET_ARCH=openrisc 6103 TARGET_BASE_ARCH=openrisc 6104 ;; 6105 ppc) 6106 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 6107 ;; 6108 ppcemb) 6109 TARGET_BASE_ARCH=ppc 6110 TARGET_ABI_DIR=ppc 6111 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 6112 ;; 6113 ppc64) 6114 TARGET_BASE_ARCH=ppc 6115 TARGET_ABI_DIR=ppc 6116 mttcg=yes 6117 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6118 ;; 6119 ppc64le) 6120 TARGET_ARCH=ppc64 6121 TARGET_BASE_ARCH=ppc 6122 TARGET_ABI_DIR=ppc 6123 mttcg=yes 6124 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6125 ;; 6126 ppc64abi32) 6127 TARGET_ARCH=ppc64 6128 TARGET_BASE_ARCH=ppc 6129 TARGET_ABI_DIR=ppc 6130 echo "TARGET_ABI32=y" >> $config_target_mak 6131 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 6132 ;; 6133 sh4|sh4eb) 6134 TARGET_ARCH=sh4 6135 bflt="yes" 6136 ;; 6137 sparc) 6138 ;; 6139 sparc64) 6140 TARGET_BASE_ARCH=sparc 6141 ;; 6142 sparc32plus) 6143 TARGET_ARCH=sparc64 6144 TARGET_BASE_ARCH=sparc 6145 TARGET_ABI_DIR=sparc 6146 echo "TARGET_ABI32=y" >> $config_target_mak 6147 ;; 6148 s390x) 6149 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml" 6150 ;; 6151 tilegx) 6152 ;; 6153 tricore) 6154 ;; 6155 unicore32) 6156 ;; 6157 xtensa|xtensaeb) 6158 TARGET_ARCH=xtensa 6159 ;; 6160 *) 6161 error_exit "Unsupported target CPU" 6162 ;; 6163esac 6164# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 6165if [ "$TARGET_BASE_ARCH" = "" ]; then 6166 TARGET_BASE_ARCH=$TARGET_ARCH 6167fi 6168 6169symlink "$source_path/Makefile.target" "$target_dir/Makefile" 6170 6171upper() { 6172 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 6173} 6174 6175target_arch_name="$(upper $TARGET_ARCH)" 6176echo "TARGET_$target_arch_name=y" >> $config_target_mak 6177echo "TARGET_NAME=$target_name" >> $config_target_mak 6178echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 6179if [ "$TARGET_ABI_DIR" = "" ]; then 6180 TARGET_ABI_DIR=$TARGET_ARCH 6181fi 6182echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 6183if [ "$HOST_VARIANT_DIR" != "" ]; then 6184 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 6185fi 6186case "$target_name" in 6187 i386|x86_64) 6188 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then 6189 echo "CONFIG_XEN=y" >> $config_target_mak 6190 if test "$xen_pci_passthrough" = yes; then 6191 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 6192 fi 6193 fi 6194 ;; 6195 *) 6196esac 6197case "$target_name" in 6198 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips) 6199 # Make sure the target and host cpus are compatible 6200 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \ 6201 \( "$target_name" = "$cpu" -o \ 6202 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \ 6203 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \ 6204 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \ 6205 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \ 6206 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \ 6207 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \ 6208 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \ 6209 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \ 6210 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then 6211 echo "CONFIG_KVM=y" >> $config_target_mak 6212 if test "$vhost_net" = "yes" ; then 6213 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 6214 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak 6215 fi 6216 fi 6217esac 6218if test "$hax" = "yes" ; then 6219 if test "$target_softmmu" = "yes" ; then 6220 case "$target_name" in 6221 i386|x86_64) 6222 echo "CONFIG_HAX=y" >> $config_target_mak 6223 ;; 6224 esac 6225 fi 6226fi 6227if test "$target_bigendian" = "yes" ; then 6228 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 6229fi 6230if test "$target_softmmu" = "yes" ; then 6231 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 6232 if test "$mttcg" = "yes" ; then 6233 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 6234 fi 6235fi 6236if test "$target_user_only" = "yes" ; then 6237 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 6238 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 6239fi 6240if test "$target_linux_user" = "yes" ; then 6241 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 6242fi 6243list="" 6244if test ! -z "$gdb_xml_files" ; then 6245 for x in $gdb_xml_files; do 6246 list="$list $source_path/gdb-xml/$x" 6247 done 6248 echo "TARGET_XML_FILES=$list" >> $config_target_mak 6249fi 6250 6251if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 6252 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 6253fi 6254if test "$target_bsd_user" = "yes" ; then 6255 echo "CONFIG_BSD_USER=y" >> $config_target_mak 6256fi 6257 6258# generate QEMU_CFLAGS/LDFLAGS for targets 6259 6260cflags="" 6261ldflags="" 6262 6263disas_config() { 6264 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 6265 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 6266} 6267 6268for i in $ARCH $TARGET_BASE_ARCH ; do 6269 case "$i" in 6270 alpha) 6271 disas_config "ALPHA" 6272 ;; 6273 aarch64) 6274 if test -n "${cxx}"; then 6275 disas_config "ARM_A64" 6276 fi 6277 ;; 6278 arm) 6279 disas_config "ARM" 6280 if test -n "${cxx}"; then 6281 disas_config "ARM_A64" 6282 fi 6283 ;; 6284 cris) 6285 disas_config "CRIS" 6286 ;; 6287 hppa) 6288 disas_config "HPPA" 6289 ;; 6290 i386|x86_64|x32) 6291 disas_config "I386" 6292 ;; 6293 ia64*) 6294 disas_config "IA64" 6295 ;; 6296 lm32) 6297 disas_config "LM32" 6298 ;; 6299 m68k) 6300 disas_config "M68K" 6301 ;; 6302 microblaze*) 6303 disas_config "MICROBLAZE" 6304 ;; 6305 mips*) 6306 disas_config "MIPS" 6307 ;; 6308 moxie*) 6309 disas_config "MOXIE" 6310 ;; 6311 nios2) 6312 disas_config "NIOS2" 6313 ;; 6314 or1k) 6315 disas_config "OPENRISC" 6316 ;; 6317 ppc*) 6318 disas_config "PPC" 6319 ;; 6320 s390*) 6321 disas_config "S390" 6322 ;; 6323 sh4) 6324 disas_config "SH4" 6325 ;; 6326 sparc*) 6327 disas_config "SPARC" 6328 ;; 6329 xtensa*) 6330 disas_config "XTENSA" 6331 ;; 6332 esac 6333done 6334if test "$tcg_interpreter" = "yes" ; then 6335 disas_config "TCI" 6336fi 6337 6338case "$ARCH" in 6339alpha) 6340 # Ensure there's only a single GP 6341 cflags="-msmall-data $cflags" 6342;; 6343esac 6344 6345if test "$gprof" = "yes" ; then 6346 echo "TARGET_GPROF=yes" >> $config_target_mak 6347 if test "$target_linux_user" = "yes" ; then 6348 cflags="-p $cflags" 6349 ldflags="-p $ldflags" 6350 fi 6351 if test "$target_softmmu" = "yes" ; then 6352 ldflags="-p $ldflags" 6353 echo "GPROF_CFLAGS=-p" >> $config_target_mak 6354 fi 6355fi 6356 6357if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 6358 ldflags="$ldflags $textseg_ldflags" 6359fi 6360 6361echo "LDFLAGS+=$ldflags" >> $config_target_mak 6362echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 6363 6364done # for target in $targets 6365 6366if [ "$pixman" = "internal" ]; then 6367 echo "config-host.h: subdir-pixman" >> $config_host_mak 6368fi 6369 6370if [ "$dtc_internal" = "yes" ]; then 6371 echo "config-host.h: subdir-dtc" >> $config_host_mak 6372fi 6373 6374if test "$numa" = "yes"; then 6375 echo "CONFIG_NUMA=y" >> $config_host_mak 6376fi 6377 6378if test "$ccache_cpp2" = "yes"; then 6379 echo "export CCACHE_CPP2=y" >> $config_host_mak 6380fi 6381 6382# build tree in object directory in case the source is not in the current directory 6383DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests" 6384DIRS="$DIRS docs fsdev" 6385DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 6386DIRS="$DIRS roms/seabios roms/vgabios" 6387DIRS="$DIRS qapi-generated" 6388FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 6389FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 6390FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 6391FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 6392FILES="$FILES pc-bios/spapr-rtas/Makefile" 6393FILES="$FILES pc-bios/s390-ccw/Makefile" 6394FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 6395FILES="$FILES pc-bios/qemu-icon.bmp" 6396for bios_file in \ 6397 $source_path/pc-bios/*.bin \ 6398 $source_path/pc-bios/*.lid \ 6399 $source_path/pc-bios/*.aml \ 6400 $source_path/pc-bios/*.rom \ 6401 $source_path/pc-bios/*.dtb \ 6402 $source_path/pc-bios/*.img \ 6403 $source_path/pc-bios/openbios-* \ 6404 $source_path/pc-bios/u-boot.* \ 6405 $source_path/pc-bios/palcode-* 6406do 6407 FILES="$FILES pc-bios/$(basename $bios_file)" 6408done 6409for test_file in $(find $source_path/tests/acpi-test-data -type f) 6410do 6411 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')" 6412done 6413mkdir -p $DIRS 6414for f in $FILES ; do 6415 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 6416 symlink "$source_path/$f" "$f" 6417 fi 6418done 6419 6420# temporary config to build submodules 6421for rom in seabios vgabios ; do 6422 config_mak=roms/$rom/config.mak 6423 echo "# Automatically generated by configure - do not modify" > $config_mak 6424 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 6425 echo "AS=$as" >> $config_mak 6426 echo "CCAS=$ccas" >> $config_mak 6427 echo "CC=$cc" >> $config_mak 6428 echo "BCC=bcc" >> $config_mak 6429 echo "CPP=$cpp" >> $config_mak 6430 echo "OBJCOPY=objcopy" >> $config_mak 6431 echo "IASL=$iasl" >> $config_mak 6432 echo "LD=$ld" >> $config_mak 6433done 6434 6435# set up tests data directory 6436if [ ! -e tests/data ]; then 6437 symlink "$source_path/tests/data" tests/data 6438fi 6439 6440# set up qemu-iotests in this build directory 6441iotests_common_env="tests/qemu-iotests/common.env" 6442iotests_check="tests/qemu-iotests/check" 6443 6444echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 6445echo >> "$iotests_common_env" 6446echo "export PYTHON='$python'" >> "$iotests_common_env" 6447 6448if [ ! -e "$iotests_check" ]; then 6449 symlink "$source_path/$iotests_check" "$iotests_check" 6450fi 6451 6452# Save the configure command line for later reuse. 6453cat <<EOD >config.status 6454#!/bin/sh 6455# Generated by configure. 6456# Run this file to recreate the current configuration. 6457# Compiler output produced by configure, useful for debugging 6458# configure, is in config.log if it exists. 6459EOD 6460printf "exec" >>config.status 6461printf " '%s'" "$0" "$@" >>config.status 6462echo ' "$@"' >>config.status 6463chmod +x config.status 6464 6465rm -r "$TMPDIR1" 6466