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) 1267 CPU_CFLAGS="-m32" 1268 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 1269 ;; 1270 ppc64) 1271 CPU_CFLAGS="-m64" 1272 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1273 ;; 1274 sparc) 1275 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" 1276 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS" 1277 ;; 1278 sparc64) 1279 CPU_CFLAGS="-m64 -mcpu=ultrasparc" 1280 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1281 ;; 1282 s390) 1283 CPU_CFLAGS="-m31" 1284 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS" 1285 ;; 1286 s390x) 1287 CPU_CFLAGS="-m64" 1288 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1289 ;; 1290 i386) 1291 CPU_CFLAGS="-m32" 1292 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 1293 ;; 1294 x86_64) 1295 # ??? Only extremely old AMD cpus do not have cmpxchg16b. 1296 # If we truly care, we should simply detect this case at 1297 # runtime and generate the fallback to serial emulation. 1298 CPU_CFLAGS="-m64 -mcx16" 1299 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1300 ;; 1301 x32) 1302 CPU_CFLAGS="-mx32" 1303 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS" 1304 ;; 1305 # No special flags required for other host CPUs 1306esac 1307 1308if eval test -z "\${cross_cc_$cpu}"; then 1309 eval "cross_cc_${cpu}=\$cc" 1310 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}" 1311fi 1312 1313# For user-mode emulation the host arch has to be one we explicitly 1314# support, even if we're using TCI. 1315if [ "$ARCH" = "unknown" ]; then 1316 bsd_user="no" 1317 linux_user="no" 1318fi 1319 1320default_target_list="" 1321deprecated_targets_list=ppc64abi32-linux-user 1322deprecated_features="" 1323mak_wilds="" 1324 1325if [ "$softmmu" = "yes" ]; then 1326 mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak" 1327fi 1328if [ "$linux_user" = "yes" ]; then 1329 mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak" 1330fi 1331if [ "$bsd_user" = "yes" ]; then 1332 mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak" 1333fi 1334 1335# If the user doesn't explicitly specify a deprecated target we will 1336# skip it. 1337if test -z "$target_list"; then 1338 if test -z "$target_list_exclude"; then 1339 target_list_exclude="$deprecated_targets_list" 1340 else 1341 target_list_exclude="$target_list_exclude,$deprecated_targets_list" 1342 fi 1343fi 1344 1345for config in $mak_wilds; do 1346 target="$(basename "$config" .mak)" 1347 if echo "$target_list_exclude" | grep -vq "$target"; then 1348 default_target_list="${default_target_list} $target" 1349 fi 1350done 1351 1352if test x"$show_help" = x"yes" ; then 1353cat << EOF 1354 1355Usage: configure [options] 1356Options: [defaults in brackets after descriptions] 1357 1358Standard options: 1359 --help print this message 1360 --prefix=PREFIX install in PREFIX [$prefix] 1361 --interp-prefix=PREFIX where to find shared libraries, etc. 1362 use %M for cpu name [$interp_prefix] 1363 --target-list=LIST set target list (default: build all non-deprecated) 1364$(echo Available targets: $default_target_list | \ 1365 fold -s -w 53 | sed -e 's/^/ /') 1366$(echo Deprecated targets: $deprecated_targets_list | \ 1367 fold -s -w 53 | sed -e 's/^/ /') 1368 --target-list-exclude=LIST exclude a set of targets from the default target-list 1369 1370Advanced options (experts only): 1371 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix] 1372 --cc=CC use C compiler CC [$cc] 1373 --iasl=IASL use ACPI compiler IASL [$iasl] 1374 --host-cc=CC use C compiler CC [$host_cc] for code run at 1375 build time 1376 --cxx=CXX use C++ compiler CXX [$cxx] 1377 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] 1378 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS 1379 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS 1380 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS 1381 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases 1382 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests 1383 --make=MAKE use specified make [$make] 1384 --python=PYTHON use specified python [$python] 1385 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build] 1386 --meson=MESON use specified meson [$meson] 1387 --ninja=NINJA use specified ninja [$ninja] 1388 --smbd=SMBD use specified smbd [$smbd] 1389 --with-git=GIT use specified git [$git] 1390 --with-git-submodules=update update git submodules (default if .git dir exists) 1391 --with-git-submodules=validate fail if git submodules are not up to date 1392 --with-git-submodules=ignore do not update or check git submodules (default if no .git dir) 1393 --static enable static build [$static] 1394 --mandir=PATH install man pages in PATH 1395 --datadir=PATH install firmware in PATH/$qemu_suffix 1396 --localedir=PATH install translation in PATH/$qemu_suffix 1397 --docdir=PATH install documentation in PATH/$qemu_suffix 1398 --bindir=PATH install binaries in PATH 1399 --libdir=PATH install libraries in PATH 1400 --libexecdir=PATH install helper binaries in PATH 1401 --sysconfdir=PATH install config in PATH/$qemu_suffix 1402 --localstatedir=PATH install local state in PATH (set at runtime on win32) 1403 --firmwarepath=PATH search PATH for firmware files 1404 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs. 1405 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix] 1406 --with-pkgversion=VERS use specified string as sub-version of the package 1407 --without-default-features default all --enable-* options to "disabled" 1408 --without-default-devices do not include any device that is not needed to 1409 start the emulator (only use if you are including 1410 desired devices in configs/devices/) 1411 --with-devices-ARCH=NAME override default configs/devices 1412 --enable-debug enable common debug build options 1413 --enable-sanitizers enable default sanitizers 1414 --enable-tsan enable thread sanitizer 1415 --disable-strip disable stripping binaries 1416 --disable-werror disable compilation abort on warning 1417 --disable-stack-protector disable compiler-provided stack protection 1418 --audio-drv-list=LIST set audio drivers list 1419 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L 1420 --block-drv-rw-whitelist=L 1421 set block driver read-write whitelist 1422 (by default affects only QEMU, not tools like qemu-img) 1423 --block-drv-ro-whitelist=L 1424 set block driver read-only whitelist 1425 (by default affects only QEMU, not tools like qemu-img) 1426 --enable-block-drv-whitelist-in-tools 1427 use block whitelist also in tools instead of only QEMU 1428 --with-trace-file=NAME Full PATH,NAME of file to store traces 1429 Default:trace-<pid> 1430 --cpu=CPU Build for host CPU [$cpu] 1431 --with-coroutine=BACKEND coroutine backend. Supported options: 1432 ucontext, sigaltstack, windows 1433 --enable-gcov enable test coverage analysis with gcov 1434 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent 1435 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) 1436 --tls-priority default TLS protocol/cipher priority string 1437 --enable-gprof QEMU profiling with gprof 1438 --enable-profiler profiler support 1439 --enable-debug-stack-usage 1440 track the maximum stack usage of stacks created by qemu_alloc_stack 1441 --enable-plugins 1442 enable plugins via shared library loading 1443 --disable-containers don't use containers for cross-building 1444 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin] 1445EOF 1446 meson_options_help 1447cat << EOF 1448 system all system emulation targets 1449 user supported user emulation targets 1450 linux-user all linux usermode emulation targets 1451 bsd-user all BSD usermode emulation targets 1452 guest-agent build the QEMU Guest Agent 1453 pie Position Independent Executables 1454 modules modules support (non-Windows) 1455 module-upgrades try to load modules from alternate paths for upgrades 1456 debug-tcg TCG debugging (default is disabled) 1457 debug-info debugging information 1458 lto Enable Link-Time Optimization. 1459 safe-stack SafeStack Stack Smash Protection. Depends on 1460 clang/llvm >= 3.7 and requires coroutine backend ucontext. 1461 membarrier membarrier system call (for Linux 4.14+ or Windows) 1462 rdma Enable RDMA-based migration 1463 pvrdma Enable PVRDMA support 1464 vhost-net vhost-net kernel acceleration support 1465 vhost-vsock virtio sockets device support 1466 vhost-scsi vhost-scsi kernel target support 1467 vhost-crypto vhost-user-crypto backend support 1468 vhost-kernel vhost kernel backend support 1469 vhost-user vhost-user backend support 1470 vhost-vdpa vhost-vdpa kernel backend support 1471 live-block-migration Block migration in the main migration stream 1472 coroutine-pool coroutine freelist (better performance) 1473 tpm TPM support 1474 libssh ssh block device support 1475 numa libnuma support 1476 avx2 AVX2 optimization support 1477 avx512f AVX512F optimization support 1478 replication replication support 1479 opengl opengl support 1480 xfsctl xfsctl support 1481 qom-cast-debug cast debugging support 1482 tools build qemu-io, qemu-nbd and qemu-img tools 1483 bochs bochs image format support 1484 cloop cloop image format support 1485 dmg dmg image format support 1486 qcow1 qcow v1 image format support 1487 vdi vdi image format support 1488 vvfat vvfat image format support 1489 qed qed image format support 1490 parallels parallels image format support 1491 crypto-afalg Linux AF_ALG crypto backend driver 1492 debug-mutex mutex debugging support 1493 rng-none dummy RNG, avoid using /dev/(u)random and getrandom() 1494 gio libgio support 1495 slirp-smbd use smbd (at path --smbd=*) in slirp networking 1496 1497NOTE: The object files are built at the place where configure is launched 1498EOF 1499exit 0 1500fi 1501 1502# Remove old dependency files to make sure that they get properly regenerated 1503rm -f */config-devices.mak.d 1504 1505if test -z "$python" 1506then 1507 error_exit "Python not found. Use --python=/path/to/python" 1508fi 1509if ! has "$make" 1510then 1511 error_exit "GNU make ($make) not found" 1512fi 1513 1514# Note that if the Python conditional here evaluates True we will exit 1515# with status 1 which is a shell 'false' value. 1516if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then 1517 error_exit "Cannot use '$python', Python >= 3.6 is required." \ 1518 "Use --python=/path/to/python to specify a supported Python." 1519fi 1520 1521# Preserve python version since some functionality is dependent on it 1522python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null) 1523 1524# Suppress writing compiled files 1525python="$python -B" 1526 1527if test -z "$meson"; then 1528 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.59.2; then 1529 meson=meson 1530 elif test $git_submodules_action != 'ignore' ; then 1531 meson=git 1532 elif test -e "${source_path}/meson/meson.py" ; then 1533 meson=internal 1534 else 1535 if test "$explicit_python" = yes; then 1536 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found." 1537 else 1538 error_exit "Meson not found. Use --meson=/path/to/meson" 1539 fi 1540 fi 1541else 1542 # Meson uses its own Python interpreter to invoke other Python scripts, 1543 # but the user wants to use the one they specified with --python. 1544 # 1545 # We do not want to override the distro Python interpreter (and sometimes 1546 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so 1547 # just require --meson=git|internal together with --python. 1548 if test "$explicit_python" = yes; then 1549 case "$meson" in 1550 git | internal) ;; 1551 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;; 1552 esac 1553 fi 1554fi 1555 1556if test "$meson" = git; then 1557 git_submodules="${git_submodules} meson" 1558fi 1559 1560case "$meson" in 1561 git | internal) 1562 meson="$python ${source_path}/meson/meson.py" 1563 ;; 1564 *) meson=$(command -v "$meson") ;; 1565esac 1566 1567# Probe for ninja 1568 1569if test -z "$ninja"; then 1570 for c in ninja ninja-build samu; do 1571 if has $c; then 1572 ninja=$(command -v "$c") 1573 break 1574 fi 1575 done 1576 if test -z "$ninja"; then 1577 error_exit "Cannot find Ninja" 1578 fi 1579fi 1580 1581# Check that the C compiler works. Doing this here before testing 1582# the host CPU ensures that we had a valid CC to autodetect the 1583# $cpu var (and we should bail right here if that's not the case). 1584# It also allows the help message to be printed without a CC. 1585write_c_skeleton; 1586if compile_object ; then 1587 : C compiler works ok 1588else 1589 error_exit "\"$cc\" either does not exist or does not work" 1590fi 1591if ! compile_prog ; then 1592 error_exit "\"$cc\" cannot build an executable (is your linker broken?)" 1593fi 1594 1595# Consult white-list to determine whether to enable werror 1596# by default. Only enable by default for git builds 1597if test -z "$werror" ; then 1598 if test "$git_submodules_action" != "ignore" && \ 1599 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then 1600 werror="yes" 1601 else 1602 werror="no" 1603 fi 1604fi 1605 1606if test "$targetos" = "bogus"; then 1607 # Now that we know that we're not printing the help and that 1608 # the compiler works (so the results of the check_defines we used 1609 # to identify the OS are reliable), if we didn't recognize the 1610 # host OS we should stop now. 1611 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" 1612fi 1613 1614# Check whether the compiler matches our minimum requirements: 1615cat > $TMPC << EOF 1616#if defined(__clang_major__) && defined(__clang_minor__) 1617# ifdef __apple_build_version__ 1618# if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0) 1619# error You need at least XCode Clang v10.0 to compile QEMU 1620# endif 1621# else 1622# if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0) 1623# error You need at least Clang v6.0 to compile QEMU 1624# endif 1625# endif 1626#elif defined(__GNUC__) && defined(__GNUC_MINOR__) 1627# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4) 1628# error You need at least GCC v7.4.0 to compile QEMU 1629# endif 1630#else 1631# error You either need GCC or Clang to compiler QEMU 1632#endif 1633int main (void) { return 0; } 1634EOF 1635if ! compile_prog "" "" ; then 1636 error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)" 1637fi 1638 1639# Accumulate -Wfoo and -Wno-bar separately. 1640# We will list all of the enable flags first, and the disable flags second. 1641# Note that we do not add -Werror, because that would enable it for all 1642# configure tests. If a configure test failed due to -Werror this would 1643# just silently disable some features, so it's too error prone. 1644 1645warn_flags= 1646add_to warn_flags -Wold-style-declaration 1647add_to warn_flags -Wold-style-definition 1648add_to warn_flags -Wtype-limits 1649add_to warn_flags -Wformat-security 1650add_to warn_flags -Wformat-y2k 1651add_to warn_flags -Winit-self 1652add_to warn_flags -Wignored-qualifiers 1653add_to warn_flags -Wempty-body 1654add_to warn_flags -Wnested-externs 1655add_to warn_flags -Wendif-labels 1656add_to warn_flags -Wexpansion-to-defined 1657add_to warn_flags -Wimplicit-fallthrough=2 1658 1659nowarn_flags= 1660add_to nowarn_flags -Wno-initializer-overrides 1661add_to nowarn_flags -Wno-missing-include-dirs 1662add_to nowarn_flags -Wno-shift-negative-value 1663add_to nowarn_flags -Wno-string-plus-int 1664add_to nowarn_flags -Wno-typedef-redefinition 1665add_to nowarn_flags -Wno-tautological-type-limit-compare 1666add_to nowarn_flags -Wno-psabi 1667 1668gcc_flags="$warn_flags $nowarn_flags" 1669 1670cc_has_warning_flag() { 1671 write_c_skeleton; 1672 1673 # Use the positive sense of the flag when testing for -Wno-wombat 1674 # support (gcc will happily accept the -Wno- form of unknown 1675 # warning options). 1676 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 1677 compile_prog "-Werror $optflag" "" 1678} 1679 1680for flag in $gcc_flags; do 1681 if cc_has_warning_flag $flag ; then 1682 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1683 fi 1684done 1685 1686if test "$stack_protector" != "no"; then 1687 cat > $TMPC << EOF 1688int main(int argc, char *argv[]) 1689{ 1690 char arr[64], *p = arr, *c = argv[0]; 1691 while (*c) { 1692 *p++ = *c++; 1693 } 1694 return 0; 1695} 1696EOF 1697 gcc_flags="-fstack-protector-strong -fstack-protector-all" 1698 sp_on=0 1699 for flag in $gcc_flags; do 1700 # We need to check both a compile and a link, since some compiler 1701 # setups fail only on a .c->.o compile and some only at link time 1702 if compile_object "-Werror $flag" && 1703 compile_prog "-Werror $flag" ""; then 1704 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1705 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 1706 sp_on=1 1707 break 1708 fi 1709 done 1710 if test "$stack_protector" = yes; then 1711 if test $sp_on = 0; then 1712 error_exit "Stack protector not supported" 1713 fi 1714 fi 1715fi 1716 1717# Disable -Wmissing-braces on older compilers that warn even for 1718# the "universal" C zero initializer {0}. 1719cat > $TMPC << EOF 1720struct { 1721 int a[2]; 1722} x = {0}; 1723EOF 1724if compile_object "-Werror" "" ; then 1725 : 1726else 1727 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 1728fi 1729 1730# Our module code doesn't support Windows 1731if test "$modules" = "yes" && test "$mingw32" = "yes" ; then 1732 error_exit "Modules are not available for Windows" 1733fi 1734 1735# module_upgrades is only reasonable if modules are enabled 1736if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then 1737 error_exit "Can't enable module-upgrades as Modules are not enabled" 1738fi 1739 1740# Static linking is not possible with plugins, modules or PIE 1741if test "$static" = "yes" ; then 1742 if test "$modules" = "yes" ; then 1743 error_exit "static and modules are mutually incompatible" 1744 fi 1745 if test "$plugins" = "yes"; then 1746 error_exit "static and plugins are mutually incompatible" 1747 else 1748 plugins="no" 1749 fi 1750fi 1751 1752# Unconditional check for compiler __thread support 1753 cat > $TMPC << EOF 1754static __thread int tls_var; 1755int main(void) { return tls_var; } 1756EOF 1757 1758if ! compile_prog "-Werror" "" ; then 1759 error_exit "Your compiler does not support the __thread specifier for " \ 1760 "Thread-Local Storage (TLS). Please upgrade to a version that does." 1761fi 1762 1763cat > $TMPC << EOF 1764 1765#ifdef __linux__ 1766# define THREAD __thread 1767#else 1768# define THREAD 1769#endif 1770static THREAD int tls_var; 1771int main(void) { return tls_var; } 1772EOF 1773 1774# Check we support --no-pie first; we will need this for building ROMs. 1775if compile_prog "-Werror -fno-pie" "-no-pie"; then 1776 CFLAGS_NOPIE="-fno-pie" 1777fi 1778 1779if test "$static" = "yes"; then 1780 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then 1781 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 1782 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS" 1783 pie="yes" 1784 elif test "$pie" = "yes"; then 1785 error_exit "-static-pie not available due to missing toolchain support" 1786 else 1787 QEMU_LDFLAGS="-static $QEMU_LDFLAGS" 1788 pie="no" 1789 fi 1790elif test "$pie" = "no"; then 1791 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS" 1792elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then 1793 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 1794 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS" 1795 pie="yes" 1796elif test "$pie" = "yes"; then 1797 error_exit "PIE not available due to missing toolchain support" 1798else 1799 echo "Disabling PIE due to missing toolchain support" 1800 pie="no" 1801fi 1802 1803# Detect support for PT_GNU_RELRO + DT_BIND_NOW. 1804# The combination is known as "full relro", because .got.plt is read-only too. 1805if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 1806 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS" 1807fi 1808 1809########################################## 1810# __sync_fetch_and_and requires at least -march=i486. Many toolchains 1811# use i686 as default anyway, but for those that don't, an explicit 1812# specification is necessary 1813 1814if test "$cpu" = "i386"; then 1815 cat > $TMPC << EOF 1816static int sfaa(int *ptr) 1817{ 1818 return __sync_fetch_and_and(ptr, 0); 1819} 1820 1821int main(void) 1822{ 1823 int val = 42; 1824 val = __sync_val_compare_and_swap(&val, 0, 1); 1825 sfaa(&val); 1826 return val; 1827} 1828EOF 1829 if ! compile_prog "" "" ; then 1830 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 1831 fi 1832fi 1833 1834if test "$tcg" = "enabled"; then 1835 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3" 1836 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3" 1837fi 1838 1839if test -z "${target_list+xxx}" ; then 1840 default_targets=yes 1841 for target in $default_target_list; do 1842 target_list="$target_list $target" 1843 done 1844 target_list="${target_list# }" 1845else 1846 default_targets=no 1847 target_list=$(echo "$target_list" | sed -e 's/,/ /g') 1848 for target in $target_list; do 1849 # Check that we recognised the target name; this allows a more 1850 # friendly error message than if we let it fall through. 1851 case " $default_target_list " in 1852 *" $target "*) 1853 ;; 1854 *) 1855 error_exit "Unknown target name '$target'" 1856 ;; 1857 esac 1858 done 1859fi 1860 1861for target in $target_list; do 1862 # if a deprecated target is enabled we note it here 1863 if echo "$deprecated_targets_list" | grep -q "$target"; then 1864 add_to deprecated_features $target 1865 fi 1866done 1867 1868# see if system emulation was really requested 1869case " $target_list " in 1870 *"-softmmu "*) softmmu=yes 1871 ;; 1872 *) softmmu=no 1873 ;; 1874esac 1875 1876feature_not_found() { 1877 feature=$1 1878 remedy=$2 1879 1880 error_exit "User requested feature $feature" \ 1881 "configure was not able to find it." \ 1882 "$remedy" 1883} 1884 1885# --- 1886# big/little endian test 1887cat > $TMPC << EOF 1888#include <stdio.h> 1889short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 1890short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 1891int main(int argc, char *argv[]) 1892{ 1893 return printf("%s %s\n", (char *)big_endian, (char *)little_endian); 1894} 1895EOF 1896 1897if compile_prog ; then 1898 if strings -a $TMPE | grep -q BiGeNdIaN ; then 1899 bigendian="yes" 1900 elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then 1901 bigendian="no" 1902 else 1903 echo big/little test failed 1904 exit 1 1905 fi 1906else 1907 echo big/little test failed 1908 exit 1 1909fi 1910 1911########################################## 1912# system tools 1913if test -z "$want_tools"; then 1914 if test "$softmmu" = "no"; then 1915 want_tools=no 1916 else 1917 want_tools=yes 1918 fi 1919fi 1920 1921########################################## 1922# L2TPV3 probe 1923 1924cat > $TMPC <<EOF 1925#include <sys/socket.h> 1926#include <linux/ip.h> 1927int main(void) { return sizeof(struct mmsghdr); } 1928EOF 1929if compile_prog "" "" ; then 1930 l2tpv3=yes 1931else 1932 l2tpv3=no 1933fi 1934 1935######################################### 1936# vhost interdependencies and host support 1937 1938# vhost backends 1939if test "$vhost_user" = "yes" && test "$linux" != "yes"; then 1940 error_exit "vhost-user is only available on Linux" 1941fi 1942test "$vhost_vdpa" = "" && vhost_vdpa=$linux 1943if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then 1944 error_exit "vhost-vdpa is only available on Linux" 1945fi 1946test "$vhost_kernel" = "" && vhost_kernel=$linux 1947if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then 1948 error_exit "vhost-kernel is only available on Linux" 1949fi 1950 1951# vhost-kernel devices 1952test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel 1953if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then 1954 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" 1955fi 1956test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel 1957if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then 1958 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" 1959fi 1960 1961# vhost-user backends 1962test "$vhost_net_user" = "" && vhost_net_user=$vhost_user 1963if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then 1964 error_exit "--enable-vhost-net-user requires --enable-vhost-user" 1965fi 1966test "$vhost_crypto" = "" && vhost_crypto=$vhost_user 1967if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then 1968 error_exit "--enable-vhost-crypto requires --enable-vhost-user" 1969fi 1970test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user 1971if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then 1972 error_exit "--enable-vhost-user-fs requires --enable-vhost-user" 1973fi 1974#vhost-vdpa backends 1975test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa 1976if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then 1977 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" 1978fi 1979 1980# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity 1981if test "$vhost_net" = ""; then 1982 test "$vhost_net_user" = "yes" && vhost_net=yes 1983 test "$vhost_net_vdpa" = "yes" && vhost_net=yes 1984 test "$vhost_kernel" = "yes" && vhost_net=yes 1985fi 1986 1987########################################## 1988# pkg-config probe 1989 1990if ! has "$pkg_config_exe"; then 1991 error_exit "pkg-config binary '$pkg_config_exe' not found" 1992fi 1993 1994########################################## 1995# NPTL probe 1996 1997if test "$linux_user" = "yes"; then 1998 cat > $TMPC <<EOF 1999#include <sched.h> 2000#include <linux/futex.h> 2001int main(void) { 2002#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 2003#error bork 2004#endif 2005 return 0; 2006} 2007EOF 2008 if ! compile_object ; then 2009 feature_not_found "nptl" "Install glibc and linux kernel headers." 2010 fi 2011fi 2012 2013########################################## 2014# xen probe 2015 2016if test "$xen" != "disabled" ; then 2017 # Check whether Xen library path is specified via --extra-ldflags to avoid 2018 # overriding this setting with pkg-config output. If not, try pkg-config 2019 # to obtain all needed flags. 2020 2021 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2022 $pkg_config --exists xencontrol ; then 2023 xen_ctrl_version="$(printf '%d%02d%02d' \ 2024 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2025 xen=enabled 2026 xen_pc="xencontrol xenstore xenforeignmemory xengnttab" 2027 xen_pc="$xen_pc xenevtchn xendevicemodel" 2028 if $pkg_config --exists xentoolcore; then 2029 xen_pc="$xen_pc xentoolcore" 2030 fi 2031 xen_cflags="$($pkg_config --cflags $xen_pc)" 2032 xen_libs="$($pkg_config --libs $xen_pc)" 2033 else 2034 2035 xen_libs="-lxenstore -lxenctrl" 2036 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2037 2038 # First we test whether Xen headers and libraries are available. 2039 # If no, we are done and there is no Xen support. 2040 # If yes, more tests are run to detect the Xen version. 2041 2042 # Xen (any) 2043 cat > $TMPC <<EOF 2044#include <xenctrl.h> 2045int main(void) { 2046 return 0; 2047} 2048EOF 2049 if ! compile_prog "" "$xen_libs" ; then 2050 # Xen not found 2051 if test "$xen" = "enabled" ; then 2052 feature_not_found "xen" "Install xen devel" 2053 fi 2054 xen=disabled 2055 2056 # Xen unstable 2057 elif 2058 cat > $TMPC <<EOF && 2059#undef XC_WANT_COMPAT_DEVICEMODEL_API 2060#define __XEN_TOOLS__ 2061#include <xendevicemodel.h> 2062#include <xenforeignmemory.h> 2063int main(void) { 2064 xendevicemodel_handle *xd; 2065 xenforeignmemory_handle *xfmem; 2066 2067 xd = xendevicemodel_open(0, 0); 2068 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 2069 2070 xfmem = xenforeignmemory_open(0, 0); 2071 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2072 2073 return 0; 2074} 2075EOF 2076 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2077 then 2078 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2079 xen_ctrl_version=41100 2080 xen=enabled 2081 elif 2082 cat > $TMPC <<EOF && 2083#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2084#include <xenforeignmemory.h> 2085#include <xentoolcore.h> 2086int main(void) { 2087 xenforeignmemory_handle *xfmem; 2088 2089 xfmem = xenforeignmemory_open(0, 0); 2090 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2091 xentoolcore_restrict_all(0); 2092 2093 return 0; 2094} 2095EOF 2096 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2097 then 2098 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2099 xen_ctrl_version=41000 2100 xen=enabled 2101 elif 2102 cat > $TMPC <<EOF && 2103#undef XC_WANT_COMPAT_DEVICEMODEL_API 2104#define __XEN_TOOLS__ 2105#include <xendevicemodel.h> 2106int main(void) { 2107 xendevicemodel_handle *xd; 2108 2109 xd = xendevicemodel_open(0, 0); 2110 xendevicemodel_close(xd); 2111 2112 return 0; 2113} 2114EOF 2115 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2116 then 2117 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2118 xen_ctrl_version=40900 2119 xen=enabled 2120 elif 2121 cat > $TMPC <<EOF && 2122/* 2123 * If we have stable libs the we don't want the libxc compat 2124 * layers, regardless of what CFLAGS we may have been given. 2125 * 2126 * Also, check if xengnttab_grant_copy_segment_t is defined and 2127 * grant copy operation is implemented. 2128 */ 2129#undef XC_WANT_COMPAT_EVTCHN_API 2130#undef XC_WANT_COMPAT_GNTTAB_API 2131#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2132#include <xenctrl.h> 2133#include <xenstore.h> 2134#include <xenevtchn.h> 2135#include <xengnttab.h> 2136#include <xenforeignmemory.h> 2137#include <stdint.h> 2138#include <xen/hvm/hvm_info_table.h> 2139#if !defined(HVM_MAX_VCPUS) 2140# error HVM_MAX_VCPUS not defined 2141#endif 2142int main(void) { 2143 xc_interface *xc = NULL; 2144 xenforeignmemory_handle *xfmem; 2145 xenevtchn_handle *xe; 2146 xengnttab_handle *xg; 2147 xengnttab_grant_copy_segment_t* seg = NULL; 2148 2149 xs_daemon_open(); 2150 2151 xc = xc_interface_open(0, 0, 0); 2152 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2153 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2154 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2155 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2156 2157 xfmem = xenforeignmemory_open(0, 0); 2158 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2159 2160 xe = xenevtchn_open(0, 0); 2161 xenevtchn_fd(xe); 2162 2163 xg = xengnttab_open(0, 0); 2164 xengnttab_grant_copy(xg, 0, seg); 2165 2166 return 0; 2167} 2168EOF 2169 compile_prog "" "$xen_libs $xen_stable_libs" 2170 then 2171 xen_ctrl_version=40800 2172 xen=enabled 2173 elif 2174 cat > $TMPC <<EOF && 2175/* 2176 * If we have stable libs the we don't want the libxc compat 2177 * layers, regardless of what CFLAGS we may have been given. 2178 */ 2179#undef XC_WANT_COMPAT_EVTCHN_API 2180#undef XC_WANT_COMPAT_GNTTAB_API 2181#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2182#include <xenctrl.h> 2183#include <xenstore.h> 2184#include <xenevtchn.h> 2185#include <xengnttab.h> 2186#include <xenforeignmemory.h> 2187#include <stdint.h> 2188#include <xen/hvm/hvm_info_table.h> 2189#if !defined(HVM_MAX_VCPUS) 2190# error HVM_MAX_VCPUS not defined 2191#endif 2192int main(void) { 2193 xc_interface *xc = NULL; 2194 xenforeignmemory_handle *xfmem; 2195 xenevtchn_handle *xe; 2196 xengnttab_handle *xg; 2197 2198 xs_daemon_open(); 2199 2200 xc = xc_interface_open(0, 0, 0); 2201 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2202 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2203 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2204 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2205 2206 xfmem = xenforeignmemory_open(0, 0); 2207 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2208 2209 xe = xenevtchn_open(0, 0); 2210 xenevtchn_fd(xe); 2211 2212 xg = xengnttab_open(0, 0); 2213 xengnttab_map_grant_ref(xg, 0, 0, 0); 2214 2215 return 0; 2216} 2217EOF 2218 compile_prog "" "$xen_libs $xen_stable_libs" 2219 then 2220 xen_ctrl_version=40701 2221 xen=enabled 2222 2223 # Xen 4.6 2224 elif 2225 cat > $TMPC <<EOF && 2226#include <xenctrl.h> 2227#include <xenstore.h> 2228#include <stdint.h> 2229#include <xen/hvm/hvm_info_table.h> 2230#if !defined(HVM_MAX_VCPUS) 2231# error HVM_MAX_VCPUS not defined 2232#endif 2233int main(void) { 2234 xc_interface *xc; 2235 xs_daemon_open(); 2236 xc = xc_interface_open(0, 0, 0); 2237 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2238 xc_gnttab_open(NULL, 0); 2239 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2240 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2241 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2242 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2243 return 0; 2244} 2245EOF 2246 compile_prog "" "$xen_libs" 2247 then 2248 xen_ctrl_version=40600 2249 xen=enabled 2250 2251 # Xen 4.5 2252 elif 2253 cat > $TMPC <<EOF && 2254#include <xenctrl.h> 2255#include <xenstore.h> 2256#include <stdint.h> 2257#include <xen/hvm/hvm_info_table.h> 2258#if !defined(HVM_MAX_VCPUS) 2259# error HVM_MAX_VCPUS not defined 2260#endif 2261int main(void) { 2262 xc_interface *xc; 2263 xs_daemon_open(); 2264 xc = xc_interface_open(0, 0, 0); 2265 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2266 xc_gnttab_open(NULL, 0); 2267 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2268 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2269 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2270 return 0; 2271} 2272EOF 2273 compile_prog "" "$xen_libs" 2274 then 2275 xen_ctrl_version=40500 2276 xen=enabled 2277 2278 elif 2279 cat > $TMPC <<EOF && 2280#include <xenctrl.h> 2281#include <xenstore.h> 2282#include <stdint.h> 2283#include <xen/hvm/hvm_info_table.h> 2284#if !defined(HVM_MAX_VCPUS) 2285# error HVM_MAX_VCPUS not defined 2286#endif 2287int main(void) { 2288 xc_interface *xc; 2289 xs_daemon_open(); 2290 xc = xc_interface_open(0, 0, 0); 2291 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2292 xc_gnttab_open(NULL, 0); 2293 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2294 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2295 return 0; 2296} 2297EOF 2298 compile_prog "" "$xen_libs" 2299 then 2300 xen_ctrl_version=40200 2301 xen=enabled 2302 2303 else 2304 if test "$xen" = "enabled" ; then 2305 feature_not_found "xen (unsupported version)" \ 2306 "Install a supported xen (xen 4.2 or newer)" 2307 fi 2308 xen=disabled 2309 fi 2310 2311 if test "$xen" = enabled; then 2312 if test $xen_ctrl_version -ge 40701 ; then 2313 xen_libs="$xen_libs $xen_stable_libs " 2314 fi 2315 fi 2316 fi 2317fi 2318 2319########################################## 2320# RDMA needs OpenFabrics libraries 2321if test "$rdma" != "no" ; then 2322 cat > $TMPC <<EOF 2323#include <rdma/rdma_cma.h> 2324int main(void) { return 0; } 2325EOF 2326 rdma_libs="-lrdmacm -libverbs -libumad" 2327 if compile_prog "" "$rdma_libs" ; then 2328 rdma="yes" 2329 else 2330 if test "$rdma" = "yes" ; then 2331 error_exit \ 2332 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 2333 " Your options:" \ 2334 " (1) Fast: Install infiniband packages (devel) from your distro." \ 2335 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 2336 " (3) Also: Install softiwarp if you don't have RDMA hardware" 2337 fi 2338 rdma="no" 2339 fi 2340fi 2341 2342########################################## 2343# PVRDMA detection 2344 2345cat > $TMPC <<EOF && 2346#include <sys/mman.h> 2347 2348int 2349main(void) 2350{ 2351 char buf = 0; 2352 void *addr = &buf; 2353 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 2354 2355 return 0; 2356} 2357EOF 2358 2359if test "$rdma" = "yes" ; then 2360 case "$pvrdma" in 2361 "") 2362 if compile_prog "" ""; then 2363 pvrdma="yes" 2364 else 2365 pvrdma="no" 2366 fi 2367 ;; 2368 "yes") 2369 if ! compile_prog "" ""; then 2370 error_exit "PVRDMA is not supported since mremap is not implemented" 2371 fi 2372 pvrdma="yes" 2373 ;; 2374 "no") 2375 pvrdma="no" 2376 ;; 2377 esac 2378else 2379 if test "$pvrdma" = "yes" ; then 2380 error_exit "PVRDMA requires rdma suppport" 2381 fi 2382 pvrdma="no" 2383fi 2384 2385# Let's see if enhanced reg_mr is supported 2386if test "$pvrdma" = "yes" ; then 2387 2388cat > $TMPC <<EOF && 2389#include <infiniband/verbs.h> 2390 2391int 2392main(void) 2393{ 2394 struct ibv_mr *mr; 2395 struct ibv_pd *pd = NULL; 2396 size_t length = 10; 2397 uint64_t iova = 0; 2398 int access = 0; 2399 void *addr = NULL; 2400 2401 mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 2402 2403 ibv_dereg_mr(mr); 2404 2405 return 0; 2406} 2407EOF 2408 if ! compile_prog "" "-libverbs"; then 2409 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 2410 fi 2411fi 2412 2413########################################## 2414# xfsctl() probe, used for file-posix.c 2415if test "$xfs" != "no" ; then 2416 cat > $TMPC << EOF 2417#include <stddef.h> /* NULL */ 2418#include <xfs/xfs.h> 2419int main(void) 2420{ 2421 xfsctl(NULL, 0, 0, NULL); 2422 return 0; 2423} 2424EOF 2425 if compile_prog "" "" ; then 2426 xfs="yes" 2427 else 2428 if test "$xfs" = "yes" ; then 2429 feature_not_found "xfs" "Install xfsprogs/xfslibs devel" 2430 fi 2431 xfs=no 2432 fi 2433fi 2434 2435########################################## 2436# plugin linker support probe 2437 2438if test "$plugins" != "no"; then 2439 2440 ######################################### 2441 # See if --dynamic-list is supported by the linker 2442 2443 ld_dynamic_list="no" 2444 cat > $TMPTXT <<EOF 2445{ 2446 foo; 2447}; 2448EOF 2449 2450 cat > $TMPC <<EOF 2451#include <stdio.h> 2452void foo(void); 2453 2454void foo(void) 2455{ 2456 printf("foo\n"); 2457} 2458 2459int main(void) 2460{ 2461 foo(); 2462 return 0; 2463} 2464EOF 2465 2466 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 2467 ld_dynamic_list="yes" 2468 fi 2469 2470 ######################################### 2471 # See if -exported_symbols_list is supported by the linker 2472 2473 ld_exported_symbols_list="no" 2474 cat > $TMPTXT <<EOF 2475 _foo 2476EOF 2477 2478 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 2479 ld_exported_symbols_list="yes" 2480 fi 2481 2482 if test "$ld_dynamic_list" = "no" && 2483 test "$ld_exported_symbols_list" = "no" ; then 2484 if test "$plugins" = "yes"; then 2485 error_exit \ 2486 "Plugin support requires dynamic linking and specifying a set of symbols " \ 2487 "that are exported to plugins. Unfortunately your linker doesn't " \ 2488 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 2489 "for this purpose." 2490 else 2491 plugins="no" 2492 fi 2493 else 2494 plugins="yes" 2495 fi 2496fi 2497 2498########################################## 2499# glib support probe 2500 2501glib_req_ver=2.56 2502glib_modules=gthread-2.0 2503if test "$modules" = yes; then 2504 glib_modules="$glib_modules gmodule-export-2.0" 2505elif test "$plugins" = "yes"; then 2506 glib_modules="$glib_modules gmodule-no-export-2.0" 2507fi 2508 2509for i in $glib_modules; do 2510 if $pkg_config --atleast-version=$glib_req_ver $i; then 2511 glib_cflags=$($pkg_config --cflags $i) 2512 glib_libs=$($pkg_config --libs $i) 2513 else 2514 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 2515 fi 2516done 2517 2518# This workaround is required due to a bug in pkg-config file for glib as it 2519# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 2520 2521if test "$static" = yes && test "$mingw32" = yes; then 2522 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags" 2523fi 2524 2525if ! test "$gio" = "no"; then 2526 pass=no 2527 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 2528 gio_cflags=$($pkg_config --cflags gio-2.0) 2529 gio_libs=$($pkg_config --libs gio-2.0) 2530 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 2531 if ! has "$gdbus_codegen"; then 2532 gdbus_codegen= 2533 fi 2534 # Check that the libraries actually work -- Ubuntu 18.04 ships 2535 # with pkg-config --static --libs data for gio-2.0 that is missing 2536 # -lblkid and will give a link error. 2537 cat > $TMPC <<EOF 2538#include <gio/gio.h> 2539int main(void) 2540{ 2541 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0); 2542 return 0; 2543} 2544EOF 2545 if compile_prog "$gio_cflags" "$gio_libs" ; then 2546 pass=yes 2547 else 2548 pass=no 2549 fi 2550 2551 if test "$pass" = "yes" && 2552 $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 2553 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 2554 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 2555 fi 2556 fi 2557 2558 if test "$pass" = "no"; then 2559 if test "$gio" = "yes"; then 2560 feature_not_found "gio" "Install libgio >= 2.0" 2561 else 2562 gio=no 2563 fi 2564 else 2565 gio=yes 2566 fi 2567fi 2568 2569# Sanity check that the current size_t matches the 2570# size that glib thinks it should be. This catches 2571# problems on multi-arch where people try to build 2572# 32-bit QEMU while pointing at 64-bit glib headers 2573cat > $TMPC <<EOF 2574#include <glib.h> 2575#include <unistd.h> 2576 2577#define QEMU_BUILD_BUG_ON(x) \ 2578 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 2579 2580int main(void) { 2581 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 2582 return 0; 2583} 2584EOF 2585 2586if ! compile_prog "$glib_cflags" "$glib_libs" ; then 2587 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 2588 "You probably need to set PKG_CONFIG_LIBDIR"\ 2589 "to point to the right pkg-config files for your"\ 2590 "build target" 2591fi 2592 2593# Silence clang warnings triggered by glib < 2.57.2 2594cat > $TMPC << EOF 2595#include <glib.h> 2596typedef struct Foo { 2597 int i; 2598} Foo; 2599static void foo_free(Foo *f) 2600{ 2601 g_free(f); 2602} 2603G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 2604int main(void) { return 0; } 2605EOF 2606if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 2607 if cc_has_warning_flag "-Wno-unused-function"; then 2608 glib_cflags="$glib_cflags -Wno-unused-function" 2609 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function" 2610 fi 2611fi 2612 2613########################################## 2614# SHA command probe for modules 2615if test "$modules" = yes; then 2616 shacmd_probe="sha1sum sha1 shasum" 2617 for c in $shacmd_probe; do 2618 if has $c; then 2619 shacmd="$c" 2620 break 2621 fi 2622 done 2623 if test "$shacmd" = ""; then 2624 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 2625 fi 2626fi 2627 2628########################################## 2629# libssh probe 2630if test "$libssh" != "no" ; then 2631 if $pkg_config --exists "libssh >= 0.8.7"; then 2632 libssh_cflags=$($pkg_config libssh --cflags) 2633 libssh_libs=$($pkg_config libssh --libs) 2634 libssh=yes 2635 else 2636 if test "$libssh" = "yes" ; then 2637 error_exit "libssh required for --enable-libssh" 2638 fi 2639 libssh=no 2640 fi 2641fi 2642 2643########################################## 2644# TPM emulation is only on POSIX 2645 2646if test "$tpm" = ""; then 2647 if test "$mingw32" = "yes"; then 2648 tpm=no 2649 else 2650 tpm=yes 2651 fi 2652elif test "$tpm" = "yes"; then 2653 if test "$mingw32" = "yes" ; then 2654 error_exit "TPM emulation only available on POSIX systems" 2655 fi 2656fi 2657 2658########################################## 2659# fdt probe 2660 2661case "$fdt" in 2662 auto | enabled | internal) 2663 # Simpler to always update submodule, even if not needed. 2664 git_submodules="${git_submodules} dtc" 2665 ;; 2666esac 2667 2668########################################## 2669# opengl probe (for sdl2, gtk) 2670 2671if test "$opengl" != "no" ; then 2672 epoxy=no 2673 if $pkg_config epoxy; then 2674 cat > $TMPC << EOF 2675#include <epoxy/egl.h> 2676int main(void) { return 0; } 2677EOF 2678 if compile_prog "" "" ; then 2679 epoxy=yes 2680 fi 2681 fi 2682 2683 if test "$epoxy" = "yes" ; then 2684 opengl_cflags="$($pkg_config --cflags epoxy)" 2685 opengl_libs="$($pkg_config --libs epoxy)" 2686 opengl=yes 2687 else 2688 if test "$opengl" = "yes" ; then 2689 feature_not_found "opengl" "Please install epoxy with EGL" 2690 fi 2691 opengl_cflags="" 2692 opengl_libs="" 2693 opengl=no 2694 fi 2695fi 2696 2697########################################## 2698# libnuma probe 2699 2700if test "$numa" != "no" ; then 2701 cat > $TMPC << EOF 2702#include <numa.h> 2703int main(void) { return numa_available(); } 2704EOF 2705 2706 if compile_prog "" "-lnuma" ; then 2707 numa=yes 2708 numa_libs="-lnuma" 2709 else 2710 if test "$numa" = "yes" ; then 2711 feature_not_found "numa" "install numactl devel" 2712 fi 2713 numa=no 2714 fi 2715fi 2716 2717# check for usbfs 2718have_usbfs=no 2719if test "$linux_user" = "yes"; then 2720 cat > $TMPC << EOF 2721#include <linux/usbdevice_fs.h> 2722 2723#ifndef USBDEVFS_GET_CAPABILITIES 2724#error "USBDEVFS_GET_CAPABILITIES undefined" 2725#endif 2726 2727#ifndef USBDEVFS_DISCONNECT_CLAIM 2728#error "USBDEVFS_DISCONNECT_CLAIM undefined" 2729#endif 2730 2731int main(void) 2732{ 2733 return 0; 2734} 2735EOF 2736 if compile_prog "" ""; then 2737 have_usbfs=yes 2738 fi 2739fi 2740 2741########################################## 2742# check if we have VSS SDK headers for win 2743 2744if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 2745 test "$vss_win32_sdk" != "no" ; then 2746 case "$vss_win32_sdk" in 2747 "") vss_win32_include="-isystem $source_path" ;; 2748 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 2749 # handle path with spaces. So we symlink the headers into ".sdk/vss". 2750 vss_win32_include="-isystem $source_path/.sdk/vss" 2751 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 2752 ;; 2753 *) vss_win32_include="-isystem $vss_win32_sdk" 2754 esac 2755 cat > $TMPC << EOF 2756#define __MIDL_user_allocate_free_DEFINED__ 2757#include <inc/win2003/vss.h> 2758int main(void) { return VSS_CTX_BACKUP; } 2759EOF 2760 if compile_prog "$vss_win32_include" "" ; then 2761 guest_agent_with_vss="yes" 2762 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 2763 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 2764 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 2765 else 2766 if test "$vss_win32_sdk" != "" ; then 2767 echo "ERROR: Please download and install Microsoft VSS SDK:" 2768 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 2769 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 2770 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 2771 echo "ERROR: The headers are extracted in the directory \`inc'." 2772 feature_not_found "VSS support" 2773 fi 2774 guest_agent_with_vss="no" 2775 fi 2776fi 2777 2778########################################## 2779# lookup Windows platform SDK (if not specified) 2780# The SDK is needed only to build .tlb (type library) file of guest agent 2781# VSS provider from the source. It is usually unnecessary because the 2782# pre-compiled .tlb file is included. 2783 2784if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 2785 test "$guest_agent_with_vss" = "yes" ; then 2786 if test -z "$win_sdk"; then 2787 programfiles="$PROGRAMFILES" 2788 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 2789 if test -n "$programfiles"; then 2790 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 2791 else 2792 feature_not_found "Windows SDK" 2793 fi 2794 elif test "$win_sdk" = "no"; then 2795 win_sdk="" 2796 fi 2797fi 2798 2799########################################## 2800# check if mingw environment provides a recent ntddscsi.h 2801if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 2802 cat > $TMPC << EOF 2803#include <windows.h> 2804#include <ntddscsi.h> 2805int main(void) { 2806#if !defined(IOCTL_SCSI_GET_ADDRESS) 2807#error Missing required ioctl definitions 2808#endif 2809 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 2810 return addr.Lun; 2811} 2812EOF 2813 if compile_prog "" "" ; then 2814 guest_agent_ntddscsi=yes 2815 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 2816 fi 2817fi 2818 2819########################################## 2820# capstone 2821 2822case "$capstone" in 2823 auto | enabled | internal) 2824 # Simpler to always update submodule, even if not needed. 2825 git_submodules="${git_submodules} capstone" 2826 ;; 2827esac 2828 2829########################################## 2830# check and set a backend for coroutine 2831 2832# We prefer ucontext, but it's not always possible. The fallback 2833# is sigcontext. On Windows the only valid backend is the Windows 2834# specific one. 2835 2836ucontext_works=no 2837if test "$darwin" != "yes"; then 2838 cat > $TMPC << EOF 2839#include <ucontext.h> 2840#ifdef __stub_makecontext 2841#error Ignoring glibc stub makecontext which will always fail 2842#endif 2843int main(void) { makecontext(0, 0, 0); return 0; } 2844EOF 2845 if compile_prog "" "" ; then 2846 ucontext_works=yes 2847 fi 2848fi 2849 2850if test "$coroutine" = ""; then 2851 if test "$mingw32" = "yes"; then 2852 coroutine=win32 2853 elif test "$ucontext_works" = "yes"; then 2854 coroutine=ucontext 2855 else 2856 coroutine=sigaltstack 2857 fi 2858else 2859 case $coroutine in 2860 windows) 2861 if test "$mingw32" != "yes"; then 2862 error_exit "'windows' coroutine backend only valid for Windows" 2863 fi 2864 # Unfortunately the user visible backend name doesn't match the 2865 # coroutine-*.c filename for this case, so we have to adjust it here. 2866 coroutine=win32 2867 ;; 2868 ucontext) 2869 if test "$ucontext_works" != "yes"; then 2870 feature_not_found "ucontext" 2871 fi 2872 ;; 2873 sigaltstack) 2874 if test "$mingw32" = "yes"; then 2875 error_exit "only the 'windows' coroutine backend is valid for Windows" 2876 fi 2877 ;; 2878 *) 2879 error_exit "unknown coroutine backend $coroutine" 2880 ;; 2881 esac 2882fi 2883 2884if test "$coroutine_pool" = ""; then 2885 coroutine_pool=yes 2886fi 2887 2888if test "$debug_stack_usage" = "yes"; then 2889 if test "$coroutine_pool" = "yes"; then 2890 echo "WARN: disabling coroutine pool for stack usage debugging" 2891 coroutine_pool=no 2892 fi 2893fi 2894 2895################################################## 2896# SafeStack 2897 2898 2899if test "$safe_stack" = "yes"; then 2900cat > $TMPC << EOF 2901int main(int argc, char *argv[]) 2902{ 2903#if ! __has_feature(safe_stack) 2904#error SafeStack Disabled 2905#endif 2906 return 0; 2907} 2908EOF 2909 flag="-fsanitize=safe-stack" 2910 # Check that safe-stack is supported and enabled. 2911 if compile_prog "-Werror $flag" "$flag"; then 2912 # Flag needed both at compilation and at linking 2913 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2914 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 2915 else 2916 error_exit "SafeStack not supported by your compiler" 2917 fi 2918 if test "$coroutine" != "ucontext"; then 2919 error_exit "SafeStack is only supported by the coroutine backend ucontext" 2920 fi 2921else 2922cat > $TMPC << EOF 2923int main(int argc, char *argv[]) 2924{ 2925#if defined(__has_feature) 2926#if __has_feature(safe_stack) 2927#error SafeStack Enabled 2928#endif 2929#endif 2930 return 0; 2931} 2932EOF 2933if test "$safe_stack" = "no"; then 2934 # Make sure that safe-stack is disabled 2935 if ! compile_prog "-Werror" ""; then 2936 # SafeStack was already enabled, try to explicitly remove the feature 2937 flag="-fno-sanitize=safe-stack" 2938 if ! compile_prog "-Werror $flag" "$flag"; then 2939 error_exit "Configure cannot disable SafeStack" 2940 fi 2941 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2942 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 2943 fi 2944else # "$safe_stack" = "" 2945 # Set safe_stack to yes or no based on pre-existing flags 2946 if compile_prog "-Werror" ""; then 2947 safe_stack="no" 2948 else 2949 safe_stack="yes" 2950 if test "$coroutine" != "ucontext"; then 2951 error_exit "SafeStack is only supported by the coroutine backend ucontext" 2952 fi 2953 fi 2954fi 2955fi 2956 2957######################################## 2958# check if cpuid.h is usable. 2959 2960cat > $TMPC << EOF 2961#include <cpuid.h> 2962int main(void) { 2963 unsigned a, b, c, d; 2964 int max = __get_cpuid_max(0, 0); 2965 2966 if (max >= 1) { 2967 __cpuid(1, a, b, c, d); 2968 } 2969 2970 if (max >= 7) { 2971 __cpuid_count(7, 0, a, b, c, d); 2972 } 2973 2974 return 0; 2975} 2976EOF 2977if compile_prog "" "" ; then 2978 cpuid_h=yes 2979fi 2980 2981########################################## 2982# avx2 optimization requirement check 2983# 2984# There is no point enabling this if cpuid.h is not usable, 2985# since we won't be able to select the new routines. 2986 2987if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 2988 cat > $TMPC << EOF 2989#pragma GCC push_options 2990#pragma GCC target("avx2") 2991#include <cpuid.h> 2992#include <immintrin.h> 2993static int bar(void *a) { 2994 __m256i x = *(__m256i *)a; 2995 return _mm256_testz_si256(x, x); 2996} 2997int main(int argc, char *argv[]) { return bar(argv[0]); } 2998EOF 2999 if compile_object "-Werror" ; then 3000 avx2_opt="yes" 3001 else 3002 avx2_opt="no" 3003 fi 3004fi 3005 3006########################################## 3007# avx512f optimization requirement check 3008# 3009# There is no point enabling this if cpuid.h is not usable, 3010# since we won't be able to select the new routines. 3011# by default, it is turned off. 3012# if user explicitly want to enable it, check environment 3013 3014if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 3015 cat > $TMPC << EOF 3016#pragma GCC push_options 3017#pragma GCC target("avx512f") 3018#include <cpuid.h> 3019#include <immintrin.h> 3020static int bar(void *a) { 3021 __m512i x = *(__m512i *)a; 3022 return _mm512_test_epi64_mask(x, x); 3023} 3024int main(int argc, char *argv[]) 3025{ 3026 return bar(argv[0]); 3027} 3028EOF 3029 if ! compile_object "-Werror" ; then 3030 avx512f_opt="no" 3031 fi 3032else 3033 avx512f_opt="no" 3034fi 3035 3036######################################## 3037# check if __[u]int128_t is usable. 3038 3039int128=no 3040cat > $TMPC << EOF 3041__int128_t a; 3042__uint128_t b; 3043int main (void) { 3044 a = a + b; 3045 b = a * b; 3046 a = a * a; 3047 return 0; 3048} 3049EOF 3050if compile_prog "" "" ; then 3051 int128=yes 3052fi 3053 3054######################################### 3055# See if 128-bit atomic operations are supported. 3056 3057atomic128=no 3058if test "$int128" = "yes"; then 3059 cat > $TMPC << EOF 3060int main(void) 3061{ 3062 unsigned __int128 x = 0, y = 0; 3063 y = __atomic_load(&x, 0); 3064 __atomic_store(&x, y, 0); 3065 __atomic_compare_exchange(&x, &y, x, 0, 0, 0); 3066 return 0; 3067} 3068EOF 3069 if compile_prog "" "" ; then 3070 atomic128=yes 3071 fi 3072fi 3073 3074cmpxchg128=no 3075if test "$int128" = yes && test "$atomic128" = no; then 3076 cat > $TMPC << EOF 3077int main(void) 3078{ 3079 unsigned __int128 x = 0, y = 0; 3080 __sync_val_compare_and_swap_16(&x, y, x); 3081 return 0; 3082} 3083EOF 3084 if compile_prog "" "" ; then 3085 cmpxchg128=yes 3086 fi 3087fi 3088 3089######################################## 3090# check if ccache is interfering with 3091# semantic analysis of macros 3092 3093unset CCACHE_CPP2 3094ccache_cpp2=no 3095cat > $TMPC << EOF 3096static const int Z = 1; 3097#define fn() ({ Z; }) 3098#define TAUT(X) ((X) == Z) 3099#define PAREN(X, Y) (X == Y) 3100#define ID(X) (X) 3101int main(int argc, char *argv[]) 3102{ 3103 int x = 0, y = 0; 3104 x = ID(x); 3105 x = fn(); 3106 fn(); 3107 if (PAREN(x, y)) return 0; 3108 if (TAUT(Z)) return 0; 3109 return 0; 3110} 3111EOF 3112 3113if ! compile_object "-Werror"; then 3114 ccache_cpp2=yes 3115fi 3116 3117################################################# 3118# clang does not support glibc + FORTIFY_SOURCE. 3119 3120if test "$fortify_source" != "no"; then 3121 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 3122 fortify_source="no"; 3123 elif test -n "$cxx" && has $cxx && 3124 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 3125 fortify_source="no"; 3126 else 3127 fortify_source="yes" 3128 fi 3129fi 3130 3131########################################## 3132# check for usable membarrier system call 3133if test "$membarrier" = "yes"; then 3134 have_membarrier=no 3135 if test "$mingw32" = "yes" ; then 3136 have_membarrier=yes 3137 elif test "$linux" = "yes" ; then 3138 cat > $TMPC << EOF 3139 #include <linux/membarrier.h> 3140 #include <sys/syscall.h> 3141 #include <unistd.h> 3142 #include <stdlib.h> 3143 int main(void) { 3144 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 3145 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 3146 exit(0); 3147 } 3148EOF 3149 if compile_prog "" "" ; then 3150 have_membarrier=yes 3151 fi 3152 fi 3153 if test "$have_membarrier" = "no"; then 3154 feature_not_found "membarrier" "membarrier system call not available" 3155 fi 3156else 3157 # Do not enable it by default even for Mingw32, because it doesn't 3158 # work on Wine. 3159 membarrier=no 3160fi 3161 3162########################################## 3163# check for usable AF_ALG environment 3164have_afalg=no 3165cat > $TMPC << EOF 3166#include <errno.h> 3167#include <sys/types.h> 3168#include <sys/socket.h> 3169#include <linux/if_alg.h> 3170int main(void) { 3171 int sock; 3172 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 3173 return sock; 3174} 3175EOF 3176if compile_prog "" "" ; then 3177 have_afalg=yes 3178fi 3179if test "$crypto_afalg" = "yes" 3180then 3181 if test "$have_afalg" != "yes" 3182 then 3183 error_exit "AF_ALG requested but could not be detected" 3184 fi 3185fi 3186 3187 3188########################################## 3189# checks for sanitizers 3190 3191have_asan=no 3192have_ubsan=no 3193have_asan_iface_h=no 3194have_asan_iface_fiber=no 3195 3196if test "$sanitizers" = "yes" ; then 3197 write_c_skeleton 3198 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 3199 have_asan=yes 3200 fi 3201 3202 # we could use a simple skeleton for flags checks, but this also 3203 # detect the static linking issue of ubsan, see also: 3204 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 3205 cat > $TMPC << EOF 3206#include <stdlib.h> 3207int main(void) { 3208 void *tmp = malloc(10); 3209 if (tmp != NULL) { 3210 return *(int *)(tmp + 2); 3211 } 3212 return 1; 3213} 3214EOF 3215 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 3216 have_ubsan=yes 3217 fi 3218 3219 if check_include "sanitizer/asan_interface.h" ; then 3220 have_asan_iface_h=yes 3221 fi 3222 3223 cat > $TMPC << EOF 3224#include <sanitizer/asan_interface.h> 3225int main(void) { 3226 __sanitizer_start_switch_fiber(0, 0, 0); 3227 return 0; 3228} 3229EOF 3230 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 3231 have_asan_iface_fiber=yes 3232 fi 3233fi 3234 3235# Thread sanitizer is, for now, much noisier than the other sanitizers; 3236# keep it separate until that is not the case. 3237if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 3238 error_exit "TSAN is not supported with other sanitiziers." 3239fi 3240have_tsan=no 3241have_tsan_iface_fiber=no 3242if test "$tsan" = "yes" ; then 3243 write_c_skeleton 3244 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 3245 have_tsan=yes 3246 fi 3247 cat > $TMPC << EOF 3248#include <sanitizer/tsan_interface.h> 3249int main(void) { 3250 __tsan_create_fiber(0); 3251 return 0; 3252} 3253EOF 3254 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 3255 have_tsan_iface_fiber=yes 3256 fi 3257fi 3258 3259########################################## 3260# check for slirp 3261 3262case "$slirp" in 3263 auto | enabled | internal) 3264 # Simpler to always update submodule, even if not needed. 3265 git_submodules="${git_submodules} slirp" 3266 ;; 3267esac 3268 3269# Check for slirp smbd dupport 3270: ${smbd=${SMBD-/usr/sbin/smbd}} 3271if test "$slirp_smbd" != "no" ; then 3272 if test "$mingw32" = "yes" ; then 3273 if test "$slirp_smbd" = "yes" ; then 3274 error_exit "Host smbd not supported on this platform." 3275 fi 3276 slirp_smbd=no 3277 else 3278 slirp_smbd=yes 3279 fi 3280fi 3281 3282########################################## 3283# check for usable __NR_keyctl syscall 3284 3285if test "$linux" = "yes" ; then 3286 3287 have_keyring=no 3288 cat > $TMPC << EOF 3289#include <errno.h> 3290#include <asm/unistd.h> 3291#include <linux/keyctl.h> 3292#include <unistd.h> 3293int main(void) { 3294 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 3295} 3296EOF 3297 if compile_prog "" "" ; then 3298 have_keyring=yes 3299 fi 3300fi 3301if test "$secret_keyring" != "no" 3302then 3303 if test "$have_keyring" = "yes" 3304 then 3305 secret_keyring=yes 3306 else 3307 if test "$secret_keyring" = "yes" 3308 then 3309 error_exit "syscall __NR_keyctl requested, \ 3310but not implemented on your system" 3311 else 3312 secret_keyring=no 3313 fi 3314 fi 3315fi 3316 3317########################################## 3318# End of CC checks 3319# After here, no more $cc or $ld runs 3320 3321write_c_skeleton 3322 3323if test "$gcov" = "yes" ; then 3324 : 3325elif test "$fortify_source" = "yes" ; then 3326 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 3327 debug=no 3328fi 3329 3330case "$ARCH" in 3331alpha) 3332 # Ensure there's only a single GP 3333 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 3334;; 3335esac 3336 3337if test "$gprof" = "yes" ; then 3338 QEMU_CFLAGS="-p $QEMU_CFLAGS" 3339 QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 3340fi 3341 3342if test "$have_asan" = "yes"; then 3343 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 3344 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 3345 if test "$have_asan_iface_h" = "no" ; then 3346 echo "ASAN build enabled, but ASAN header missing." \ 3347 "Without code annotation, the report may be inferior." 3348 elif test "$have_asan_iface_fiber" = "no" ; then 3349 echo "ASAN build enabled, but ASAN header is too old." \ 3350 "Without code annotation, the report may be inferior." 3351 fi 3352fi 3353if test "$have_tsan" = "yes" ; then 3354 if test "$have_tsan_iface_fiber" = "yes" ; then 3355 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 3356 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 3357 else 3358 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 3359 fi 3360elif test "$tsan" = "yes" ; then 3361 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 3362fi 3363if test "$have_ubsan" = "yes"; then 3364 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 3365 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 3366fi 3367 3368########################################## 3369 3370# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 3371if test "$solaris" = "no" && test "$tsan" = "no"; then 3372 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 3373 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 3374 fi 3375fi 3376 3377# Use ASLR, no-SEH and DEP if available 3378if test "$mingw32" = "yes" ; then 3379 flags="--no-seh --nxcompat" 3380 3381 # Disable ASLR for debug builds to allow debugging with gdb 3382 if test "$debug" = "no" ; then 3383 flags="--dynamicbase $flags" 3384 fi 3385 3386 for flag in $flags; do 3387 if ld_has $flag ; then 3388 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 3389 fi 3390 done 3391fi 3392 3393# Probe for guest agent support/options 3394 3395if [ "$guest_agent" != "no" ]; then 3396 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 3397 guest_agent=no 3398 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 3399 guest_agent=yes 3400 elif [ "$guest_agent" != yes ]; then 3401 guest_agent=no 3402 else 3403 error_exit "Guest agent is not supported on this platform" 3404 fi 3405fi 3406 3407# Guest agent Windows MSI package 3408 3409if test "$QEMU_GA_MANUFACTURER" = ""; then 3410 QEMU_GA_MANUFACTURER=QEMU 3411fi 3412if test "$QEMU_GA_DISTRO" = ""; then 3413 QEMU_GA_DISTRO=Linux 3414fi 3415if test "$QEMU_GA_VERSION" = ""; then 3416 QEMU_GA_VERSION=$(cat $source_path/VERSION) 3417fi 3418 3419QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin" 3420 3421# Mac OS X ships with a broken assembler 3422roms= 3423if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 3424 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 3425 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then 3426 # Different host OS linkers have different ideas about the name of the ELF 3427 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 3428 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 3429 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 3430 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 3431 ld_i386_emulation="$emu" 3432 roms="optionrom" 3433 break 3434 fi 3435 done 3436fi 3437 3438# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 3439# or -march=z10 (which is the lowest architecture level that Clang supports) 3440if test "$cpu" = "s390x" ; then 3441 write_c_skeleton 3442 compile_prog "-march=z900" "" 3443 has_z900=$? 3444 if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then 3445 if [ $has_z900 != 0 ]; then 3446 echo "WARNING: Your compiler does not support the z900!" 3447 echo " The s390-ccw bios will only work with guest CPUs >= z10." 3448 fi 3449 roms="$roms s390-ccw" 3450 # SLOF is required for building the s390-ccw firmware on s390x, 3451 # since it is using the libnet code from SLOF for network booting. 3452 git_submodules="${git_submodules} roms/SLOF" 3453 fi 3454fi 3455 3456# Check that the C++ compiler exists and works with the C compiler. 3457# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 3458if has $cxx; then 3459 cat > $TMPC <<EOF 3460int c_function(void); 3461int main(void) { return c_function(); } 3462EOF 3463 3464 compile_object 3465 3466 cat > $TMPCXX <<EOF 3467extern "C" { 3468 int c_function(void); 3469} 3470int c_function(void) { return 42; } 3471EOF 3472 3473 update_cxxflags 3474 3475 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 3476 # C++ compiler $cxx works ok with C compiler $cc 3477 : 3478 else 3479 echo "C++ compiler $cxx does not work with C compiler $cc" 3480 echo "Disabling C++ specific optional code" 3481 cxx= 3482 fi 3483else 3484 echo "No C++ compiler available; disabling C++ specific optional code" 3485 cxx= 3486fi 3487 3488if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then 3489 exit 1 3490fi 3491 3492config_host_mak="config-host.mak" 3493 3494echo "# Automatically generated by configure - do not modify" > $config_host_mak 3495echo >> $config_host_mak 3496 3497echo all: >> $config_host_mak 3498echo "GIT=$git" >> $config_host_mak 3499echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 3500echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak 3501 3502echo "ARCH=$ARCH" >> $config_host_mak 3503 3504if test "$debug_tcg" = "yes" ; then 3505 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 3506fi 3507if test "$strip_opt" = "yes" ; then 3508 echo "STRIP=${strip}" >> $config_host_mak 3509fi 3510if test "$mingw32" = "yes" ; then 3511 echo "CONFIG_WIN32=y" >> $config_host_mak 3512 if test "$guest_agent_with_vss" = "yes" ; then 3513 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 3514 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 3515 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 3516 fi 3517 if test "$guest_agent_ntddscsi" = "yes" ; then 3518 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 3519 fi 3520 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 3521 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 3522 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 3523 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 3524else 3525 echo "CONFIG_POSIX=y" >> $config_host_mak 3526fi 3527 3528if test "$linux" = "yes" ; then 3529 echo "CONFIG_LINUX=y" >> $config_host_mak 3530fi 3531 3532if test "$darwin" = "yes" ; then 3533 echo "CONFIG_DARWIN=y" >> $config_host_mak 3534fi 3535 3536if test "$solaris" = "yes" ; then 3537 echo "CONFIG_SOLARIS=y" >> $config_host_mak 3538fi 3539if test "$haiku" = "yes" ; then 3540 echo "CONFIG_HAIKU=y" >> $config_host_mak 3541fi 3542if test "$static" = "yes" ; then 3543 echo "CONFIG_STATIC=y" >> $config_host_mak 3544fi 3545if test "$profiler" = "yes" ; then 3546 echo "CONFIG_PROFILER=y" >> $config_host_mak 3547fi 3548if test "$want_tools" = "yes" ; then 3549 echo "CONFIG_TOOLS=y" >> $config_host_mak 3550fi 3551if test "$guest_agent" = "yes" ; then 3552 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 3553fi 3554if test "$slirp_smbd" = "yes" ; then 3555 echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak 3556 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 3557fi 3558if test "$l2tpv3" = "yes" ; then 3559 echo "CONFIG_L2TPV3=y" >> $config_host_mak 3560fi 3561if test "$gprof" = "yes" ; then 3562 echo "CONFIG_GPROF=y" >> $config_host_mak 3563fi 3564echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 3565echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 3566if test "$block_drv_whitelist_tools" = "yes" ; then 3567 echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak 3568fi 3569if test "$xfs" = "yes" ; then 3570 echo "CONFIG_XFS=y" >> $config_host_mak 3571fi 3572qemu_version=$(head $source_path/VERSION) 3573echo "PKGVERSION=$pkgversion" >>$config_host_mak 3574echo "SRC_PATH=$source_path" >> $config_host_mak 3575echo "TARGET_DIRS=$target_list" >> $config_host_mak 3576if test "$modules" = "yes"; then 3577 # $shacmd can generate a hash started with digit, which the compiler doesn't 3578 # like as an symbol. So prefix it with an underscore 3579 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 3580 echo "CONFIG_MODULES=y" >> $config_host_mak 3581fi 3582if test "$module_upgrades" = "yes"; then 3583 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 3584fi 3585if test "$have_usbfs" = "yes" ; then 3586 echo "CONFIG_USBFS=y" >> $config_host_mak 3587fi 3588if test "$gio" = "yes" ; then 3589 echo "CONFIG_GIO=y" >> $config_host_mak 3590 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 3591 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 3592fi 3593if test "$gdbus_codegen" != "" ; then 3594 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 3595fi 3596echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 3597 3598if test "$xen" = "enabled" ; then 3599 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 3600 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 3601 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 3602 echo "XEN_LIBS=$xen_libs" >> $config_host_mak 3603fi 3604if test "$vhost_scsi" = "yes" ; then 3605 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 3606fi 3607if test "$vhost_net" = "yes" ; then 3608 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 3609fi 3610if test "$vhost_net_user" = "yes" ; then 3611 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 3612fi 3613if test "$vhost_net_vdpa" = "yes" ; then 3614 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 3615fi 3616if test "$vhost_crypto" = "yes" ; then 3617 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 3618fi 3619if test "$vhost_vsock" = "yes" ; then 3620 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 3621 if test "$vhost_user" = "yes" ; then 3622 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 3623 fi 3624fi 3625if test "$vhost_kernel" = "yes" ; then 3626 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 3627fi 3628if test "$vhost_user" = "yes" ; then 3629 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 3630fi 3631if test "$vhost_vdpa" = "yes" ; then 3632 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 3633fi 3634if test "$vhost_user_fs" = "yes" ; then 3635 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 3636fi 3637if test "$membarrier" = "yes" ; then 3638 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 3639fi 3640if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then 3641 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 3642fi 3643 3644if test "$opengl" = "yes" ; then 3645 echo "CONFIG_OPENGL=y" >> $config_host_mak 3646 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 3647 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 3648fi 3649 3650if test "$avx2_opt" = "yes" ; then 3651 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 3652fi 3653 3654if test "$avx512f_opt" = "yes" ; then 3655 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 3656fi 3657 3658# XXX: suppress that 3659if [ "$bsd" = "yes" ] ; then 3660 echo "CONFIG_BSD=y" >> $config_host_mak 3661fi 3662 3663if test "$qom_cast_debug" = "yes" ; then 3664 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 3665fi 3666 3667echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 3668if test "$coroutine_pool" = "yes" ; then 3669 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 3670else 3671 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 3672fi 3673 3674if test "$debug_stack_usage" = "yes" ; then 3675 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 3676fi 3677 3678if test "$crypto_afalg" = "yes" ; then 3679 echo "CONFIG_AF_ALG=y" >> $config_host_mak 3680fi 3681 3682if test "$have_asan_iface_fiber" = "yes" ; then 3683 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 3684fi 3685 3686if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 3687 echo "CONFIG_TSAN=y" >> $config_host_mak 3688fi 3689 3690if test "$cpuid_h" = "yes" ; then 3691 echo "CONFIG_CPUID_H=y" >> $config_host_mak 3692fi 3693 3694if test "$int128" = "yes" ; then 3695 echo "CONFIG_INT128=y" >> $config_host_mak 3696fi 3697 3698if test "$atomic128" = "yes" ; then 3699 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 3700fi 3701 3702if test "$cmpxchg128" = "yes" ; then 3703 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 3704fi 3705 3706if test "$libssh" = "yes" ; then 3707 echo "CONFIG_LIBSSH=y" >> $config_host_mak 3708 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 3709 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 3710fi 3711 3712if test "$live_block_migration" = "yes" ; then 3713 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 3714fi 3715 3716if test "$tpm" = "yes"; then 3717 echo 'CONFIG_TPM=y' >> $config_host_mak 3718fi 3719 3720if test "$rdma" = "yes" ; then 3721 echo "CONFIG_RDMA=y" >> $config_host_mak 3722 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 3723fi 3724 3725if test "$pvrdma" = "yes" ; then 3726 echo "CONFIG_PVRDMA=y" >> $config_host_mak 3727fi 3728 3729if test "$replication" = "yes" ; then 3730 echo "CONFIG_REPLICATION=y" >> $config_host_mak 3731fi 3732 3733if test "$debug_mutex" = "yes" ; then 3734 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 3735fi 3736 3737if test "$bochs" = "yes" ; then 3738 echo "CONFIG_BOCHS=y" >> $config_host_mak 3739fi 3740if test "$cloop" = "yes" ; then 3741 echo "CONFIG_CLOOP=y" >> $config_host_mak 3742fi 3743if test "$dmg" = "yes" ; then 3744 echo "CONFIG_DMG=y" >> $config_host_mak 3745fi 3746if test "$qcow1" = "yes" ; then 3747 echo "CONFIG_QCOW1=y" >> $config_host_mak 3748fi 3749if test "$vdi" = "yes" ; then 3750 echo "CONFIG_VDI=y" >> $config_host_mak 3751fi 3752if test "$vvfat" = "yes" ; then 3753 echo "CONFIG_VVFAT=y" >> $config_host_mak 3754fi 3755if test "$qed" = "yes" ; then 3756 echo "CONFIG_QED=y" >> $config_host_mak 3757fi 3758if test "$parallels" = "yes" ; then 3759 echo "CONFIG_PARALLELS=y" >> $config_host_mak 3760fi 3761 3762if test "$plugins" = "yes" ; then 3763 echo "CONFIG_PLUGIN=y" >> $config_host_mak 3764 # Copy the export object list to the build dir 3765 if test "$ld_dynamic_list" = "yes" ; then 3766 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 3767 ld_symbols=qemu-plugins-ld.symbols 3768 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 3769 elif test "$ld_exported_symbols_list" = "yes" ; then 3770 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 3771 ld64_symbols=qemu-plugins-ld64.symbols 3772 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 3773 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 3774 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 3775 else 3776 error_exit \ 3777 "If \$plugins=yes, either \$ld_dynamic_list or " \ 3778 "\$ld_exported_symbols_list should have been set to 'yes'." 3779 fi 3780fi 3781 3782if test -n "$gdb_bin"; then 3783 gdb_version=$($gdb_bin --version | head -n 1) 3784 if version_ge ${gdb_version##* } 9.1; then 3785 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 3786 fi 3787fi 3788 3789if test "$secret_keyring" = "yes" ; then 3790 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 3791fi 3792 3793echo "ROMS=$roms" >> $config_host_mak 3794echo "MAKE=$make" >> $config_host_mak 3795echo "PYTHON=$python" >> $config_host_mak 3796echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 3797echo "MESON=$meson" >> $config_host_mak 3798echo "NINJA=$ninja" >> $config_host_mak 3799echo "CC=$cc" >> $config_host_mak 3800echo "HOST_CC=$host_cc" >> $config_host_mak 3801if $iasl -h > /dev/null 2>&1; then 3802 echo "CONFIG_IASL=$iasl" >> $config_host_mak 3803fi 3804echo "AR=$ar" >> $config_host_mak 3805echo "AS=$as" >> $config_host_mak 3806echo "CCAS=$ccas" >> $config_host_mak 3807echo "CPP=$cpp" >> $config_host_mak 3808echo "OBJCOPY=$objcopy" >> $config_host_mak 3809echo "LD=$ld" >> $config_host_mak 3810echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 3811echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 3812echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 3813echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 3814echo "GLIB_LIBS=$glib_libs" >> $config_host_mak 3815echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 3816echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 3817echo "EXESUF=$EXESUF" >> $config_host_mak 3818echo "LIBS_QGA=$libs_qga" >> $config_host_mak 3819 3820if test "$rng_none" = "yes"; then 3821 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 3822fi 3823 3824# use included Linux headers 3825if test "$linux" = "yes" ; then 3826 mkdir -p linux-headers 3827 case "$cpu" in 3828 i386|x86_64|x32) 3829 linux_arch=x86 3830 ;; 3831 ppc|ppc64|ppc64le) 3832 linux_arch=powerpc 3833 ;; 3834 s390x) 3835 linux_arch=s390 3836 ;; 3837 aarch64) 3838 linux_arch=arm64 3839 ;; 3840 mips64) 3841 linux_arch=mips 3842 ;; 3843 *) 3844 # For most CPUs the kernel architecture name and QEMU CPU name match. 3845 linux_arch="$cpu" 3846 ;; 3847 esac 3848 # For non-KVM architectures we will not have asm headers 3849 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 3850 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 3851 fi 3852fi 3853 3854for target in $target_list; do 3855 target_dir="$target" 3856 target_name=$(echo $target | cut -d '-' -f 1) 3857 mkdir -p $target_dir 3858 case $target in 3859 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;; 3860 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;; 3861 esac 3862done 3863 3864echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak 3865if test "$default_targets" = "yes"; then 3866 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak 3867fi 3868 3869if test "$numa" = "yes"; then 3870 echo "CONFIG_NUMA=y" >> $config_host_mak 3871 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 3872fi 3873 3874if test "$ccache_cpp2" = "yes"; then 3875 echo "export CCACHE_CPP2=y" >> $config_host_mak 3876fi 3877 3878if test "$safe_stack" = "yes"; then 3879 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 3880fi 3881 3882# If we're using a separate build tree, set it up now. 3883# DIRS are directories which we simply mkdir in the build tree; 3884# LINKS are things to symlink back into the source tree 3885# (these can be both files and directories). 3886# Caution: do not add files or directories here using wildcards. This 3887# will result in problems later if a new file matching the wildcard is 3888# added to the source tree -- nothing will cause configure to be rerun 3889# so the build tree will be missing the link back to the new file, and 3890# tests might fail. Prefer to keep the relevant files in their own 3891# directory and symlink the directory instead. 3892# UNLINK is used to remove symlinks from older development versions 3893# that might get into the way when doing "git update" without doing 3894# a "make distclean" in between. 3895DIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos" 3896DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 3897DIRS="$DIRS docs docs/interop fsdev scsi" 3898DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 3899DIRS="$DIRS roms/seabios" 3900DIRS="$DIRS contrib/plugins/" 3901LINKS="Makefile" 3902LINKS="$LINKS tests/tcg/Makefile.target" 3903LINKS="$LINKS pc-bios/optionrom/Makefile" 3904LINKS="$LINKS pc-bios/s390-ccw/Makefile" 3905LINKS="$LINKS roms/seabios/Makefile" 3906LINKS="$LINKS pc-bios/qemu-icon.bmp" 3907LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 3908LINKS="$LINKS tests/acceptance tests/data" 3909LINKS="$LINKS tests/qemu-iotests/check" 3910LINKS="$LINKS python" 3911LINKS="$LINKS contrib/plugins/Makefile " 3912UNLINK="pc-bios/keymaps" 3913for bios_file in \ 3914 $source_path/pc-bios/*.bin \ 3915 $source_path/pc-bios/*.elf \ 3916 $source_path/pc-bios/*.lid \ 3917 $source_path/pc-bios/*.rom \ 3918 $source_path/pc-bios/*.dtb \ 3919 $source_path/pc-bios/*.img \ 3920 $source_path/pc-bios/openbios-* \ 3921 $source_path/pc-bios/u-boot.* \ 3922 $source_path/pc-bios/edk2-*.fd.bz2 \ 3923 $source_path/pc-bios/palcode-* \ 3924 $source_path/pc-bios/qemu_vga.ndrv 3925 3926do 3927 LINKS="$LINKS pc-bios/$(basename $bios_file)" 3928done 3929mkdir -p $DIRS 3930for f in $LINKS ; do 3931 if [ -e "$source_path/$f" ]; then 3932 symlink "$source_path/$f" "$f" 3933 fi 3934done 3935for f in $UNLINK ; do 3936 if [ -L "$f" ]; then 3937 rm -f "$f" 3938 fi 3939done 3940 3941(for i in $cross_cc_vars; do 3942 export $i 3943done 3944export target_list source_path use_containers ARCH 3945$source_path/tests/tcg/configure.sh) 3946 3947# temporary config to build submodules 3948for rom in seabios; do 3949 config_mak=roms/$rom/config.mak 3950 echo "# Automatically generated by configure - do not modify" > $config_mak 3951 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 3952 echo "AS=$as" >> $config_mak 3953 echo "CCAS=$ccas" >> $config_mak 3954 echo "CC=$cc" >> $config_mak 3955 echo "BCC=bcc" >> $config_mak 3956 echo "CPP=$cpp" >> $config_mak 3957 echo "OBJCOPY=objcopy" >> $config_mak 3958 echo "IASL=$iasl" >> $config_mak 3959 echo "LD=$ld" >> $config_mak 3960 echo "RANLIB=$ranlib" >> $config_mak 3961done 3962 3963if test "$skip_meson" = no; then 3964 cross="config-meson.cross.new" 3965 meson_quote() { 3966 echo "'$(echo $* | sed "s/ /','/g")'" 3967 } 3968 3969 echo "# Automatically generated by configure - do not modify" > $cross 3970 echo "[properties]" >> $cross 3971 3972 # unroll any custom device configs 3973 for a in $device_archs; do 3974 eval "c=\$devices_${a}" 3975 echo "${a}-softmmu = '$c'" >> $cross 3976 done 3977 3978 test -z "$cxx" && echo "link_language = 'c'" >> $cross 3979 echo "[built-in options]" >> $cross 3980 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross 3981 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross 3982 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 3983 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 3984 echo "[binaries]" >> $cross 3985 echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross 3986 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross 3987 test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross 3988 echo "ar = [$(meson_quote $ar)]" >> $cross 3989 echo "nm = [$(meson_quote $nm)]" >> $cross 3990 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross 3991 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross 3992 if has $sdl2_config; then 3993 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross 3994 fi 3995 echo "strip = [$(meson_quote $strip)]" >> $cross 3996 echo "windres = [$(meson_quote $windres)]" >> $cross 3997 if test "$cross_compile" = "yes"; then 3998 cross_arg="--cross-file config-meson.cross" 3999 echo "[host_machine]" >> $cross 4000 if test "$mingw32" = "yes" ; then 4001 echo "system = 'windows'" >> $cross 4002 fi 4003 if test "$linux" = "yes" ; then 4004 echo "system = 'linux'" >> $cross 4005 fi 4006 if test "$darwin" = "yes" ; then 4007 echo "system = 'darwin'" >> $cross 4008 fi 4009 case "$ARCH" in 4010 i386) 4011 echo "cpu_family = 'x86'" >> $cross 4012 ;; 4013 x86_64|x32) 4014 echo "cpu_family = 'x86_64'" >> $cross 4015 ;; 4016 ppc64le) 4017 echo "cpu_family = 'ppc64'" >> $cross 4018 ;; 4019 *) 4020 echo "cpu_family = '$ARCH'" >> $cross 4021 ;; 4022 esac 4023 echo "cpu = '$cpu'" >> $cross 4024 if test "$bigendian" = "yes" ; then 4025 echo "endian = 'big'" >> $cross 4026 else 4027 echo "endian = 'little'" >> $cross 4028 fi 4029 else 4030 cross_arg="--native-file config-meson.cross" 4031 fi 4032 mv $cross config-meson.cross 4033 4034 rm -rf meson-private meson-info meson-logs 4035 run_meson() { 4036 NINJA=$ninja $meson setup \ 4037 --prefix "$prefix" \ 4038 --libdir "$libdir" \ 4039 --libexecdir "$libexecdir" \ 4040 --bindir "$bindir" \ 4041 --includedir "$includedir" \ 4042 --datadir "$datadir" \ 4043 --mandir "$mandir" \ 4044 --sysconfdir "$sysconfdir" \ 4045 --localedir "$localedir" \ 4046 --localstatedir "$local_statedir" \ 4047 -Daudio_drv_list=$audio_drv_list \ 4048 -Ddefault_devices=$default_devices \ 4049 -Ddocdir="$docdir" \ 4050 -Dqemu_firmwarepath="$firmwarepath" \ 4051 -Dqemu_suffix="$qemu_suffix" \ 4052 -Dsphinx_build="$sphinx_build" \ 4053 -Dtrace_file="$trace_file" \ 4054 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 4055 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 4056 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 4057 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 4058 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 4059 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 4060 -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \ 4061 -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \ 4062 $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \ 4063 $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \ 4064 "$@" $cross_arg "$PWD" "$source_path" 4065 } 4066 eval run_meson $meson_options 4067 if test "$?" -ne 0 ; then 4068 error_exit "meson setup failed" 4069 fi 4070else 4071 if test -f meson-private/cmd_line.txt; then 4072 # Adjust old command line options whose type was changed 4073 # Avoids having to use "setup --wipe" when Meson is upgraded 4074 perl -i -ne ' 4075 s/^gettext = true$/gettext = auto/; 4076 s/^gettext = false$/gettext = disabled/; 4077 /^b_staticpic/ && next; 4078 print;' meson-private/cmd_line.txt 4079 fi 4080fi 4081 4082if test -n "${deprecated_features}"; then 4083 echo "Warning, deprecated features enabled." 4084 echo "Please see docs/about/deprecated.rst" 4085 echo " features: ${deprecated_features}" 4086fi 4087 4088# Create list of config switches that should be poisoned in common code... 4089# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special. 4090target_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null) 4091if test -n "$target_configs_h" ; then 4092 sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \ 4093 -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \ 4094 $target_configs_h | sort -u > config-poison.h 4095else 4096 :> config-poison.h 4097fi 4098 4099# Save the configure command line for later reuse. 4100cat <<EOD >config.status 4101#!/bin/sh 4102# Generated by configure. 4103# Run this file to recreate the current configuration. 4104# Compiler output produced by configure, useful for debugging 4105# configure, is in config.log if it exists. 4106EOD 4107 4108preserve_env() { 4109 envname=$1 4110 4111 eval envval=\$$envname 4112 4113 if test -n "$envval" 4114 then 4115 echo "$envname='$envval'" >> config.status 4116 echo "export $envname" >> config.status 4117 else 4118 echo "unset $envname" >> config.status 4119 fi 4120} 4121 4122# Preserve various env variables that influence what 4123# features/build target configure will detect 4124preserve_env AR 4125preserve_env AS 4126preserve_env CC 4127preserve_env CPP 4128preserve_env CXX 4129preserve_env INSTALL 4130preserve_env LD 4131preserve_env LD_LIBRARY_PATH 4132preserve_env LIBTOOL 4133preserve_env MAKE 4134preserve_env NM 4135preserve_env OBJCOPY 4136preserve_env PATH 4137preserve_env PKG_CONFIG 4138preserve_env PKG_CONFIG_LIBDIR 4139preserve_env PKG_CONFIG_PATH 4140preserve_env PYTHON 4141preserve_env SDL2_CONFIG 4142preserve_env SMBD 4143preserve_env STRIP 4144preserve_env WINDRES 4145 4146printf "exec" >>config.status 4147for i in "$0" "$@"; do 4148 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status 4149done 4150echo ' "$@"' >>config.status 4151chmod +x config.status 4152 4153rm -r "$TMPDIR1" 4154