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