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