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