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