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