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