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 and vhost-user values for simplicity 2498if test "$vhost_net" = ""; then 2499 test "$vhost_net_user" = "yes" && vhost_net=yes 2500 test "$vhost_kernel" = "yes" && vhost_net=yes 2501fi 2502 2503########################################## 2504# MinGW / Mingw-w64 localtime_r/gmtime_r check 2505 2506if test "$mingw32" = "yes"; then 2507 # Some versions of MinGW / Mingw-w64 lack localtime_r 2508 # and gmtime_r entirely. 2509 # 2510 # Some versions of Mingw-w64 define a macro for 2511 # localtime_r/gmtime_r. 2512 # 2513 # Some versions of Mingw-w64 will define functions 2514 # for localtime_r/gmtime_r, but only if you have 2515 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun 2516 # though, unistd.h and pthread.h both define 2517 # that for you. 2518 # 2519 # So this #undef localtime_r and #include <unistd.h> 2520 # are not in fact redundant. 2521cat > $TMPC << EOF 2522#include <unistd.h> 2523#include <time.h> 2524#undef localtime_r 2525int main(void) { localtime_r(NULL, NULL); return 0; } 2526EOF 2527 if compile_prog "" "" ; then 2528 localtime_r="yes" 2529 else 2530 localtime_r="no" 2531 fi 2532fi 2533 2534########################################## 2535# pkg-config probe 2536 2537if ! has "$pkg_config_exe"; then 2538 error_exit "pkg-config binary '$pkg_config_exe' not found" 2539fi 2540 2541########################################## 2542# NPTL probe 2543 2544if test "$linux_user" = "yes"; then 2545 cat > $TMPC <<EOF 2546#include <sched.h> 2547#include <linux/futex.h> 2548int main(void) { 2549#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 2550#error bork 2551#endif 2552 return 0; 2553} 2554EOF 2555 if ! compile_object ; then 2556 feature_not_found "nptl" "Install glibc and linux kernel headers." 2557 fi 2558fi 2559 2560########################################## 2561# lzo check 2562 2563if test "$lzo" != "no" ; then 2564 cat > $TMPC << EOF 2565#include <lzo/lzo1x.h> 2566int main(void) { lzo_version(); return 0; } 2567EOF 2568 if compile_prog "" "-llzo2" ; then 2569 lzo_libs="-llzo2" 2570 lzo="yes" 2571 else 2572 if test "$lzo" = "yes"; then 2573 feature_not_found "liblzo2" "Install liblzo2 devel" 2574 fi 2575 lzo="no" 2576 fi 2577fi 2578 2579########################################## 2580# snappy check 2581 2582if test "$snappy" != "no" ; then 2583 cat > $TMPC << EOF 2584#include <snappy-c.h> 2585int main(void) { snappy_max_compressed_length(4096); return 0; } 2586EOF 2587 if compile_prog "" "-lsnappy" ; then 2588 snappy_libs='-lsnappy' 2589 snappy="yes" 2590 else 2591 if test "$snappy" = "yes"; then 2592 feature_not_found "libsnappy" "Install libsnappy devel" 2593 fi 2594 snappy="no" 2595 fi 2596fi 2597 2598########################################## 2599# bzip2 check 2600 2601if test "$bzip2" != "no" ; then 2602 cat > $TMPC << EOF 2603#include <bzlib.h> 2604int main(void) { BZ2_bzlibVersion(); return 0; } 2605EOF 2606 if compile_prog "" "-lbz2" ; then 2607 bzip2="yes" 2608 else 2609 if test "$bzip2" = "yes"; then 2610 feature_not_found "libbzip2" "Install libbzip2 devel" 2611 fi 2612 bzip2="no" 2613 fi 2614fi 2615 2616########################################## 2617# lzfse check 2618 2619if test "$lzfse" != "no" ; then 2620 cat > $TMPC << EOF 2621#include <lzfse.h> 2622int main(void) { lzfse_decode_scratch_size(); return 0; } 2623EOF 2624 if compile_prog "" "-llzfse" ; then 2625 lzfse="yes" 2626 else 2627 if test "$lzfse" = "yes"; then 2628 feature_not_found "lzfse" "Install lzfse devel" 2629 fi 2630 lzfse="no" 2631 fi 2632fi 2633 2634########################################## 2635# zstd check 2636 2637if test "$zstd" != "no" ; then 2638 libzstd_minver="1.4.0" 2639 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then 2640 zstd_cflags="$($pkg_config --cflags libzstd)" 2641 zstd_libs="$($pkg_config --libs libzstd)" 2642 zstd="yes" 2643 else 2644 if test "$zstd" = "yes" ; then 2645 feature_not_found "libzstd" "Install libzstd devel" 2646 fi 2647 zstd="no" 2648 fi 2649fi 2650 2651########################################## 2652# libseccomp check 2653 2654if test "$seccomp" != "no" ; then 2655 libseccomp_minver="2.3.0" 2656 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then 2657 seccomp_cflags="$($pkg_config --cflags libseccomp)" 2658 seccomp_libs="$($pkg_config --libs libseccomp)" 2659 seccomp="yes" 2660 else 2661 if test "$seccomp" = "yes" ; then 2662 feature_not_found "libseccomp" \ 2663 "Install libseccomp devel >= $libseccomp_minver" 2664 fi 2665 seccomp="no" 2666 fi 2667fi 2668########################################## 2669# xen probe 2670 2671if test "$xen" != "no" ; then 2672 # Check whether Xen library path is specified via --extra-ldflags to avoid 2673 # overriding this setting with pkg-config output. If not, try pkg-config 2674 # to obtain all needed flags. 2675 2676 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2677 $pkg_config --exists xencontrol ; then 2678 xen_ctrl_version="$(printf '%d%02d%02d' \ 2679 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2680 xen=yes 2681 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" 2682 xen_pc="$xen_pc xenevtchn xendevicemodel" 2683 if $pkg_config --exists xentoolcore; then 2684 xen_pc="$xen_pc xentoolcore" 2685 fi 2686 xen_cflags="$($pkg_config --cflags $xen_pc)" 2687 xen_libs="$($pkg_config --libs $xen_pc)" 2688 else 2689 2690 xen_libs="-lxenstore -lxenctrl -lxenguest" 2691 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2692 2693 # First we test whether Xen headers and libraries are available. 2694 # If no, we are done and there is no Xen support. 2695 # If yes, more tests are run to detect the Xen version. 2696 2697 # Xen (any) 2698 cat > $TMPC <<EOF 2699#include <xenctrl.h> 2700int main(void) { 2701 return 0; 2702} 2703EOF 2704 if ! compile_prog "" "$xen_libs" ; then 2705 # Xen not found 2706 if test "$xen" = "yes" ; then 2707 feature_not_found "xen" "Install xen devel" 2708 fi 2709 xen=no 2710 2711 # Xen unstable 2712 elif 2713 cat > $TMPC <<EOF && 2714#undef XC_WANT_COMPAT_DEVICEMODEL_API 2715#define __XEN_TOOLS__ 2716#include <xendevicemodel.h> 2717#include <xenforeignmemory.h> 2718int main(void) { 2719 xendevicemodel_handle *xd; 2720 xenforeignmemory_handle *xfmem; 2721 2722 xd = xendevicemodel_open(0, 0); 2723 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 2724 2725 xfmem = xenforeignmemory_open(0, 0); 2726 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2727 2728 return 0; 2729} 2730EOF 2731 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2732 then 2733 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2734 xen_ctrl_version=41100 2735 xen=yes 2736 elif 2737 cat > $TMPC <<EOF && 2738#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2739#include <xenforeignmemory.h> 2740#include <xentoolcore.h> 2741int main(void) { 2742 xenforeignmemory_handle *xfmem; 2743 2744 xfmem = xenforeignmemory_open(0, 0); 2745 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2746 xentoolcore_restrict_all(0); 2747 2748 return 0; 2749} 2750EOF 2751 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2752 then 2753 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2754 xen_ctrl_version=41000 2755 xen=yes 2756 elif 2757 cat > $TMPC <<EOF && 2758#undef XC_WANT_COMPAT_DEVICEMODEL_API 2759#define __XEN_TOOLS__ 2760#include <xendevicemodel.h> 2761int main(void) { 2762 xendevicemodel_handle *xd; 2763 2764 xd = xendevicemodel_open(0, 0); 2765 xendevicemodel_close(xd); 2766 2767 return 0; 2768} 2769EOF 2770 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2771 then 2772 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2773 xen_ctrl_version=40900 2774 xen=yes 2775 elif 2776 cat > $TMPC <<EOF && 2777/* 2778 * If we have stable libs the we don't want the libxc compat 2779 * layers, regardless of what CFLAGS we may have been given. 2780 * 2781 * Also, check if xengnttab_grant_copy_segment_t is defined and 2782 * grant copy operation is implemented. 2783 */ 2784#undef XC_WANT_COMPAT_EVTCHN_API 2785#undef XC_WANT_COMPAT_GNTTAB_API 2786#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2787#include <xenctrl.h> 2788#include <xenstore.h> 2789#include <xenevtchn.h> 2790#include <xengnttab.h> 2791#include <xenforeignmemory.h> 2792#include <stdint.h> 2793#include <xen/hvm/hvm_info_table.h> 2794#if !defined(HVM_MAX_VCPUS) 2795# error HVM_MAX_VCPUS not defined 2796#endif 2797int main(void) { 2798 xc_interface *xc = NULL; 2799 xenforeignmemory_handle *xfmem; 2800 xenevtchn_handle *xe; 2801 xengnttab_handle *xg; 2802 xengnttab_grant_copy_segment_t* seg = NULL; 2803 2804 xs_daemon_open(); 2805 2806 xc = xc_interface_open(0, 0, 0); 2807 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2808 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2809 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2810 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2811 2812 xfmem = xenforeignmemory_open(0, 0); 2813 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2814 2815 xe = xenevtchn_open(0, 0); 2816 xenevtchn_fd(xe); 2817 2818 xg = xengnttab_open(0, 0); 2819 xengnttab_grant_copy(xg, 0, seg); 2820 2821 return 0; 2822} 2823EOF 2824 compile_prog "" "$xen_libs $xen_stable_libs" 2825 then 2826 xen_ctrl_version=40800 2827 xen=yes 2828 elif 2829 cat > $TMPC <<EOF && 2830/* 2831 * If we have stable libs the we don't want the libxc compat 2832 * layers, regardless of what CFLAGS we may have been given. 2833 */ 2834#undef XC_WANT_COMPAT_EVTCHN_API 2835#undef XC_WANT_COMPAT_GNTTAB_API 2836#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2837#include <xenctrl.h> 2838#include <xenstore.h> 2839#include <xenevtchn.h> 2840#include <xengnttab.h> 2841#include <xenforeignmemory.h> 2842#include <stdint.h> 2843#include <xen/hvm/hvm_info_table.h> 2844#if !defined(HVM_MAX_VCPUS) 2845# error HVM_MAX_VCPUS not defined 2846#endif 2847int main(void) { 2848 xc_interface *xc = NULL; 2849 xenforeignmemory_handle *xfmem; 2850 xenevtchn_handle *xe; 2851 xengnttab_handle *xg; 2852 2853 xs_daemon_open(); 2854 2855 xc = xc_interface_open(0, 0, 0); 2856 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2857 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2858 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2859 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2860 2861 xfmem = xenforeignmemory_open(0, 0); 2862 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2863 2864 xe = xenevtchn_open(0, 0); 2865 xenevtchn_fd(xe); 2866 2867 xg = xengnttab_open(0, 0); 2868 xengnttab_map_grant_ref(xg, 0, 0, 0); 2869 2870 return 0; 2871} 2872EOF 2873 compile_prog "" "$xen_libs $xen_stable_libs" 2874 then 2875 xen_ctrl_version=40701 2876 xen=yes 2877 2878 # Xen 4.6 2879 elif 2880 cat > $TMPC <<EOF && 2881#include <xenctrl.h> 2882#include <xenstore.h> 2883#include <stdint.h> 2884#include <xen/hvm/hvm_info_table.h> 2885#if !defined(HVM_MAX_VCPUS) 2886# error HVM_MAX_VCPUS not defined 2887#endif 2888int main(void) { 2889 xc_interface *xc; 2890 xs_daemon_open(); 2891 xc = xc_interface_open(0, 0, 0); 2892 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2893 xc_gnttab_open(NULL, 0); 2894 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2895 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2896 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2897 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2898 return 0; 2899} 2900EOF 2901 compile_prog "" "$xen_libs" 2902 then 2903 xen_ctrl_version=40600 2904 xen=yes 2905 2906 # Xen 4.5 2907 elif 2908 cat > $TMPC <<EOF && 2909#include <xenctrl.h> 2910#include <xenstore.h> 2911#include <stdint.h> 2912#include <xen/hvm/hvm_info_table.h> 2913#if !defined(HVM_MAX_VCPUS) 2914# error HVM_MAX_VCPUS not defined 2915#endif 2916int main(void) { 2917 xc_interface *xc; 2918 xs_daemon_open(); 2919 xc = xc_interface_open(0, 0, 0); 2920 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2921 xc_gnttab_open(NULL, 0); 2922 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2923 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2924 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2925 return 0; 2926} 2927EOF 2928 compile_prog "" "$xen_libs" 2929 then 2930 xen_ctrl_version=40500 2931 xen=yes 2932 2933 elif 2934 cat > $TMPC <<EOF && 2935#include <xenctrl.h> 2936#include <xenstore.h> 2937#include <stdint.h> 2938#include <xen/hvm/hvm_info_table.h> 2939#if !defined(HVM_MAX_VCPUS) 2940# error HVM_MAX_VCPUS not defined 2941#endif 2942int main(void) { 2943 xc_interface *xc; 2944 xs_daemon_open(); 2945 xc = xc_interface_open(0, 0, 0); 2946 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2947 xc_gnttab_open(NULL, 0); 2948 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2949 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2950 return 0; 2951} 2952EOF 2953 compile_prog "" "$xen_libs" 2954 then 2955 xen_ctrl_version=40200 2956 xen=yes 2957 2958 else 2959 if test "$xen" = "yes" ; then 2960 feature_not_found "xen (unsupported version)" \ 2961 "Install a supported xen (xen 4.2 or newer)" 2962 fi 2963 xen=no 2964 fi 2965 2966 if test "$xen" = yes; then 2967 if test $xen_ctrl_version -ge 40701 ; then 2968 xen_libs="$xen_libs $xen_stable_libs " 2969 fi 2970 fi 2971 fi 2972fi 2973 2974if test "$xen_pci_passthrough" != "no"; then 2975 if test "$xen" = "yes" && test "$linux" = "yes"; then 2976 xen_pci_passthrough=yes 2977 else 2978 if test "$xen_pci_passthrough" = "yes"; then 2979 error_exit "User requested feature Xen PCI Passthrough" \ 2980 " but this feature requires /sys from Linux" 2981 fi 2982 xen_pci_passthrough=no 2983 fi 2984fi 2985 2986########################################## 2987# Windows Hypervisor Platform accelerator (WHPX) check 2988if test "$whpx" != "no" ; then 2989 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then 2990 whpx="yes" 2991 else 2992 if test "$whpx" = "yes"; then 2993 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed" 2994 fi 2995 whpx="no" 2996 fi 2997fi 2998 2999########################################## 3000# gettext probe 3001if test "$gettext" != "false" ; then 3002 if has xgettext; then 3003 gettext=true 3004 else 3005 if test "$gettext" = "true" ; then 3006 feature_not_found "gettext" "Install xgettext binary" 3007 fi 3008 gettext=false 3009 fi 3010fi 3011 3012########################################## 3013# Sparse probe 3014if test "$sparse" != "no" ; then 3015 if has sparse; then 3016 sparse=yes 3017 else 3018 if test "$sparse" = "yes" ; then 3019 feature_not_found "sparse" "Install sparse binary" 3020 fi 3021 sparse=no 3022 fi 3023fi 3024 3025########################################## 3026# X11 probe 3027if $pkg_config --exists "x11"; then 3028 have_x11=yes 3029 x11_cflags=$($pkg_config --cflags x11) 3030 x11_libs=$($pkg_config --libs x11) 3031fi 3032 3033########################################## 3034# GTK probe 3035 3036if test "$gtk" != "no"; then 3037 gtkpackage="gtk+-3.0" 3038 gtkx11package="gtk+-x11-3.0" 3039 gtkversion="3.22.0" 3040 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 3041 gtk_cflags=$($pkg_config --cflags $gtkpackage) 3042 gtk_libs=$($pkg_config --libs $gtkpackage) 3043 gtk_version=$($pkg_config --modversion $gtkpackage) 3044 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 3045 need_x11=yes 3046 gtk_cflags="$gtk_cflags $x11_cflags" 3047 gtk_libs="$gtk_libs $x11_libs" 3048 fi 3049 gtk="yes" 3050 elif test "$gtk" = "yes"; then 3051 feature_not_found "gtk" "Install gtk3-devel" 3052 else 3053 gtk="no" 3054 fi 3055fi 3056 3057 3058########################################## 3059# GNUTLS probe 3060 3061if test "$gnutls" != "no"; then 3062 pass="no" 3063 if $pkg_config --exists "gnutls >= 3.1.18"; then 3064 gnutls_cflags=$($pkg_config --cflags gnutls) 3065 gnutls_libs=$($pkg_config --libs gnutls) 3066 # Packaging for the static libraries is not always correct. 3067 # At least ubuntu 18.04 ships only shared libraries. 3068 write_c_skeleton 3069 if compile_prog "" "$gnutls_libs" ; then 3070 pass="yes" 3071 fi 3072 fi 3073 if test "$pass" = "no" && test "$gnutls" = "yes"; then 3074 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" 3075 else 3076 gnutls="$pass" 3077 fi 3078fi 3079 3080 3081# If user didn't give a --disable/enable-gcrypt flag, 3082# then mark as disabled if user requested nettle 3083# explicitly 3084if test -z "$gcrypt" 3085then 3086 if test "$nettle" = "yes" 3087 then 3088 gcrypt="no" 3089 fi 3090fi 3091 3092# If user didn't give a --disable/enable-nettle flag, 3093# then mark as disabled if user requested gcrypt 3094# explicitly 3095if test -z "$nettle" 3096then 3097 if test "$gcrypt" = "yes" 3098 then 3099 nettle="no" 3100 fi 3101fi 3102 3103has_libgcrypt() { 3104 if ! has "libgcrypt-config" 3105 then 3106 return 1 3107 fi 3108 3109 if test -n "$cross_prefix" 3110 then 3111 host=$(libgcrypt-config --host) 3112 if test "$host-" != $cross_prefix 3113 then 3114 return 1 3115 fi 3116 fi 3117 3118 maj=`libgcrypt-config --version | awk -F . '{print $1}'` 3119 min=`libgcrypt-config --version | awk -F . '{print $2}'` 3120 3121 if test $maj != 1 || test $min -lt 5 3122 then 3123 return 1 3124 fi 3125 3126 return 0 3127} 3128 3129 3130if test "$nettle" != "no"; then 3131 pass="no" 3132 if $pkg_config --exists "nettle >= 2.7.1"; then 3133 nettle_cflags=$($pkg_config --cflags nettle) 3134 nettle_libs=$($pkg_config --libs nettle) 3135 nettle_version=$($pkg_config --modversion nettle) 3136 # Link test to make sure the given libraries work (e.g for static). 3137 write_c_skeleton 3138 if compile_prog "" "$nettle_libs" ; then 3139 if test -z "$gcrypt"; then 3140 gcrypt="no" 3141 fi 3142 pass="yes" 3143 fi 3144 fi 3145 if test "$pass" = "yes" 3146 then 3147 cat > $TMPC << EOF 3148#include <nettle/xts.h> 3149int main(void) { 3150 return 0; 3151} 3152EOF 3153 if compile_prog "$nettle_cflags" "$nettle_libs" ; then 3154 nettle_xts=yes 3155 qemu_private_xts=no 3156 fi 3157 fi 3158 if test "$pass" = "no" && test "$nettle" = "yes"; then 3159 feature_not_found "nettle" "Install nettle devel >= 2.7.1" 3160 else 3161 nettle="$pass" 3162 fi 3163fi 3164 3165if test "$gcrypt" != "no"; then 3166 pass="no" 3167 if has_libgcrypt; then 3168 gcrypt_cflags=$(libgcrypt-config --cflags) 3169 gcrypt_libs=$(libgcrypt-config --libs) 3170 # Debian has removed -lgpg-error from libgcrypt-config 3171 # as it "spreads unnecessary dependencies" which in 3172 # turn breaks static builds... 3173 if test "$static" = "yes" 3174 then 3175 gcrypt_libs="$gcrypt_libs -lgpg-error" 3176 fi 3177 3178 # Link test to make sure the given libraries work (e.g for static). 3179 write_c_skeleton 3180 if compile_prog "" "$gcrypt_libs" ; then 3181 pass="yes" 3182 fi 3183 fi 3184 if test "$pass" = "yes"; then 3185 gcrypt="yes" 3186 cat > $TMPC << EOF 3187#include <gcrypt.h> 3188int main(void) { 3189 gcry_mac_hd_t handle; 3190 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 3191 GCRY_MAC_FLAG_SECURE, NULL); 3192 return 0; 3193} 3194EOF 3195 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3196 gcrypt_hmac=yes 3197 fi 3198 cat > $TMPC << EOF 3199#include <gcrypt.h> 3200int main(void) { 3201 gcry_cipher_hd_t handle; 3202 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0); 3203 return 0; 3204} 3205EOF 3206 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3207 gcrypt_xts=yes 3208 qemu_private_xts=no 3209 fi 3210 elif test "$gcrypt" = "yes"; then 3211 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" 3212 else 3213 gcrypt="no" 3214 fi 3215fi 3216 3217 3218if test "$gcrypt" = "yes" && test "$nettle" = "yes" 3219then 3220 error_exit "Only one of gcrypt & nettle can be enabled" 3221fi 3222 3223########################################## 3224# libtasn1 - only for the TLS creds/session test suite 3225 3226tasn1=yes 3227tasn1_cflags="" 3228tasn1_libs="" 3229if $pkg_config --exists "libtasn1"; then 3230 tasn1_cflags=$($pkg_config --cflags libtasn1) 3231 tasn1_libs=$($pkg_config --libs libtasn1) 3232else 3233 tasn1=no 3234fi 3235 3236 3237########################################## 3238# PAM probe 3239 3240if test "$auth_pam" != "no"; then 3241 cat > $TMPC <<EOF 3242#include <security/pam_appl.h> 3243#include <stdio.h> 3244int main(void) { 3245 const char *service_name = "qemu"; 3246 const char *user = "frank"; 3247 const struct pam_conv pam_conv = { 0 }; 3248 pam_handle_t *pamh = NULL; 3249 pam_start(service_name, user, &pam_conv, &pamh); 3250 return 0; 3251} 3252EOF 3253 if compile_prog "" "-lpam" ; then 3254 auth_pam=yes 3255 else 3256 if test "$auth_pam" = "yes"; then 3257 feature_not_found "PAM" "Install PAM development package" 3258 else 3259 auth_pam=no 3260 fi 3261 fi 3262fi 3263 3264########################################## 3265# getifaddrs (for tests/test-io-channel-socket ) 3266 3267have_ifaddrs_h=yes 3268if ! check_include "ifaddrs.h" ; then 3269 have_ifaddrs_h=no 3270fi 3271 3272######################################### 3273# libdrm check 3274have_drm_h=no 3275if check_include "libdrm/drm.h" ; then 3276 have_drm_h=yes 3277fi 3278 3279######################################### 3280# sys/signal.h check 3281have_sys_signal_h=no 3282if check_include "sys/signal.h" ; then 3283 have_sys_signal_h=yes 3284fi 3285 3286########################################## 3287# VTE probe 3288 3289if test "$vte" != "no"; then 3290 vteminversion="0.32.0" 3291 if $pkg_config --exists "vte-2.91"; then 3292 vtepackage="vte-2.91" 3293 else 3294 vtepackage="vte-2.90" 3295 fi 3296 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 3297 vte_cflags=$($pkg_config --cflags $vtepackage) 3298 vte_libs=$($pkg_config --libs $vtepackage) 3299 vteversion=$($pkg_config --modversion $vtepackage) 3300 vte="yes" 3301 elif test "$vte" = "yes"; then 3302 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 3303 else 3304 vte="no" 3305 fi 3306fi 3307 3308########################################## 3309# RDMA needs OpenFabrics libraries 3310if test "$rdma" != "no" ; then 3311 cat > $TMPC <<EOF 3312#include <rdma/rdma_cma.h> 3313int main(void) { return 0; } 3314EOF 3315 rdma_libs="-lrdmacm -libverbs -libumad" 3316 if compile_prog "" "$rdma_libs" ; then 3317 rdma="yes" 3318 else 3319 if test "$rdma" = "yes" ; then 3320 error_exit \ 3321 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 3322 " Your options:" \ 3323 " (1) Fast: Install infiniband packages (devel) from your distro." \ 3324 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 3325 " (3) Also: Install softiwarp if you don't have RDMA hardware" 3326 fi 3327 rdma="no" 3328 fi 3329fi 3330 3331########################################## 3332# PVRDMA detection 3333 3334cat > $TMPC <<EOF && 3335#include <sys/mman.h> 3336 3337int 3338main(void) 3339{ 3340 char buf = 0; 3341 void *addr = &buf; 3342 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 3343 3344 return 0; 3345} 3346EOF 3347 3348if test "$rdma" = "yes" ; then 3349 case "$pvrdma" in 3350 "") 3351 if compile_prog "" ""; then 3352 pvrdma="yes" 3353 else 3354 pvrdma="no" 3355 fi 3356 ;; 3357 "yes") 3358 if ! compile_prog "" ""; then 3359 error_exit "PVRDMA is not supported since mremap is not implemented" 3360 fi 3361 pvrdma="yes" 3362 ;; 3363 "no") 3364 pvrdma="no" 3365 ;; 3366 esac 3367else 3368 if test "$pvrdma" = "yes" ; then 3369 error_exit "PVRDMA requires rdma suppport" 3370 fi 3371 pvrdma="no" 3372fi 3373 3374# Let's see if enhanced reg_mr is supported 3375if test "$pvrdma" = "yes" ; then 3376 3377cat > $TMPC <<EOF && 3378#include <infiniband/verbs.h> 3379 3380int 3381main(void) 3382{ 3383 struct ibv_mr *mr; 3384 struct ibv_pd *pd = NULL; 3385 size_t length = 10; 3386 uint64_t iova = 0; 3387 int access = 0; 3388 void *addr = NULL; 3389 3390 mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 3391 3392 ibv_dereg_mr(mr); 3393 3394 return 0; 3395} 3396EOF 3397 if ! compile_prog "" "-libverbs"; then 3398 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 3399 fi 3400fi 3401 3402########################################## 3403# xfsctl() probe, used for file-posix.c 3404if test "$xfs" != "no" ; then 3405 cat > $TMPC << EOF 3406#include <stddef.h> /* NULL */ 3407#include <xfs/xfs.h> 3408int main(void) 3409{ 3410 xfsctl(NULL, 0, 0, NULL); 3411 return 0; 3412} 3413EOF 3414 if compile_prog "" "" ; then 3415 xfs="yes" 3416 else 3417 if test "$xfs" = "yes" ; then 3418 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel" 3419 fi 3420 xfs=no 3421 fi 3422fi 3423 3424########################################## 3425# vde libraries probe 3426if test "$vde" != "no" ; then 3427 vde_libs="-lvdeplug" 3428 cat > $TMPC << EOF 3429#include <libvdeplug.h> 3430int main(void) 3431{ 3432 struct vde_open_args a = {0, 0, 0}; 3433 char s[] = ""; 3434 vde_open(s, s, &a); 3435 return 0; 3436} 3437EOF 3438 if compile_prog "" "$vde_libs" ; then 3439 vde=yes 3440 else 3441 if test "$vde" = "yes" ; then 3442 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3443 fi 3444 vde=no 3445 fi 3446fi 3447 3448########################################## 3449# netmap support probe 3450# Apart from looking for netmap headers, we make sure that the host API version 3451# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 3452# a minor/major version number. Minor new features will be marked with values up 3453# to 15, and if something happens that requires a change to the backend we will 3454# move above 15, submit the backend fixes and modify this two bounds. 3455if test "$netmap" != "no" ; then 3456 cat > $TMPC << EOF 3457#include <inttypes.h> 3458#include <net/if.h> 3459#include <net/netmap.h> 3460#include <net/netmap_user.h> 3461#if (NETMAP_API < 11) || (NETMAP_API > 15) 3462#error 3463#endif 3464int main(void) { return 0; } 3465EOF 3466 if compile_prog "" "" ; then 3467 netmap=yes 3468 else 3469 if test "$netmap" = "yes" ; then 3470 feature_not_found "netmap" 3471 fi 3472 netmap=no 3473 fi 3474fi 3475 3476########################################## 3477# libcap-ng library probe 3478if test "$cap_ng" != "no" ; then 3479 cap_libs="-lcap-ng" 3480 cat > $TMPC << EOF 3481#include <cap-ng.h> 3482int main(void) 3483{ 3484 capng_capability_to_name(CAPNG_EFFECTIVE); 3485 return 0; 3486} 3487EOF 3488 if compile_prog "" "$cap_libs" ; then 3489 cap_ng=yes 3490 else 3491 if test "$cap_ng" = "yes" ; then 3492 feature_not_found "cap_ng" "Install libcap-ng devel" 3493 fi 3494 cap_ng=no 3495 fi 3496fi 3497 3498########################################## 3499# Sound support libraries probe 3500 3501audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3502for drv in $audio_drv_list; do 3503 case $drv in 3504 alsa | try-alsa) 3505 if $pkg_config alsa --exists; then 3506 alsa_libs=$($pkg_config alsa --libs) 3507 alsa_cflags=$($pkg_config alsa --cflags) 3508 alsa=yes 3509 if test "$drv" = "try-alsa"; then 3510 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/') 3511 fi 3512 else 3513 if test "$drv" = "try-alsa"; then 3514 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//') 3515 else 3516 error_exit "$drv check failed" \ 3517 "Make sure to have the $drv libs and headers installed." 3518 fi 3519 fi 3520 ;; 3521 3522 pa | try-pa) 3523 if $pkg_config libpulse --exists; then 3524 libpulse=yes 3525 pulse_libs=$($pkg_config libpulse --libs) 3526 pulse_cflags=$($pkg_config libpulse --cflags) 3527 if test "$drv" = "try-pa"; then 3528 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/') 3529 fi 3530 else 3531 if test "$drv" = "try-pa"; then 3532 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//') 3533 else 3534 error_exit "$drv check failed" \ 3535 "Make sure to have the $drv libs and headers installed." 3536 fi 3537 fi 3538 ;; 3539 3540 sdl) 3541 if test "$sdl" = "no"; then 3542 error_exit "sdl not found or disabled, can not use sdl audio driver" 3543 fi 3544 ;; 3545 3546 try-sdl) 3547 if test "$sdl" = "no"; then 3548 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//') 3549 else 3550 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/') 3551 fi 3552 ;; 3553 3554 coreaudio) 3555 coreaudio_libs="-framework CoreAudio" 3556 ;; 3557 3558 dsound) 3559 dsound_libs="-lole32 -ldxguid" 3560 audio_win_int="yes" 3561 ;; 3562 3563 oss) 3564 oss_libs="$oss_lib" 3565 ;; 3566 3567 jack | try-jack) 3568 if $pkg_config jack --exists; then 3569 libjack=yes 3570 jack_libs=$($pkg_config jack --libs) 3571 if test "$drv" = "try-jack"; then 3572 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/') 3573 fi 3574 else 3575 if test "$drv" = "try-jack"; then 3576 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//') 3577 else 3578 error_exit "$drv check failed" \ 3579 "Make sure to have the $drv libs and headers installed." 3580 fi 3581 fi 3582 ;; 3583 3584 *) 3585 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 3586 error_exit "Unknown driver '$drv' selected" \ 3587 "Possible drivers are: $audio_possible_drivers" 3588 } 3589 ;; 3590 esac 3591done 3592 3593########################################## 3594# BrlAPI probe 3595 3596if test "$brlapi" != "no" ; then 3597 brlapi_libs="-lbrlapi" 3598 cat > $TMPC << EOF 3599#include <brlapi.h> 3600#include <stddef.h> 3601int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } 3602EOF 3603 if compile_prog "" "$brlapi_libs" ; then 3604 brlapi=yes 3605 else 3606 if test "$brlapi" = "yes" ; then 3607 feature_not_found "brlapi" "Install brlapi devel" 3608 fi 3609 brlapi=no 3610 fi 3611fi 3612 3613########################################## 3614# iconv probe 3615if test "$iconv" != "no" ; then 3616 cat > $TMPC << EOF 3617#include <iconv.h> 3618int main(void) { 3619 iconv_t conv = iconv_open("WCHAR_T", "UCS-2"); 3620 return conv != (iconv_t) -1; 3621} 3622EOF 3623 iconv_prefix_list="/usr/local:/usr" 3624 iconv_lib_list=":-liconv" 3625 IFS=: 3626 for iconv_prefix in $iconv_prefix_list; do 3627 IFS=: 3628 iconv_cflags="-I$iconv_prefix/include" 3629 iconv_ldflags="-L$iconv_prefix/lib" 3630 for iconv_link in $iconv_lib_list; do 3631 unset IFS 3632 iconv_lib="$iconv_ldflags $iconv_link" 3633 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log 3634 if compile_prog "$iconv_cflags" "$iconv_lib" ; then 3635 iconv_found=yes 3636 break 3637 fi 3638 done 3639 if test "$iconv_found" = yes ; then 3640 break 3641 fi 3642 done 3643 if test "$iconv_found" = "yes" ; then 3644 iconv=yes 3645 else 3646 if test "$iconv" = "yes" ; then 3647 feature_not_found "iconv" "Install iconv devel" 3648 fi 3649 iconv=no 3650 fi 3651fi 3652 3653########################################## 3654# curses probe 3655if test "$iconv" = "no" ; then 3656 # curses will need iconv 3657 curses=no 3658fi 3659if test "$curses" != "no" ; then 3660 if test "$mingw32" = "yes" ; then 3661 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):" 3662 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses" 3663 else 3664 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:" 3665 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw" 3666 fi 3667 curses_found=no 3668 cat > $TMPC << EOF 3669#include <locale.h> 3670#include <curses.h> 3671#include <wchar.h> 3672#include <langinfo.h> 3673int main(void) { 3674 const char *codeset; 3675 wchar_t wch = L'w'; 3676 setlocale(LC_ALL, ""); 3677 resize_term(0, 0); 3678 addwstr(L"wide chars\n"); 3679 addnwstr(&wch, 1); 3680 add_wch(WACS_DEGREE); 3681 codeset = nl_langinfo(CODESET); 3682 return codeset != 0; 3683} 3684EOF 3685 IFS=: 3686 for curses_inc in $curses_inc_list; do 3687 # Make sure we get the wide character prototypes 3688 curses_inc="-DNCURSES_WIDECHAR $curses_inc" 3689 IFS=: 3690 for curses_lib in $curses_lib_list; do 3691 unset IFS 3692 if compile_prog "$curses_inc" "$curses_lib" ; then 3693 curses_found=yes 3694 break 3695 fi 3696 done 3697 if test "$curses_found" = yes ; then 3698 break 3699 fi 3700 done 3701 unset IFS 3702 if test "$curses_found" = "yes" ; then 3703 curses=yes 3704 else 3705 if test "$curses" = "yes" ; then 3706 feature_not_found "curses" "Install ncurses devel" 3707 fi 3708 curses=no 3709 fi 3710fi 3711 3712########################################## 3713# curl probe 3714if test "$curl" != "no" ; then 3715 if $pkg_config libcurl --exists; then 3716 curlconfig="$pkg_config libcurl" 3717 else 3718 curlconfig=curl-config 3719 fi 3720 cat > $TMPC << EOF 3721#include <curl/curl.h> 3722int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3723EOF 3724 curl_cflags=$($curlconfig --cflags 2>/dev/null) 3725 curl_libs=$($curlconfig --libs 2>/dev/null) 3726 if compile_prog "$curl_cflags" "$curl_libs" ; then 3727 curl=yes 3728 else 3729 if test "$curl" = "yes" ; then 3730 feature_not_found "curl" "Install libcurl devel" 3731 fi 3732 curl=no 3733 fi 3734fi # test "$curl" 3735 3736########################################## 3737# glib support probe 3738 3739glib_req_ver=2.48 3740glib_modules=gthread-2.0 3741if test "$modules" = yes; then 3742 glib_modules="$glib_modules gmodule-export-2.0" 3743fi 3744if test "$plugins" = yes; then 3745 glib_modules="$glib_modules gmodule-2.0" 3746fi 3747 3748for i in $glib_modules; do 3749 if $pkg_config --atleast-version=$glib_req_ver $i; then 3750 glib_cflags=$($pkg_config --cflags $i) 3751 glib_libs=$($pkg_config --libs $i) 3752 else 3753 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3754 fi 3755done 3756 3757# This workaround is required due to a bug in pkg-config file for glib as it 3758# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3759 3760if test "$static" = yes && test "$mingw32" = yes; then 3761 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags" 3762fi 3763 3764if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 3765 gio=yes 3766 gio_cflags=$($pkg_config --cflags gio-2.0) 3767 gio_libs=$($pkg_config --libs gio-2.0) 3768 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 3769 if [ ! -x "$gdbus_codegen" ]; then 3770 gdbus_codegen= 3771 fi 3772else 3773 gio=no 3774fi 3775 3776if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 3777 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 3778 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 3779fi 3780 3781# Sanity check that the current size_t matches the 3782# size that glib thinks it should be. This catches 3783# problems on multi-arch where people try to build 3784# 32-bit QEMU while pointing at 64-bit glib headers 3785cat > $TMPC <<EOF 3786#include <glib.h> 3787#include <unistd.h> 3788 3789#define QEMU_BUILD_BUG_ON(x) \ 3790 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3791 3792int main(void) { 3793 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3794 return 0; 3795} 3796EOF 3797 3798if ! compile_prog "$glib_cflags" "$glib_libs" ; then 3799 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3800 "You probably need to set PKG_CONFIG_LIBDIR"\ 3801 "to point to the right pkg-config files for your"\ 3802 "build target" 3803fi 3804 3805# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3806cat > $TMPC << EOF 3807#include <glib.h> 3808int main(void) { return 0; } 3809EOF 3810if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3811 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3812 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3813 CFLAGS="-Wno-unknown-attributes $CFLAGS" 3814 fi 3815fi 3816 3817# Silence clang warnings triggered by glib < 2.57.2 3818cat > $TMPC << EOF 3819#include <glib.h> 3820typedef struct Foo { 3821 int i; 3822} Foo; 3823static void foo_free(Foo *f) 3824{ 3825 g_free(f); 3826} 3827G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 3828int main(void) { return 0; } 3829EOF 3830if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3831 if cc_has_warning_flag "-Wno-unused-function"; then 3832 glib_cflags="$glib_cflags -Wno-unused-function" 3833 CFLAGS="$CFLAGS -Wno-unused-function" 3834 fi 3835fi 3836 3837########################################## 3838# SHA command probe for modules 3839if test "$modules" = yes; then 3840 shacmd_probe="sha1sum sha1 shasum" 3841 for c in $shacmd_probe; do 3842 if has $c; then 3843 shacmd="$c" 3844 break 3845 fi 3846 done 3847 if test "$shacmd" = ""; then 3848 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3849 fi 3850fi 3851 3852########################################## 3853# libmpathpersist probe 3854 3855if test "$mpath" != "no" ; then 3856 # probe for the new API 3857 cat > $TMPC <<EOF 3858#include <libudev.h> 3859#include <mpath_persist.h> 3860unsigned mpath_mx_alloc_len = 1024; 3861int logsink; 3862static struct config *multipath_conf; 3863extern struct udev *udev; 3864extern struct config *get_multipath_config(void); 3865extern void put_multipath_config(struct config *conf); 3866struct udev *udev; 3867struct config *get_multipath_config(void) { return multipath_conf; } 3868void put_multipath_config(struct config *conf) { } 3869 3870int main(void) { 3871 udev = udev_new(); 3872 multipath_conf = mpath_lib_init(); 3873 return 0; 3874} 3875EOF 3876 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3877 mpathpersist=yes 3878 mpathpersist_new_api=yes 3879 else 3880 # probe for the old API 3881 cat > $TMPC <<EOF 3882#include <libudev.h> 3883#include <mpath_persist.h> 3884unsigned mpath_mx_alloc_len = 1024; 3885int logsink; 3886int main(void) { 3887 struct udev *udev = udev_new(); 3888 mpath_lib_init(udev); 3889 return 0; 3890} 3891EOF 3892 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3893 mpathpersist=yes 3894 mpathpersist_new_api=no 3895 else 3896 mpathpersist=no 3897 fi 3898 fi 3899else 3900 mpathpersist=no 3901fi 3902 3903########################################## 3904# pthread probe 3905PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3906 3907pthread=no 3908cat > $TMPC << EOF 3909#include <pthread.h> 3910static void *f(void *p) { return NULL; } 3911int main(void) { 3912 pthread_t thread; 3913 pthread_create(&thread, 0, f, 0); 3914 return 0; 3915} 3916EOF 3917if compile_prog "" "" ; then 3918 pthread=yes 3919else 3920 for pthread_lib in $PTHREADLIBS_LIST; do 3921 if compile_prog "" "$pthread_lib" ; then 3922 pthread=yes 3923 found=no 3924 for lib_entry in $LIBS; do 3925 if test "$lib_entry" = "$pthread_lib"; then 3926 found=yes 3927 break 3928 fi 3929 done 3930 if test "$found" = "no"; then 3931 LIBS="$pthread_lib $LIBS" 3932 fi 3933 PTHREAD_LIB="$pthread_lib" 3934 break 3935 fi 3936 done 3937fi 3938 3939if test "$mingw32" != yes && test "$pthread" = no; then 3940 error_exit "pthread check failed" \ 3941 "Make sure to have the pthread libs and headers installed." 3942fi 3943 3944# check for pthread_setname_np with thread id 3945pthread_setname_np_w_tid=no 3946cat > $TMPC << EOF 3947#include <pthread.h> 3948 3949static void *f(void *p) { return NULL; } 3950int main(void) 3951{ 3952 pthread_t thread; 3953 pthread_create(&thread, 0, f, 0); 3954 pthread_setname_np(thread, "QEMU"); 3955 return 0; 3956} 3957EOF 3958if compile_prog "" "$pthread_lib" ; then 3959 pthread_setname_np_w_tid=yes 3960fi 3961 3962# check for pthread_setname_np without thread id 3963pthread_setname_np_wo_tid=no 3964cat > $TMPC << EOF 3965#include <pthread.h> 3966 3967static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; } 3968int main(void) 3969{ 3970 pthread_t thread; 3971 pthread_create(&thread, 0, f, 0); 3972 return 0; 3973} 3974EOF 3975if compile_prog "" "$pthread_lib" ; then 3976 pthread_setname_np_wo_tid=yes 3977fi 3978 3979########################################## 3980# rbd probe 3981if test "$rbd" != "no" ; then 3982 cat > $TMPC <<EOF 3983#include <stdio.h> 3984#include <rbd/librbd.h> 3985int main(void) { 3986 rados_t cluster; 3987 rados_create(&cluster, NULL); 3988 return 0; 3989} 3990EOF 3991 rbd_libs="-lrbd -lrados" 3992 if compile_prog "" "$rbd_libs" ; then 3993 rbd=yes 3994 else 3995 if test "$rbd" = "yes" ; then 3996 feature_not_found "rados block device" "Install librbd/ceph devel" 3997 fi 3998 rbd=no 3999 fi 4000fi 4001 4002########################################## 4003# libssh probe 4004if test "$libssh" != "no" ; then 4005 if $pkg_config --exists libssh; then 4006 libssh_cflags=$($pkg_config libssh --cflags) 4007 libssh_libs=$($pkg_config libssh --libs) 4008 libssh=yes 4009 else 4010 if test "$libssh" = "yes" ; then 4011 error_exit "libssh required for --enable-libssh" 4012 fi 4013 libssh=no 4014 fi 4015fi 4016 4017########################################## 4018# Check for libssh 0.8 4019# This is done like this instead of using the LIBSSH_VERSION_* and 4020# SSH_VERSION_* macros because some distributions in the past shipped 4021# snapshots of the future 0.8 from Git, and those snapshots did not 4022# have updated version numbers (still referring to 0.7.0). 4023 4024if test "$libssh" = "yes"; then 4025 cat > $TMPC <<EOF 4026#include <libssh/libssh.h> 4027int main(void) { return ssh_get_server_publickey(NULL, NULL); } 4028EOF 4029 if compile_prog "$libssh_cflags" "$libssh_libs"; then 4030 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" 4031 fi 4032fi 4033 4034########################################## 4035# linux-aio probe 4036 4037if test "$linux_aio" != "no" ; then 4038 cat > $TMPC <<EOF 4039#include <libaio.h> 4040#include <sys/eventfd.h> 4041#include <stddef.h> 4042int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 4043EOF 4044 if compile_prog "" "-laio" ; then 4045 linux_aio=yes 4046 else 4047 if test "$linux_aio" = "yes" ; then 4048 feature_not_found "linux AIO" "Install libaio devel" 4049 fi 4050 linux_aio=no 4051 fi 4052fi 4053########################################## 4054# linux-io-uring probe 4055 4056if test "$linux_io_uring" != "no" ; then 4057 if $pkg_config liburing; then 4058 linux_io_uring_cflags=$($pkg_config --cflags liburing) 4059 linux_io_uring_libs=$($pkg_config --libs liburing) 4060 linux_io_uring=yes 4061 else 4062 if test "$linux_io_uring" = "yes" ; then 4063 feature_not_found "linux io_uring" "Install liburing devel" 4064 fi 4065 linux_io_uring=no 4066 fi 4067fi 4068 4069########################################## 4070# TPM emulation is only on POSIX 4071 4072if test "$tpm" = ""; then 4073 if test "$mingw32" = "yes"; then 4074 tpm=no 4075 else 4076 tpm=yes 4077 fi 4078elif test "$tpm" = "yes"; then 4079 if test "$mingw32" = "yes" ; then 4080 error_exit "TPM emulation only available on POSIX systems" 4081 fi 4082fi 4083 4084########################################## 4085# attr probe 4086 4087libattr_libs= 4088if test "$attr" != "no" ; then 4089 cat > $TMPC <<EOF 4090#include <stdio.h> 4091#include <sys/types.h> 4092#ifdef CONFIG_LIBATTR 4093#include <attr/xattr.h> 4094#else 4095#include <sys/xattr.h> 4096#endif 4097int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 4098EOF 4099 if compile_prog "" "" ; then 4100 attr=yes 4101 # Older distros have <attr/xattr.h>, and need -lattr: 4102 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 4103 attr=yes 4104 libattr_libs="-lattr" 4105 libattr=yes 4106 else 4107 if test "$attr" = "yes" ; then 4108 feature_not_found "ATTR" "Install libc6 or libattr devel" 4109 fi 4110 attr=no 4111 fi 4112fi 4113 4114########################################## 4115# iovec probe 4116cat > $TMPC <<EOF 4117#include <sys/types.h> 4118#include <sys/uio.h> 4119#include <unistd.h> 4120int main(void) { return sizeof(struct iovec); } 4121EOF 4122iovec=no 4123if compile_prog "" "" ; then 4124 iovec=yes 4125fi 4126 4127########################################## 4128# preadv probe 4129cat > $TMPC <<EOF 4130#include <sys/types.h> 4131#include <sys/uio.h> 4132#include <unistd.h> 4133int main(void) { return preadv(0, 0, 0, 0); } 4134EOF 4135preadv=no 4136if compile_prog "" "" ; then 4137 preadv=yes 4138fi 4139 4140########################################## 4141# fdt probe 4142# fdt support is mandatory for at least some target architectures, 4143# so insist on it if we're building those system emulators. 4144fdt_required=no 4145for target in $target_list; do 4146 case $target in 4147 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu) 4148 fdt_required=yes 4149 ;; 4150 esac 4151done 4152 4153if test "$fdt_required" = "yes"; then 4154 if test "$fdt" = "no"; then 4155 error_exit "fdt disabled but some requested targets require it." \ 4156 "You can turn off fdt only if you also disable all the system emulation" \ 4157 "targets which need it (by specifying a cut down --target-list)." 4158 fi 4159 fdt=yes 4160elif test "$fdt" != "yes" ; then 4161 fdt=no 4162fi 4163 4164# fdt is only required when building softmmu targets 4165if test -z "$fdt" -a "$softmmu" != "yes" ; then 4166 fdt="no" 4167fi 4168 4169if test "$fdt" != "no" ; then 4170 fdt_libs="-lfdt" 4171 # explicitly check for libfdt_env.h as it is missing in some stable installs 4172 # and test for required functions to make sure we are on a version >= 1.4.2 4173 cat > $TMPC << EOF 4174#include <libfdt.h> 4175#include <libfdt_env.h> 4176int main(void) { fdt_check_full(NULL, 0); return 0; } 4177EOF 4178 if compile_prog "" "$fdt_libs" ; then 4179 # system DTC is good - use it 4180 fdt=system 4181 else 4182 # have GIT checkout, so activate dtc submodule 4183 if test -e "${source_path}/.git" ; then 4184 git_submodules="${git_submodules} dtc" 4185 fi 4186 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 4187 fdt=git 4188 mkdir -p dtc 4189 fdt_cflags="-I${source_path}/dtc/libfdt" 4190 fdt_ldflags="-Ldtc/libfdt" 4191 fdt_libs="$fdt_libs" 4192 elif test "$fdt" = "yes" ; then 4193 # Not a git build & no libfdt found, prompt for system install 4194 error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 4195 "Please install the DTC (libfdt) devel package" 4196 else 4197 # don't have and don't want 4198 fdt_libs= 4199 fdt=no 4200 fi 4201 fi 4202fi 4203 4204########################################## 4205# opengl probe (for sdl2, gtk, milkymist-tmu2) 4206 4207gbm="no" 4208if $pkg_config gbm; then 4209 gbm_cflags="$($pkg_config --cflags gbm)" 4210 gbm_libs="$($pkg_config --libs gbm)" 4211 gbm="yes" 4212fi 4213 4214if test "$opengl" != "no" ; then 4215 opengl_pkgs="epoxy gbm" 4216 if $pkg_config $opengl_pkgs; then 4217 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 4218 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 4219 opengl=yes 4220 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 4221 gtk_gl="yes" 4222 fi 4223 else 4224 if test "$opengl" = "yes" ; then 4225 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 4226 fi 4227 opengl_cflags="" 4228 opengl_libs="" 4229 opengl=no 4230 fi 4231fi 4232 4233if test "$opengl" = "yes"; then 4234 cat > $TMPC << EOF 4235#include <epoxy/egl.h> 4236#ifndef EGL_MESA_image_dma_buf_export 4237# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 4238#endif 4239int main(void) { return 0; } 4240EOF 4241 if compile_prog "" "" ; then 4242 opengl_dmabuf=yes 4243 fi 4244fi 4245 4246if test "$opengl" = "yes" && test "$have_x11" = "yes"; then 4247 for target in $target_list; do 4248 case $target in 4249 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL 4250 need_x11=yes 4251 ;; 4252 esac 4253 done 4254fi 4255 4256########################################## 4257# libxml2 probe 4258if test "$libxml2" != "no" ; then 4259 if $pkg_config --exists libxml-2.0; then 4260 libxml2="yes" 4261 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 4262 libxml2_libs=$($pkg_config --libs libxml-2.0) 4263 else 4264 if test "$libxml2" = "yes"; then 4265 feature_not_found "libxml2" "Install libxml2 devel" 4266 fi 4267 libxml2="no" 4268 fi 4269fi 4270 4271########################################## 4272# glusterfs probe 4273if test "$glusterfs" != "no" ; then 4274 if $pkg_config --atleast-version=3 glusterfs-api; then 4275 glusterfs="yes" 4276 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 4277 glusterfs_libs=$($pkg_config --libs glusterfs-api) 4278 if $pkg_config --atleast-version=4 glusterfs-api; then 4279 glusterfs_xlator_opt="yes" 4280 fi 4281 if $pkg_config --atleast-version=5 glusterfs-api; then 4282 glusterfs_discard="yes" 4283 fi 4284 if $pkg_config --atleast-version=6 glusterfs-api; then 4285 glusterfs_fallocate="yes" 4286 glusterfs_zerofill="yes" 4287 fi 4288 cat > $TMPC << EOF 4289#include <glusterfs/api/glfs.h> 4290 4291int 4292main(void) 4293{ 4294 /* new glfs_ftruncate() passes two additional args */ 4295 return glfs_ftruncate(NULL, 0, NULL, NULL); 4296} 4297EOF 4298 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4299 glusterfs_ftruncate_has_stat="yes" 4300 fi 4301 cat > $TMPC << EOF 4302#include <glusterfs/api/glfs.h> 4303 4304/* new glfs_io_cbk() passes two additional glfs_stat structs */ 4305static void 4306glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 4307{} 4308 4309int 4310main(void) 4311{ 4312 glfs_io_cbk iocb = &glusterfs_iocb; 4313 iocb(NULL, 0 , NULL, NULL, NULL); 4314 return 0; 4315} 4316EOF 4317 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4318 glusterfs_iocb_has_stat="yes" 4319 fi 4320 else 4321 if test "$glusterfs" = "yes" ; then 4322 feature_not_found "GlusterFS backend support" \ 4323 "Install glusterfs-api devel >= 3" 4324 fi 4325 glusterfs="no" 4326 fi 4327fi 4328 4329# Check for inotify functions when we are building linux-user 4330# emulator. This is done because older glibc versions don't 4331# have syscall stubs for these implemented. In that case we 4332# don't provide them even if kernel supports them. 4333# 4334inotify=no 4335cat > $TMPC << EOF 4336#include <sys/inotify.h> 4337 4338int 4339main(void) 4340{ 4341 /* try to start inotify */ 4342 return inotify_init(); 4343} 4344EOF 4345if compile_prog "" "" ; then 4346 inotify=yes 4347fi 4348 4349inotify1=no 4350cat > $TMPC << EOF 4351#include <sys/inotify.h> 4352 4353int 4354main(void) 4355{ 4356 /* try to start inotify */ 4357 return inotify_init1(0); 4358} 4359EOF 4360if compile_prog "" "" ; then 4361 inotify1=yes 4362fi 4363 4364# check if pipe2 is there 4365pipe2=no 4366cat > $TMPC << EOF 4367#include <unistd.h> 4368#include <fcntl.h> 4369 4370int main(void) 4371{ 4372 int pipefd[2]; 4373 return pipe2(pipefd, O_CLOEXEC); 4374} 4375EOF 4376if compile_prog "" "" ; then 4377 pipe2=yes 4378fi 4379 4380# check if accept4 is there 4381accept4=no 4382cat > $TMPC << EOF 4383#include <sys/socket.h> 4384#include <stddef.h> 4385 4386int main(void) 4387{ 4388 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4389 return 0; 4390} 4391EOF 4392if compile_prog "" "" ; then 4393 accept4=yes 4394fi 4395 4396# check if tee/splice is there. vmsplice was added same time. 4397splice=no 4398cat > $TMPC << EOF 4399#include <unistd.h> 4400#include <fcntl.h> 4401#include <limits.h> 4402 4403int main(void) 4404{ 4405 int len, fd = 0; 4406 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4407 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4408 return 0; 4409} 4410EOF 4411if compile_prog "" "" ; then 4412 splice=yes 4413fi 4414 4415########################################## 4416# libnuma probe 4417 4418if test "$numa" != "no" ; then 4419 cat > $TMPC << EOF 4420#include <numa.h> 4421int main(void) { return numa_available(); } 4422EOF 4423 4424 if compile_prog "" "-lnuma" ; then 4425 numa=yes 4426 numa_libs="-lnuma" 4427 else 4428 if test "$numa" = "yes" ; then 4429 feature_not_found "numa" "install numactl devel" 4430 fi 4431 numa=no 4432 fi 4433fi 4434 4435if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4436 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4437 exit 1 4438fi 4439 4440# Even if malloc_trim() is available, these non-libc memory allocators 4441# do not support it. 4442if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4443 if test "$malloc_trim" = "yes" ; then 4444 echo "Disabling malloc_trim with non-libc memory allocator" 4445 fi 4446 malloc_trim="no" 4447fi 4448 4449####################################### 4450# malloc_trim 4451 4452if test "$malloc_trim" != "no" ; then 4453 cat > $TMPC << EOF 4454#include <malloc.h> 4455int main(void) { malloc_trim(0); return 0; } 4456EOF 4457 if compile_prog "" "" ; then 4458 malloc_trim="yes" 4459 else 4460 malloc_trim="no" 4461 fi 4462fi 4463 4464########################################## 4465# tcmalloc probe 4466 4467if test "$tcmalloc" = "yes" ; then 4468 cat > $TMPC << EOF 4469#include <stdlib.h> 4470int main(void) { 4471 void *tmp = malloc(1); 4472 if (tmp != NULL) { 4473 return 0; 4474 } 4475 return 1; 4476} 4477EOF 4478 4479 if compile_prog "" "-ltcmalloc" ; then 4480 LIBS="-ltcmalloc $LIBS" 4481 else 4482 feature_not_found "tcmalloc" "install gperftools devel" 4483 fi 4484fi 4485 4486########################################## 4487# jemalloc probe 4488 4489if test "$jemalloc" = "yes" ; then 4490 cat > $TMPC << EOF 4491#include <stdlib.h> 4492int main(void) { 4493 void *tmp = malloc(1); 4494 if (tmp != NULL) { 4495 return 0; 4496 } 4497 return 1; 4498} 4499EOF 4500 4501 if compile_prog "" "-ljemalloc" ; then 4502 LIBS="-ljemalloc $LIBS" 4503 else 4504 feature_not_found "jemalloc" "install jemalloc devel" 4505 fi 4506fi 4507 4508########################################## 4509# signalfd probe 4510signalfd="no" 4511cat > $TMPC << EOF 4512#include <unistd.h> 4513#include <sys/syscall.h> 4514#include <signal.h> 4515int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4516EOF 4517 4518if compile_prog "" "" ; then 4519 signalfd=yes 4520fi 4521 4522# check if optreset global is declared by <getopt.h> 4523optreset="no" 4524cat > $TMPC << EOF 4525#include <getopt.h> 4526int main(void) { return optreset; } 4527EOF 4528 4529if compile_prog "" "" ; then 4530 optreset=yes 4531fi 4532 4533# check if eventfd is supported 4534eventfd=no 4535cat > $TMPC << EOF 4536#include <sys/eventfd.h> 4537 4538int main(void) 4539{ 4540 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4541} 4542EOF 4543if compile_prog "" "" ; then 4544 eventfd=yes 4545fi 4546 4547# check if memfd is supported 4548memfd=no 4549cat > $TMPC << EOF 4550#include <sys/mman.h> 4551 4552int main(void) 4553{ 4554 return memfd_create("foo", MFD_ALLOW_SEALING); 4555} 4556EOF 4557if compile_prog "" "" ; then 4558 memfd=yes 4559fi 4560 4561# check for usbfs 4562have_usbfs=no 4563if test "$linux_user" = "yes"; then 4564 cat > $TMPC << EOF 4565#include <linux/usbdevice_fs.h> 4566 4567#ifndef USBDEVFS_GET_CAPABILITIES 4568#error "USBDEVFS_GET_CAPABILITIES undefined" 4569#endif 4570 4571#ifndef USBDEVFS_DISCONNECT_CLAIM 4572#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4573#endif 4574 4575int main(void) 4576{ 4577 return 0; 4578} 4579EOF 4580 if compile_prog "" ""; then 4581 have_usbfs=yes 4582 fi 4583fi 4584 4585# check for fallocate 4586fallocate=no 4587cat > $TMPC << EOF 4588#include <fcntl.h> 4589 4590int main(void) 4591{ 4592 fallocate(0, 0, 0, 0); 4593 return 0; 4594} 4595EOF 4596if compile_prog "" "" ; then 4597 fallocate=yes 4598fi 4599 4600# check for fallocate hole punching 4601fallocate_punch_hole=no 4602cat > $TMPC << EOF 4603#include <fcntl.h> 4604#include <linux/falloc.h> 4605 4606int main(void) 4607{ 4608 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4609 return 0; 4610} 4611EOF 4612if compile_prog "" "" ; then 4613 fallocate_punch_hole=yes 4614fi 4615 4616# check that fallocate supports range zeroing inside the file 4617fallocate_zero_range=no 4618cat > $TMPC << EOF 4619#include <fcntl.h> 4620#include <linux/falloc.h> 4621 4622int main(void) 4623{ 4624 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4625 return 0; 4626} 4627EOF 4628if compile_prog "" "" ; then 4629 fallocate_zero_range=yes 4630fi 4631 4632# check for posix_fallocate 4633posix_fallocate=no 4634cat > $TMPC << EOF 4635#include <fcntl.h> 4636 4637int main(void) 4638{ 4639 posix_fallocate(0, 0, 0); 4640 return 0; 4641} 4642EOF 4643if compile_prog "" "" ; then 4644 posix_fallocate=yes 4645fi 4646 4647# check for sync_file_range 4648sync_file_range=no 4649cat > $TMPC << EOF 4650#include <fcntl.h> 4651 4652int main(void) 4653{ 4654 sync_file_range(0, 0, 0, 0); 4655 return 0; 4656} 4657EOF 4658if compile_prog "" "" ; then 4659 sync_file_range=yes 4660fi 4661 4662# check for linux/fiemap.h and FS_IOC_FIEMAP 4663fiemap=no 4664cat > $TMPC << EOF 4665#include <sys/ioctl.h> 4666#include <linux/fs.h> 4667#include <linux/fiemap.h> 4668 4669int main(void) 4670{ 4671 ioctl(0, FS_IOC_FIEMAP, 0); 4672 return 0; 4673} 4674EOF 4675if compile_prog "" "" ; then 4676 fiemap=yes 4677fi 4678 4679# check for dup3 4680dup3=no 4681cat > $TMPC << EOF 4682#include <unistd.h> 4683 4684int main(void) 4685{ 4686 dup3(0, 0, 0); 4687 return 0; 4688} 4689EOF 4690if compile_prog "" "" ; then 4691 dup3=yes 4692fi 4693 4694# check for ppoll support 4695ppoll=no 4696cat > $TMPC << EOF 4697#include <poll.h> 4698 4699int main(void) 4700{ 4701 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4702 ppoll(&pfd, 1, 0, 0); 4703 return 0; 4704} 4705EOF 4706if compile_prog "" "" ; then 4707 ppoll=yes 4708fi 4709 4710# check for prctl(PR_SET_TIMERSLACK , ... ) support 4711prctl_pr_set_timerslack=no 4712cat > $TMPC << EOF 4713#include <sys/prctl.h> 4714 4715int main(void) 4716{ 4717 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4718 return 0; 4719} 4720EOF 4721if compile_prog "" "" ; then 4722 prctl_pr_set_timerslack=yes 4723fi 4724 4725# check for epoll support 4726epoll=no 4727cat > $TMPC << EOF 4728#include <sys/epoll.h> 4729 4730int main(void) 4731{ 4732 epoll_create(0); 4733 return 0; 4734} 4735EOF 4736if compile_prog "" "" ; then 4737 epoll=yes 4738fi 4739 4740# epoll_create1 is a later addition 4741# so we must check separately for its presence 4742epoll_create1=no 4743cat > $TMPC << EOF 4744#include <sys/epoll.h> 4745 4746int main(void) 4747{ 4748 /* Note that we use epoll_create1 as a value, not as 4749 * a function being called. This is necessary so that on 4750 * old SPARC glibc versions where the function was present in 4751 * the library but not declared in the header file we will 4752 * fail the configure check. (Otherwise we will get a compiler 4753 * warning but not an error, and will proceed to fail the 4754 * qemu compile where we compile with -Werror.) 4755 */ 4756 return (int)(uintptr_t)&epoll_create1; 4757} 4758EOF 4759if compile_prog "" "" ; then 4760 epoll_create1=yes 4761fi 4762 4763# check for sendfile support 4764sendfile=no 4765cat > $TMPC << EOF 4766#include <sys/sendfile.h> 4767 4768int main(void) 4769{ 4770 return sendfile(0, 0, 0, 0); 4771} 4772EOF 4773if compile_prog "" "" ; then 4774 sendfile=yes 4775fi 4776 4777# check for timerfd support (glibc 2.8 and newer) 4778timerfd=no 4779cat > $TMPC << EOF 4780#include <sys/timerfd.h> 4781 4782int main(void) 4783{ 4784 return(timerfd_create(CLOCK_REALTIME, 0)); 4785} 4786EOF 4787if compile_prog "" "" ; then 4788 timerfd=yes 4789fi 4790 4791# check for setns and unshare support 4792setns=no 4793cat > $TMPC << EOF 4794#include <sched.h> 4795 4796int main(void) 4797{ 4798 int ret; 4799 ret = setns(0, 0); 4800 ret = unshare(0); 4801 return ret; 4802} 4803EOF 4804if compile_prog "" "" ; then 4805 setns=yes 4806fi 4807 4808# clock_adjtime probe 4809clock_adjtime=no 4810cat > $TMPC <<EOF 4811#include <time.h> 4812 4813int main(void) 4814{ 4815 return clock_adjtime(0, 0); 4816} 4817EOF 4818clock_adjtime=no 4819if compile_prog "" "" ; then 4820 clock_adjtime=yes 4821fi 4822 4823# syncfs probe 4824syncfs=no 4825cat > $TMPC <<EOF 4826#include <unistd.h> 4827 4828int main(void) 4829{ 4830 return syncfs(0); 4831} 4832EOF 4833syncfs=no 4834if compile_prog "" "" ; then 4835 syncfs=yes 4836fi 4837 4838# check for kcov support (kernel must be 4.4+, compiled with certain options) 4839kcov=no 4840if check_include sys/kcov.h ; then 4841 kcov=yes 4842fi 4843 4844# check for btrfs filesystem support (kernel must be 3.9+) 4845btrfs=no 4846if check_include linux/btrfs.h ; then 4847 btrfs=yes 4848fi 4849 4850# If we're making warnings fatal, apply this to Sphinx runs as well 4851sphinx_werror="" 4852if test "$werror" = "yes"; then 4853 sphinx_werror="-W" 4854fi 4855 4856# Check we have a new enough version of sphinx-build 4857has_sphinx_build() { 4858 # This is a bit awkward but works: create a trivial document and 4859 # try to run it with our configuration file (which enforces a 4860 # version requirement). This will fail if either 4861 # sphinx-build doesn't exist at all or if it is too old. 4862 mkdir -p "$TMPDIR1/sphinx" 4863 touch "$TMPDIR1/sphinx/index.rst" 4864 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ 4865 -b html "$TMPDIR1/sphinx" \ 4866 "$TMPDIR1/sphinx/out" >> config.log 2>&1 4867} 4868 4869# Check if tools are available to build documentation. 4870if test "$docs" != "no" ; then 4871 if has_sphinx_build; then 4872 sphinx_ok=yes 4873 else 4874 sphinx_ok=no 4875 fi 4876 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then 4877 docs=yes 4878 else 4879 if test "$docs" = "yes" ; then 4880 if has $sphinx_build && test "$sphinx_ok" != "yes"; then 4881 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 4882 fi 4883 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx" 4884 fi 4885 docs=no 4886 fi 4887fi 4888 4889# Search for bswap_32 function 4890byteswap_h=no 4891cat > $TMPC << EOF 4892#include <byteswap.h> 4893int main(void) { return bswap_32(0); } 4894EOF 4895if compile_prog "" "" ; then 4896 byteswap_h=yes 4897fi 4898 4899# Search for bswap32 function 4900bswap_h=no 4901cat > $TMPC << EOF 4902#include <sys/endian.h> 4903#include <sys/types.h> 4904#include <machine/bswap.h> 4905int main(void) { return bswap32(0); } 4906EOF 4907if compile_prog "" "" ; then 4908 bswap_h=yes 4909fi 4910 4911########################################## 4912# Do we have libiscsi >= 1.9.0 4913if test "$libiscsi" != "no" ; then 4914 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4915 libiscsi="yes" 4916 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4917 libiscsi_libs=$($pkg_config --libs libiscsi) 4918 else 4919 if test "$libiscsi" = "yes" ; then 4920 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4921 fi 4922 libiscsi="no" 4923 fi 4924fi 4925 4926########################################## 4927# Do we need librt 4928# uClibc provides 2 versions of clock_gettime(), one with realtime 4929# support and one without. This means that the clock_gettime() don't 4930# need -lrt. We still need it for timer_create() so we check for this 4931# function in addition. 4932cat > $TMPC <<EOF 4933#include <signal.h> 4934#include <time.h> 4935int main(void) { 4936 timer_create(CLOCK_REALTIME, NULL, NULL); 4937 return clock_gettime(CLOCK_REALTIME, NULL); 4938} 4939EOF 4940 4941if compile_prog "" "" ; then 4942 : 4943# we need pthread for static linking. use previous pthread test result 4944elif compile_prog "" "$pthread_lib -lrt" ; then 4945 LIBS="$LIBS -lrt" 4946fi 4947 4948# Check whether we have openpty() in either libc or libutil 4949cat > $TMPC << EOF 4950extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 4951int main(void) { return openpty(0, 0, 0, 0, 0); } 4952EOF 4953 4954have_openpty="no" 4955if compile_prog "" "" ; then 4956 have_openpty="yes" 4957else 4958 if compile_prog "" "-lutil" ; then 4959 have_openpty="yes" 4960 fi 4961fi 4962 4963########################################## 4964# spice probe 4965if test "$spice" != "no" ; then 4966 cat > $TMPC << EOF 4967#include <spice.h> 4968int main(void) { spice_server_new(); return 0; } 4969EOF 4970 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4971 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4972 if $pkg_config --atleast-version=0.12.5 spice-server && \ 4973 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4974 compile_prog "$spice_cflags" "$spice_libs" ; then 4975 spice="yes" 4976 else 4977 if test "$spice" = "yes" ; then 4978 feature_not_found "spice" \ 4979 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 4980 fi 4981 spice="no" 4982 fi 4983fi 4984 4985# check for smartcard support 4986if test "$smartcard" != "no"; then 4987 if $pkg_config --atleast-version=2.5.1 libcacard; then 4988 libcacard_cflags=$($pkg_config --cflags libcacard) 4989 libcacard_libs=$($pkg_config --libs libcacard) 4990 smartcard="yes" 4991 else 4992 if test "$smartcard" = "yes"; then 4993 feature_not_found "smartcard" "Install libcacard devel" 4994 fi 4995 smartcard="no" 4996 fi 4997fi 4998 4999# check for libusb 5000if test "$libusb" != "no" ; then 5001 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 5002 libusb="yes" 5003 libusb_cflags=$($pkg_config --cflags libusb-1.0) 5004 libusb_libs=$($pkg_config --libs libusb-1.0) 5005 else 5006 if test "$libusb" = "yes"; then 5007 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 5008 fi 5009 libusb="no" 5010 fi 5011fi 5012 5013# check for usbredirparser for usb network redirection support 5014if test "$usb_redir" != "no" ; then 5015 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 5016 usb_redir="yes" 5017 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 5018 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 5019 else 5020 if test "$usb_redir" = "yes"; then 5021 feature_not_found "usb-redir" "Install usbredir devel" 5022 fi 5023 usb_redir="no" 5024 fi 5025fi 5026 5027########################################## 5028# check if we have VSS SDK headers for win 5029 5030if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5031 test "$vss_win32_sdk" != "no" ; then 5032 case "$vss_win32_sdk" in 5033 "") vss_win32_include="-isystem $source_path" ;; 5034 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 5035 # handle path with spaces. So we symlink the headers into ".sdk/vss". 5036 vss_win32_include="-isystem $source_path/.sdk/vss" 5037 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 5038 ;; 5039 *) vss_win32_include="-isystem $vss_win32_sdk" 5040 esac 5041 cat > $TMPC << EOF 5042#define __MIDL_user_allocate_free_DEFINED__ 5043#include <inc/win2003/vss.h> 5044int main(void) { return VSS_CTX_BACKUP; } 5045EOF 5046 if compile_prog "$vss_win32_include" "" ; then 5047 guest_agent_with_vss="yes" 5048 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 5049 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 5050 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 5051 else 5052 if test "$vss_win32_sdk" != "" ; then 5053 echo "ERROR: Please download and install Microsoft VSS SDK:" 5054 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 5055 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 5056 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 5057 echo "ERROR: The headers are extracted in the directory \`inc'." 5058 feature_not_found "VSS support" 5059 fi 5060 guest_agent_with_vss="no" 5061 fi 5062fi 5063 5064########################################## 5065# lookup Windows platform SDK (if not specified) 5066# The SDK is needed only to build .tlb (type library) file of guest agent 5067# VSS provider from the source. It is usually unnecessary because the 5068# pre-compiled .tlb file is included. 5069 5070if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5071 test "$guest_agent_with_vss" = "yes" ; then 5072 if test -z "$win_sdk"; then 5073 programfiles="$PROGRAMFILES" 5074 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 5075 if test -n "$programfiles"; then 5076 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 5077 else 5078 feature_not_found "Windows SDK" 5079 fi 5080 elif test "$win_sdk" = "no"; then 5081 win_sdk="" 5082 fi 5083fi 5084 5085########################################## 5086# check if mingw environment provides a recent ntddscsi.h 5087if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 5088 cat > $TMPC << EOF 5089#include <windows.h> 5090#include <ntddscsi.h> 5091int main(void) { 5092#if !defined(IOCTL_SCSI_GET_ADDRESS) 5093#error Missing required ioctl definitions 5094#endif 5095 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 5096 return addr.Lun; 5097} 5098EOF 5099 if compile_prog "" "" ; then 5100 guest_agent_ntddscsi=yes 5101 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 5102 fi 5103fi 5104 5105########################################## 5106# virgl renderer probe 5107 5108if test "$virglrenderer" != "no" ; then 5109 cat > $TMPC << EOF 5110#include <virglrenderer.h> 5111int main(void) { virgl_renderer_poll(); return 0; } 5112EOF 5113 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 5114 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 5115 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 5116 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 5117 compile_prog "$virgl_cflags" "$virgl_libs" ; then 5118 virglrenderer="yes" 5119 else 5120 if test "$virglrenderer" = "yes" ; then 5121 feature_not_found "virglrenderer" 5122 fi 5123 virglrenderer="no" 5124 fi 5125fi 5126 5127########################################## 5128# capstone 5129 5130case "$capstone" in 5131 "" | yes) 5132 if $pkg_config capstone; then 5133 capstone=system 5134 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5135 capstone=git 5136 elif test -e "${source_path}/capstone/Makefile" ; then 5137 capstone=internal 5138 elif test -z "$capstone" ; then 5139 capstone=no 5140 else 5141 feature_not_found "capstone" "Install capstone devel or git submodule" 5142 fi 5143 ;; 5144 5145 system) 5146 if ! $pkg_config capstone; then 5147 feature_not_found "capstone" "Install capstone devel" 5148 fi 5149 ;; 5150esac 5151 5152case "$capstone" in 5153 git | internal) 5154 if test "$capstone" = git; then 5155 git_submodules="${git_submodules} capstone" 5156 fi 5157 mkdir -p capstone 5158 if test "$mingw32" = "yes"; then 5159 LIBCAPSTONE=capstone.lib 5160 else 5161 LIBCAPSTONE=libcapstone.a 5162 fi 5163 capstone_libs="-Lcapstone -lcapstone" 5164 capstone_cflags="-I${source_path}/capstone/include" 5165 ;; 5166 5167 system) 5168 capstone_libs="$($pkg_config --libs capstone)" 5169 capstone_cflags="$($pkg_config --cflags capstone)" 5170 ;; 5171 5172 no) 5173 ;; 5174 *) 5175 error_exit "Unknown state for capstone: $capstone" 5176 ;; 5177esac 5178 5179########################################## 5180# check if we have fdatasync 5181 5182fdatasync=no 5183cat > $TMPC << EOF 5184#include <unistd.h> 5185int main(void) { 5186#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 5187return fdatasync(0); 5188#else 5189#error Not supported 5190#endif 5191} 5192EOF 5193if compile_prog "" "" ; then 5194 fdatasync=yes 5195fi 5196 5197########################################## 5198# check if we have madvise 5199 5200madvise=no 5201cat > $TMPC << EOF 5202#include <sys/types.h> 5203#include <sys/mman.h> 5204#include <stddef.h> 5205int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 5206EOF 5207if compile_prog "" "" ; then 5208 madvise=yes 5209fi 5210 5211########################################## 5212# check if we have posix_madvise 5213 5214posix_madvise=no 5215cat > $TMPC << EOF 5216#include <sys/mman.h> 5217#include <stddef.h> 5218int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 5219EOF 5220if compile_prog "" "" ; then 5221 posix_madvise=yes 5222fi 5223 5224########################################## 5225# check if we have posix_memalign() 5226 5227posix_memalign=no 5228cat > $TMPC << EOF 5229#include <stdlib.h> 5230int main(void) { 5231 void *p; 5232 return posix_memalign(&p, 8, 8); 5233} 5234EOF 5235if compile_prog "" "" ; then 5236 posix_memalign=yes 5237fi 5238 5239########################################## 5240# check if we have posix_syslog 5241 5242posix_syslog=no 5243cat > $TMPC << EOF 5244#include <syslog.h> 5245int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 5246EOF 5247if compile_prog "" "" ; then 5248 posix_syslog=yes 5249fi 5250 5251########################################## 5252# check if we have sem_timedwait 5253 5254sem_timedwait=no 5255cat > $TMPC << EOF 5256#include <semaphore.h> 5257int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 5258EOF 5259if compile_prog "" "" ; then 5260 sem_timedwait=yes 5261fi 5262 5263########################################## 5264# check if we have strchrnul 5265 5266strchrnul=no 5267cat > $TMPC << EOF 5268#include <string.h> 5269int main(void); 5270// Use a haystack that the compiler shouldn't be able to constant fold 5271char *haystack = (char*)&main; 5272int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 5273EOF 5274if compile_prog "" "" ; then 5275 strchrnul=yes 5276fi 5277 5278######################################### 5279# check if we have st_atim 5280 5281st_atim=no 5282cat > $TMPC << EOF 5283#include <sys/stat.h> 5284#include <stddef.h> 5285int main(void) { return offsetof(struct stat, st_atim); } 5286EOF 5287if compile_prog "" "" ; then 5288 st_atim=yes 5289fi 5290 5291########################################## 5292# check if trace backend exists 5293 5294$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 5295if test "$?" -ne 0 ; then 5296 error_exit "invalid trace backends" \ 5297 "Please choose supported trace backends." 5298fi 5299 5300########################################## 5301# For 'ust' backend, test if ust headers are present 5302if have_backend "ust"; then 5303 cat > $TMPC << EOF 5304#include <lttng/tracepoint.h> 5305int main(void) { return 0; } 5306EOF 5307 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5308 if $pkg_config lttng-ust --exists; then 5309 lttng_ust_libs=$($pkg_config --libs lttng-ust) 5310 else 5311 lttng_ust_libs="-llttng-ust -ldl" 5312 fi 5313 if $pkg_config liburcu-bp --exists; then 5314 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5315 else 5316 urcu_bp_libs="-lurcu-bp" 5317 fi 5318 else 5319 error_exit "Trace backend 'ust' missing lttng-ust header files" 5320 fi 5321fi 5322 5323########################################## 5324# For 'dtrace' backend, test if 'dtrace' command is present 5325if have_backend "dtrace"; then 5326 if ! has 'dtrace' ; then 5327 error_exit "dtrace command is not found in PATH $PATH" 5328 fi 5329 trace_backend_stap="no" 5330 if has 'stap' ; then 5331 trace_backend_stap="yes" 5332 fi 5333fi 5334 5335########################################## 5336# check and set a backend for coroutine 5337 5338# We prefer ucontext, but it's not always possible. The fallback 5339# is sigcontext. On Windows the only valid backend is the Windows 5340# specific one. 5341 5342ucontext_works=no 5343if test "$darwin" != "yes"; then 5344 cat > $TMPC << EOF 5345#include <ucontext.h> 5346#ifdef __stub_makecontext 5347#error Ignoring glibc stub makecontext which will always fail 5348#endif 5349int main(void) { makecontext(0, 0, 0); return 0; } 5350EOF 5351 if compile_prog "" "" ; then 5352 ucontext_works=yes 5353 fi 5354fi 5355 5356if test "$coroutine" = ""; then 5357 if test "$mingw32" = "yes"; then 5358 coroutine=win32 5359 elif test "$ucontext_works" = "yes"; then 5360 coroutine=ucontext 5361 else 5362 coroutine=sigaltstack 5363 fi 5364else 5365 case $coroutine in 5366 windows) 5367 if test "$mingw32" != "yes"; then 5368 error_exit "'windows' coroutine backend only valid for Windows" 5369 fi 5370 # Unfortunately the user visible backend name doesn't match the 5371 # coroutine-*.c filename for this case, so we have to adjust it here. 5372 coroutine=win32 5373 ;; 5374 ucontext) 5375 if test "$ucontext_works" != "yes"; then 5376 feature_not_found "ucontext" 5377 fi 5378 ;; 5379 sigaltstack) 5380 if test "$mingw32" = "yes"; then 5381 error_exit "only the 'windows' coroutine backend is valid for Windows" 5382 fi 5383 ;; 5384 *) 5385 error_exit "unknown coroutine backend $coroutine" 5386 ;; 5387 esac 5388fi 5389 5390if test "$coroutine_pool" = ""; then 5391 coroutine_pool=yes 5392fi 5393 5394if test "$debug_stack_usage" = "yes"; then 5395 if test "$coroutine_pool" = "yes"; then 5396 echo "WARN: disabling coroutine pool for stack usage debugging" 5397 coroutine_pool=no 5398 fi 5399fi 5400 5401################################################## 5402# SafeStack 5403 5404 5405if test "$safe_stack" = "yes"; then 5406cat > $TMPC << EOF 5407int main(int argc, char *argv[]) 5408{ 5409#if ! __has_feature(safe_stack) 5410#error SafeStack Disabled 5411#endif 5412 return 0; 5413} 5414EOF 5415 flag="-fsanitize=safe-stack" 5416 # Check that safe-stack is supported and enabled. 5417 if compile_prog "-Werror $flag" "$flag"; then 5418 # Flag needed both at compilation and at linking 5419 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5420 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5421 else 5422 error_exit "SafeStack not supported by your compiler" 5423 fi 5424 if test "$coroutine" != "ucontext"; then 5425 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5426 fi 5427else 5428cat > $TMPC << EOF 5429int main(int argc, char *argv[]) 5430{ 5431#if defined(__has_feature) 5432#if __has_feature(safe_stack) 5433#error SafeStack Enabled 5434#endif 5435#endif 5436 return 0; 5437} 5438EOF 5439if test "$safe_stack" = "no"; then 5440 # Make sure that safe-stack is disabled 5441 if ! compile_prog "-Werror" ""; then 5442 # SafeStack was already enabled, try to explicitly remove the feature 5443 flag="-fno-sanitize=safe-stack" 5444 if ! compile_prog "-Werror $flag" "$flag"; then 5445 error_exit "Configure cannot disable SafeStack" 5446 fi 5447 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5448 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5449 fi 5450else # "$safe_stack" = "" 5451 # Set safe_stack to yes or no based on pre-existing flags 5452 if compile_prog "-Werror" ""; then 5453 safe_stack="no" 5454 else 5455 safe_stack="yes" 5456 if test "$coroutine" != "ucontext"; then 5457 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5458 fi 5459 fi 5460fi 5461fi 5462 5463########################################## 5464# check if we have open_by_handle_at 5465 5466open_by_handle_at=no 5467cat > $TMPC << EOF 5468#include <fcntl.h> 5469#if !defined(AT_EMPTY_PATH) 5470# error missing definition 5471#else 5472int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5473#endif 5474EOF 5475if compile_prog "" "" ; then 5476 open_by_handle_at=yes 5477fi 5478 5479######################################## 5480# check if we have linux/magic.h 5481 5482linux_magic_h=no 5483cat > $TMPC << EOF 5484#include <linux/magic.h> 5485int main(void) { 5486 return 0; 5487} 5488EOF 5489if compile_prog "" "" ; then 5490 linux_magic_h=yes 5491fi 5492 5493######################################## 5494# check if we have valgrind/valgrind.h 5495 5496valgrind_h=no 5497cat > $TMPC << EOF 5498#include <valgrind/valgrind.h> 5499int main(void) { 5500 return 0; 5501} 5502EOF 5503if compile_prog "" "" ; then 5504 valgrind_h=yes 5505fi 5506 5507######################################## 5508# check if environ is declared 5509 5510has_environ=no 5511cat > $TMPC << EOF 5512#include <unistd.h> 5513int main(void) { 5514 environ = 0; 5515 return 0; 5516} 5517EOF 5518if compile_prog "" "" ; then 5519 has_environ=yes 5520fi 5521 5522######################################## 5523# check if cpuid.h is usable. 5524 5525cat > $TMPC << EOF 5526#include <cpuid.h> 5527int main(void) { 5528 unsigned a, b, c, d; 5529 int max = __get_cpuid_max(0, 0); 5530 5531 if (max >= 1) { 5532 __cpuid(1, a, b, c, d); 5533 } 5534 5535 if (max >= 7) { 5536 __cpuid_count(7, 0, a, b, c, d); 5537 } 5538 5539 return 0; 5540} 5541EOF 5542if compile_prog "" "" ; then 5543 cpuid_h=yes 5544fi 5545 5546########################################## 5547# avx2 optimization requirement check 5548# 5549# There is no point enabling this if cpuid.h is not usable, 5550# since we won't be able to select the new routines. 5551 5552if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5553 cat > $TMPC << EOF 5554#pragma GCC push_options 5555#pragma GCC target("avx2") 5556#include <cpuid.h> 5557#include <immintrin.h> 5558static int bar(void *a) { 5559 __m256i x = *(__m256i *)a; 5560 return _mm256_testz_si256(x, x); 5561} 5562int main(int argc, char *argv[]) { return bar(argv[0]); } 5563EOF 5564 if compile_object "" ; then 5565 avx2_opt="yes" 5566 else 5567 avx2_opt="no" 5568 fi 5569fi 5570 5571########################################## 5572# avx512f optimization requirement check 5573# 5574# There is no point enabling this if cpuid.h is not usable, 5575# since we won't be able to select the new routines. 5576# by default, it is turned off. 5577# if user explicitly want to enable it, check environment 5578 5579if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 5580 cat > $TMPC << EOF 5581#pragma GCC push_options 5582#pragma GCC target("avx512f") 5583#include <cpuid.h> 5584#include <immintrin.h> 5585static int bar(void *a) { 5586 __m512i x = *(__m512i *)a; 5587 return _mm512_test_epi64_mask(x, x); 5588} 5589int main(int argc, char *argv[]) 5590{ 5591 return bar(argv[0]); 5592} 5593EOF 5594 if ! compile_object "" ; then 5595 avx512f_opt="no" 5596 fi 5597else 5598 avx512f_opt="no" 5599fi 5600 5601######################################## 5602# check if __[u]int128_t is usable. 5603 5604int128=no 5605cat > $TMPC << EOF 5606__int128_t a; 5607__uint128_t b; 5608int main (void) { 5609 a = a + b; 5610 b = a * b; 5611 a = a * a; 5612 return 0; 5613} 5614EOF 5615if compile_prog "" "" ; then 5616 int128=yes 5617fi 5618 5619######################################### 5620# See if 128-bit atomic operations are supported. 5621 5622atomic128=no 5623if test "$int128" = "yes"; then 5624 cat > $TMPC << EOF 5625int main(void) 5626{ 5627 unsigned __int128 x = 0, y = 0; 5628 y = __atomic_load_16(&x, 0); 5629 __atomic_store_16(&x, y, 0); 5630 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5631 return 0; 5632} 5633EOF 5634 if compile_prog "" "" ; then 5635 atomic128=yes 5636 fi 5637fi 5638 5639cmpxchg128=no 5640if test "$int128" = yes && test "$atomic128" = no; then 5641 cat > $TMPC << EOF 5642int main(void) 5643{ 5644 unsigned __int128 x = 0, y = 0; 5645 __sync_val_compare_and_swap_16(&x, y, x); 5646 return 0; 5647} 5648EOF 5649 if compile_prog "" "" ; then 5650 cmpxchg128=yes 5651 fi 5652fi 5653 5654######################################### 5655# See if 64-bit atomic operations are supported. 5656# Note that without __atomic builtins, we can only 5657# assume atomic loads/stores max at pointer size. 5658 5659cat > $TMPC << EOF 5660#include <stdint.h> 5661int main(void) 5662{ 5663 uint64_t x = 0, y = 0; 5664#ifdef __ATOMIC_RELAXED 5665 y = __atomic_load_n(&x, __ATOMIC_RELAXED); 5666 __atomic_store_n(&x, y, __ATOMIC_RELAXED); 5667 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED); 5668 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED); 5669 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED); 5670#else 5671 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5672 __sync_lock_test_and_set(&x, y); 5673 __sync_val_compare_and_swap(&x, y, 0); 5674 __sync_fetch_and_add(&x, y); 5675#endif 5676 return 0; 5677} 5678EOF 5679if compile_prog "" "" ; then 5680 atomic64=yes 5681fi 5682 5683######################################### 5684# See if --dynamic-list is supported by the linker 5685ld_dynamic_list="no" 5686if test "$static" = "no" ; then 5687 cat > $TMPTXT <<EOF 5688{ 5689 foo; 5690}; 5691EOF 5692 5693 cat > $TMPC <<EOF 5694#include <stdio.h> 5695void foo(void); 5696 5697void foo(void) 5698{ 5699 printf("foo\n"); 5700} 5701 5702int main(void) 5703{ 5704 foo(); 5705 return 0; 5706} 5707EOF 5708 5709 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 5710 ld_dynamic_list="yes" 5711 fi 5712fi 5713 5714######################################### 5715# See if -exported_symbols_list is supported by the linker 5716 5717ld_exported_symbols_list="no" 5718if test "$static" = "no" ; then 5719 cat > $TMPTXT <<EOF 5720 _foo 5721EOF 5722 5723 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 5724 ld_exported_symbols_list="yes" 5725 fi 5726fi 5727 5728if test "$plugins" = "yes" && 5729 test "$ld_dynamic_list" = "no" && 5730 test "$ld_exported_symbols_list" = "no" ; then 5731 error_exit \ 5732 "Plugin support requires dynamic linking and specifying a set of symbols " \ 5733 "that are exported to plugins. Unfortunately your linker doesn't " \ 5734 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 5735 "for this purpose. You can't build with --static." 5736fi 5737 5738######################################## 5739# See if __attribute__((alias)) is supported. 5740# This false for Xcode 9, but has been remedied for Xcode 10. 5741# Unfortunately, travis uses Xcode 9 by default. 5742 5743attralias=no 5744cat > $TMPC << EOF 5745int x = 1; 5746extern const int y __attribute__((alias("x"))); 5747int main(void) { return 0; } 5748EOF 5749if compile_prog "" "" ; then 5750 attralias=yes 5751fi 5752 5753######################################## 5754# check if getauxval is available. 5755 5756getauxval=no 5757cat > $TMPC << EOF 5758#include <sys/auxv.h> 5759int main(void) { 5760 return getauxval(AT_HWCAP) == 0; 5761} 5762EOF 5763if compile_prog "" "" ; then 5764 getauxval=yes 5765fi 5766 5767######################################## 5768# check if ccache is interfering with 5769# semantic analysis of macros 5770 5771unset CCACHE_CPP2 5772ccache_cpp2=no 5773cat > $TMPC << EOF 5774static const int Z = 1; 5775#define fn() ({ Z; }) 5776#define TAUT(X) ((X) == Z) 5777#define PAREN(X, Y) (X == Y) 5778#define ID(X) (X) 5779int main(int argc, char *argv[]) 5780{ 5781 int x = 0, y = 0; 5782 x = ID(x); 5783 x = fn(); 5784 fn(); 5785 if (PAREN(x, y)) return 0; 5786 if (TAUT(Z)) return 0; 5787 return 0; 5788} 5789EOF 5790 5791if ! compile_object "-Werror"; then 5792 ccache_cpp2=yes 5793fi 5794 5795################################################# 5796# clang does not support glibc + FORTIFY_SOURCE. 5797 5798if test "$fortify_source" != "no"; then 5799 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5800 fortify_source="no"; 5801 elif test -n "$cxx" && has $cxx && 5802 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5803 fortify_source="no"; 5804 else 5805 fortify_source="yes" 5806 fi 5807fi 5808 5809############################################### 5810# Check if copy_file_range is provided by glibc 5811have_copy_file_range=no 5812cat > $TMPC << EOF 5813#include <unistd.h> 5814int main(void) { 5815 copy_file_range(0, NULL, 0, NULL, 0, 0); 5816 return 0; 5817} 5818EOF 5819if compile_prog "" "" ; then 5820 have_copy_file_range=yes 5821fi 5822 5823########################################## 5824# check if struct fsxattr is available via linux/fs.h 5825 5826have_fsxattr=no 5827cat > $TMPC << EOF 5828#include <linux/fs.h> 5829struct fsxattr foo; 5830int main(void) { 5831 return 0; 5832} 5833EOF 5834if compile_prog "" "" ; then 5835 have_fsxattr=yes 5836fi 5837 5838########################################## 5839# check for usable membarrier system call 5840if test "$membarrier" = "yes"; then 5841 have_membarrier=no 5842 if test "$mingw32" = "yes" ; then 5843 have_membarrier=yes 5844 elif test "$linux" = "yes" ; then 5845 cat > $TMPC << EOF 5846 #include <linux/membarrier.h> 5847 #include <sys/syscall.h> 5848 #include <unistd.h> 5849 #include <stdlib.h> 5850 int main(void) { 5851 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5852 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5853 exit(0); 5854 } 5855EOF 5856 if compile_prog "" "" ; then 5857 have_membarrier=yes 5858 fi 5859 fi 5860 if test "$have_membarrier" = "no"; then 5861 feature_not_found "membarrier" "membarrier system call not available" 5862 fi 5863else 5864 # Do not enable it by default even for Mingw32, because it doesn't 5865 # work on Wine. 5866 membarrier=no 5867fi 5868 5869########################################## 5870# check if rtnetlink.h exists and is useful 5871have_rtnetlink=no 5872cat > $TMPC << EOF 5873#include <linux/rtnetlink.h> 5874int main(void) { 5875 return IFLA_PROTO_DOWN; 5876} 5877EOF 5878if compile_prog "" "" ; then 5879 have_rtnetlink=yes 5880fi 5881 5882########################################## 5883# check for usable AF_VSOCK environment 5884have_af_vsock=no 5885cat > $TMPC << EOF 5886#include <errno.h> 5887#include <sys/types.h> 5888#include <sys/socket.h> 5889#if !defined(AF_VSOCK) 5890# error missing AF_VSOCK flag 5891#endif 5892#include <linux/vm_sockets.h> 5893int main(void) { 5894 int sock, ret; 5895 struct sockaddr_vm svm; 5896 socklen_t len = sizeof(svm); 5897 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5898 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5899 if ((ret == -1) && (errno == ENOTCONN)) { 5900 return 0; 5901 } 5902 return -1; 5903} 5904EOF 5905if compile_prog "" "" ; then 5906 have_af_vsock=yes 5907fi 5908 5909########################################## 5910# check for usable AF_ALG environment 5911have_afalg=no 5912cat > $TMPC << EOF 5913#include <errno.h> 5914#include <sys/types.h> 5915#include <sys/socket.h> 5916#include <linux/if_alg.h> 5917int main(void) { 5918 int sock; 5919 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5920 return sock; 5921} 5922EOF 5923if compile_prog "" "" ; then 5924 have_afalg=yes 5925fi 5926if test "$crypto_afalg" = "yes" 5927then 5928 if test "$have_afalg" != "yes" 5929 then 5930 error_exit "AF_ALG requested but could not be detected" 5931 fi 5932fi 5933 5934 5935################################################# 5936# Check to see if we have the Hypervisor framework 5937if [ "$darwin" = "yes" ] ; then 5938 cat > $TMPC << EOF 5939#include <Hypervisor/hv.h> 5940int main() { return 0;} 5941EOF 5942 if ! compile_object ""; then 5943 hvf='no' 5944 else 5945 hvf='yes' 5946 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS" 5947 fi 5948fi 5949 5950########################################## 5951# check for sysmacros.h 5952 5953have_sysmacros=no 5954cat > $TMPC << EOF 5955#include <sys/sysmacros.h> 5956int main(void) { 5957 return makedev(0, 0); 5958} 5959EOF 5960if compile_prog "" "" ; then 5961 have_sysmacros=yes 5962fi 5963 5964########################################## 5965# check for _Static_assert() 5966 5967have_static_assert=no 5968cat > $TMPC << EOF 5969_Static_assert(1, "success"); 5970int main(void) { 5971 return 0; 5972} 5973EOF 5974if compile_prog "" "" ; then 5975 have_static_assert=yes 5976fi 5977 5978########################################## 5979# check for utmpx.h, it is missing e.g. on OpenBSD 5980 5981have_utmpx=no 5982cat > $TMPC << EOF 5983#include <utmpx.h> 5984struct utmpx user_info; 5985int main(void) { 5986 return 0; 5987} 5988EOF 5989if compile_prog "" "" ; then 5990 have_utmpx=yes 5991fi 5992 5993########################################## 5994# check for getrandom() 5995 5996have_getrandom=no 5997cat > $TMPC << EOF 5998#include <sys/random.h> 5999int main(void) { 6000 return getrandom(0, 0, GRND_NONBLOCK); 6001} 6002EOF 6003if compile_prog "" "" ; then 6004 have_getrandom=yes 6005fi 6006 6007########################################## 6008# checks for sanitizers 6009 6010have_asan=no 6011have_ubsan=no 6012have_asan_iface_h=no 6013have_asan_iface_fiber=no 6014 6015if test "$sanitizers" = "yes" ; then 6016 write_c_skeleton 6017 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 6018 have_asan=yes 6019 fi 6020 6021 # we could use a simple skeleton for flags checks, but this also 6022 # detect the static linking issue of ubsan, see also: 6023 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 6024 cat > $TMPC << EOF 6025#include <stdlib.h> 6026int main(void) { 6027 void *tmp = malloc(10); 6028 if (tmp != NULL) { 6029 return *(int *)(tmp + 2); 6030 } 6031 return 1; 6032} 6033EOF 6034 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 6035 have_ubsan=yes 6036 fi 6037 6038 if check_include "sanitizer/asan_interface.h" ; then 6039 have_asan_iface_h=yes 6040 fi 6041 6042 cat > $TMPC << EOF 6043#include <sanitizer/asan_interface.h> 6044int main(void) { 6045 __sanitizer_start_switch_fiber(0, 0, 0); 6046 return 0; 6047} 6048EOF 6049 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 6050 have_asan_iface_fiber=yes 6051 fi 6052fi 6053 6054########################################## 6055# checks for fuzzer 6056if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then 6057 write_c_fuzzer_skeleton 6058 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then 6059 have_fuzzer=yes 6060 else 6061 error_exit "Your compiler doesn't support -fsanitize=fuzzer" 6062 exit 1 6063 fi 6064fi 6065 6066# Thread sanitizer is, for now, much noisier than the other sanitizers; 6067# keep it separate until that is not the case. 6068if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 6069 error_exit "TSAN is not supported with other sanitiziers." 6070fi 6071have_tsan=no 6072have_tsan_iface_fiber=no 6073if test "$tsan" = "yes" ; then 6074 write_c_skeleton 6075 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6076 have_tsan=yes 6077 fi 6078 cat > $TMPC << EOF 6079#include <sanitizer/tsan_interface.h> 6080int main(void) { 6081 __tsan_create_fiber(0); 6082 return 0; 6083} 6084EOF 6085 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6086 have_tsan_iface_fiber=yes 6087 fi 6088fi 6089 6090########################################## 6091# check for libpmem 6092 6093if test "$libpmem" != "no"; then 6094 if $pkg_config --exists "libpmem"; then 6095 libpmem="yes" 6096 libpmem_libs=$($pkg_config --libs libpmem) 6097 libpmem_cflags=$($pkg_config --cflags libpmem) 6098 else 6099 if test "$libpmem" = "yes" ; then 6100 feature_not_found "libpmem" "Install nvml or pmdk" 6101 fi 6102 libpmem="no" 6103 fi 6104fi 6105 6106########################################## 6107# check for libdaxctl 6108 6109if test "$libdaxctl" != "no"; then 6110 if $pkg_config --atleast-version=57 "libdaxctl"; then 6111 libdaxctl="yes" 6112 libdaxctl_libs=$($pkg_config --libs libdaxctl) 6113 libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 6114 else 6115 if test "$libdaxctl" = "yes" ; then 6116 feature_not_found "libdaxctl" "Install libdaxctl" 6117 fi 6118 libdaxctl="no" 6119 fi 6120fi 6121 6122########################################## 6123# check for slirp 6124 6125# slirp is only required when building softmmu targets 6126if test -z "$slirp" -a "$softmmu" != "yes" ; then 6127 slirp="no" 6128fi 6129 6130case "$slirp" in 6131 "" | yes) 6132 if $pkg_config slirp; then 6133 slirp=system 6134 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 6135 slirp=git 6136 elif test -e "${source_path}/slirp/Makefile" ; then 6137 slirp=internal 6138 elif test -z "$slirp" ; then 6139 slirp=no 6140 else 6141 feature_not_found "slirp" "Install slirp devel or git submodule" 6142 fi 6143 ;; 6144 6145 system) 6146 if ! $pkg_config slirp; then 6147 feature_not_found "slirp" "Install slirp devel" 6148 fi 6149 ;; 6150esac 6151 6152case "$slirp" in 6153 git | internal) 6154 if test "$slirp" = git; then 6155 git_submodules="${git_submodules} slirp" 6156 fi 6157 mkdir -p slirp 6158 slirp_cflags="-I${source_path}/slirp/src -Islirp/src" 6159 slirp_libs="-Lslirp -lslirp" 6160 if test "$mingw32" = "yes" ; then 6161 slirp_libs="$slirp_libs -lws2_32 -liphlpapi" 6162 fi 6163 ;; 6164 6165 system) 6166 slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 6167 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 6168 slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 6169 ;; 6170 6171 no) 6172 ;; 6173 *) 6174 error_exit "Unknown state for slirp: $slirp" 6175 ;; 6176esac 6177 6178########################################## 6179# check for usable __NR_keyctl syscall 6180 6181if test "$linux" = "yes" ; then 6182 6183 have_keyring=no 6184 cat > $TMPC << EOF 6185#include <errno.h> 6186#include <asm/unistd.h> 6187#include <linux/keyctl.h> 6188#include <unistd.h> 6189int main(void) { 6190 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 6191} 6192EOF 6193 if compile_prog "" "" ; then 6194 have_keyring=yes 6195 fi 6196fi 6197if test "$secret_keyring" != "no" 6198then 6199 if test "$have_keyring" = "yes" 6200 then 6201 secret_keyring=yes 6202 else 6203 if test "$secret_keyring" = "yes" 6204 then 6205 error_exit "syscall __NR_keyctl requested, \ 6206but not implemented on your system" 6207 else 6208 secret_keyring=no 6209 fi 6210 fi 6211fi 6212 6213########################################## 6214# End of CC checks 6215# After here, no more $cc or $ld runs 6216 6217write_c_skeleton 6218 6219if test "$gcov" = "yes" ; then 6220 : 6221elif test "$fortify_source" = "yes" ; then 6222 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 6223 debug=no 6224fi 6225if test "$debug_info" = "yes"; then 6226 CFLAGS="-g $CFLAGS" 6227 LDFLAGS="-g $LDFLAGS" 6228fi 6229if test "$debug" = "no"; then 6230 CFLAGS="-O2 $CFLAGS" 6231fi 6232 6233case "$ARCH" in 6234alpha) 6235 # Ensure there's only a single GP 6236 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 6237;; 6238esac 6239 6240if test "$gprof" = "yes" ; then 6241 QEMU_CFLAGS="-p $QEMU_CFLAGS" 6242 QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 6243fi 6244 6245if test "$have_asan" = "yes"; then 6246 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 6247 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 6248 if test "$have_asan_iface_h" = "no" ; then 6249 echo "ASAN build enabled, but ASAN header missing." \ 6250 "Without code annotation, the report may be inferior." 6251 elif test "$have_asan_iface_fiber" = "no" ; then 6252 echo "ASAN build enabled, but ASAN header is too old." \ 6253 "Without code annotation, the report may be inferior." 6254 fi 6255fi 6256if test "$have_tsan" = "yes" ; then 6257 if test "$have_tsan_iface_fiber" = "yes" ; then 6258 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 6259 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 6260 else 6261 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 6262 fi 6263elif test "$tsan" = "yes" ; then 6264 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 6265fi 6266if test "$have_ubsan" = "yes"; then 6267 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 6268 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 6269fi 6270 6271########################################## 6272# Do we have libnfs 6273if test "$libnfs" != "no" ; then 6274 if $pkg_config --atleast-version=1.9.3 libnfs; then 6275 libnfs="yes" 6276 libnfs_libs=$($pkg_config --libs libnfs) 6277 else 6278 if test "$libnfs" = "yes" ; then 6279 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 6280 fi 6281 libnfs="no" 6282 fi 6283fi 6284 6285########################################## 6286# Do we have libudev 6287if test "$libudev" != "no" ; then 6288 if $pkg_config libudev && test "$static" != "yes"; then 6289 libudev="yes" 6290 libudev_libs=$($pkg_config --libs libudev) 6291 else 6292 libudev="no" 6293 fi 6294fi 6295 6296# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 6297if test "$solaris" = "no" && test "$tsan" = "no"; then 6298 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 6299 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 6300 fi 6301fi 6302 6303# test if pod2man has --utf8 option 6304if pod2man --help | grep -q utf8; then 6305 POD2MAN="pod2man --utf8" 6306else 6307 POD2MAN="pod2man" 6308fi 6309 6310# Use ASLR, no-SEH and DEP if available 6311if test "$mingw32" = "yes" ; then 6312 for flag in --dynamicbase --no-seh --nxcompat; do 6313 if ld_has $flag ; then 6314 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 6315 fi 6316 done 6317fi 6318 6319# Disable OpenBSD W^X if available 6320if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then 6321 cat > $TMPC <<EOF 6322 int main(void) { return 0; } 6323EOF 6324 wx_ldflags="-Wl,-z,wxneeded" 6325 if compile_prog "" "$wx_ldflags"; then 6326 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" 6327 fi 6328fi 6329 6330qemu_confdir="$sysconfdir/$qemu_suffix" 6331qemu_moddir="$libdir/$qemu_suffix" 6332qemu_datadir="$datadir/$qemu_suffix" 6333qemu_docdir="$docdir/$qemu_suffix" 6334qemu_localedir="$datadir/locale" 6335qemu_icondir="$datadir/icons" 6336qemu_desktopdir="$datadir/applications" 6337 6338# We can only support ivshmem if we have eventfd 6339if [ "$eventfd" = "yes" ]; then 6340 ivshmem=yes 6341fi 6342 6343if test "$softmmu" = yes ; then 6344 if test "$linux" = yes; then 6345 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 6346 virtfs=yes 6347 else 6348 if test "$virtfs" = yes; then 6349 error_exit "VirtFS requires libcap-ng devel and libattr devel" 6350 fi 6351 virtfs=no 6352 fi 6353 if test "$mpath" != no && test "$mpathpersist" = yes ; then 6354 mpath=yes 6355 else 6356 if test "$mpath" = yes; then 6357 error_exit "Multipath requires libmpathpersist devel" 6358 fi 6359 mpath=no 6360 fi 6361 else 6362 if test "$virtfs" = yes; then 6363 error_exit "VirtFS is supported only on Linux" 6364 fi 6365 virtfs=no 6366 if test "$mpath" = yes; then 6367 error_exit "Multipath is supported only on Linux" 6368 fi 6369 mpath=no 6370 fi 6371fi 6372 6373# Probe for guest agent support/options 6374 6375if [ "$guest_agent" != "no" ]; then 6376 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6377 guest_agent=no 6378 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6379 guest_agent=yes 6380 elif [ "$guest_agent" != yes ]; then 6381 guest_agent=no 6382 else 6383 error_exit "Guest agent is not supported on this platform" 6384 fi 6385fi 6386 6387# Guest agent Window MSI package 6388 6389if test "$guest_agent" != yes; then 6390 if test "$guest_agent_msi" = yes; then 6391 error_exit "MSI guest agent package requires guest agent enabled" 6392 fi 6393 guest_agent_msi=no 6394elif test "$mingw32" != "yes"; then 6395 if test "$guest_agent_msi" = "yes"; then 6396 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6397 fi 6398 guest_agent_msi=no 6399elif ! has wixl; then 6400 if test "$guest_agent_msi" = "yes"; then 6401 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6402 fi 6403 guest_agent_msi=no 6404else 6405 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6406 # disabled explicitly 6407 if test "$guest_agent_msi" != "no"; then 6408 guest_agent_msi=yes 6409 fi 6410fi 6411 6412if test "$guest_agent_msi" = "yes"; then 6413 if test "$guest_agent_with_vss" = "yes"; then 6414 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6415 fi 6416 6417 if test "$QEMU_GA_MANUFACTURER" = ""; then 6418 QEMU_GA_MANUFACTURER=QEMU 6419 fi 6420 6421 if test "$QEMU_GA_DISTRO" = ""; then 6422 QEMU_GA_DISTRO=Linux 6423 fi 6424 6425 if test "$QEMU_GA_VERSION" = ""; then 6426 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6427 fi 6428 6429 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6430 6431 case "$cpu" in 6432 x86_64) 6433 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6434 ;; 6435 i386) 6436 QEMU_GA_MSI_ARCH="-D Arch=32" 6437 ;; 6438 *) 6439 error_exit "CPU $cpu not supported for building installation package" 6440 ;; 6441 esac 6442fi 6443 6444# Mac OS X ships with a broken assembler 6445roms= 6446if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6447 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6448 test "$softmmu" = yes ; then 6449 # Different host OS linkers have different ideas about the name of the ELF 6450 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6451 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6452 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6453 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6454 ld_i386_emulation="$emu" 6455 roms="optionrom" 6456 break 6457 fi 6458 done 6459fi 6460 6461# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6462if test "$cpu" = "s390x" ; then 6463 write_c_skeleton 6464 if compile_prog "-march=z900" ""; then 6465 roms="$roms s390-ccw" 6466 # SLOF is required for building the s390-ccw firmware on s390x, 6467 # since it is using the libnet code from SLOF for network booting. 6468 if test -e "${source_path}/.git" ; then 6469 git_submodules="${git_submodules} roms/SLOF" 6470 fi 6471 fi 6472fi 6473 6474# Check that the C++ compiler exists and works with the C compiler. 6475# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6476if has $cxx; then 6477 cat > $TMPC <<EOF 6478int c_function(void); 6479int main(void) { return c_function(); } 6480EOF 6481 6482 compile_object 6483 6484 cat > $TMPCXX <<EOF 6485extern "C" { 6486 int c_function(void); 6487} 6488int c_function(void) { return 42; } 6489EOF 6490 6491 update_cxxflags 6492 6493 if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 6494 # C++ compiler $cxx works ok with C compiler $cc 6495 : 6496 else 6497 echo "C++ compiler $cxx does not work with C compiler $cc" 6498 echo "Disabling C++ specific optional code" 6499 cxx= 6500 fi 6501else 6502 echo "No C++ compiler available; disabling C++ specific optional code" 6503 cxx= 6504fi 6505 6506if test $git_update = 'yes' ; then 6507 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules") 6508fi 6509if test "$fdt" = "git" ; then 6510 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 6511fi 6512 6513config_host_mak="config-host.mak" 6514 6515echo "# Automatically generated by configure - do not modify" > $config_host_mak 6516echo >> $config_host_mak 6517 6518echo all: >> $config_host_mak 6519echo "prefix=$prefix" >> $config_host_mak 6520echo "bindir=$bindir" >> $config_host_mak 6521echo "libdir=$libdir" >> $config_host_mak 6522echo "libexecdir=$libexecdir" >> $config_host_mak 6523echo "includedir=$includedir" >> $config_host_mak 6524echo "sysconfdir=$sysconfdir" >> $config_host_mak 6525echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6526echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6527echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6528echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6529if test "$mingw32" = "no" ; then 6530 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6531fi 6532echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6533echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6534echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 6535echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 6536echo "GIT=$git" >> $config_host_mak 6537echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6538echo "GIT_UPDATE=$git_update" >> $config_host_mak 6539 6540echo "ARCH=$ARCH" >> $config_host_mak 6541 6542if test "$default_devices" = "yes" ; then 6543 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 6544else 6545 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 6546fi 6547if test "$debug_tcg" = "yes" ; then 6548 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6549fi 6550if test "$strip_opt" = "yes" ; then 6551 echo "STRIP=${strip}" >> $config_host_mak 6552fi 6553if test "$bigendian" = "yes" ; then 6554 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6555fi 6556if test "$mingw32" = "yes" ; then 6557 echo "CONFIG_WIN32=y" >> $config_host_mak 6558 rc_version=$(cat $source_path/VERSION) 6559 version_major=${rc_version%%.*} 6560 rc_version=${rc_version#*.} 6561 version_minor=${rc_version%%.*} 6562 rc_version=${rc_version#*.} 6563 version_subminor=${rc_version%%.*} 6564 version_micro=0 6565 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6566 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6567 if test "$guest_agent_with_vss" = "yes" ; then 6568 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6569 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6570 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6571 fi 6572 if test "$guest_agent_ntddscsi" = "yes" ; then 6573 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 6574 fi 6575 if test "$guest_agent_msi" = "yes"; then 6576 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6577 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6578 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6579 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6580 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6581 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6582 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6583 fi 6584else 6585 echo "CONFIG_POSIX=y" >> $config_host_mak 6586fi 6587 6588if test "$linux" = "yes" ; then 6589 echo "CONFIG_LINUX=y" >> $config_host_mak 6590fi 6591 6592if test "$darwin" = "yes" ; then 6593 echo "CONFIG_DARWIN=y" >> $config_host_mak 6594fi 6595 6596if test "$solaris" = "yes" ; then 6597 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6598fi 6599if test "$haiku" = "yes" ; then 6600 echo "CONFIG_HAIKU=y" >> $config_host_mak 6601fi 6602if test "$static" = "yes" ; then 6603 echo "CONFIG_STATIC=y" >> $config_host_mak 6604fi 6605if test "$profiler" = "yes" ; then 6606 echo "CONFIG_PROFILER=y" >> $config_host_mak 6607fi 6608if test "$want_tools" = "yes" ; then 6609 echo "CONFIG_TOOLS=y" >> $config_host_mak 6610fi 6611if test "$guest_agent" = "yes" ; then 6612 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 6613fi 6614if test "$slirp" != "no"; then 6615 echo "CONFIG_SLIRP=y" >> $config_host_mak 6616 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6617 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 6618 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 6619fi 6620subdirs= 6621if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 6622 subdirs="$subdirs slirp" 6623fi 6624if test "$vde" = "yes" ; then 6625 echo "CONFIG_VDE=y" >> $config_host_mak 6626 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6627fi 6628if test "$netmap" = "yes" ; then 6629 echo "CONFIG_NETMAP=y" >> $config_host_mak 6630fi 6631if test "$l2tpv3" = "yes" ; then 6632 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6633fi 6634if test "$gprof" = "yes" ; then 6635 echo "CONFIG_GPROF=y" >> $config_host_mak 6636fi 6637if test "$cap_ng" = "yes" ; then 6638 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 6639 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak 6640fi 6641echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6642for drv in $audio_drv_list; do 6643 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6644 echo "$def=y" >> $config_host_mak 6645done 6646if test "$alsa" = "yes" ; then 6647 echo "CONFIG_ALSA=y" >> $config_host_mak 6648fi 6649echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6650echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak 6651if test "$libpulse" = "yes" ; then 6652 echo "CONFIG_LIBPULSE=y" >> $config_host_mak 6653fi 6654echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6655echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak 6656echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6657echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6658echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6659if test "$libjack" = "yes" ; then 6660 echo "CONFIG_LIBJACK=y" >> $config_host_mak 6661fi 6662echo "JACK_LIBS=$jack_libs" >> $config_host_mak 6663if test "$audio_win_int" = "yes" ; then 6664 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6665fi 6666echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6667echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6668if test "$xfs" = "yes" ; then 6669 echo "CONFIG_XFS=y" >> $config_host_mak 6670fi 6671qemu_version=$(head $source_path/VERSION) 6672echo "PKGVERSION=$pkgversion" >>$config_host_mak 6673echo "SRC_PATH=$source_path" >> $config_host_mak 6674echo "TARGET_DIRS=$target_list" >> $config_host_mak 6675if [ "$docs" = "yes" ] ; then 6676 echo "BUILD_DOCS=yes" >> $config_host_mak 6677fi 6678if test "$modules" = "yes"; then 6679 # $shacmd can generate a hash started with digit, which the compiler doesn't 6680 # like as an symbol. So prefix it with an underscore 6681 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6682 echo "CONFIG_MODULES=y" >> $config_host_mak 6683fi 6684if test "$module_upgrades" = "yes"; then 6685 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 6686fi 6687if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 6688 echo "CONFIG_X11=y" >> $config_host_mak 6689 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6690 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6691fi 6692if test "$cocoa" = "yes" ; then 6693 echo "CONFIG_COCOA=y" >> $config_host_mak 6694fi 6695if test "$iconv" = "yes" ; then 6696 echo "CONFIG_ICONV=y" >> $config_host_mak 6697 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 6698 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 6699fi 6700if test "$curses" = "yes" ; then 6701 echo "CONFIG_CURSES=y" >> $config_host_mak 6702 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6703 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6704fi 6705if test "$pipe2" = "yes" ; then 6706 echo "CONFIG_PIPE2=y" >> $config_host_mak 6707fi 6708if test "$accept4" = "yes" ; then 6709 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6710fi 6711if test "$splice" = "yes" ; then 6712 echo "CONFIG_SPLICE=y" >> $config_host_mak 6713fi 6714if test "$eventfd" = "yes" ; then 6715 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6716fi 6717if test "$memfd" = "yes" ; then 6718 echo "CONFIG_MEMFD=y" >> $config_host_mak 6719fi 6720if test "$have_usbfs" = "yes" ; then 6721 echo "CONFIG_USBFS=y" >> $config_host_mak 6722fi 6723if test "$fallocate" = "yes" ; then 6724 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6725fi 6726if test "$fallocate_punch_hole" = "yes" ; then 6727 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6728fi 6729if test "$fallocate_zero_range" = "yes" ; then 6730 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6731fi 6732if test "$posix_fallocate" = "yes" ; then 6733 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6734fi 6735if test "$sync_file_range" = "yes" ; then 6736 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6737fi 6738if test "$fiemap" = "yes" ; then 6739 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6740fi 6741if test "$dup3" = "yes" ; then 6742 echo "CONFIG_DUP3=y" >> $config_host_mak 6743fi 6744if test "$ppoll" = "yes" ; then 6745 echo "CONFIG_PPOLL=y" >> $config_host_mak 6746fi 6747if test "$prctl_pr_set_timerslack" = "yes" ; then 6748 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6749fi 6750if test "$epoll" = "yes" ; then 6751 echo "CONFIG_EPOLL=y" >> $config_host_mak 6752fi 6753if test "$epoll_create1" = "yes" ; then 6754 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6755fi 6756if test "$sendfile" = "yes" ; then 6757 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6758fi 6759if test "$timerfd" = "yes" ; then 6760 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6761fi 6762if test "$setns" = "yes" ; then 6763 echo "CONFIG_SETNS=y" >> $config_host_mak 6764fi 6765if test "$clock_adjtime" = "yes" ; then 6766 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6767fi 6768if test "$syncfs" = "yes" ; then 6769 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6770fi 6771if test "$kcov" = "yes" ; then 6772 echo "CONFIG_KCOV=y" >> $config_host_mak 6773fi 6774if test "$btrfs" = "yes" ; then 6775 echo "CONFIG_BTRFS=y" >> $config_host_mak 6776fi 6777if test "$inotify" = "yes" ; then 6778 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6779fi 6780if test "$inotify1" = "yes" ; then 6781 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6782fi 6783if test "$sem_timedwait" = "yes" ; then 6784 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6785fi 6786if test "$strchrnul" = "yes" ; then 6787 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6788fi 6789if test "$st_atim" = "yes" ; then 6790 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 6791fi 6792if test "$byteswap_h" = "yes" ; then 6793 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6794fi 6795if test "$bswap_h" = "yes" ; then 6796 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6797fi 6798if test "$curl" = "yes" ; then 6799 echo "CONFIG_CURL=y" >> $config_host_mak 6800 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6801 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6802fi 6803if test "$brlapi" = "yes" ; then 6804 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6805 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6806fi 6807if test "$gtk" = "yes" ; then 6808 echo "CONFIG_GTK=y" >> $config_host_mak 6809 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6810 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6811 if test "$gtk_gl" = "yes" ; then 6812 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6813 fi 6814fi 6815if test "$gio" = "yes" ; then 6816 echo "CONFIG_GIO=y" >> $config_host_mak 6817 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 6818 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 6819 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 6820fi 6821echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6822if test "$gnutls" = "yes" ; then 6823 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6824 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak 6825 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak 6826fi 6827if test "$gcrypt" = "yes" ; then 6828 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6829 if test "$gcrypt_hmac" = "yes" ; then 6830 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6831 fi 6832 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak 6833 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak 6834fi 6835if test "$nettle" = "yes" ; then 6836 echo "CONFIG_NETTLE=y" >> $config_host_mak 6837 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6838 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak 6839 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak 6840fi 6841if test "$qemu_private_xts" = "yes" ; then 6842 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 6843fi 6844if test "$tasn1" = "yes" ; then 6845 echo "CONFIG_TASN1=y" >> $config_host_mak 6846fi 6847if test "$auth_pam" = "yes" ; then 6848 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 6849fi 6850if test "$have_ifaddrs_h" = "yes" ; then 6851 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6852fi 6853if test "$have_drm_h" = "yes" ; then 6854 echo "HAVE_DRM_H=y" >> $config_host_mak 6855fi 6856if test "$have_broken_size_max" = "yes" ; then 6857 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6858fi 6859if test "$have_openpty" = "yes" ; then 6860 echo "HAVE_OPENPTY=y" >> $config_host_mak 6861fi 6862if test "$have_sys_signal_h" = "yes" ; then 6863 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak 6864fi 6865 6866# Work around a system header bug with some kernel/XFS header 6867# versions where they both try to define 'struct fsxattr': 6868# xfs headers will not try to redefine structs from linux headers 6869# if this macro is set. 6870if test "$have_fsxattr" = "yes" ; then 6871 echo "HAVE_FSXATTR=y" >> $config_host_mak 6872fi 6873if test "$have_copy_file_range" = "yes" ; then 6874 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6875fi 6876if test "$vte" = "yes" ; then 6877 echo "CONFIG_VTE=y" >> $config_host_mak 6878 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6879 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6880fi 6881if test "$virglrenderer" = "yes" ; then 6882 echo "CONFIG_VIRGL=y" >> $config_host_mak 6883 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6884 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6885fi 6886if test "$xen" = "yes" ; then 6887 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6888 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6889 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 6890 echo "XEN_LIBS=$xen_libs" >> $config_host_mak 6891fi 6892if test "$linux_aio" = "yes" ; then 6893 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6894fi 6895if test "$linux_io_uring" = "yes" ; then 6896 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 6897 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 6898 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 6899fi 6900if test "$attr" = "yes" ; then 6901 echo "CONFIG_ATTR=y" >> $config_host_mak 6902 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak 6903fi 6904if test "$libattr" = "yes" ; then 6905 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6906fi 6907if test "$virtfs" = "yes" ; then 6908 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6909fi 6910if test "$mpath" = "yes" ; then 6911 echo "CONFIG_MPATH=y" >> $config_host_mak 6912 if test "$mpathpersist_new_api" = "yes"; then 6913 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 6914 fi 6915fi 6916if test "$vhost_scsi" = "yes" ; then 6917 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6918fi 6919if test "$vhost_net" = "yes" ; then 6920 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 6921fi 6922if test "$vhost_net_user" = "yes" ; then 6923 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 6924fi 6925if test "$vhost_net_vdpa" = "yes" ; then 6926 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 6927fi 6928if test "$vhost_crypto" = "yes" ; then 6929 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6930fi 6931if test "$vhost_vsock" = "yes" ; then 6932 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6933 if test "$vhost_user" = "yes" ; then 6934 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 6935 fi 6936fi 6937if test "$vhost_kernel" = "yes" ; then 6938 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 6939fi 6940if test "$vhost_user" = "yes" ; then 6941 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6942fi 6943if test "$vhost_vdpa" = "yes" ; then 6944 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 6945fi 6946if test "$vhost_user_fs" = "yes" ; then 6947 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 6948fi 6949if test "$blobs" = "yes" ; then 6950 echo "INSTALL_BLOBS=yes" >> $config_host_mak 6951fi 6952if test "$iovec" = "yes" ; then 6953 echo "CONFIG_IOVEC=y" >> $config_host_mak 6954fi 6955if test "$preadv" = "yes" ; then 6956 echo "CONFIG_PREADV=y" >> $config_host_mak 6957fi 6958if test "$fdt" != "no" ; then 6959 echo "CONFIG_FDT=y" >> $config_host_mak 6960 echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak 6961 echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak 6962fi 6963if test "$membarrier" = "yes" ; then 6964 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6965fi 6966if test "$signalfd" = "yes" ; then 6967 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6968fi 6969if test "$optreset" = "yes" ; then 6970 echo "HAVE_OPTRESET=y" >> $config_host_mak 6971fi 6972if test "$tcg" = "yes"; then 6973 echo "CONFIG_TCG=y" >> $config_host_mak 6974 if test "$tcg_interpreter" = "yes" ; then 6975 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6976 fi 6977fi 6978if test "$fdatasync" = "yes" ; then 6979 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6980fi 6981if test "$madvise" = "yes" ; then 6982 echo "CONFIG_MADVISE=y" >> $config_host_mak 6983fi 6984if test "$posix_madvise" = "yes" ; then 6985 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6986fi 6987if test "$posix_memalign" = "yes" ; then 6988 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6989fi 6990if test "$spice" = "yes" ; then 6991 echo "CONFIG_SPICE=y" >> $config_host_mak 6992 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak 6993 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak 6994fi 6995 6996if test "$smartcard" = "yes" ; then 6997 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6998 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6999 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 7000fi 7001 7002if test "$libusb" = "yes" ; then 7003 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 7004 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 7005 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 7006fi 7007 7008if test "$usb_redir" = "yes" ; then 7009 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 7010 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 7011 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 7012fi 7013 7014if test "$opengl" = "yes" ; then 7015 echo "CONFIG_OPENGL=y" >> $config_host_mak 7016 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 7017 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 7018 if test "$opengl_dmabuf" = "yes" ; then 7019 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 7020 fi 7021fi 7022 7023if test "$gbm" = "yes" ; then 7024 echo "CONFIG_GBM=y" >> $config_host_mak 7025 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 7026 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 7027fi 7028 7029 7030if test "$malloc_trim" = "yes" ; then 7031 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 7032fi 7033 7034if test "$avx2_opt" = "yes" ; then 7035 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 7036fi 7037 7038if test "$avx512f_opt" = "yes" ; then 7039 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 7040fi 7041 7042if test "$lzo" = "yes" ; then 7043 echo "CONFIG_LZO=y" >> $config_host_mak 7044 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak 7045fi 7046 7047if test "$snappy" = "yes" ; then 7048 echo "CONFIG_SNAPPY=y" >> $config_host_mak 7049 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak 7050fi 7051 7052if test "$bzip2" = "yes" ; then 7053 echo "CONFIG_BZIP2=y" >> $config_host_mak 7054 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 7055fi 7056 7057if test "$lzfse" = "yes" ; then 7058 echo "CONFIG_LZFSE=y" >> $config_host_mak 7059 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 7060fi 7061 7062if test "$zstd" = "yes" ; then 7063 echo "CONFIG_ZSTD=y" >> $config_host_mak 7064 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak 7065 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak 7066fi 7067 7068if test "$libiscsi" = "yes" ; then 7069 echo "CONFIG_LIBISCSI=y" >> $config_host_mak 7070 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 7071 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 7072fi 7073 7074if test "$libnfs" = "yes" ; then 7075 echo "CONFIG_LIBNFS=y" >> $config_host_mak 7076 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 7077fi 7078 7079if test "$seccomp" = "yes"; then 7080 echo "CONFIG_SECCOMP=y" >> $config_host_mak 7081 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 7082 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 7083fi 7084 7085# XXX: suppress that 7086if [ "$bsd" = "yes" ] ; then 7087 echo "CONFIG_BSD=y" >> $config_host_mak 7088fi 7089 7090if test "$localtime_r" = "yes" ; then 7091 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 7092fi 7093if test "$qom_cast_debug" = "yes" ; then 7094 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 7095fi 7096if test "$rbd" = "yes" ; then 7097 echo "CONFIG_RBD=y" >> $config_host_mak 7098 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 7099fi 7100 7101echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 7102if test "$coroutine_pool" = "yes" ; then 7103 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7104else 7105 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7106fi 7107 7108if test "$debug_stack_usage" = "yes" ; then 7109 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7110fi 7111 7112if test "$crypto_afalg" = "yes" ; then 7113 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7114fi 7115 7116if test "$open_by_handle_at" = "yes" ; then 7117 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7118fi 7119 7120if test "$linux_magic_h" = "yes" ; then 7121 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7122fi 7123 7124if test "$valgrind_h" = "yes" ; then 7125 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 7126fi 7127 7128if test "$have_asan_iface_fiber" = "yes" ; then 7129 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 7130fi 7131 7132if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 7133 echo "CONFIG_TSAN=y" >> $config_host_mak 7134fi 7135 7136if test "$has_environ" = "yes" ; then 7137 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 7138fi 7139 7140if test "$cpuid_h" = "yes" ; then 7141 echo "CONFIG_CPUID_H=y" >> $config_host_mak 7142fi 7143 7144if test "$int128" = "yes" ; then 7145 echo "CONFIG_INT128=y" >> $config_host_mak 7146fi 7147 7148if test "$atomic128" = "yes" ; then 7149 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 7150fi 7151 7152if test "$cmpxchg128" = "yes" ; then 7153 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 7154fi 7155 7156if test "$atomic64" = "yes" ; then 7157 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 7158fi 7159 7160if test "$attralias" = "yes" ; then 7161 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 7162fi 7163 7164if test "$getauxval" = "yes" ; then 7165 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 7166fi 7167 7168if test "$glusterfs" = "yes" ; then 7169 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak 7170 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 7171 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 7172fi 7173 7174if test "$glusterfs_xlator_opt" = "yes" ; then 7175 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 7176fi 7177 7178if test "$glusterfs_discard" = "yes" ; then 7179 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 7180fi 7181 7182if test "$glusterfs_fallocate" = "yes" ; then 7183 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 7184fi 7185 7186if test "$glusterfs_zerofill" = "yes" ; then 7187 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 7188fi 7189 7190if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 7191 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 7192fi 7193 7194if test "$glusterfs_iocb_has_stat" = "yes" ; then 7195 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 7196fi 7197 7198if test "$libssh" = "yes" ; then 7199 echo "CONFIG_LIBSSH=y" >> $config_host_mak 7200 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 7201 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 7202fi 7203 7204if test "$live_block_migration" = "yes" ; then 7205 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 7206fi 7207 7208if test "$tpm" = "yes"; then 7209 echo 'CONFIG_TPM=y' >> $config_host_mak 7210fi 7211 7212echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 7213if have_backend "nop"; then 7214 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 7215fi 7216if have_backend "simple"; then 7217 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 7218 # Set the appropriate trace file. 7219 trace_file="\"$trace_file-\" FMT_pid" 7220fi 7221if have_backend "log"; then 7222 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 7223fi 7224if have_backend "ust"; then 7225 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 7226 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak 7227 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak 7228fi 7229if have_backend "dtrace"; then 7230 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 7231 if test "$trace_backend_stap" = "yes" ; then 7232 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 7233 fi 7234fi 7235if have_backend "ftrace"; then 7236 if test "$linux" = "yes" ; then 7237 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 7238 else 7239 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 7240 fi 7241fi 7242if have_backend "syslog"; then 7243 if test "$posix_syslog" = "yes" ; then 7244 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 7245 else 7246 feature_not_found "syslog(trace backend)" "syslog not available" 7247 fi 7248fi 7249echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 7250 7251if test "$rdma" = "yes" ; then 7252 echo "CONFIG_RDMA=y" >> $config_host_mak 7253 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 7254fi 7255 7256if test "$pvrdma" = "yes" ; then 7257 echo "CONFIG_PVRDMA=y" >> $config_host_mak 7258fi 7259 7260if test "$have_rtnetlink" = "yes" ; then 7261 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 7262fi 7263 7264if test "$libxml2" = "yes" ; then 7265 echo "CONFIG_LIBXML2=y" >> $config_host_mak 7266 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 7267 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 7268fi 7269 7270if test "$replication" = "yes" ; then 7271 echo "CONFIG_REPLICATION=y" >> $config_host_mak 7272fi 7273 7274if test "$have_af_vsock" = "yes" ; then 7275 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 7276fi 7277 7278if test "$have_sysmacros" = "yes" ; then 7279 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 7280fi 7281 7282if test "$have_static_assert" = "yes" ; then 7283 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 7284fi 7285 7286if test "$have_utmpx" = "yes" ; then 7287 echo "HAVE_UTMPX=y" >> $config_host_mak 7288fi 7289if test "$have_getrandom" = "yes" ; then 7290 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 7291fi 7292if test "$ivshmem" = "yes" ; then 7293 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 7294fi 7295if test "$capstone" != "no" ; then 7296 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 7297 echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak 7298 echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak 7299fi 7300if test "$debug_mutex" = "yes" ; then 7301 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 7302fi 7303 7304# Hold two types of flag: 7305# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 7306# a thread we have a handle to 7307# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 7308# platform 7309if test "$pthread_setname_np_w_tid" = "yes" ; then 7310 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7311 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 7312elif test "$pthread_setname_np_wo_tid" = "yes" ; then 7313 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7314 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 7315fi 7316 7317if test "$libpmem" = "yes" ; then 7318 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 7319 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak 7320 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak 7321fi 7322 7323if test "$libdaxctl" = "yes" ; then 7324 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak 7325 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak 7326fi 7327 7328if test "$bochs" = "yes" ; then 7329 echo "CONFIG_BOCHS=y" >> $config_host_mak 7330fi 7331if test "$cloop" = "yes" ; then 7332 echo "CONFIG_CLOOP=y" >> $config_host_mak 7333fi 7334if test "$dmg" = "yes" ; then 7335 echo "CONFIG_DMG=y" >> $config_host_mak 7336fi 7337if test "$qcow1" = "yes" ; then 7338 echo "CONFIG_QCOW1=y" >> $config_host_mak 7339fi 7340if test "$vdi" = "yes" ; then 7341 echo "CONFIG_VDI=y" >> $config_host_mak 7342fi 7343if test "$vvfat" = "yes" ; then 7344 echo "CONFIG_VVFAT=y" >> $config_host_mak 7345fi 7346if test "$qed" = "yes" ; then 7347 echo "CONFIG_QED=y" >> $config_host_mak 7348fi 7349if test "$parallels" = "yes" ; then 7350 echo "CONFIG_PARALLELS=y" >> $config_host_mak 7351fi 7352if test "$sheepdog" = "yes" ; then 7353 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 7354fi 7355if test "$pty_h" = "yes" ; then 7356 echo "HAVE_PTY_H=y" >> $config_host_mak 7357fi 7358if test "$have_mlockall" = "yes" ; then 7359 echo "HAVE_MLOCKALL=y" >> $config_host_mak 7360fi 7361if test "$fuzzing" = "yes" ; then 7362 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the 7363 # needed CFLAGS have already been provided 7364 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then 7365 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" 7366 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer" 7367 else 7368 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE" 7369 fi 7370fi 7371 7372if test "$plugins" = "yes" ; then 7373 echo "CONFIG_PLUGIN=y" >> $config_host_mak 7374 # Copy the export object list to the build dir 7375 if test "$ld_dynamic_list" = "yes" ; then 7376 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 7377 ld_symbols=qemu-plugins-ld.symbols 7378 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 7379 elif test "$ld_exported_symbols_list" = "yes" ; then 7380 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 7381 ld64_symbols=qemu-plugins-ld64.symbols 7382 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 7383 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 7384 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 7385 else 7386 error_exit \ 7387 "If \$plugins=yes, either \$ld_dynamic_list or " \ 7388 "\$ld_exported_symbols_list should have been set to 'yes'." 7389 fi 7390fi 7391 7392if test -n "$gdb_bin" ; then 7393 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 7394fi 7395 7396if test "$secret_keyring" = "yes" ; then 7397 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 7398fi 7399 7400if test "$tcg_interpreter" = "yes"; then 7401 QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES" 7402elif test "$ARCH" = "sparc64" ; then 7403 QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES" 7404elif test "$ARCH" = "s390x" ; then 7405 QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES" 7406elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7407 QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES" 7408elif test "$ARCH" = "ppc64" ; then 7409 QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES" 7410elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7411 QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES" 7412else 7413 QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES" 7414fi 7415 7416echo "ROMS=$roms" >> $config_host_mak 7417echo "MAKE=$make" >> $config_host_mak 7418echo "PYTHON=$python" >> $config_host_mak 7419echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak 7420echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 7421echo "MESON=$meson" >> $config_host_mak 7422echo "CC=$cc" >> $config_host_mak 7423if $iasl -h > /dev/null 2>&1; then 7424 echo "CONFIG_IASL=$iasl" >> $config_host_mak 7425fi 7426echo "CXX=$cxx" >> $config_host_mak 7427echo "OBJCC=$objcc" >> $config_host_mak 7428echo "AR=$ar" >> $config_host_mak 7429echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 7430echo "AS=$as" >> $config_host_mak 7431echo "CCAS=$ccas" >> $config_host_mak 7432echo "CPP=$cpp" >> $config_host_mak 7433echo "OBJCOPY=$objcopy" >> $config_host_mak 7434echo "LD=$ld" >> $config_host_mak 7435echo "RANLIB=$ranlib" >> $config_host_mak 7436echo "NM=$nm" >> $config_host_mak 7437echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 7438echo "WINDRES=$windres" >> $config_host_mak 7439echo "CFLAGS=$CFLAGS" >> $config_host_mak 7440echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 7441echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 7442echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 7443echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 7444echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 7445echo "GLIB_LIBS=$glib_libs" >> $config_host_mak 7446if test "$sparse" = "yes" ; then 7447 echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 7448fi 7449echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 7450echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 7451echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 7452echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 7453echo "EXESUF=$EXESUF" >> $config_host_mak 7454echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak 7455echo "LIBS_QGA=$libs_qga" >> $config_host_mak 7456echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 7457echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 7458echo "POD2MAN=$POD2MAN" >> $config_host_mak 7459if test "$gcov" = "yes" ; then 7460 echo "CONFIG_GCOV=y" >> $config_host_mak 7461fi 7462 7463if test "$libudev" != "no"; then 7464 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 7465 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 7466fi 7467if test "$fuzzing" != "no"; then 7468 echo "CONFIG_FUZZ=y" >> $config_host_mak 7469fi 7470echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak 7471 7472if test "$edk2_blobs" = "yes" ; then 7473 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak 7474fi 7475 7476if test "$rng_none" = "yes"; then 7477 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 7478fi 7479 7480# use included Linux headers 7481if test "$linux" = "yes" ; then 7482 mkdir -p linux-headers 7483 case "$cpu" in 7484 i386|x86_64|x32) 7485 linux_arch=x86 7486 ;; 7487 ppc|ppc64|ppc64le) 7488 linux_arch=powerpc 7489 ;; 7490 s390x) 7491 linux_arch=s390 7492 ;; 7493 aarch64) 7494 linux_arch=arm64 7495 ;; 7496 mips64) 7497 linux_arch=mips 7498 ;; 7499 *) 7500 # For most CPUs the kernel architecture name and QEMU CPU name match. 7501 linux_arch="$cpu" 7502 ;; 7503 esac 7504 # For non-KVM architectures we will not have asm headers 7505 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 7506 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 7507 fi 7508fi 7509 7510for target in $target_list; do 7511target_dir="$target" 7512config_target_mak=$target_dir/config-target.mak 7513target_name=$(echo $target | cut -d '-' -f 1) 7514target_aligned_only="no" 7515case "$target_name" in 7516 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) 7517 target_aligned_only="yes" 7518 ;; 7519esac 7520target_bigendian="no" 7521case "$target_name" in 7522 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 7523 target_bigendian="yes" 7524 ;; 7525esac 7526target_softmmu="no" 7527target_user_only="no" 7528target_linux_user="no" 7529target_bsd_user="no" 7530case "$target" in 7531 ${target_name}-softmmu) 7532 target_softmmu="yes" 7533 ;; 7534 ${target_name}-linux-user) 7535 target_user_only="yes" 7536 target_linux_user="yes" 7537 ;; 7538 ${target_name}-bsd-user) 7539 target_user_only="yes" 7540 target_bsd_user="yes" 7541 ;; 7542 *) 7543 error_exit "Target '$target' not recognised" 7544 exit 1 7545 ;; 7546esac 7547 7548mkdir -p $target_dir 7549echo "# Automatically generated by configure - do not modify" > $config_target_mak 7550 7551bflt="no" 7552mttcg="no" 7553interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7554gdb_xml_files="" 7555 7556TARGET_ARCH="$target_name" 7557TARGET_BASE_ARCH="" 7558TARGET_ABI_DIR="" 7559TARGET_SYSTBL_ABI="" 7560TARGET_SYSTBL="" 7561 7562case "$target_name" in 7563 i386) 7564 mttcg="yes" 7565 gdb_xml_files="i386-32bit.xml" 7566 TARGET_SYSTBL_ABI=i386 7567 TARGET_SYSTBL=syscall_32.tbl 7568 ;; 7569 x86_64) 7570 TARGET_BASE_ARCH=i386 7571 TARGET_SYSTBL_ABI=common,64 7572 TARGET_SYSTBL=syscall_64.tbl 7573 mttcg="yes" 7574 gdb_xml_files="i386-64bit.xml" 7575 ;; 7576 alpha) 7577 mttcg="yes" 7578 TARGET_SYSTBL_ABI=common 7579 ;; 7580 arm|armeb) 7581 TARGET_ARCH=arm 7582 TARGET_SYSTBL_ABI=common,oabi 7583 bflt="yes" 7584 mttcg="yes" 7585 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml" 7586 ;; 7587 aarch64|aarch64_be) 7588 TARGET_ARCH=aarch64 7589 TARGET_BASE_ARCH=arm 7590 bflt="yes" 7591 mttcg="yes" 7592 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" 7593 ;; 7594 avr) 7595 gdb_xml_files="avr-cpu.xml" 7596 target_compiler=$cross_cc_avr 7597 ;; 7598 cris) 7599 ;; 7600 hppa) 7601 mttcg="yes" 7602 TARGET_SYSTBL_ABI=common,32 7603 ;; 7604 lm32) 7605 ;; 7606 m68k) 7607 bflt="yes" 7608 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml" 7609 TARGET_SYSTBL_ABI=common 7610 ;; 7611 microblaze|microblazeel) 7612 TARGET_ARCH=microblaze 7613 TARGET_SYSTBL_ABI=common 7614 mttcg="yes" 7615 bflt="yes" 7616 ;; 7617 mips|mipsel) 7618 mttcg="yes" 7619 TARGET_ARCH=mips 7620 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7621 TARGET_SYSTBL_ABI=o32 7622 TARGET_SYSTBL=syscall_o32.tbl 7623 ;; 7624 mipsn32|mipsn32el) 7625 mttcg="yes" 7626 TARGET_ARCH=mips64 7627 TARGET_BASE_ARCH=mips 7628 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7629 echo "TARGET_ABI32=y" >> $config_target_mak 7630 TARGET_SYSTBL_ABI=n32 7631 TARGET_SYSTBL=syscall_n32.tbl 7632 ;; 7633 mips64|mips64el) 7634 mttcg="no" 7635 TARGET_ARCH=mips64 7636 TARGET_BASE_ARCH=mips 7637 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7638 TARGET_SYSTBL_ABI=n64 7639 TARGET_SYSTBL=syscall_n64.tbl 7640 ;; 7641 moxie) 7642 ;; 7643 nios2) 7644 ;; 7645 or1k) 7646 TARGET_ARCH=openrisc 7647 TARGET_BASE_ARCH=openrisc 7648 ;; 7649 ppc) 7650 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7651 TARGET_SYSTBL_ABI=common,nospu,32 7652 ;; 7653 ppc64) 7654 TARGET_BASE_ARCH=ppc 7655 TARGET_ABI_DIR=ppc 7656 TARGET_SYSTBL_ABI=common,nospu,64 7657 mttcg=yes 7658 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7659 ;; 7660 ppc64le) 7661 TARGET_ARCH=ppc64 7662 TARGET_BASE_ARCH=ppc 7663 TARGET_ABI_DIR=ppc 7664 TARGET_SYSTBL_ABI=common,nospu,64 7665 mttcg=yes 7666 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7667 ;; 7668 ppc64abi32) 7669 TARGET_ARCH=ppc64 7670 TARGET_BASE_ARCH=ppc 7671 TARGET_ABI_DIR=ppc 7672 TARGET_SYSTBL_ABI=common,nospu,32 7673 echo "TARGET_ABI32=y" >> $config_target_mak 7674 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7675 ;; 7676 riscv32) 7677 TARGET_BASE_ARCH=riscv 7678 TARGET_ABI_DIR=riscv 7679 mttcg=yes 7680 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml" 7681 ;; 7682 riscv64) 7683 TARGET_BASE_ARCH=riscv 7684 TARGET_ABI_DIR=riscv 7685 mttcg=yes 7686 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml" 7687 ;; 7688 rx) 7689 TARGET_ARCH=rx 7690 bflt="yes" 7691 target_compiler=$cross_cc_rx 7692 gdb_xml_files="rx-core.xml" 7693 ;; 7694 sh4|sh4eb) 7695 TARGET_ARCH=sh4 7696 TARGET_SYSTBL_ABI=common 7697 bflt="yes" 7698 ;; 7699 sparc) 7700 TARGET_SYSTBL_ABI=common,32 7701 ;; 7702 sparc64) 7703 TARGET_BASE_ARCH=sparc 7704 TARGET_SYSTBL_ABI=common,64 7705 ;; 7706 sparc32plus) 7707 TARGET_ARCH=sparc64 7708 TARGET_BASE_ARCH=sparc 7709 TARGET_ABI_DIR=sparc 7710 TARGET_SYSTBL_ABI=common,32 7711 echo "TARGET_ABI32=y" >> $config_target_mak 7712 ;; 7713 s390x) 7714 TARGET_SYSTBL_ABI=common,64 7715 mttcg=yes 7716 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7717 ;; 7718 tilegx) 7719 ;; 7720 tricore) 7721 ;; 7722 unicore32) 7723 ;; 7724 xtensa|xtensaeb) 7725 TARGET_ARCH=xtensa 7726 TARGET_SYSTBL_ABI=common 7727 bflt="yes" 7728 mttcg="yes" 7729 ;; 7730 *) 7731 error_exit "Unsupported target CPU" 7732 ;; 7733esac 7734# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7735if [ "$TARGET_BASE_ARCH" = "" ]; then 7736 TARGET_BASE_ARCH=$TARGET_ARCH 7737fi 7738if [ "$TARGET_SYSTBL_ABI" != "" ] && [ "$TARGET_SYSTBL" = "" ]; then 7739 TARGET_SYSTBL=syscall.tbl 7740fi 7741 7742upper() { 7743 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7744} 7745 7746target_arch_name="$(upper $TARGET_ARCH)" 7747echo "TARGET_$target_arch_name=y" >> $config_target_mak 7748echo "TARGET_NAME=$target_name" >> $config_target_mak 7749echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7750if [ "$TARGET_ABI_DIR" = "" ]; then 7751 TARGET_ABI_DIR=$TARGET_ARCH 7752fi 7753echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7754if [ "$HOST_VARIANT_DIR" != "" ]; then 7755 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7756fi 7757if [ "$TARGET_SYSTBL_ABI" != "" ]; then 7758 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak 7759 echo "TARGET_SYSTBL=$TARGET_SYSTBL" >> $config_target_mak 7760fi 7761 7762if supported_xen_target $target; then 7763 echo "CONFIG_XEN=y" >> $config_target_mak 7764 if test "$xen_pci_passthrough" = yes; then 7765 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7766 fi 7767fi 7768if supported_kvm_target $target; then 7769 echo "CONFIG_KVM=y" >> $config_target_mak 7770fi 7771if supported_hax_target $target; then 7772 echo "CONFIG_HAX=y" >> $config_target_mak 7773fi 7774if supported_hvf_target $target; then 7775 echo "CONFIG_HVF=y" >> $config_target_mak 7776fi 7777if supported_whpx_target $target; then 7778 echo "CONFIG_WHPX=y" >> $config_target_mak 7779fi 7780if test "$target_aligned_only" = "yes" ; then 7781 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak 7782fi 7783if test "$target_bigendian" = "yes" ; then 7784 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7785fi 7786if test "$target_softmmu" = "yes" ; then 7787 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7788 if test "$mttcg" = "yes" ; then 7789 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7790 fi 7791fi 7792if test "$target_user_only" = "yes" ; then 7793 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7794 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7795 symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" 7796else 7797 symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" 7798fi 7799if test "$target_linux_user" = "yes" ; then 7800 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7801fi 7802list="" 7803if test ! -z "$gdb_xml_files" ; then 7804 for x in $gdb_xml_files; do 7805 list="$list gdb-xml/$x" 7806 done 7807 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7808fi 7809 7810if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 7811 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7812fi 7813if test "$target_bsd_user" = "yes" ; then 7814 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7815fi 7816 7817done # for target in $targets 7818 7819if [ "$fdt" = "git" ]; then 7820 subdirs="$subdirs dtc" 7821fi 7822if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7823 subdirs="$subdirs capstone" 7824fi 7825echo "SUBDIRS=$subdirs" >> $config_host_mak 7826if test -n "$LIBCAPSTONE"; then 7827 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7828fi 7829 7830if test "$numa" = "yes"; then 7831 echo "CONFIG_NUMA=y" >> $config_host_mak 7832 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 7833fi 7834 7835if test "$ccache_cpp2" = "yes"; then 7836 echo "export CCACHE_CPP2=y" >> $config_host_mak 7837fi 7838 7839if test "$safe_stack" = "yes"; then 7840 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 7841fi 7842 7843# If we're using a separate build tree, set it up now. 7844# DIRS are directories which we simply mkdir in the build tree; 7845# LINKS are things to symlink back into the source tree 7846# (these can be both files and directories). 7847# Caution: do not add files or directories here using wildcards. This 7848# will result in problems later if a new file matching the wildcard is 7849# added to the source tree -- nothing will cause configure to be rerun 7850# so the build tree will be missing the link back to the new file, and 7851# tests might fail. Prefer to keep the relevant files in their own 7852# directory and symlink the directory instead. 7853# UNLINK is used to remove symlinks from older development versions 7854# that might get into the way when doing "git update" without doing 7855# a "make distclean" in between. 7856DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 7857DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 7858DIRS="$DIRS docs docs/interop fsdev scsi" 7859DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 7860DIRS="$DIRS roms/seabios" 7861DIRS="$DIRS contrib/plugins/" 7862LINKS="Makefile" 7863LINKS="$LINKS tests/tcg/lm32/Makefile" 7864LINKS="$LINKS tests/tcg/Makefile.target" 7865LINKS="$LINKS pc-bios/optionrom/Makefile" 7866LINKS="$LINKS pc-bios/s390-ccw/Makefile" 7867LINKS="$LINKS roms/seabios/Makefile" 7868LINKS="$LINKS pc-bios/qemu-icon.bmp" 7869LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 7870LINKS="$LINKS tests/acceptance tests/data" 7871LINKS="$LINKS tests/qemu-iotests/check" 7872LINKS="$LINKS python" 7873LINKS="$LINKS contrib/plugins/Makefile " 7874UNLINK="pc-bios/keymaps" 7875for bios_file in \ 7876 $source_path/pc-bios/*.bin \ 7877 $source_path/pc-bios/*.elf \ 7878 $source_path/pc-bios/*.lid \ 7879 $source_path/pc-bios/*.rom \ 7880 $source_path/pc-bios/*.dtb \ 7881 $source_path/pc-bios/*.img \ 7882 $source_path/pc-bios/openbios-* \ 7883 $source_path/pc-bios/u-boot.* \ 7884 $source_path/pc-bios/edk2-*.fd.bz2 \ 7885 $source_path/pc-bios/palcode-* 7886do 7887 LINKS="$LINKS pc-bios/$(basename $bios_file)" 7888done 7889mkdir -p $DIRS 7890for f in $LINKS ; do 7891 if [ -e "$source_path/$f" ]; then 7892 symlink "$source_path/$f" "$f" 7893 fi 7894done 7895for f in $UNLINK ; do 7896 if [ -L "$f" ]; then 7897 rm -f "$f" 7898 fi 7899done 7900 7901(for i in $cross_cc_vars; do 7902 export $i 7903done 7904export target_list source_path use_containers 7905$source_path/tests/tcg/configure.sh) 7906 7907# temporary config to build submodules 7908for rom in seabios; do 7909 config_mak=roms/$rom/config.mak 7910 echo "# Automatically generated by configure - do not modify" > $config_mak 7911 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7912 echo "AS=$as" >> $config_mak 7913 echo "CCAS=$ccas" >> $config_mak 7914 echo "CC=$cc" >> $config_mak 7915 echo "BCC=bcc" >> $config_mak 7916 echo "CPP=$cpp" >> $config_mak 7917 echo "OBJCOPY=objcopy" >> $config_mak 7918 echo "IASL=$iasl" >> $config_mak 7919 echo "LD=$ld" >> $config_mak 7920 echo "RANLIB=$ranlib" >> $config_mak 7921done 7922 7923# set up qemu-iotests in this build directory 7924iotests_common_env="tests/qemu-iotests/common.env" 7925 7926echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 7927echo >> "$iotests_common_env" 7928echo "export PYTHON='$python'" >> "$iotests_common_env" 7929 7930if test "$skip_meson" = no; then 7931cross="config-meson.cross.new" 7932meson_quote() { 7933 echo "['$(echo $* | sed "s/ /','/g")']" 7934} 7935 7936echo "# Automatically generated by configure - do not modify" > $cross 7937echo "[properties]" >> $cross 7938test -z "$cxx" && echo "link_language = 'c'" >> $cross 7939echo "[binaries]" >> $cross 7940echo "c = $(meson_quote $cc)" >> $cross 7941test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross 7942echo "ar = $(meson_quote $ar)" >> $cross 7943echo "nm = $(meson_quote $nm)" >> $cross 7944echo "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross 7945echo "ranlib = $(meson_quote $ranlib)" >> $cross 7946if has $sdl2_config; then 7947 echo "sdl2-config = $(meson_quote $sdl2_config)" >> $cross 7948fi 7949echo "strip = $(meson_quote $strip)" >> $cross 7950echo "windres = $(meson_quote $windres)" >> $cross 7951if test -n "$cross_prefix"; then 7952 cross_arg="--cross-file config-meson.cross" 7953 # Hack: Meson expects an absolute path for the *build* machine 7954 # for the prefix, so add a slash in front of a Windows path that 7955 # includes a drive letter. 7956 # 7957 # See https://github.com/mesonbuild/meson/issues/7577. 7958 echo "[host_machine]" >> $cross 7959 if test "$mingw32" = "yes" ; then 7960 echo "system = 'windows'" >> $cross 7961 case $prefix in 7962 ?:*) pre_prefix=/ ;; 7963 esac 7964 fi 7965 if test "$linux" = "yes" ; then 7966 echo "system = 'linux'" >> $cross 7967 fi 7968 case "$ARCH" in 7969 i386|x86_64) 7970 echo "cpu_family = 'x86'" >> $cross 7971 ;; 7972 ppc64le) 7973 echo "cpu_family = 'ppc64'" >> $cross 7974 ;; 7975 *) 7976 echo "cpu_family = '$ARCH'" >> $cross 7977 ;; 7978 esac 7979 echo "cpu = '$cpu'" >> $cross 7980 if test "$bigendian" = "yes" ; then 7981 echo "endian = 'big'" >> $cross 7982 else 7983 echo "endian = 'little'" >> $cross 7984 fi 7985else 7986 cross_arg="--native-file config-meson.cross" 7987fi 7988mv $cross config-meson.cross 7989 7990rm -rf meson-private meson-info meson-logs 7991NINJA=${ninja:-$PWD/ninjatool} $meson setup \ 7992 --prefix "${pre_prefix}$prefix" \ 7993 --libdir "${pre_prefix}$libdir" \ 7994 --libexecdir "${pre_prefix}$libexecdir" \ 7995 --bindir "${pre_prefix}$bindir" \ 7996 --includedir "${pre_prefix}$includedir" \ 7997 --datadir "${pre_prefix}$datadir" \ 7998 --mandir "${pre_prefix}$mandir" \ 7999 --sysconfdir "${pre_prefix}$sysconfdir" \ 8000 --localstatedir "${pre_prefix}$local_statedir" \ 8001 -Ddocdir="${pre_prefix}$docdir" \ 8002 -Dqemu_suffix="$qemu_suffix" \ 8003 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 8004 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 8005 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 8006 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 8007 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 8008 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 8009 -Dsdl=$sdl -Dsdl_image=$sdl_image \ 8010 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \ 8011 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\ 8012 $cross_arg \ 8013 "$PWD" "$source_path" 8014 8015if test "$?" -ne 0 ; then 8016 error_exit "meson setup failed" 8017fi 8018touch ninjatool.stamp 8019fi 8020 8021if test -n "${deprecated_features}"; then 8022 echo "Warning, deprecated features enabled." 8023 echo "Please see docs/system/deprecated.rst" 8024 echo " features: ${deprecated_features}" 8025fi 8026 8027# Save the configure command line for later reuse. 8028cat <<EOD >config.status 8029#!/bin/sh 8030# Generated by configure. 8031# Run this file to recreate the current configuration. 8032# Compiler output produced by configure, useful for debugging 8033# configure, is in config.log if it exists. 8034EOD 8035 8036preserve_env() { 8037 envname=$1 8038 8039 eval envval=\$$envname 8040 8041 if test -n "$envval" 8042 then 8043 echo "$envname='$envval'" >> config.status 8044 echo "export $envname" >> config.status 8045 else 8046 echo "unset $envname" >> config.status 8047 fi 8048} 8049 8050# Preserve various env variables that influence what 8051# features/build target configure will detect 8052preserve_env AR 8053preserve_env AS 8054preserve_env CC 8055preserve_env CPP 8056preserve_env CXX 8057preserve_env INSTALL 8058preserve_env LD 8059preserve_env LD_LIBRARY_PATH 8060preserve_env LIBTOOL 8061preserve_env MAKE 8062preserve_env NM 8063preserve_env OBJCOPY 8064preserve_env PATH 8065preserve_env PKG_CONFIG 8066preserve_env PKG_CONFIG_LIBDIR 8067preserve_env PKG_CONFIG_PATH 8068preserve_env PYTHON 8069preserve_env SDL2_CONFIG 8070preserve_env SMBD 8071preserve_env STRIP 8072preserve_env WINDRES 8073 8074printf "exec" >>config.status 8075for i in "$0" "$@"; do 8076 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status 8077done 8078echo ' "$@"' >>config.status 8079chmod +x config.status 8080 8081rm -r "$TMPDIR1" 8082