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