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