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