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