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