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