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" 81 82rm -f config.log 83 84# Print a helpful header at the top of config.log 85echo "# QEMU configure log $(date)" >> config.log 86printf "# Configured with:" >> config.log 87printf " '%s'" "$0" "$@" >> config.log 88echo >> config.log 89echo "#" >> config.log 90 91quote_sh() { 92 printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&'," 93} 94 95print_error() { 96 (echo 97 echo "ERROR: $1" 98 while test -n "$2"; do 99 echo " $2" 100 shift 101 done 102 echo) >&2 103} 104 105error_exit() { 106 print_error "$@" 107 exit 1 108} 109 110do_compiler() { 111 # Run the compiler, capturing its output to the log. First argument 112 # is compiler binary to execute. 113 compiler="$1" 114 shift 115 if test -n "$BASH_VERSION"; then eval ' 116 echo >>config.log " 117funcs: ${FUNCNAME[*]} 118lines: ${BASH_LINENO[*]}" 119 '; fi 120 echo $compiler "$@" >> config.log 121 $compiler "$@" >> config.log 2>&1 || return $? 122 # Test passed. If this is an --enable-werror build, rerun 123 # the test with -Werror and bail out if it fails. This 124 # makes warning-generating-errors in configure test code 125 # obvious to developers. 126 if test "$werror" != "yes"; then 127 return 0 128 fi 129 # Don't bother rerunning the compile if we were already using -Werror 130 case "$*" in 131 *-Werror*) 132 return 0 133 ;; 134 esac 135 echo $compiler -Werror "$@" >> config.log 136 $compiler -Werror "$@" >> config.log 2>&1 && return $? 137 error_exit "configure test passed without -Werror but failed with -Werror." \ 138 "This is probably a bug in the configure script. The failing command" \ 139 "will be at the bottom of config.log." \ 140 "You can run configure with --disable-werror to bypass this check." 141} 142 143do_cc() { 144 do_compiler "$cc" $CPU_CFLAGS "$@" 145} 146 147do_cxx() { 148 do_compiler "$cxx" $CPU_CFLAGS "$@" 149} 150 151# Append $2 to the variable named $1, with space separation 152add_to() { 153 eval $1=\${$1:+\"\$$1 \"}\$2 154} 155 156update_cxxflags() { 157 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those 158 # options which some versions of GCC's C++ compiler complain about 159 # because they only make sense for C programs. 160 QEMU_CXXFLAGS="-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS" 161 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/) 162 for arg in $QEMU_CFLAGS; do 163 case $arg in 164 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ 165 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) 166 ;; 167 *) 168 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg 169 ;; 170 esac 171 done 172} 173 174compile_object() { 175 local_cflags="$1" 176 do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC 177} 178 179compile_prog() { 180 local_cflags="$1" 181 local_ldflags="$2" 182 do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \ 183 $LDFLAGS $EXTRA_LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags 184} 185 186# symbolically link $1 to $2. Portable version of "ln -sf". 187symlink() { 188 rm -rf "$2" 189 mkdir -p "$(dirname "$2")" 190 ln -s "$1" "$2" 191} 192 193# check whether a command is available to this shell (may be either an 194# executable or a builtin) 195has() { 196 type "$1" >/dev/null 2>&1 197} 198 199version_ge () { 200 local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ') 201 local_ver2=$(echo "$2" | tr . ' ') 202 while true; do 203 set x $local_ver1 204 local_first=${2-0} 205 # 'shift 2' if $2 is set, or 'shift' if $2 is not set 206 shift ${2:+2} 207 local_ver1=$* 208 set x $local_ver2 209 # the second argument finished, the first must be greater or equal 210 test $# = 1 && return 0 211 test $local_first -lt $2 && return 1 212 test $local_first -gt $2 && return 0 213 shift ${2:+2} 214 local_ver2=$* 215 done 216} 217 218glob() { 219 eval test -z '"${1#'"$2"'}"' 220} 221 222ld_has() { 223 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 224} 225 226if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]"; 227then 228 error_exit "main directory cannot contain spaces nor colons" 229fi 230 231# default parameters 232cpu="" 233iasl="iasl" 234interp_prefix="/usr/gnemul/qemu-%M" 235static="no" 236cross_compile="no" 237cross_prefix="" 238audio_drv_list="default" 239block_drv_rw_whitelist="" 240block_drv_ro_whitelist="" 241block_drv_whitelist_tools="no" 242host_cc="cc" 243libs_qga="" 244debug_info="yes" 245lto="false" 246stack_protector="" 247safe_stack="" 248use_containers="yes" 249gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb") 250 251if test -e "$source_path/.git" 252then 253 git_submodules_action="update" 254else 255 git_submodules_action="ignore" 256fi 257 258git_submodules="ui/keycodemapdb" 259git="git" 260 261# Don't accept a target_list environment variable. 262unset target_list 263unset target_list_exclude 264 265# Default value for a variable defining feature "foo". 266# * foo="no" feature will only be used if --enable-foo arg is given 267# * foo="" feature will be searched for, and if found, will be used 268# unless --disable-foo is given 269# * foo="yes" this value will only be set by --enable-foo flag. 270# feature will searched for, 271# if not found, configure exits with error 272# 273# Always add --enable-foo and --disable-foo command line args. 274# Distributions want to ensure that several features are compiled in, and it 275# is impossible without a --enable-foo that exits if a feature is not found. 276 277default_feature="" 278# parse CC options second 279for opt do 280 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 281 case "$opt" in 282 --without-default-features) 283 default_feature="no" 284 ;; 285 esac 286done 287 288EXTRA_CFLAGS="" 289EXTRA_CXXFLAGS="" 290EXTRA_LDFLAGS="" 291 292xen_ctrl_version="$default_feature" 293membarrier="$default_feature" 294vhost_kernel="$default_feature" 295vhost_net="$default_feature" 296vhost_crypto="$default_feature" 297vhost_scsi="$default_feature" 298vhost_vsock="$default_feature" 299vhost_user="no" 300vhost_user_fs="$default_feature" 301vhost_vdpa="$default_feature" 302rdma="$default_feature" 303pvrdma="$default_feature" 304gprof="no" 305debug_tcg="no" 306debug="no" 307sanitizers="no" 308tsan="no" 309fortify_source="$default_feature" 310gcov="no" 311EXESUF="" 312modules="no" 313module_upgrades="no" 314prefix="/usr/local" 315qemu_suffix="qemu" 316profiler="no" 317softmmu="yes" 318linux_user="" 319bsd_user="" 320pkgversion="" 321pie="" 322qom_cast_debug="yes" 323trace_backends="log" 324trace_file="trace" 325opengl="$default_feature" 326cpuid_h="no" 327avx2_opt="$default_feature" 328guest_agent="$default_feature" 329vss_win32_sdk="$default_feature" 330win_sdk="no" 331want_tools="$default_feature" 332coroutine="" 333coroutine_pool="$default_feature" 334debug_stack_usage="no" 335crypto_afalg="no" 336tls_priority="NORMAL" 337tpm="$default_feature" 338live_block_migration=${default_feature:-yes} 339numa="$default_feature" 340replication=${default_feature:-yes} 341bochs=${default_feature:-yes} 342cloop=${default_feature:-yes} 343dmg=${default_feature:-yes} 344qcow1=${default_feature:-yes} 345vdi=${default_feature:-yes} 346vvfat=${default_feature:-yes} 347qed=${default_feature:-yes} 348parallels=${default_feature:-yes} 349debug_mutex="no" 350plugins="$default_feature" 351rng_none="no" 352secret_keyring="$default_feature" 353meson="" 354meson_args="" 355ninja="" 356gio="$default_feature" 357skip_meson=no 358slirp_smbd="$default_feature" 359 360# The following Meson options are handled manually (still they 361# are included in the automatically generated help message) 362 363# 1. Track which submodules are needed 364capstone="auto" 365fdt="auto" 366slirp="auto" 367 368# 2. Support --with/--without option 369default_devices="true" 370 371# 3. Automatically enable/disable other options 372tcg="enabled" 373cfi="false" 374 375# 4. Detection partly done in configure 376xen=${default_feature:+disabled} 377 378# parse CC options second 379for opt do 380 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 381 case "$opt" in 382 --cross-prefix=*) cross_prefix="$optarg" 383 cross_compile="yes" 384 ;; 385 --cc=*) CC="$optarg" 386 ;; 387 --cxx=*) CXX="$optarg" 388 ;; 389 --cpu=*) cpu="$optarg" 390 ;; 391 --extra-cflags=*) 392 EXTRA_CFLAGS="$EXTRA_CFLAGS $optarg" 393 EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg" 394 ;; 395 --extra-cxxflags=*) EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg" 396 ;; 397 --extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg" 398 ;; 399 --enable-debug-info) debug_info="yes" 400 ;; 401 --disable-debug-info) debug_info="no" 402 ;; 403 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" 404 ;; 405 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-cflags-}; cc_arch=${cc_arch%%=*} 406 eval "cross_cc_cflags_${cc_arch}=\$optarg" 407 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}" 408 ;; 409 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} 410 cc_archs="$cc_archs $cc_arch" 411 eval "cross_cc_${cc_arch}=\$optarg" 412 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" 413 ;; 414 esac 415done 416# OS specific 417# Using uname is really, really broken. Once we have the right set of checks 418# we can eliminate its usage altogether. 419 420# Preferred compiler: 421# ${CC} (if set) 422# ${cross_prefix}gcc (if cross-prefix specified) 423# system compiler 424if test -z "${CC}${cross_prefix}"; then 425 cc="$host_cc" 426else 427 cc="${CC-${cross_prefix}gcc}" 428fi 429 430if test -z "${CXX}${cross_prefix}"; then 431 cxx="c++" 432else 433 cxx="${CXX-${cross_prefix}g++}" 434fi 435 436ar="${AR-${cross_prefix}ar}" 437as="${AS-${cross_prefix}as}" 438ccas="${CCAS-$cc}" 439cpp="${CPP-$cc -E}" 440objcopy="${OBJCOPY-${cross_prefix}objcopy}" 441ld="${LD-${cross_prefix}ld}" 442ranlib="${RANLIB-${cross_prefix}ranlib}" 443nm="${NM-${cross_prefix}nm}" 444strip="${STRIP-${cross_prefix}strip}" 445windres="${WINDRES-${cross_prefix}windres}" 446pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" 447query_pkg_config() { 448 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" 449} 450pkg_config=query_pkg_config 451sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" 452 453# default flags for all hosts 454# We use -fwrapv to tell the compiler that we require a C dialect where 455# left shift of signed integers is well defined and has the expected 456# 2s-complement style results. (Both clang and gcc agree that it 457# provides these semantics.) 458QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv" 459QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" 460QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" 461QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" 462 463QEMU_LDFLAGS= 464 465# Flags that are needed during configure but later taken care of by Meson 466CONFIGURE_CFLAGS="-std=gnu11 -Wall" 467CONFIGURE_LDFLAGS= 468 469 470check_define() { 471cat > $TMPC <<EOF 472#if !defined($1) 473#error $1 not defined 474#endif 475int main(void) { return 0; } 476EOF 477 compile_object 478} 479 480check_include() { 481cat > $TMPC <<EOF 482#include <$1> 483int main(void) { return 0; } 484EOF 485 compile_object 486} 487 488write_c_skeleton() { 489 cat > $TMPC <<EOF 490int main(void) { return 0; } 491EOF 492} 493 494if check_define __linux__ ; then 495 targetos=linux 496elif check_define _WIN32 ; then 497 targetos=windows 498elif check_define __OpenBSD__ ; then 499 targetos=openbsd 500elif check_define __sun__ ; then 501 targetos=sunos 502elif check_define __HAIKU__ ; then 503 targetos=haiku 504elif check_define __FreeBSD__ ; then 505 targetos=freebsd 506elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then 507 targetos=gnu/kfreebsd 508elif check_define __DragonFly__ ; then 509 targetos=dragonfly 510elif check_define __NetBSD__; then 511 targetos=netbsd 512elif check_define __APPLE__; then 513 targetos=darwin 514else 515 # This is a fatal error, but don't report it yet, because we 516 # might be going to just print the --help text, or it might 517 # be the result of a missing compiler. 518 targetos=bogus 519fi 520 521# OS specific 522 523mingw32="no" 524bsd="no" 525linux="no" 526solaris="no" 527case $targetos in 528windows) 529 mingw32="yes" 530 plugins="no" 531 pie="no" 532;; 533gnu/kfreebsd) 534 bsd="yes" 535;; 536freebsd) 537 bsd="yes" 538 make="${MAKE-gmake}" 539 # needed for kinfo_getvmmap(3) in libutil.h 540;; 541dragonfly) 542 bsd="yes" 543 make="${MAKE-gmake}" 544;; 545netbsd) 546 bsd="yes" 547 make="${MAKE-gmake}" 548;; 549openbsd) 550 bsd="yes" 551 make="${MAKE-gmake}" 552;; 553darwin) 554 bsd="yes" 555 darwin="yes" 556 # Disable attempts to use ObjectiveC features in os/object.h since they 557 # won't work when we're compiling with gcc as a C compiler. 558 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS" 559;; 560sunos) 561 solaris="yes" 562 make="${MAKE-gmake}" 563 smbd="${SMBD-/usr/sfw/sbin/smbd}" 564# needed for CMSG_ macros in sys/socket.h 565 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS" 566# needed for TIOCWIN* defines in termios.h 567 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS" 568 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo 569 # Note that this check is broken for cross-compilation: if you're 570 # cross-compiling to one of these OSes then you'll need to specify 571 # the correct CPU with the --cpu option. 572 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then 573 cpu="x86_64" 574 fi 575;; 576haiku) 577 pie="no" 578 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS" 579;; 580linux) 581 linux="yes" 582 vhost_user=${default_feature:-yes} 583;; 584esac 585 586if test ! -z "$cpu" ; then 587 # command line argument 588 : 589elif check_define __i386__ ; then 590 cpu="i386" 591elif check_define __x86_64__ ; then 592 if check_define __ILP32__ ; then 593 cpu="x32" 594 else 595 cpu="x86_64" 596 fi 597elif check_define __sparc__ ; then 598 if check_define __arch64__ ; then 599 cpu="sparc64" 600 else 601 cpu="sparc" 602 fi 603elif check_define _ARCH_PPC ; then 604 if check_define _ARCH_PPC64 ; then 605 if check_define _LITTLE_ENDIAN ; then 606 cpu="ppc64le" 607 else 608 cpu="ppc64" 609 fi 610 else 611 cpu="ppc" 612 fi 613elif check_define __mips__ ; then 614 cpu="mips" 615elif check_define __s390__ ; then 616 if check_define __s390x__ ; then 617 cpu="s390x" 618 else 619 cpu="s390" 620 fi 621elif check_define __riscv ; then 622 cpu="riscv" 623elif check_define __arm__ ; then 624 cpu="arm" 625elif check_define __aarch64__ ; then 626 cpu="aarch64" 627elif check_define __loongarch64 ; then 628 cpu="loongarch64" 629else 630 cpu=$(uname -m) 631fi 632 633# Normalise host CPU name, set multilib cflags 634# Note that this case should only have supported host CPUs, not guests. 635case "$cpu" in 636 armv*b|armv*l|arm) 637 cpu="arm" ;; 638 639 i386|i486|i586|i686|i86pc|BePC) 640 cpu="i386" 641 CPU_CFLAGS="-m32" ;; 642 x32) 643 cpu="x86_64" 644 CPU_CFLAGS="-mx32" ;; 645 x86_64|amd64) 646 cpu="x86_64" 647 # ??? Only extremely old AMD cpus do not have cmpxchg16b. 648 # If we truly care, we should simply detect this case at 649 # runtime and generate the fallback to serial emulation. 650 CPU_CFLAGS="-m64 -mcx16" ;; 651 652 mips*) 653 cpu="mips" ;; 654 655 ppc) 656 CPU_CFLAGS="-m32" ;; 657 ppc64) 658 CPU_CFLAGS="-m64 -mbig" ;; 659 ppc64le) 660 cpu="ppc64" 661 CPU_CFLAGS="-m64 -mlittle" ;; 662 663 s390) 664 CPU_CFLAGS="-m31" ;; 665 s390x) 666 CPU_CFLAGS="-m64" ;; 667 668 sparc|sun4[cdmuv]) 669 cpu="sparc" 670 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" ;; 671 sparc64) 672 CPU_CFLAGS="-m64 -mcpu=ultrasparc" ;; 673esac 674 675: ${make=${MAKE-make}} 676 677# We prefer python 3.x. A bare 'python' is traditionally 678# python 2.x, but some distros have it as python 3.x, so 679# we check that too 680python= 681explicit_python=no 682for binary in "${PYTHON-python3}" python 683do 684 if has "$binary" 685 then 686 python=$(command -v "$binary") 687 break 688 fi 689done 690 691 692# Check for ancillary tools used in testing 693genisoimage= 694for binary in genisoimage mkisofs 695do 696 if has $binary 697 then 698 genisoimage=$(command -v "$binary") 699 break 700 fi 701done 702 703# Default objcc to clang if available, otherwise use CC 704if has clang; then 705 objcc=clang 706else 707 objcc="$cc" 708fi 709 710if test "$mingw32" = "yes" ; then 711 EXESUF=".exe" 712 # MinGW needs -mthreads for TLS and macro _MT. 713 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS" 714 write_c_skeleton; 715 prefix="/qemu" 716 qemu_suffix="" 717 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga" 718fi 719 720werror="" 721 722. $source_path/scripts/meson-buildoptions.sh 723 724meson_options= 725meson_option_parse() { 726 meson_options="$meson_options $(_meson_option_parse "$@")" 727 if test $? -eq 1; then 728 echo "ERROR: unknown option $1" 729 echo "Try '$0 --help' for more information" 730 exit 1 731 fi 732} 733 734for opt do 735 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 736 case "$opt" in 737 --help|-h) show_help=yes 738 ;; 739 --version|-V) exec cat $source_path/VERSION 740 ;; 741 --prefix=*) prefix="$optarg" 742 ;; 743 --interp-prefix=*) interp_prefix="$optarg" 744 ;; 745 --cross-prefix=*) 746 ;; 747 --cc=*) 748 ;; 749 --host-cc=*) host_cc="$optarg" 750 ;; 751 --cxx=*) 752 ;; 753 --iasl=*) iasl="$optarg" 754 ;; 755 --objcc=*) objcc="$optarg" 756 ;; 757 --make=*) make="$optarg" 758 ;; 759 --install=*) 760 ;; 761 --python=*) python="$optarg" ; explicit_python=yes 762 ;; 763 --sphinx-build=*) sphinx_build="$optarg" 764 ;; 765 --skip-meson) skip_meson=yes 766 ;; 767 --meson=*) meson="$optarg" 768 ;; 769 --ninja=*) ninja="$optarg" 770 ;; 771 --smbd=*) smbd="$optarg" 772 ;; 773 --extra-cflags=*) 774 ;; 775 --extra-cxxflags=*) 776 ;; 777 --extra-ldflags=*) 778 ;; 779 --enable-debug-info) 780 ;; 781 --disable-debug-info) 782 ;; 783 --cross-cc-*) 784 ;; 785 --enable-modules) 786 modules="yes" 787 ;; 788 --disable-modules) 789 modules="no" 790 ;; 791 --disable-module-upgrades) module_upgrades="no" 792 ;; 793 --enable-module-upgrades) module_upgrades="yes" 794 ;; 795 --cpu=*) 796 ;; 797 --target-list=*) target_list="$optarg" 798 if test "$target_list_exclude"; then 799 error_exit "Can't mix --target-list with --target-list-exclude" 800 fi 801 ;; 802 --target-list-exclude=*) target_list_exclude="$optarg" 803 if test "$target_list"; then 804 error_exit "Can't mix --target-list-exclude with --target-list" 805 fi 806 ;; 807 --with-trace-file=*) trace_file="$optarg" 808 ;; 809 --with-default-devices) default_devices="true" 810 ;; 811 --without-default-devices) default_devices="false" 812 ;; 813 --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option" 814 ;; 815 --with-devices-*) device_arch=${opt#--with-devices-}; 816 device_arch=${device_arch%%=*} 817 cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak 818 if test -f "$cf"; then 819 device_archs="$device_archs $device_arch" 820 eval "devices_${device_arch}=\$optarg" 821 else 822 error_exit "File $cf does not exist" 823 fi 824 ;; 825 --without-default-features) # processed above 826 ;; 827 --enable-gprof) gprof="yes" 828 ;; 829 --enable-gcov) gcov="yes" 830 ;; 831 --static) 832 static="yes" 833 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS" 834 ;; 835 --mandir=*) mandir="$optarg" 836 ;; 837 --bindir=*) bindir="$optarg" 838 ;; 839 --libdir=*) libdir="$optarg" 840 ;; 841 --libexecdir=*) libexecdir="$optarg" 842 ;; 843 --includedir=*) includedir="$optarg" 844 ;; 845 --datadir=*) datadir="$optarg" 846 ;; 847 --with-suffix=*) qemu_suffix="$optarg" 848 ;; 849 --docdir=*) docdir="$optarg" 850 ;; 851 --localedir=*) localedir="$optarg" 852 ;; 853 --sysconfdir=*) sysconfdir="$optarg" 854 ;; 855 --localstatedir=*) local_statedir="$optarg" 856 ;; 857 --firmwarepath=*) firmwarepath="$optarg" 858 ;; 859 --host=*|--build=*|\ 860 --disable-dependency-tracking|\ 861 --sbindir=*|--sharedstatedir=*|\ 862 --oldincludedir=*|--datarootdir=*|--infodir=*|\ 863 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) 864 # These switches are silently ignored, for compatibility with 865 # autoconf-generated configure scripts. This allows QEMU's 866 # configure to be used by RPM and similar macros that set 867 # lots of directory switches by default. 868 ;; 869 --disable-qom-cast-debug) qom_cast_debug="no" 870 ;; 871 --enable-qom-cast-debug) qom_cast_debug="yes" 872 ;; 873 --audio-drv-list=*) audio_drv_list="$optarg" 874 ;; 875 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 876 ;; 877 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 878 ;; 879 --enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="yes" 880 ;; 881 --disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="no" 882 ;; 883 --enable-debug-tcg) debug_tcg="yes" 884 ;; 885 --disable-debug-tcg) debug_tcg="no" 886 ;; 887 --enable-debug) 888 # Enable debugging options that aren't excessively noisy 889 debug_tcg="yes" 890 debug_mutex="yes" 891 debug="yes" 892 fortify_source="no" 893 ;; 894 --enable-sanitizers) sanitizers="yes" 895 ;; 896 --disable-sanitizers) sanitizers="no" 897 ;; 898 --enable-tsan) tsan="yes" 899 ;; 900 --disable-tsan) tsan="no" 901 ;; 902 --disable-slirp) slirp="disabled" 903 ;; 904 --enable-slirp) slirp="enabled" 905 ;; 906 --enable-slirp=git) slirp="internal" 907 ;; 908 --enable-slirp=*) slirp="$optarg" 909 ;; 910 --disable-xen) xen="disabled" 911 ;; 912 --enable-xen) xen="enabled" 913 ;; 914 --disable-tcg) tcg="disabled" 915 plugins="no" 916 ;; 917 --enable-tcg) tcg="enabled" 918 ;; 919 --enable-profiler) profiler="yes" 920 ;; 921 --disable-system) softmmu="no" 922 ;; 923 --enable-system) softmmu="yes" 924 ;; 925 --disable-user) 926 linux_user="no" ; 927 bsd_user="no" ; 928 ;; 929 --enable-user) ;; 930 --disable-linux-user) linux_user="no" 931 ;; 932 --enable-linux-user) linux_user="yes" 933 ;; 934 --disable-bsd-user) bsd_user="no" 935 ;; 936 --enable-bsd-user) bsd_user="yes" 937 ;; 938 --enable-pie) pie="yes" 939 ;; 940 --disable-pie) pie="no" 941 ;; 942 --enable-werror) werror="yes" 943 ;; 944 --disable-werror) werror="no" 945 ;; 946 --enable-lto) lto="true" 947 ;; 948 --disable-lto) lto="false" 949 ;; 950 --enable-stack-protector) stack_protector="yes" 951 ;; 952 --disable-stack-protector) stack_protector="no" 953 ;; 954 --enable-safe-stack) safe_stack="yes" 955 ;; 956 --disable-safe-stack) safe_stack="no" 957 ;; 958 --enable-cfi) 959 cfi="true"; 960 lto="true"; 961 ;; 962 --disable-cfi) cfi="false" 963 ;; 964 --disable-fdt) fdt="disabled" 965 ;; 966 --enable-fdt) fdt="enabled" 967 ;; 968 --enable-fdt=git) fdt="internal" 969 ;; 970 --enable-fdt=*) fdt="$optarg" 971 ;; 972 --disable-membarrier) membarrier="no" 973 ;; 974 --enable-membarrier) membarrier="yes" 975 ;; 976 --with-pkgversion=*) pkgversion="$optarg" 977 ;; 978 --with-coroutine=*) coroutine="$optarg" 979 ;; 980 --disable-coroutine-pool) coroutine_pool="no" 981 ;; 982 --enable-coroutine-pool) coroutine_pool="yes" 983 ;; 984 --enable-debug-stack-usage) debug_stack_usage="yes" 985 ;; 986 --enable-crypto-afalg) crypto_afalg="yes" 987 ;; 988 --disable-crypto-afalg) crypto_afalg="no" 989 ;; 990 --disable-vhost-net) vhost_net="no" 991 ;; 992 --enable-vhost-net) vhost_net="yes" 993 ;; 994 --disable-vhost-crypto) vhost_crypto="no" 995 ;; 996 --enable-vhost-crypto) vhost_crypto="yes" 997 ;; 998 --disable-vhost-scsi) vhost_scsi="no" 999 ;; 1000 --enable-vhost-scsi) vhost_scsi="yes" 1001 ;; 1002 --disable-vhost-vsock) vhost_vsock="no" 1003 ;; 1004 --enable-vhost-vsock) vhost_vsock="yes" 1005 ;; 1006 --disable-vhost-user-fs) vhost_user_fs="no" 1007 ;; 1008 --enable-vhost-user-fs) vhost_user_fs="yes" 1009 ;; 1010 --disable-opengl) opengl="no" 1011 ;; 1012 --enable-opengl) opengl="yes" 1013 ;; 1014 --disable-zlib-test) 1015 ;; 1016 --enable-guest-agent) guest_agent="yes" 1017 ;; 1018 --disable-guest-agent) guest_agent="no" 1019 ;; 1020 --with-vss-sdk) vss_win32_sdk="" 1021 ;; 1022 --with-vss-sdk=*) vss_win32_sdk="$optarg" 1023 ;; 1024 --without-vss-sdk) vss_win32_sdk="no" 1025 ;; 1026 --with-win-sdk) win_sdk="" 1027 ;; 1028 --with-win-sdk=*) win_sdk="$optarg" 1029 ;; 1030 --without-win-sdk) win_sdk="no" 1031 ;; 1032 --enable-tools) want_tools="yes" 1033 ;; 1034 --disable-tools) want_tools="no" 1035 ;; 1036 --disable-avx2) avx2_opt="no" 1037 ;; 1038 --enable-avx2) avx2_opt="yes" 1039 ;; 1040 --disable-avx512f) avx512f_opt="no" 1041 ;; 1042 --enable-avx512f) avx512f_opt="yes" 1043 ;; 1044 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) 1045 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 1046 ;; 1047 --enable-vhdx|--disable-vhdx) 1048 echo "$0: $opt is obsolete, VHDX driver is always built" >&2 1049 ;; 1050 --enable-uuid|--disable-uuid) 1051 echo "$0: $opt is obsolete, UUID support is always built" >&2 1052 ;; 1053 --tls-priority=*) tls_priority="$optarg" 1054 ;; 1055 --enable-rdma) rdma="yes" 1056 ;; 1057 --disable-rdma) rdma="no" 1058 ;; 1059 --enable-pvrdma) pvrdma="yes" 1060 ;; 1061 --disable-pvrdma) pvrdma="no" 1062 ;; 1063 --disable-tpm) tpm="no" 1064 ;; 1065 --enable-tpm) tpm="yes" 1066 ;; 1067 --disable-live-block-migration) live_block_migration="no" 1068 ;; 1069 --enable-live-block-migration) live_block_migration="yes" 1070 ;; 1071 --disable-numa) numa="no" 1072 ;; 1073 --enable-numa) numa="yes" 1074 ;; 1075 --disable-replication) replication="no" 1076 ;; 1077 --enable-replication) replication="yes" 1078 ;; 1079 --disable-bochs) bochs="no" 1080 ;; 1081 --enable-bochs) bochs="yes" 1082 ;; 1083 --disable-cloop) cloop="no" 1084 ;; 1085 --enable-cloop) cloop="yes" 1086 ;; 1087 --disable-dmg) dmg="no" 1088 ;; 1089 --enable-dmg) dmg="yes" 1090 ;; 1091 --disable-qcow1) qcow1="no" 1092 ;; 1093 --enable-qcow1) qcow1="yes" 1094 ;; 1095 --disable-vdi) vdi="no" 1096 ;; 1097 --enable-vdi) vdi="yes" 1098 ;; 1099 --disable-vvfat) vvfat="no" 1100 ;; 1101 --enable-vvfat) vvfat="yes" 1102 ;; 1103 --disable-qed) qed="no" 1104 ;; 1105 --enable-qed) qed="yes" 1106 ;; 1107 --disable-parallels) parallels="no" 1108 ;; 1109 --enable-parallels) parallels="yes" 1110 ;; 1111 --disable-vhost-user) vhost_user="no" 1112 ;; 1113 --enable-vhost-user) vhost_user="yes" 1114 ;; 1115 --disable-vhost-vdpa) vhost_vdpa="no" 1116 ;; 1117 --enable-vhost-vdpa) vhost_vdpa="yes" 1118 ;; 1119 --disable-vhost-kernel) vhost_kernel="no" 1120 ;; 1121 --enable-vhost-kernel) vhost_kernel="yes" 1122 ;; 1123 --disable-capstone) capstone="disabled" 1124 ;; 1125 --enable-capstone) capstone="enabled" 1126 ;; 1127 --enable-capstone=git) capstone="internal" 1128 ;; 1129 --enable-capstone=*) capstone="$optarg" 1130 ;; 1131 --with-git=*) git="$optarg" 1132 ;; 1133 --with-git-submodules=*) 1134 git_submodules_action="$optarg" 1135 ;; 1136 --enable-debug-mutex) debug_mutex=yes 1137 ;; 1138 --disable-debug-mutex) debug_mutex=no 1139 ;; 1140 --enable-plugins) if test "$mingw32" = "yes"; then 1141 error_exit "TCG plugins not currently supported on Windows platforms" 1142 else 1143 plugins="yes" 1144 fi 1145 ;; 1146 --disable-plugins) plugins="no" 1147 ;; 1148 --enable-containers) use_containers="yes" 1149 ;; 1150 --disable-containers) use_containers="no" 1151 ;; 1152 --gdb=*) gdb_bin="$optarg" 1153 ;; 1154 --enable-rng-none) rng_none=yes 1155 ;; 1156 --disable-rng-none) rng_none=no 1157 ;; 1158 --enable-keyring) secret_keyring="yes" 1159 ;; 1160 --disable-keyring) secret_keyring="no" 1161 ;; 1162 --enable-gio) gio=yes 1163 ;; 1164 --disable-gio) gio=no 1165 ;; 1166 --enable-slirp-smbd) slirp_smbd=yes 1167 ;; 1168 --disable-slirp-smbd) slirp_smbd=no 1169 ;; 1170 # backwards compatibility options 1171 --enable-trace-backend=*) meson_option_parse "--enable-trace-backends=$optarg" "$optarg" 1172 ;; 1173 --disable-blobs) meson_option_parse --disable-install-blobs "" 1174 ;; 1175 --enable-tcmalloc) meson_option_parse --enable-malloc=tcmalloc tcmalloc 1176 ;; 1177 --enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc 1178 ;; 1179 # everything else has the same name in configure and meson 1180 --enable-* | --disable-*) meson_option_parse "$opt" "$optarg" 1181 ;; 1182 *) 1183 echo "ERROR: unknown option $opt" 1184 echo "Try '$0 --help' for more information" 1185 exit 1 1186 ;; 1187 esac 1188done 1189 1190# test for any invalid configuration combinations 1191if test "$plugins" = "yes" -a "$tcg" = "disabled"; then 1192 error_exit "Can't enable plugins on non-TCG builds" 1193fi 1194 1195case $git_submodules_action in 1196 update|validate) 1197 if test ! -e "$source_path/.git"; then 1198 echo "ERROR: cannot $git_submodules_action git submodules without .git" 1199 exit 1 1200 fi 1201 ;; 1202 ignore) 1203 if ! test -f "$source_path/ui/keycodemapdb/README" 1204 then 1205 echo 1206 echo "ERROR: missing GIT submodules" 1207 echo 1208 if test -e "$source_path/.git"; then 1209 echo "--with-git-submodules=ignore specified but submodules were not" 1210 echo "checked out. Please initialize and update submodules." 1211 else 1212 echo "This is not a GIT checkout but module content appears to" 1213 echo "be missing. Do not use 'git archive' or GitHub download links" 1214 echo "to acquire QEMU source archives. Non-GIT builds are only" 1215 echo "supported with source archives linked from:" 1216 echo 1217 echo " https://www.qemu.org/download/#source" 1218 echo 1219 echo "Developers working with GIT can use scripts/archive-source.sh" 1220 echo "if they need to create valid source archives." 1221 fi 1222 echo 1223 exit 1 1224 fi 1225 ;; 1226 *) 1227 echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'" 1228 exit 1 1229 ;; 1230esac 1231 1232libdir="${libdir:-$prefix/lib}" 1233libexecdir="${libexecdir:-$prefix/libexec}" 1234includedir="${includedir:-$prefix/include}" 1235 1236if test "$mingw32" = "yes" ; then 1237 bindir="${bindir:-$prefix}" 1238else 1239 bindir="${bindir:-$prefix/bin}" 1240fi 1241mandir="${mandir:-$prefix/share/man}" 1242datadir="${datadir:-$prefix/share}" 1243docdir="${docdir:-$prefix/share/doc}" 1244sysconfdir="${sysconfdir:-$prefix/etc}" 1245local_statedir="${local_statedir:-$prefix/var}" 1246firmwarepath="${firmwarepath:-$datadir/qemu-firmware}" 1247localedir="${localedir:-$datadir/locale}" 1248 1249if eval test -z "\${cross_cc_$cpu}"; then 1250 eval "cross_cc_${cpu}=\$cc" 1251 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}" 1252fi 1253 1254default_target_list="" 1255mak_wilds="" 1256 1257if [ "$linux_user" != no ]; then 1258 if [ "$targetos" = linux ] && [ -d $source_path/linux-user/include/host/$cpu ]; then 1259 linux_user=yes 1260 elif [ "$linux_user" = yes ]; then 1261 error_exit "linux-user not supported on this architecture" 1262 fi 1263fi 1264if [ "$bsd_user" != no ]; then 1265 if [ "$bsd_user" = "" ]; then 1266 test $targetos = freebsd && bsd_user=yes 1267 fi 1268 if [ "$bsd_user" = yes ] && ! [ -d $source_path/bsd-user/$targetos ]; then 1269 error_exit "bsd-user not supported on this host OS" 1270 fi 1271fi 1272if [ "$softmmu" = "yes" ]; then 1273 mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak" 1274fi 1275if [ "$linux_user" = "yes" ]; then 1276 mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak" 1277fi 1278if [ "$bsd_user" = "yes" ]; then 1279 mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak" 1280fi 1281 1282for config in $mak_wilds; do 1283 target="$(basename "$config" .mak)" 1284 if echo "$target_list_exclude" | grep -vq "$target"; then 1285 default_target_list="${default_target_list} $target" 1286 fi 1287done 1288 1289if test x"$show_help" = x"yes" ; then 1290cat << EOF 1291 1292Usage: configure [options] 1293Options: [defaults in brackets after descriptions] 1294 1295Standard options: 1296 --help print this message 1297 --prefix=PREFIX install in PREFIX [$prefix] 1298 --interp-prefix=PREFIX where to find shared libraries, etc. 1299 use %M for cpu name [$interp_prefix] 1300 --target-list=LIST set target list (default: build all) 1301$(echo Available targets: $default_target_list | \ 1302 fold -s -w 53 | sed -e 's/^/ /') 1303 --target-list-exclude=LIST exclude a set of targets from the default target-list 1304 1305Advanced options (experts only): 1306 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix] 1307 --cc=CC use C compiler CC [$cc] 1308 --iasl=IASL use ACPI compiler IASL [$iasl] 1309 --host-cc=CC use C compiler CC [$host_cc] for code run at 1310 build time 1311 --cxx=CXX use C++ compiler CXX [$cxx] 1312 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] 1313 --extra-cflags=CFLAGS append extra C compiler flags CFLAGS 1314 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags CXXFLAGS 1315 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS 1316 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases 1317 --cross-cc-cflags-ARCH= use compiler flags when building ARCH guest tests 1318 --make=MAKE use specified make [$make] 1319 --python=PYTHON use specified python [$python] 1320 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build] 1321 --meson=MESON use specified meson [$meson] 1322 --ninja=NINJA use specified ninja [$ninja] 1323 --smbd=SMBD use specified smbd [$smbd] 1324 --with-git=GIT use specified git [$git] 1325 --with-git-submodules=update update git submodules (default if .git dir exists) 1326 --with-git-submodules=validate fail if git submodules are not up to date 1327 --with-git-submodules=ignore do not update or check git submodules (default if no .git dir) 1328 --static enable static build [$static] 1329 --mandir=PATH install man pages in PATH 1330 --datadir=PATH install firmware in PATH/$qemu_suffix 1331 --localedir=PATH install translation in PATH/$qemu_suffix 1332 --docdir=PATH install documentation in PATH/$qemu_suffix 1333 --bindir=PATH install binaries in PATH 1334 --libdir=PATH install libraries in PATH 1335 --libexecdir=PATH install helper binaries in PATH 1336 --sysconfdir=PATH install config in PATH/$qemu_suffix 1337 --localstatedir=PATH install local state in PATH (set at runtime on win32) 1338 --firmwarepath=PATH search PATH for firmware files 1339 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs. 1340 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix] 1341 --with-pkgversion=VERS use specified string as sub-version of the package 1342 --without-default-features default all --enable-* options to "disabled" 1343 --without-default-devices do not include any device that is not needed to 1344 start the emulator (only use if you are including 1345 desired devices in configs/devices/) 1346 --with-devices-ARCH=NAME override default configs/devices 1347 --enable-debug enable common debug build options 1348 --enable-sanitizers enable default sanitizers 1349 --enable-tsan enable thread sanitizer 1350 --disable-werror disable compilation abort on warning 1351 --disable-stack-protector disable compiler-provided stack protection 1352 --audio-drv-list=LIST set audio drivers to try if -audiodev is not used 1353 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L 1354 --block-drv-rw-whitelist=L 1355 set block driver read-write whitelist 1356 (by default affects only QEMU, not tools like qemu-img) 1357 --block-drv-ro-whitelist=L 1358 set block driver read-only whitelist 1359 (by default affects only QEMU, not tools like qemu-img) 1360 --enable-block-drv-whitelist-in-tools 1361 use block whitelist also in tools instead of only QEMU 1362 --with-trace-file=NAME Full PATH,NAME of file to store traces 1363 Default:trace-<pid> 1364 --cpu=CPU Build for host CPU [$cpu] 1365 --with-coroutine=BACKEND coroutine backend. Supported options: 1366 ucontext, sigaltstack, windows 1367 --enable-gcov enable test coverage analysis with gcov 1368 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent 1369 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) 1370 --tls-priority default TLS protocol/cipher priority string 1371 --enable-gprof QEMU profiling with gprof 1372 --enable-profiler profiler support 1373 --enable-debug-stack-usage 1374 track the maximum stack usage of stacks created by qemu_alloc_stack 1375 --enable-plugins 1376 enable plugins via shared library loading 1377 --disable-containers don't use containers for cross-building 1378 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin] 1379EOF 1380 meson_options_help 1381cat << EOF 1382 system all system emulation targets 1383 user supported user emulation targets 1384 linux-user all linux usermode emulation targets 1385 bsd-user all BSD usermode emulation targets 1386 guest-agent build the QEMU Guest Agent 1387 pie Position Independent Executables 1388 modules modules support (non-Windows) 1389 module-upgrades try to load modules from alternate paths for upgrades 1390 debug-tcg TCG debugging (default is disabled) 1391 debug-info debugging information 1392 lto Enable Link-Time Optimization. 1393 safe-stack SafeStack Stack Smash Protection. Depends on 1394 clang/llvm >= 3.7 and requires coroutine backend ucontext. 1395 membarrier membarrier system call (for Linux 4.14+ or Windows) 1396 rdma Enable RDMA-based migration 1397 pvrdma Enable PVRDMA support 1398 vhost-net vhost-net kernel acceleration support 1399 vhost-vsock virtio sockets device support 1400 vhost-scsi vhost-scsi kernel target support 1401 vhost-crypto vhost-user-crypto backend support 1402 vhost-kernel vhost kernel backend support 1403 vhost-user vhost-user backend support 1404 vhost-vdpa vhost-vdpa kernel backend support 1405 live-block-migration Block migration in the main migration stream 1406 coroutine-pool coroutine freelist (better performance) 1407 tpm TPM support 1408 numa libnuma support 1409 avx2 AVX2 optimization support 1410 avx512f AVX512F optimization support 1411 replication replication support 1412 opengl opengl support 1413 qom-cast-debug cast debugging support 1414 tools build qemu-io, qemu-nbd and qemu-img tools 1415 bochs bochs image format support 1416 cloop cloop image format support 1417 dmg dmg image format support 1418 qcow1 qcow v1 image format support 1419 vdi vdi image format support 1420 vvfat vvfat image format support 1421 qed qed image format support 1422 parallels parallels image format support 1423 crypto-afalg Linux AF_ALG crypto backend driver 1424 debug-mutex mutex debugging support 1425 rng-none dummy RNG, avoid using /dev/(u)random and getrandom() 1426 gio libgio support 1427 slirp-smbd use smbd (at path --smbd=*) in slirp networking 1428 1429NOTE: The object files are built at the place where configure is launched 1430EOF 1431exit 0 1432fi 1433 1434# Remove old dependency files to make sure that they get properly regenerated 1435rm -f */config-devices.mak.d 1436 1437if test -z "$python" 1438then 1439 error_exit "Python not found. Use --python=/path/to/python" 1440fi 1441if ! has "$make" 1442then 1443 error_exit "GNU make ($make) not found" 1444fi 1445 1446# Note that if the Python conditional here evaluates True we will exit 1447# with status 1 which is a shell 'false' value. 1448if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then 1449 error_exit "Cannot use '$python', Python >= 3.6 is required." \ 1450 "Use --python=/path/to/python to specify a supported Python." 1451fi 1452 1453# Preserve python version since some functionality is dependent on it 1454python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null) 1455 1456# Suppress writing compiled files 1457python="$python -B" 1458 1459if test -z "$meson"; then 1460 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.59.3; then 1461 meson=meson 1462 elif test $git_submodules_action != 'ignore' ; then 1463 meson=git 1464 elif test -e "${source_path}/meson/meson.py" ; then 1465 meson=internal 1466 else 1467 if test "$explicit_python" = yes; then 1468 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found." 1469 else 1470 error_exit "Meson not found. Use --meson=/path/to/meson" 1471 fi 1472 fi 1473else 1474 # Meson uses its own Python interpreter to invoke other Python scripts, 1475 # but the user wants to use the one they specified with --python. 1476 # 1477 # We do not want to override the distro Python interpreter (and sometimes 1478 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so 1479 # just require --meson=git|internal together with --python. 1480 if test "$explicit_python" = yes; then 1481 case "$meson" in 1482 git | internal) ;; 1483 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;; 1484 esac 1485 fi 1486fi 1487 1488if test "$meson" = git; then 1489 git_submodules="${git_submodules} meson" 1490fi 1491 1492case "$meson" in 1493 git | internal) 1494 meson="$python ${source_path}/meson/meson.py" 1495 ;; 1496 *) meson=$(command -v "$meson") ;; 1497esac 1498 1499# Probe for ninja 1500 1501if test -z "$ninja"; then 1502 for c in ninja ninja-build samu; do 1503 if has $c; then 1504 ninja=$(command -v "$c") 1505 break 1506 fi 1507 done 1508 if test -z "$ninja"; then 1509 error_exit "Cannot find Ninja" 1510 fi 1511fi 1512 1513# Check that the C compiler works. Doing this here before testing 1514# the host CPU ensures that we had a valid CC to autodetect the 1515# $cpu var (and we should bail right here if that's not the case). 1516# It also allows the help message to be printed without a CC. 1517write_c_skeleton; 1518if compile_object ; then 1519 : C compiler works ok 1520else 1521 error_exit "\"$cc\" either does not exist or does not work" 1522fi 1523if ! compile_prog ; then 1524 error_exit "\"$cc\" cannot build an executable (is your linker broken?)" 1525fi 1526 1527# Consult white-list to determine whether to enable werror 1528# by default. Only enable by default for git builds 1529if test -z "$werror" ; then 1530 if test "$git_submodules_action" != "ignore" && \ 1531 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then 1532 werror="yes" 1533 else 1534 werror="no" 1535 fi 1536fi 1537 1538if test "$targetos" = "bogus"; then 1539 # Now that we know that we're not printing the help and that 1540 # the compiler works (so the results of the check_defines we used 1541 # to identify the OS are reliable), if we didn't recognize the 1542 # host OS we should stop now. 1543 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" 1544fi 1545 1546# Check whether the compiler matches our minimum requirements: 1547cat > $TMPC << EOF 1548#if defined(__clang_major__) && defined(__clang_minor__) 1549# ifdef __apple_build_version__ 1550# if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0) 1551# error You need at least XCode Clang v10.0 to compile QEMU 1552# endif 1553# else 1554# if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0) 1555# error You need at least Clang v6.0 to compile QEMU 1556# endif 1557# endif 1558#elif defined(__GNUC__) && defined(__GNUC_MINOR__) 1559# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4) 1560# error You need at least GCC v7.4.0 to compile QEMU 1561# endif 1562#else 1563# error You either need GCC or Clang to compiler QEMU 1564#endif 1565int main (void) { return 0; } 1566EOF 1567if ! compile_prog "" "" ; then 1568 error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)" 1569fi 1570 1571# Accumulate -Wfoo and -Wno-bar separately. 1572# We will list all of the enable flags first, and the disable flags second. 1573# Note that we do not add -Werror, because that would enable it for all 1574# configure tests. If a configure test failed due to -Werror this would 1575# just silently disable some features, so it's too error prone. 1576 1577warn_flags= 1578add_to warn_flags -Wold-style-declaration 1579add_to warn_flags -Wold-style-definition 1580add_to warn_flags -Wtype-limits 1581add_to warn_flags -Wformat-security 1582add_to warn_flags -Wformat-y2k 1583add_to warn_flags -Winit-self 1584add_to warn_flags -Wignored-qualifiers 1585add_to warn_flags -Wempty-body 1586add_to warn_flags -Wnested-externs 1587add_to warn_flags -Wendif-labels 1588add_to warn_flags -Wexpansion-to-defined 1589add_to warn_flags -Wimplicit-fallthrough=2 1590 1591nowarn_flags= 1592add_to nowarn_flags -Wno-initializer-overrides 1593add_to nowarn_flags -Wno-missing-include-dirs 1594add_to nowarn_flags -Wno-shift-negative-value 1595add_to nowarn_flags -Wno-string-plus-int 1596add_to nowarn_flags -Wno-typedef-redefinition 1597add_to nowarn_flags -Wno-tautological-type-limit-compare 1598add_to nowarn_flags -Wno-psabi 1599 1600gcc_flags="$warn_flags $nowarn_flags" 1601 1602cc_has_warning_flag() { 1603 write_c_skeleton; 1604 1605 # Use the positive sense of the flag when testing for -Wno-wombat 1606 # support (gcc will happily accept the -Wno- form of unknown 1607 # warning options). 1608 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 1609 compile_prog "-Werror $optflag" "" 1610} 1611 1612for flag in $gcc_flags; do 1613 if cc_has_warning_flag $flag ; then 1614 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1615 fi 1616done 1617 1618if test "$stack_protector" != "no"; then 1619 cat > $TMPC << EOF 1620int main(int argc, char *argv[]) 1621{ 1622 char arr[64], *p = arr, *c = argv[0]; 1623 while (*c) { 1624 *p++ = *c++; 1625 } 1626 return 0; 1627} 1628EOF 1629 gcc_flags="-fstack-protector-strong -fstack-protector-all" 1630 sp_on=0 1631 for flag in $gcc_flags; do 1632 # We need to check both a compile and a link, since some compiler 1633 # setups fail only on a .c->.o compile and some only at link time 1634 if compile_object "-Werror $flag" && 1635 compile_prog "-Werror $flag" ""; then 1636 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1637 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 1638 sp_on=1 1639 break 1640 fi 1641 done 1642 if test "$stack_protector" = yes; then 1643 if test $sp_on = 0; then 1644 error_exit "Stack protector not supported" 1645 fi 1646 fi 1647fi 1648 1649# Disable -Wmissing-braces on older compilers that warn even for 1650# the "universal" C zero initializer {0}. 1651cat > $TMPC << EOF 1652struct { 1653 int a[2]; 1654} x = {0}; 1655EOF 1656if compile_object "-Werror" "" ; then 1657 : 1658else 1659 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 1660fi 1661 1662# Our module code doesn't support Windows 1663if test "$modules" = "yes" && test "$mingw32" = "yes" ; then 1664 error_exit "Modules are not available for Windows" 1665fi 1666 1667# module_upgrades is only reasonable if modules are enabled 1668if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then 1669 error_exit "Can't enable module-upgrades as Modules are not enabled" 1670fi 1671 1672# Static linking is not possible with plugins, modules or PIE 1673if test "$static" = "yes" ; then 1674 if test "$modules" = "yes" ; then 1675 error_exit "static and modules are mutually incompatible" 1676 fi 1677 if test "$plugins" = "yes"; then 1678 error_exit "static and plugins are mutually incompatible" 1679 else 1680 plugins="no" 1681 fi 1682fi 1683test "$plugins" = "" && plugins=yes 1684 1685cat > $TMPC << EOF 1686 1687#ifdef __linux__ 1688# define THREAD __thread 1689#else 1690# define THREAD 1691#endif 1692static THREAD int tls_var; 1693int main(void) { return tls_var; } 1694EOF 1695 1696# Check we support -fno-pie and -no-pie first; we will need the former for 1697# building ROMs, and both for everything if --disable-pie is passed. 1698if compile_prog "-Werror -fno-pie" "-no-pie"; then 1699 CFLAGS_NOPIE="-fno-pie" 1700 LDFLAGS_NOPIE="-no-pie" 1701fi 1702 1703if test "$static" = "yes"; then 1704 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then 1705 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 1706 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS" 1707 pie="yes" 1708 elif test "$pie" = "yes"; then 1709 error_exit "-static-pie not available due to missing toolchain support" 1710 else 1711 QEMU_LDFLAGS="-static $QEMU_LDFLAGS" 1712 pie="no" 1713 fi 1714elif test "$pie" = "no"; then 1715 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS" 1716 CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS" 1717elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then 1718 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 1719 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS" 1720 pie="yes" 1721elif test "$pie" = "yes"; then 1722 error_exit "PIE not available due to missing toolchain support" 1723else 1724 echo "Disabling PIE due to missing toolchain support" 1725 pie="no" 1726fi 1727 1728# Detect support for PT_GNU_RELRO + DT_BIND_NOW. 1729# The combination is known as "full relro", because .got.plt is read-only too. 1730if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 1731 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS" 1732fi 1733 1734########################################## 1735# __sync_fetch_and_and requires at least -march=i486. Many toolchains 1736# use i686 as default anyway, but for those that don't, an explicit 1737# specification is necessary 1738 1739if test "$cpu" = "i386"; then 1740 cat > $TMPC << EOF 1741static int sfaa(int *ptr) 1742{ 1743 return __sync_fetch_and_and(ptr, 0); 1744} 1745 1746int main(void) 1747{ 1748 int val = 42; 1749 val = __sync_val_compare_and_swap(&val, 0, 1); 1750 sfaa(&val); 1751 return val; 1752} 1753EOF 1754 if ! compile_prog "" "" ; then 1755 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 1756 fi 1757fi 1758 1759if test "$tcg" = "enabled"; then 1760 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3" 1761 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3" 1762fi 1763 1764if test -z "${target_list+xxx}" ; then 1765 default_targets=yes 1766 for target in $default_target_list; do 1767 target_list="$target_list $target" 1768 done 1769 target_list="${target_list# }" 1770else 1771 default_targets=no 1772 target_list=$(echo "$target_list" | sed -e 's/,/ /g') 1773 for target in $target_list; do 1774 # Check that we recognised the target name; this allows a more 1775 # friendly error message than if we let it fall through. 1776 case " $default_target_list " in 1777 *" $target "*) 1778 ;; 1779 *) 1780 error_exit "Unknown target name '$target'" 1781 ;; 1782 esac 1783 done 1784fi 1785 1786# see if system emulation was really requested 1787case " $target_list " in 1788 *"-softmmu "*) softmmu=yes 1789 ;; 1790 *) softmmu=no 1791 ;; 1792esac 1793 1794feature_not_found() { 1795 feature=$1 1796 remedy=$2 1797 1798 error_exit "User requested feature $feature" \ 1799 "configure was not able to find it." \ 1800 "$remedy" 1801} 1802 1803# --- 1804# big/little endian test 1805cat > $TMPC << EOF 1806#include <stdio.h> 1807short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 1808short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 1809int main(int argc, char *argv[]) 1810{ 1811 return printf("%s %s\n", (char *)big_endian, (char *)little_endian); 1812} 1813EOF 1814 1815if compile_prog ; then 1816 if strings -a $TMPE | grep -q BiGeNdIaN ; then 1817 bigendian="yes" 1818 elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then 1819 bigendian="no" 1820 else 1821 echo big/little test failed 1822 exit 1 1823 fi 1824else 1825 echo big/little test failed 1826 exit 1 1827fi 1828 1829########################################## 1830# system tools 1831if test -z "$want_tools"; then 1832 if test "$softmmu" = "no"; then 1833 want_tools=no 1834 else 1835 want_tools=yes 1836 fi 1837fi 1838 1839######################################### 1840# vhost interdependencies and host support 1841 1842# vhost backends 1843if test "$vhost_user" = "yes" && test "$linux" != "yes"; then 1844 error_exit "vhost-user is only available on Linux" 1845fi 1846test "$vhost_vdpa" = "" && vhost_vdpa=$linux 1847if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then 1848 error_exit "vhost-vdpa is only available on Linux" 1849fi 1850test "$vhost_kernel" = "" && vhost_kernel=$linux 1851if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then 1852 error_exit "vhost-kernel is only available on Linux" 1853fi 1854 1855# vhost-kernel devices 1856test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel 1857if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then 1858 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" 1859fi 1860test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel 1861if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then 1862 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" 1863fi 1864 1865# vhost-user backends 1866test "$vhost_net_user" = "" && vhost_net_user=$vhost_user 1867if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then 1868 error_exit "--enable-vhost-net-user requires --enable-vhost-user" 1869fi 1870test "$vhost_crypto" = "" && vhost_crypto=$vhost_user 1871if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then 1872 error_exit "--enable-vhost-crypto requires --enable-vhost-user" 1873fi 1874test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user 1875if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then 1876 error_exit "--enable-vhost-user-fs requires --enable-vhost-user" 1877fi 1878#vhost-vdpa backends 1879test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa 1880if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then 1881 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" 1882fi 1883 1884# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity 1885if test "$vhost_net" = ""; then 1886 test "$vhost_net_user" = "yes" && vhost_net=yes 1887 test "$vhost_net_vdpa" = "yes" && vhost_net=yes 1888 test "$vhost_kernel" = "yes" && vhost_net=yes 1889fi 1890 1891########################################## 1892# pkg-config probe 1893 1894if ! has "$pkg_config_exe"; then 1895 error_exit "pkg-config binary '$pkg_config_exe' not found" 1896fi 1897 1898########################################## 1899# xen probe 1900 1901if test "$xen" != "disabled" ; then 1902 # Check whether Xen library path is specified via --extra-ldflags to avoid 1903 # overriding this setting with pkg-config output. If not, try pkg-config 1904 # to obtain all needed flags. 1905 1906 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 1907 $pkg_config --exists xencontrol ; then 1908 xen_ctrl_version="$(printf '%d%02d%02d' \ 1909 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 1910 xen=enabled 1911 xen_pc="xencontrol xenstore xenforeignmemory xengnttab" 1912 xen_pc="$xen_pc xenevtchn xendevicemodel" 1913 if $pkg_config --exists xentoolcore; then 1914 xen_pc="$xen_pc xentoolcore" 1915 fi 1916 xen_cflags="$($pkg_config --cflags $xen_pc)" 1917 xen_libs="$($pkg_config --libs $xen_pc)" 1918 else 1919 1920 xen_libs="-lxenstore -lxenctrl" 1921 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 1922 1923 # First we test whether Xen headers and libraries are available. 1924 # If no, we are done and there is no Xen support. 1925 # If yes, more tests are run to detect the Xen version. 1926 1927 # Xen (any) 1928 cat > $TMPC <<EOF 1929#include <xenctrl.h> 1930int main(void) { 1931 return 0; 1932} 1933EOF 1934 if ! compile_prog "" "$xen_libs" ; then 1935 # Xen not found 1936 if test "$xen" = "enabled" ; then 1937 feature_not_found "xen" "Install xen devel" 1938 fi 1939 xen=disabled 1940 1941 # Xen unstable 1942 elif 1943 cat > $TMPC <<EOF && 1944#undef XC_WANT_COMPAT_DEVICEMODEL_API 1945#define __XEN_TOOLS__ 1946#include <xendevicemodel.h> 1947#include <xenforeignmemory.h> 1948int main(void) { 1949 xendevicemodel_handle *xd; 1950 xenforeignmemory_handle *xfmem; 1951 1952 xd = xendevicemodel_open(0, 0); 1953 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 1954 1955 xfmem = xenforeignmemory_open(0, 0); 1956 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 1957 1958 return 0; 1959} 1960EOF 1961 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 1962 then 1963 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 1964 xen_ctrl_version=41100 1965 xen=enabled 1966 elif 1967 cat > $TMPC <<EOF && 1968#undef XC_WANT_COMPAT_MAP_FOREIGN_API 1969#include <xenforeignmemory.h> 1970#include <xentoolcore.h> 1971int main(void) { 1972 xenforeignmemory_handle *xfmem; 1973 1974 xfmem = xenforeignmemory_open(0, 0); 1975 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 1976 xentoolcore_restrict_all(0); 1977 1978 return 0; 1979} 1980EOF 1981 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 1982 then 1983 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 1984 xen_ctrl_version=41000 1985 xen=enabled 1986 elif 1987 cat > $TMPC <<EOF && 1988#undef XC_WANT_COMPAT_DEVICEMODEL_API 1989#define __XEN_TOOLS__ 1990#include <xendevicemodel.h> 1991int main(void) { 1992 xendevicemodel_handle *xd; 1993 1994 xd = xendevicemodel_open(0, 0); 1995 xendevicemodel_close(xd); 1996 1997 return 0; 1998} 1999EOF 2000 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2001 then 2002 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2003 xen_ctrl_version=40900 2004 xen=enabled 2005 elif 2006 cat > $TMPC <<EOF && 2007/* 2008 * If we have stable libs the we don't want the libxc compat 2009 * layers, regardless of what CFLAGS we may have been given. 2010 * 2011 * Also, check if xengnttab_grant_copy_segment_t is defined and 2012 * grant copy operation is implemented. 2013 */ 2014#undef XC_WANT_COMPAT_EVTCHN_API 2015#undef XC_WANT_COMPAT_GNTTAB_API 2016#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2017#include <xenctrl.h> 2018#include <xenstore.h> 2019#include <xenevtchn.h> 2020#include <xengnttab.h> 2021#include <xenforeignmemory.h> 2022#include <stdint.h> 2023#include <xen/hvm/hvm_info_table.h> 2024#if !defined(HVM_MAX_VCPUS) 2025# error HVM_MAX_VCPUS not defined 2026#endif 2027int main(void) { 2028 xc_interface *xc = NULL; 2029 xenforeignmemory_handle *xfmem; 2030 xenevtchn_handle *xe; 2031 xengnttab_handle *xg; 2032 xengnttab_grant_copy_segment_t* seg = NULL; 2033 2034 xs_daemon_open(); 2035 2036 xc = xc_interface_open(0, 0, 0); 2037 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2038 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2039 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2040 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2041 2042 xfmem = xenforeignmemory_open(0, 0); 2043 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2044 2045 xe = xenevtchn_open(0, 0); 2046 xenevtchn_fd(xe); 2047 2048 xg = xengnttab_open(0, 0); 2049 xengnttab_grant_copy(xg, 0, seg); 2050 2051 return 0; 2052} 2053EOF 2054 compile_prog "" "$xen_libs $xen_stable_libs" 2055 then 2056 xen_ctrl_version=40800 2057 xen=enabled 2058 elif 2059 cat > $TMPC <<EOF && 2060/* 2061 * If we have stable libs the we don't want the libxc compat 2062 * layers, regardless of what CFLAGS we may have been given. 2063 */ 2064#undef XC_WANT_COMPAT_EVTCHN_API 2065#undef XC_WANT_COMPAT_GNTTAB_API 2066#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2067#include <xenctrl.h> 2068#include <xenstore.h> 2069#include <xenevtchn.h> 2070#include <xengnttab.h> 2071#include <xenforeignmemory.h> 2072#include <stdint.h> 2073#include <xen/hvm/hvm_info_table.h> 2074#if !defined(HVM_MAX_VCPUS) 2075# error HVM_MAX_VCPUS not defined 2076#endif 2077int main(void) { 2078 xc_interface *xc = NULL; 2079 xenforeignmemory_handle *xfmem; 2080 xenevtchn_handle *xe; 2081 xengnttab_handle *xg; 2082 2083 xs_daemon_open(); 2084 2085 xc = xc_interface_open(0, 0, 0); 2086 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2087 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2088 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2089 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2090 2091 xfmem = xenforeignmemory_open(0, 0); 2092 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2093 2094 xe = xenevtchn_open(0, 0); 2095 xenevtchn_fd(xe); 2096 2097 xg = xengnttab_open(0, 0); 2098 xengnttab_map_grant_ref(xg, 0, 0, 0); 2099 2100 return 0; 2101} 2102EOF 2103 compile_prog "" "$xen_libs $xen_stable_libs" 2104 then 2105 xen_ctrl_version=40701 2106 xen=enabled 2107 2108 # Xen 4.6 2109 elif 2110 cat > $TMPC <<EOF && 2111#include <xenctrl.h> 2112#include <xenstore.h> 2113#include <stdint.h> 2114#include <xen/hvm/hvm_info_table.h> 2115#if !defined(HVM_MAX_VCPUS) 2116# error HVM_MAX_VCPUS not defined 2117#endif 2118int main(void) { 2119 xc_interface *xc; 2120 xs_daemon_open(); 2121 xc = xc_interface_open(0, 0, 0); 2122 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2123 xc_gnttab_open(NULL, 0); 2124 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2125 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2126 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2127 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2128 return 0; 2129} 2130EOF 2131 compile_prog "" "$xen_libs" 2132 then 2133 xen_ctrl_version=40600 2134 xen=enabled 2135 2136 # Xen 4.5 2137 elif 2138 cat > $TMPC <<EOF && 2139#include <xenctrl.h> 2140#include <xenstore.h> 2141#include <stdint.h> 2142#include <xen/hvm/hvm_info_table.h> 2143#if !defined(HVM_MAX_VCPUS) 2144# error HVM_MAX_VCPUS not defined 2145#endif 2146int main(void) { 2147 xc_interface *xc; 2148 xs_daemon_open(); 2149 xc = xc_interface_open(0, 0, 0); 2150 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2151 xc_gnttab_open(NULL, 0); 2152 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2153 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2154 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2155 return 0; 2156} 2157EOF 2158 compile_prog "" "$xen_libs" 2159 then 2160 xen_ctrl_version=40500 2161 xen=enabled 2162 2163 elif 2164 cat > $TMPC <<EOF && 2165#include <xenctrl.h> 2166#include <xenstore.h> 2167#include <stdint.h> 2168#include <xen/hvm/hvm_info_table.h> 2169#if !defined(HVM_MAX_VCPUS) 2170# error HVM_MAX_VCPUS not defined 2171#endif 2172int main(void) { 2173 xc_interface *xc; 2174 xs_daemon_open(); 2175 xc = xc_interface_open(0, 0, 0); 2176 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2177 xc_gnttab_open(NULL, 0); 2178 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2179 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2180 return 0; 2181} 2182EOF 2183 compile_prog "" "$xen_libs" 2184 then 2185 xen_ctrl_version=40200 2186 xen=enabled 2187 2188 else 2189 if test "$xen" = "enabled" ; then 2190 feature_not_found "xen (unsupported version)" \ 2191 "Install a supported xen (xen 4.2 or newer)" 2192 fi 2193 xen=disabled 2194 fi 2195 2196 if test "$xen" = enabled; then 2197 if test $xen_ctrl_version -ge 40701 ; then 2198 xen_libs="$xen_libs $xen_stable_libs " 2199 fi 2200 fi 2201 fi 2202fi 2203 2204########################################## 2205# RDMA needs OpenFabrics libraries 2206if test "$rdma" != "no" ; then 2207 cat > $TMPC <<EOF 2208#include <rdma/rdma_cma.h> 2209int main(void) { return 0; } 2210EOF 2211 rdma_libs="-lrdmacm -libverbs -libumad" 2212 if compile_prog "" "$rdma_libs" ; then 2213 rdma="yes" 2214 else 2215 if test "$rdma" = "yes" ; then 2216 error_exit \ 2217 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 2218 " Your options:" \ 2219 " (1) Fast: Install infiniband packages (devel) from your distro." \ 2220 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 2221 " (3) Also: Install softiwarp if you don't have RDMA hardware" 2222 fi 2223 rdma="no" 2224 fi 2225fi 2226 2227########################################## 2228# PVRDMA detection 2229 2230cat > $TMPC <<EOF && 2231#include <sys/mman.h> 2232 2233int 2234main(void) 2235{ 2236 char buf = 0; 2237 void *addr = &buf; 2238 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 2239 2240 return 0; 2241} 2242EOF 2243 2244if test "$rdma" = "yes" ; then 2245 case "$pvrdma" in 2246 "") 2247 if compile_prog "" ""; then 2248 pvrdma="yes" 2249 else 2250 pvrdma="no" 2251 fi 2252 ;; 2253 "yes") 2254 if ! compile_prog "" ""; then 2255 error_exit "PVRDMA is not supported since mremap is not implemented" 2256 fi 2257 pvrdma="yes" 2258 ;; 2259 "no") 2260 pvrdma="no" 2261 ;; 2262 esac 2263else 2264 if test "$pvrdma" = "yes" ; then 2265 error_exit "PVRDMA requires rdma suppport" 2266 fi 2267 pvrdma="no" 2268fi 2269 2270# Let's see if enhanced reg_mr is supported 2271if test "$pvrdma" = "yes" ; then 2272 2273cat > $TMPC <<EOF && 2274#include <infiniband/verbs.h> 2275 2276int 2277main(void) 2278{ 2279 struct ibv_mr *mr; 2280 struct ibv_pd *pd = NULL; 2281 size_t length = 10; 2282 uint64_t iova = 0; 2283 int access = 0; 2284 void *addr = NULL; 2285 2286 mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 2287 2288 ibv_dereg_mr(mr); 2289 2290 return 0; 2291} 2292EOF 2293 if ! compile_prog "" "-libverbs"; then 2294 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 2295 fi 2296fi 2297 2298########################################## 2299# glib support probe 2300 2301glib_req_ver=2.56 2302glib_modules=gthread-2.0 2303if test "$modules" = yes; then 2304 glib_modules="$glib_modules gmodule-export-2.0" 2305elif test "$plugins" = "yes"; then 2306 glib_modules="$glib_modules gmodule-no-export-2.0" 2307fi 2308 2309for i in $glib_modules; do 2310 if $pkg_config --atleast-version=$glib_req_ver $i; then 2311 glib_cflags=$($pkg_config --cflags $i) 2312 glib_libs=$($pkg_config --libs $i) 2313 else 2314 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 2315 fi 2316done 2317 2318# This workaround is required due to a bug in pkg-config file for glib as it 2319# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 2320 2321if test "$static" = yes && test "$mingw32" = yes; then 2322 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags" 2323fi 2324 2325if ! test "$gio" = "no"; then 2326 pass=no 2327 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 2328 gio_cflags=$($pkg_config --cflags gio-2.0) 2329 gio_libs=$($pkg_config --libs gio-2.0) 2330 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 2331 if ! has "$gdbus_codegen"; then 2332 gdbus_codegen= 2333 fi 2334 # Check that the libraries actually work -- Ubuntu 18.04 ships 2335 # with pkg-config --static --libs data for gio-2.0 that is missing 2336 # -lblkid and will give a link error. 2337 cat > $TMPC <<EOF 2338#include <gio/gio.h> 2339int main(void) 2340{ 2341 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0); 2342 return 0; 2343} 2344EOF 2345 if compile_prog "$gio_cflags" "$gio_libs" ; then 2346 pass=yes 2347 else 2348 pass=no 2349 fi 2350 2351 if test "$pass" = "yes" && 2352 $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 2353 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 2354 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 2355 fi 2356 fi 2357 2358 if test "$pass" = "no"; then 2359 if test "$gio" = "yes"; then 2360 feature_not_found "gio" "Install libgio >= 2.0" 2361 else 2362 gio=no 2363 fi 2364 else 2365 gio=yes 2366 fi 2367fi 2368 2369# Sanity check that the current size_t matches the 2370# size that glib thinks it should be. This catches 2371# problems on multi-arch where people try to build 2372# 32-bit QEMU while pointing at 64-bit glib headers 2373cat > $TMPC <<EOF 2374#include <glib.h> 2375#include <unistd.h> 2376 2377#define QEMU_BUILD_BUG_ON(x) \ 2378 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 2379 2380int main(void) { 2381 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 2382 return 0; 2383} 2384EOF 2385 2386if ! compile_prog "$glib_cflags" "$glib_libs" ; then 2387 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 2388 "You probably need to set PKG_CONFIG_LIBDIR"\ 2389 "to point to the right pkg-config files for your"\ 2390 "build target" 2391fi 2392 2393# Silence clang warnings triggered by glib < 2.57.2 2394cat > $TMPC << EOF 2395#include <glib.h> 2396typedef struct Foo { 2397 int i; 2398} Foo; 2399static void foo_free(Foo *f) 2400{ 2401 g_free(f); 2402} 2403G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 2404int main(void) { return 0; } 2405EOF 2406if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 2407 if cc_has_warning_flag "-Wno-unused-function"; then 2408 glib_cflags="$glib_cflags -Wno-unused-function" 2409 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function" 2410 fi 2411fi 2412 2413########################################## 2414# SHA command probe for modules 2415if test "$modules" = yes; then 2416 shacmd_probe="sha1sum sha1 shasum" 2417 for c in $shacmd_probe; do 2418 if has $c; then 2419 shacmd="$c" 2420 break 2421 fi 2422 done 2423 if test "$shacmd" = ""; then 2424 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 2425 fi 2426fi 2427 2428########################################## 2429# TPM emulation is only on POSIX 2430 2431if test "$tpm" = ""; then 2432 if test "$mingw32" = "yes"; then 2433 tpm=no 2434 else 2435 tpm=yes 2436 fi 2437elif test "$tpm" = "yes"; then 2438 if test "$mingw32" = "yes" ; then 2439 error_exit "TPM emulation only available on POSIX systems" 2440 fi 2441fi 2442 2443########################################## 2444# fdt probe 2445 2446case "$fdt" in 2447 auto | enabled | internal) 2448 # Simpler to always update submodule, even if not needed. 2449 git_submodules="${git_submodules} dtc" 2450 ;; 2451esac 2452 2453########################################## 2454# opengl probe (for sdl2, gtk) 2455 2456if test "$opengl" != "no" ; then 2457 epoxy=no 2458 if $pkg_config epoxy; then 2459 cat > $TMPC << EOF 2460#include <epoxy/egl.h> 2461int main(void) { return 0; } 2462EOF 2463 if compile_prog "" "" ; then 2464 epoxy=yes 2465 fi 2466 fi 2467 2468 if test "$epoxy" = "yes" ; then 2469 opengl_cflags="$($pkg_config --cflags epoxy)" 2470 opengl_libs="$($pkg_config --libs epoxy)" 2471 opengl=yes 2472 else 2473 if test "$opengl" = "yes" ; then 2474 feature_not_found "opengl" "Please install epoxy with EGL" 2475 fi 2476 opengl_cflags="" 2477 opengl_libs="" 2478 opengl=no 2479 fi 2480fi 2481 2482########################################## 2483# libnuma probe 2484 2485if test "$numa" != "no" ; then 2486 cat > $TMPC << EOF 2487#include <numa.h> 2488int main(void) { return numa_available(); } 2489EOF 2490 2491 if compile_prog "" "-lnuma" ; then 2492 numa=yes 2493 numa_libs="-lnuma" 2494 else 2495 if test "$numa" = "yes" ; then 2496 feature_not_found "numa" "install numactl devel" 2497 fi 2498 numa=no 2499 fi 2500fi 2501 2502# check for usbfs 2503have_usbfs=no 2504if test "$linux_user" = "yes"; then 2505 cat > $TMPC << EOF 2506#include <linux/usbdevice_fs.h> 2507 2508#ifndef USBDEVFS_GET_CAPABILITIES 2509#error "USBDEVFS_GET_CAPABILITIES undefined" 2510#endif 2511 2512#ifndef USBDEVFS_DISCONNECT_CLAIM 2513#error "USBDEVFS_DISCONNECT_CLAIM undefined" 2514#endif 2515 2516int main(void) 2517{ 2518 return 0; 2519} 2520EOF 2521 if compile_prog "" ""; then 2522 have_usbfs=yes 2523 fi 2524fi 2525 2526########################################## 2527# check if we have VSS SDK headers for win 2528 2529guest_agent_with_vss="no" 2530if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 2531 test "$vss_win32_sdk" != "no" ; then 2532 case "$vss_win32_sdk" in 2533 "") vss_win32_include="-isystem $source_path" ;; 2534 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 2535 # handle path with spaces. So we symlink the headers into ".sdk/vss". 2536 vss_win32_include="-isystem $source_path/.sdk/vss" 2537 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 2538 ;; 2539 *) vss_win32_include="-isystem $vss_win32_sdk" 2540 esac 2541 cat > $TMPC << EOF 2542#define __MIDL_user_allocate_free_DEFINED__ 2543#include <inc/win2003/vss.h> 2544int main(void) { return VSS_CTX_BACKUP; } 2545EOF 2546 if compile_prog "$vss_win32_include" "" ; then 2547 guest_agent_with_vss="yes" 2548 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 2549 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 2550 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 2551 else 2552 if test "$vss_win32_sdk" != "" ; then 2553 echo "ERROR: Please download and install Microsoft VSS SDK:" 2554 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 2555 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 2556 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 2557 echo "ERROR: The headers are extracted in the directory \`inc'." 2558 feature_not_found "VSS support" 2559 fi 2560 fi 2561fi 2562 2563########################################## 2564# lookup Windows platform SDK (if not specified) 2565# The SDK is needed only to build .tlb (type library) file of guest agent 2566# VSS provider from the source. It is usually unnecessary because the 2567# pre-compiled .tlb file is included. 2568 2569if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 2570 test "$guest_agent_with_vss" = "yes" ; then 2571 if test -z "$win_sdk"; then 2572 programfiles="$PROGRAMFILES" 2573 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 2574 if test -n "$programfiles"; then 2575 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 2576 else 2577 feature_not_found "Windows SDK" 2578 fi 2579 elif test "$win_sdk" = "no"; then 2580 win_sdk="" 2581 fi 2582fi 2583 2584########################################## 2585# check if mingw environment provides a recent ntddscsi.h 2586guest_agent_ntddscsi="no" 2587if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 2588 cat > $TMPC << EOF 2589#include <windows.h> 2590#include <ntddscsi.h> 2591int main(void) { 2592#if !defined(IOCTL_SCSI_GET_ADDRESS) 2593#error Missing required ioctl definitions 2594#endif 2595 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 2596 return addr.Lun; 2597} 2598EOF 2599 if compile_prog "" "" ; then 2600 guest_agent_ntddscsi=yes 2601 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 2602 fi 2603fi 2604 2605########################################## 2606# capstone 2607 2608case "$capstone" in 2609 auto | enabled | internal) 2610 # Simpler to always update submodule, even if not needed. 2611 git_submodules="${git_submodules} capstone" 2612 ;; 2613esac 2614 2615########################################## 2616# check and set a backend for coroutine 2617 2618# We prefer ucontext, but it's not always possible. The fallback 2619# is sigcontext. On Windows the only valid backend is the Windows 2620# specific one. 2621 2622ucontext_works=no 2623if test "$darwin" != "yes"; then 2624 cat > $TMPC << EOF 2625#include <ucontext.h> 2626#ifdef __stub_makecontext 2627#error Ignoring glibc stub makecontext which will always fail 2628#endif 2629int main(void) { makecontext(0, 0, 0); return 0; } 2630EOF 2631 if compile_prog "" "" ; then 2632 ucontext_works=yes 2633 fi 2634fi 2635 2636if test "$coroutine" = ""; then 2637 if test "$mingw32" = "yes"; then 2638 coroutine=win32 2639 elif test "$ucontext_works" = "yes"; then 2640 coroutine=ucontext 2641 else 2642 coroutine=sigaltstack 2643 fi 2644else 2645 case $coroutine in 2646 windows) 2647 if test "$mingw32" != "yes"; then 2648 error_exit "'windows' coroutine backend only valid for Windows" 2649 fi 2650 # Unfortunately the user visible backend name doesn't match the 2651 # coroutine-*.c filename for this case, so we have to adjust it here. 2652 coroutine=win32 2653 ;; 2654 ucontext) 2655 if test "$ucontext_works" != "yes"; then 2656 feature_not_found "ucontext" 2657 fi 2658 ;; 2659 sigaltstack) 2660 if test "$mingw32" = "yes"; then 2661 error_exit "only the 'windows' coroutine backend is valid for Windows" 2662 fi 2663 ;; 2664 *) 2665 error_exit "unknown coroutine backend $coroutine" 2666 ;; 2667 esac 2668fi 2669 2670if test "$coroutine_pool" = ""; then 2671 coroutine_pool=yes 2672fi 2673 2674if test "$debug_stack_usage" = "yes"; then 2675 if test "$coroutine_pool" = "yes"; then 2676 echo "WARN: disabling coroutine pool for stack usage debugging" 2677 coroutine_pool=no 2678 fi 2679fi 2680 2681################################################## 2682# SafeStack 2683 2684 2685if test "$safe_stack" = "yes"; then 2686cat > $TMPC << EOF 2687int main(int argc, char *argv[]) 2688{ 2689#if ! __has_feature(safe_stack) 2690#error SafeStack Disabled 2691#endif 2692 return 0; 2693} 2694EOF 2695 flag="-fsanitize=safe-stack" 2696 # Check that safe-stack is supported and enabled. 2697 if compile_prog "-Werror $flag" "$flag"; then 2698 # Flag needed both at compilation and at linking 2699 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2700 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 2701 else 2702 error_exit "SafeStack not supported by your compiler" 2703 fi 2704 if test "$coroutine" != "ucontext"; then 2705 error_exit "SafeStack is only supported by the coroutine backend ucontext" 2706 fi 2707else 2708cat > $TMPC << EOF 2709int main(int argc, char *argv[]) 2710{ 2711#if defined(__has_feature) 2712#if __has_feature(safe_stack) 2713#error SafeStack Enabled 2714#endif 2715#endif 2716 return 0; 2717} 2718EOF 2719if test "$safe_stack" = "no"; then 2720 # Make sure that safe-stack is disabled 2721 if ! compile_prog "-Werror" ""; then 2722 # SafeStack was already enabled, try to explicitly remove the feature 2723 flag="-fno-sanitize=safe-stack" 2724 if ! compile_prog "-Werror $flag" "$flag"; then 2725 error_exit "Configure cannot disable SafeStack" 2726 fi 2727 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2728 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 2729 fi 2730else # "$safe_stack" = "" 2731 # Set safe_stack to yes or no based on pre-existing flags 2732 if compile_prog "-Werror" ""; then 2733 safe_stack="no" 2734 else 2735 safe_stack="yes" 2736 if test "$coroutine" != "ucontext"; then 2737 error_exit "SafeStack is only supported by the coroutine backend ucontext" 2738 fi 2739 fi 2740fi 2741fi 2742 2743######################################## 2744# check if cpuid.h is usable. 2745 2746cat > $TMPC << EOF 2747#include <cpuid.h> 2748int main(void) { 2749 unsigned a, b, c, d; 2750 unsigned max = __get_cpuid_max(0, 0); 2751 2752 if (max >= 1) { 2753 __cpuid(1, a, b, c, d); 2754 } 2755 2756 if (max >= 7) { 2757 __cpuid_count(7, 0, a, b, c, d); 2758 } 2759 2760 return 0; 2761} 2762EOF 2763if compile_prog "" "" ; then 2764 cpuid_h=yes 2765fi 2766 2767########################################## 2768# avx2 optimization requirement check 2769# 2770# There is no point enabling this if cpuid.h is not usable, 2771# since we won't be able to select the new routines. 2772 2773if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 2774 cat > $TMPC << EOF 2775#pragma GCC push_options 2776#pragma GCC target("avx2") 2777#include <cpuid.h> 2778#include <immintrin.h> 2779static int bar(void *a) { 2780 __m256i x = *(__m256i *)a; 2781 return _mm256_testz_si256(x, x); 2782} 2783int main(int argc, char *argv[]) { return bar(argv[0]); } 2784EOF 2785 if compile_object "-Werror" ; then 2786 avx2_opt="yes" 2787 else 2788 avx2_opt="no" 2789 fi 2790fi 2791 2792########################################## 2793# avx512f optimization requirement check 2794# 2795# There is no point enabling this if cpuid.h is not usable, 2796# since we won't be able to select the new routines. 2797# by default, it is turned off. 2798# if user explicitly want to enable it, check environment 2799 2800if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 2801 cat > $TMPC << EOF 2802#pragma GCC push_options 2803#pragma GCC target("avx512f") 2804#include <cpuid.h> 2805#include <immintrin.h> 2806static int bar(void *a) { 2807 __m512i x = *(__m512i *)a; 2808 return _mm512_test_epi64_mask(x, x); 2809} 2810int main(int argc, char *argv[]) 2811{ 2812 return bar(argv[0]); 2813} 2814EOF 2815 if ! compile_object "-Werror" ; then 2816 avx512f_opt="no" 2817 fi 2818else 2819 avx512f_opt="no" 2820fi 2821 2822######################################## 2823# check if __[u]int128_t is usable. 2824 2825int128=no 2826cat > $TMPC << EOF 2827__int128_t a; 2828__uint128_t b; 2829int main (void) { 2830 a = a + b; 2831 b = a * b; 2832 a = a * a; 2833 return 0; 2834} 2835EOF 2836if compile_prog "" "" ; then 2837 int128=yes 2838fi 2839 2840######################################### 2841# See if 128-bit atomic operations are supported. 2842 2843atomic128=no 2844if test "$int128" = "yes"; then 2845 cat > $TMPC << EOF 2846int main(void) 2847{ 2848 unsigned __int128 x = 0, y = 0; 2849 y = __atomic_load(&x, 0); 2850 __atomic_store(&x, y, 0); 2851 __atomic_compare_exchange(&x, &y, x, 0, 0, 0); 2852 return 0; 2853} 2854EOF 2855 if compile_prog "" "" ; then 2856 atomic128=yes 2857 fi 2858fi 2859 2860cmpxchg128=no 2861if test "$int128" = yes && test "$atomic128" = no; then 2862 cat > $TMPC << EOF 2863int main(void) 2864{ 2865 unsigned __int128 x = 0, y = 0; 2866 __sync_val_compare_and_swap_16(&x, y, x); 2867 return 0; 2868} 2869EOF 2870 if compile_prog "" "" ; then 2871 cmpxchg128=yes 2872 fi 2873fi 2874 2875######################################## 2876# check if ccache is interfering with 2877# semantic analysis of macros 2878 2879unset CCACHE_CPP2 2880ccache_cpp2=no 2881cat > $TMPC << EOF 2882static const int Z = 1; 2883#define fn() ({ Z; }) 2884#define TAUT(X) ((X) == Z) 2885#define PAREN(X, Y) (X == Y) 2886#define ID(X) (X) 2887int main(int argc, char *argv[]) 2888{ 2889 int x = 0, y = 0; 2890 x = ID(x); 2891 x = fn(); 2892 fn(); 2893 if (PAREN(x, y)) return 0; 2894 if (TAUT(Z)) return 0; 2895 return 0; 2896} 2897EOF 2898 2899if ! compile_object "-Werror"; then 2900 ccache_cpp2=yes 2901fi 2902 2903################################################# 2904# clang does not support glibc + FORTIFY_SOURCE. 2905 2906if test "$fortify_source" != "no"; then 2907 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 2908 fortify_source="no"; 2909 elif test -n "$cxx" && has $cxx && 2910 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 2911 fortify_source="no"; 2912 else 2913 fortify_source="yes" 2914 fi 2915fi 2916 2917########################################## 2918# check for usable membarrier system call 2919if test "$membarrier" = "yes"; then 2920 have_membarrier=no 2921 if test "$mingw32" = "yes" ; then 2922 have_membarrier=yes 2923 elif test "$linux" = "yes" ; then 2924 cat > $TMPC << EOF 2925 #include <linux/membarrier.h> 2926 #include <sys/syscall.h> 2927 #include <unistd.h> 2928 #include <stdlib.h> 2929 int main(void) { 2930 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 2931 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 2932 exit(0); 2933 } 2934EOF 2935 if compile_prog "" "" ; then 2936 have_membarrier=yes 2937 fi 2938 fi 2939 if test "$have_membarrier" = "no"; then 2940 feature_not_found "membarrier" "membarrier system call not available" 2941 fi 2942else 2943 # Do not enable it by default even for Mingw32, because it doesn't 2944 # work on Wine. 2945 membarrier=no 2946fi 2947 2948########################################## 2949# check for usable AF_ALG environment 2950have_afalg=no 2951cat > $TMPC << EOF 2952#include <errno.h> 2953#include <sys/types.h> 2954#include <sys/socket.h> 2955#include <linux/if_alg.h> 2956int main(void) { 2957 int sock; 2958 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 2959 return sock; 2960} 2961EOF 2962if compile_prog "" "" ; then 2963 have_afalg=yes 2964fi 2965if test "$crypto_afalg" = "yes" 2966then 2967 if test "$have_afalg" != "yes" 2968 then 2969 error_exit "AF_ALG requested but could not be detected" 2970 fi 2971fi 2972 2973 2974########################################## 2975# checks for sanitizers 2976 2977have_asan=no 2978have_ubsan=no 2979have_asan_iface_h=no 2980have_asan_iface_fiber=no 2981 2982if test "$sanitizers" = "yes" ; then 2983 write_c_skeleton 2984 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 2985 have_asan=yes 2986 fi 2987 2988 # we could use a simple skeleton for flags checks, but this also 2989 # detect the static linking issue of ubsan, see also: 2990 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 2991 cat > $TMPC << EOF 2992#include <stdlib.h> 2993int main(void) { 2994 void *tmp = malloc(10); 2995 if (tmp != NULL) { 2996 return *(int *)(tmp + 2); 2997 } 2998 return 1; 2999} 3000EOF 3001 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 3002 have_ubsan=yes 3003 fi 3004 3005 if check_include "sanitizer/asan_interface.h" ; then 3006 have_asan_iface_h=yes 3007 fi 3008 3009 cat > $TMPC << EOF 3010#include <sanitizer/asan_interface.h> 3011int main(void) { 3012 __sanitizer_start_switch_fiber(0, 0, 0); 3013 return 0; 3014} 3015EOF 3016 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 3017 have_asan_iface_fiber=yes 3018 fi 3019fi 3020 3021# Thread sanitizer is, for now, much noisier than the other sanitizers; 3022# keep it separate until that is not the case. 3023if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 3024 error_exit "TSAN is not supported with other sanitiziers." 3025fi 3026have_tsan=no 3027have_tsan_iface_fiber=no 3028if test "$tsan" = "yes" ; then 3029 write_c_skeleton 3030 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 3031 have_tsan=yes 3032 fi 3033 cat > $TMPC << EOF 3034#include <sanitizer/tsan_interface.h> 3035int main(void) { 3036 __tsan_create_fiber(0); 3037 return 0; 3038} 3039EOF 3040 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 3041 have_tsan_iface_fiber=yes 3042 fi 3043fi 3044 3045########################################## 3046# check for slirp 3047 3048case "$slirp" in 3049 auto | enabled | internal) 3050 # Simpler to always update submodule, even if not needed. 3051 git_submodules="${git_submodules} slirp" 3052 ;; 3053esac 3054 3055# Check for slirp smbd dupport 3056: ${smbd=${SMBD-/usr/sbin/smbd}} 3057if test "$slirp_smbd" != "no" ; then 3058 if test "$mingw32" = "yes" ; then 3059 if test "$slirp_smbd" = "yes" ; then 3060 error_exit "Host smbd not supported on this platform." 3061 fi 3062 slirp_smbd=no 3063 else 3064 slirp_smbd=yes 3065 fi 3066fi 3067 3068########################################## 3069# check for usable __NR_keyctl syscall 3070 3071if test "$linux" = "yes" ; then 3072 3073 have_keyring=no 3074 cat > $TMPC << EOF 3075#include <errno.h> 3076#include <asm/unistd.h> 3077#include <linux/keyctl.h> 3078#include <unistd.h> 3079int main(void) { 3080 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 3081} 3082EOF 3083 if compile_prog "" "" ; then 3084 have_keyring=yes 3085 fi 3086fi 3087if test "$secret_keyring" != "no" 3088then 3089 if test "$have_keyring" = "yes" 3090 then 3091 secret_keyring=yes 3092 else 3093 if test "$secret_keyring" = "yes" 3094 then 3095 error_exit "syscall __NR_keyctl requested, \ 3096but not implemented on your system" 3097 else 3098 secret_keyring=no 3099 fi 3100 fi 3101fi 3102 3103########################################## 3104# End of CC checks 3105# After here, no more $cc or $ld runs 3106 3107write_c_skeleton 3108 3109if test "$gcov" = "yes" ; then 3110 : 3111elif test "$fortify_source" = "yes" ; then 3112 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 3113 debug=no 3114fi 3115 3116case "$ARCH" in 3117alpha) 3118 # Ensure there's only a single GP 3119 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 3120;; 3121esac 3122 3123if test "$gprof" = "yes" ; then 3124 QEMU_CFLAGS="-p $QEMU_CFLAGS" 3125 QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 3126fi 3127 3128if test "$have_asan" = "yes"; then 3129 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 3130 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 3131 if test "$have_asan_iface_h" = "no" ; then 3132 echo "ASAN build enabled, but ASAN header missing." \ 3133 "Without code annotation, the report may be inferior." 3134 elif test "$have_asan_iface_fiber" = "no" ; then 3135 echo "ASAN build enabled, but ASAN header is too old." \ 3136 "Without code annotation, the report may be inferior." 3137 fi 3138fi 3139if test "$have_tsan" = "yes" ; then 3140 if test "$have_tsan_iface_fiber" = "yes" ; then 3141 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 3142 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 3143 else 3144 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 3145 fi 3146elif test "$tsan" = "yes" ; then 3147 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 3148fi 3149if test "$have_ubsan" = "yes"; then 3150 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 3151 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 3152fi 3153 3154########################################## 3155 3156# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 3157if test "$solaris" = "no" && test "$tsan" = "no"; then 3158 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 3159 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 3160 fi 3161fi 3162 3163# Use ASLR, no-SEH and DEP if available 3164if test "$mingw32" = "yes" ; then 3165 flags="--no-seh --nxcompat" 3166 3167 # Disable ASLR for debug builds to allow debugging with gdb 3168 if test "$debug" = "no" ; then 3169 flags="--dynamicbase $flags" 3170 fi 3171 3172 for flag in $flags; do 3173 if ld_has $flag ; then 3174 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 3175 fi 3176 done 3177fi 3178 3179# Probe for guest agent support/options 3180 3181if [ "$guest_agent" != "no" ]; then 3182 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 3183 guest_agent=no 3184 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 3185 guest_agent=yes 3186 elif [ "$guest_agent" != yes ]; then 3187 guest_agent=no 3188 else 3189 error_exit "Guest agent is not supported on this platform" 3190 fi 3191fi 3192 3193# Guest agent Windows MSI package 3194 3195if test "$QEMU_GA_MANUFACTURER" = ""; then 3196 QEMU_GA_MANUFACTURER=QEMU 3197fi 3198if test "$QEMU_GA_DISTRO" = ""; then 3199 QEMU_GA_DISTRO=Linux 3200fi 3201if test "$QEMU_GA_VERSION" = ""; then 3202 QEMU_GA_VERSION=$(cat $source_path/VERSION) 3203fi 3204 3205QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin" 3206 3207# Mac OS X ships with a broken assembler 3208roms= 3209if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 3210 test "$targetos" != "darwin" && test "$targetos" != "sunos" && \ 3211 test "$targetos" != "haiku" && test "$softmmu" = yes ; then 3212 # Different host OS linkers have different ideas about the name of the ELF 3213 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 3214 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 3215 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 3216 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 3217 ld_i386_emulation="$emu" 3218 roms="optionrom" 3219 break 3220 fi 3221 done 3222fi 3223 3224# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 3225# or -march=z10 (which is the lowest architecture level that Clang supports) 3226if test "$cpu" = "s390x" ; then 3227 write_c_skeleton 3228 compile_prog "-march=z900" "" 3229 has_z900=$? 3230 if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then 3231 if [ $has_z900 != 0 ]; then 3232 echo "WARNING: Your compiler does not support the z900!" 3233 echo " The s390-ccw bios will only work with guest CPUs >= z10." 3234 fi 3235 roms="$roms s390-ccw" 3236 # SLOF is required for building the s390-ccw firmware on s390x, 3237 # since it is using the libnet code from SLOF for network booting. 3238 git_submodules="${git_submodules} roms/SLOF" 3239 fi 3240fi 3241 3242# Check that the C++ compiler exists and works with the C compiler. 3243# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 3244if has $cxx; then 3245 cat > $TMPC <<EOF 3246int c_function(void); 3247int main(void) { return c_function(); } 3248EOF 3249 3250 compile_object 3251 3252 cat > $TMPCXX <<EOF 3253extern "C" { 3254 int c_function(void); 3255} 3256int c_function(void) { return 42; } 3257EOF 3258 3259 update_cxxflags 3260 3261 if do_cxx $CXXFLAGS $EXTRA_CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 3262 # C++ compiler $cxx works ok with C compiler $cc 3263 : 3264 else 3265 echo "C++ compiler $cxx does not work with C compiler $cc" 3266 echo "Disabling C++ specific optional code" 3267 cxx= 3268 fi 3269else 3270 echo "No C++ compiler available; disabling C++ specific optional code" 3271 cxx= 3272fi 3273 3274if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then 3275 exit 1 3276fi 3277 3278config_host_mak="config-host.mak" 3279 3280echo "# Automatically generated by configure - do not modify" > $config_host_mak 3281echo >> $config_host_mak 3282 3283echo all: >> $config_host_mak 3284echo "GIT=$git" >> $config_host_mak 3285echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 3286echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak 3287 3288if test "$debug_tcg" = "yes" ; then 3289 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 3290fi 3291if test "$mingw32" = "yes" ; then 3292 echo "CONFIG_WIN32=y" >> $config_host_mak 3293 if test "$guest_agent_with_vss" = "yes" ; then 3294 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 3295 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 3296 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 3297 fi 3298 if test "$guest_agent_ntddscsi" = "yes" ; then 3299 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 3300 fi 3301 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 3302 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 3303 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 3304 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 3305else 3306 echo "CONFIG_POSIX=y" >> $config_host_mak 3307fi 3308 3309if test "$linux" = "yes" ; then 3310 echo "CONFIG_LINUX=y" >> $config_host_mak 3311fi 3312 3313if test "$darwin" = "yes" ; then 3314 echo "CONFIG_DARWIN=y" >> $config_host_mak 3315fi 3316 3317if test "$solaris" = "yes" ; then 3318 echo "CONFIG_SOLARIS=y" >> $config_host_mak 3319fi 3320if test "$static" = "yes" ; then 3321 echo "CONFIG_STATIC=y" >> $config_host_mak 3322fi 3323if test "$profiler" = "yes" ; then 3324 echo "CONFIG_PROFILER=y" >> $config_host_mak 3325fi 3326if test "$want_tools" = "yes" ; then 3327 echo "CONFIG_TOOLS=y" >> $config_host_mak 3328fi 3329if test "$guest_agent" = "yes" ; then 3330 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 3331fi 3332if test "$slirp_smbd" = "yes" ; then 3333 echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak 3334 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 3335fi 3336if test "$gprof" = "yes" ; then 3337 echo "CONFIG_GPROF=y" >> $config_host_mak 3338fi 3339echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 3340echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 3341if test "$block_drv_whitelist_tools" = "yes" ; then 3342 echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak 3343fi 3344qemu_version=$(head $source_path/VERSION) 3345echo "PKGVERSION=$pkgversion" >>$config_host_mak 3346echo "SRC_PATH=$source_path" >> $config_host_mak 3347echo "TARGET_DIRS=$target_list" >> $config_host_mak 3348if test "$modules" = "yes"; then 3349 # $shacmd can generate a hash started with digit, which the compiler doesn't 3350 # like as an symbol. So prefix it with an underscore 3351 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 3352 echo "CONFIG_MODULES=y" >> $config_host_mak 3353fi 3354if test "$module_upgrades" = "yes"; then 3355 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 3356fi 3357if test "$have_usbfs" = "yes" ; then 3358 echo "CONFIG_USBFS=y" >> $config_host_mak 3359fi 3360if test "$gio" = "yes" ; then 3361 echo "CONFIG_GIO=y" >> $config_host_mak 3362 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 3363 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 3364fi 3365if test "$gdbus_codegen" != "" ; then 3366 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 3367fi 3368echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 3369 3370if test "$xen" = "enabled" ; then 3371 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 3372 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 3373 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 3374 echo "XEN_LIBS=$xen_libs" >> $config_host_mak 3375fi 3376if test "$vhost_scsi" = "yes" ; then 3377 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 3378fi 3379if test "$vhost_net" = "yes" ; then 3380 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 3381fi 3382if test "$vhost_net_user" = "yes" ; then 3383 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 3384fi 3385if test "$vhost_net_vdpa" = "yes" ; then 3386 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 3387fi 3388if test "$vhost_crypto" = "yes" ; then 3389 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 3390fi 3391if test "$vhost_vsock" = "yes" ; then 3392 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 3393 if test "$vhost_user" = "yes" ; then 3394 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 3395 fi 3396fi 3397if test "$vhost_kernel" = "yes" ; then 3398 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 3399fi 3400if test "$vhost_user" = "yes" ; then 3401 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 3402fi 3403if test "$vhost_vdpa" = "yes" ; then 3404 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 3405fi 3406if test "$vhost_user_fs" = "yes" ; then 3407 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 3408fi 3409if test "$membarrier" = "yes" ; then 3410 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 3411fi 3412if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then 3413 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 3414fi 3415 3416if test "$opengl" = "yes" ; then 3417 echo "CONFIG_OPENGL=y" >> $config_host_mak 3418 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 3419 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 3420fi 3421 3422if test "$avx2_opt" = "yes" ; then 3423 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 3424fi 3425 3426if test "$avx512f_opt" = "yes" ; then 3427 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 3428fi 3429 3430# XXX: suppress that 3431if [ "$bsd" = "yes" ] ; then 3432 echo "CONFIG_BSD=y" >> $config_host_mak 3433fi 3434 3435if test "$qom_cast_debug" = "yes" ; then 3436 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 3437fi 3438 3439echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 3440if test "$coroutine_pool" = "yes" ; then 3441 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 3442else 3443 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 3444fi 3445 3446if test "$debug_stack_usage" = "yes" ; then 3447 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 3448fi 3449 3450if test "$crypto_afalg" = "yes" ; then 3451 echo "CONFIG_AF_ALG=y" >> $config_host_mak 3452fi 3453 3454if test "$have_asan_iface_fiber" = "yes" ; then 3455 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 3456fi 3457 3458if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 3459 echo "CONFIG_TSAN=y" >> $config_host_mak 3460fi 3461 3462if test "$cpuid_h" = "yes" ; then 3463 echo "CONFIG_CPUID_H=y" >> $config_host_mak 3464fi 3465 3466if test "$int128" = "yes" ; then 3467 echo "CONFIG_INT128=y" >> $config_host_mak 3468fi 3469 3470if test "$atomic128" = "yes" ; then 3471 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 3472fi 3473 3474if test "$cmpxchg128" = "yes" ; then 3475 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 3476fi 3477 3478if test "$live_block_migration" = "yes" ; then 3479 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 3480fi 3481 3482if test "$tpm" = "yes"; then 3483 echo 'CONFIG_TPM=y' >> $config_host_mak 3484fi 3485 3486if test "$rdma" = "yes" ; then 3487 echo "CONFIG_RDMA=y" >> $config_host_mak 3488 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 3489fi 3490 3491if test "$pvrdma" = "yes" ; then 3492 echo "CONFIG_PVRDMA=y" >> $config_host_mak 3493fi 3494 3495if test "$replication" = "yes" ; then 3496 echo "CONFIG_REPLICATION=y" >> $config_host_mak 3497fi 3498 3499if test "$debug_mutex" = "yes" ; then 3500 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 3501fi 3502 3503if test "$bochs" = "yes" ; then 3504 echo "CONFIG_BOCHS=y" >> $config_host_mak 3505fi 3506if test "$cloop" = "yes" ; then 3507 echo "CONFIG_CLOOP=y" >> $config_host_mak 3508fi 3509if test "$dmg" = "yes" ; then 3510 echo "CONFIG_DMG=y" >> $config_host_mak 3511fi 3512if test "$qcow1" = "yes" ; then 3513 echo "CONFIG_QCOW1=y" >> $config_host_mak 3514fi 3515if test "$vdi" = "yes" ; then 3516 echo "CONFIG_VDI=y" >> $config_host_mak 3517fi 3518if test "$vvfat" = "yes" ; then 3519 echo "CONFIG_VVFAT=y" >> $config_host_mak 3520fi 3521if test "$qed" = "yes" ; then 3522 echo "CONFIG_QED=y" >> $config_host_mak 3523fi 3524if test "$parallels" = "yes" ; then 3525 echo "CONFIG_PARALLELS=y" >> $config_host_mak 3526fi 3527 3528if test "$plugins" = "yes" ; then 3529 echo "CONFIG_PLUGIN=y" >> $config_host_mak 3530fi 3531 3532if test -n "$gdb_bin"; then 3533 gdb_version=$($gdb_bin --version | head -n 1) 3534 if version_ge ${gdb_version##* } 9.1; then 3535 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 3536 fi 3537fi 3538 3539if test "$secret_keyring" = "yes" ; then 3540 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 3541fi 3542 3543echo "ROMS=$roms" >> $config_host_mak 3544echo "MAKE=$make" >> $config_host_mak 3545echo "PYTHON=$python" >> $config_host_mak 3546echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 3547echo "MESON=$meson" >> $config_host_mak 3548echo "NINJA=$ninja" >> $config_host_mak 3549echo "CC=$cc" >> $config_host_mak 3550echo "HOST_CC=$host_cc" >> $config_host_mak 3551if $iasl -h > /dev/null 2>&1; then 3552 echo "CONFIG_IASL=$iasl" >> $config_host_mak 3553fi 3554echo "AR=$ar" >> $config_host_mak 3555echo "AS=$as" >> $config_host_mak 3556echo "CCAS=$ccas" >> $config_host_mak 3557echo "CPP=$cpp" >> $config_host_mak 3558echo "OBJCOPY=$objcopy" >> $config_host_mak 3559echo "LD=$ld" >> $config_host_mak 3560echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 3561echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 3562echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 3563echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 3564echo "GLIB_LIBS=$glib_libs" >> $config_host_mak 3565echo "GLIB_VERSION=$(pkg-config --modversion glib-2.0)" >> $config_host_mak 3566echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 3567echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 3568echo "STRIP=$strip" >> $config_host_mak 3569echo "EXESUF=$EXESUF" >> $config_host_mak 3570echo "LIBS_QGA=$libs_qga" >> $config_host_mak 3571 3572if test "$rng_none" = "yes"; then 3573 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 3574fi 3575 3576# use included Linux headers 3577if test "$linux" = "yes" ; then 3578 mkdir -p linux-headers 3579 case "$cpu" in 3580 i386|x86_64) 3581 linux_arch=x86 3582 ;; 3583 ppc|ppc64) 3584 linux_arch=powerpc 3585 ;; 3586 s390x) 3587 linux_arch=s390 3588 ;; 3589 aarch64) 3590 linux_arch=arm64 3591 ;; 3592 loongarch*) 3593 linux_arch=loongarch 3594 ;; 3595 mips64) 3596 linux_arch=mips 3597 ;; 3598 *) 3599 # For most CPUs the kernel architecture name and QEMU CPU name match. 3600 linux_arch="$cpu" 3601 ;; 3602 esac 3603 # For non-KVM architectures we will not have asm headers 3604 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 3605 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 3606 fi 3607fi 3608 3609for target in $target_list; do 3610 target_dir="$target" 3611 target_name=$(echo $target | cut -d '-' -f 1)$EXESUF 3612 mkdir -p $target_dir 3613 case $target in 3614 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;; 3615 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;; 3616 esac 3617done 3618 3619echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak 3620if test "$default_targets" = "yes"; then 3621 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak 3622fi 3623 3624if test "$numa" = "yes"; then 3625 echo "CONFIG_NUMA=y" >> $config_host_mak 3626 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 3627fi 3628 3629if test "$ccache_cpp2" = "yes"; then 3630 echo "export CCACHE_CPP2=y" >> $config_host_mak 3631fi 3632 3633if test "$safe_stack" = "yes"; then 3634 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 3635fi 3636 3637# If we're using a separate build tree, set it up now. 3638# LINKS are things to symlink back into the source tree 3639# (these can be both files and directories). 3640# Caution: do not add files or directories here using wildcards. This 3641# will result in problems later if a new file matching the wildcard is 3642# added to the source tree -- nothing will cause configure to be rerun 3643# so the build tree will be missing the link back to the new file, and 3644# tests might fail. Prefer to keep the relevant files in their own 3645# directory and symlink the directory instead. 3646LINKS="Makefile" 3647LINKS="$LINKS tests/tcg/Makefile.target" 3648LINKS="$LINKS pc-bios/optionrom/Makefile" 3649LINKS="$LINKS pc-bios/s390-ccw/Makefile" 3650LINKS="$LINKS roms/seabios/Makefile" 3651LINKS="$LINKS pc-bios/qemu-icon.bmp" 3652LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 3653LINKS="$LINKS tests/avocado tests/data" 3654LINKS="$LINKS tests/qemu-iotests/check" 3655LINKS="$LINKS python" 3656LINKS="$LINKS contrib/plugins/Makefile " 3657for bios_file in \ 3658 $source_path/pc-bios/*.bin \ 3659 $source_path/pc-bios/*.elf \ 3660 $source_path/pc-bios/*.lid \ 3661 $source_path/pc-bios/*.rom \ 3662 $source_path/pc-bios/*.dtb \ 3663 $source_path/pc-bios/*.img \ 3664 $source_path/pc-bios/openbios-* \ 3665 $source_path/pc-bios/u-boot.* \ 3666 $source_path/pc-bios/palcode-* \ 3667 $source_path/pc-bios/qemu_vga.ndrv 3668 3669do 3670 LINKS="$LINKS pc-bios/$(basename $bios_file)" 3671done 3672for f in $LINKS ; do 3673 if [ -e "$source_path/$f" ]; then 3674 mkdir -p `dirname ./$f` 3675 symlink "$source_path/$f" "$f" 3676 fi 3677done 3678 3679(for i in $cross_cc_vars; do 3680 export $i 3681done 3682export target_list source_path use_containers cpu 3683$source_path/tests/tcg/configure.sh) 3684 3685# temporary config to build submodules 3686if test -f $source_path/roms/seabios/Makefile; then 3687 for rom in seabios; do 3688 config_mak=roms/$rom/config.mak 3689 echo "# Automatically generated by configure - do not modify" > $config_mak 3690 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 3691 echo "AS=$as" >> $config_mak 3692 echo "CCAS=$ccas" >> $config_mak 3693 echo "CC=$cc" >> $config_mak 3694 echo "BCC=bcc" >> $config_mak 3695 echo "CPP=$cpp" >> $config_mak 3696 echo "OBJCOPY=objcopy" >> $config_mak 3697 echo "IASL=$iasl" >> $config_mak 3698 echo "LD=$ld" >> $config_mak 3699 echo "RANLIB=$ranlib" >> $config_mak 3700 done 3701fi 3702 3703config_mak=pc-bios/optionrom/config.mak 3704echo "# Automatically generated by configure - do not modify" > $config_mak 3705echo "TOPSRC_DIR=$source_path" >> $config_mak 3706 3707if test "$skip_meson" = no; then 3708 cross="config-meson.cross.new" 3709 meson_quote() { 3710 test $# = 0 && return 3711 echo "'$(echo $* | sed "s/ /','/g")'" 3712 } 3713 3714 echo "# Automatically generated by configure - do not modify" > $cross 3715 echo "[properties]" >> $cross 3716 3717 # unroll any custom device configs 3718 for a in $device_archs; do 3719 eval "c=\$devices_${a}" 3720 echo "${a}-softmmu = '$c'" >> $cross 3721 done 3722 3723 test -z "$cxx" && echo "link_language = 'c'" >> $cross 3724 echo "[built-in options]" >> $cross 3725 echo "c_args = [$(meson_quote $CFLAGS $EXTRA_CFLAGS)]" >> $cross 3726 echo "cpp_args = [$(meson_quote $CXXFLAGS $EXTRA_CXXFLAGS)]" >> $cross 3727 echo "c_link_args = [$(meson_quote $CFLAGS $LDFLAGS $EXTRA_CFLAGS $EXTRA_LDFLAGS)]" >> $cross 3728 echo "cpp_link_args = [$(meson_quote $CXXFLAGS $LDFLAGS $EXTRA_CXXFLAGS $EXTRA_LDFLAGS)]" >> $cross 3729 echo "[binaries]" >> $cross 3730 echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross 3731 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross 3732 test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross 3733 echo "ar = [$(meson_quote $ar)]" >> $cross 3734 echo "nm = [$(meson_quote $nm)]" >> $cross 3735 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross 3736 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross 3737 if has $sdl2_config; then 3738 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross 3739 fi 3740 echo "strip = [$(meson_quote $strip)]" >> $cross 3741 echo "windres = [$(meson_quote $windres)]" >> $cross 3742 if test "$cross_compile" = "yes"; then 3743 cross_arg="--cross-file config-meson.cross" 3744 echo "[host_machine]" >> $cross 3745 echo "system = '$targetos'" >> $cross 3746 case "$cpu" in 3747 i386) 3748 echo "cpu_family = 'x86'" >> $cross 3749 ;; 3750 *) 3751 echo "cpu_family = '$cpu'" >> $cross 3752 ;; 3753 esac 3754 echo "cpu = '$cpu'" >> $cross 3755 if test "$bigendian" = "yes" ; then 3756 echo "endian = 'big'" >> $cross 3757 else 3758 echo "endian = 'little'" >> $cross 3759 fi 3760 else 3761 cross_arg="--native-file config-meson.cross" 3762 fi 3763 mv $cross config-meson.cross 3764 3765 rm -rf meson-private meson-info meson-logs 3766 run_meson() { 3767 NINJA=$ninja $meson setup \ 3768 --prefix "$prefix" \ 3769 --libdir "$libdir" \ 3770 --libexecdir "$libexecdir" \ 3771 --bindir "$bindir" \ 3772 --includedir "$includedir" \ 3773 --datadir "$datadir" \ 3774 --mandir "$mandir" \ 3775 --sysconfdir "$sysconfdir" \ 3776 --localedir "$localedir" \ 3777 --localstatedir "$local_statedir" \ 3778 -Daudio_drv_list=$audio_drv_list \ 3779 -Ddefault_devices=$default_devices \ 3780 -Ddocdir="$docdir" \ 3781 -Dqemu_firmwarepath="$firmwarepath" \ 3782 -Dqemu_suffix="$qemu_suffix" \ 3783 -Dsphinx_build="$sphinx_build" \ 3784 -Dtrace_file="$trace_file" \ 3785 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 3786 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 3787 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 3788 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 3789 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 3790 -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \ 3791 -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \ 3792 $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \ 3793 $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \ 3794 "$@" $cross_arg "$PWD" "$source_path" 3795 } 3796 eval run_meson $meson_options 3797 if test "$?" -ne 0 ; then 3798 error_exit "meson setup failed" 3799 fi 3800else 3801 if test -f meson-private/cmd_line.txt; then 3802 # Adjust old command line options whose type was changed 3803 # Avoids having to use "setup --wipe" when Meson is upgraded 3804 perl -i -ne ' 3805 s/^gettext = true$/gettext = auto/; 3806 s/^gettext = false$/gettext = disabled/; 3807 /^b_staticpic/ && next; 3808 print;' meson-private/cmd_line.txt 3809 fi 3810fi 3811 3812# Save the configure command line for later reuse. 3813cat <<EOD >config.status 3814#!/bin/sh 3815# Generated by configure. 3816# Run this file to recreate the current configuration. 3817# Compiler output produced by configure, useful for debugging 3818# configure, is in config.log if it exists. 3819EOD 3820 3821preserve_env() { 3822 envname=$1 3823 3824 eval envval=\$$envname 3825 3826 if test -n "$envval" 3827 then 3828 echo "$envname='$envval'" >> config.status 3829 echo "export $envname" >> config.status 3830 else 3831 echo "unset $envname" >> config.status 3832 fi 3833} 3834 3835# Preserve various env variables that influence what 3836# features/build target configure will detect 3837preserve_env AR 3838preserve_env AS 3839preserve_env CC 3840preserve_env CPP 3841preserve_env CFLAGS 3842preserve_env CXX 3843preserve_env CXXFLAGS 3844preserve_env INSTALL 3845preserve_env LD 3846preserve_env LDFLAGS 3847preserve_env LD_LIBRARY_PATH 3848preserve_env LIBTOOL 3849preserve_env MAKE 3850preserve_env NM 3851preserve_env OBJCOPY 3852preserve_env PATH 3853preserve_env PKG_CONFIG 3854preserve_env PKG_CONFIG_LIBDIR 3855preserve_env PKG_CONFIG_PATH 3856preserve_env PYTHON 3857preserve_env SDL2_CONFIG 3858preserve_env SMBD 3859preserve_env STRIP 3860preserve_env WINDRES 3861 3862printf "exec" >>config.status 3863for i in "$0" "$@"; do 3864 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status 3865done 3866echo ' "$@"' >>config.status 3867chmod +x config.status 3868 3869rm -r "$TMPDIR1" 3870