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