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