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