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