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