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