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