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