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