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