1#!/bin/sh 2# 3# qemu configure script (c) 2003 Fabrice Bellard 4# 5 6# Unset some variables known to interfere with behavior of common tools, 7# just as autoconf does. 8CLICOLOR_FORCE= GREP_OPTIONS= 9unset CLICOLOR_FORCE GREP_OPTIONS 10 11# Don't allow CCACHE, if present, to use cached results of compile tests! 12export CCACHE_RECACHE=yes 13 14# make source path absolute 15source_path=$(cd "$(dirname -- "$0")"; pwd) 16 17if test "$PWD" = "$source_path" 18then 19 echo "Using './build' as the directory for build output" 20 21 MARKER=build/auto-created-by-configure 22 23 if test -e build 24 then 25 if test -f $MARKER 26 then 27 rm -rf build 28 else 29 echo "ERROR: ./build dir already exists and was not previously created by configure" 30 exit 1 31 fi 32 fi 33 34 mkdir build 35 touch $MARKER 36 37 cat > GNUmakefile <<'EOF' 38# This file is auto-generated by configure to support in-source tree 39# 'make' command invocation 40 41ifeq ($(MAKECMDGOALS),) 42recurse: all 43endif 44 45.NOTPARALLEL: % 46%: force 47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...' 48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS) 49 @if test "$(MAKECMDGOALS)" = "distclean" && \ 50 test -e build/auto-created-by-configure ; \ 51 then \ 52 rm -rf build GNUmakefile ; \ 53 fi 54force: ; 55.PHONY: force 56GNUmakefile: ; 57 58EOF 59 cd build 60 exec $source_path/configure "$@" 61fi 62 63# Temporary directory used for files created while 64# configure runs. Since it is in the build directory 65# we can safely blow away any previous version of it 66# (and we need not jump through hoops to try to delete 67# it when configure exits.) 68TMPDIR1="config-temp" 69rm -rf "${TMPDIR1}" 70mkdir -p "${TMPDIR1}" 71if [ $? -ne 0 ]; then 72 echo "ERROR: failed to create temporary directory" 73 exit 1 74fi 75 76TMPB="qemu-conf" 77TMPC="${TMPDIR1}/${TMPB}.c" 78TMPO="${TMPDIR1}/${TMPB}.o" 79TMPCXX="${TMPDIR1}/${TMPB}.cxx" 80TMPE="${TMPDIR1}/${TMPB}.exe" 81TMPTXT="${TMPDIR1}/${TMPB}.txt" 82 83rm -f config.log 84 85# Print a helpful header at the top of config.log 86echo "# QEMU configure log $(date)" >> config.log 87printf "# Configured with:" >> config.log 88printf " '%s'" "$0" "$@" >> config.log 89echo >> config.log 90echo "#" >> config.log 91 92quote_sh() { 93 printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&'," 94} 95 96print_error() { 97 (echo 98 echo "ERROR: $1" 99 while test -n "$2"; do 100 echo " $2" 101 shift 102 done 103 echo) >&2 104} 105 106error_exit() { 107 print_error "$@" 108 exit 1 109} 110 111do_compiler() { 112 # Run the compiler, capturing its output to the log. First argument 113 # is compiler binary to execute. 114 local 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" "$@" 146} 147 148do_cxx() { 149 do_compiler "$cxx" "$@" 150} 151 152# Append $2 to the variable named $1, with space separation 153add_to() { 154 eval $1=\${$1:+\"\$$1 \"}\$2 155} 156 157update_cxxflags() { 158 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those 159 # options which some versions of GCC's C++ compiler complain about 160 # because they only make sense for C programs. 161 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS" 162 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu99/-std=gnu++11/) 163 for arg in $QEMU_CFLAGS; do 164 case $arg in 165 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ 166 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) 167 ;; 168 *) 169 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg 170 ;; 171 esac 172 done 173} 174 175compile_object() { 176 local_cflags="$1" 177 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC 178} 179 180compile_prog() { 181 local_cflags="$1" 182 local_ldflags="$2" 183 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \ 184 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags 185} 186 187# symbolically link $1 to $2. Portable version of "ln -sf". 188symlink() { 189 rm -rf "$2" 190 mkdir -p "$(dirname "$2")" 191 ln -s "$1" "$2" 192} 193 194# check whether a command is available to this shell (may be either an 195# executable or a builtin) 196has() { 197 type "$1" >/dev/null 2>&1 198} 199 200version_ge () { 201 local_ver1=`echo $1 | tr . ' '` 202 local_ver2=`echo $2 | tr . ' '` 203 while true; do 204 set x $local_ver1 205 local_first=${2-0} 206 # 'shift 2' if $2 is set, or 'shift' if $2 is not set 207 shift ${2:+2} 208 local_ver1=$* 209 set x $local_ver2 210 # the second argument finished, the first must be greater or equal 211 test $# = 1 && return 0 212 test $local_first -lt $2 && return 1 213 test $local_first -gt $2 && return 0 214 shift ${2:+2} 215 local_ver2=$* 216 done 217} 218 219have_backend () { 220 echo "$trace_backends" | grep "$1" >/dev/null 221} 222 223glob() { 224 eval test -z '"${1#'"$2"'}"' 225} 226 227ld_has() { 228 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 229} 230 231if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]"; 232then 233 error_exit "main directory cannot contain spaces nor colons" 234fi 235 236# default parameters 237cpu="" 238iasl="iasl" 239interp_prefix="/usr/gnemul/qemu-%M" 240static="no" 241cross_compile="no" 242cross_prefix="" 243audio_drv_list="" 244block_drv_rw_whitelist="" 245block_drv_ro_whitelist="" 246host_cc="cc" 247audio_win_int="" 248libs_qga="" 249debug_info="yes" 250lto="false" 251stack_protector="" 252safe_stack="" 253use_containers="yes" 254gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb") 255 256if test -e "$source_path/.git" 257then 258 git_update=yes 259 git_submodules="ui/keycodemapdb" 260 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3" 261 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3" 262else 263 git_update=no 264 git_submodules="" 265 266 if ! test -f "$source_path/ui/keycodemapdb/README" 267 then 268 echo 269 echo "ERROR: missing file $source_path/ui/keycodemapdb/README" 270 echo 271 echo "This is not a GIT checkout but module content appears to" 272 echo "be missing. Do not use 'git archive' or GitHub download links" 273 echo "to acquire QEMU source archives. Non-GIT builds are only" 274 echo "supported with source archives linked from:" 275 echo 276 echo " https://www.qemu.org/download/#source" 277 echo 278 echo "Developers working with GIT can use scripts/archive-source.sh" 279 echo "if they need to create valid source archives." 280 echo 281 exit 1 282 fi 283fi 284git="git" 285 286# Don't accept a target_list environment variable. 287unset target_list 288unset target_list_exclude 289 290# Default value for a variable defining feature "foo". 291# * foo="no" feature will only be used if --enable-foo arg is given 292# * foo="" feature will be searched for, and if found, will be used 293# unless --disable-foo is given 294# * foo="yes" this value will only be set by --enable-foo flag. 295# feature will searched for, 296# if not found, configure exits with error 297# 298# Always add --enable-foo and --disable-foo command line args. 299# Distributions want to ensure that several features are compiled in, and it 300# is impossible without a --enable-foo that exits if a feature is not found. 301 302default_feature="" 303# parse CC options second 304for opt do 305 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 306 case "$opt" in 307 --without-default-features) 308 default_feature="no" 309 ;; 310 esac 311done 312 313brlapi="auto" 314curl="auto" 315iconv="auto" 316curses="auto" 317docs="auto" 318fdt="auto" 319netmap="no" 320sdl="auto" 321sdl_image="auto" 322coreaudio="auto" 323virtiofsd="auto" 324virtfs="auto" 325libudev="auto" 326mpath="auto" 327vnc="enabled" 328sparse="auto" 329vde="$default_feature" 330vnc_sasl="auto" 331vnc_jpeg="auto" 332vnc_png="auto" 333xkbcommon="auto" 334xen="$default_feature" 335xen_ctrl_version="$default_feature" 336xen_pci_passthrough="auto" 337linux_aio="$default_feature" 338linux_io_uring="$default_feature" 339cap_ng="auto" 340attr="auto" 341xfs="$default_feature" 342tcg="enabled" 343membarrier="$default_feature" 344vhost_net="$default_feature" 345vhost_crypto="$default_feature" 346vhost_scsi="$default_feature" 347vhost_vsock="$default_feature" 348vhost_user="no" 349vhost_user_blk_server="auto" 350vhost_user_fs="$default_feature" 351kvm="auto" 352hax="auto" 353hvf="auto" 354whpx="auto" 355rdma="$default_feature" 356pvrdma="$default_feature" 357gprof="no" 358debug_tcg="no" 359debug="no" 360sanitizers="no" 361tsan="no" 362fortify_source="$default_feature" 363strip_opt="yes" 364tcg_interpreter="false" 365bigendian="no" 366mingw32="no" 367gcov="no" 368EXESUF="$default_feature" 369HOST_DSOSUF=".so" 370modules="no" 371module_upgrades="no" 372prefix="/usr/local" 373qemu_suffix="qemu" 374slirp="auto" 375oss_lib="" 376bsd="no" 377linux="no" 378solaris="no" 379profiler="no" 380cocoa="auto" 381softmmu="yes" 382linux_user="no" 383bsd_user="no" 384blobs="true" 385pkgversion="" 386pie="" 387qom_cast_debug="yes" 388trace_backends="log" 389trace_file="trace" 390spice="$default_feature" 391rbd="auto" 392smartcard="$default_feature" 393u2f="auto" 394libusb="$default_feature" 395usb_redir="$default_feature" 396opengl="$default_feature" 397opengl_dmabuf="no" 398cpuid_h="no" 399avx2_opt="$default_feature" 400capstone="auto" 401lzo="auto" 402snappy="auto" 403bzip2="auto" 404lzfse="auto" 405zstd="auto" 406guest_agent="$default_feature" 407guest_agent_with_vss="no" 408guest_agent_ntddscsi="no" 409guest_agent_msi="auto" 410vss_win32_sdk="$default_feature" 411win_sdk="no" 412want_tools="$default_feature" 413libiscsi="auto" 414libnfs="auto" 415coroutine="" 416coroutine_pool="$default_feature" 417debug_stack_usage="no" 418crypto_afalg="no" 419cfi="false" 420cfi_debug="false" 421seccomp="auto" 422glusterfs="auto" 423gtk="auto" 424tls_priority="NORMAL" 425gnutls="$default_feature" 426nettle="$default_feature" 427nettle_xts="no" 428gcrypt="$default_feature" 429gcrypt_hmac="no" 430gcrypt_xts="no" 431qemu_private_xts="yes" 432auth_pam="$default_feature" 433vte="$default_feature" 434virglrenderer="$default_feature" 435tpm="$default_feature" 436libssh="$default_feature" 437live_block_migration=${default_feature:-yes} 438numa="$default_feature" 439tcmalloc="no" 440jemalloc="no" 441replication=${default_feature:-yes} 442bochs=${default_feature:-yes} 443cloop=${default_feature:-yes} 444dmg=${default_feature:-yes} 445qcow1=${default_feature:-yes} 446vdi=${default_feature:-yes} 447vvfat=${default_feature:-yes} 448qed=${default_feature:-yes} 449parallels=${default_feature:-yes} 450sheepdog="no" 451libxml2="$default_feature" 452debug_mutex="no" 453libpmem="$default_feature" 454default_devices="true" 455plugins="no" 456fuzzing="no" 457rng_none="no" 458secret_keyring="$default_feature" 459libdaxctl="$default_feature" 460meson="" 461ninja="" 462skip_meson=no 463gettext="auto" 464fuse="auto" 465fuse_lseek="auto" 466 467malloc_trim="auto" 468 469# parse CC options second 470for opt do 471 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 472 case "$opt" in 473 --cross-prefix=*) cross_prefix="$optarg" 474 cross_compile="yes" 475 ;; 476 --cc=*) CC="$optarg" 477 ;; 478 --cxx=*) CXX="$optarg" 479 ;; 480 --cpu=*) cpu="$optarg" 481 ;; 482 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" 483 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 484 ;; 485 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" 486 ;; 487 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 488 EXTRA_LDFLAGS="$optarg" 489 ;; 490 --enable-debug-info) debug_info="yes" 491 ;; 492 --disable-debug-info) debug_info="no" 493 ;; 494 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" 495 ;; 496 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*} 497 eval "cross_cc_cflags_${cc_arch}=\$optarg" 498 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}" 499 ;; 500 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} 501 cc_archs="$cc_archs $cc_arch" 502 eval "cross_cc_${cc_arch}=\$optarg" 503 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" 504 ;; 505 esac 506done 507# OS specific 508# Using uname is really, really broken. Once we have the right set of checks 509# we can eliminate its usage altogether. 510 511# Preferred compiler: 512# ${CC} (if set) 513# ${cross_prefix}gcc (if cross-prefix specified) 514# system compiler 515if test -z "${CC}${cross_prefix}"; then 516 cc="$host_cc" 517else 518 cc="${CC-${cross_prefix}gcc}" 519fi 520 521if test -z "${CXX}${cross_prefix}"; then 522 cxx="c++" 523else 524 cxx="${CXX-${cross_prefix}g++}" 525fi 526 527ar="${AR-${cross_prefix}ar}" 528as="${AS-${cross_prefix}as}" 529ccas="${CCAS-$cc}" 530cpp="${CPP-$cc -E}" 531objcopy="${OBJCOPY-${cross_prefix}objcopy}" 532ld="${LD-${cross_prefix}ld}" 533ranlib="${RANLIB-${cross_prefix}ranlib}" 534nm="${NM-${cross_prefix}nm}" 535strip="${STRIP-${cross_prefix}strip}" 536windres="${WINDRES-${cross_prefix}windres}" 537pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" 538query_pkg_config() { 539 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" 540} 541pkg_config=query_pkg_config 542sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" 543 544# If the user hasn't specified ARFLAGS, default to 'rv', just as make does. 545ARFLAGS="${ARFLAGS-rv}" 546 547# default flags for all hosts 548# We use -fwrapv to tell the compiler that we require a C dialect where 549# left shift of signed integers is well defined and has the expected 550# 2s-complement style results. (Both clang and gcc agree that it 551# provides these semantics.) 552QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS" 553QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" 554QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" 555QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" 556 557# Flags that are needed during configure but later taken care of by Meson 558CONFIGURE_CFLAGS="-std=gnu99 -Wall" 559CONFIGURE_LDFLAGS= 560 561 562check_define() { 563cat > $TMPC <<EOF 564#if !defined($1) 565#error $1 not defined 566#endif 567int main(void) { return 0; } 568EOF 569 compile_object 570} 571 572check_include() { 573cat > $TMPC <<EOF 574#include <$1> 575int main(void) { return 0; } 576EOF 577 compile_object 578} 579 580write_c_skeleton() { 581 cat > $TMPC <<EOF 582int main(void) { return 0; } 583EOF 584} 585 586write_c_fuzzer_skeleton() { 587 cat > $TMPC <<EOF 588#include <stdint.h> 589#include <sys/types.h> 590int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size); 591int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; } 592EOF 593} 594 595if check_define __linux__ ; then 596 targetos="Linux" 597elif check_define _WIN32 ; then 598 targetos='MINGW32' 599elif check_define __OpenBSD__ ; then 600 targetos='OpenBSD' 601elif check_define __sun__ ; then 602 targetos='SunOS' 603elif check_define __HAIKU__ ; then 604 targetos='Haiku' 605elif check_define __FreeBSD__ ; then 606 targetos='FreeBSD' 607elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then 608 targetos='GNU/kFreeBSD' 609elif check_define __DragonFly__ ; then 610 targetos='DragonFly' 611elif check_define __NetBSD__; then 612 targetos='NetBSD' 613elif check_define __APPLE__; then 614 targetos='Darwin' 615else 616 # This is a fatal error, but don't report it yet, because we 617 # might be going to just print the --help text, or it might 618 # be the result of a missing compiler. 619 targetos='bogus' 620fi 621 622# Some host OSes need non-standard checks for which CPU to use. 623# Note that these checks are broken for cross-compilation: if you're 624# cross-compiling to one of these OSes then you'll need to specify 625# the correct CPU with the --cpu option. 626case $targetos in 627Darwin) 628 HOST_DSOSUF=".dylib" 629 ;; 630SunOS) 631 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo 632 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then 633 cpu="x86_64" 634 fi 635esac 636 637if test ! -z "$cpu" ; then 638 # command line argument 639 : 640elif check_define __i386__ ; then 641 cpu="i386" 642elif check_define __x86_64__ ; then 643 if check_define __ILP32__ ; then 644 cpu="x32" 645 else 646 cpu="x86_64" 647 fi 648elif check_define __sparc__ ; then 649 if check_define __arch64__ ; then 650 cpu="sparc64" 651 else 652 cpu="sparc" 653 fi 654elif check_define _ARCH_PPC ; then 655 if check_define _ARCH_PPC64 ; then 656 if check_define _LITTLE_ENDIAN ; then 657 cpu="ppc64le" 658 else 659 cpu="ppc64" 660 fi 661 else 662 cpu="ppc" 663 fi 664elif check_define __mips__ ; then 665 cpu="mips" 666elif check_define __s390__ ; then 667 if check_define __s390x__ ; then 668 cpu="s390x" 669 else 670 cpu="s390" 671 fi 672elif check_define __riscv ; then 673 if check_define _LP64 ; then 674 cpu="riscv64" 675 else 676 cpu="riscv32" 677 fi 678elif check_define __arm__ ; then 679 cpu="arm" 680elif check_define __aarch64__ ; then 681 cpu="aarch64" 682else 683 cpu=$(uname -m) 684fi 685 686ARCH= 687# Normalise host CPU name and set ARCH. 688# Note that this case should only have supported host CPUs, not guests. 689case "$cpu" in 690 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64) 691 ;; 692 ppc64le) 693 ARCH="ppc64" 694 ;; 695 i386|i486|i586|i686|i86pc|BePC) 696 cpu="i386" 697 ;; 698 x86_64|amd64) 699 cpu="x86_64" 700 ;; 701 armv*b|armv*l|arm) 702 cpu="arm" 703 ;; 704 aarch64) 705 cpu="aarch64" 706 ;; 707 mips*) 708 cpu="mips" 709 ;; 710 sparc|sun4[cdmuv]) 711 cpu="sparc" 712 ;; 713 *) 714 # This will result in either an error or falling back to TCI later 715 ARCH=unknown 716 ;; 717esac 718if test -z "$ARCH"; then 719 ARCH="$cpu" 720fi 721 722# OS specific 723 724case $targetos in 725MINGW32*) 726 mingw32="yes" 727 audio_possible_drivers="dsound sdl" 728 if check_include dsound.h; then 729 audio_drv_list="dsound" 730 else 731 audio_drv_list="" 732 fi 733 supported_os="yes" 734 pie="no" 735;; 736GNU/kFreeBSD) 737 bsd="yes" 738 audio_drv_list="oss try-sdl" 739 audio_possible_drivers="oss sdl pa" 740;; 741FreeBSD) 742 bsd="yes" 743 make="${MAKE-gmake}" 744 audio_drv_list="oss try-sdl" 745 audio_possible_drivers="oss sdl pa" 746 # needed for kinfo_getvmmap(3) in libutil.h 747 netmap="" # enable netmap autodetect 748;; 749DragonFly) 750 bsd="yes" 751 make="${MAKE-gmake}" 752 audio_drv_list="oss try-sdl" 753 audio_possible_drivers="oss sdl pa" 754;; 755NetBSD) 756 bsd="yes" 757 make="${MAKE-gmake}" 758 audio_drv_list="oss try-sdl" 759 audio_possible_drivers="oss sdl" 760 oss_lib="-lossaudio" 761;; 762OpenBSD) 763 bsd="yes" 764 make="${MAKE-gmake}" 765 audio_drv_list="try-sdl" 766 audio_possible_drivers="sdl" 767;; 768Darwin) 769 bsd="yes" 770 darwin="yes" 771 audio_drv_list="try-coreaudio try-sdl" 772 audio_possible_drivers="coreaudio sdl" 773 # Disable attempts to use ObjectiveC features in os/object.h since they 774 # won't work when we're compiling with gcc as a C compiler. 775 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS" 776;; 777SunOS) 778 solaris="yes" 779 make="${MAKE-gmake}" 780 smbd="${SMBD-/usr/sfw/sbin/smbd}" 781 if test -f /usr/include/sys/soundcard.h ; then 782 audio_drv_list="oss try-sdl" 783 fi 784 audio_possible_drivers="oss sdl" 785# needed for CMSG_ macros in sys/socket.h 786 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS" 787# needed for TIOCWIN* defines in termios.h 788 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS" 789;; 790Haiku) 791 haiku="yes" 792 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS" 793;; 794Linux) 795 audio_drv_list="try-pa oss" 796 audio_possible_drivers="oss alsa sdl pa" 797 linux="yes" 798 linux_user="yes" 799 vhost_user=${default_feature:-yes} 800;; 801esac 802 803if [ "$bsd" = "yes" ] ; then 804 if [ "$darwin" != "yes" ] ; then 805 bsd_user="yes" 806 fi 807fi 808 809: ${make=${MAKE-make}} 810 811# We prefer python 3.x. A bare 'python' is traditionally 812# python 2.x, but some distros have it as python 3.x, so 813# we check that too 814python= 815explicit_python=no 816for binary in "${PYTHON-python3}" python 817do 818 if has "$binary" 819 then 820 python=$(command -v "$binary") 821 break 822 fi 823done 824 825 826# Check for ancillary tools used in testing 827genisoimage= 828for binary in genisoimage mkisofs 829do 830 if has $binary 831 then 832 genisoimage=$(command -v "$binary") 833 break 834 fi 835done 836 837: ${smbd=${SMBD-/usr/sbin/smbd}} 838 839# Default objcc to clang if available, otherwise use CC 840if has clang; then 841 objcc=clang 842else 843 objcc="$cc" 844fi 845 846if test "$mingw32" = "yes" ; then 847 EXESUF=".exe" 848 HOST_DSOSUF=".dll" 849 # MinGW needs -mthreads for TLS and macro _MT. 850 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS" 851 write_c_skeleton; 852 prefix="/qemu" 853 qemu_suffix="" 854 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga" 855fi 856 857werror="" 858 859for opt do 860 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 861 case "$opt" in 862 --help|-h) show_help=yes 863 ;; 864 --version|-V) exec cat $source_path/VERSION 865 ;; 866 --prefix=*) prefix="$optarg" 867 ;; 868 --interp-prefix=*) interp_prefix="$optarg" 869 ;; 870 --cross-prefix=*) 871 ;; 872 --cc=*) 873 ;; 874 --host-cc=*) host_cc="$optarg" 875 ;; 876 --cxx=*) 877 ;; 878 --iasl=*) iasl="$optarg" 879 ;; 880 --objcc=*) objcc="$optarg" 881 ;; 882 --make=*) make="$optarg" 883 ;; 884 --install=*) 885 ;; 886 --python=*) python="$optarg" ; explicit_python=yes 887 ;; 888 --sphinx-build=*) sphinx_build="$optarg" 889 ;; 890 --skip-meson) skip_meson=yes 891 ;; 892 --meson=*) meson="$optarg" 893 ;; 894 --ninja=*) ninja="$optarg" 895 ;; 896 --smbd=*) smbd="$optarg" 897 ;; 898 --extra-cflags=*) 899 ;; 900 --extra-cxxflags=*) 901 ;; 902 --extra-ldflags=*) 903 ;; 904 --enable-debug-info) 905 ;; 906 --disable-debug-info) 907 ;; 908 --cross-cc-*) 909 ;; 910 --enable-modules) 911 modules="yes" 912 ;; 913 --disable-modules) 914 modules="no" 915 ;; 916 --disable-module-upgrades) module_upgrades="no" 917 ;; 918 --enable-module-upgrades) module_upgrades="yes" 919 ;; 920 --cpu=*) 921 ;; 922 --target-list=*) target_list="$optarg" 923 if test "$target_list_exclude"; then 924 error_exit "Can't mix --target-list with --target-list-exclude" 925 fi 926 ;; 927 --target-list-exclude=*) target_list_exclude="$optarg" 928 if test "$target_list"; then 929 error_exit "Can't mix --target-list-exclude with --target-list" 930 fi 931 ;; 932 --enable-trace-backends=*) trace_backends="$optarg" 933 ;; 934 # XXX: backwards compatibility 935 --enable-trace-backend=*) trace_backends="$optarg" 936 ;; 937 --with-trace-file=*) trace_file="$optarg" 938 ;; 939 --with-default-devices) default_devices="true" 940 ;; 941 --without-default-devices) default_devices="false" 942 ;; 943 --without-default-features) # processed above 944 ;; 945 --enable-gprof) gprof="yes" 946 ;; 947 --enable-gcov) gcov="yes" 948 ;; 949 --static) 950 static="yes" 951 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS" 952 ;; 953 --mandir=*) mandir="$optarg" 954 ;; 955 --bindir=*) bindir="$optarg" 956 ;; 957 --libdir=*) libdir="$optarg" 958 ;; 959 --libexecdir=*) libexecdir="$optarg" 960 ;; 961 --includedir=*) includedir="$optarg" 962 ;; 963 --datadir=*) datadir="$optarg" 964 ;; 965 --with-suffix=*) qemu_suffix="$optarg" 966 ;; 967 --docdir=*) docdir="$optarg" 968 ;; 969 --localedir=*) localedir="$optarg" 970 ;; 971 --sysconfdir=*) sysconfdir="$optarg" 972 ;; 973 --localstatedir=*) local_statedir="$optarg" 974 ;; 975 --firmwarepath=*) firmwarepath="$optarg" 976 ;; 977 --host=*|--build=*|\ 978 --disable-dependency-tracking|\ 979 --sbindir=*|--sharedstatedir=*|\ 980 --oldincludedir=*|--datarootdir=*|--infodir=*|\ 981 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) 982 # These switches are silently ignored, for compatibility with 983 # autoconf-generated configure scripts. This allows QEMU's 984 # configure to be used by RPM and similar macros that set 985 # lots of directory switches by default. 986 ;; 987 --disable-sdl) sdl="disabled" 988 ;; 989 --enable-sdl) sdl="enabled" 990 ;; 991 --disable-sdl-image) sdl_image="disabled" 992 ;; 993 --enable-sdl-image) sdl_image="enabled" 994 ;; 995 --disable-qom-cast-debug) qom_cast_debug="no" 996 ;; 997 --enable-qom-cast-debug) qom_cast_debug="yes" 998 ;; 999 --disable-virtfs) virtfs="disabled" 1000 ;; 1001 --enable-virtfs) virtfs="enabled" 1002 ;; 1003 --disable-libudev) libudev="disabled" 1004 ;; 1005 --enable-libudev) libudev="enabled" 1006 ;; 1007 --disable-virtiofsd) virtiofsd="disabled" 1008 ;; 1009 --enable-virtiofsd) virtiofsd="enabled" 1010 ;; 1011 --disable-mpath) mpath="disabled" 1012 ;; 1013 --enable-mpath) mpath="enabled" 1014 ;; 1015 --disable-vnc) vnc="disabled" 1016 ;; 1017 --enable-vnc) vnc="enabled" 1018 ;; 1019 --disable-gettext) gettext="disabled" 1020 ;; 1021 --enable-gettext) gettext="enabled" 1022 ;; 1023 --oss-lib=*) oss_lib="$optarg" 1024 ;; 1025 --audio-drv-list=*) audio_drv_list="$optarg" 1026 ;; 1027 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1028 ;; 1029 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1030 ;; 1031 --enable-debug-tcg) debug_tcg="yes" 1032 ;; 1033 --disable-debug-tcg) debug_tcg="no" 1034 ;; 1035 --enable-debug) 1036 # Enable debugging options that aren't excessively noisy 1037 debug_tcg="yes" 1038 debug_mutex="yes" 1039 debug="yes" 1040 strip_opt="no" 1041 fortify_source="no" 1042 ;; 1043 --enable-sanitizers) sanitizers="yes" 1044 ;; 1045 --disable-sanitizers) sanitizers="no" 1046 ;; 1047 --enable-tsan) tsan="yes" 1048 ;; 1049 --disable-tsan) tsan="no" 1050 ;; 1051 --enable-sparse) sparse="enabled" 1052 ;; 1053 --disable-sparse) sparse="disabled" 1054 ;; 1055 --disable-strip) strip_opt="no" 1056 ;; 1057 --disable-vnc-sasl) vnc_sasl="disabled" 1058 ;; 1059 --enable-vnc-sasl) vnc_sasl="enabled" 1060 ;; 1061 --disable-vnc-jpeg) vnc_jpeg="disabled" 1062 ;; 1063 --enable-vnc-jpeg) vnc_jpeg="enabled" 1064 ;; 1065 --disable-vnc-png) vnc_png="disabled" 1066 ;; 1067 --enable-vnc-png) vnc_png="enabled" 1068 ;; 1069 --disable-slirp) slirp="disabled" 1070 ;; 1071 --enable-slirp) slirp="enabled" 1072 ;; 1073 --enable-slirp=git) slirp="internal" 1074 ;; 1075 --enable-slirp=system) slirp="system" 1076 ;; 1077 --disable-vde) vde="no" 1078 ;; 1079 --enable-vde) vde="yes" 1080 ;; 1081 --disable-netmap) netmap="no" 1082 ;; 1083 --enable-netmap) netmap="yes" 1084 ;; 1085 --disable-xen) xen="disabled" 1086 ;; 1087 --enable-xen) xen="enabled" 1088 ;; 1089 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled" 1090 ;; 1091 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled" 1092 ;; 1093 --disable-brlapi) brlapi="disabled" 1094 ;; 1095 --enable-brlapi) brlapi="enabled" 1096 ;; 1097 --disable-kvm) kvm="disabled" 1098 ;; 1099 --enable-kvm) kvm="enabled" 1100 ;; 1101 --disable-hax) hax="disabled" 1102 ;; 1103 --enable-hax) hax="enabled" 1104 ;; 1105 --disable-hvf) hvf="disabled" 1106 ;; 1107 --enable-hvf) hvf="enabled" 1108 ;; 1109 --disable-whpx) whpx="disabled" 1110 ;; 1111 --enable-whpx) whpx="enabled" 1112 ;; 1113 --disable-tcg-interpreter) tcg_interpreter="true" 1114 ;; 1115 --enable-tcg-interpreter) tcg_interpreter="false" 1116 ;; 1117 --disable-cap-ng) cap_ng="disabled" 1118 ;; 1119 --enable-cap-ng) cap_ng="enabled" 1120 ;; 1121 --disable-tcg) tcg="disabled" 1122 ;; 1123 --enable-tcg) tcg="enabled" 1124 ;; 1125 --disable-malloc-trim) malloc_trim="disabled" 1126 ;; 1127 --enable-malloc-trim) malloc_trim="enabled" 1128 ;; 1129 --disable-spice) spice="no" 1130 ;; 1131 --enable-spice) spice="yes" 1132 ;; 1133 --disable-libiscsi) libiscsi="disabled" 1134 ;; 1135 --enable-libiscsi) libiscsi="enabled" 1136 ;; 1137 --disable-libnfs) libnfs="disabled" 1138 ;; 1139 --enable-libnfs) libnfs="enabled" 1140 ;; 1141 --enable-profiler) profiler="yes" 1142 ;; 1143 --disable-cocoa) cocoa="disabled" 1144 ;; 1145 --enable-cocoa) cocoa="enabled" 1146 ;; 1147 --disable-system) softmmu="no" 1148 ;; 1149 --enable-system) softmmu="yes" 1150 ;; 1151 --disable-user) 1152 linux_user="no" ; 1153 bsd_user="no" ; 1154 ;; 1155 --enable-user) ;; 1156 --disable-linux-user) linux_user="no" 1157 ;; 1158 --enable-linux-user) linux_user="yes" 1159 ;; 1160 --disable-bsd-user) bsd_user="no" 1161 ;; 1162 --enable-bsd-user) bsd_user="yes" 1163 ;; 1164 --enable-pie) pie="yes" 1165 ;; 1166 --disable-pie) pie="no" 1167 ;; 1168 --enable-werror) werror="yes" 1169 ;; 1170 --disable-werror) werror="no" 1171 ;; 1172 --enable-lto) lto="true" 1173 ;; 1174 --disable-lto) lto="false" 1175 ;; 1176 --enable-stack-protector) stack_protector="yes" 1177 ;; 1178 --disable-stack-protector) stack_protector="no" 1179 ;; 1180 --enable-safe-stack) safe_stack="yes" 1181 ;; 1182 --disable-safe-stack) safe_stack="no" 1183 ;; 1184 --enable-cfi) 1185 cfi="true"; 1186 lto="true"; 1187 ;; 1188 --disable-cfi) cfi="false" 1189 ;; 1190 --enable-cfi-debug) cfi_debug="true" 1191 ;; 1192 --disable-cfi-debug) cfi_debug="false" 1193 ;; 1194 --disable-curses) curses="disabled" 1195 ;; 1196 --enable-curses) curses="enabled" 1197 ;; 1198 --disable-iconv) iconv="disabled" 1199 ;; 1200 --enable-iconv) iconv="enabled" 1201 ;; 1202 --disable-curl) curl="disabled" 1203 ;; 1204 --enable-curl) curl="enabled" 1205 ;; 1206 --disable-fdt) fdt="disabled" 1207 ;; 1208 --enable-fdt) fdt="enabled" 1209 ;; 1210 --enable-fdt=git) fdt="internal" 1211 ;; 1212 --enable-fdt=system) fdt="system" 1213 ;; 1214 --disable-linux-aio) linux_aio="no" 1215 ;; 1216 --enable-linux-aio) linux_aio="yes" 1217 ;; 1218 --disable-linux-io-uring) linux_io_uring="no" 1219 ;; 1220 --enable-linux-io-uring) linux_io_uring="yes" 1221 ;; 1222 --disable-attr) attr="disabled" 1223 ;; 1224 --enable-attr) attr="enabled" 1225 ;; 1226 --disable-membarrier) membarrier="no" 1227 ;; 1228 --enable-membarrier) membarrier="yes" 1229 ;; 1230 --disable-blobs) blobs="false" 1231 ;; 1232 --with-pkgversion=*) pkgversion="$optarg" 1233 ;; 1234 --with-coroutine=*) coroutine="$optarg" 1235 ;; 1236 --disable-coroutine-pool) coroutine_pool="no" 1237 ;; 1238 --enable-coroutine-pool) coroutine_pool="yes" 1239 ;; 1240 --enable-debug-stack-usage) debug_stack_usage="yes" 1241 ;; 1242 --enable-crypto-afalg) crypto_afalg="yes" 1243 ;; 1244 --disable-crypto-afalg) crypto_afalg="no" 1245 ;; 1246 --disable-docs) docs="disabled" 1247 ;; 1248 --enable-docs) docs="enabled" 1249 ;; 1250 --disable-vhost-net) vhost_net="no" 1251 ;; 1252 --enable-vhost-net) vhost_net="yes" 1253 ;; 1254 --disable-vhost-crypto) vhost_crypto="no" 1255 ;; 1256 --enable-vhost-crypto) vhost_crypto="yes" 1257 ;; 1258 --disable-vhost-scsi) vhost_scsi="no" 1259 ;; 1260 --enable-vhost-scsi) vhost_scsi="yes" 1261 ;; 1262 --disable-vhost-vsock) vhost_vsock="no" 1263 ;; 1264 --enable-vhost-vsock) vhost_vsock="yes" 1265 ;; 1266 --disable-vhost-user-blk-server) vhost_user_blk_server="disabled" 1267 ;; 1268 --enable-vhost-user-blk-server) vhost_user_blk_server="enabled" 1269 ;; 1270 --disable-vhost-user-fs) vhost_user_fs="no" 1271 ;; 1272 --enable-vhost-user-fs) vhost_user_fs="yes" 1273 ;; 1274 --disable-opengl) opengl="no" 1275 ;; 1276 --enable-opengl) opengl="yes" 1277 ;; 1278 --disable-rbd) rbd="disabled" 1279 ;; 1280 --enable-rbd) rbd="enabled" 1281 ;; 1282 --disable-xfsctl) xfs="no" 1283 ;; 1284 --enable-xfsctl) xfs="yes" 1285 ;; 1286 --disable-smartcard) smartcard="no" 1287 ;; 1288 --enable-smartcard) smartcard="yes" 1289 ;; 1290 --disable-u2f) u2f="disabled" 1291 ;; 1292 --enable-u2f) u2f="enabled" 1293 ;; 1294 --disable-libusb) libusb="no" 1295 ;; 1296 --enable-libusb) libusb="yes" 1297 ;; 1298 --disable-usb-redir) usb_redir="no" 1299 ;; 1300 --enable-usb-redir) usb_redir="yes" 1301 ;; 1302 --disable-zlib-test) 1303 ;; 1304 --disable-lzo) lzo="disabled" 1305 ;; 1306 --enable-lzo) lzo="enabled" 1307 ;; 1308 --disable-snappy) snappy="disabled" 1309 ;; 1310 --enable-snappy) snappy="enabled" 1311 ;; 1312 --disable-bzip2) bzip2="disabled" 1313 ;; 1314 --enable-bzip2) bzip2="enabled" 1315 ;; 1316 --enable-lzfse) lzfse="enabled" 1317 ;; 1318 --disable-lzfse) lzfse="disabled" 1319 ;; 1320 --disable-zstd) zstd="disabled" 1321 ;; 1322 --enable-zstd) zstd="enabled" 1323 ;; 1324 --enable-guest-agent) guest_agent="yes" 1325 ;; 1326 --disable-guest-agent) guest_agent="no" 1327 ;; 1328 --enable-guest-agent-msi) guest_agent_msi="enabled" 1329 ;; 1330 --disable-guest-agent-msi) guest_agent_msi="disabled" 1331 ;; 1332 --with-vss-sdk) vss_win32_sdk="" 1333 ;; 1334 --with-vss-sdk=*) vss_win32_sdk="$optarg" 1335 ;; 1336 --without-vss-sdk) vss_win32_sdk="no" 1337 ;; 1338 --with-win-sdk) win_sdk="" 1339 ;; 1340 --with-win-sdk=*) win_sdk="$optarg" 1341 ;; 1342 --without-win-sdk) win_sdk="no" 1343 ;; 1344 --enable-tools) want_tools="yes" 1345 ;; 1346 --disable-tools) want_tools="no" 1347 ;; 1348 --enable-seccomp) seccomp="enabled" 1349 ;; 1350 --disable-seccomp) seccomp="disabled" 1351 ;; 1352 --disable-glusterfs) glusterfs="disabled" 1353 ;; 1354 --disable-avx2) avx2_opt="no" 1355 ;; 1356 --enable-avx2) avx2_opt="yes" 1357 ;; 1358 --disable-avx512f) avx512f_opt="no" 1359 ;; 1360 --enable-avx512f) avx512f_opt="yes" 1361 ;; 1362 1363 --enable-glusterfs) glusterfs="enabled" 1364 ;; 1365 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) 1366 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 1367 ;; 1368 --enable-vhdx|--disable-vhdx) 1369 echo "$0: $opt is obsolete, VHDX driver is always built" >&2 1370 ;; 1371 --enable-uuid|--disable-uuid) 1372 echo "$0: $opt is obsolete, UUID support is always built" >&2 1373 ;; 1374 --disable-gtk) gtk="disabled" 1375 ;; 1376 --enable-gtk) gtk="enabled" 1377 ;; 1378 --tls-priority=*) tls_priority="$optarg" 1379 ;; 1380 --disable-gnutls) gnutls="no" 1381 ;; 1382 --enable-gnutls) gnutls="yes" 1383 ;; 1384 --disable-nettle) nettle="no" 1385 ;; 1386 --enable-nettle) nettle="yes" 1387 ;; 1388 --disable-gcrypt) gcrypt="no" 1389 ;; 1390 --enable-gcrypt) gcrypt="yes" 1391 ;; 1392 --disable-auth-pam) auth_pam="no" 1393 ;; 1394 --enable-auth-pam) auth_pam="yes" 1395 ;; 1396 --enable-rdma) rdma="yes" 1397 ;; 1398 --disable-rdma) rdma="no" 1399 ;; 1400 --enable-pvrdma) pvrdma="yes" 1401 ;; 1402 --disable-pvrdma) pvrdma="no" 1403 ;; 1404 --disable-vte) vte="no" 1405 ;; 1406 --enable-vte) vte="yes" 1407 ;; 1408 --disable-virglrenderer) virglrenderer="no" 1409 ;; 1410 --enable-virglrenderer) virglrenderer="yes" 1411 ;; 1412 --disable-tpm) tpm="no" 1413 ;; 1414 --enable-tpm) tpm="yes" 1415 ;; 1416 --disable-libssh) libssh="no" 1417 ;; 1418 --enable-libssh) libssh="yes" 1419 ;; 1420 --disable-live-block-migration) live_block_migration="no" 1421 ;; 1422 --enable-live-block-migration) live_block_migration="yes" 1423 ;; 1424 --disable-numa) numa="no" 1425 ;; 1426 --enable-numa) numa="yes" 1427 ;; 1428 --disable-libxml2) libxml2="no" 1429 ;; 1430 --enable-libxml2) libxml2="yes" 1431 ;; 1432 --disable-tcmalloc) tcmalloc="no" 1433 ;; 1434 --enable-tcmalloc) tcmalloc="yes" 1435 ;; 1436 --disable-jemalloc) jemalloc="no" 1437 ;; 1438 --enable-jemalloc) jemalloc="yes" 1439 ;; 1440 --disable-replication) replication="no" 1441 ;; 1442 --enable-replication) replication="yes" 1443 ;; 1444 --disable-bochs) bochs="no" 1445 ;; 1446 --enable-bochs) bochs="yes" 1447 ;; 1448 --disable-cloop) cloop="no" 1449 ;; 1450 --enable-cloop) cloop="yes" 1451 ;; 1452 --disable-dmg) dmg="no" 1453 ;; 1454 --enable-dmg) dmg="yes" 1455 ;; 1456 --disable-qcow1) qcow1="no" 1457 ;; 1458 --enable-qcow1) qcow1="yes" 1459 ;; 1460 --disable-vdi) vdi="no" 1461 ;; 1462 --enable-vdi) vdi="yes" 1463 ;; 1464 --disable-vvfat) vvfat="no" 1465 ;; 1466 --enable-vvfat) vvfat="yes" 1467 ;; 1468 --disable-qed) qed="no" 1469 ;; 1470 --enable-qed) qed="yes" 1471 ;; 1472 --disable-parallels) parallels="no" 1473 ;; 1474 --enable-parallels) parallels="yes" 1475 ;; 1476 --disable-sheepdog) sheepdog="no" 1477 ;; 1478 --enable-sheepdog) sheepdog="yes" 1479 ;; 1480 --disable-vhost-user) vhost_user="no" 1481 ;; 1482 --enable-vhost-user) vhost_user="yes" 1483 ;; 1484 --disable-vhost-vdpa) vhost_vdpa="no" 1485 ;; 1486 --enable-vhost-vdpa) vhost_vdpa="yes" 1487 ;; 1488 --disable-vhost-kernel) vhost_kernel="no" 1489 ;; 1490 --enable-vhost-kernel) vhost_kernel="yes" 1491 ;; 1492 --disable-capstone) capstone="disabled" 1493 ;; 1494 --enable-capstone) capstone="enabled" 1495 ;; 1496 --enable-capstone=git) capstone="internal" 1497 ;; 1498 --enable-capstone=system) capstone="system" 1499 ;; 1500 --with-git=*) git="$optarg" 1501 ;; 1502 --enable-git-update) git_update=yes 1503 ;; 1504 --disable-git-update) git_update=no 1505 ;; 1506 --enable-debug-mutex) debug_mutex=yes 1507 ;; 1508 --disable-debug-mutex) debug_mutex=no 1509 ;; 1510 --enable-libpmem) libpmem=yes 1511 ;; 1512 --disable-libpmem) libpmem=no 1513 ;; 1514 --enable-xkbcommon) xkbcommon="enabled" 1515 ;; 1516 --disable-xkbcommon) xkbcommon="disabled" 1517 ;; 1518 --enable-plugins) plugins="yes" 1519 ;; 1520 --disable-plugins) plugins="no" 1521 ;; 1522 --enable-containers) use_containers="yes" 1523 ;; 1524 --disable-containers) use_containers="no" 1525 ;; 1526 --enable-fuzzing) fuzzing=yes 1527 ;; 1528 --disable-fuzzing) fuzzing=no 1529 ;; 1530 --gdb=*) gdb_bin="$optarg" 1531 ;; 1532 --enable-rng-none) rng_none=yes 1533 ;; 1534 --disable-rng-none) rng_none=no 1535 ;; 1536 --enable-keyring) secret_keyring="yes" 1537 ;; 1538 --disable-keyring) secret_keyring="no" 1539 ;; 1540 --enable-libdaxctl) libdaxctl=yes 1541 ;; 1542 --disable-libdaxctl) libdaxctl=no 1543 ;; 1544 --enable-fuse) fuse="enabled" 1545 ;; 1546 --disable-fuse) fuse="disabled" 1547 ;; 1548 --enable-fuse-lseek) fuse_lseek="enabled" 1549 ;; 1550 --disable-fuse-lseek) fuse_lseek="disabled" 1551 ;; 1552 *) 1553 echo "ERROR: unknown option $opt" 1554 echo "Try '$0 --help' for more information" 1555 exit 1 1556 ;; 1557 esac 1558done 1559 1560libdir="${libdir:-$prefix/lib}" 1561libexecdir="${libexecdir:-$prefix/libexec}" 1562includedir="${includedir:-$prefix/include}" 1563 1564if test "$mingw32" = "yes" ; then 1565 bindir="${bindir:-$prefix}" 1566else 1567 bindir="${bindir:-$prefix/bin}" 1568fi 1569mandir="${mandir:-$prefix/share/man}" 1570datadir="${datadir:-$prefix/share}" 1571docdir="${docdir:-$prefix/share/doc}" 1572sysconfdir="${sysconfdir:-$prefix/etc}" 1573local_statedir="${local_statedir:-$prefix/var}" 1574firmwarepath="${firmwarepath:-$datadir/qemu-firmware}" 1575localedir="${localedir:-$datadir/locale}" 1576 1577case "$cpu" in 1578 ppc) 1579 CPU_CFLAGS="-m32" 1580 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 1581 ;; 1582 ppc64) 1583 CPU_CFLAGS="-m64" 1584 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1585 ;; 1586 sparc) 1587 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" 1588 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS" 1589 ;; 1590 sparc64) 1591 CPU_CFLAGS="-m64 -mcpu=ultrasparc" 1592 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1593 ;; 1594 s390) 1595 CPU_CFLAGS="-m31" 1596 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS" 1597 ;; 1598 s390x) 1599 CPU_CFLAGS="-m64" 1600 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1601 ;; 1602 i386) 1603 CPU_CFLAGS="-m32" 1604 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" 1605 ;; 1606 x86_64) 1607 # ??? Only extremely old AMD cpus do not have cmpxchg16b. 1608 # If we truly care, we should simply detect this case at 1609 # runtime and generate the fallback to serial emulation. 1610 CPU_CFLAGS="-m64 -mcx16" 1611 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" 1612 ;; 1613 x32) 1614 CPU_CFLAGS="-mx32" 1615 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS" 1616 ;; 1617 # No special flags required for other host CPUs 1618esac 1619 1620eval "cross_cc_${cpu}=\$host_cc" 1621cross_cc_vars="$cross_cc_vars cross_cc_${cpu}" 1622QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS" 1623 1624# For user-mode emulation the host arch has to be one we explicitly 1625# support, even if we're using TCI. 1626if [ "$ARCH" = "unknown" ]; then 1627 bsd_user="no" 1628 linux_user="no" 1629fi 1630 1631default_target_list="" 1632deprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu 1633deprecated_features="" 1634mak_wilds="" 1635 1636if [ "$softmmu" = "yes" ]; then 1637 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak" 1638fi 1639if [ "$linux_user" = "yes" ]; then 1640 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak" 1641fi 1642if [ "$bsd_user" = "yes" ]; then 1643 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak" 1644fi 1645 1646# If the user doesn't explicitly specify a deprecated target we will 1647# skip it. 1648if test -z "$target_list"; then 1649 if test -z "$target_list_exclude"; then 1650 target_list_exclude="$deprecated_targets_list" 1651 else 1652 target_list_exclude="$target_list_exclude,$deprecated_targets_list" 1653 fi 1654fi 1655 1656for config in $mak_wilds; do 1657 target="$(basename "$config" .mak)" 1658 if echo "$target_list_exclude" | grep -vq "$target"; then 1659 default_target_list="${default_target_list} $target" 1660 fi 1661done 1662 1663# Enumerate public trace backends for --help output 1664trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/')) 1665 1666if test x"$show_help" = x"yes" ; then 1667cat << EOF 1668 1669Usage: configure [options] 1670Options: [defaults in brackets after descriptions] 1671 1672Standard options: 1673 --help print this message 1674 --prefix=PREFIX install in PREFIX [$prefix] 1675 --interp-prefix=PREFIX where to find shared libraries, etc. 1676 use %M for cpu name [$interp_prefix] 1677 --target-list=LIST set target list (default: build all non-deprecated) 1678$(echo Available targets: $default_target_list | \ 1679 fold -s -w 53 | sed -e 's/^/ /') 1680$(echo Deprecated targets: $deprecated_targets_list | \ 1681 fold -s -w 53 | sed -e 's/^/ /') 1682 --target-list-exclude=LIST exclude a set of targets from the default target-list 1683 1684Advanced options (experts only): 1685 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix] 1686 --cc=CC use C compiler CC [$cc] 1687 --iasl=IASL use ACPI compiler IASL [$iasl] 1688 --host-cc=CC use C compiler CC [$host_cc] for code run at 1689 build time 1690 --cxx=CXX use C++ compiler CXX [$cxx] 1691 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] 1692 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS 1693 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS 1694 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS 1695 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases 1696 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests 1697 --make=MAKE use specified make [$make] 1698 --python=PYTHON use specified python [$python] 1699 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build] 1700 --meson=MESON use specified meson [$meson] 1701 --ninja=NINJA use specified ninja [$ninja] 1702 --smbd=SMBD use specified smbd [$smbd] 1703 --with-git=GIT use specified git [$git] 1704 --static enable static build [$static] 1705 --mandir=PATH install man pages in PATH 1706 --datadir=PATH install firmware in PATH/$qemu_suffix 1707 --localedir=PATH install translation in PATH/$qemu_suffix 1708 --docdir=PATH install documentation in PATH/$qemu_suffix 1709 --bindir=PATH install binaries in PATH 1710 --libdir=PATH install libraries in PATH 1711 --libexecdir=PATH install helper binaries in PATH 1712 --sysconfdir=PATH install config in PATH/$qemu_suffix 1713 --localstatedir=PATH install local state in PATH (set at runtime on win32) 1714 --firmwarepath=PATH search PATH for firmware files 1715 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs. 1716 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix] 1717 --with-pkgversion=VERS use specified string as sub-version of the package 1718 --without-default-features default all --enable-* options to "disabled" 1719 --without-default-devices do not include any device that is not needed to 1720 start the emulator (only use if you are including 1721 desired devices in default-configs/devices/) 1722 --enable-debug enable common debug build options 1723 --enable-sanitizers enable default sanitizers 1724 --enable-tsan enable thread sanitizer 1725 --disable-strip disable stripping binaries 1726 --disable-werror disable compilation abort on warning 1727 --disable-stack-protector disable compiler-provided stack protection 1728 --audio-drv-list=LIST set audio drivers list: 1729 Available drivers: $audio_possible_drivers 1730 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L 1731 --block-drv-rw-whitelist=L 1732 set block driver read-write whitelist 1733 (affects only QEMU, not qemu-img) 1734 --block-drv-ro-whitelist=L 1735 set block driver read-only whitelist 1736 (affects only QEMU, not qemu-img) 1737 --enable-trace-backends=B Set trace backend 1738 Available backends: $trace_backend_list 1739 --with-trace-file=NAME Full PATH,NAME of file to store traces 1740 Default:trace-<pid> 1741 --disable-slirp disable SLIRP userspace network connectivity 1742 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI) 1743 --enable-malloc-trim enable libc malloc_trim() for memory optimization 1744 --oss-lib path to OSS library 1745 --cpu=CPU Build for host CPU [$cpu] 1746 --with-coroutine=BACKEND coroutine backend. Supported options: 1747 ucontext, sigaltstack, windows 1748 --enable-gcov enable test coverage analysis with gcov 1749 --disable-blobs disable installing provided firmware blobs 1750 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent 1751 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) 1752 --tls-priority default TLS protocol/cipher priority string 1753 --enable-gprof QEMU profiling with gprof 1754 --enable-profiler profiler support 1755 --enable-debug-stack-usage 1756 track the maximum stack usage of stacks created by qemu_alloc_stack 1757 --enable-plugins 1758 enable plugins via shared library loading 1759 --disable-containers don't use containers for cross-building 1760 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin] 1761 1762Optional features, enabled with --enable-FEATURE and 1763disabled with --disable-FEATURE, default is enabled if available 1764(unless built with --without-default-features): 1765 1766 system all system emulation targets 1767 user supported user emulation targets 1768 linux-user all linux usermode emulation targets 1769 bsd-user all BSD usermode emulation targets 1770 docs build documentation 1771 guest-agent build the QEMU Guest Agent 1772 guest-agent-msi build guest agent Windows MSI installation package 1773 pie Position Independent Executables 1774 modules modules support (non-Windows) 1775 module-upgrades try to load modules from alternate paths for upgrades 1776 debug-tcg TCG debugging (default is disabled) 1777 debug-info debugging information 1778 lto Enable Link-Time Optimization. 1779 sparse sparse checker 1780 safe-stack SafeStack Stack Smash Protection. Depends on 1781 clang/llvm >= 3.7 and requires coroutine backend ucontext. 1782 cfi Enable Control-Flow Integrity for indirect function calls. 1783 In case of a cfi violation, QEMU is terminated with SIGILL 1784 Depends on lto and is incompatible with modules 1785 Automatically enables Link-Time Optimization (lto) 1786 cfi-debug In case of a cfi violation, a message containing the line that 1787 triggered the error is written to stderr. After the error, 1788 QEMU is still terminated with SIGILL 1789 gnutls GNUTLS cryptography support 1790 nettle nettle cryptography support 1791 gcrypt libgcrypt cryptography support 1792 auth-pam PAM access control 1793 sdl SDL UI 1794 sdl-image SDL Image support for icons 1795 gtk gtk UI 1796 vte vte support for the gtk UI 1797 curses curses UI 1798 iconv font glyph conversion support 1799 vnc VNC UI support 1800 vnc-sasl SASL encryption for VNC server 1801 vnc-jpeg JPEG lossy compression for VNC server 1802 vnc-png PNG compression for VNC server 1803 cocoa Cocoa UI (Mac OS X only) 1804 virtfs VirtFS 1805 virtiofsd build virtiofs daemon (virtiofsd) 1806 libudev Use libudev to enumerate host devices 1807 mpath Multipath persistent reservation passthrough 1808 xen xen backend driver support 1809 xen-pci-passthrough PCI passthrough support for Xen 1810 brlapi BrlAPI (Braile) 1811 curl curl connectivity 1812 membarrier membarrier system call (for Linux 4.14+ or Windows) 1813 fdt fdt device tree 1814 kvm KVM acceleration support 1815 hax HAX acceleration support 1816 hvf Hypervisor.framework acceleration support 1817 whpx Windows Hypervisor Platform acceleration support 1818 rdma Enable RDMA-based migration 1819 pvrdma Enable PVRDMA support 1820 vde support for vde network 1821 netmap support for netmap network 1822 linux-aio Linux AIO support 1823 linux-io-uring Linux io_uring support 1824 cap-ng libcap-ng support 1825 attr attr and xattr support 1826 vhost-net vhost-net kernel acceleration support 1827 vhost-vsock virtio sockets device support 1828 vhost-scsi vhost-scsi kernel target support 1829 vhost-crypto vhost-user-crypto backend support 1830 vhost-kernel vhost kernel backend support 1831 vhost-user vhost-user backend support 1832 vhost-user-blk-server vhost-user-blk server support 1833 vhost-vdpa vhost-vdpa kernel backend support 1834 spice spice 1835 rbd rados block device (rbd) 1836 libiscsi iscsi support 1837 libnfs nfs support 1838 smartcard smartcard support (libcacard) 1839 u2f U2F support (u2f-emu) 1840 libusb libusb (for usb passthrough) 1841 live-block-migration Block migration in the main migration stream 1842 usb-redir usb network redirection support 1843 lzo support of lzo compression library 1844 snappy support of snappy compression library 1845 bzip2 support of bzip2 compression library 1846 (for reading bzip2-compressed dmg images) 1847 lzfse support of lzfse compression library 1848 (for reading lzfse-compressed dmg images) 1849 zstd support for zstd compression library 1850 (for migration compression and qcow2 cluster compression) 1851 seccomp seccomp support 1852 coroutine-pool coroutine freelist (better performance) 1853 glusterfs GlusterFS backend 1854 tpm TPM support 1855 libssh ssh block device support 1856 numa libnuma support 1857 libxml2 for Parallels image format 1858 tcmalloc tcmalloc support 1859 jemalloc jemalloc support 1860 avx2 AVX2 optimization support 1861 avx512f AVX512F optimization support 1862 replication replication support 1863 opengl opengl support 1864 virglrenderer virgl rendering support 1865 xfsctl xfsctl support 1866 qom-cast-debug cast debugging support 1867 tools build qemu-io, qemu-nbd and qemu-img tools 1868 bochs bochs image format support 1869 cloop cloop image format support 1870 dmg dmg image format support 1871 qcow1 qcow v1 image format support 1872 vdi vdi image format support 1873 vvfat vvfat image format support 1874 qed qed image format support 1875 parallels parallels image format support 1876 sheepdog sheepdog block driver support (deprecated) 1877 crypto-afalg Linux AF_ALG crypto backend driver 1878 capstone capstone disassembler support 1879 debug-mutex mutex debugging support 1880 libpmem libpmem support 1881 xkbcommon xkbcommon support 1882 rng-none dummy RNG, avoid using /dev/(u)random and getrandom() 1883 libdaxctl libdaxctl support 1884 fuse FUSE block device export 1885 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports 1886 1887NOTE: The object files are built at the place where configure is launched 1888EOF 1889exit 0 1890fi 1891 1892# Remove old dependency files to make sure that they get properly regenerated 1893rm -f */config-devices.mak.d 1894 1895if test -z "$python" 1896then 1897 error_exit "Python not found. Use --python=/path/to/python" 1898fi 1899if ! has "$make" 1900then 1901 error_exit "GNU make ($make) not found" 1902fi 1903 1904# Note that if the Python conditional here evaluates True we will exit 1905# with status 1 which is a shell 'false' value. 1906if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then 1907 error_exit "Cannot use '$python', Python >= 3.6 is required." \ 1908 "Use --python=/path/to/python to specify a supported Python." 1909fi 1910 1911# Preserve python version since some functionality is dependent on it 1912python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null) 1913 1914# Suppress writing compiled files 1915python="$python -B" 1916 1917if test -z "$meson"; then 1918 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then 1919 meson=meson 1920 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 1921 meson=git 1922 elif test -e "${source_path}/meson/meson.py" ; then 1923 meson=internal 1924 else 1925 if test "$explicit_python" = yes; then 1926 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found." 1927 else 1928 error_exit "Meson not found. Use --meson=/path/to/meson" 1929 fi 1930 fi 1931else 1932 # Meson uses its own Python interpreter to invoke other Python scripts, 1933 # but the user wants to use the one they specified with --python. 1934 # 1935 # We do not want to override the distro Python interpreter (and sometimes 1936 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so 1937 # just require --meson=git|internal together with --python. 1938 if test "$explicit_python" = yes; then 1939 case "$meson" in 1940 git | internal) ;; 1941 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;; 1942 esac 1943 fi 1944fi 1945 1946if test "$meson" = git; then 1947 git_submodules="${git_submodules} meson" 1948fi 1949 1950case "$meson" in 1951 git | internal) 1952 meson="$python ${source_path}/meson/meson.py" 1953 ;; 1954 *) meson=$(command -v "$meson") ;; 1955esac 1956 1957# Probe for ninja 1958 1959if test -z "$ninja"; then 1960 for c in ninja ninja-build samu; do 1961 if has $c; then 1962 ninja=$(command -v "$c") 1963 break 1964 fi 1965 done 1966 if test -z "$ninja"; then 1967 error_exit "Cannot find Ninja" 1968 fi 1969fi 1970 1971# Check that the C compiler works. Doing this here before testing 1972# the host CPU ensures that we had a valid CC to autodetect the 1973# $cpu var (and we should bail right here if that's not the case). 1974# It also allows the help message to be printed without a CC. 1975write_c_skeleton; 1976if compile_object ; then 1977 : C compiler works ok 1978else 1979 error_exit "\"$cc\" either does not exist or does not work" 1980fi 1981if ! compile_prog ; then 1982 error_exit "\"$cc\" cannot build an executable (is your linker broken?)" 1983fi 1984 1985# Consult white-list to determine whether to enable werror 1986# by default. Only enable by default for git builds 1987if test -z "$werror" ; then 1988 if test -e "$source_path/.git" && \ 1989 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then 1990 werror="yes" 1991 else 1992 werror="no" 1993 fi 1994fi 1995 1996if test "$targetos" = "bogus"; then 1997 # Now that we know that we're not printing the help and that 1998 # the compiler works (so the results of the check_defines we used 1999 # to identify the OS are reliable), if we didn't recognize the 2000 # host OS we should stop now. 2001 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" 2002fi 2003 2004# Check whether the compiler matches our minimum requirements: 2005cat > $TMPC << EOF 2006#if defined(__clang_major__) && defined(__clang_minor__) 2007# ifdef __apple_build_version__ 2008# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1) 2009# error You need at least XCode Clang v5.1 to compile QEMU 2010# endif 2011# else 2012# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4) 2013# error You need at least Clang v3.4 to compile QEMU 2014# endif 2015# endif 2016#elif defined(__GNUC__) && defined(__GNUC_MINOR__) 2017# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) 2018# error You need at least GCC v4.8 to compile QEMU 2019# endif 2020#else 2021# error You either need GCC or Clang to compiler QEMU 2022#endif 2023int main (void) { return 0; } 2024EOF 2025if ! compile_prog "" "" ; then 2026 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)" 2027fi 2028 2029# Accumulate -Wfoo and -Wno-bar separately. 2030# We will list all of the enable flags first, and the disable flags second. 2031# Note that we do not add -Werror, because that would enable it for all 2032# configure tests. If a configure test failed due to -Werror this would 2033# just silently disable some features, so it's too error prone. 2034 2035warn_flags= 2036add_to warn_flags -Wold-style-declaration 2037add_to warn_flags -Wold-style-definition 2038add_to warn_flags -Wtype-limits 2039add_to warn_flags -Wformat-security 2040add_to warn_flags -Wformat-y2k 2041add_to warn_flags -Winit-self 2042add_to warn_flags -Wignored-qualifiers 2043add_to warn_flags -Wempty-body 2044add_to warn_flags -Wnested-externs 2045add_to warn_flags -Wendif-labels 2046add_to warn_flags -Wexpansion-to-defined 2047add_to warn_flags -Wimplicit-fallthrough=2 2048 2049nowarn_flags= 2050add_to nowarn_flags -Wno-initializer-overrides 2051add_to nowarn_flags -Wno-missing-include-dirs 2052add_to nowarn_flags -Wno-shift-negative-value 2053add_to nowarn_flags -Wno-string-plus-int 2054add_to nowarn_flags -Wno-typedef-redefinition 2055add_to nowarn_flags -Wno-tautological-type-limit-compare 2056add_to nowarn_flags -Wno-psabi 2057 2058gcc_flags="$warn_flags $nowarn_flags" 2059 2060cc_has_warning_flag() { 2061 write_c_skeleton; 2062 2063 # Use the positive sense of the flag when testing for -Wno-wombat 2064 # support (gcc will happily accept the -Wno- form of unknown 2065 # warning options). 2066 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 2067 compile_prog "-Werror $optflag" "" 2068} 2069 2070for flag in $gcc_flags; do 2071 if cc_has_warning_flag $flag ; then 2072 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2073 fi 2074done 2075 2076if test "$stack_protector" != "no"; then 2077 cat > $TMPC << EOF 2078int main(int argc, char *argv[]) 2079{ 2080 char arr[64], *p = arr, *c = argv[0]; 2081 while (*c) { 2082 *p++ = *c++; 2083 } 2084 return 0; 2085} 2086EOF 2087 gcc_flags="-fstack-protector-strong -fstack-protector-all" 2088 sp_on=0 2089 for flag in $gcc_flags; do 2090 # We need to check both a compile and a link, since some compiler 2091 # setups fail only on a .c->.o compile and some only at link time 2092 if compile_object "-Werror $flag" && 2093 compile_prog "-Werror $flag" ""; then 2094 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 2095 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 2096 sp_on=1 2097 break 2098 fi 2099 done 2100 if test "$stack_protector" = yes; then 2101 if test $sp_on = 0; then 2102 error_exit "Stack protector not supported" 2103 fi 2104 fi 2105fi 2106 2107# Disable -Wmissing-braces on older compilers that warn even for 2108# the "universal" C zero initializer {0}. 2109cat > $TMPC << EOF 2110struct { 2111 int a[2]; 2112} x = {0}; 2113EOF 2114if compile_object "-Werror" "" ; then 2115 : 2116else 2117 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 2118fi 2119 2120# Our module code doesn't support Windows 2121if test "$modules" = "yes" && test "$mingw32" = "yes" ; then 2122 error_exit "Modules are not available for Windows" 2123fi 2124 2125# module_upgrades is only reasonable if modules are enabled 2126if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then 2127 error_exit "Can't enable module-upgrades as Modules are not enabled" 2128fi 2129 2130# Static linking is not possible with modules or PIE 2131if test "$static" = "yes" ; then 2132 if test "$modules" = "yes" ; then 2133 error_exit "static and modules are mutually incompatible" 2134 fi 2135fi 2136 2137# Unconditional check for compiler __thread support 2138 cat > $TMPC << EOF 2139static __thread int tls_var; 2140int main(void) { return tls_var; } 2141EOF 2142 2143if ! compile_prog "-Werror" "" ; then 2144 error_exit "Your compiler does not support the __thread specifier for " \ 2145 "Thread-Local Storage (TLS). Please upgrade to a version that does." 2146fi 2147 2148cat > $TMPC << EOF 2149 2150#ifdef __linux__ 2151# define THREAD __thread 2152#else 2153# define THREAD 2154#endif 2155static THREAD int tls_var; 2156int main(void) { return tls_var; } 2157EOF 2158 2159# Check we support --no-pie first; we will need this for building ROMs. 2160if compile_prog "-Werror -fno-pie" "-no-pie"; then 2161 CFLAGS_NOPIE="-fno-pie" 2162fi 2163 2164if test "$static" = "yes"; then 2165 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then 2166 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 2167 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS" 2168 pie="yes" 2169 elif test "$pie" = "yes"; then 2170 error_exit "-static-pie not available due to missing toolchain support" 2171 else 2172 QEMU_LDFLAGS="-static $QEMU_LDFLAGS" 2173 pie="no" 2174 fi 2175elif test "$pie" = "no"; then 2176 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS" 2177elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then 2178 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS" 2179 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS" 2180 pie="yes" 2181elif test "$pie" = "yes"; then 2182 error_exit "PIE not available due to missing toolchain support" 2183else 2184 echo "Disabling PIE due to missing toolchain support" 2185 pie="no" 2186fi 2187 2188# Detect support for PT_GNU_RELRO + DT_BIND_NOW. 2189# The combination is known as "full relro", because .got.plt is read-only too. 2190if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 2191 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS" 2192fi 2193 2194########################################## 2195# __sync_fetch_and_and requires at least -march=i486. Many toolchains 2196# use i686 as default anyway, but for those that don't, an explicit 2197# specification is necessary 2198 2199if test "$cpu" = "i386"; then 2200 cat > $TMPC << EOF 2201static int sfaa(int *ptr) 2202{ 2203 return __sync_fetch_and_and(ptr, 0); 2204} 2205 2206int main(void) 2207{ 2208 int val = 42; 2209 val = __sync_val_compare_and_swap(&val, 0, 1); 2210 sfaa(&val); 2211 return val; 2212} 2213EOF 2214 if ! compile_prog "" "" ; then 2215 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 2216 fi 2217fi 2218 2219######################################### 2220# Solaris specific configure tool chain decisions 2221 2222if test "$solaris" = "yes" ; then 2223 if has ar; then 2224 : 2225 else 2226 if test -f /usr/ccs/bin/ar ; then 2227 error_exit "No path includes ar" \ 2228 "Add /usr/ccs/bin to your path and rerun configure" 2229 fi 2230 error_exit "No path includes ar" 2231 fi 2232fi 2233 2234if test -z "${target_list+xxx}" ; then 2235 default_targets=yes 2236 for target in $default_target_list; do 2237 target_list="$target_list $target" 2238 done 2239 target_list="${target_list# }" 2240else 2241 default_targets=no 2242 target_list=$(echo "$target_list" | sed -e 's/,/ /g') 2243 for target in $target_list; do 2244 # Check that we recognised the target name; this allows a more 2245 # friendly error message than if we let it fall through. 2246 case " $default_target_list " in 2247 *" $target "*) 2248 ;; 2249 *) 2250 error_exit "Unknown target name '$target'" 2251 ;; 2252 esac 2253 done 2254fi 2255 2256for target in $target_list; do 2257 # if a deprecated target is enabled we note it here 2258 if echo "$deprecated_targets_list" | grep -q "$target"; then 2259 add_to deprecated_features $target 2260 fi 2261done 2262 2263# see if system emulation was really requested 2264case " $target_list " in 2265 *"-softmmu "*) softmmu=yes 2266 ;; 2267 *) softmmu=no 2268 ;; 2269esac 2270 2271feature_not_found() { 2272 feature=$1 2273 remedy=$2 2274 2275 error_exit "User requested feature $feature" \ 2276 "configure was not able to find it." \ 2277 "$remedy" 2278} 2279 2280# --- 2281# big/little endian test 2282cat > $TMPC << EOF 2283short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 2284short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 2285extern int foo(short *, short *); 2286int main(int argc, char *argv[]) { 2287 return foo(big_endian, little_endian); 2288} 2289EOF 2290 2291if compile_object ; then 2292 if strings -a $TMPO | grep -q BiGeNdIaN ; then 2293 bigendian="yes" 2294 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then 2295 bigendian="no" 2296 else 2297 echo big/little test failed 2298 fi 2299else 2300 echo big/little test failed 2301fi 2302 2303########################################## 2304# system tools 2305if test -z "$want_tools"; then 2306 if test "$softmmu" = "no"; then 2307 want_tools=no 2308 else 2309 want_tools=yes 2310 fi 2311fi 2312 2313########################################## 2314# Disable features only meaningful for system-mode emulation 2315if test "$softmmu" = "no"; then 2316 audio_drv_list="" 2317fi 2318 2319########################################## 2320# Some versions of Mac OS X incorrectly define SIZE_MAX 2321cat > $TMPC << EOF 2322#include <stdint.h> 2323#include <stdio.h> 2324int main(int argc, char *argv[]) { 2325 return printf("%zu", SIZE_MAX); 2326} 2327EOF 2328have_broken_size_max=no 2329if ! compile_object -Werror ; then 2330 have_broken_size_max=yes 2331fi 2332 2333########################################## 2334# L2TPV3 probe 2335 2336cat > $TMPC <<EOF 2337#include <sys/socket.h> 2338#include <linux/ip.h> 2339int main(void) { return sizeof(struct mmsghdr); } 2340EOF 2341if compile_prog "" "" ; then 2342 l2tpv3=yes 2343else 2344 l2tpv3=no 2345fi 2346 2347cat > $TMPC <<EOF 2348#include <sys/mman.h> 2349int main(int argc, char *argv[]) { 2350 return mlockall(MCL_FUTURE); 2351} 2352EOF 2353if compile_prog "" "" ; then 2354 have_mlockall=yes 2355else 2356 have_mlockall=no 2357fi 2358 2359######################################### 2360# vhost interdependencies and host support 2361 2362# vhost backends 2363if test "$vhost_user" = "yes" && test "$linux" != "yes"; then 2364 error_exit "vhost-user is only available on Linux" 2365fi 2366test "$vhost_vdpa" = "" && vhost_vdpa=$linux 2367if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then 2368 error_exit "vhost-vdpa is only available on Linux" 2369fi 2370test "$vhost_kernel" = "" && vhost_kernel=$linux 2371if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then 2372 error_exit "vhost-kernel is only available on Linux" 2373fi 2374 2375# vhost-kernel devices 2376test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel 2377if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then 2378 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" 2379fi 2380test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel 2381if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then 2382 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" 2383fi 2384 2385# vhost-user backends 2386test "$vhost_net_user" = "" && vhost_net_user=$vhost_user 2387if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then 2388 error_exit "--enable-vhost-net-user requires --enable-vhost-user" 2389fi 2390test "$vhost_crypto" = "" && vhost_crypto=$vhost_user 2391if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then 2392 error_exit "--enable-vhost-crypto requires --enable-vhost-user" 2393fi 2394test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user 2395if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then 2396 error_exit "--enable-vhost-user-fs requires --enable-vhost-user" 2397fi 2398#vhost-vdpa backends 2399test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa 2400if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then 2401 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" 2402fi 2403 2404# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity 2405if test "$vhost_net" = ""; then 2406 test "$vhost_net_user" = "yes" && vhost_net=yes 2407 test "$vhost_net_vdpa" = "yes" && vhost_net=yes 2408 test "$vhost_kernel" = "yes" && vhost_net=yes 2409fi 2410 2411########################################## 2412# pkg-config probe 2413 2414if ! has "$pkg_config_exe"; then 2415 error_exit "pkg-config binary '$pkg_config_exe' not found" 2416fi 2417 2418########################################## 2419# NPTL probe 2420 2421if test "$linux_user" = "yes"; then 2422 cat > $TMPC <<EOF 2423#include <sched.h> 2424#include <linux/futex.h> 2425int main(void) { 2426#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 2427#error bork 2428#endif 2429 return 0; 2430} 2431EOF 2432 if ! compile_object ; then 2433 feature_not_found "nptl" "Install glibc and linux kernel headers." 2434 fi 2435fi 2436 2437########################################## 2438# xen probe 2439 2440if test "$xen" != "disabled" ; then 2441 # Check whether Xen library path is specified via --extra-ldflags to avoid 2442 # overriding this setting with pkg-config output. If not, try pkg-config 2443 # to obtain all needed flags. 2444 2445 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2446 $pkg_config --exists xencontrol ; then 2447 xen_ctrl_version="$(printf '%d%02d%02d' \ 2448 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2449 xen=enabled 2450 xen_pc="xencontrol xenstore xenforeignmemory xengnttab" 2451 xen_pc="$xen_pc xenevtchn xendevicemodel" 2452 if $pkg_config --exists xentoolcore; then 2453 xen_pc="$xen_pc xentoolcore" 2454 fi 2455 xen_cflags="$($pkg_config --cflags $xen_pc)" 2456 xen_libs="$($pkg_config --libs $xen_pc)" 2457 else 2458 2459 xen_libs="-lxenstore -lxenctrl" 2460 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2461 2462 # First we test whether Xen headers and libraries are available. 2463 # If no, we are done and there is no Xen support. 2464 # If yes, more tests are run to detect the Xen version. 2465 2466 # Xen (any) 2467 cat > $TMPC <<EOF 2468#include <xenctrl.h> 2469int main(void) { 2470 return 0; 2471} 2472EOF 2473 if ! compile_prog "" "$xen_libs" ; then 2474 # Xen not found 2475 if test "$xen" = "enabled" ; then 2476 feature_not_found "xen" "Install xen devel" 2477 fi 2478 xen=disabled 2479 2480 # Xen unstable 2481 elif 2482 cat > $TMPC <<EOF && 2483#undef XC_WANT_COMPAT_DEVICEMODEL_API 2484#define __XEN_TOOLS__ 2485#include <xendevicemodel.h> 2486#include <xenforeignmemory.h> 2487int main(void) { 2488 xendevicemodel_handle *xd; 2489 xenforeignmemory_handle *xfmem; 2490 2491 xd = xendevicemodel_open(0, 0); 2492 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 2493 2494 xfmem = xenforeignmemory_open(0, 0); 2495 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2496 2497 return 0; 2498} 2499EOF 2500 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2501 then 2502 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2503 xen_ctrl_version=41100 2504 xen=enabled 2505 elif 2506 cat > $TMPC <<EOF && 2507#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2508#include <xenforeignmemory.h> 2509#include <xentoolcore.h> 2510int main(void) { 2511 xenforeignmemory_handle *xfmem; 2512 2513 xfmem = xenforeignmemory_open(0, 0); 2514 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2515 xentoolcore_restrict_all(0); 2516 2517 return 0; 2518} 2519EOF 2520 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2521 then 2522 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2523 xen_ctrl_version=41000 2524 xen=enabled 2525 elif 2526 cat > $TMPC <<EOF && 2527#undef XC_WANT_COMPAT_DEVICEMODEL_API 2528#define __XEN_TOOLS__ 2529#include <xendevicemodel.h> 2530int main(void) { 2531 xendevicemodel_handle *xd; 2532 2533 xd = xendevicemodel_open(0, 0); 2534 xendevicemodel_close(xd); 2535 2536 return 0; 2537} 2538EOF 2539 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2540 then 2541 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2542 xen_ctrl_version=40900 2543 xen=enabled 2544 elif 2545 cat > $TMPC <<EOF && 2546/* 2547 * If we have stable libs the we don't want the libxc compat 2548 * layers, regardless of what CFLAGS we may have been given. 2549 * 2550 * Also, check if xengnttab_grant_copy_segment_t is defined and 2551 * grant copy operation is implemented. 2552 */ 2553#undef XC_WANT_COMPAT_EVTCHN_API 2554#undef XC_WANT_COMPAT_GNTTAB_API 2555#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2556#include <xenctrl.h> 2557#include <xenstore.h> 2558#include <xenevtchn.h> 2559#include <xengnttab.h> 2560#include <xenforeignmemory.h> 2561#include <stdint.h> 2562#include <xen/hvm/hvm_info_table.h> 2563#if !defined(HVM_MAX_VCPUS) 2564# error HVM_MAX_VCPUS not defined 2565#endif 2566int main(void) { 2567 xc_interface *xc = NULL; 2568 xenforeignmemory_handle *xfmem; 2569 xenevtchn_handle *xe; 2570 xengnttab_handle *xg; 2571 xengnttab_grant_copy_segment_t* seg = NULL; 2572 2573 xs_daemon_open(); 2574 2575 xc = xc_interface_open(0, 0, 0); 2576 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2577 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2578 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2579 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2580 2581 xfmem = xenforeignmemory_open(0, 0); 2582 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2583 2584 xe = xenevtchn_open(0, 0); 2585 xenevtchn_fd(xe); 2586 2587 xg = xengnttab_open(0, 0); 2588 xengnttab_grant_copy(xg, 0, seg); 2589 2590 return 0; 2591} 2592EOF 2593 compile_prog "" "$xen_libs $xen_stable_libs" 2594 then 2595 xen_ctrl_version=40800 2596 xen=enabled 2597 elif 2598 cat > $TMPC <<EOF && 2599/* 2600 * If we have stable libs the we don't want the libxc compat 2601 * layers, regardless of what CFLAGS we may have been given. 2602 */ 2603#undef XC_WANT_COMPAT_EVTCHN_API 2604#undef XC_WANT_COMPAT_GNTTAB_API 2605#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2606#include <xenctrl.h> 2607#include <xenstore.h> 2608#include <xenevtchn.h> 2609#include <xengnttab.h> 2610#include <xenforeignmemory.h> 2611#include <stdint.h> 2612#include <xen/hvm/hvm_info_table.h> 2613#if !defined(HVM_MAX_VCPUS) 2614# error HVM_MAX_VCPUS not defined 2615#endif 2616int main(void) { 2617 xc_interface *xc = NULL; 2618 xenforeignmemory_handle *xfmem; 2619 xenevtchn_handle *xe; 2620 xengnttab_handle *xg; 2621 2622 xs_daemon_open(); 2623 2624 xc = xc_interface_open(0, 0, 0); 2625 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2626 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2627 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2628 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2629 2630 xfmem = xenforeignmemory_open(0, 0); 2631 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2632 2633 xe = xenevtchn_open(0, 0); 2634 xenevtchn_fd(xe); 2635 2636 xg = xengnttab_open(0, 0); 2637 xengnttab_map_grant_ref(xg, 0, 0, 0); 2638 2639 return 0; 2640} 2641EOF 2642 compile_prog "" "$xen_libs $xen_stable_libs" 2643 then 2644 xen_ctrl_version=40701 2645 xen=enabled 2646 2647 # Xen 4.6 2648 elif 2649 cat > $TMPC <<EOF && 2650#include <xenctrl.h> 2651#include <xenstore.h> 2652#include <stdint.h> 2653#include <xen/hvm/hvm_info_table.h> 2654#if !defined(HVM_MAX_VCPUS) 2655# error HVM_MAX_VCPUS not defined 2656#endif 2657int main(void) { 2658 xc_interface *xc; 2659 xs_daemon_open(); 2660 xc = xc_interface_open(0, 0, 0); 2661 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2662 xc_gnttab_open(NULL, 0); 2663 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2664 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2665 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2666 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2667 return 0; 2668} 2669EOF 2670 compile_prog "" "$xen_libs" 2671 then 2672 xen_ctrl_version=40600 2673 xen=enabled 2674 2675 # Xen 4.5 2676 elif 2677 cat > $TMPC <<EOF && 2678#include <xenctrl.h> 2679#include <xenstore.h> 2680#include <stdint.h> 2681#include <xen/hvm/hvm_info_table.h> 2682#if !defined(HVM_MAX_VCPUS) 2683# error HVM_MAX_VCPUS not defined 2684#endif 2685int main(void) { 2686 xc_interface *xc; 2687 xs_daemon_open(); 2688 xc = xc_interface_open(0, 0, 0); 2689 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2690 xc_gnttab_open(NULL, 0); 2691 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2692 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2693 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2694 return 0; 2695} 2696EOF 2697 compile_prog "" "$xen_libs" 2698 then 2699 xen_ctrl_version=40500 2700 xen=enabled 2701 2702 elif 2703 cat > $TMPC <<EOF && 2704#include <xenctrl.h> 2705#include <xenstore.h> 2706#include <stdint.h> 2707#include <xen/hvm/hvm_info_table.h> 2708#if !defined(HVM_MAX_VCPUS) 2709# error HVM_MAX_VCPUS not defined 2710#endif 2711int main(void) { 2712 xc_interface *xc; 2713 xs_daemon_open(); 2714 xc = xc_interface_open(0, 0, 0); 2715 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2716 xc_gnttab_open(NULL, 0); 2717 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2718 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2719 return 0; 2720} 2721EOF 2722 compile_prog "" "$xen_libs" 2723 then 2724 xen_ctrl_version=40200 2725 xen=enabled 2726 2727 else 2728 if test "$xen" = "enabled" ; then 2729 feature_not_found "xen (unsupported version)" \ 2730 "Install a supported xen (xen 4.2 or newer)" 2731 fi 2732 xen=disabled 2733 fi 2734 2735 if test "$xen" = enabled; then 2736 if test $xen_ctrl_version -ge 40701 ; then 2737 xen_libs="$xen_libs $xen_stable_libs " 2738 fi 2739 fi 2740 fi 2741fi 2742 2743########################################## 2744# GNUTLS probe 2745 2746if test "$gnutls" != "no"; then 2747 pass="no" 2748 if $pkg_config --exists "gnutls >= 3.1.18"; then 2749 gnutls_cflags=$($pkg_config --cflags gnutls) 2750 gnutls_libs=$($pkg_config --libs gnutls) 2751 # Packaging for the static libraries is not always correct. 2752 # At least ubuntu 18.04 ships only shared libraries. 2753 write_c_skeleton 2754 if compile_prog "" "$gnutls_libs" ; then 2755 pass="yes" 2756 fi 2757 fi 2758 if test "$pass" = "no" && test "$gnutls" = "yes"; then 2759 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" 2760 else 2761 gnutls="$pass" 2762 fi 2763fi 2764 2765 2766# If user didn't give a --disable/enable-gcrypt flag, 2767# then mark as disabled if user requested nettle 2768# explicitly 2769if test -z "$gcrypt" 2770then 2771 if test "$nettle" = "yes" 2772 then 2773 gcrypt="no" 2774 fi 2775fi 2776 2777# If user didn't give a --disable/enable-nettle flag, 2778# then mark as disabled if user requested gcrypt 2779# explicitly 2780if test -z "$nettle" 2781then 2782 if test "$gcrypt" = "yes" 2783 then 2784 nettle="no" 2785 fi 2786fi 2787 2788has_libgcrypt() { 2789 if ! has "libgcrypt-config" 2790 then 2791 return 1 2792 fi 2793 2794 if test -n "$cross_prefix" 2795 then 2796 host=$(libgcrypt-config --host) 2797 if test "$host-" != $cross_prefix 2798 then 2799 return 1 2800 fi 2801 fi 2802 2803 maj=`libgcrypt-config --version | awk -F . '{print $1}'` 2804 min=`libgcrypt-config --version | awk -F . '{print $2}'` 2805 2806 if test $maj != 1 || test $min -lt 5 2807 then 2808 return 1 2809 fi 2810 2811 return 0 2812} 2813 2814 2815if test "$nettle" != "no"; then 2816 pass="no" 2817 if $pkg_config --exists "nettle >= 2.7.1"; then 2818 nettle_cflags=$($pkg_config --cflags nettle) 2819 nettle_libs=$($pkg_config --libs nettle) 2820 nettle_version=$($pkg_config --modversion nettle) 2821 # Link test to make sure the given libraries work (e.g for static). 2822 write_c_skeleton 2823 if compile_prog "" "$nettle_libs" ; then 2824 if test -z "$gcrypt"; then 2825 gcrypt="no" 2826 fi 2827 pass="yes" 2828 fi 2829 fi 2830 if test "$pass" = "yes" 2831 then 2832 cat > $TMPC << EOF 2833#include <nettle/xts.h> 2834int main(void) { 2835 return 0; 2836} 2837EOF 2838 if compile_prog "$nettle_cflags" "$nettle_libs" ; then 2839 nettle_xts=yes 2840 qemu_private_xts=no 2841 fi 2842 fi 2843 if test "$pass" = "no" && test "$nettle" = "yes"; then 2844 feature_not_found "nettle" "Install nettle devel >= 2.7.1" 2845 else 2846 nettle="$pass" 2847 fi 2848fi 2849 2850if test "$gcrypt" != "no"; then 2851 pass="no" 2852 if has_libgcrypt; then 2853 gcrypt_cflags=$(libgcrypt-config --cflags) 2854 gcrypt_libs=$(libgcrypt-config --libs) 2855 # Debian has removed -lgpg-error from libgcrypt-config 2856 # as it "spreads unnecessary dependencies" which in 2857 # turn breaks static builds... 2858 if test "$static" = "yes" 2859 then 2860 gcrypt_libs="$gcrypt_libs -lgpg-error" 2861 fi 2862 2863 # Link test to make sure the given libraries work (e.g for static). 2864 write_c_skeleton 2865 if compile_prog "" "$gcrypt_libs" ; then 2866 pass="yes" 2867 fi 2868 fi 2869 if test "$pass" = "yes"; then 2870 gcrypt="yes" 2871 cat > $TMPC << EOF 2872#include <gcrypt.h> 2873int main(void) { 2874 gcry_mac_hd_t handle; 2875 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 2876 GCRY_MAC_FLAG_SECURE, NULL); 2877 return 0; 2878} 2879EOF 2880 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 2881 gcrypt_hmac=yes 2882 fi 2883 cat > $TMPC << EOF 2884#include <gcrypt.h> 2885int main(void) { 2886 gcry_cipher_hd_t handle; 2887 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0); 2888 return 0; 2889} 2890EOF 2891 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 2892 gcrypt_xts=yes 2893 qemu_private_xts=no 2894 fi 2895 elif test "$gcrypt" = "yes"; then 2896 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" 2897 else 2898 gcrypt="no" 2899 fi 2900fi 2901 2902 2903if test "$gcrypt" = "yes" && test "$nettle" = "yes" 2904then 2905 error_exit "Only one of gcrypt & nettle can be enabled" 2906fi 2907 2908########################################## 2909# libtasn1 - only for the TLS creds/session test suite 2910 2911tasn1=yes 2912tasn1_cflags="" 2913tasn1_libs="" 2914if $pkg_config --exists "libtasn1"; then 2915 tasn1_cflags=$($pkg_config --cflags libtasn1) 2916 tasn1_libs=$($pkg_config --libs libtasn1) 2917else 2918 tasn1=no 2919fi 2920 2921 2922########################################## 2923# PAM probe 2924 2925if test "$auth_pam" != "no"; then 2926 cat > $TMPC <<EOF 2927#include <security/pam_appl.h> 2928#include <stdio.h> 2929int main(void) { 2930 const char *service_name = "qemu"; 2931 const char *user = "frank"; 2932 const struct pam_conv pam_conv = { 0 }; 2933 pam_handle_t *pamh = NULL; 2934 pam_start(service_name, user, &pam_conv, &pamh); 2935 return 0; 2936} 2937EOF 2938 if compile_prog "" "-lpam" ; then 2939 auth_pam=yes 2940 else 2941 if test "$auth_pam" = "yes"; then 2942 feature_not_found "PAM" "Install PAM development package" 2943 else 2944 auth_pam=no 2945 fi 2946 fi 2947fi 2948 2949########################################## 2950# VTE probe 2951 2952if test "$vte" != "no"; then 2953 vteminversion="0.32.0" 2954 if $pkg_config --exists "vte-2.91"; then 2955 vtepackage="vte-2.91" 2956 else 2957 vtepackage="vte-2.90" 2958 fi 2959 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 2960 vte_cflags=$($pkg_config --cflags $vtepackage) 2961 vte_libs=$($pkg_config --libs $vtepackage) 2962 vteversion=$($pkg_config --modversion $vtepackage) 2963 vte="yes" 2964 elif test "$vte" = "yes"; then 2965 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 2966 else 2967 vte="no" 2968 fi 2969fi 2970 2971########################################## 2972# RDMA needs OpenFabrics libraries 2973if test "$rdma" != "no" ; then 2974 cat > $TMPC <<EOF 2975#include <rdma/rdma_cma.h> 2976int main(void) { return 0; } 2977EOF 2978 rdma_libs="-lrdmacm -libverbs -libumad" 2979 if compile_prog "" "$rdma_libs" ; then 2980 rdma="yes" 2981 else 2982 if test "$rdma" = "yes" ; then 2983 error_exit \ 2984 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 2985 " Your options:" \ 2986 " (1) Fast: Install infiniband packages (devel) from your distro." \ 2987 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 2988 " (3) Also: Install softiwarp if you don't have RDMA hardware" 2989 fi 2990 rdma="no" 2991 fi 2992fi 2993 2994########################################## 2995# PVRDMA detection 2996 2997cat > $TMPC <<EOF && 2998#include <sys/mman.h> 2999 3000int 3001main(void) 3002{ 3003 char buf = 0; 3004 void *addr = &buf; 3005 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 3006 3007 return 0; 3008} 3009EOF 3010 3011if test "$rdma" = "yes" ; then 3012 case "$pvrdma" in 3013 "") 3014 if compile_prog "" ""; then 3015 pvrdma="yes" 3016 else 3017 pvrdma="no" 3018 fi 3019 ;; 3020 "yes") 3021 if ! compile_prog "" ""; then 3022 error_exit "PVRDMA is not supported since mremap is not implemented" 3023 fi 3024 pvrdma="yes" 3025 ;; 3026 "no") 3027 pvrdma="no" 3028 ;; 3029 esac 3030else 3031 if test "$pvrdma" = "yes" ; then 3032 error_exit "PVRDMA requires rdma suppport" 3033 fi 3034 pvrdma="no" 3035fi 3036 3037# Let's see if enhanced reg_mr is supported 3038if test "$pvrdma" = "yes" ; then 3039 3040cat > $TMPC <<EOF && 3041#include <infiniband/verbs.h> 3042 3043int 3044main(void) 3045{ 3046 struct ibv_mr *mr; 3047 struct ibv_pd *pd = NULL; 3048 size_t length = 10; 3049 uint64_t iova = 0; 3050 int access = 0; 3051 void *addr = NULL; 3052 3053 mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 3054 3055 ibv_dereg_mr(mr); 3056 3057 return 0; 3058} 3059EOF 3060 if ! compile_prog "" "-libverbs"; then 3061 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 3062 fi 3063fi 3064 3065########################################## 3066# xfsctl() probe, used for file-posix.c 3067if test "$xfs" != "no" ; then 3068 cat > $TMPC << EOF 3069#include <stddef.h> /* NULL */ 3070#include <xfs/xfs.h> 3071int main(void) 3072{ 3073 xfsctl(NULL, 0, 0, NULL); 3074 return 0; 3075} 3076EOF 3077 if compile_prog "" "" ; then 3078 xfs="yes" 3079 else 3080 if test "$xfs" = "yes" ; then 3081 feature_not_found "xfs" "Install xfsprogs/xfslibs devel" 3082 fi 3083 xfs=no 3084 fi 3085fi 3086 3087########################################## 3088# vde libraries probe 3089if test "$vde" != "no" ; then 3090 vde_libs="-lvdeplug" 3091 cat > $TMPC << EOF 3092#include <libvdeplug.h> 3093int main(void) 3094{ 3095 struct vde_open_args a = {0, 0, 0}; 3096 char s[] = ""; 3097 vde_open(s, s, &a); 3098 return 0; 3099} 3100EOF 3101 if compile_prog "" "$vde_libs" ; then 3102 vde=yes 3103 else 3104 if test "$vde" = "yes" ; then 3105 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3106 fi 3107 vde=no 3108 fi 3109fi 3110 3111########################################## 3112# netmap support probe 3113# Apart from looking for netmap headers, we make sure that the host API version 3114# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 3115# a minor/major version number. Minor new features will be marked with values up 3116# to 15, and if something happens that requires a change to the backend we will 3117# move above 15, submit the backend fixes and modify this two bounds. 3118if test "$netmap" != "no" ; then 3119 cat > $TMPC << EOF 3120#include <inttypes.h> 3121#include <net/if.h> 3122#include <net/netmap.h> 3123#include <net/netmap_user.h> 3124#if (NETMAP_API < 11) || (NETMAP_API > 15) 3125#error 3126#endif 3127int main(void) { return 0; } 3128EOF 3129 if compile_prog "" "" ; then 3130 netmap=yes 3131 else 3132 if test "$netmap" = "yes" ; then 3133 feature_not_found "netmap" 3134 fi 3135 netmap=no 3136 fi 3137fi 3138 3139########################################## 3140# detect CoreAudio 3141if test "$coreaudio" != "no" ; then 3142 coreaudio_libs="-framework CoreAudio" 3143 cat > $TMPC << EOF 3144#include <CoreAudio/CoreAudio.h> 3145int main(void) 3146{ 3147 return (int)AudioGetCurrentHostTime(); 3148} 3149EOF 3150 if compile_prog "" "$coreaudio_libs" ; then 3151 coreaudio=yes 3152 else 3153 coreaudio=no 3154 fi 3155fi 3156 3157########################################## 3158# Sound support libraries probe 3159 3160audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3161for drv in $audio_drv_list; do 3162 case $drv in 3163 alsa | try-alsa) 3164 if $pkg_config alsa --exists; then 3165 alsa_libs=$($pkg_config alsa --libs) 3166 alsa_cflags=$($pkg_config alsa --cflags) 3167 alsa=yes 3168 if test "$drv" = "try-alsa"; then 3169 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/') 3170 fi 3171 else 3172 if test "$drv" = "try-alsa"; then 3173 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//') 3174 else 3175 error_exit "$drv check failed" \ 3176 "Make sure to have the $drv libs and headers installed." 3177 fi 3178 fi 3179 ;; 3180 3181 pa | try-pa) 3182 if $pkg_config libpulse --exists; then 3183 libpulse=yes 3184 pulse_libs=$($pkg_config libpulse --libs) 3185 pulse_cflags=$($pkg_config libpulse --cflags) 3186 if test "$drv" = "try-pa"; then 3187 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/') 3188 fi 3189 else 3190 if test "$drv" = "try-pa"; then 3191 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//') 3192 else 3193 error_exit "$drv check failed" \ 3194 "Make sure to have the $drv libs and headers installed." 3195 fi 3196 fi 3197 ;; 3198 3199 sdl) 3200 if test "$sdl" = "no"; then 3201 error_exit "sdl not found or disabled, can not use sdl audio driver" 3202 fi 3203 ;; 3204 3205 try-sdl) 3206 if test "$sdl" = "no"; then 3207 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//') 3208 else 3209 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/') 3210 fi 3211 ;; 3212 3213 coreaudio | try-coreaudio) 3214 if test "$coreaudio" = "no"; then 3215 if test "$drv" = "try-coreaudio"; then 3216 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio//') 3217 else 3218 error_exit "$drv check failed" \ 3219 "Make sure to have the $drv is available." 3220 fi 3221 else 3222 coreaudio_libs="-framework CoreAudio" 3223 if test "$drv" = "try-coreaudio"; then 3224 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio/coreaudio/') 3225 fi 3226 fi 3227 ;; 3228 3229 dsound) 3230 dsound_libs="-lole32 -ldxguid" 3231 audio_win_int="yes" 3232 ;; 3233 3234 oss) 3235 oss_libs="$oss_lib" 3236 ;; 3237 3238 jack | try-jack) 3239 if $pkg_config jack --exists; then 3240 libjack=yes 3241 jack_libs=$($pkg_config jack --libs) 3242 if test "$drv" = "try-jack"; then 3243 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/') 3244 fi 3245 else 3246 if test "$drv" = "try-jack"; then 3247 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//') 3248 else 3249 error_exit "$drv check failed" \ 3250 "Make sure to have the $drv libs and headers installed." 3251 fi 3252 fi 3253 ;; 3254 3255 *) 3256 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 3257 error_exit "Unknown driver '$drv' selected" \ 3258 "Possible drivers are: $audio_possible_drivers" 3259 } 3260 ;; 3261 esac 3262done 3263 3264########################################## 3265# glib support probe 3266 3267glib_req_ver=2.48 3268glib_modules=gthread-2.0 3269if test "$modules" = yes; then 3270 glib_modules="$glib_modules gmodule-export-2.0" 3271fi 3272if test "$plugins" = yes; then 3273 glib_modules="$glib_modules gmodule-2.0" 3274fi 3275 3276for i in $glib_modules; do 3277 if $pkg_config --atleast-version=$glib_req_ver $i; then 3278 glib_cflags=$($pkg_config --cflags $i) 3279 glib_libs=$($pkg_config --libs $i) 3280 else 3281 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3282 fi 3283done 3284 3285# This workaround is required due to a bug in pkg-config file for glib as it 3286# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3287 3288if test "$static" = yes && test "$mingw32" = yes; then 3289 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags" 3290fi 3291 3292if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 3293 gio_cflags=$($pkg_config --cflags gio-2.0) 3294 gio_libs=$($pkg_config --libs gio-2.0) 3295 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 3296 if [ ! -x "$gdbus_codegen" ]; then 3297 gdbus_codegen= 3298 fi 3299 # Check that the libraries actually work -- Ubuntu 18.04 ships 3300 # with pkg-config --static --libs data for gio-2.0 that is missing 3301 # -lblkid and will give a link error. 3302 cat > $TMPC <<EOF 3303#include <gio/gio.h> 3304int main(void) 3305{ 3306 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0); 3307 return 0; 3308} 3309EOF 3310 if compile_prog "$gio_cflags" "$gio_libs" ; then 3311 gio=yes 3312 else 3313 gio=no 3314 fi 3315else 3316 gio=no 3317fi 3318 3319if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 3320 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 3321 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 3322fi 3323 3324# Sanity check that the current size_t matches the 3325# size that glib thinks it should be. This catches 3326# problems on multi-arch where people try to build 3327# 32-bit QEMU while pointing at 64-bit glib headers 3328cat > $TMPC <<EOF 3329#include <glib.h> 3330#include <unistd.h> 3331 3332#define QEMU_BUILD_BUG_ON(x) \ 3333 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3334 3335int main(void) { 3336 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3337 return 0; 3338} 3339EOF 3340 3341if ! compile_prog "$glib_cflags" "$glib_libs" ; then 3342 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3343 "You probably need to set PKG_CONFIG_LIBDIR"\ 3344 "to point to the right pkg-config files for your"\ 3345 "build target" 3346fi 3347 3348# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3349cat > $TMPC << EOF 3350#include <glib.h> 3351int main(void) { return 0; } 3352EOF 3353if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3354 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3355 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3356 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS" 3357 fi 3358fi 3359 3360# Silence clang warnings triggered by glib < 2.57.2 3361cat > $TMPC << EOF 3362#include <glib.h> 3363typedef struct Foo { 3364 int i; 3365} Foo; 3366static void foo_free(Foo *f) 3367{ 3368 g_free(f); 3369} 3370G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 3371int main(void) { return 0; } 3372EOF 3373if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3374 if cc_has_warning_flag "-Wno-unused-function"; then 3375 glib_cflags="$glib_cflags -Wno-unused-function" 3376 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function" 3377 fi 3378fi 3379 3380########################################## 3381# SHA command probe for modules 3382if test "$modules" = yes; then 3383 shacmd_probe="sha1sum sha1 shasum" 3384 for c in $shacmd_probe; do 3385 if has $c; then 3386 shacmd="$c" 3387 break 3388 fi 3389 done 3390 if test "$shacmd" = ""; then 3391 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3392 fi 3393fi 3394 3395########################################## 3396# pthread probe 3397PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3398 3399pthread=no 3400cat > $TMPC << EOF 3401#include <pthread.h> 3402static void *f(void *p) { return NULL; } 3403int main(void) { 3404 pthread_t thread; 3405 pthread_create(&thread, 0, f, 0); 3406 return 0; 3407} 3408EOF 3409if compile_prog "" "" ; then 3410 pthread=yes 3411else 3412 for pthread_lib in $PTHREADLIBS_LIST; do 3413 if compile_prog "" "$pthread_lib" ; then 3414 pthread=yes 3415 break 3416 fi 3417 done 3418fi 3419 3420if test "$mingw32" != yes && test "$pthread" = no; then 3421 error_exit "pthread check failed" \ 3422 "Make sure to have the pthread libs and headers installed." 3423fi 3424 3425# check for pthread_setname_np with thread id 3426pthread_setname_np_w_tid=no 3427cat > $TMPC << EOF 3428#include <pthread.h> 3429 3430static void *f(void *p) { return NULL; } 3431int main(void) 3432{ 3433 pthread_t thread; 3434 pthread_create(&thread, 0, f, 0); 3435 pthread_setname_np(thread, "QEMU"); 3436 return 0; 3437} 3438EOF 3439if compile_prog "" "$pthread_lib" ; then 3440 pthread_setname_np_w_tid=yes 3441fi 3442 3443# check for pthread_setname_np without thread id 3444pthread_setname_np_wo_tid=no 3445cat > $TMPC << EOF 3446#include <pthread.h> 3447 3448static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; } 3449int main(void) 3450{ 3451 pthread_t thread; 3452 pthread_create(&thread, 0, f, 0); 3453 return 0; 3454} 3455EOF 3456if compile_prog "" "$pthread_lib" ; then 3457 pthread_setname_np_wo_tid=yes 3458fi 3459 3460########################################## 3461# libssh probe 3462if test "$libssh" != "no" ; then 3463 if $pkg_config --exists libssh; then 3464 libssh_cflags=$($pkg_config libssh --cflags) 3465 libssh_libs=$($pkg_config libssh --libs) 3466 libssh=yes 3467 else 3468 if test "$libssh" = "yes" ; then 3469 error_exit "libssh required for --enable-libssh" 3470 fi 3471 libssh=no 3472 fi 3473fi 3474 3475########################################## 3476# Check for libssh 0.8 3477# This is done like this instead of using the LIBSSH_VERSION_* and 3478# SSH_VERSION_* macros because some distributions in the past shipped 3479# snapshots of the future 0.8 from Git, and those snapshots did not 3480# have updated version numbers (still referring to 0.7.0). 3481 3482if test "$libssh" = "yes"; then 3483 cat > $TMPC <<EOF 3484#include <libssh/libssh.h> 3485int main(void) { return ssh_get_server_publickey(NULL, NULL); } 3486EOF 3487 if compile_prog "$libssh_cflags" "$libssh_libs"; then 3488 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" 3489 fi 3490fi 3491 3492########################################## 3493# linux-aio probe 3494 3495if test "$linux_aio" != "no" ; then 3496 cat > $TMPC <<EOF 3497#include <libaio.h> 3498#include <sys/eventfd.h> 3499#include <stddef.h> 3500int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 3501EOF 3502 if compile_prog "" "-laio" ; then 3503 linux_aio=yes 3504 else 3505 if test "$linux_aio" = "yes" ; then 3506 feature_not_found "linux AIO" "Install libaio devel" 3507 fi 3508 linux_aio=no 3509 fi 3510fi 3511########################################## 3512# linux-io-uring probe 3513 3514if test "$linux_io_uring" != "no" ; then 3515 if $pkg_config liburing; then 3516 linux_io_uring_cflags=$($pkg_config --cflags liburing) 3517 linux_io_uring_libs=$($pkg_config --libs liburing) 3518 linux_io_uring=yes 3519 else 3520 if test "$linux_io_uring" = "yes" ; then 3521 feature_not_found "linux io_uring" "Install liburing devel" 3522 fi 3523 linux_io_uring=no 3524 fi 3525fi 3526 3527########################################## 3528# TPM emulation is only on POSIX 3529 3530if test "$tpm" = ""; then 3531 if test "$mingw32" = "yes"; then 3532 tpm=no 3533 else 3534 tpm=yes 3535 fi 3536elif test "$tpm" = "yes"; then 3537 if test "$mingw32" = "yes" ; then 3538 error_exit "TPM emulation only available on POSIX systems" 3539 fi 3540fi 3541 3542########################################## 3543# iovec probe 3544cat > $TMPC <<EOF 3545#include <sys/types.h> 3546#include <sys/uio.h> 3547#include <unistd.h> 3548int main(void) { return sizeof(struct iovec); } 3549EOF 3550iovec=no 3551if compile_prog "" "" ; then 3552 iovec=yes 3553fi 3554 3555########################################## 3556# fdt probe 3557 3558case "$fdt" in 3559 auto | enabled | internal) 3560 # Simpler to always update submodule, even if not needed. 3561 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then 3562 git_submodules="${git_submodules} dtc" 3563 fi 3564 ;; 3565esac 3566 3567########################################## 3568# opengl probe (for sdl2, gtk, milkymist-tmu2) 3569 3570gbm="no" 3571if $pkg_config gbm; then 3572 gbm_cflags="$($pkg_config --cflags gbm)" 3573 gbm_libs="$($pkg_config --libs gbm)" 3574 gbm="yes" 3575fi 3576 3577if test "$opengl" != "no" ; then 3578 opengl_pkgs="epoxy gbm" 3579 if $pkg_config $opengl_pkgs; then 3580 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 3581 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 3582 opengl=yes 3583 else 3584 if test "$opengl" = "yes" ; then 3585 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 3586 fi 3587 opengl_cflags="" 3588 opengl_libs="" 3589 opengl=no 3590 fi 3591fi 3592 3593if test "$opengl" = "yes"; then 3594 cat > $TMPC << EOF 3595#include <epoxy/egl.h> 3596#ifndef EGL_MESA_image_dma_buf_export 3597# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 3598#endif 3599int main(void) { return 0; } 3600EOF 3601 if compile_prog "" "" ; then 3602 opengl_dmabuf=yes 3603 fi 3604fi 3605 3606########################################## 3607# libxml2 probe 3608if test "$libxml2" != "no" ; then 3609 if $pkg_config --exists libxml-2.0; then 3610 libxml2="yes" 3611 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 3612 libxml2_libs=$($pkg_config --libs libxml-2.0) 3613 else 3614 if test "$libxml2" = "yes"; then 3615 feature_not_found "libxml2" "Install libxml2 devel" 3616 fi 3617 libxml2="no" 3618 fi 3619fi 3620 3621# Check for inotify functions when we are building linux-user 3622# emulator. This is done because older glibc versions don't 3623# have syscall stubs for these implemented. In that case we 3624# don't provide them even if kernel supports them. 3625# 3626inotify=no 3627cat > $TMPC << EOF 3628#include <sys/inotify.h> 3629 3630int 3631main(void) 3632{ 3633 /* try to start inotify */ 3634 return inotify_init(); 3635} 3636EOF 3637if compile_prog "" "" ; then 3638 inotify=yes 3639fi 3640 3641inotify1=no 3642cat > $TMPC << EOF 3643#include <sys/inotify.h> 3644 3645int 3646main(void) 3647{ 3648 /* try to start inotify */ 3649 return inotify_init1(0); 3650} 3651EOF 3652if compile_prog "" "" ; then 3653 inotify1=yes 3654fi 3655 3656# check if pipe2 is there 3657pipe2=no 3658cat > $TMPC << EOF 3659#include <unistd.h> 3660#include <fcntl.h> 3661 3662int main(void) 3663{ 3664 int pipefd[2]; 3665 return pipe2(pipefd, O_CLOEXEC); 3666} 3667EOF 3668if compile_prog "" "" ; then 3669 pipe2=yes 3670fi 3671 3672# check if accept4 is there 3673accept4=no 3674cat > $TMPC << EOF 3675#include <sys/socket.h> 3676#include <stddef.h> 3677 3678int main(void) 3679{ 3680 accept4(0, NULL, NULL, SOCK_CLOEXEC); 3681 return 0; 3682} 3683EOF 3684if compile_prog "" "" ; then 3685 accept4=yes 3686fi 3687 3688# check if tee/splice is there. vmsplice was added same time. 3689splice=no 3690cat > $TMPC << EOF 3691#include <unistd.h> 3692#include <fcntl.h> 3693#include <limits.h> 3694 3695int main(void) 3696{ 3697 int len, fd = 0; 3698 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 3699 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 3700 return 0; 3701} 3702EOF 3703if compile_prog "" "" ; then 3704 splice=yes 3705fi 3706 3707########################################## 3708# libnuma probe 3709 3710if test "$numa" != "no" ; then 3711 cat > $TMPC << EOF 3712#include <numa.h> 3713int main(void) { return numa_available(); } 3714EOF 3715 3716 if compile_prog "" "-lnuma" ; then 3717 numa=yes 3718 numa_libs="-lnuma" 3719 else 3720 if test "$numa" = "yes" ; then 3721 feature_not_found "numa" "install numactl devel" 3722 fi 3723 numa=no 3724 fi 3725fi 3726 3727malloc=system 3728if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 3729 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 3730 exit 1 3731elif test "$tcmalloc" = "yes" ; then 3732 malloc=tcmalloc 3733elif test "$jemalloc" = "yes" ; then 3734 malloc=jemalloc 3735fi 3736 3737########################################## 3738# signalfd probe 3739signalfd="no" 3740cat > $TMPC << EOF 3741#include <unistd.h> 3742#include <sys/syscall.h> 3743#include <signal.h> 3744int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 3745EOF 3746 3747if compile_prog "" "" ; then 3748 signalfd=yes 3749fi 3750 3751# check if optreset global is declared by <getopt.h> 3752optreset="no" 3753cat > $TMPC << EOF 3754#include <getopt.h> 3755int main(void) { return optreset; } 3756EOF 3757 3758if compile_prog "" "" ; then 3759 optreset=yes 3760fi 3761 3762# check if eventfd is supported 3763eventfd=no 3764cat > $TMPC << EOF 3765#include <sys/eventfd.h> 3766 3767int main(void) 3768{ 3769 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 3770} 3771EOF 3772if compile_prog "" "" ; then 3773 eventfd=yes 3774fi 3775 3776# check if memfd is supported 3777memfd=no 3778cat > $TMPC << EOF 3779#include <sys/mman.h> 3780 3781int main(void) 3782{ 3783 return memfd_create("foo", MFD_ALLOW_SEALING); 3784} 3785EOF 3786if compile_prog "" "" ; then 3787 memfd=yes 3788fi 3789 3790# check for usbfs 3791have_usbfs=no 3792if test "$linux_user" = "yes"; then 3793 cat > $TMPC << EOF 3794#include <linux/usbdevice_fs.h> 3795 3796#ifndef USBDEVFS_GET_CAPABILITIES 3797#error "USBDEVFS_GET_CAPABILITIES undefined" 3798#endif 3799 3800#ifndef USBDEVFS_DISCONNECT_CLAIM 3801#error "USBDEVFS_DISCONNECT_CLAIM undefined" 3802#endif 3803 3804int main(void) 3805{ 3806 return 0; 3807} 3808EOF 3809 if compile_prog "" ""; then 3810 have_usbfs=yes 3811 fi 3812fi 3813 3814# check for fallocate 3815fallocate=no 3816cat > $TMPC << EOF 3817#include <fcntl.h> 3818 3819int main(void) 3820{ 3821 fallocate(0, 0, 0, 0); 3822 return 0; 3823} 3824EOF 3825if compile_prog "" "" ; then 3826 fallocate=yes 3827fi 3828 3829# check for fallocate hole punching 3830fallocate_punch_hole=no 3831cat > $TMPC << EOF 3832#include <fcntl.h> 3833#include <linux/falloc.h> 3834 3835int main(void) 3836{ 3837 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 3838 return 0; 3839} 3840EOF 3841if compile_prog "" "" ; then 3842 fallocate_punch_hole=yes 3843fi 3844 3845# check that fallocate supports range zeroing inside the file 3846fallocate_zero_range=no 3847cat > $TMPC << EOF 3848#include <fcntl.h> 3849#include <linux/falloc.h> 3850 3851int main(void) 3852{ 3853 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 3854 return 0; 3855} 3856EOF 3857if compile_prog "" "" ; then 3858 fallocate_zero_range=yes 3859fi 3860 3861# check for posix_fallocate 3862posix_fallocate=no 3863cat > $TMPC << EOF 3864#include <fcntl.h> 3865 3866int main(void) 3867{ 3868 posix_fallocate(0, 0, 0); 3869 return 0; 3870} 3871EOF 3872if compile_prog "" "" ; then 3873 posix_fallocate=yes 3874fi 3875 3876# check for sync_file_range 3877sync_file_range=no 3878cat > $TMPC << EOF 3879#include <fcntl.h> 3880 3881int main(void) 3882{ 3883 sync_file_range(0, 0, 0, 0); 3884 return 0; 3885} 3886EOF 3887if compile_prog "" "" ; then 3888 sync_file_range=yes 3889fi 3890 3891# check for linux/fiemap.h and FS_IOC_FIEMAP 3892fiemap=no 3893cat > $TMPC << EOF 3894#include <sys/ioctl.h> 3895#include <linux/fs.h> 3896#include <linux/fiemap.h> 3897 3898int main(void) 3899{ 3900 ioctl(0, FS_IOC_FIEMAP, 0); 3901 return 0; 3902} 3903EOF 3904if compile_prog "" "" ; then 3905 fiemap=yes 3906fi 3907 3908# check for dup3 3909dup3=no 3910cat > $TMPC << EOF 3911#include <unistd.h> 3912 3913int main(void) 3914{ 3915 dup3(0, 0, 0); 3916 return 0; 3917} 3918EOF 3919if compile_prog "" "" ; then 3920 dup3=yes 3921fi 3922 3923# check for ppoll support 3924ppoll=no 3925cat > $TMPC << EOF 3926#include <poll.h> 3927 3928int main(void) 3929{ 3930 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 3931 ppoll(&pfd, 1, 0, 0); 3932 return 0; 3933} 3934EOF 3935if compile_prog "" "" ; then 3936 ppoll=yes 3937fi 3938 3939# check for prctl(PR_SET_TIMERSLACK , ... ) support 3940prctl_pr_set_timerslack=no 3941cat > $TMPC << EOF 3942#include <sys/prctl.h> 3943 3944int main(void) 3945{ 3946 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 3947 return 0; 3948} 3949EOF 3950if compile_prog "" "" ; then 3951 prctl_pr_set_timerslack=yes 3952fi 3953 3954# check for epoll support 3955epoll=no 3956cat > $TMPC << EOF 3957#include <sys/epoll.h> 3958 3959int main(void) 3960{ 3961 epoll_create(0); 3962 return 0; 3963} 3964EOF 3965if compile_prog "" "" ; then 3966 epoll=yes 3967fi 3968 3969# epoll_create1 is a later addition 3970# so we must check separately for its presence 3971epoll_create1=no 3972cat > $TMPC << EOF 3973#include <sys/epoll.h> 3974 3975int main(void) 3976{ 3977 /* Note that we use epoll_create1 as a value, not as 3978 * a function being called. This is necessary so that on 3979 * old SPARC glibc versions where the function was present in 3980 * the library but not declared in the header file we will 3981 * fail the configure check. (Otherwise we will get a compiler 3982 * warning but not an error, and will proceed to fail the 3983 * qemu compile where we compile with -Werror.) 3984 */ 3985 return (int)(uintptr_t)&epoll_create1; 3986} 3987EOF 3988if compile_prog "" "" ; then 3989 epoll_create1=yes 3990fi 3991 3992# check for sendfile support 3993sendfile=no 3994cat > $TMPC << EOF 3995#include <sys/sendfile.h> 3996 3997int main(void) 3998{ 3999 return sendfile(0, 0, 0, 0); 4000} 4001EOF 4002if compile_prog "" "" ; then 4003 sendfile=yes 4004fi 4005 4006# check for timerfd support (glibc 2.8 and newer) 4007timerfd=no 4008cat > $TMPC << EOF 4009#include <sys/timerfd.h> 4010 4011int main(void) 4012{ 4013 return(timerfd_create(CLOCK_REALTIME, 0)); 4014} 4015EOF 4016if compile_prog "" "" ; then 4017 timerfd=yes 4018fi 4019 4020# check for setns and unshare support 4021setns=no 4022cat > $TMPC << EOF 4023#include <sched.h> 4024 4025int main(void) 4026{ 4027 int ret; 4028 ret = setns(0, 0); 4029 ret = unshare(0); 4030 return ret; 4031} 4032EOF 4033if compile_prog "" "" ; then 4034 setns=yes 4035fi 4036 4037# clock_adjtime probe 4038clock_adjtime=no 4039cat > $TMPC <<EOF 4040#include <time.h> 4041#include <sys/timex.h> 4042 4043int main(void) 4044{ 4045 return clock_adjtime(0, 0); 4046} 4047EOF 4048clock_adjtime=no 4049if compile_prog "" "" ; then 4050 clock_adjtime=yes 4051fi 4052 4053# syncfs probe 4054syncfs=no 4055cat > $TMPC <<EOF 4056#include <unistd.h> 4057 4058int main(void) 4059{ 4060 return syncfs(0); 4061} 4062EOF 4063syncfs=no 4064if compile_prog "" "" ; then 4065 syncfs=yes 4066fi 4067 4068# Search for bswap_32 function 4069byteswap_h=no 4070cat > $TMPC << EOF 4071#include <byteswap.h> 4072int main(void) { return bswap_32(0); } 4073EOF 4074if compile_prog "" "" ; then 4075 byteswap_h=yes 4076fi 4077 4078# Search for bswap32 function 4079bswap_h=no 4080cat > $TMPC << EOF 4081#include <sys/endian.h> 4082#include <sys/types.h> 4083#include <machine/bswap.h> 4084int main(void) { return bswap32(0); } 4085EOF 4086if compile_prog "" "" ; then 4087 bswap_h=yes 4088fi 4089 4090# Check whether we have openpty() in either libc or libutil 4091cat > $TMPC << EOF 4092extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 4093int main(void) { return openpty(0, 0, 0, 0, 0); } 4094EOF 4095 4096have_openpty="no" 4097if compile_prog "" "" ; then 4098 have_openpty="yes" 4099else 4100 if compile_prog "" "-lutil" ; then 4101 have_openpty="yes" 4102 fi 4103fi 4104 4105########################################## 4106# spice probe 4107if test "$spice" != "no" ; then 4108 cat > $TMPC << EOF 4109#include <spice.h> 4110int main(void) { spice_server_new(); return 0; } 4111EOF 4112 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4113 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4114 if $pkg_config --atleast-version=0.12.5 spice-server && \ 4115 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4116 compile_prog "$spice_cflags" "$spice_libs" ; then 4117 spice="yes" 4118 else 4119 if test "$spice" = "yes" ; then 4120 feature_not_found "spice" \ 4121 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 4122 fi 4123 spice="no" 4124 fi 4125fi 4126 4127# check for smartcard support 4128if test "$smartcard" != "no"; then 4129 if $pkg_config --atleast-version=2.5.1 libcacard; then 4130 libcacard_cflags=$($pkg_config --cflags libcacard) 4131 libcacard_libs=$($pkg_config --libs libcacard) 4132 smartcard="yes" 4133 else 4134 if test "$smartcard" = "yes"; then 4135 feature_not_found "smartcard" "Install libcacard devel" 4136 fi 4137 smartcard="no" 4138 fi 4139fi 4140 4141# check for libusb 4142if test "$libusb" != "no" ; then 4143 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4144 libusb="yes" 4145 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4146 libusb_libs=$($pkg_config --libs libusb-1.0) 4147 else 4148 if test "$libusb" = "yes"; then 4149 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4150 fi 4151 libusb="no" 4152 fi 4153fi 4154 4155# check for usbredirparser for usb network redirection support 4156if test "$usb_redir" != "no" ; then 4157 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4158 usb_redir="yes" 4159 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4160 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4161 else 4162 if test "$usb_redir" = "yes"; then 4163 feature_not_found "usb-redir" "Install usbredir devel" 4164 fi 4165 usb_redir="no" 4166 fi 4167fi 4168 4169########################################## 4170# check if we have VSS SDK headers for win 4171 4172if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4173 test "$vss_win32_sdk" != "no" ; then 4174 case "$vss_win32_sdk" in 4175 "") vss_win32_include="-isystem $source_path" ;; 4176 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4177 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4178 vss_win32_include="-isystem $source_path/.sdk/vss" 4179 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4180 ;; 4181 *) vss_win32_include="-isystem $vss_win32_sdk" 4182 esac 4183 cat > $TMPC << EOF 4184#define __MIDL_user_allocate_free_DEFINED__ 4185#include <inc/win2003/vss.h> 4186int main(void) { return VSS_CTX_BACKUP; } 4187EOF 4188 if compile_prog "$vss_win32_include" "" ; then 4189 guest_agent_with_vss="yes" 4190 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4191 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4192 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4193 else 4194 if test "$vss_win32_sdk" != "" ; then 4195 echo "ERROR: Please download and install Microsoft VSS SDK:" 4196 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4197 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4198 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4199 echo "ERROR: The headers are extracted in the directory \`inc'." 4200 feature_not_found "VSS support" 4201 fi 4202 guest_agent_with_vss="no" 4203 fi 4204fi 4205 4206########################################## 4207# lookup Windows platform SDK (if not specified) 4208# The SDK is needed only to build .tlb (type library) file of guest agent 4209# VSS provider from the source. It is usually unnecessary because the 4210# pre-compiled .tlb file is included. 4211 4212if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 4213 test "$guest_agent_with_vss" = "yes" ; then 4214 if test -z "$win_sdk"; then 4215 programfiles="$PROGRAMFILES" 4216 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4217 if test -n "$programfiles"; then 4218 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4219 else 4220 feature_not_found "Windows SDK" 4221 fi 4222 elif test "$win_sdk" = "no"; then 4223 win_sdk="" 4224 fi 4225fi 4226 4227########################################## 4228# check if mingw environment provides a recent ntddscsi.h 4229if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 4230 cat > $TMPC << EOF 4231#include <windows.h> 4232#include <ntddscsi.h> 4233int main(void) { 4234#if !defined(IOCTL_SCSI_GET_ADDRESS) 4235#error Missing required ioctl definitions 4236#endif 4237 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4238 return addr.Lun; 4239} 4240EOF 4241 if compile_prog "" "" ; then 4242 guest_agent_ntddscsi=yes 4243 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 4244 fi 4245fi 4246 4247########################################## 4248# virgl renderer probe 4249 4250if test "$virglrenderer" != "no" ; then 4251 cat > $TMPC << EOF 4252#include <virglrenderer.h> 4253int main(void) { virgl_renderer_poll(); return 0; } 4254EOF 4255 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4256 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4257 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 4258 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4259 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4260 virglrenderer="yes" 4261 else 4262 if test "$virglrenderer" = "yes" ; then 4263 feature_not_found "virglrenderer" 4264 fi 4265 virglrenderer="no" 4266 fi 4267fi 4268 4269########################################## 4270# capstone 4271 4272case "$capstone" in 4273 auto | enabled | internal) 4274 # Simpler to always update submodule, even if not needed. 4275 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then 4276 git_submodules="${git_submodules} capstone" 4277 fi 4278 ;; 4279esac 4280 4281########################################## 4282# check if we have fdatasync 4283 4284fdatasync=no 4285cat > $TMPC << EOF 4286#include <unistd.h> 4287int main(void) { 4288#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4289return fdatasync(0); 4290#else 4291#error Not supported 4292#endif 4293} 4294EOF 4295if compile_prog "" "" ; then 4296 fdatasync=yes 4297fi 4298 4299########################################## 4300# check if we have madvise 4301 4302madvise=no 4303cat > $TMPC << EOF 4304#include <sys/types.h> 4305#include <sys/mman.h> 4306#include <stddef.h> 4307int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4308EOF 4309if compile_prog "" "" ; then 4310 madvise=yes 4311fi 4312 4313########################################## 4314# check if we have posix_madvise 4315 4316posix_madvise=no 4317cat > $TMPC << EOF 4318#include <sys/mman.h> 4319#include <stddef.h> 4320int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4321EOF 4322if compile_prog "" "" ; then 4323 posix_madvise=yes 4324fi 4325 4326########################################## 4327# check if we have posix_memalign() 4328 4329posix_memalign=no 4330cat > $TMPC << EOF 4331#include <stdlib.h> 4332int main(void) { 4333 void *p; 4334 return posix_memalign(&p, 8, 8); 4335} 4336EOF 4337if compile_prog "" "" ; then 4338 posix_memalign=yes 4339fi 4340 4341########################################## 4342# check if we have posix_syslog 4343 4344posix_syslog=no 4345cat > $TMPC << EOF 4346#include <syslog.h> 4347int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4348EOF 4349if compile_prog "" "" ; then 4350 posix_syslog=yes 4351fi 4352 4353########################################## 4354# check if we have sem_timedwait 4355 4356sem_timedwait=no 4357cat > $TMPC << EOF 4358#include <semaphore.h> 4359int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 4360EOF 4361if compile_prog "" "" ; then 4362 sem_timedwait=yes 4363fi 4364 4365########################################## 4366# check if we have strchrnul 4367 4368strchrnul=no 4369cat > $TMPC << EOF 4370#include <string.h> 4371int main(void); 4372// Use a haystack that the compiler shouldn't be able to constant fold 4373char *haystack = (char*)&main; 4374int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 4375EOF 4376if compile_prog "" "" ; then 4377 strchrnul=yes 4378fi 4379 4380######################################### 4381# check if we have st_atim 4382 4383st_atim=no 4384cat > $TMPC << EOF 4385#include <sys/stat.h> 4386#include <stddef.h> 4387int main(void) { return offsetof(struct stat, st_atim); } 4388EOF 4389if compile_prog "" "" ; then 4390 st_atim=yes 4391fi 4392 4393########################################## 4394# check if trace backend exists 4395 4396$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4397if test "$?" -ne 0 ; then 4398 error_exit "invalid trace backends" \ 4399 "Please choose supported trace backends." 4400fi 4401 4402########################################## 4403# For 'ust' backend, test if ust headers are present 4404if have_backend "ust"; then 4405 cat > $TMPC << EOF 4406#include <lttng/tracepoint.h> 4407int main(void) { return 0; } 4408EOF 4409 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4410 if $pkg_config lttng-ust --exists; then 4411 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4412 else 4413 lttng_ust_libs="-llttng-ust -ldl" 4414 fi 4415 if $pkg_config liburcu-bp --exists; then 4416 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4417 else 4418 urcu_bp_libs="-lurcu-bp" 4419 fi 4420 else 4421 error_exit "Trace backend 'ust' missing lttng-ust header files" 4422 fi 4423fi 4424 4425########################################## 4426# For 'dtrace' backend, test if 'dtrace' command is present 4427if have_backend "dtrace"; then 4428 if ! has 'dtrace' ; then 4429 error_exit "dtrace command is not found in PATH $PATH" 4430 fi 4431 trace_backend_stap="no" 4432 if has 'stap' ; then 4433 trace_backend_stap="yes" 4434 4435 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol 4436 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility 4437 # instead. QEMU --enable-modules depends on this because the SystemTap 4438 # semaphores are linked into the main binary and not the module's shared 4439 # object. 4440 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2" 4441 fi 4442fi 4443 4444########################################## 4445# check and set a backend for coroutine 4446 4447# We prefer ucontext, but it's not always possible. The fallback 4448# is sigcontext. On Windows the only valid backend is the Windows 4449# specific one. 4450 4451ucontext_works=no 4452if test "$darwin" != "yes"; then 4453 cat > $TMPC << EOF 4454#include <ucontext.h> 4455#ifdef __stub_makecontext 4456#error Ignoring glibc stub makecontext which will always fail 4457#endif 4458int main(void) { makecontext(0, 0, 0); return 0; } 4459EOF 4460 if compile_prog "" "" ; then 4461 ucontext_works=yes 4462 fi 4463fi 4464 4465if test "$coroutine" = ""; then 4466 if test "$mingw32" = "yes"; then 4467 coroutine=win32 4468 elif test "$ucontext_works" = "yes"; then 4469 coroutine=ucontext 4470 else 4471 coroutine=sigaltstack 4472 fi 4473else 4474 case $coroutine in 4475 windows) 4476 if test "$mingw32" != "yes"; then 4477 error_exit "'windows' coroutine backend only valid for Windows" 4478 fi 4479 # Unfortunately the user visible backend name doesn't match the 4480 # coroutine-*.c filename for this case, so we have to adjust it here. 4481 coroutine=win32 4482 ;; 4483 ucontext) 4484 if test "$ucontext_works" != "yes"; then 4485 feature_not_found "ucontext" 4486 fi 4487 ;; 4488 sigaltstack) 4489 if test "$mingw32" = "yes"; then 4490 error_exit "only the 'windows' coroutine backend is valid for Windows" 4491 fi 4492 ;; 4493 *) 4494 error_exit "unknown coroutine backend $coroutine" 4495 ;; 4496 esac 4497fi 4498 4499if test "$coroutine_pool" = ""; then 4500 coroutine_pool=yes 4501fi 4502 4503if test "$debug_stack_usage" = "yes"; then 4504 if test "$coroutine_pool" = "yes"; then 4505 echo "WARN: disabling coroutine pool for stack usage debugging" 4506 coroutine_pool=no 4507 fi 4508fi 4509 4510################################################## 4511# SafeStack 4512 4513 4514if test "$safe_stack" = "yes"; then 4515cat > $TMPC << EOF 4516int main(int argc, char *argv[]) 4517{ 4518#if ! __has_feature(safe_stack) 4519#error SafeStack Disabled 4520#endif 4521 return 0; 4522} 4523EOF 4524 flag="-fsanitize=safe-stack" 4525 # Check that safe-stack is supported and enabled. 4526 if compile_prog "-Werror $flag" "$flag"; then 4527 # Flag needed both at compilation and at linking 4528 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 4529 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 4530 else 4531 error_exit "SafeStack not supported by your compiler" 4532 fi 4533 if test "$coroutine" != "ucontext"; then 4534 error_exit "SafeStack is only supported by the coroutine backend ucontext" 4535 fi 4536else 4537cat > $TMPC << EOF 4538int main(int argc, char *argv[]) 4539{ 4540#if defined(__has_feature) 4541#if __has_feature(safe_stack) 4542#error SafeStack Enabled 4543#endif 4544#endif 4545 return 0; 4546} 4547EOF 4548if test "$safe_stack" = "no"; then 4549 # Make sure that safe-stack is disabled 4550 if ! compile_prog "-Werror" ""; then 4551 # SafeStack was already enabled, try to explicitly remove the feature 4552 flag="-fno-sanitize=safe-stack" 4553 if ! compile_prog "-Werror $flag" "$flag"; then 4554 error_exit "Configure cannot disable SafeStack" 4555 fi 4556 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 4557 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 4558 fi 4559else # "$safe_stack" = "" 4560 # Set safe_stack to yes or no based on pre-existing flags 4561 if compile_prog "-Werror" ""; then 4562 safe_stack="no" 4563 else 4564 safe_stack="yes" 4565 if test "$coroutine" != "ucontext"; then 4566 error_exit "SafeStack is only supported by the coroutine backend ucontext" 4567 fi 4568 fi 4569fi 4570fi 4571 4572########################################## 4573# check if we have open_by_handle_at 4574 4575open_by_handle_at=no 4576cat > $TMPC << EOF 4577#include <fcntl.h> 4578#if !defined(AT_EMPTY_PATH) 4579# error missing definition 4580#else 4581int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4582#endif 4583EOF 4584if compile_prog "" "" ; then 4585 open_by_handle_at=yes 4586fi 4587 4588######################################## 4589# check if we have linux/magic.h 4590 4591linux_magic_h=no 4592cat > $TMPC << EOF 4593#include <linux/magic.h> 4594int main(void) { 4595 return 0; 4596} 4597EOF 4598if compile_prog "" "" ; then 4599 linux_magic_h=yes 4600fi 4601 4602######################################## 4603# check if we have valgrind/valgrind.h 4604 4605valgrind_h=no 4606cat > $TMPC << EOF 4607#include <valgrind/valgrind.h> 4608int main(void) { 4609 return 0; 4610} 4611EOF 4612if compile_prog "" "" ; then 4613 valgrind_h=yes 4614fi 4615 4616######################################## 4617# check if environ is declared 4618 4619has_environ=no 4620cat > $TMPC << EOF 4621#include <unistd.h> 4622int main(void) { 4623 environ = 0; 4624 return 0; 4625} 4626EOF 4627if compile_prog "" "" ; then 4628 has_environ=yes 4629fi 4630 4631######################################## 4632# check if cpuid.h is usable. 4633 4634cat > $TMPC << EOF 4635#include <cpuid.h> 4636int main(void) { 4637 unsigned a, b, c, d; 4638 int max = __get_cpuid_max(0, 0); 4639 4640 if (max >= 1) { 4641 __cpuid(1, a, b, c, d); 4642 } 4643 4644 if (max >= 7) { 4645 __cpuid_count(7, 0, a, b, c, d); 4646 } 4647 4648 return 0; 4649} 4650EOF 4651if compile_prog "" "" ; then 4652 cpuid_h=yes 4653fi 4654 4655########################################## 4656# avx2 optimization requirement check 4657# 4658# There is no point enabling this if cpuid.h is not usable, 4659# since we won't be able to select the new routines. 4660 4661if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 4662 cat > $TMPC << EOF 4663#pragma GCC push_options 4664#pragma GCC target("avx2") 4665#include <cpuid.h> 4666#include <immintrin.h> 4667static int bar(void *a) { 4668 __m256i x = *(__m256i *)a; 4669 return _mm256_testz_si256(x, x); 4670} 4671int main(int argc, char *argv[]) { return bar(argv[0]); } 4672EOF 4673 if compile_object "" ; then 4674 avx2_opt="yes" 4675 else 4676 avx2_opt="no" 4677 fi 4678fi 4679 4680########################################## 4681# avx512f optimization requirement check 4682# 4683# There is no point enabling this if cpuid.h is not usable, 4684# since we won't be able to select the new routines. 4685# by default, it is turned off. 4686# if user explicitly want to enable it, check environment 4687 4688if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 4689 cat > $TMPC << EOF 4690#pragma GCC push_options 4691#pragma GCC target("avx512f") 4692#include <cpuid.h> 4693#include <immintrin.h> 4694static int bar(void *a) { 4695 __m512i x = *(__m512i *)a; 4696 return _mm512_test_epi64_mask(x, x); 4697} 4698int main(int argc, char *argv[]) 4699{ 4700 return bar(argv[0]); 4701} 4702EOF 4703 if ! compile_object "" ; then 4704 avx512f_opt="no" 4705 fi 4706else 4707 avx512f_opt="no" 4708fi 4709 4710######################################## 4711# check if __[u]int128_t is usable. 4712 4713int128=no 4714cat > $TMPC << EOF 4715__int128_t a; 4716__uint128_t b; 4717int main (void) { 4718 a = a + b; 4719 b = a * b; 4720 a = a * a; 4721 return 0; 4722} 4723EOF 4724if compile_prog "" "" ; then 4725 int128=yes 4726fi 4727 4728######################################### 4729# See if 128-bit atomic operations are supported. 4730 4731atomic128=no 4732if test "$int128" = "yes"; then 4733 cat > $TMPC << EOF 4734int main(void) 4735{ 4736 unsigned __int128 x = 0, y = 0; 4737 y = __atomic_load_16(&x, 0); 4738 __atomic_store_16(&x, y, 0); 4739 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 4740 return 0; 4741} 4742EOF 4743 if compile_prog "" "" ; then 4744 atomic128=yes 4745 fi 4746fi 4747 4748cmpxchg128=no 4749if test "$int128" = yes && test "$atomic128" = no; then 4750 cat > $TMPC << EOF 4751int main(void) 4752{ 4753 unsigned __int128 x = 0, y = 0; 4754 __sync_val_compare_and_swap_16(&x, y, x); 4755 return 0; 4756} 4757EOF 4758 if compile_prog "" "" ; then 4759 cmpxchg128=yes 4760 fi 4761fi 4762 4763######################################### 4764# See if 64-bit atomic operations are supported. 4765# Note that without __atomic builtins, we can only 4766# assume atomic loads/stores max at pointer size. 4767 4768cat > $TMPC << EOF 4769#include <stdint.h> 4770int main(void) 4771{ 4772 uint64_t x = 0, y = 0; 4773#ifdef __ATOMIC_RELAXED 4774 y = __atomic_load_n(&x, __ATOMIC_RELAXED); 4775 __atomic_store_n(&x, y, __ATOMIC_RELAXED); 4776 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED); 4777 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED); 4778 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED); 4779#else 4780 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 4781 __sync_lock_test_and_set(&x, y); 4782 __sync_val_compare_and_swap(&x, y, 0); 4783 __sync_fetch_and_add(&x, y); 4784#endif 4785 return 0; 4786} 4787EOF 4788if compile_prog "" "" ; then 4789 atomic64=yes 4790fi 4791 4792######################################### 4793# See if --dynamic-list is supported by the linker 4794ld_dynamic_list="no" 4795if test "$static" = "no" ; then 4796 cat > $TMPTXT <<EOF 4797{ 4798 foo; 4799}; 4800EOF 4801 4802 cat > $TMPC <<EOF 4803#include <stdio.h> 4804void foo(void); 4805 4806void foo(void) 4807{ 4808 printf("foo\n"); 4809} 4810 4811int main(void) 4812{ 4813 foo(); 4814 return 0; 4815} 4816EOF 4817 4818 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 4819 ld_dynamic_list="yes" 4820 fi 4821fi 4822 4823######################################### 4824# See if -exported_symbols_list is supported by the linker 4825 4826ld_exported_symbols_list="no" 4827if test "$static" = "no" ; then 4828 cat > $TMPTXT <<EOF 4829 _foo 4830EOF 4831 4832 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 4833 ld_exported_symbols_list="yes" 4834 fi 4835fi 4836 4837if test "$plugins" = "yes" && 4838 test "$ld_dynamic_list" = "no" && 4839 test "$ld_exported_symbols_list" = "no" ; then 4840 error_exit \ 4841 "Plugin support requires dynamic linking and specifying a set of symbols " \ 4842 "that are exported to plugins. Unfortunately your linker doesn't " \ 4843 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 4844 "for this purpose. You can't build with --static." 4845fi 4846 4847######################################## 4848# See if __attribute__((alias)) is supported. 4849# This false for Xcode 9, but has been remedied for Xcode 10. 4850# Unfortunately, travis uses Xcode 9 by default. 4851 4852attralias=no 4853cat > $TMPC << EOF 4854int x = 1; 4855extern const int y __attribute__((alias("x"))); 4856int main(void) { return 0; } 4857EOF 4858if compile_prog "" "" ; then 4859 attralias=yes 4860fi 4861 4862######################################## 4863# check if getauxval is available. 4864 4865getauxval=no 4866cat > $TMPC << EOF 4867#include <sys/auxv.h> 4868int main(void) { 4869 return getauxval(AT_HWCAP) == 0; 4870} 4871EOF 4872if compile_prog "" "" ; then 4873 getauxval=yes 4874fi 4875 4876######################################## 4877# check if ccache is interfering with 4878# semantic analysis of macros 4879 4880unset CCACHE_CPP2 4881ccache_cpp2=no 4882cat > $TMPC << EOF 4883static const int Z = 1; 4884#define fn() ({ Z; }) 4885#define TAUT(X) ((X) == Z) 4886#define PAREN(X, Y) (X == Y) 4887#define ID(X) (X) 4888int main(int argc, char *argv[]) 4889{ 4890 int x = 0, y = 0; 4891 x = ID(x); 4892 x = fn(); 4893 fn(); 4894 if (PAREN(x, y)) return 0; 4895 if (TAUT(Z)) return 0; 4896 return 0; 4897} 4898EOF 4899 4900if ! compile_object "-Werror"; then 4901 ccache_cpp2=yes 4902fi 4903 4904################################################# 4905# clang does not support glibc + FORTIFY_SOURCE. 4906 4907if test "$fortify_source" != "no"; then 4908 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 4909 fortify_source="no"; 4910 elif test -n "$cxx" && has $cxx && 4911 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 4912 fortify_source="no"; 4913 else 4914 fortify_source="yes" 4915 fi 4916fi 4917 4918############################################### 4919# Check if copy_file_range is provided by glibc 4920have_copy_file_range=no 4921cat > $TMPC << EOF 4922#include <unistd.h> 4923int main(void) { 4924 copy_file_range(0, NULL, 0, NULL, 0, 0); 4925 return 0; 4926} 4927EOF 4928if compile_prog "" "" ; then 4929 have_copy_file_range=yes 4930fi 4931 4932########################################## 4933# check if struct fsxattr is available via linux/fs.h 4934 4935have_fsxattr=no 4936cat > $TMPC << EOF 4937#include <linux/fs.h> 4938struct fsxattr foo; 4939int main(void) { 4940 return 0; 4941} 4942EOF 4943if compile_prog "" "" ; then 4944 have_fsxattr=yes 4945fi 4946 4947########################################## 4948# check for usable membarrier system call 4949if test "$membarrier" = "yes"; then 4950 have_membarrier=no 4951 if test "$mingw32" = "yes" ; then 4952 have_membarrier=yes 4953 elif test "$linux" = "yes" ; then 4954 cat > $TMPC << EOF 4955 #include <linux/membarrier.h> 4956 #include <sys/syscall.h> 4957 #include <unistd.h> 4958 #include <stdlib.h> 4959 int main(void) { 4960 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 4961 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 4962 exit(0); 4963 } 4964EOF 4965 if compile_prog "" "" ; then 4966 have_membarrier=yes 4967 fi 4968 fi 4969 if test "$have_membarrier" = "no"; then 4970 feature_not_found "membarrier" "membarrier system call not available" 4971 fi 4972else 4973 # Do not enable it by default even for Mingw32, because it doesn't 4974 # work on Wine. 4975 membarrier=no 4976fi 4977 4978########################################## 4979# check if rtnetlink.h exists and is useful 4980have_rtnetlink=no 4981cat > $TMPC << EOF 4982#include <linux/rtnetlink.h> 4983int main(void) { 4984 return IFLA_PROTO_DOWN; 4985} 4986EOF 4987if compile_prog "" "" ; then 4988 have_rtnetlink=yes 4989fi 4990 4991########################################## 4992# check for usable AF_VSOCK environment 4993have_af_vsock=no 4994cat > $TMPC << EOF 4995#include <errno.h> 4996#include <sys/types.h> 4997#include <sys/socket.h> 4998#if !defined(AF_VSOCK) 4999# error missing AF_VSOCK flag 5000#endif 5001#include <linux/vm_sockets.h> 5002int main(void) { 5003 int sock, ret; 5004 struct sockaddr_vm svm; 5005 socklen_t len = sizeof(svm); 5006 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5007 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5008 if ((ret == -1) && (errno == ENOTCONN)) { 5009 return 0; 5010 } 5011 return -1; 5012} 5013EOF 5014if compile_prog "" "" ; then 5015 have_af_vsock=yes 5016fi 5017 5018########################################## 5019# check for usable AF_ALG environment 5020have_afalg=no 5021cat > $TMPC << EOF 5022#include <errno.h> 5023#include <sys/types.h> 5024#include <sys/socket.h> 5025#include <linux/if_alg.h> 5026int main(void) { 5027 int sock; 5028 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5029 return sock; 5030} 5031EOF 5032if compile_prog "" "" ; then 5033 have_afalg=yes 5034fi 5035if test "$crypto_afalg" = "yes" 5036then 5037 if test "$have_afalg" != "yes" 5038 then 5039 error_exit "AF_ALG requested but could not be detected" 5040 fi 5041fi 5042 5043 5044################################################# 5045# check for sysmacros.h 5046 5047have_sysmacros=no 5048cat > $TMPC << EOF 5049#include <sys/sysmacros.h> 5050int main(void) { 5051 return makedev(0, 0); 5052} 5053EOF 5054if compile_prog "" "" ; then 5055 have_sysmacros=yes 5056fi 5057 5058########################################## 5059# check for _Static_assert() 5060 5061have_static_assert=no 5062cat > $TMPC << EOF 5063_Static_assert(1, "success"); 5064int main(void) { 5065 return 0; 5066} 5067EOF 5068if compile_prog "" "" ; then 5069 have_static_assert=yes 5070fi 5071 5072########################################## 5073# check for utmpx.h, it is missing e.g. on OpenBSD 5074 5075have_utmpx=no 5076cat > $TMPC << EOF 5077#include <utmpx.h> 5078struct utmpx user_info; 5079int main(void) { 5080 return 0; 5081} 5082EOF 5083if compile_prog "" "" ; then 5084 have_utmpx=yes 5085fi 5086 5087########################################## 5088# check for getrandom() 5089 5090have_getrandom=no 5091cat > $TMPC << EOF 5092#include <sys/random.h> 5093int main(void) { 5094 return getrandom(0, 0, GRND_NONBLOCK); 5095} 5096EOF 5097if compile_prog "" "" ; then 5098 have_getrandom=yes 5099fi 5100 5101########################################## 5102# checks for sanitizers 5103 5104have_asan=no 5105have_ubsan=no 5106have_asan_iface_h=no 5107have_asan_iface_fiber=no 5108 5109if test "$sanitizers" = "yes" ; then 5110 write_c_skeleton 5111 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5112 have_asan=yes 5113 fi 5114 5115 # we could use a simple skeleton for flags checks, but this also 5116 # detect the static linking issue of ubsan, see also: 5117 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5118 cat > $TMPC << EOF 5119#include <stdlib.h> 5120int main(void) { 5121 void *tmp = malloc(10); 5122 if (tmp != NULL) { 5123 return *(int *)(tmp + 2); 5124 } 5125 return 1; 5126} 5127EOF 5128 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5129 have_ubsan=yes 5130 fi 5131 5132 if check_include "sanitizer/asan_interface.h" ; then 5133 have_asan_iface_h=yes 5134 fi 5135 5136 cat > $TMPC << EOF 5137#include <sanitizer/asan_interface.h> 5138int main(void) { 5139 __sanitizer_start_switch_fiber(0, 0, 0); 5140 return 0; 5141} 5142EOF 5143 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5144 have_asan_iface_fiber=yes 5145 fi 5146fi 5147 5148########################################## 5149# checks for fuzzer 5150if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then 5151 write_c_fuzzer_skeleton 5152 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then 5153 have_fuzzer=yes 5154 else 5155 error_exit "Your compiler doesn't support -fsanitize=fuzzer" 5156 exit 1 5157 fi 5158fi 5159 5160# Thread sanitizer is, for now, much noisier than the other sanitizers; 5161# keep it separate until that is not the case. 5162if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 5163 error_exit "TSAN is not supported with other sanitiziers." 5164fi 5165have_tsan=no 5166have_tsan_iface_fiber=no 5167if test "$tsan" = "yes" ; then 5168 write_c_skeleton 5169 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 5170 have_tsan=yes 5171 fi 5172 cat > $TMPC << EOF 5173#include <sanitizer/tsan_interface.h> 5174int main(void) { 5175 __tsan_create_fiber(0); 5176 return 0; 5177} 5178EOF 5179 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 5180 have_tsan_iface_fiber=yes 5181 fi 5182fi 5183 5184########################################## 5185# check for libpmem 5186 5187if test "$libpmem" != "no"; then 5188 if $pkg_config --exists "libpmem"; then 5189 libpmem="yes" 5190 libpmem_libs=$($pkg_config --libs libpmem) 5191 libpmem_cflags=$($pkg_config --cflags libpmem) 5192 else 5193 if test "$libpmem" = "yes" ; then 5194 feature_not_found "libpmem" "Install nvml or pmdk" 5195 fi 5196 libpmem="no" 5197 fi 5198fi 5199 5200########################################## 5201# check for libdaxctl 5202 5203if test "$libdaxctl" != "no"; then 5204 if $pkg_config --atleast-version=57 "libdaxctl"; then 5205 libdaxctl="yes" 5206 libdaxctl_libs=$($pkg_config --libs libdaxctl) 5207 libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 5208 else 5209 if test "$libdaxctl" = "yes" ; then 5210 feature_not_found "libdaxctl" "Install libdaxctl" 5211 fi 5212 libdaxctl="no" 5213 fi 5214fi 5215 5216########################################## 5217# check for slirp 5218 5219case "$slirp" in 5220 auto | enabled | internal) 5221 # Simpler to always update submodule, even if not needed. 5222 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5223 git_submodules="${git_submodules} slirp" 5224 fi 5225 ;; 5226esac 5227 5228########################################## 5229# check for usable __NR_keyctl syscall 5230 5231if test "$linux" = "yes" ; then 5232 5233 have_keyring=no 5234 cat > $TMPC << EOF 5235#include <errno.h> 5236#include <asm/unistd.h> 5237#include <linux/keyctl.h> 5238#include <unistd.h> 5239int main(void) { 5240 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 5241} 5242EOF 5243 if compile_prog "" "" ; then 5244 have_keyring=yes 5245 fi 5246fi 5247if test "$secret_keyring" != "no" 5248then 5249 if test "$have_keyring" = "yes" 5250 then 5251 secret_keyring=yes 5252 else 5253 if test "$secret_keyring" = "yes" 5254 then 5255 error_exit "syscall __NR_keyctl requested, \ 5256but not implemented on your system" 5257 else 5258 secret_keyring=no 5259 fi 5260 fi 5261fi 5262 5263########################################## 5264# End of CC checks 5265# After here, no more $cc or $ld runs 5266 5267write_c_skeleton 5268 5269if test "$gcov" = "yes" ; then 5270 : 5271elif test "$fortify_source" = "yes" ; then 5272 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 5273 debug=no 5274fi 5275 5276case "$ARCH" in 5277alpha) 5278 # Ensure there's only a single GP 5279 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 5280;; 5281esac 5282 5283if test "$gprof" = "yes" ; then 5284 QEMU_CFLAGS="-p $QEMU_CFLAGS" 5285 QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 5286fi 5287 5288if test "$have_asan" = "yes"; then 5289 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 5290 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 5291 if test "$have_asan_iface_h" = "no" ; then 5292 echo "ASAN build enabled, but ASAN header missing." \ 5293 "Without code annotation, the report may be inferior." 5294 elif test "$have_asan_iface_fiber" = "no" ; then 5295 echo "ASAN build enabled, but ASAN header is too old." \ 5296 "Without code annotation, the report may be inferior." 5297 fi 5298fi 5299if test "$have_tsan" = "yes" ; then 5300 if test "$have_tsan_iface_fiber" = "yes" ; then 5301 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 5302 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 5303 else 5304 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 5305 fi 5306elif test "$tsan" = "yes" ; then 5307 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 5308fi 5309if test "$have_ubsan" = "yes"; then 5310 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 5311 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 5312fi 5313 5314########################################## 5315 5316# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 5317if test "$solaris" = "no" && test "$tsan" = "no"; then 5318 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5319 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 5320 fi 5321fi 5322 5323# Use ASLR, no-SEH and DEP if available 5324if test "$mingw32" = "yes" ; then 5325 flags="--no-seh --nxcompat" 5326 5327 # Disable ASLR for debug builds to allow debugging with gdb 5328 if test "$debug" = "no" ; then 5329 flags="--dynamicbase $flags" 5330 fi 5331 5332 for flag in $flags; do 5333 if ld_has $flag ; then 5334 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 5335 fi 5336 done 5337fi 5338 5339# We can only support ivshmem if we have eventfd 5340if [ "$eventfd" = "yes" ]; then 5341 ivshmem=yes 5342fi 5343 5344# Probe for guest agent support/options 5345 5346if [ "$guest_agent" != "no" ]; then 5347 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 5348 guest_agent=no 5349 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5350 guest_agent=yes 5351 elif [ "$guest_agent" != yes ]; then 5352 guest_agent=no 5353 else 5354 error_exit "Guest agent is not supported on this platform" 5355 fi 5356fi 5357 5358# Guest agent Windows MSI package 5359 5360if test "$QEMU_GA_MANUFACTURER" = ""; then 5361 QEMU_GA_MANUFACTURER=QEMU 5362fi 5363if test "$QEMU_GA_DISTRO" = ""; then 5364 QEMU_GA_DISTRO=Linux 5365fi 5366if test "$QEMU_GA_VERSION" = ""; then 5367 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5368fi 5369 5370QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin" 5371 5372# Mac OS X ships with a broken assembler 5373roms= 5374if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 5375 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 5376 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then 5377 # Different host OS linkers have different ideas about the name of the ELF 5378 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5379 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5380 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5381 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5382 ld_i386_emulation="$emu" 5383 roms="optionrom" 5384 break 5385 fi 5386 done 5387fi 5388 5389# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 5390if test "$cpu" = "s390x" ; then 5391 write_c_skeleton 5392 if compile_prog "-march=z900" ""; then 5393 roms="$roms s390-ccw" 5394 # SLOF is required for building the s390-ccw firmware on s390x, 5395 # since it is using the libnet code from SLOF for network booting. 5396 if test -e "${source_path}/.git" ; then 5397 git_submodules="${git_submodules} roms/SLOF" 5398 fi 5399 fi 5400fi 5401 5402# Check that the C++ compiler exists and works with the C compiler. 5403# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5404if has $cxx; then 5405 cat > $TMPC <<EOF 5406int c_function(void); 5407int main(void) { return c_function(); } 5408EOF 5409 5410 compile_object 5411 5412 cat > $TMPCXX <<EOF 5413extern "C" { 5414 int c_function(void); 5415} 5416int c_function(void) { return 42; } 5417EOF 5418 5419 update_cxxflags 5420 5421 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 5422 # C++ compiler $cxx works ok with C compiler $cc 5423 : 5424 else 5425 echo "C++ compiler $cxx does not work with C compiler $cc" 5426 echo "Disabling C++ specific optional code" 5427 cxx= 5428 fi 5429else 5430 echo "No C++ compiler available; disabling C++ specific optional code" 5431 cxx= 5432fi 5433 5434if test $git_update = 'yes' ; then 5435 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules") 5436fi 5437 5438config_host_mak="config-host.mak" 5439 5440echo "# Automatically generated by configure - do not modify" > $config_host_mak 5441echo >> $config_host_mak 5442 5443echo all: >> $config_host_mak 5444echo "GIT=$git" >> $config_host_mak 5445echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 5446echo "GIT_UPDATE=$git_update" >> $config_host_mak 5447 5448echo "ARCH=$ARCH" >> $config_host_mak 5449 5450if test "$debug_tcg" = "yes" ; then 5451 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 5452fi 5453if test "$strip_opt" = "yes" ; then 5454 echo "STRIP=${strip}" >> $config_host_mak 5455fi 5456if test "$bigendian" = "yes" ; then 5457 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 5458fi 5459if test "$mingw32" = "yes" ; then 5460 echo "CONFIG_WIN32=y" >> $config_host_mak 5461 if test "$guest_agent_with_vss" = "yes" ; then 5462 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 5463 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 5464 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 5465 fi 5466 if test "$guest_agent_ntddscsi" = "yes" ; then 5467 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 5468 fi 5469 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 5470 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 5471 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 5472 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 5473else 5474 echo "CONFIG_POSIX=y" >> $config_host_mak 5475fi 5476 5477if test "$linux" = "yes" ; then 5478 echo "CONFIG_LINUX=y" >> $config_host_mak 5479fi 5480 5481if test "$darwin" = "yes" ; then 5482 echo "CONFIG_DARWIN=y" >> $config_host_mak 5483fi 5484 5485if test "$solaris" = "yes" ; then 5486 echo "CONFIG_SOLARIS=y" >> $config_host_mak 5487fi 5488if test "$haiku" = "yes" ; then 5489 echo "CONFIG_HAIKU=y" >> $config_host_mak 5490fi 5491if test "$static" = "yes" ; then 5492 echo "CONFIG_STATIC=y" >> $config_host_mak 5493fi 5494if test "$profiler" = "yes" ; then 5495 echo "CONFIG_PROFILER=y" >> $config_host_mak 5496fi 5497if test "$want_tools" = "yes" ; then 5498 echo "CONFIG_TOOLS=y" >> $config_host_mak 5499fi 5500if test "$guest_agent" = "yes" ; then 5501 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 5502fi 5503echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 5504if test "$vde" = "yes" ; then 5505 echo "CONFIG_VDE=y" >> $config_host_mak 5506 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 5507fi 5508if test "$netmap" = "yes" ; then 5509 echo "CONFIG_NETMAP=y" >> $config_host_mak 5510fi 5511if test "$l2tpv3" = "yes" ; then 5512 echo "CONFIG_L2TPV3=y" >> $config_host_mak 5513fi 5514if test "$gprof" = "yes" ; then 5515 echo "CONFIG_GPROF=y" >> $config_host_mak 5516fi 5517echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 5518for drv in $audio_drv_list; do 5519 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 5520 echo "$def=y" >> $config_host_mak 5521done 5522if test "$alsa" = "yes" ; then 5523 echo "CONFIG_ALSA=y" >> $config_host_mak 5524fi 5525echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 5526echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak 5527if test "$libpulse" = "yes" ; then 5528 echo "CONFIG_LIBPULSE=y" >> $config_host_mak 5529fi 5530echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 5531echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak 5532echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 5533echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 5534echo "OSS_LIBS=$oss_libs" >> $config_host_mak 5535if test "$libjack" = "yes" ; then 5536 echo "CONFIG_LIBJACK=y" >> $config_host_mak 5537fi 5538echo "JACK_LIBS=$jack_libs" >> $config_host_mak 5539if test "$audio_win_int" = "yes" ; then 5540 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 5541fi 5542echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 5543echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 5544if test "$xfs" = "yes" ; then 5545 echo "CONFIG_XFS=y" >> $config_host_mak 5546fi 5547qemu_version=$(head $source_path/VERSION) 5548echo "PKGVERSION=$pkgversion" >>$config_host_mak 5549echo "SRC_PATH=$source_path" >> $config_host_mak 5550echo "TARGET_DIRS=$target_list" >> $config_host_mak 5551if test "$modules" = "yes"; then 5552 # $shacmd can generate a hash started with digit, which the compiler doesn't 5553 # like as an symbol. So prefix it with an underscore 5554 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 5555 echo "CONFIG_MODULES=y" >> $config_host_mak 5556fi 5557if test "$module_upgrades" = "yes"; then 5558 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 5559fi 5560if test "$pipe2" = "yes" ; then 5561 echo "CONFIG_PIPE2=y" >> $config_host_mak 5562fi 5563if test "$accept4" = "yes" ; then 5564 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 5565fi 5566if test "$splice" = "yes" ; then 5567 echo "CONFIG_SPLICE=y" >> $config_host_mak 5568fi 5569if test "$eventfd" = "yes" ; then 5570 echo "CONFIG_EVENTFD=y" >> $config_host_mak 5571fi 5572if test "$memfd" = "yes" ; then 5573 echo "CONFIG_MEMFD=y" >> $config_host_mak 5574fi 5575if test "$have_usbfs" = "yes" ; then 5576 echo "CONFIG_USBFS=y" >> $config_host_mak 5577fi 5578if test "$fallocate" = "yes" ; then 5579 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 5580fi 5581if test "$fallocate_punch_hole" = "yes" ; then 5582 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 5583fi 5584if test "$fallocate_zero_range" = "yes" ; then 5585 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 5586fi 5587if test "$posix_fallocate" = "yes" ; then 5588 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 5589fi 5590if test "$sync_file_range" = "yes" ; then 5591 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 5592fi 5593if test "$fiemap" = "yes" ; then 5594 echo "CONFIG_FIEMAP=y" >> $config_host_mak 5595fi 5596if test "$dup3" = "yes" ; then 5597 echo "CONFIG_DUP3=y" >> $config_host_mak 5598fi 5599if test "$ppoll" = "yes" ; then 5600 echo "CONFIG_PPOLL=y" >> $config_host_mak 5601fi 5602if test "$prctl_pr_set_timerslack" = "yes" ; then 5603 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 5604fi 5605if test "$epoll" = "yes" ; then 5606 echo "CONFIG_EPOLL=y" >> $config_host_mak 5607fi 5608if test "$epoll_create1" = "yes" ; then 5609 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 5610fi 5611if test "$sendfile" = "yes" ; then 5612 echo "CONFIG_SENDFILE=y" >> $config_host_mak 5613fi 5614if test "$timerfd" = "yes" ; then 5615 echo "CONFIG_TIMERFD=y" >> $config_host_mak 5616fi 5617if test "$setns" = "yes" ; then 5618 echo "CONFIG_SETNS=y" >> $config_host_mak 5619fi 5620if test "$clock_adjtime" = "yes" ; then 5621 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 5622fi 5623if test "$syncfs" = "yes" ; then 5624 echo "CONFIG_SYNCFS=y" >> $config_host_mak 5625fi 5626if test "$inotify" = "yes" ; then 5627 echo "CONFIG_INOTIFY=y" >> $config_host_mak 5628fi 5629if test "$inotify1" = "yes" ; then 5630 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 5631fi 5632if test "$sem_timedwait" = "yes" ; then 5633 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 5634fi 5635if test "$strchrnul" = "yes" ; then 5636 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 5637fi 5638if test "$st_atim" = "yes" ; then 5639 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 5640fi 5641if test "$byteswap_h" = "yes" ; then 5642 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 5643fi 5644if test "$bswap_h" = "yes" ; then 5645 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 5646fi 5647if test "$gio" = "yes" ; then 5648 echo "CONFIG_GIO=y" >> $config_host_mak 5649 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 5650 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 5651 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 5652fi 5653echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 5654if test "$gnutls" = "yes" ; then 5655 echo "CONFIG_GNUTLS=y" >> $config_host_mak 5656 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak 5657 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak 5658fi 5659if test "$gcrypt" = "yes" ; then 5660 echo "CONFIG_GCRYPT=y" >> $config_host_mak 5661 if test "$gcrypt_hmac" = "yes" ; then 5662 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 5663 fi 5664 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak 5665 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak 5666fi 5667if test "$nettle" = "yes" ; then 5668 echo "CONFIG_NETTLE=y" >> $config_host_mak 5669 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 5670 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak 5671 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak 5672fi 5673if test "$qemu_private_xts" = "yes" ; then 5674 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 5675fi 5676if test "$tasn1" = "yes" ; then 5677 echo "CONFIG_TASN1=y" >> $config_host_mak 5678fi 5679if test "$auth_pam" = "yes" ; then 5680 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 5681fi 5682if test "$have_broken_size_max" = "yes" ; then 5683 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 5684fi 5685if test "$have_openpty" = "yes" ; then 5686 echo "HAVE_OPENPTY=y" >> $config_host_mak 5687fi 5688 5689# Work around a system header bug with some kernel/XFS header 5690# versions where they both try to define 'struct fsxattr': 5691# xfs headers will not try to redefine structs from linux headers 5692# if this macro is set. 5693if test "$have_fsxattr" = "yes" ; then 5694 echo "HAVE_FSXATTR=y" >> $config_host_mak 5695fi 5696if test "$have_copy_file_range" = "yes" ; then 5697 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 5698fi 5699if test "$vte" = "yes" ; then 5700 echo "CONFIG_VTE=y" >> $config_host_mak 5701 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 5702 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 5703fi 5704if test "$virglrenderer" = "yes" ; then 5705 echo "CONFIG_VIRGL=y" >> $config_host_mak 5706 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 5707 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 5708fi 5709if test "$xen" = "enabled" ; then 5710 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 5711 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 5712 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 5713 echo "XEN_LIBS=$xen_libs" >> $config_host_mak 5714fi 5715if test "$linux_aio" = "yes" ; then 5716 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 5717fi 5718if test "$linux_io_uring" = "yes" ; then 5719 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 5720 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 5721 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 5722fi 5723if test "$vhost_scsi" = "yes" ; then 5724 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 5725fi 5726if test "$vhost_net" = "yes" ; then 5727 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 5728fi 5729if test "$vhost_net_user" = "yes" ; then 5730 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 5731fi 5732if test "$vhost_net_vdpa" = "yes" ; then 5733 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 5734fi 5735if test "$vhost_crypto" = "yes" ; then 5736 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 5737fi 5738if test "$vhost_vsock" = "yes" ; then 5739 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 5740 if test "$vhost_user" = "yes" ; then 5741 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 5742 fi 5743fi 5744if test "$vhost_kernel" = "yes" ; then 5745 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 5746fi 5747if test "$vhost_user" = "yes" ; then 5748 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 5749fi 5750if test "$vhost_vdpa" = "yes" ; then 5751 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 5752fi 5753if test "$vhost_user_fs" = "yes" ; then 5754 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 5755fi 5756if test "$iovec" = "yes" ; then 5757 echo "CONFIG_IOVEC=y" >> $config_host_mak 5758fi 5759if test "$membarrier" = "yes" ; then 5760 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 5761fi 5762if test "$signalfd" = "yes" ; then 5763 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 5764fi 5765if test "$optreset" = "yes" ; then 5766 echo "HAVE_OPTRESET=y" >> $config_host_mak 5767fi 5768if test "$fdatasync" = "yes" ; then 5769 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 5770fi 5771if test "$madvise" = "yes" ; then 5772 echo "CONFIG_MADVISE=y" >> $config_host_mak 5773fi 5774if test "$posix_madvise" = "yes" ; then 5775 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 5776fi 5777if test "$posix_memalign" = "yes" ; then 5778 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 5779fi 5780if test "$spice" = "yes" ; then 5781 echo "CONFIG_SPICE=y" >> $config_host_mak 5782 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak 5783 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak 5784fi 5785 5786if test "$smartcard" = "yes" ; then 5787 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 5788 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 5789 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 5790fi 5791 5792if test "$libusb" = "yes" ; then 5793 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 5794 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 5795 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 5796fi 5797 5798if test "$usb_redir" = "yes" ; then 5799 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 5800 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 5801 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 5802fi 5803 5804if test "$opengl" = "yes" ; then 5805 echo "CONFIG_OPENGL=y" >> $config_host_mak 5806 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 5807 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 5808 if test "$opengl_dmabuf" = "yes" ; then 5809 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 5810 fi 5811fi 5812 5813if test "$gbm" = "yes" ; then 5814 echo "CONFIG_GBM=y" >> $config_host_mak 5815 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 5816 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 5817fi 5818 5819 5820if test "$avx2_opt" = "yes" ; then 5821 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 5822fi 5823 5824if test "$avx512f_opt" = "yes" ; then 5825 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 5826fi 5827 5828# XXX: suppress that 5829if [ "$bsd" = "yes" ] ; then 5830 echo "CONFIG_BSD=y" >> $config_host_mak 5831fi 5832 5833if test "$qom_cast_debug" = "yes" ; then 5834 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 5835fi 5836 5837echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 5838if test "$coroutine_pool" = "yes" ; then 5839 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 5840else 5841 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 5842fi 5843 5844if test "$debug_stack_usage" = "yes" ; then 5845 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 5846fi 5847 5848if test "$crypto_afalg" = "yes" ; then 5849 echo "CONFIG_AF_ALG=y" >> $config_host_mak 5850fi 5851 5852if test "$open_by_handle_at" = "yes" ; then 5853 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 5854fi 5855 5856if test "$linux_magic_h" = "yes" ; then 5857 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 5858fi 5859 5860if test "$valgrind_h" = "yes" ; then 5861 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 5862fi 5863 5864if test "$have_asan_iface_fiber" = "yes" ; then 5865 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 5866fi 5867 5868if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 5869 echo "CONFIG_TSAN=y" >> $config_host_mak 5870fi 5871 5872if test "$has_environ" = "yes" ; then 5873 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 5874fi 5875 5876if test "$cpuid_h" = "yes" ; then 5877 echo "CONFIG_CPUID_H=y" >> $config_host_mak 5878fi 5879 5880if test "$int128" = "yes" ; then 5881 echo "CONFIG_INT128=y" >> $config_host_mak 5882fi 5883 5884if test "$atomic128" = "yes" ; then 5885 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 5886fi 5887 5888if test "$cmpxchg128" = "yes" ; then 5889 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 5890fi 5891 5892if test "$atomic64" = "yes" ; then 5893 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 5894fi 5895 5896if test "$attralias" = "yes" ; then 5897 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 5898fi 5899 5900if test "$getauxval" = "yes" ; then 5901 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 5902fi 5903 5904if test "$libssh" = "yes" ; then 5905 echo "CONFIG_LIBSSH=y" >> $config_host_mak 5906 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 5907 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 5908fi 5909 5910if test "$live_block_migration" = "yes" ; then 5911 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 5912fi 5913 5914if test "$tpm" = "yes"; then 5915 echo 'CONFIG_TPM=y' >> $config_host_mak 5916fi 5917 5918echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 5919if have_backend "nop"; then 5920 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 5921fi 5922if have_backend "simple"; then 5923 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 5924 # Set the appropriate trace file. 5925 trace_file="\"$trace_file-\" FMT_pid" 5926fi 5927if have_backend "log"; then 5928 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 5929fi 5930if have_backend "ust"; then 5931 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 5932 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak 5933 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak 5934fi 5935if have_backend "dtrace"; then 5936 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 5937 if test "$trace_backend_stap" = "yes" ; then 5938 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 5939 fi 5940fi 5941if have_backend "ftrace"; then 5942 if test "$linux" = "yes" ; then 5943 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 5944 else 5945 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 5946 fi 5947fi 5948if have_backend "syslog"; then 5949 if test "$posix_syslog" = "yes" ; then 5950 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 5951 else 5952 feature_not_found "syslog(trace backend)" "syslog not available" 5953 fi 5954fi 5955echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 5956 5957if test "$rdma" = "yes" ; then 5958 echo "CONFIG_RDMA=y" >> $config_host_mak 5959 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 5960fi 5961 5962if test "$pvrdma" = "yes" ; then 5963 echo "CONFIG_PVRDMA=y" >> $config_host_mak 5964fi 5965 5966if test "$have_rtnetlink" = "yes" ; then 5967 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 5968fi 5969 5970if test "$libxml2" = "yes" ; then 5971 echo "CONFIG_LIBXML2=y" >> $config_host_mak 5972 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 5973 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 5974fi 5975 5976if test "$replication" = "yes" ; then 5977 echo "CONFIG_REPLICATION=y" >> $config_host_mak 5978fi 5979 5980if test "$have_af_vsock" = "yes" ; then 5981 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 5982fi 5983 5984if test "$have_sysmacros" = "yes" ; then 5985 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 5986fi 5987 5988if test "$have_static_assert" = "yes" ; then 5989 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 5990fi 5991 5992if test "$have_utmpx" = "yes" ; then 5993 echo "HAVE_UTMPX=y" >> $config_host_mak 5994fi 5995if test "$have_getrandom" = "yes" ; then 5996 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 5997fi 5998if test "$ivshmem" = "yes" ; then 5999 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6000fi 6001if test "$debug_mutex" = "yes" ; then 6002 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 6003fi 6004 6005# Hold two types of flag: 6006# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6007# a thread we have a handle to 6008# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 6009# platform 6010if test "$pthread_setname_np_w_tid" = "yes" ; then 6011 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6012 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 6013elif test "$pthread_setname_np_wo_tid" = "yes" ; then 6014 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6015 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 6016fi 6017 6018if test "$libpmem" = "yes" ; then 6019 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 6020 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak 6021 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak 6022fi 6023 6024if test "$libdaxctl" = "yes" ; then 6025 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak 6026 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak 6027fi 6028 6029if test "$bochs" = "yes" ; then 6030 echo "CONFIG_BOCHS=y" >> $config_host_mak 6031fi 6032if test "$cloop" = "yes" ; then 6033 echo "CONFIG_CLOOP=y" >> $config_host_mak 6034fi 6035if test "$dmg" = "yes" ; then 6036 echo "CONFIG_DMG=y" >> $config_host_mak 6037fi 6038if test "$qcow1" = "yes" ; then 6039 echo "CONFIG_QCOW1=y" >> $config_host_mak 6040fi 6041if test "$vdi" = "yes" ; then 6042 echo "CONFIG_VDI=y" >> $config_host_mak 6043fi 6044if test "$vvfat" = "yes" ; then 6045 echo "CONFIG_VVFAT=y" >> $config_host_mak 6046fi 6047if test "$qed" = "yes" ; then 6048 echo "CONFIG_QED=y" >> $config_host_mak 6049fi 6050if test "$parallels" = "yes" ; then 6051 echo "CONFIG_PARALLELS=y" >> $config_host_mak 6052fi 6053if test "$sheepdog" = "yes" ; then 6054 add_to deprecated_features "sheepdog" 6055 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 6056fi 6057if test "$have_mlockall" = "yes" ; then 6058 echo "HAVE_MLOCKALL=y" >> $config_host_mak 6059fi 6060if test "$fuzzing" = "yes" ; then 6061 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the 6062 # needed CFLAGS have already been provided 6063 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then 6064 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" 6065 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer" 6066 else 6067 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE" 6068 fi 6069fi 6070 6071if test "$plugins" = "yes" ; then 6072 echo "CONFIG_PLUGIN=y" >> $config_host_mak 6073 # Copy the export object list to the build dir 6074 if test "$ld_dynamic_list" = "yes" ; then 6075 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 6076 ld_symbols=qemu-plugins-ld.symbols 6077 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 6078 elif test "$ld_exported_symbols_list" = "yes" ; then 6079 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 6080 ld64_symbols=qemu-plugins-ld64.symbols 6081 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 6082 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 6083 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 6084 else 6085 error_exit \ 6086 "If \$plugins=yes, either \$ld_dynamic_list or " \ 6087 "\$ld_exported_symbols_list should have been set to 'yes'." 6088 fi 6089fi 6090 6091if test -n "$gdb_bin"; then 6092 gdb_version=$($gdb_bin --version | head -n 1) 6093 if version_ge ${gdb_version##* } 8.3.1; then 6094 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 6095 fi 6096fi 6097 6098if test "$secret_keyring" = "yes" ; then 6099 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 6100fi 6101 6102echo "ROMS=$roms" >> $config_host_mak 6103echo "MAKE=$make" >> $config_host_mak 6104echo "PYTHON=$python" >> $config_host_mak 6105echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 6106echo "MESON=$meson" >> $config_host_mak 6107echo "NINJA=$ninja" >> $config_host_mak 6108echo "CC=$cc" >> $config_host_mak 6109if $iasl -h > /dev/null 2>&1; then 6110 echo "CONFIG_IASL=$iasl" >> $config_host_mak 6111fi 6112echo "CXX=$cxx" >> $config_host_mak 6113echo "OBJCC=$objcc" >> $config_host_mak 6114echo "AR=$ar" >> $config_host_mak 6115echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6116echo "AS=$as" >> $config_host_mak 6117echo "CCAS=$ccas" >> $config_host_mak 6118echo "CPP=$cpp" >> $config_host_mak 6119echo "OBJCOPY=$objcopy" >> $config_host_mak 6120echo "LD=$ld" >> $config_host_mak 6121echo "RANLIB=$ranlib" >> $config_host_mak 6122echo "NM=$nm" >> $config_host_mak 6123echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 6124echo "WINDRES=$windres" >> $config_host_mak 6125echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6126echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6127echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6128echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 6129echo "GLIB_LIBS=$glib_libs" >> $config_host_mak 6130echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 6131echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6132echo "EXESUF=$EXESUF" >> $config_host_mak 6133echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak 6134echo "LIBS_QGA=$libs_qga" >> $config_host_mak 6135echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6136echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6137if test "$gcov" = "yes" ; then 6138 echo "CONFIG_GCOV=y" >> $config_host_mak 6139fi 6140 6141if test "$fuzzing" != "no"; then 6142 echo "CONFIG_FUZZ=y" >> $config_host_mak 6143fi 6144echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak 6145 6146if test "$rng_none" = "yes"; then 6147 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 6148fi 6149 6150# use included Linux headers 6151if test "$linux" = "yes" ; then 6152 mkdir -p linux-headers 6153 case "$cpu" in 6154 i386|x86_64|x32) 6155 linux_arch=x86 6156 ;; 6157 ppc|ppc64|ppc64le) 6158 linux_arch=powerpc 6159 ;; 6160 s390x) 6161 linux_arch=s390 6162 ;; 6163 aarch64) 6164 linux_arch=arm64 6165 ;; 6166 mips64) 6167 linux_arch=mips 6168 ;; 6169 *) 6170 # For most CPUs the kernel architecture name and QEMU CPU name match. 6171 linux_arch="$cpu" 6172 ;; 6173 esac 6174 # For non-KVM architectures we will not have asm headers 6175 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 6176 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 6177 fi 6178fi 6179 6180for target in $target_list; do 6181 target_dir="$target" 6182 target_name=$(echo $target | cut -d '-' -f 1) 6183 mkdir -p $target_dir 6184 case $target in 6185 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;; 6186 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;; 6187 esac 6188done 6189 6190echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak 6191if test "$default_targets" = "yes"; then 6192 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak 6193fi 6194 6195if test "$numa" = "yes"; then 6196 echo "CONFIG_NUMA=y" >> $config_host_mak 6197 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 6198fi 6199 6200if test "$ccache_cpp2" = "yes"; then 6201 echo "export CCACHE_CPP2=y" >> $config_host_mak 6202fi 6203 6204if test "$safe_stack" = "yes"; then 6205 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 6206fi 6207 6208# If we're using a separate build tree, set it up now. 6209# DIRS are directories which we simply mkdir in the build tree; 6210# LINKS are things to symlink back into the source tree 6211# (these can be both files and directories). 6212# Caution: do not add files or directories here using wildcards. This 6213# will result in problems later if a new file matching the wildcard is 6214# added to the source tree -- nothing will cause configure to be rerun 6215# so the build tree will be missing the link back to the new file, and 6216# tests might fail. Prefer to keep the relevant files in their own 6217# directory and symlink the directory instead. 6218# UNLINK is used to remove symlinks from older development versions 6219# that might get into the way when doing "git update" without doing 6220# a "make distclean" in between. 6221DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 6222DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 6223DIRS="$DIRS docs docs/interop fsdev scsi" 6224DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 6225DIRS="$DIRS roms/seabios" 6226DIRS="$DIRS contrib/plugins/" 6227LINKS="Makefile" 6228LINKS="$LINKS tests/tcg/lm32/Makefile" 6229LINKS="$LINKS tests/tcg/Makefile.target" 6230LINKS="$LINKS pc-bios/optionrom/Makefile" 6231LINKS="$LINKS pc-bios/s390-ccw/Makefile" 6232LINKS="$LINKS roms/seabios/Makefile" 6233LINKS="$LINKS pc-bios/qemu-icon.bmp" 6234LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 6235LINKS="$LINKS tests/acceptance tests/data" 6236LINKS="$LINKS tests/qemu-iotests/check" 6237LINKS="$LINKS python" 6238LINKS="$LINKS contrib/plugins/Makefile " 6239UNLINK="pc-bios/keymaps" 6240for bios_file in \ 6241 $source_path/pc-bios/*.bin \ 6242 $source_path/pc-bios/*.elf \ 6243 $source_path/pc-bios/*.lid \ 6244 $source_path/pc-bios/*.rom \ 6245 $source_path/pc-bios/*.dtb \ 6246 $source_path/pc-bios/*.img \ 6247 $source_path/pc-bios/openbios-* \ 6248 $source_path/pc-bios/u-boot.* \ 6249 $source_path/pc-bios/edk2-*.fd.bz2 \ 6250 $source_path/pc-bios/palcode-* 6251do 6252 LINKS="$LINKS pc-bios/$(basename $bios_file)" 6253done 6254mkdir -p $DIRS 6255for f in $LINKS ; do 6256 if [ -e "$source_path/$f" ]; then 6257 symlink "$source_path/$f" "$f" 6258 fi 6259done 6260for f in $UNLINK ; do 6261 if [ -L "$f" ]; then 6262 rm -f "$f" 6263 fi 6264done 6265 6266(for i in $cross_cc_vars; do 6267 export $i 6268done 6269export target_list source_path use_containers 6270$source_path/tests/tcg/configure.sh) 6271 6272# temporary config to build submodules 6273for rom in seabios; do 6274 config_mak=roms/$rom/config.mak 6275 echo "# Automatically generated by configure - do not modify" > $config_mak 6276 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 6277 echo "AS=$as" >> $config_mak 6278 echo "CCAS=$ccas" >> $config_mak 6279 echo "CC=$cc" >> $config_mak 6280 echo "BCC=bcc" >> $config_mak 6281 echo "CPP=$cpp" >> $config_mak 6282 echo "OBJCOPY=objcopy" >> $config_mak 6283 echo "IASL=$iasl" >> $config_mak 6284 echo "LD=$ld" >> $config_mak 6285 echo "RANLIB=$ranlib" >> $config_mak 6286done 6287 6288if test "$skip_meson" = no; then 6289cross="config-meson.cross.new" 6290meson_quote() { 6291 echo "'$(echo $* | sed "s/ /','/g")'" 6292} 6293 6294echo "# Automatically generated by configure - do not modify" > $cross 6295echo "[properties]" >> $cross 6296test -z "$cxx" && echo "link_language = 'c'" >> $cross 6297echo "[built-in options]" >> $cross 6298echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross 6299echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross 6300echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 6301echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross 6302echo "[binaries]" >> $cross 6303echo "c = [$(meson_quote $cc)]" >> $cross 6304test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross 6305test -n "$objcc" && echo "objc = [$(meson_quote $objcc)]" >> $cross 6306echo "ar = [$(meson_quote $ar)]" >> $cross 6307echo "nm = [$(meson_quote $nm)]" >> $cross 6308echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross 6309echo "ranlib = [$(meson_quote $ranlib)]" >> $cross 6310if has $sdl2_config; then 6311 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross 6312fi 6313echo "strip = [$(meson_quote $strip)]" >> $cross 6314echo "windres = [$(meson_quote $windres)]" >> $cross 6315if test "$cross_compile" = "yes"; then 6316 cross_arg="--cross-file config-meson.cross" 6317 echo "[host_machine]" >> $cross 6318 if test "$mingw32" = "yes" ; then 6319 echo "system = 'windows'" >> $cross 6320 fi 6321 if test "$linux" = "yes" ; then 6322 echo "system = 'linux'" >> $cross 6323 fi 6324 if test "$darwin" = "yes" ; then 6325 echo "system = 'darwin'" >> $cross 6326 fi 6327 case "$ARCH" in 6328 i386) 6329 echo "cpu_family = 'x86'" >> $cross 6330 ;; 6331 x86_64) 6332 echo "cpu_family = 'x86_64'" >> $cross 6333 ;; 6334 ppc64le) 6335 echo "cpu_family = 'ppc64'" >> $cross 6336 ;; 6337 *) 6338 echo "cpu_family = '$ARCH'" >> $cross 6339 ;; 6340 esac 6341 echo "cpu = '$cpu'" >> $cross 6342 if test "$bigendian" = "yes" ; then 6343 echo "endian = 'big'" >> $cross 6344 else 6345 echo "endian = 'little'" >> $cross 6346 fi 6347else 6348 cross_arg="--native-file config-meson.cross" 6349fi 6350mv $cross config-meson.cross 6351 6352rm -rf meson-private meson-info meson-logs 6353unset staticpic 6354if ! version_ge "$($meson --version)" 0.56.0; then 6355 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi) 6356fi 6357NINJA=$ninja $meson setup \ 6358 --prefix "$prefix" \ 6359 --libdir "$libdir" \ 6360 --libexecdir "$libexecdir" \ 6361 --bindir "$bindir" \ 6362 --includedir "$includedir" \ 6363 --datadir "$datadir" \ 6364 --mandir "$mandir" \ 6365 --sysconfdir "$sysconfdir" \ 6366 --localedir "$localedir" \ 6367 --localstatedir "$local_statedir" \ 6368 -Ddocdir="$docdir" \ 6369 -Dqemu_firmwarepath="$firmwarepath" \ 6370 -Dqemu_suffix="$qemu_suffix" \ 6371 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 6372 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 6373 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 6374 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 6375 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 6376 ${staticpic:+-Db_staticpic=$staticpic} \ 6377 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 6378 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \ 6379 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \ 6380 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \ 6381 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \ 6382 -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \ 6383 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \ 6384 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \ 6385 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \ 6386 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \ 6387 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\ 6388 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse \ 6389 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \ 6390 -Dattr=$attr -Ddefault_devices=$default_devices \ 6391 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \ 6392 -Dvhost_user_blk_server=$vhost_user_blk_server \ 6393 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi \ 6394 $(if test "$default_features" = no; then echo "-Dauto_features=disabled"; fi) \ 6395 $cross_arg \ 6396 "$PWD" "$source_path" 6397 6398if test "$?" -ne 0 ; then 6399 error_exit "meson setup failed" 6400fi 6401fi 6402 6403if test -n "${deprecated_features}"; then 6404 echo "Warning, deprecated features enabled." 6405 echo "Please see docs/system/deprecated.rst" 6406 echo " features: ${deprecated_features}" 6407fi 6408 6409# Save the configure command line for later reuse. 6410cat <<EOD >config.status 6411#!/bin/sh 6412# Generated by configure. 6413# Run this file to recreate the current configuration. 6414# Compiler output produced by configure, useful for debugging 6415# configure, is in config.log if it exists. 6416EOD 6417 6418preserve_env() { 6419 envname=$1 6420 6421 eval envval=\$$envname 6422 6423 if test -n "$envval" 6424 then 6425 echo "$envname='$envval'" >> config.status 6426 echo "export $envname" >> config.status 6427 else 6428 echo "unset $envname" >> config.status 6429 fi 6430} 6431 6432# Preserve various env variables that influence what 6433# features/build target configure will detect 6434preserve_env AR 6435preserve_env AS 6436preserve_env CC 6437preserve_env CPP 6438preserve_env CXX 6439preserve_env INSTALL 6440preserve_env LD 6441preserve_env LD_LIBRARY_PATH 6442preserve_env LIBTOOL 6443preserve_env MAKE 6444preserve_env NM 6445preserve_env OBJCOPY 6446preserve_env PATH 6447preserve_env PKG_CONFIG 6448preserve_env PKG_CONFIG_LIBDIR 6449preserve_env PKG_CONFIG_PATH 6450preserve_env PYTHON 6451preserve_env SDL2_CONFIG 6452preserve_env SMBD 6453preserve_env STRIP 6454preserve_env WINDRES 6455 6456printf "exec" >>config.status 6457for i in "$0" "$@"; do 6458 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status 6459done 6460echo ' "$@"' >>config.status 6461chmod +x config.status 6462 6463rm -r "$TMPDIR1" 6464