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