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