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