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