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