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