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