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