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