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