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