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