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" 476qemu_suffix="qemu" 477slirp="" 478oss_lib="" 479bsd="no" 480linux="no" 481solaris="no" 482profiler="no" 483cocoa="no" 484softmmu="yes" 485linux_user="no" 486bsd_user="no" 487blobs="yes" 488edk2_blobs="no" 489pkgversion="" 490pie="" 491qom_cast_debug="yes" 492trace_backends="log" 493trace_file="trace" 494spice="" 495rbd="" 496smartcard="" 497u2f="auto" 498libusb="" 499usb_redir="" 500opengl="" 501opengl_dmabuf="no" 502cpuid_h="no" 503avx2_opt="" 504capstone="" 505lzo="" 506snappy="" 507bzip2="" 508lzfse="" 509zstd="" 510guest_agent="" 511guest_agent_with_vss="no" 512guest_agent_ntddscsi="no" 513guest_agent_msi="" 514vss_win32_sdk="" 515win_sdk="no" 516want_tools="" 517libiscsi="" 518libnfs="" 519coroutine="" 520coroutine_pool="" 521debug_stack_usage="no" 522crypto_afalg="no" 523seccomp="" 524glusterfs="" 525glusterfs_xlator_opt="no" 526glusterfs_discard="no" 527glusterfs_fallocate="no" 528glusterfs_zerofill="no" 529glusterfs_ftruncate_has_stat="no" 530glusterfs_iocb_has_stat="no" 531gtk="" 532gtk_gl="no" 533tls_priority="NORMAL" 534gnutls="" 535nettle="" 536nettle_xts="no" 537gcrypt="" 538gcrypt_hmac="no" 539gcrypt_xts="no" 540qemu_private_xts="yes" 541auth_pam="" 542vte="" 543virglrenderer="" 544tpm="" 545libssh="" 546live_block_migration="yes" 547numa="" 548tcmalloc="no" 549jemalloc="no" 550replication="yes" 551bochs="yes" 552cloop="yes" 553dmg="yes" 554qcow1="yes" 555vdi="yes" 556vvfat="yes" 557qed="yes" 558parallels="yes" 559sheepdog="yes" 560libxml2="" 561debug_mutex="no" 562libpmem="" 563default_devices="yes" 564plugins="no" 565fuzzing="no" 566rng_none="no" 567secret_keyring="" 568libdaxctl="" 569meson="" 570ninja="" 571skip_meson=no 572gettext="" 573 574bogus_os="no" 575malloc_trim="" 576 577# parse CC options first 578for opt do 579 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 580 case "$opt" in 581 --cross-prefix=*) cross_prefix="$optarg" 582 ;; 583 --cc=*) CC="$optarg" 584 ;; 585 --cxx=*) CXX="$optarg" 586 ;; 587 --cpu=*) cpu="$optarg" 588 ;; 589 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" 590 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 591 ;; 592 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" 593 ;; 594 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" 595 EXTRA_LDFLAGS="$optarg" 596 ;; 597 --enable-debug-info) debug_info="yes" 598 ;; 599 --disable-debug-info) debug_info="no" 600 ;; 601 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" 602 ;; 603 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*} 604 eval "cross_cc_cflags_${cc_arch}=\$optarg" 605 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}" 606 ;; 607 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} 608 cc_archs="$cc_archs $cc_arch" 609 eval "cross_cc_${cc_arch}=\$optarg" 610 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" 611 ;; 612 esac 613done 614# OS specific 615# Using uname is really, really broken. Once we have the right set of checks 616# we can eliminate its usage altogether. 617 618# Preferred compiler: 619# ${CC} (if set) 620# ${cross_prefix}gcc (if cross-prefix specified) 621# system compiler 622if test -z "${CC}${cross_prefix}"; then 623 cc="$host_cc" 624else 625 cc="${CC-${cross_prefix}gcc}" 626fi 627 628if test -z "${CXX}${cross_prefix}"; then 629 cxx="c++" 630else 631 cxx="${CXX-${cross_prefix}g++}" 632fi 633 634ar="${AR-${cross_prefix}ar}" 635as="${AS-${cross_prefix}as}" 636ccas="${CCAS-$cc}" 637cpp="${CPP-$cc -E}" 638objcopy="${OBJCOPY-${cross_prefix}objcopy}" 639ld="${LD-${cross_prefix}ld}" 640ranlib="${RANLIB-${cross_prefix}ranlib}" 641nm="${NM-${cross_prefix}nm}" 642strip="${STRIP-${cross_prefix}strip}" 643windres="${WINDRES-${cross_prefix}windres}" 644pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" 645query_pkg_config() { 646 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" 647} 648pkg_config=query_pkg_config 649sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" 650 651# If the user hasn't specified ARFLAGS, default to 'rv', just as make does. 652ARFLAGS="${ARFLAGS-rv}" 653 654# default flags for all hosts 655# We use -fwrapv to tell the compiler that we require a C dialect where 656# left shift of signed integers is well defined and has the expected 657# 2s-complement style results. (Both clang and gcc agree that it 658# provides these semantics.) 659QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS" 660QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" 661QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" 662QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" 663QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include" 664QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl" 665CFLAGS="-std=gnu99 -Wall" 666 667 668# running configure in the source tree? 669# we know that's the case if configure is there. 670if test -f "./configure"; then 671 pwd_is_source_path="y" 672else 673 pwd_is_source_path="n" 674fi 675 676check_define() { 677cat > $TMPC <<EOF 678#if !defined($1) 679#error $1 not defined 680#endif 681int main(void) { return 0; } 682EOF 683 compile_object 684} 685 686check_include() { 687cat > $TMPC <<EOF 688#include <$1> 689int main(void) { return 0; } 690EOF 691 compile_object 692} 693 694write_c_skeleton() { 695 cat > $TMPC <<EOF 696int main(void) { return 0; } 697EOF 698} 699 700write_c_fuzzer_skeleton() { 701 cat > $TMPC <<EOF 702#include <stdint.h> 703#include <sys/types.h> 704int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size); 705int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; } 706EOF 707} 708 709if check_define __linux__ ; then 710 targetos="Linux" 711elif check_define _WIN32 ; then 712 targetos='MINGW32' 713elif check_define __OpenBSD__ ; then 714 targetos='OpenBSD' 715elif check_define __sun__ ; then 716 targetos='SunOS' 717elif check_define __HAIKU__ ; then 718 targetos='Haiku' 719elif check_define __FreeBSD__ ; then 720 targetos='FreeBSD' 721elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then 722 targetos='GNU/kFreeBSD' 723elif check_define __DragonFly__ ; then 724 targetos='DragonFly' 725elif check_define __NetBSD__; then 726 targetos='NetBSD' 727elif check_define __APPLE__; then 728 targetos='Darwin' 729else 730 # This is a fatal error, but don't report it yet, because we 731 # might be going to just print the --help text, or it might 732 # be the result of a missing compiler. 733 targetos='bogus' 734 bogus_os='yes' 735fi 736 737# Some host OSes need non-standard checks for which CPU to use. 738# Note that these checks are broken for cross-compilation: if you're 739# cross-compiling to one of these OSes then you'll need to specify 740# the correct CPU with the --cpu option. 741case $targetos in 742Darwin) 743 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can 744 # run 64-bit userspace code. 745 # If the user didn't specify a CPU explicitly and the kernel says this is 746 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code. 747 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then 748 cpu="x86_64" 749 fi 750 ;; 751SunOS) 752 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo 753 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then 754 cpu="x86_64" 755 fi 756esac 757 758if test ! -z "$cpu" ; then 759 # command line argument 760 : 761elif check_define __i386__ ; then 762 cpu="i386" 763elif check_define __x86_64__ ; then 764 if check_define __ILP32__ ; then 765 cpu="x32" 766 else 767 cpu="x86_64" 768 fi 769elif check_define __sparc__ ; then 770 if check_define __arch64__ ; then 771 cpu="sparc64" 772 else 773 cpu="sparc" 774 fi 775elif check_define _ARCH_PPC ; then 776 if check_define _ARCH_PPC64 ; then 777 if check_define _LITTLE_ENDIAN ; then 778 cpu="ppc64le" 779 else 780 cpu="ppc64" 781 fi 782 else 783 cpu="ppc" 784 fi 785elif check_define __mips__ ; then 786 cpu="mips" 787elif check_define __s390__ ; then 788 if check_define __s390x__ ; then 789 cpu="s390x" 790 else 791 cpu="s390" 792 fi 793elif check_define __riscv ; then 794 if check_define _LP64 ; then 795 cpu="riscv64" 796 else 797 cpu="riscv32" 798 fi 799elif check_define __arm__ ; then 800 cpu="arm" 801elif check_define __aarch64__ ; then 802 cpu="aarch64" 803else 804 cpu=$(uname -m) 805fi 806 807ARCH= 808# Normalise host CPU name and set ARCH. 809# Note that this case should only have supported host CPUs, not guests. 810case "$cpu" in 811 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64) 812 ;; 813 ppc64le) 814 ARCH="ppc64" 815 ;; 816 i386|i486|i586|i686|i86pc|BePC) 817 cpu="i386" 818 ;; 819 x86_64|amd64) 820 cpu="x86_64" 821 ;; 822 armv*b|armv*l|arm) 823 cpu="arm" 824 ;; 825 aarch64) 826 cpu="aarch64" 827 ;; 828 mips*) 829 cpu="mips" 830 ;; 831 sparc|sun4[cdmuv]) 832 cpu="sparc" 833 ;; 834 *) 835 # This will result in either an error or falling back to TCI later 836 ARCH=unknown 837 ;; 838esac 839if test -z "$ARCH"; then 840 ARCH="$cpu" 841fi 842 843# OS specific 844 845# host *BSD for user mode 846HOST_VARIANT_DIR="" 847 848case $targetos in 849MINGW32*) 850 mingw32="yes" 851 hax="yes" 852 whpx="" 853 vhost_user="no" 854 audio_possible_drivers="dsound sdl" 855 if check_include dsound.h; then 856 audio_drv_list="dsound" 857 else 858 audio_drv_list="" 859 fi 860 supported_os="yes" 861 pie="no" 862;; 863GNU/kFreeBSD) 864 bsd="yes" 865 audio_drv_list="oss try-sdl" 866 audio_possible_drivers="oss sdl pa" 867;; 868FreeBSD) 869 bsd="yes" 870 make="${MAKE-gmake}" 871 audio_drv_list="oss try-sdl" 872 audio_possible_drivers="oss sdl pa" 873 # needed for kinfo_getvmmap(3) in libutil.h 874 LIBS="-lutil $LIBS" 875 netmap="" # enable netmap autodetect 876 HOST_VARIANT_DIR="freebsd" 877;; 878DragonFly) 879 bsd="yes" 880 make="${MAKE-gmake}" 881 audio_drv_list="oss try-sdl" 882 audio_possible_drivers="oss sdl pa" 883 HOST_VARIANT_DIR="dragonfly" 884;; 885NetBSD) 886 bsd="yes" 887 hax="yes" 888 make="${MAKE-gmake}" 889 audio_drv_list="oss try-sdl" 890 audio_possible_drivers="oss sdl" 891 oss_lib="-lossaudio" 892 HOST_VARIANT_DIR="netbsd" 893;; 894OpenBSD) 895 bsd="yes" 896 make="${MAKE-gmake}" 897 audio_drv_list="try-sdl" 898 audio_possible_drivers="sdl" 899 HOST_VARIANT_DIR="openbsd" 900;; 901Darwin) 902 bsd="yes" 903 darwin="yes" 904 hax="yes" 905 hvf="yes" 906 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup" 907 if [ "$cpu" = "x86_64" ] ; then 908 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS" 909 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS" 910 fi 911 cocoa="yes" 912 audio_drv_list="coreaudio try-sdl" 913 audio_possible_drivers="coreaudio sdl" 914 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS" 915 # Disable attempts to use ObjectiveC features in os/object.h since they 916 # won't work when we're compiling with gcc as a C compiler. 917 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS" 918 HOST_VARIANT_DIR="darwin" 919;; 920SunOS) 921 solaris="yes" 922 make="${MAKE-gmake}" 923 install="${INSTALL-ginstall}" 924 smbd="${SMBD-/usr/sfw/sbin/smbd}" 925 if test -f /usr/include/sys/soundcard.h ; then 926 audio_drv_list="oss try-sdl" 927 fi 928 audio_possible_drivers="oss sdl" 929# needed for CMSG_ macros in sys/socket.h 930 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS" 931# needed for TIOCWIN* defines in termios.h 932 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS" 933 solarisnetlibs="-lsocket -lnsl -lresolv" 934 LIBS="$solarisnetlibs $LIBS" 935;; 936Haiku) 937 haiku="yes" 938 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS" 939 LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS" 940;; 941Linux) 942 audio_drv_list="try-pa oss" 943 audio_possible_drivers="oss alsa sdl pa" 944 linux="yes" 945 linux_user="yes" 946 kvm="yes" 947 QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES" 948 libudev="yes" 949;; 950esac 951 952if [ "$bsd" = "yes" ] ; then 953 if [ "$darwin" != "yes" ] ; then 954 bsd_user="yes" 955 fi 956fi 957 958: ${make=${MAKE-make}} 959: ${install=${INSTALL-install}} 960# We prefer python 3.x. A bare 'python' is traditionally 961# python 2.x, but some distros have it as python 3.x, so 962# we check that too 963python= 964explicit_python=no 965for binary in "${PYTHON-python3}" python 966do 967 if has "$binary" 968 then 969 python=$(command -v "$binary") 970 break 971 fi 972done 973 974sphinx_build= 975for binary in sphinx-build-3 sphinx-build 976do 977 if has "$binary" 978 then 979 sphinx_build=$(command -v "$binary") 980 break 981 fi 982done 983 984# Check for ancillary tools used in testing 985genisoimage= 986for binary in genisoimage mkisofs 987do 988 if has $binary 989 then 990 genisoimage=$(command -v "$binary") 991 break 992 fi 993done 994 995: ${smbd=${SMBD-/usr/sbin/smbd}} 996 997# Default objcc to clang if available, otherwise use CC 998if has clang; then 999 objcc=clang 1000else 1001 objcc="$cc" 1002fi 1003 1004if test "$mingw32" = "yes" ; then 1005 EXESUF=".exe" 1006 HOST_DSOSUF=".dll" 1007 # MinGW needs -mthreads for TLS and macro _MT. 1008 CFLAGS="-mthreads $CFLAGS" 1009 LIBS="-lwinmm -lws2_32 $LIBS" 1010 write_c_skeleton; 1011 if compile_prog "" "-liberty" ; then 1012 LIBS="-liberty $LIBS" 1013 fi 1014 prefix="c:/Program Files/QEMU" 1015 qemu_suffix="" 1016 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga" 1017fi 1018 1019werror="" 1020 1021for opt do 1022 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 1023 case "$opt" in 1024 --help|-h) show_help=yes 1025 ;; 1026 --version|-V) exec cat $source_path/VERSION 1027 ;; 1028 --prefix=*) prefix="$optarg" 1029 ;; 1030 --interp-prefix=*) interp_prefix="$optarg" 1031 ;; 1032 --cross-prefix=*) 1033 ;; 1034 --cc=*) 1035 ;; 1036 --host-cc=*) host_cc="$optarg" 1037 ;; 1038 --cxx=*) 1039 ;; 1040 --iasl=*) iasl="$optarg" 1041 ;; 1042 --objcc=*) objcc="$optarg" 1043 ;; 1044 --make=*) make="$optarg" 1045 ;; 1046 --install=*) install="$optarg" 1047 ;; 1048 --python=*) python="$optarg" ; explicit_python=yes 1049 ;; 1050 --sphinx-build=*) sphinx_build="$optarg" 1051 ;; 1052 --skip-meson) skip_meson=yes 1053 ;; 1054 --meson=*) meson="$optarg" 1055 ;; 1056 --ninja=*) ninja="$optarg" 1057 ;; 1058 --smbd=*) smbd="$optarg" 1059 ;; 1060 --extra-cflags=*) 1061 ;; 1062 --extra-cxxflags=*) 1063 ;; 1064 --extra-ldflags=*) 1065 ;; 1066 --enable-debug-info) 1067 ;; 1068 --disable-debug-info) 1069 ;; 1070 --cross-cc-*) 1071 ;; 1072 --enable-modules) 1073 modules="yes" 1074 ;; 1075 --disable-modules) 1076 modules="no" 1077 ;; 1078 --disable-module-upgrades) module_upgrades="no" 1079 ;; 1080 --enable-module-upgrades) module_upgrades="yes" 1081 ;; 1082 --cpu=*) 1083 ;; 1084 --target-list=*) target_list="$optarg" 1085 if test "$target_list_exclude"; then 1086 error_exit "Can't mix --target-list with --target-list-exclude" 1087 fi 1088 ;; 1089 --target-list-exclude=*) target_list_exclude="$optarg" 1090 if test "$target_list"; then 1091 error_exit "Can't mix --target-list-exclude with --target-list" 1092 fi 1093 ;; 1094 --enable-trace-backends=*) trace_backends="$optarg" 1095 ;; 1096 # XXX: backwards compatibility 1097 --enable-trace-backend=*) trace_backends="$optarg" 1098 ;; 1099 --with-trace-file=*) trace_file="$optarg" 1100 ;; 1101 --with-default-devices) default_devices="yes" 1102 ;; 1103 --without-default-devices) default_devices="no" 1104 ;; 1105 --enable-gprof) gprof="yes" 1106 ;; 1107 --enable-gcov) gcov="yes" 1108 ;; 1109 --static) 1110 static="yes" 1111 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS" 1112 ;; 1113 --mandir=*) mandir="$optarg" 1114 ;; 1115 --bindir=*) bindir="$optarg" 1116 ;; 1117 --libdir=*) libdir="$optarg" 1118 ;; 1119 --libexecdir=*) libexecdir="$optarg" 1120 ;; 1121 --includedir=*) includedir="$optarg" 1122 ;; 1123 --datadir=*) datadir="$optarg" 1124 ;; 1125 --with-suffix=*) qemu_suffix="$optarg" 1126 ;; 1127 --docdir=*) qemu_docdir="$optarg" 1128 ;; 1129 --sysconfdir=*) sysconfdir="$optarg" 1130 ;; 1131 --localstatedir=*) local_statedir="$optarg" 1132 ;; 1133 --firmwarepath=*) firmwarepath="$optarg" 1134 ;; 1135 --host=*|--build=*|\ 1136 --disable-dependency-tracking|\ 1137 --sbindir=*|--sharedstatedir=*|\ 1138 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\ 1139 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) 1140 # These switches are silently ignored, for compatibility with 1141 # autoconf-generated configure scripts. This allows QEMU's 1142 # configure to be used by RPM and similar macros that set 1143 # lots of directory switches by default. 1144 ;; 1145 --disable-sdl) sdl="disabled" 1146 ;; 1147 --enable-sdl) sdl="enabled" 1148 ;; 1149 --disable-sdl-image) sdl_image="disabled" 1150 ;; 1151 --enable-sdl-image) sdl_image="enabled" 1152 ;; 1153 --disable-qom-cast-debug) qom_cast_debug="no" 1154 ;; 1155 --enable-qom-cast-debug) qom_cast_debug="yes" 1156 ;; 1157 --disable-virtfs) virtfs="no" 1158 ;; 1159 --enable-virtfs) virtfs="yes" 1160 ;; 1161 --disable-mpath) mpath="no" 1162 ;; 1163 --enable-mpath) mpath="yes" 1164 ;; 1165 --disable-vnc) vnc="disabled" 1166 ;; 1167 --enable-vnc) vnc="enabled" 1168 ;; 1169 --disable-gettext) gettext="false" 1170 ;; 1171 --enable-gettext) gettext="true" 1172 ;; 1173 --oss-lib=*) oss_lib="$optarg" 1174 ;; 1175 --audio-drv-list=*) audio_drv_list="$optarg" 1176 ;; 1177 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1178 ;; 1179 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1180 ;; 1181 --enable-debug-tcg) debug_tcg="yes" 1182 ;; 1183 --disable-debug-tcg) debug_tcg="no" 1184 ;; 1185 --enable-debug) 1186 # Enable debugging options that aren't excessively noisy 1187 debug_tcg="yes" 1188 debug_mutex="yes" 1189 debug="yes" 1190 strip_opt="no" 1191 fortify_source="no" 1192 ;; 1193 --enable-sanitizers) sanitizers="yes" 1194 ;; 1195 --disable-sanitizers) sanitizers="no" 1196 ;; 1197 --enable-tsan) tsan="yes" 1198 ;; 1199 --disable-tsan) tsan="no" 1200 ;; 1201 --enable-sparse) sparse="yes" 1202 ;; 1203 --disable-sparse) sparse="no" 1204 ;; 1205 --disable-strip) strip_opt="no" 1206 ;; 1207 --disable-vnc-sasl) vnc_sasl="disabled" 1208 ;; 1209 --enable-vnc-sasl) vnc_sasl="enabled" 1210 ;; 1211 --disable-vnc-jpeg) vnc_jpeg="disabled" 1212 ;; 1213 --enable-vnc-jpeg) vnc_jpeg="enabled" 1214 ;; 1215 --disable-vnc-png) vnc_png="disabled" 1216 ;; 1217 --enable-vnc-png) vnc_png="enabled" 1218 ;; 1219 --disable-slirp) slirp="no" 1220 ;; 1221 --enable-slirp=git) slirp="git" 1222 ;; 1223 --enable-slirp=system) slirp="system" 1224 ;; 1225 --disable-vde) vde="no" 1226 ;; 1227 --enable-vde) vde="yes" 1228 ;; 1229 --disable-netmap) netmap="no" 1230 ;; 1231 --enable-netmap) netmap="yes" 1232 ;; 1233 --disable-xen) xen="no" 1234 ;; 1235 --enable-xen) xen="yes" 1236 ;; 1237 --disable-xen-pci-passthrough) xen_pci_passthrough="no" 1238 ;; 1239 --enable-xen-pci-passthrough) xen_pci_passthrough="yes" 1240 ;; 1241 --disable-brlapi) brlapi="no" 1242 ;; 1243 --enable-brlapi) brlapi="yes" 1244 ;; 1245 --disable-kvm) kvm="no" 1246 ;; 1247 --enable-kvm) kvm="yes" 1248 ;; 1249 --disable-hax) hax="no" 1250 ;; 1251 --enable-hax) hax="yes" 1252 ;; 1253 --disable-hvf) hvf="no" 1254 ;; 1255 --enable-hvf) hvf="yes" 1256 ;; 1257 --disable-whpx) whpx="no" 1258 ;; 1259 --enable-whpx) whpx="yes" 1260 ;; 1261 --disable-tcg-interpreter) tcg_interpreter="no" 1262 ;; 1263 --enable-tcg-interpreter) tcg_interpreter="yes" 1264 ;; 1265 --disable-cap-ng) cap_ng="no" 1266 ;; 1267 --enable-cap-ng) cap_ng="yes" 1268 ;; 1269 --disable-tcg) tcg="no" 1270 ;; 1271 --enable-tcg) tcg="yes" 1272 ;; 1273 --disable-malloc-trim) malloc_trim="no" 1274 ;; 1275 --enable-malloc-trim) malloc_trim="yes" 1276 ;; 1277 --disable-spice) spice="no" 1278 ;; 1279 --enable-spice) spice="yes" 1280 ;; 1281 --disable-libiscsi) libiscsi="no" 1282 ;; 1283 --enable-libiscsi) libiscsi="yes" 1284 ;; 1285 --disable-libnfs) libnfs="no" 1286 ;; 1287 --enable-libnfs) libnfs="yes" 1288 ;; 1289 --enable-profiler) profiler="yes" 1290 ;; 1291 --disable-cocoa) cocoa="no" 1292 ;; 1293 --enable-cocoa) 1294 cocoa="yes" ; 1295 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)" 1296 ;; 1297 --disable-system) softmmu="no" 1298 ;; 1299 --enable-system) softmmu="yes" 1300 ;; 1301 --disable-user) 1302 linux_user="no" ; 1303 bsd_user="no" ; 1304 ;; 1305 --enable-user) ;; 1306 --disable-linux-user) linux_user="no" 1307 ;; 1308 --enable-linux-user) linux_user="yes" 1309 ;; 1310 --disable-bsd-user) bsd_user="no" 1311 ;; 1312 --enable-bsd-user) bsd_user="yes" 1313 ;; 1314 --enable-pie) pie="yes" 1315 ;; 1316 --disable-pie) pie="no" 1317 ;; 1318 --enable-werror) werror="yes" 1319 ;; 1320 --disable-werror) werror="no" 1321 ;; 1322 --enable-stack-protector) stack_protector="yes" 1323 ;; 1324 --disable-stack-protector) stack_protector="no" 1325 ;; 1326 --enable-safe-stack) safe_stack="yes" 1327 ;; 1328 --disable-safe-stack) safe_stack="no" 1329 ;; 1330 --disable-curses) curses="no" 1331 ;; 1332 --enable-curses) curses="yes" 1333 ;; 1334 --disable-iconv) iconv="no" 1335 ;; 1336 --enable-iconv) iconv="yes" 1337 ;; 1338 --disable-curl) curl="no" 1339 ;; 1340 --enable-curl) curl="yes" 1341 ;; 1342 --disable-fdt) fdt="no" 1343 ;; 1344 --enable-fdt) fdt="yes" 1345 ;; 1346 --disable-linux-aio) linux_aio="no" 1347 ;; 1348 --enable-linux-aio) linux_aio="yes" 1349 ;; 1350 --disable-linux-io-uring) linux_io_uring="no" 1351 ;; 1352 --enable-linux-io-uring) linux_io_uring="yes" 1353 ;; 1354 --disable-attr) attr="no" 1355 ;; 1356 --enable-attr) attr="yes" 1357 ;; 1358 --disable-membarrier) membarrier="no" 1359 ;; 1360 --enable-membarrier) membarrier="yes" 1361 ;; 1362 --disable-blobs) blobs="no" 1363 ;; 1364 --with-pkgversion=*) pkgversion="$optarg" 1365 ;; 1366 --with-coroutine=*) coroutine="$optarg" 1367 ;; 1368 --disable-coroutine-pool) coroutine_pool="no" 1369 ;; 1370 --enable-coroutine-pool) coroutine_pool="yes" 1371 ;; 1372 --enable-debug-stack-usage) debug_stack_usage="yes" 1373 ;; 1374 --enable-crypto-afalg) crypto_afalg="yes" 1375 ;; 1376 --disable-crypto-afalg) crypto_afalg="no" 1377 ;; 1378 --disable-docs) docs="no" 1379 ;; 1380 --enable-docs) docs="yes" 1381 ;; 1382 --disable-vhost-net) vhost_net="no" 1383 ;; 1384 --enable-vhost-net) vhost_net="yes" 1385 ;; 1386 --disable-vhost-crypto) vhost_crypto="no" 1387 ;; 1388 --enable-vhost-crypto) vhost_crypto="yes" 1389 ;; 1390 --disable-vhost-scsi) vhost_scsi="no" 1391 ;; 1392 --enable-vhost-scsi) vhost_scsi="yes" 1393 ;; 1394 --disable-vhost-vsock) vhost_vsock="no" 1395 ;; 1396 --enable-vhost-vsock) vhost_vsock="yes" 1397 ;; 1398 --disable-vhost-user-fs) vhost_user_fs="no" 1399 ;; 1400 --enable-vhost-user-fs) vhost_user_fs="yes" 1401 ;; 1402 --disable-opengl) opengl="no" 1403 ;; 1404 --enable-opengl) opengl="yes" 1405 ;; 1406 --disable-rbd) rbd="no" 1407 ;; 1408 --enable-rbd) rbd="yes" 1409 ;; 1410 --disable-xfsctl) xfs="no" 1411 ;; 1412 --enable-xfsctl) xfs="yes" 1413 ;; 1414 --disable-smartcard) smartcard="no" 1415 ;; 1416 --enable-smartcard) smartcard="yes" 1417 ;; 1418 --disable-u2f) u2f="disabled" 1419 ;; 1420 --enable-u2f) u2f="enabled" 1421 ;; 1422 --disable-libusb) libusb="no" 1423 ;; 1424 --enable-libusb) libusb="yes" 1425 ;; 1426 --disable-usb-redir) usb_redir="no" 1427 ;; 1428 --enable-usb-redir) usb_redir="yes" 1429 ;; 1430 --disable-zlib-test) 1431 ;; 1432 --disable-lzo) lzo="no" 1433 ;; 1434 --enable-lzo) lzo="yes" 1435 ;; 1436 --disable-snappy) snappy="no" 1437 ;; 1438 --enable-snappy) snappy="yes" 1439 ;; 1440 --disable-bzip2) bzip2="no" 1441 ;; 1442 --enable-bzip2) bzip2="yes" 1443 ;; 1444 --enable-lzfse) lzfse="yes" 1445 ;; 1446 --disable-lzfse) lzfse="no" 1447 ;; 1448 --disable-zstd) zstd="no" 1449 ;; 1450 --enable-zstd) zstd="yes" 1451 ;; 1452 --enable-guest-agent) guest_agent="yes" 1453 ;; 1454 --disable-guest-agent) guest_agent="no" 1455 ;; 1456 --enable-guest-agent-msi) guest_agent_msi="yes" 1457 ;; 1458 --disable-guest-agent-msi) guest_agent_msi="no" 1459 ;; 1460 --with-vss-sdk) vss_win32_sdk="" 1461 ;; 1462 --with-vss-sdk=*) vss_win32_sdk="$optarg" 1463 ;; 1464 --without-vss-sdk) vss_win32_sdk="no" 1465 ;; 1466 --with-win-sdk) win_sdk="" 1467 ;; 1468 --with-win-sdk=*) win_sdk="$optarg" 1469 ;; 1470 --without-win-sdk) win_sdk="no" 1471 ;; 1472 --enable-tools) want_tools="yes" 1473 ;; 1474 --disable-tools) want_tools="no" 1475 ;; 1476 --enable-seccomp) seccomp="yes" 1477 ;; 1478 --disable-seccomp) seccomp="no" 1479 ;; 1480 --disable-glusterfs) glusterfs="no" 1481 ;; 1482 --disable-avx2) avx2_opt="no" 1483 ;; 1484 --enable-avx2) avx2_opt="yes" 1485 ;; 1486 --disable-avx512f) avx512f_opt="no" 1487 ;; 1488 --enable-avx512f) avx512f_opt="yes" 1489 ;; 1490 1491 --enable-glusterfs) glusterfs="yes" 1492 ;; 1493 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) 1494 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 1495 ;; 1496 --enable-vhdx|--disable-vhdx) 1497 echo "$0: $opt is obsolete, VHDX driver is always built" >&2 1498 ;; 1499 --enable-uuid|--disable-uuid) 1500 echo "$0: $opt is obsolete, UUID support is always built" >&2 1501 ;; 1502 --disable-gtk) gtk="no" 1503 ;; 1504 --enable-gtk) gtk="yes" 1505 ;; 1506 --tls-priority=*) tls_priority="$optarg" 1507 ;; 1508 --disable-gnutls) gnutls="no" 1509 ;; 1510 --enable-gnutls) gnutls="yes" 1511 ;; 1512 --disable-nettle) nettle="no" 1513 ;; 1514 --enable-nettle) nettle="yes" 1515 ;; 1516 --disable-gcrypt) gcrypt="no" 1517 ;; 1518 --enable-gcrypt) gcrypt="yes" 1519 ;; 1520 --disable-auth-pam) auth_pam="no" 1521 ;; 1522 --enable-auth-pam) auth_pam="yes" 1523 ;; 1524 --enable-rdma) rdma="yes" 1525 ;; 1526 --disable-rdma) rdma="no" 1527 ;; 1528 --enable-pvrdma) pvrdma="yes" 1529 ;; 1530 --disable-pvrdma) pvrdma="no" 1531 ;; 1532 --disable-vte) vte="no" 1533 ;; 1534 --enable-vte) vte="yes" 1535 ;; 1536 --disable-virglrenderer) virglrenderer="no" 1537 ;; 1538 --enable-virglrenderer) virglrenderer="yes" 1539 ;; 1540 --disable-tpm) tpm="no" 1541 ;; 1542 --enable-tpm) tpm="yes" 1543 ;; 1544 --disable-libssh) libssh="no" 1545 ;; 1546 --enable-libssh) libssh="yes" 1547 ;; 1548 --disable-live-block-migration) live_block_migration="no" 1549 ;; 1550 --enable-live-block-migration) live_block_migration="yes" 1551 ;; 1552 --disable-numa) numa="no" 1553 ;; 1554 --enable-numa) numa="yes" 1555 ;; 1556 --disable-libxml2) libxml2="no" 1557 ;; 1558 --enable-libxml2) libxml2="yes" 1559 ;; 1560 --disable-tcmalloc) tcmalloc="no" 1561 ;; 1562 --enable-tcmalloc) tcmalloc="yes" 1563 ;; 1564 --disable-jemalloc) jemalloc="no" 1565 ;; 1566 --enable-jemalloc) jemalloc="yes" 1567 ;; 1568 --disable-replication) replication="no" 1569 ;; 1570 --enable-replication) replication="yes" 1571 ;; 1572 --disable-bochs) bochs="no" 1573 ;; 1574 --enable-bochs) bochs="yes" 1575 ;; 1576 --disable-cloop) cloop="no" 1577 ;; 1578 --enable-cloop) cloop="yes" 1579 ;; 1580 --disable-dmg) dmg="no" 1581 ;; 1582 --enable-dmg) dmg="yes" 1583 ;; 1584 --disable-qcow1) qcow1="no" 1585 ;; 1586 --enable-qcow1) qcow1="yes" 1587 ;; 1588 --disable-vdi) vdi="no" 1589 ;; 1590 --enable-vdi) vdi="yes" 1591 ;; 1592 --disable-vvfat) vvfat="no" 1593 ;; 1594 --enable-vvfat) vvfat="yes" 1595 ;; 1596 --disable-qed) qed="no" 1597 ;; 1598 --enable-qed) qed="yes" 1599 ;; 1600 --disable-parallels) parallels="no" 1601 ;; 1602 --enable-parallels) parallels="yes" 1603 ;; 1604 --disable-sheepdog) sheepdog="no" 1605 ;; 1606 --enable-sheepdog) sheepdog="yes" 1607 ;; 1608 --disable-vhost-user) vhost_user="no" 1609 ;; 1610 --enable-vhost-user) vhost_user="yes" 1611 ;; 1612 --disable-vhost-vdpa) vhost_vdpa="no" 1613 ;; 1614 --enable-vhost-vdpa) vhost_vdpa="yes" 1615 ;; 1616 --disable-vhost-kernel) vhost_kernel="no" 1617 ;; 1618 --enable-vhost-kernel) vhost_kernel="yes" 1619 ;; 1620 --disable-capstone) capstone="no" 1621 ;; 1622 --enable-capstone) capstone="yes" 1623 ;; 1624 --enable-capstone=git) capstone="git" 1625 ;; 1626 --enable-capstone=system) capstone="system" 1627 ;; 1628 --with-git=*) git="$optarg" 1629 ;; 1630 --enable-git-update) git_update=yes 1631 ;; 1632 --disable-git-update) git_update=no 1633 ;; 1634 --enable-debug-mutex) debug_mutex=yes 1635 ;; 1636 --disable-debug-mutex) debug_mutex=no 1637 ;; 1638 --enable-libpmem) libpmem=yes 1639 ;; 1640 --disable-libpmem) libpmem=no 1641 ;; 1642 --enable-xkbcommon) xkbcommon="enabled" 1643 ;; 1644 --disable-xkbcommon) xkbcommon="disabled" 1645 ;; 1646 --enable-plugins) plugins="yes" 1647 ;; 1648 --disable-plugins) plugins="no" 1649 ;; 1650 --enable-containers) use_containers="yes" 1651 ;; 1652 --disable-containers) use_containers="no" 1653 ;; 1654 --enable-fuzzing) fuzzing=yes 1655 ;; 1656 --disable-fuzzing) fuzzing=no 1657 ;; 1658 --gdb=*) gdb_bin="$optarg" 1659 ;; 1660 --enable-rng-none) rng_none=yes 1661 ;; 1662 --disable-rng-none) rng_none=no 1663 ;; 1664 --enable-keyring) secret_keyring="yes" 1665 ;; 1666 --disable-keyring) secret_keyring="no" 1667 ;; 1668 --enable-libdaxctl) libdaxctl=yes 1669 ;; 1670 --disable-libdaxctl) libdaxctl=no 1671 ;; 1672 *) 1673 echo "ERROR: unknown option $opt" 1674 echo "Try '$0 --help' for more information" 1675 exit 1 1676 ;; 1677 esac 1678done 1679 1680firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}" 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 docdir="$prefix" 1689 bindir="$prefix" 1690 sysconfdir="$prefix" 1691 local_statedir= 1692else 1693 mandir="${mandir:-$prefix/share/man}" 1694 datadir="${datadir:-$prefix/share}" 1695 docdir="${docdir:-$prefix/share/doc}" 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/$qemu_suffix 1837 --docdir=PATH install documentation in PATH/$qemu_suffix 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/$qemu_suffix 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-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix] 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# SHA command probe for modules 3909if test "$modules" = yes; then 3910 shacmd_probe="sha1sum sha1 shasum" 3911 for c in $shacmd_probe; do 3912 if has $c; then 3913 shacmd="$c" 3914 break 3915 fi 3916 done 3917 if test "$shacmd" = ""; then 3918 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3919 fi 3920fi 3921 3922########################################## 3923# libmpathpersist probe 3924 3925if test "$mpath" != "no" ; then 3926 # probe for the new API 3927 cat > $TMPC <<EOF 3928#include <libudev.h> 3929#include <mpath_persist.h> 3930unsigned mpath_mx_alloc_len = 1024; 3931int logsink; 3932static struct config *multipath_conf; 3933extern struct udev *udev; 3934extern struct config *get_multipath_config(void); 3935extern void put_multipath_config(struct config *conf); 3936struct udev *udev; 3937struct config *get_multipath_config(void) { return multipath_conf; } 3938void put_multipath_config(struct config *conf) { } 3939 3940int main(void) { 3941 udev = udev_new(); 3942 multipath_conf = mpath_lib_init(); 3943 return 0; 3944} 3945EOF 3946 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3947 mpathpersist=yes 3948 mpathpersist_new_api=yes 3949 else 3950 # probe for the old API 3951 cat > $TMPC <<EOF 3952#include <libudev.h> 3953#include <mpath_persist.h> 3954unsigned mpath_mx_alloc_len = 1024; 3955int logsink; 3956int main(void) { 3957 struct udev *udev = udev_new(); 3958 mpath_lib_init(udev); 3959 return 0; 3960} 3961EOF 3962 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3963 mpathpersist=yes 3964 mpathpersist_new_api=no 3965 else 3966 mpathpersist=no 3967 fi 3968 fi 3969else 3970 mpathpersist=no 3971fi 3972 3973########################################## 3974# pthread probe 3975PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3976 3977pthread=no 3978cat > $TMPC << EOF 3979#include <pthread.h> 3980static void *f(void *p) { return NULL; } 3981int main(void) { 3982 pthread_t thread; 3983 pthread_create(&thread, 0, f, 0); 3984 return 0; 3985} 3986EOF 3987if compile_prog "" "" ; then 3988 pthread=yes 3989else 3990 for pthread_lib in $PTHREADLIBS_LIST; do 3991 if compile_prog "" "$pthread_lib" ; then 3992 pthread=yes 3993 found=no 3994 for lib_entry in $LIBS; do 3995 if test "$lib_entry" = "$pthread_lib"; then 3996 found=yes 3997 break 3998 fi 3999 done 4000 if test "$found" = "no"; then 4001 LIBS="$pthread_lib $LIBS" 4002 fi 4003 PTHREAD_LIB="$pthread_lib" 4004 break 4005 fi 4006 done 4007fi 4008 4009if test "$mingw32" != yes && test "$pthread" = no; then 4010 error_exit "pthread check failed" \ 4011 "Make sure to have the pthread libs and headers installed." 4012fi 4013 4014# check for pthread_setname_np with thread id 4015pthread_setname_np_w_tid=no 4016cat > $TMPC << EOF 4017#include <pthread.h> 4018 4019static void *f(void *p) { return NULL; } 4020int main(void) 4021{ 4022 pthread_t thread; 4023 pthread_create(&thread, 0, f, 0); 4024 pthread_setname_np(thread, "QEMU"); 4025 return 0; 4026} 4027EOF 4028if compile_prog "" "$pthread_lib" ; then 4029 pthread_setname_np_w_tid=yes 4030fi 4031 4032# check for pthread_setname_np without thread id 4033pthread_setname_np_wo_tid=no 4034cat > $TMPC << EOF 4035#include <pthread.h> 4036 4037static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; } 4038int main(void) 4039{ 4040 pthread_t thread; 4041 pthread_create(&thread, 0, f, 0); 4042 return 0; 4043} 4044EOF 4045if compile_prog "" "$pthread_lib" ; then 4046 pthread_setname_np_wo_tid=yes 4047fi 4048 4049########################################## 4050# rbd probe 4051if test "$rbd" != "no" ; then 4052 cat > $TMPC <<EOF 4053#include <stdio.h> 4054#include <rbd/librbd.h> 4055int main(void) { 4056 rados_t cluster; 4057 rados_create(&cluster, NULL); 4058 return 0; 4059} 4060EOF 4061 rbd_libs="-lrbd -lrados" 4062 if compile_prog "" "$rbd_libs" ; then 4063 rbd=yes 4064 else 4065 if test "$rbd" = "yes" ; then 4066 feature_not_found "rados block device" "Install librbd/ceph devel" 4067 fi 4068 rbd=no 4069 fi 4070fi 4071 4072########################################## 4073# libssh probe 4074if test "$libssh" != "no" ; then 4075 if $pkg_config --exists libssh; then 4076 libssh_cflags=$($pkg_config libssh --cflags) 4077 libssh_libs=$($pkg_config libssh --libs) 4078 libssh=yes 4079 else 4080 if test "$libssh" = "yes" ; then 4081 error_exit "libssh required for --enable-libssh" 4082 fi 4083 libssh=no 4084 fi 4085fi 4086 4087########################################## 4088# Check for libssh 0.8 4089# This is done like this instead of using the LIBSSH_VERSION_* and 4090# SSH_VERSION_* macros because some distributions in the past shipped 4091# snapshots of the future 0.8 from Git, and those snapshots did not 4092# have updated version numbers (still referring to 0.7.0). 4093 4094if test "$libssh" = "yes"; then 4095 cat > $TMPC <<EOF 4096#include <libssh/libssh.h> 4097int main(void) { return ssh_get_server_publickey(NULL, NULL); } 4098EOF 4099 if compile_prog "$libssh_cflags" "$libssh_libs"; then 4100 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" 4101 fi 4102fi 4103 4104########################################## 4105# linux-aio probe 4106 4107if test "$linux_aio" != "no" ; then 4108 cat > $TMPC <<EOF 4109#include <libaio.h> 4110#include <sys/eventfd.h> 4111#include <stddef.h> 4112int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 4113EOF 4114 if compile_prog "" "-laio" ; then 4115 linux_aio=yes 4116 else 4117 if test "$linux_aio" = "yes" ; then 4118 feature_not_found "linux AIO" "Install libaio devel" 4119 fi 4120 linux_aio=no 4121 fi 4122fi 4123########################################## 4124# linux-io-uring probe 4125 4126if test "$linux_io_uring" != "no" ; then 4127 if $pkg_config liburing; then 4128 linux_io_uring_cflags=$($pkg_config --cflags liburing) 4129 linux_io_uring_libs=$($pkg_config --libs liburing) 4130 linux_io_uring=yes 4131 4132 # io_uring is used in libqemuutil.a where per-file -libs variables are not 4133 # seen by programs linking the archive. It's not ideal, but just add the 4134 # library dependency globally. 4135 LIBS="$linux_io_uring_libs $LIBS" 4136 else 4137 if test "$linux_io_uring" = "yes" ; then 4138 feature_not_found "linux io_uring" "Install liburing devel" 4139 fi 4140 linux_io_uring=no 4141 fi 4142fi 4143 4144########################################## 4145# TPM emulation is only on POSIX 4146 4147if test "$tpm" = ""; then 4148 if test "$mingw32" = "yes"; then 4149 tpm=no 4150 else 4151 tpm=yes 4152 fi 4153elif test "$tpm" = "yes"; then 4154 if test "$mingw32" = "yes" ; then 4155 error_exit "TPM emulation only available on POSIX systems" 4156 fi 4157fi 4158 4159########################################## 4160# attr probe 4161 4162libattr_libs= 4163if test "$attr" != "no" ; then 4164 cat > $TMPC <<EOF 4165#include <stdio.h> 4166#include <sys/types.h> 4167#ifdef CONFIG_LIBATTR 4168#include <attr/xattr.h> 4169#else 4170#include <sys/xattr.h> 4171#endif 4172int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 4173EOF 4174 if compile_prog "" "" ; then 4175 attr=yes 4176 # Older distros have <attr/xattr.h>, and need -lattr: 4177 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 4178 attr=yes 4179 libattr_libs="-lattr" 4180 LIBS="$libattr_libs $LIBS" 4181 libattr=yes 4182 else 4183 if test "$attr" = "yes" ; then 4184 feature_not_found "ATTR" "Install libc6 or libattr devel" 4185 fi 4186 attr=no 4187 fi 4188fi 4189 4190########################################## 4191# iovec probe 4192cat > $TMPC <<EOF 4193#include <sys/types.h> 4194#include <sys/uio.h> 4195#include <unistd.h> 4196int main(void) { return sizeof(struct iovec); } 4197EOF 4198iovec=no 4199if compile_prog "" "" ; then 4200 iovec=yes 4201fi 4202 4203########################################## 4204# preadv probe 4205cat > $TMPC <<EOF 4206#include <sys/types.h> 4207#include <sys/uio.h> 4208#include <unistd.h> 4209int main(void) { return preadv(0, 0, 0, 0); } 4210EOF 4211preadv=no 4212if compile_prog "" "" ; then 4213 preadv=yes 4214fi 4215 4216########################################## 4217# fdt probe 4218# fdt support is mandatory for at least some target architectures, 4219# so insist on it if we're building those system emulators. 4220fdt_required=no 4221for target in $target_list; do 4222 case $target in 4223 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu) 4224 fdt_required=yes 4225 ;; 4226 esac 4227done 4228 4229if test "$fdt_required" = "yes"; then 4230 if test "$fdt" = "no"; then 4231 error_exit "fdt disabled but some requested targets require it." \ 4232 "You can turn off fdt only if you also disable all the system emulation" \ 4233 "targets which need it (by specifying a cut down --target-list)." 4234 fi 4235 fdt=yes 4236elif test "$fdt" != "yes" ; then 4237 fdt=no 4238fi 4239 4240# fdt is only required when building softmmu targets 4241if test -z "$fdt" -a "$softmmu" != "yes" ; then 4242 fdt="no" 4243fi 4244 4245if test "$fdt" != "no" ; then 4246 fdt_libs="-lfdt" 4247 # explicitly check for libfdt_env.h as it is missing in some stable installs 4248 # and test for required functions to make sure we are on a version >= 1.4.2 4249 cat > $TMPC << EOF 4250#include <libfdt.h> 4251#include <libfdt_env.h> 4252int main(void) { fdt_check_full(NULL, 0); return 0; } 4253EOF 4254 if compile_prog "" "$fdt_libs" ; then 4255 # system DTC is good - use it 4256 fdt=system 4257 else 4258 # have GIT checkout, so activate dtc submodule 4259 if test -e "${source_path}/.git" ; then 4260 git_submodules="${git_submodules} dtc" 4261 fi 4262 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 4263 fdt=git 4264 mkdir -p dtc 4265 if [ "$pwd_is_source_path" != "y" ] ; then 4266 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 4267 fi 4268 fdt_cflags="-I${source_path}/dtc/libfdt" 4269 fdt_ldflags="-L$PWD/dtc/libfdt" 4270 fdt_libs="$fdt_libs" 4271 elif test "$fdt" = "yes" ; then 4272 # Not a git build & no libfdt found, prompt for system install 4273 error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 4274 "Please install the DTC (libfdt) devel package" 4275 else 4276 # don't have and don't want 4277 fdt_libs= 4278 fdt=no 4279 fi 4280 fi 4281fi 4282 4283########################################## 4284# opengl probe (for sdl2, gtk, milkymist-tmu2) 4285 4286gbm="no" 4287if $pkg_config gbm; then 4288 gbm_cflags="$($pkg_config --cflags gbm)" 4289 gbm_libs="$($pkg_config --libs gbm)" 4290 gbm="yes" 4291fi 4292 4293if test "$opengl" != "no" ; then 4294 opengl_pkgs="epoxy gbm" 4295 if $pkg_config $opengl_pkgs; then 4296 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 4297 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 4298 opengl=yes 4299 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 4300 gtk_gl="yes" 4301 fi 4302 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 4303 else 4304 if test "$opengl" = "yes" ; then 4305 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 4306 fi 4307 opengl_cflags="" 4308 opengl_libs="" 4309 opengl=no 4310 fi 4311fi 4312 4313if test "$opengl" = "yes"; then 4314 cat > $TMPC << EOF 4315#include <epoxy/egl.h> 4316#ifndef EGL_MESA_image_dma_buf_export 4317# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 4318#endif 4319int main(void) { return 0; } 4320EOF 4321 if compile_prog "" "" ; then 4322 opengl_dmabuf=yes 4323 fi 4324fi 4325 4326if test "$opengl" = "yes" && test "$have_x11" = "yes"; then 4327 for target in $target_list; do 4328 case $target in 4329 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL 4330 need_x11=yes 4331 ;; 4332 esac 4333 done 4334fi 4335 4336########################################## 4337# libxml2 probe 4338if test "$libxml2" != "no" ; then 4339 if $pkg_config --exists libxml-2.0; then 4340 libxml2="yes" 4341 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 4342 libxml2_libs=$($pkg_config --libs libxml-2.0) 4343 else 4344 if test "$libxml2" = "yes"; then 4345 feature_not_found "libxml2" "Install libxml2 devel" 4346 fi 4347 libxml2="no" 4348 fi 4349fi 4350 4351########################################## 4352# glusterfs probe 4353if test "$glusterfs" != "no" ; then 4354 if $pkg_config --atleast-version=3 glusterfs-api; then 4355 glusterfs="yes" 4356 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 4357 glusterfs_libs=$($pkg_config --libs glusterfs-api) 4358 if $pkg_config --atleast-version=4 glusterfs-api; then 4359 glusterfs_xlator_opt="yes" 4360 fi 4361 if $pkg_config --atleast-version=5 glusterfs-api; then 4362 glusterfs_discard="yes" 4363 fi 4364 if $pkg_config --atleast-version=6 glusterfs-api; then 4365 glusterfs_fallocate="yes" 4366 glusterfs_zerofill="yes" 4367 fi 4368 cat > $TMPC << EOF 4369#include <glusterfs/api/glfs.h> 4370 4371int 4372main(void) 4373{ 4374 /* new glfs_ftruncate() passes two additional args */ 4375 return glfs_ftruncate(NULL, 0, NULL, NULL); 4376} 4377EOF 4378 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4379 glusterfs_ftruncate_has_stat="yes" 4380 fi 4381 cat > $TMPC << EOF 4382#include <glusterfs/api/glfs.h> 4383 4384/* new glfs_io_cbk() passes two additional glfs_stat structs */ 4385static void 4386glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 4387{} 4388 4389int 4390main(void) 4391{ 4392 glfs_io_cbk iocb = &glusterfs_iocb; 4393 iocb(NULL, 0 , NULL, NULL, NULL); 4394 return 0; 4395} 4396EOF 4397 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4398 glusterfs_iocb_has_stat="yes" 4399 fi 4400 else 4401 if test "$glusterfs" = "yes" ; then 4402 feature_not_found "GlusterFS backend support" \ 4403 "Install glusterfs-api devel >= 3" 4404 fi 4405 glusterfs="no" 4406 fi 4407fi 4408 4409# Check for inotify functions when we are building linux-user 4410# emulator. This is done because older glibc versions don't 4411# have syscall stubs for these implemented. In that case we 4412# don't provide them even if kernel supports them. 4413# 4414inotify=no 4415cat > $TMPC << EOF 4416#include <sys/inotify.h> 4417 4418int 4419main(void) 4420{ 4421 /* try to start inotify */ 4422 return inotify_init(); 4423} 4424EOF 4425if compile_prog "" "" ; then 4426 inotify=yes 4427fi 4428 4429inotify1=no 4430cat > $TMPC << EOF 4431#include <sys/inotify.h> 4432 4433int 4434main(void) 4435{ 4436 /* try to start inotify */ 4437 return inotify_init1(0); 4438} 4439EOF 4440if compile_prog "" "" ; then 4441 inotify1=yes 4442fi 4443 4444# check if pipe2 is there 4445pipe2=no 4446cat > $TMPC << EOF 4447#include <unistd.h> 4448#include <fcntl.h> 4449 4450int main(void) 4451{ 4452 int pipefd[2]; 4453 return pipe2(pipefd, O_CLOEXEC); 4454} 4455EOF 4456if compile_prog "" "" ; then 4457 pipe2=yes 4458fi 4459 4460# check if accept4 is there 4461accept4=no 4462cat > $TMPC << EOF 4463#include <sys/socket.h> 4464#include <stddef.h> 4465 4466int main(void) 4467{ 4468 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4469 return 0; 4470} 4471EOF 4472if compile_prog "" "" ; then 4473 accept4=yes 4474fi 4475 4476# check if tee/splice is there. vmsplice was added same time. 4477splice=no 4478cat > $TMPC << EOF 4479#include <unistd.h> 4480#include <fcntl.h> 4481#include <limits.h> 4482 4483int main(void) 4484{ 4485 int len, fd = 0; 4486 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4487 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4488 return 0; 4489} 4490EOF 4491if compile_prog "" "" ; then 4492 splice=yes 4493fi 4494 4495########################################## 4496# libnuma probe 4497 4498if test "$numa" != "no" ; then 4499 cat > $TMPC << EOF 4500#include <numa.h> 4501int main(void) { return numa_available(); } 4502EOF 4503 4504 if compile_prog "" "-lnuma" ; then 4505 numa=yes 4506 numa_libs="-lnuma" 4507 else 4508 if test "$numa" = "yes" ; then 4509 feature_not_found "numa" "install numactl devel" 4510 fi 4511 numa=no 4512 fi 4513fi 4514 4515if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4516 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4517 exit 1 4518fi 4519 4520# Even if malloc_trim() is available, these non-libc memory allocators 4521# do not support it. 4522if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4523 if test "$malloc_trim" = "yes" ; then 4524 echo "Disabling malloc_trim with non-libc memory allocator" 4525 fi 4526 malloc_trim="no" 4527fi 4528 4529####################################### 4530# malloc_trim 4531 4532if test "$malloc_trim" != "no" ; then 4533 cat > $TMPC << EOF 4534#include <malloc.h> 4535int main(void) { malloc_trim(0); return 0; } 4536EOF 4537 if compile_prog "" "" ; then 4538 malloc_trim="yes" 4539 else 4540 malloc_trim="no" 4541 fi 4542fi 4543 4544########################################## 4545# tcmalloc probe 4546 4547if test "$tcmalloc" = "yes" ; then 4548 cat > $TMPC << EOF 4549#include <stdlib.h> 4550int main(void) { 4551 void *tmp = malloc(1); 4552 if (tmp != NULL) { 4553 return 0; 4554 } 4555 return 1; 4556} 4557EOF 4558 4559 if compile_prog "" "-ltcmalloc" ; then 4560 LIBS="-ltcmalloc $LIBS" 4561 else 4562 feature_not_found "tcmalloc" "install gperftools devel" 4563 fi 4564fi 4565 4566########################################## 4567# jemalloc probe 4568 4569if test "$jemalloc" = "yes" ; then 4570 cat > $TMPC << EOF 4571#include <stdlib.h> 4572int main(void) { 4573 void *tmp = malloc(1); 4574 if (tmp != NULL) { 4575 return 0; 4576 } 4577 return 1; 4578} 4579EOF 4580 4581 if compile_prog "" "-ljemalloc" ; then 4582 LIBS="-ljemalloc $LIBS" 4583 else 4584 feature_not_found "jemalloc" "install jemalloc devel" 4585 fi 4586fi 4587 4588########################################## 4589# signalfd probe 4590signalfd="no" 4591cat > $TMPC << EOF 4592#include <unistd.h> 4593#include <sys/syscall.h> 4594#include <signal.h> 4595int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4596EOF 4597 4598if compile_prog "" "" ; then 4599 signalfd=yes 4600fi 4601 4602# check if optreset global is declared by <getopt.h> 4603optreset="no" 4604cat > $TMPC << EOF 4605#include <getopt.h> 4606int main(void) { return optreset; } 4607EOF 4608 4609if compile_prog "" "" ; then 4610 optreset=yes 4611fi 4612 4613# check if eventfd is supported 4614eventfd=no 4615cat > $TMPC << EOF 4616#include <sys/eventfd.h> 4617 4618int main(void) 4619{ 4620 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4621} 4622EOF 4623if compile_prog "" "" ; then 4624 eventfd=yes 4625fi 4626 4627# check if memfd is supported 4628memfd=no 4629cat > $TMPC << EOF 4630#include <sys/mman.h> 4631 4632int main(void) 4633{ 4634 return memfd_create("foo", MFD_ALLOW_SEALING); 4635} 4636EOF 4637if compile_prog "" "" ; then 4638 memfd=yes 4639fi 4640 4641# check for usbfs 4642have_usbfs=no 4643if test "$linux_user" = "yes"; then 4644 cat > $TMPC << EOF 4645#include <linux/usbdevice_fs.h> 4646 4647#ifndef USBDEVFS_GET_CAPABILITIES 4648#error "USBDEVFS_GET_CAPABILITIES undefined" 4649#endif 4650 4651#ifndef USBDEVFS_DISCONNECT_CLAIM 4652#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4653#endif 4654 4655int main(void) 4656{ 4657 return 0; 4658} 4659EOF 4660 if compile_prog "" ""; then 4661 have_usbfs=yes 4662 fi 4663fi 4664 4665# check for fallocate 4666fallocate=no 4667cat > $TMPC << EOF 4668#include <fcntl.h> 4669 4670int main(void) 4671{ 4672 fallocate(0, 0, 0, 0); 4673 return 0; 4674} 4675EOF 4676if compile_prog "" "" ; then 4677 fallocate=yes 4678fi 4679 4680# check for fallocate hole punching 4681fallocate_punch_hole=no 4682cat > $TMPC << EOF 4683#include <fcntl.h> 4684#include <linux/falloc.h> 4685 4686int main(void) 4687{ 4688 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4689 return 0; 4690} 4691EOF 4692if compile_prog "" "" ; then 4693 fallocate_punch_hole=yes 4694fi 4695 4696# check that fallocate supports range zeroing inside the file 4697fallocate_zero_range=no 4698cat > $TMPC << EOF 4699#include <fcntl.h> 4700#include <linux/falloc.h> 4701 4702int main(void) 4703{ 4704 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4705 return 0; 4706} 4707EOF 4708if compile_prog "" "" ; then 4709 fallocate_zero_range=yes 4710fi 4711 4712# check for posix_fallocate 4713posix_fallocate=no 4714cat > $TMPC << EOF 4715#include <fcntl.h> 4716 4717int main(void) 4718{ 4719 posix_fallocate(0, 0, 0); 4720 return 0; 4721} 4722EOF 4723if compile_prog "" "" ; then 4724 posix_fallocate=yes 4725fi 4726 4727# check for sync_file_range 4728sync_file_range=no 4729cat > $TMPC << EOF 4730#include <fcntl.h> 4731 4732int main(void) 4733{ 4734 sync_file_range(0, 0, 0, 0); 4735 return 0; 4736} 4737EOF 4738if compile_prog "" "" ; then 4739 sync_file_range=yes 4740fi 4741 4742# check for linux/fiemap.h and FS_IOC_FIEMAP 4743fiemap=no 4744cat > $TMPC << EOF 4745#include <sys/ioctl.h> 4746#include <linux/fs.h> 4747#include <linux/fiemap.h> 4748 4749int main(void) 4750{ 4751 ioctl(0, FS_IOC_FIEMAP, 0); 4752 return 0; 4753} 4754EOF 4755if compile_prog "" "" ; then 4756 fiemap=yes 4757fi 4758 4759# check for dup3 4760dup3=no 4761cat > $TMPC << EOF 4762#include <unistd.h> 4763 4764int main(void) 4765{ 4766 dup3(0, 0, 0); 4767 return 0; 4768} 4769EOF 4770if compile_prog "" "" ; then 4771 dup3=yes 4772fi 4773 4774# check for ppoll support 4775ppoll=no 4776cat > $TMPC << EOF 4777#include <poll.h> 4778 4779int main(void) 4780{ 4781 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4782 ppoll(&pfd, 1, 0, 0); 4783 return 0; 4784} 4785EOF 4786if compile_prog "" "" ; then 4787 ppoll=yes 4788fi 4789 4790# check for prctl(PR_SET_TIMERSLACK , ... ) support 4791prctl_pr_set_timerslack=no 4792cat > $TMPC << EOF 4793#include <sys/prctl.h> 4794 4795int main(void) 4796{ 4797 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4798 return 0; 4799} 4800EOF 4801if compile_prog "" "" ; then 4802 prctl_pr_set_timerslack=yes 4803fi 4804 4805# check for epoll support 4806epoll=no 4807cat > $TMPC << EOF 4808#include <sys/epoll.h> 4809 4810int main(void) 4811{ 4812 epoll_create(0); 4813 return 0; 4814} 4815EOF 4816if compile_prog "" "" ; then 4817 epoll=yes 4818fi 4819 4820# epoll_create1 is a later addition 4821# so we must check separately for its presence 4822epoll_create1=no 4823cat > $TMPC << EOF 4824#include <sys/epoll.h> 4825 4826int main(void) 4827{ 4828 /* Note that we use epoll_create1 as a value, not as 4829 * a function being called. This is necessary so that on 4830 * old SPARC glibc versions where the function was present in 4831 * the library but not declared in the header file we will 4832 * fail the configure check. (Otherwise we will get a compiler 4833 * warning but not an error, and will proceed to fail the 4834 * qemu compile where we compile with -Werror.) 4835 */ 4836 return (int)(uintptr_t)&epoll_create1; 4837} 4838EOF 4839if compile_prog "" "" ; then 4840 epoll_create1=yes 4841fi 4842 4843# check for sendfile support 4844sendfile=no 4845cat > $TMPC << EOF 4846#include <sys/sendfile.h> 4847 4848int main(void) 4849{ 4850 return sendfile(0, 0, 0, 0); 4851} 4852EOF 4853if compile_prog "" "" ; then 4854 sendfile=yes 4855fi 4856 4857# check for timerfd support (glibc 2.8 and newer) 4858timerfd=no 4859cat > $TMPC << EOF 4860#include <sys/timerfd.h> 4861 4862int main(void) 4863{ 4864 return(timerfd_create(CLOCK_REALTIME, 0)); 4865} 4866EOF 4867if compile_prog "" "" ; then 4868 timerfd=yes 4869fi 4870 4871# check for setns and unshare support 4872setns=no 4873cat > $TMPC << EOF 4874#include <sched.h> 4875 4876int main(void) 4877{ 4878 int ret; 4879 ret = setns(0, 0); 4880 ret = unshare(0); 4881 return ret; 4882} 4883EOF 4884if compile_prog "" "" ; then 4885 setns=yes 4886fi 4887 4888# clock_adjtime probe 4889clock_adjtime=no 4890cat > $TMPC <<EOF 4891#include <time.h> 4892 4893int main(void) 4894{ 4895 return clock_adjtime(0, 0); 4896} 4897EOF 4898clock_adjtime=no 4899if compile_prog "" "" ; then 4900 clock_adjtime=yes 4901fi 4902 4903# syncfs probe 4904syncfs=no 4905cat > $TMPC <<EOF 4906#include <unistd.h> 4907 4908int main(void) 4909{ 4910 return syncfs(0); 4911} 4912EOF 4913syncfs=no 4914if compile_prog "" "" ; then 4915 syncfs=yes 4916fi 4917 4918# check for kcov support (kernel must be 4.4+, compiled with certain options) 4919kcov=no 4920if check_include sys/kcov.h ; then 4921 kcov=yes 4922fi 4923 4924# check for btrfs filesystem support (kernel must be 3.9+) 4925btrfs=no 4926if check_include linux/btrfs.h ; then 4927 btrfs=yes 4928fi 4929 4930# If we're making warnings fatal, apply this to Sphinx runs as well 4931sphinx_werror="" 4932if test "$werror" = "yes"; then 4933 sphinx_werror="-W" 4934fi 4935 4936# Check we have a new enough version of sphinx-build 4937has_sphinx_build() { 4938 # This is a bit awkward but works: create a trivial document and 4939 # try to run it with our configuration file (which enforces a 4940 # version requirement). This will fail if either 4941 # sphinx-build doesn't exist at all or if it is too old. 4942 mkdir -p "$TMPDIR1/sphinx" 4943 touch "$TMPDIR1/sphinx/index.rst" 4944 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ 4945 -b html "$TMPDIR1/sphinx" \ 4946 "$TMPDIR1/sphinx/out" >> config.log 2>&1 4947} 4948 4949# Check if tools are available to build documentation. 4950if test "$docs" != "no" ; then 4951 if has_sphinx_build; then 4952 sphinx_ok=yes 4953 else 4954 sphinx_ok=no 4955 fi 4956 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then 4957 docs=yes 4958 else 4959 if test "$docs" = "yes" ; then 4960 if has $sphinx_build && test "$sphinx_ok" != "yes"; then 4961 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 4962 fi 4963 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx" 4964 fi 4965 docs=no 4966 fi 4967fi 4968 4969# Search for bswap_32 function 4970byteswap_h=no 4971cat > $TMPC << EOF 4972#include <byteswap.h> 4973int main(void) { return bswap_32(0); } 4974EOF 4975if compile_prog "" "" ; then 4976 byteswap_h=yes 4977fi 4978 4979# Search for bswap32 function 4980bswap_h=no 4981cat > $TMPC << EOF 4982#include <sys/endian.h> 4983#include <sys/types.h> 4984#include <machine/bswap.h> 4985int main(void) { return bswap32(0); } 4986EOF 4987if compile_prog "" "" ; then 4988 bswap_h=yes 4989fi 4990 4991########################################## 4992# Do we have libiscsi >= 1.9.0 4993if test "$libiscsi" != "no" ; then 4994 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4995 libiscsi="yes" 4996 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4997 libiscsi_libs=$($pkg_config --libs libiscsi) 4998 else 4999 if test "$libiscsi" = "yes" ; then 5000 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 5001 fi 5002 libiscsi="no" 5003 fi 5004fi 5005 5006########################################## 5007# Do we need libm 5008cat > $TMPC << EOF 5009#include <math.h> 5010int main(int argc, char **argv) { return isnan(sin((double)argc)); } 5011EOF 5012if compile_prog "" "" ; then 5013 : 5014elif compile_prog "" "-lm" ; then 5015 LIBS="-lm $LIBS" 5016else 5017 error_exit "libm check failed" 5018fi 5019 5020########################################## 5021# Do we need librt 5022# uClibc provides 2 versions of clock_gettime(), one with realtime 5023# support and one without. This means that the clock_gettime() don't 5024# need -lrt. We still need it for timer_create() so we check for this 5025# function in addition. 5026cat > $TMPC <<EOF 5027#include <signal.h> 5028#include <time.h> 5029int main(void) { 5030 timer_create(CLOCK_REALTIME, NULL, NULL); 5031 return clock_gettime(CLOCK_REALTIME, NULL); 5032} 5033EOF 5034 5035if compile_prog "" "" ; then 5036 : 5037# we need pthread for static linking. use previous pthread test result 5038elif compile_prog "" "$pthread_lib -lrt" ; then 5039 LIBS="$LIBS -lrt" 5040fi 5041 5042# Check whether we need to link libutil for openpty() 5043cat > $TMPC << EOF 5044extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 5045int main(void) { return openpty(0, 0, 0, 0, 0); } 5046EOF 5047 5048have_openpty="no" 5049if compile_prog "" "" ; then 5050 have_openpty="yes" 5051else 5052 if compile_prog "" "-lutil" ; then 5053 libs_tools="-lutil $libs_tools" 5054 have_openpty="yes" 5055 fi 5056fi 5057 5058########################################## 5059# spice probe 5060if test "$spice" != "no" ; then 5061 cat > $TMPC << EOF 5062#include <spice.h> 5063int main(void) { spice_server_new(); return 0; } 5064EOF 5065 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 5066 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 5067 if $pkg_config --atleast-version=0.12.5 spice-server && \ 5068 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 5069 compile_prog "$spice_cflags" "$spice_libs" ; then 5070 spice="yes" 5071 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 5072 else 5073 if test "$spice" = "yes" ; then 5074 feature_not_found "spice" \ 5075 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 5076 fi 5077 spice="no" 5078 fi 5079fi 5080 5081# check for smartcard support 5082if test "$smartcard" != "no"; then 5083 if $pkg_config --atleast-version=2.5.1 libcacard; then 5084 libcacard_cflags=$($pkg_config --cflags libcacard) 5085 libcacard_libs=$($pkg_config --libs libcacard) 5086 smartcard="yes" 5087 else 5088 if test "$smartcard" = "yes"; then 5089 feature_not_found "smartcard" "Install libcacard devel" 5090 fi 5091 smartcard="no" 5092 fi 5093fi 5094 5095# check for libusb 5096if test "$libusb" != "no" ; then 5097 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 5098 libusb="yes" 5099 libusb_cflags=$($pkg_config --cflags libusb-1.0) 5100 libusb_libs=$($pkg_config --libs libusb-1.0) 5101 else 5102 if test "$libusb" = "yes"; then 5103 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 5104 fi 5105 libusb="no" 5106 fi 5107fi 5108 5109# check for usbredirparser for usb network redirection support 5110if test "$usb_redir" != "no" ; then 5111 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 5112 usb_redir="yes" 5113 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 5114 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 5115 else 5116 if test "$usb_redir" = "yes"; then 5117 feature_not_found "usb-redir" "Install usbredir devel" 5118 fi 5119 usb_redir="no" 5120 fi 5121fi 5122 5123########################################## 5124# check if we have VSS SDK headers for win 5125 5126if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5127 test "$vss_win32_sdk" != "no" ; then 5128 case "$vss_win32_sdk" in 5129 "") vss_win32_include="-isystem $source_path" ;; 5130 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 5131 # handle path with spaces. So we symlink the headers into ".sdk/vss". 5132 vss_win32_include="-isystem $source_path/.sdk/vss" 5133 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 5134 ;; 5135 *) vss_win32_include="-isystem $vss_win32_sdk" 5136 esac 5137 cat > $TMPC << EOF 5138#define __MIDL_user_allocate_free_DEFINED__ 5139#include <inc/win2003/vss.h> 5140int main(void) { return VSS_CTX_BACKUP; } 5141EOF 5142 if compile_prog "$vss_win32_include" "" ; then 5143 guest_agent_with_vss="yes" 5144 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 5145 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 5146 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 5147 else 5148 if test "$vss_win32_sdk" != "" ; then 5149 echo "ERROR: Please download and install Microsoft VSS SDK:" 5150 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 5151 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 5152 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 5153 echo "ERROR: The headers are extracted in the directory \`inc'." 5154 feature_not_found "VSS support" 5155 fi 5156 guest_agent_with_vss="no" 5157 fi 5158fi 5159 5160########################################## 5161# lookup Windows platform SDK (if not specified) 5162# The SDK is needed only to build .tlb (type library) file of guest agent 5163# VSS provider from the source. It is usually unnecessary because the 5164# pre-compiled .tlb file is included. 5165 5166if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5167 test "$guest_agent_with_vss" = "yes" ; then 5168 if test -z "$win_sdk"; then 5169 programfiles="$PROGRAMFILES" 5170 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 5171 if test -n "$programfiles"; then 5172 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 5173 else 5174 feature_not_found "Windows SDK" 5175 fi 5176 elif test "$win_sdk" = "no"; then 5177 win_sdk="" 5178 fi 5179fi 5180 5181########################################## 5182# check if mingw environment provides a recent ntddscsi.h 5183if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 5184 cat > $TMPC << EOF 5185#include <windows.h> 5186#include <ntddscsi.h> 5187int main(void) { 5188#if !defined(IOCTL_SCSI_GET_ADDRESS) 5189#error Missing required ioctl definitions 5190#endif 5191 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 5192 return addr.Lun; 5193} 5194EOF 5195 if compile_prog "" "" ; then 5196 guest_agent_ntddscsi=yes 5197 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 5198 fi 5199fi 5200 5201########################################## 5202# virgl renderer probe 5203 5204if test "$virglrenderer" != "no" ; then 5205 cat > $TMPC << EOF 5206#include <virglrenderer.h> 5207int main(void) { virgl_renderer_poll(); return 0; } 5208EOF 5209 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 5210 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 5211 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 5212 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 5213 compile_prog "$virgl_cflags" "$virgl_libs" ; then 5214 virglrenderer="yes" 5215 else 5216 if test "$virglrenderer" = "yes" ; then 5217 feature_not_found "virglrenderer" 5218 fi 5219 virglrenderer="no" 5220 fi 5221fi 5222 5223########################################## 5224# capstone 5225 5226case "$capstone" in 5227 "" | yes) 5228 if $pkg_config capstone; then 5229 capstone=system 5230 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5231 capstone=git 5232 elif test -e "${source_path}/capstone/Makefile" ; then 5233 capstone=internal 5234 elif test -z "$capstone" ; then 5235 capstone=no 5236 else 5237 feature_not_found "capstone" "Install capstone devel or git submodule" 5238 fi 5239 ;; 5240 5241 system) 5242 if ! $pkg_config capstone; then 5243 feature_not_found "capstone" "Install capstone devel" 5244 fi 5245 ;; 5246esac 5247 5248case "$capstone" in 5249 git | internal) 5250 if test "$capstone" = git; then 5251 git_submodules="${git_submodules} capstone" 5252 fi 5253 mkdir -p capstone 5254 QEMU_CFLAGS="$QEMU_CFLAGS -I${source_path}/capstone/include" 5255 if test "$mingw32" = "yes"; then 5256 LIBCAPSTONE=capstone.lib 5257 else 5258 LIBCAPSTONE=libcapstone.a 5259 fi 5260 capstone_libs="-L$PWD/capstone -lcapstone" 5261 capstone_cflags="-I${source_path}/capstone/include" 5262 ;; 5263 5264 system) 5265 capstone_libs="$($pkg_config --libs capstone)" 5266 capstone_cflags="$($pkg_config --cflags capstone)" 5267 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 5268 ;; 5269 5270 no) 5271 ;; 5272 *) 5273 error_exit "Unknown state for capstone: $capstone" 5274 ;; 5275esac 5276 5277########################################## 5278# check if we have fdatasync 5279 5280fdatasync=no 5281cat > $TMPC << EOF 5282#include <unistd.h> 5283int main(void) { 5284#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 5285return fdatasync(0); 5286#else 5287#error Not supported 5288#endif 5289} 5290EOF 5291if compile_prog "" "" ; then 5292 fdatasync=yes 5293fi 5294 5295########################################## 5296# check if we have madvise 5297 5298madvise=no 5299cat > $TMPC << EOF 5300#include <sys/types.h> 5301#include <sys/mman.h> 5302#include <stddef.h> 5303int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 5304EOF 5305if compile_prog "" "" ; then 5306 madvise=yes 5307fi 5308 5309########################################## 5310# check if we have posix_madvise 5311 5312posix_madvise=no 5313cat > $TMPC << EOF 5314#include <sys/mman.h> 5315#include <stddef.h> 5316int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 5317EOF 5318if compile_prog "" "" ; then 5319 posix_madvise=yes 5320fi 5321 5322########################################## 5323# check if we have posix_memalign() 5324 5325posix_memalign=no 5326cat > $TMPC << EOF 5327#include <stdlib.h> 5328int main(void) { 5329 void *p; 5330 return posix_memalign(&p, 8, 8); 5331} 5332EOF 5333if compile_prog "" "" ; then 5334 posix_memalign=yes 5335fi 5336 5337########################################## 5338# check if we have posix_syslog 5339 5340posix_syslog=no 5341cat > $TMPC << EOF 5342#include <syslog.h> 5343int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 5344EOF 5345if compile_prog "" "" ; then 5346 posix_syslog=yes 5347fi 5348 5349########################################## 5350# check if we have sem_timedwait 5351 5352sem_timedwait=no 5353cat > $TMPC << EOF 5354#include <semaphore.h> 5355int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 5356EOF 5357if compile_prog "" "" ; then 5358 sem_timedwait=yes 5359fi 5360 5361########################################## 5362# check if we have strchrnul 5363 5364strchrnul=no 5365cat > $TMPC << EOF 5366#include <string.h> 5367int main(void); 5368// Use a haystack that the compiler shouldn't be able to constant fold 5369char *haystack = (char*)&main; 5370int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 5371EOF 5372if compile_prog "" "" ; then 5373 strchrnul=yes 5374fi 5375 5376######################################### 5377# check if we have st_atim 5378 5379st_atim=no 5380cat > $TMPC << EOF 5381#include <sys/stat.h> 5382#include <stddef.h> 5383int main(void) { return offsetof(struct stat, st_atim); } 5384EOF 5385if compile_prog "" "" ; then 5386 st_atim=yes 5387fi 5388 5389########################################## 5390# check if trace backend exists 5391 5392$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 5393if test "$?" -ne 0 ; then 5394 error_exit "invalid trace backends" \ 5395 "Please choose supported trace backends." 5396fi 5397 5398########################################## 5399# For 'ust' backend, test if ust headers are present 5400if have_backend "ust"; then 5401 cat > $TMPC << EOF 5402#include <lttng/tracepoint.h> 5403int main(void) { return 0; } 5404EOF 5405 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5406 if $pkg_config lttng-ust --exists; then 5407 lttng_ust_libs=$($pkg_config --libs lttng-ust) 5408 else 5409 lttng_ust_libs="-llttng-ust -ldl" 5410 fi 5411 if $pkg_config liburcu-bp --exists; then 5412 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5413 else 5414 urcu_bp_libs="-lurcu-bp" 5415 fi 5416 5417 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 5418 else 5419 error_exit "Trace backend 'ust' missing lttng-ust header files" 5420 fi 5421fi 5422 5423########################################## 5424# For 'dtrace' backend, test if 'dtrace' command is present 5425if have_backend "dtrace"; then 5426 if ! has 'dtrace' ; then 5427 error_exit "dtrace command is not found in PATH $PATH" 5428 fi 5429 trace_backend_stap="no" 5430 if has 'stap' ; then 5431 trace_backend_stap="yes" 5432 fi 5433fi 5434 5435########################################## 5436# check and set a backend for coroutine 5437 5438# We prefer ucontext, but it's not always possible. The fallback 5439# is sigcontext. On Windows the only valid backend is the Windows 5440# specific one. 5441 5442ucontext_works=no 5443if test "$darwin" != "yes"; then 5444 cat > $TMPC << EOF 5445#include <ucontext.h> 5446#ifdef __stub_makecontext 5447#error Ignoring glibc stub makecontext which will always fail 5448#endif 5449int main(void) { makecontext(0, 0, 0); return 0; } 5450EOF 5451 if compile_prog "" "" ; then 5452 ucontext_works=yes 5453 fi 5454fi 5455 5456if test "$coroutine" = ""; then 5457 if test "$mingw32" = "yes"; then 5458 coroutine=win32 5459 elif test "$ucontext_works" = "yes"; then 5460 coroutine=ucontext 5461 else 5462 coroutine=sigaltstack 5463 fi 5464else 5465 case $coroutine in 5466 windows) 5467 if test "$mingw32" != "yes"; then 5468 error_exit "'windows' coroutine backend only valid for Windows" 5469 fi 5470 # Unfortunately the user visible backend name doesn't match the 5471 # coroutine-*.c filename for this case, so we have to adjust it here. 5472 coroutine=win32 5473 ;; 5474 ucontext) 5475 if test "$ucontext_works" != "yes"; then 5476 feature_not_found "ucontext" 5477 fi 5478 ;; 5479 sigaltstack) 5480 if test "$mingw32" = "yes"; then 5481 error_exit "only the 'windows' coroutine backend is valid for Windows" 5482 fi 5483 ;; 5484 *) 5485 error_exit "unknown coroutine backend $coroutine" 5486 ;; 5487 esac 5488fi 5489 5490if test "$coroutine_pool" = ""; then 5491 coroutine_pool=yes 5492fi 5493 5494if test "$debug_stack_usage" = "yes"; then 5495 if test "$coroutine_pool" = "yes"; then 5496 echo "WARN: disabling coroutine pool for stack usage debugging" 5497 coroutine_pool=no 5498 fi 5499fi 5500 5501################################################## 5502# SafeStack 5503 5504 5505if test "$safe_stack" = "yes"; then 5506cat > $TMPC << EOF 5507int main(int argc, char *argv[]) 5508{ 5509#if ! __has_feature(safe_stack) 5510#error SafeStack Disabled 5511#endif 5512 return 0; 5513} 5514EOF 5515 flag="-fsanitize=safe-stack" 5516 # Check that safe-stack is supported and enabled. 5517 if compile_prog "-Werror $flag" "$flag"; then 5518 # Flag needed both at compilation and at linking 5519 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5520 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5521 else 5522 error_exit "SafeStack not supported by your compiler" 5523 fi 5524 if test "$coroutine" != "ucontext"; then 5525 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5526 fi 5527else 5528cat > $TMPC << EOF 5529int main(int argc, char *argv[]) 5530{ 5531#if defined(__has_feature) 5532#if __has_feature(safe_stack) 5533#error SafeStack Enabled 5534#endif 5535#endif 5536 return 0; 5537} 5538EOF 5539if test "$safe_stack" = "no"; then 5540 # Make sure that safe-stack is disabled 5541 if ! compile_prog "-Werror" ""; then 5542 # SafeStack was already enabled, try to explicitly remove the feature 5543 flag="-fno-sanitize=safe-stack" 5544 if ! compile_prog "-Werror $flag" "$flag"; then 5545 error_exit "Configure cannot disable SafeStack" 5546 fi 5547 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5548 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5549 fi 5550else # "$safe_stack" = "" 5551 # Set safe_stack to yes or no based on pre-existing flags 5552 if compile_prog "-Werror" ""; then 5553 safe_stack="no" 5554 else 5555 safe_stack="yes" 5556 if test "$coroutine" != "ucontext"; then 5557 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5558 fi 5559 fi 5560fi 5561fi 5562 5563########################################## 5564# check if we have open_by_handle_at 5565 5566open_by_handle_at=no 5567cat > $TMPC << EOF 5568#include <fcntl.h> 5569#if !defined(AT_EMPTY_PATH) 5570# error missing definition 5571#else 5572int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5573#endif 5574EOF 5575if compile_prog "" "" ; then 5576 open_by_handle_at=yes 5577fi 5578 5579######################################## 5580# check if we have linux/magic.h 5581 5582linux_magic_h=no 5583cat > $TMPC << EOF 5584#include <linux/magic.h> 5585int main(void) { 5586 return 0; 5587} 5588EOF 5589if compile_prog "" "" ; then 5590 linux_magic_h=yes 5591fi 5592 5593######################################## 5594# check if we have valgrind/valgrind.h 5595 5596valgrind_h=no 5597cat > $TMPC << EOF 5598#include <valgrind/valgrind.h> 5599int main(void) { 5600 return 0; 5601} 5602EOF 5603if compile_prog "" "" ; then 5604 valgrind_h=yes 5605fi 5606 5607######################################## 5608# check if environ is declared 5609 5610has_environ=no 5611cat > $TMPC << EOF 5612#include <unistd.h> 5613int main(void) { 5614 environ = 0; 5615 return 0; 5616} 5617EOF 5618if compile_prog "" "" ; then 5619 has_environ=yes 5620fi 5621 5622######################################## 5623# check if cpuid.h is usable. 5624 5625cat > $TMPC << EOF 5626#include <cpuid.h> 5627int main(void) { 5628 unsigned a, b, c, d; 5629 int max = __get_cpuid_max(0, 0); 5630 5631 if (max >= 1) { 5632 __cpuid(1, a, b, c, d); 5633 } 5634 5635 if (max >= 7) { 5636 __cpuid_count(7, 0, a, b, c, d); 5637 } 5638 5639 return 0; 5640} 5641EOF 5642if compile_prog "" "" ; then 5643 cpuid_h=yes 5644fi 5645 5646########################################## 5647# avx2 optimization requirement check 5648# 5649# There is no point enabling this if cpuid.h is not usable, 5650# since we won't be able to select the new routines. 5651 5652if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5653 cat > $TMPC << EOF 5654#pragma GCC push_options 5655#pragma GCC target("avx2") 5656#include <cpuid.h> 5657#include <immintrin.h> 5658static int bar(void *a) { 5659 __m256i x = *(__m256i *)a; 5660 return _mm256_testz_si256(x, x); 5661} 5662int main(int argc, char *argv[]) { return bar(argv[0]); } 5663EOF 5664 if compile_object "" ; then 5665 avx2_opt="yes" 5666 else 5667 avx2_opt="no" 5668 fi 5669fi 5670 5671########################################## 5672# avx512f optimization requirement check 5673# 5674# There is no point enabling this if cpuid.h is not usable, 5675# since we won't be able to select the new routines. 5676# by default, it is turned off. 5677# if user explicitly want to enable it, check environment 5678 5679if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 5680 cat > $TMPC << EOF 5681#pragma GCC push_options 5682#pragma GCC target("avx512f") 5683#include <cpuid.h> 5684#include <immintrin.h> 5685static int bar(void *a) { 5686 __m512i x = *(__m512i *)a; 5687 return _mm512_test_epi64_mask(x, x); 5688} 5689int main(int argc, char *argv[]) 5690{ 5691 return bar(argv[0]); 5692} 5693EOF 5694 if ! compile_object "" ; then 5695 avx512f_opt="no" 5696 fi 5697else 5698 avx512f_opt="no" 5699fi 5700 5701######################################## 5702# check if __[u]int128_t is usable. 5703 5704int128=no 5705cat > $TMPC << EOF 5706__int128_t a; 5707__uint128_t b; 5708int main (void) { 5709 a = a + b; 5710 b = a * b; 5711 a = a * a; 5712 return 0; 5713} 5714EOF 5715if compile_prog "" "" ; then 5716 int128=yes 5717fi 5718 5719######################################### 5720# See if 128-bit atomic operations are supported. 5721 5722atomic128=no 5723if test "$int128" = "yes"; then 5724 cat > $TMPC << EOF 5725int main(void) 5726{ 5727 unsigned __int128 x = 0, y = 0; 5728 y = __atomic_load_16(&x, 0); 5729 __atomic_store_16(&x, y, 0); 5730 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5731 return 0; 5732} 5733EOF 5734 if compile_prog "" "" ; then 5735 atomic128=yes 5736 fi 5737fi 5738 5739cmpxchg128=no 5740if test "$int128" = yes && test "$atomic128" = no; then 5741 cat > $TMPC << EOF 5742int main(void) 5743{ 5744 unsigned __int128 x = 0, y = 0; 5745 __sync_val_compare_and_swap_16(&x, y, x); 5746 return 0; 5747} 5748EOF 5749 if compile_prog "" "" ; then 5750 cmpxchg128=yes 5751 fi 5752fi 5753 5754######################################### 5755# See if 64-bit atomic operations are supported. 5756# Note that without __atomic builtins, we can only 5757# assume atomic loads/stores max at pointer size. 5758 5759cat > $TMPC << EOF 5760#include <stdint.h> 5761int main(void) 5762{ 5763 uint64_t x = 0, y = 0; 5764#ifdef __ATOMIC_RELAXED 5765 y = __atomic_load_n(&x, __ATOMIC_RELAXED); 5766 __atomic_store_n(&x, y, __ATOMIC_RELAXED); 5767 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED); 5768 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED); 5769 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED); 5770#else 5771 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5772 __sync_lock_test_and_set(&x, y); 5773 __sync_val_compare_and_swap(&x, y, 0); 5774 __sync_fetch_and_add(&x, y); 5775#endif 5776 return 0; 5777} 5778EOF 5779if compile_prog "" "" ; then 5780 atomic64=yes 5781fi 5782 5783######################################### 5784# See if --dynamic-list is supported by the linker 5785ld_dynamic_list="no" 5786if test "$static" = "no" ; then 5787 cat > $TMPTXT <<EOF 5788{ 5789 foo; 5790}; 5791EOF 5792 5793 cat > $TMPC <<EOF 5794#include <stdio.h> 5795void foo(void); 5796 5797void foo(void) 5798{ 5799 printf("foo\n"); 5800} 5801 5802int main(void) 5803{ 5804 foo(); 5805 return 0; 5806} 5807EOF 5808 5809 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 5810 ld_dynamic_list="yes" 5811 fi 5812fi 5813 5814######################################### 5815# See if -exported_symbols_list is supported by the linker 5816 5817ld_exported_symbols_list="no" 5818if test "$static" = "no" ; then 5819 cat > $TMPTXT <<EOF 5820 _foo 5821EOF 5822 5823 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 5824 ld_exported_symbols_list="yes" 5825 fi 5826fi 5827 5828if test "$plugins" = "yes" && 5829 test "$ld_dynamic_list" = "no" && 5830 test "$ld_exported_symbols_list" = "no" ; then 5831 error_exit \ 5832 "Plugin support requires dynamic linking and specifying a set of symbols " \ 5833 "that are exported to plugins. Unfortunately your linker doesn't " \ 5834 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 5835 "for this purpose. You can't build with --static." 5836fi 5837 5838######################################## 5839# See if __attribute__((alias)) is supported. 5840# This false for Xcode 9, but has been remedied for Xcode 10. 5841# Unfortunately, travis uses Xcode 9 by default. 5842 5843attralias=no 5844cat > $TMPC << EOF 5845int x = 1; 5846extern const int y __attribute__((alias("x"))); 5847int main(void) { return 0; } 5848EOF 5849if compile_prog "" "" ; then 5850 attralias=yes 5851fi 5852 5853######################################## 5854# check if getauxval is available. 5855 5856getauxval=no 5857cat > $TMPC << EOF 5858#include <sys/auxv.h> 5859int main(void) { 5860 return getauxval(AT_HWCAP) == 0; 5861} 5862EOF 5863if compile_prog "" "" ; then 5864 getauxval=yes 5865fi 5866 5867######################################## 5868# check if ccache is interfering with 5869# semantic analysis of macros 5870 5871unset CCACHE_CPP2 5872ccache_cpp2=no 5873cat > $TMPC << EOF 5874static const int Z = 1; 5875#define fn() ({ Z; }) 5876#define TAUT(X) ((X) == Z) 5877#define PAREN(X, Y) (X == Y) 5878#define ID(X) (X) 5879int main(int argc, char *argv[]) 5880{ 5881 int x = 0, y = 0; 5882 x = ID(x); 5883 x = fn(); 5884 fn(); 5885 if (PAREN(x, y)) return 0; 5886 if (TAUT(Z)) return 0; 5887 return 0; 5888} 5889EOF 5890 5891if ! compile_object "-Werror"; then 5892 ccache_cpp2=yes 5893fi 5894 5895################################################# 5896# clang does not support glibc + FORTIFY_SOURCE. 5897 5898if test "$fortify_source" != "no"; then 5899 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5900 fortify_source="no"; 5901 elif test -n "$cxx" && has $cxx && 5902 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5903 fortify_source="no"; 5904 else 5905 fortify_source="yes" 5906 fi 5907fi 5908 5909############################################### 5910# Check if copy_file_range is provided by glibc 5911have_copy_file_range=no 5912cat > $TMPC << EOF 5913#include <unistd.h> 5914int main(void) { 5915 copy_file_range(0, NULL, 0, NULL, 0, 0); 5916 return 0; 5917} 5918EOF 5919if compile_prog "" "" ; then 5920 have_copy_file_range=yes 5921fi 5922 5923########################################## 5924# check if struct fsxattr is available via linux/fs.h 5925 5926have_fsxattr=no 5927cat > $TMPC << EOF 5928#include <linux/fs.h> 5929struct fsxattr foo; 5930int main(void) { 5931 return 0; 5932} 5933EOF 5934if compile_prog "" "" ; then 5935 have_fsxattr=yes 5936fi 5937 5938########################################## 5939# check for usable membarrier system call 5940if test "$membarrier" = "yes"; then 5941 have_membarrier=no 5942 if test "$mingw32" = "yes" ; then 5943 have_membarrier=yes 5944 elif test "$linux" = "yes" ; then 5945 cat > $TMPC << EOF 5946 #include <linux/membarrier.h> 5947 #include <sys/syscall.h> 5948 #include <unistd.h> 5949 #include <stdlib.h> 5950 int main(void) { 5951 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5952 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5953 exit(0); 5954 } 5955EOF 5956 if compile_prog "" "" ; then 5957 have_membarrier=yes 5958 fi 5959 fi 5960 if test "$have_membarrier" = "no"; then 5961 feature_not_found "membarrier" "membarrier system call not available" 5962 fi 5963else 5964 # Do not enable it by default even for Mingw32, because it doesn't 5965 # work on Wine. 5966 membarrier=no 5967fi 5968 5969########################################## 5970# check if rtnetlink.h exists and is useful 5971have_rtnetlink=no 5972cat > $TMPC << EOF 5973#include <linux/rtnetlink.h> 5974int main(void) { 5975 return IFLA_PROTO_DOWN; 5976} 5977EOF 5978if compile_prog "" "" ; then 5979 have_rtnetlink=yes 5980fi 5981 5982########################################## 5983# check for usable AF_VSOCK environment 5984have_af_vsock=no 5985cat > $TMPC << EOF 5986#include <errno.h> 5987#include <sys/types.h> 5988#include <sys/socket.h> 5989#if !defined(AF_VSOCK) 5990# error missing AF_VSOCK flag 5991#endif 5992#include <linux/vm_sockets.h> 5993int main(void) { 5994 int sock, ret; 5995 struct sockaddr_vm svm; 5996 socklen_t len = sizeof(svm); 5997 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5998 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5999 if ((ret == -1) && (errno == ENOTCONN)) { 6000 return 0; 6001 } 6002 return -1; 6003} 6004EOF 6005if compile_prog "" "" ; then 6006 have_af_vsock=yes 6007fi 6008 6009########################################## 6010# check for usable AF_ALG environment 6011have_afalg=no 6012cat > $TMPC << EOF 6013#include <errno.h> 6014#include <sys/types.h> 6015#include <sys/socket.h> 6016#include <linux/if_alg.h> 6017int main(void) { 6018 int sock; 6019 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 6020 return sock; 6021} 6022EOF 6023if compile_prog "" "" ; then 6024 have_afalg=yes 6025fi 6026if test "$crypto_afalg" = "yes" 6027then 6028 if test "$have_afalg" != "yes" 6029 then 6030 error_exit "AF_ALG requested but could not be detected" 6031 fi 6032fi 6033 6034 6035################################################# 6036# Check to see if we have the Hypervisor framework 6037if [ "$darwin" = "yes" ] ; then 6038 cat > $TMPC << EOF 6039#include <Hypervisor/hv.h> 6040int main() { return 0;} 6041EOF 6042 if ! compile_object ""; then 6043 hvf='no' 6044 else 6045 hvf='yes' 6046 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS" 6047 fi 6048fi 6049 6050########################################## 6051# check for sysmacros.h 6052 6053have_sysmacros=no 6054cat > $TMPC << EOF 6055#include <sys/sysmacros.h> 6056int main(void) { 6057 return makedev(0, 0); 6058} 6059EOF 6060if compile_prog "" "" ; then 6061 have_sysmacros=yes 6062fi 6063 6064########################################## 6065# check for _Static_assert() 6066 6067have_static_assert=no 6068cat > $TMPC << EOF 6069_Static_assert(1, "success"); 6070int main(void) { 6071 return 0; 6072} 6073EOF 6074if compile_prog "" "" ; then 6075 have_static_assert=yes 6076fi 6077 6078########################################## 6079# check for utmpx.h, it is missing e.g. on OpenBSD 6080 6081have_utmpx=no 6082cat > $TMPC << EOF 6083#include <utmpx.h> 6084struct utmpx user_info; 6085int main(void) { 6086 return 0; 6087} 6088EOF 6089if compile_prog "" "" ; then 6090 have_utmpx=yes 6091fi 6092 6093########################################## 6094# check for getrandom() 6095 6096have_getrandom=no 6097cat > $TMPC << EOF 6098#include <sys/random.h> 6099int main(void) { 6100 return getrandom(0, 0, GRND_NONBLOCK); 6101} 6102EOF 6103if compile_prog "" "" ; then 6104 have_getrandom=yes 6105fi 6106 6107########################################## 6108# checks for sanitizers 6109 6110have_asan=no 6111have_ubsan=no 6112have_asan_iface_h=no 6113have_asan_iface_fiber=no 6114 6115if test "$sanitizers" = "yes" ; then 6116 write_c_skeleton 6117 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 6118 have_asan=yes 6119 fi 6120 6121 # we could use a simple skeleton for flags checks, but this also 6122 # detect the static linking issue of ubsan, see also: 6123 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 6124 cat > $TMPC << EOF 6125#include <stdlib.h> 6126int main(void) { 6127 void *tmp = malloc(10); 6128 if (tmp != NULL) { 6129 return *(int *)(tmp + 2); 6130 } 6131 return 1; 6132} 6133EOF 6134 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 6135 have_ubsan=yes 6136 fi 6137 6138 if check_include "sanitizer/asan_interface.h" ; then 6139 have_asan_iface_h=yes 6140 fi 6141 6142 cat > $TMPC << EOF 6143#include <sanitizer/asan_interface.h> 6144int main(void) { 6145 __sanitizer_start_switch_fiber(0, 0, 0); 6146 return 0; 6147} 6148EOF 6149 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 6150 have_asan_iface_fiber=yes 6151 fi 6152fi 6153 6154########################################## 6155# checks for fuzzer 6156if test "$fuzzing" = "yes" ; then 6157 write_c_fuzzer_skeleton 6158 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then 6159 have_fuzzer=yes 6160 else 6161 error_exit "Your compiler doesn't support -fsanitize=fuzzer" 6162 exit 1 6163 fi 6164fi 6165 6166# Thread sanitizer is, for now, much noisier than the other sanitizers; 6167# keep it separate until that is not the case. 6168if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 6169 error_exit "TSAN is not supported with other sanitiziers." 6170fi 6171have_tsan=no 6172have_tsan_iface_fiber=no 6173if test "$tsan" = "yes" ; then 6174 write_c_skeleton 6175 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6176 have_tsan=yes 6177 fi 6178 cat > $TMPC << EOF 6179#include <sanitizer/tsan_interface.h> 6180int main(void) { 6181 __tsan_create_fiber(0); 6182 return 0; 6183} 6184EOF 6185 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6186 have_tsan_iface_fiber=yes 6187 fi 6188fi 6189 6190########################################## 6191# check for libpmem 6192 6193if test "$libpmem" != "no"; then 6194 if $pkg_config --exists "libpmem"; then 6195 libpmem="yes" 6196 libpmem_libs=$($pkg_config --libs libpmem) 6197 libpmem_cflags=$($pkg_config --cflags libpmem) 6198 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 6199 else 6200 if test "$libpmem" = "yes" ; then 6201 feature_not_found "libpmem" "Install nvml or pmdk" 6202 fi 6203 libpmem="no" 6204 fi 6205fi 6206 6207########################################## 6208# check for libdaxctl 6209 6210if test "$libdaxctl" != "no"; then 6211 if $pkg_config --atleast-version=57 "libdaxctl"; then 6212 libdaxctl="yes" 6213 libdaxctl_libs=$($pkg_config --libs libdaxctl) 6214 libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 6215 QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags" 6216 else 6217 if test "$libdaxctl" = "yes" ; then 6218 feature_not_found "libdaxctl" "Install libdaxctl" 6219 fi 6220 libdaxctl="no" 6221 fi 6222fi 6223 6224########################################## 6225# check for slirp 6226 6227# slirp is only required when building softmmu targets 6228if test -z "$slirp" -a "$softmmu" != "yes" ; then 6229 slirp="no" 6230fi 6231 6232case "$slirp" in 6233 "" | yes) 6234 if $pkg_config slirp; then 6235 slirp=system 6236 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 6237 slirp=git 6238 elif test -e "${source_path}/slirp/Makefile" ; then 6239 slirp=internal 6240 elif test -z "$slirp" ; then 6241 slirp=no 6242 else 6243 feature_not_found "slirp" "Install slirp devel or git submodule" 6244 fi 6245 ;; 6246 6247 system) 6248 if ! $pkg_config slirp; then 6249 feature_not_found "slirp" "Install slirp devel" 6250 fi 6251 ;; 6252esac 6253 6254case "$slirp" in 6255 git | internal) 6256 if test "$slirp" = git; then 6257 git_submodules="${git_submodules} slirp" 6258 fi 6259 mkdir -p slirp 6260 slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src" 6261 slirp_libs="-L$PWD/slirp -lslirp" 6262 if test "$mingw32" = "yes" ; then 6263 slirp_libs="$slirp_libs -lws2_32 -liphlpapi" 6264 fi 6265 ;; 6266 6267 system) 6268 slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 6269 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 6270 slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 6271 ;; 6272 6273 no) 6274 ;; 6275 *) 6276 error_exit "Unknown state for slirp: $slirp" 6277 ;; 6278esac 6279 6280########################################## 6281# check for usable __NR_keyctl syscall 6282 6283if test "$linux" = "yes" ; then 6284 6285 have_keyring=no 6286 cat > $TMPC << EOF 6287#include <errno.h> 6288#include <asm/unistd.h> 6289#include <linux/keyctl.h> 6290#include <unistd.h> 6291int main(void) { 6292 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 6293} 6294EOF 6295 if compile_prog "" "" ; then 6296 have_keyring=yes 6297 fi 6298fi 6299if test "$secret_keyring" != "no" 6300then 6301 if test "$have_keyring" = "yes" 6302 then 6303 secret_keyring=yes 6304 else 6305 if test "$secret_keyring" = "yes" 6306 then 6307 error_exit "syscall __NR_keyctl requested, \ 6308but not implemented on your system" 6309 else 6310 secret_keyring=no 6311 fi 6312 fi 6313fi 6314 6315########################################## 6316# check for usable keyutils.h 6317 6318if test "$linux" = "yes" ; then 6319 6320 have_keyutils=no 6321 cat > $TMPC << EOF 6322#include <errno.h> 6323#include <asm/unistd.h> 6324#include <unistd.h> 6325#include <sys/types.h> 6326#include <keyutils.h> 6327int main(void) { 6328 return request_key("user", NULL, NULL, 0); 6329} 6330EOF 6331 if compile_prog "" "-lkeyutils"; then 6332 have_keyutils=yes 6333 fi 6334fi 6335 6336 6337########################################## 6338# End of CC checks 6339# After here, no more $cc or $ld runs 6340 6341write_c_skeleton 6342 6343if test "$gcov" = "yes" ; then 6344 : 6345elif test "$fortify_source" = "yes" ; then 6346 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 6347 debug=no 6348fi 6349if test "$debug_info" = "yes"; then 6350 CFLAGS="-g $CFLAGS" 6351 LDFLAGS="-g $LDFLAGS" 6352fi 6353if test "$debug" = "no"; then 6354 CFLAGS="-O2 $CFLAGS" 6355fi 6356 6357case "$ARCH" in 6358alpha) 6359 # Ensure there's only a single GP 6360 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 6361;; 6362esac 6363 6364if test "$gprof" = "yes" ; then 6365 QEMU_CFLAGS="-p $QEMU_CFLAGS" 6366 QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 6367fi 6368 6369if test "$have_asan" = "yes"; then 6370 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 6371 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 6372 if test "$have_asan_iface_h" = "no" ; then 6373 echo "ASAN build enabled, but ASAN header missing." \ 6374 "Without code annotation, the report may be inferior." 6375 elif test "$have_asan_iface_fiber" = "no" ; then 6376 echo "ASAN build enabled, but ASAN header is too old." \ 6377 "Without code annotation, the report may be inferior." 6378 fi 6379fi 6380if test "$have_tsan" = "yes" ; then 6381 if test "$have_tsan_iface_fiber" = "yes" ; then 6382 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 6383 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 6384 else 6385 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 6386 fi 6387elif test "$tsan" = "yes" ; then 6388 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 6389fi 6390if test "$have_ubsan" = "yes"; then 6391 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 6392 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 6393fi 6394 6395########################################## 6396# Do we have libnfs 6397if test "$libnfs" != "no" ; then 6398 if $pkg_config --atleast-version=1.9.3 libnfs; then 6399 libnfs="yes" 6400 libnfs_libs=$($pkg_config --libs libnfs) 6401 else 6402 if test "$libnfs" = "yes" ; then 6403 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 6404 fi 6405 libnfs="no" 6406 fi 6407fi 6408 6409########################################## 6410# Do we have libudev 6411if test "$libudev" != "no" ; then 6412 if $pkg_config libudev && test "$static" != "yes"; then 6413 libudev="yes" 6414 libudev_libs=$($pkg_config --libs libudev) 6415 else 6416 libudev="no" 6417 fi 6418fi 6419 6420# Now we've finished running tests it's OK to add -Werror to the compiler flags 6421if test "$werror" = "yes"; then 6422 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 6423fi 6424 6425# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 6426if test "$solaris" = "no" && test "$tsan" = "no"; then 6427 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 6428 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 6429 fi 6430fi 6431 6432# test if pod2man has --utf8 option 6433if pod2man --help | grep -q utf8; then 6434 POD2MAN="pod2man --utf8" 6435else 6436 POD2MAN="pod2man" 6437fi 6438 6439# Use ASLR, no-SEH and DEP if available 6440if test "$mingw32" = "yes" ; then 6441 for flag in --dynamicbase --no-seh --nxcompat; do 6442 if ld_has $flag ; then 6443 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 6444 fi 6445 done 6446fi 6447 6448# Disable OpenBSD W^X if available 6449if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then 6450 cat > $TMPC <<EOF 6451 int main(void) { return 0; } 6452EOF 6453 wx_ldflags="-Wl,-z,wxneeded" 6454 if compile_prog "" "$wx_ldflags"; then 6455 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" 6456 fi 6457fi 6458 6459qemu_confdir="$sysconfdir/$qemu_suffix" 6460qemu_moddir="$libdir/$qemu_suffix" 6461qemu_datadir="$datadir/$qemu_suffix" 6462qemu_docdir="$docdir/$qemu_suffix" 6463qemu_localedir="$datadir/locale" 6464qemu_icondir="$datadir/icons" 6465qemu_desktopdir="$datadir/applications" 6466 6467# We can only support ivshmem if we have eventfd 6468if [ "$eventfd" = "yes" ]; then 6469 ivshmem=yes 6470fi 6471 6472if test "$softmmu" = yes ; then 6473 if test "$linux" = yes; then 6474 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 6475 virtfs=yes 6476 else 6477 if test "$virtfs" = yes; then 6478 error_exit "VirtFS requires libcap-ng devel and libattr devel" 6479 fi 6480 virtfs=no 6481 fi 6482 if test "$mpath" != no && test "$mpathpersist" = yes ; then 6483 mpath=yes 6484 else 6485 if test "$mpath" = yes; then 6486 error_exit "Multipath requires libmpathpersist devel" 6487 fi 6488 mpath=no 6489 fi 6490 else 6491 if test "$virtfs" = yes; then 6492 error_exit "VirtFS is supported only on Linux" 6493 fi 6494 virtfs=no 6495 if test "$mpath" = yes; then 6496 error_exit "Multipath is supported only on Linux" 6497 fi 6498 mpath=no 6499 fi 6500fi 6501 6502# Probe for guest agent support/options 6503 6504if [ "$guest_agent" != "no" ]; then 6505 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6506 guest_agent=no 6507 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6508 guest_agent=yes 6509 elif [ "$guest_agent" != yes ]; then 6510 guest_agent=no 6511 else 6512 error_exit "Guest agent is not supported on this platform" 6513 fi 6514fi 6515 6516# Guest agent Window MSI package 6517 6518if test "$guest_agent" != yes; then 6519 if test "$guest_agent_msi" = yes; then 6520 error_exit "MSI guest agent package requires guest agent enabled" 6521 fi 6522 guest_agent_msi=no 6523elif test "$mingw32" != "yes"; then 6524 if test "$guest_agent_msi" = "yes"; then 6525 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6526 fi 6527 guest_agent_msi=no 6528elif ! has wixl; then 6529 if test "$guest_agent_msi" = "yes"; then 6530 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6531 fi 6532 guest_agent_msi=no 6533else 6534 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6535 # disabled explicitly 6536 if test "$guest_agent_msi" != "no"; then 6537 guest_agent_msi=yes 6538 fi 6539fi 6540 6541if test "$guest_agent_msi" = "yes"; then 6542 if test "$guest_agent_with_vss" = "yes"; then 6543 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6544 fi 6545 6546 if test "$QEMU_GA_MANUFACTURER" = ""; then 6547 QEMU_GA_MANUFACTURER=QEMU 6548 fi 6549 6550 if test "$QEMU_GA_DISTRO" = ""; then 6551 QEMU_GA_DISTRO=Linux 6552 fi 6553 6554 if test "$QEMU_GA_VERSION" = ""; then 6555 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6556 fi 6557 6558 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6559 6560 case "$cpu" in 6561 x86_64) 6562 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6563 ;; 6564 i386) 6565 QEMU_GA_MSI_ARCH="-D Arch=32" 6566 ;; 6567 *) 6568 error_exit "CPU $cpu not supported for building installation package" 6569 ;; 6570 esac 6571fi 6572 6573# Mac OS X ships with a broken assembler 6574roms= 6575if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6576 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6577 test "$softmmu" = yes ; then 6578 # Different host OS linkers have different ideas about the name of the ELF 6579 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6580 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6581 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6582 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6583 ld_i386_emulation="$emu" 6584 roms="optionrom" 6585 break 6586 fi 6587 done 6588fi 6589 6590# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6591if test "$cpu" = "s390x" ; then 6592 write_c_skeleton 6593 if compile_prog "-march=z900" ""; then 6594 roms="$roms s390-ccw" 6595 # SLOF is required for building the s390-ccw firmware on s390x, 6596 # since it is using the libnet code from SLOF for network booting. 6597 if test -e "${source_path}/.git" ; then 6598 git_submodules="${git_submodules} roms/SLOF" 6599 fi 6600 fi 6601fi 6602 6603# Check that the C++ compiler exists and works with the C compiler. 6604# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6605if has $cxx; then 6606 cat > $TMPC <<EOF 6607int c_function(void); 6608int main(void) { return c_function(); } 6609EOF 6610 6611 compile_object 6612 6613 cat > $TMPCXX <<EOF 6614extern "C" { 6615 int c_function(void); 6616} 6617int c_function(void) { return 42; } 6618EOF 6619 6620 update_cxxflags 6621 6622 if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 6623 # C++ compiler $cxx works ok with C compiler $cc 6624 : 6625 else 6626 echo "C++ compiler $cxx does not work with C compiler $cc" 6627 echo "Disabling C++ specific optional code" 6628 cxx= 6629 fi 6630else 6631 echo "No C++ compiler available; disabling C++ specific optional code" 6632 cxx= 6633fi 6634 6635echo_version() { 6636 if test "$1" = "yes" ; then 6637 echo "($2)" 6638 fi 6639} 6640 6641# prepend ftd flags after all config tests are done 6642QEMU_CFLAGS="$fdt_cflags $QEMU_CFLAGS" 6643QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 6644 6645config_host_mak="config-host.mak" 6646 6647echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6648 6649echo "# Automatically generated by configure - do not modify" > $config_host_mak 6650echo >> $config_host_mak 6651 6652echo all: >> $config_host_mak 6653echo "prefix=$prefix" >> $config_host_mak 6654echo "bindir=$bindir" >> $config_host_mak 6655echo "libdir=$libdir" >> $config_host_mak 6656echo "libexecdir=$libexecdir" >> $config_host_mak 6657echo "includedir=$includedir" >> $config_host_mak 6658echo "sysconfdir=$sysconfdir" >> $config_host_mak 6659echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6660echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6661echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6662echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6663if test "$mingw32" = "no" ; then 6664 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6665fi 6666echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6667echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6668echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 6669echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 6670echo "GIT=$git" >> $config_host_mak 6671echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6672echo "GIT_UPDATE=$git_update" >> $config_host_mak 6673 6674echo "ARCH=$ARCH" >> $config_host_mak 6675 6676if test "$default_devices" = "yes" ; then 6677 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 6678else 6679 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 6680fi 6681if test "$debug_tcg" = "yes" ; then 6682 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6683fi 6684if test "$strip_opt" = "yes" ; then 6685 echo "STRIP=${strip}" >> $config_host_mak 6686fi 6687if test "$bigendian" = "yes" ; then 6688 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6689fi 6690if test "$mingw32" = "yes" ; then 6691 echo "CONFIG_WIN32=y" >> $config_host_mak 6692 rc_version=$(cat $source_path/VERSION) 6693 version_major=${rc_version%%.*} 6694 rc_version=${rc_version#*.} 6695 version_minor=${rc_version%%.*} 6696 rc_version=${rc_version#*.} 6697 version_subminor=${rc_version%%.*} 6698 version_micro=0 6699 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6700 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6701 if test "$guest_agent_with_vss" = "yes" ; then 6702 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6703 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6704 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6705 fi 6706 if test "$guest_agent_ntddscsi" = "yes" ; then 6707 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 6708 fi 6709 if test "$guest_agent_msi" = "yes"; then 6710 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6711 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6712 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6713 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6714 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6715 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6716 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6717 fi 6718else 6719 echo "CONFIG_POSIX=y" >> $config_host_mak 6720fi 6721 6722if test "$linux" = "yes" ; then 6723 echo "CONFIG_LINUX=y" >> $config_host_mak 6724fi 6725 6726if test "$darwin" = "yes" ; then 6727 echo "CONFIG_DARWIN=y" >> $config_host_mak 6728fi 6729 6730if test "$solaris" = "yes" ; then 6731 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6732fi 6733if test "$haiku" = "yes" ; then 6734 echo "CONFIG_HAIKU=y" >> $config_host_mak 6735fi 6736if test "$static" = "yes" ; then 6737 echo "CONFIG_STATIC=y" >> $config_host_mak 6738fi 6739if test "$profiler" = "yes" ; then 6740 echo "CONFIG_PROFILER=y" >> $config_host_mak 6741fi 6742if test "$want_tools" = "yes" ; then 6743 echo "CONFIG_TOOLS=y" >> $config_host_mak 6744fi 6745if test "$guest_agent" = "yes" ; then 6746 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 6747fi 6748if test "$slirp" != "no"; then 6749 echo "CONFIG_SLIRP=y" >> $config_host_mak 6750 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6751 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 6752 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 6753fi 6754subdirs= 6755if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 6756 subdirs="$subdirs slirp" 6757fi 6758if test "$vde" = "yes" ; then 6759 echo "CONFIG_VDE=y" >> $config_host_mak 6760 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6761fi 6762if test "$netmap" = "yes" ; then 6763 echo "CONFIG_NETMAP=y" >> $config_host_mak 6764fi 6765if test "$l2tpv3" = "yes" ; then 6766 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6767fi 6768if test "$gprof" = "yes" ; then 6769 echo "CONFIG_GPROF=y" >> $config_host_mak 6770fi 6771if test "$cap_ng" = "yes" ; then 6772 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 6773 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak 6774fi 6775echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6776for drv in $audio_drv_list; do 6777 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6778 echo "$def=y" >> $config_host_mak 6779done 6780if test "$alsa" = "yes" ; then 6781 echo "CONFIG_ALSA=y" >> $config_host_mak 6782fi 6783echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6784echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak 6785if test "$libpulse" = "yes" ; then 6786 echo "CONFIG_LIBPULSE=y" >> $config_host_mak 6787fi 6788echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6789echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak 6790echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6791echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6792echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6793if test "$libjack" = "yes" ; then 6794 echo "CONFIG_LIBJACK=y" >> $config_host_mak 6795fi 6796echo "JACK_LIBS=$jack_libs" >> $config_host_mak 6797if test "$audio_win_int" = "yes" ; then 6798 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6799fi 6800echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6801echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6802if test "$xfs" = "yes" ; then 6803 echo "CONFIG_XFS=y" >> $config_host_mak 6804fi 6805qemu_version=$(head $source_path/VERSION) 6806echo "PKGVERSION=$pkgversion" >>$config_host_mak 6807echo "SRC_PATH=$source_path" >> $config_host_mak 6808echo "TARGET_DIRS=$target_list" >> $config_host_mak 6809if [ "$docs" = "yes" ] ; then 6810 echo "BUILD_DOCS=yes" >> $config_host_mak 6811fi 6812if test "$modules" = "yes"; then 6813 # $shacmd can generate a hash started with digit, which the compiler doesn't 6814 # like as an symbol. So prefix it with an underscore 6815 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6816 echo "CONFIG_MODULES=y" >> $config_host_mak 6817fi 6818if test "$module_upgrades" = "yes"; then 6819 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 6820fi 6821if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 6822 echo "CONFIG_X11=y" >> $config_host_mak 6823 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6824 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6825fi 6826if test "$cocoa" = "yes" ; then 6827 echo "CONFIG_COCOA=y" >> $config_host_mak 6828fi 6829if test "$iconv" = "yes" ; then 6830 echo "CONFIG_ICONV=y" >> $config_host_mak 6831 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 6832 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 6833fi 6834if test "$curses" = "yes" ; then 6835 echo "CONFIG_CURSES=y" >> $config_host_mak 6836 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6837 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6838fi 6839if test "$pipe2" = "yes" ; then 6840 echo "CONFIG_PIPE2=y" >> $config_host_mak 6841fi 6842if test "$accept4" = "yes" ; then 6843 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6844fi 6845if test "$splice" = "yes" ; then 6846 echo "CONFIG_SPLICE=y" >> $config_host_mak 6847fi 6848if test "$eventfd" = "yes" ; then 6849 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6850fi 6851if test "$memfd" = "yes" ; then 6852 echo "CONFIG_MEMFD=y" >> $config_host_mak 6853fi 6854if test "$have_usbfs" = "yes" ; then 6855 echo "CONFIG_USBFS=y" >> $config_host_mak 6856fi 6857if test "$fallocate" = "yes" ; then 6858 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6859fi 6860if test "$fallocate_punch_hole" = "yes" ; then 6861 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6862fi 6863if test "$fallocate_zero_range" = "yes" ; then 6864 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6865fi 6866if test "$posix_fallocate" = "yes" ; then 6867 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6868fi 6869if test "$sync_file_range" = "yes" ; then 6870 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6871fi 6872if test "$fiemap" = "yes" ; then 6873 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6874fi 6875if test "$dup3" = "yes" ; then 6876 echo "CONFIG_DUP3=y" >> $config_host_mak 6877fi 6878if test "$ppoll" = "yes" ; then 6879 echo "CONFIG_PPOLL=y" >> $config_host_mak 6880fi 6881if test "$prctl_pr_set_timerslack" = "yes" ; then 6882 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6883fi 6884if test "$epoll" = "yes" ; then 6885 echo "CONFIG_EPOLL=y" >> $config_host_mak 6886fi 6887if test "$epoll_create1" = "yes" ; then 6888 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6889fi 6890if test "$sendfile" = "yes" ; then 6891 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6892fi 6893if test "$timerfd" = "yes" ; then 6894 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6895fi 6896if test "$setns" = "yes" ; then 6897 echo "CONFIG_SETNS=y" >> $config_host_mak 6898fi 6899if test "$clock_adjtime" = "yes" ; then 6900 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6901fi 6902if test "$syncfs" = "yes" ; then 6903 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6904fi 6905if test "$kcov" = "yes" ; then 6906 echo "CONFIG_KCOV=y" >> $config_host_mak 6907fi 6908if test "$btrfs" = "yes" ; then 6909 echo "CONFIG_BTRFS=y" >> $config_host_mak 6910fi 6911if test "$inotify" = "yes" ; then 6912 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6913fi 6914if test "$inotify1" = "yes" ; then 6915 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6916fi 6917if test "$sem_timedwait" = "yes" ; then 6918 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6919fi 6920if test "$strchrnul" = "yes" ; then 6921 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6922fi 6923if test "$st_atim" = "yes" ; then 6924 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 6925fi 6926if test "$byteswap_h" = "yes" ; then 6927 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6928fi 6929if test "$bswap_h" = "yes" ; then 6930 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6931fi 6932if test "$curl" = "yes" ; then 6933 echo "CONFIG_CURL=y" >> $config_host_mak 6934 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6935 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6936fi 6937if test "$brlapi" = "yes" ; then 6938 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6939 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6940fi 6941if test "$gtk" = "yes" ; then 6942 echo "CONFIG_GTK=y" >> $config_host_mak 6943 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6944 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6945 if test "$gtk_gl" = "yes" ; then 6946 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6947 fi 6948fi 6949if test "$gio" = "yes" ; then 6950 echo "CONFIG_GIO=y" >> $config_host_mak 6951 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 6952 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 6953 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 6954fi 6955echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6956if test "$gnutls" = "yes" ; then 6957 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6958 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak 6959 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak 6960fi 6961if test "$gcrypt" = "yes" ; then 6962 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6963 if test "$gcrypt_hmac" = "yes" ; then 6964 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6965 fi 6966fi 6967if test "$nettle" = "yes" ; then 6968 echo "CONFIG_NETTLE=y" >> $config_host_mak 6969 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6970 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak 6971 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak 6972fi 6973if test "$qemu_private_xts" = "yes" ; then 6974 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 6975fi 6976if test "$tasn1" = "yes" ; then 6977 echo "CONFIG_TASN1=y" >> $config_host_mak 6978fi 6979if test "$auth_pam" = "yes" ; then 6980 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 6981fi 6982if test "$have_ifaddrs_h" = "yes" ; then 6983 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6984fi 6985if test "$have_drm_h" = "yes" ; then 6986 echo "HAVE_DRM_H=y" >> $config_host_mak 6987fi 6988if test "$have_broken_size_max" = "yes" ; then 6989 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6990fi 6991if test "$have_openpty" = "yes" ; then 6992 echo "HAVE_OPENPTY=y" >> $config_host_mak 6993fi 6994if test "$have_sys_signal_h" = "yes" ; then 6995 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak 6996fi 6997 6998# Work around a system header bug with some kernel/XFS header 6999# versions where they both try to define 'struct fsxattr': 7000# xfs headers will not try to redefine structs from linux headers 7001# if this macro is set. 7002if test "$have_fsxattr" = "yes" ; then 7003 echo "HAVE_FSXATTR=y" >> $config_host_mak 7004fi 7005if test "$have_copy_file_range" = "yes" ; then 7006 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 7007fi 7008if test "$vte" = "yes" ; then 7009 echo "CONFIG_VTE=y" >> $config_host_mak 7010 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 7011 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 7012fi 7013if test "$virglrenderer" = "yes" ; then 7014 echo "CONFIG_VIRGL=y" >> $config_host_mak 7015 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 7016 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 7017fi 7018if test "$xen" = "yes" ; then 7019 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 7020 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 7021 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 7022 echo "XEN_LIBS=$xen_libs" >> $config_host_mak 7023fi 7024if test "$linux_aio" = "yes" ; then 7025 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 7026fi 7027if test "$linux_io_uring" = "yes" ; then 7028 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 7029 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 7030 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 7031fi 7032if test "$attr" = "yes" ; then 7033 echo "CONFIG_ATTR=y" >> $config_host_mak 7034 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak 7035fi 7036if test "$libattr" = "yes" ; then 7037 echo "CONFIG_LIBATTR=y" >> $config_host_mak 7038fi 7039if test "$virtfs" = "yes" ; then 7040 echo "CONFIG_VIRTFS=y" >> $config_host_mak 7041fi 7042if test "$mpath" = "yes" ; then 7043 echo "CONFIG_MPATH=y" >> $config_host_mak 7044 if test "$mpathpersist_new_api" = "yes"; then 7045 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 7046 fi 7047fi 7048if test "$vhost_scsi" = "yes" ; then 7049 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 7050fi 7051if test "$vhost_net" = "yes" ; then 7052 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 7053fi 7054if test "$vhost_net_user" = "yes" ; then 7055 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 7056fi 7057if test "$vhost_net_vdpa" = "yes" ; then 7058 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 7059fi 7060if test "$vhost_crypto" = "yes" ; then 7061 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 7062fi 7063if test "$vhost_vsock" = "yes" ; then 7064 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 7065 if test "$vhost_user" = "yes" ; then 7066 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 7067 fi 7068fi 7069if test "$vhost_kernel" = "yes" ; then 7070 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 7071fi 7072if test "$vhost_user" = "yes" ; then 7073 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 7074fi 7075if test "$vhost_vdpa" = "yes" ; then 7076 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 7077fi 7078if test "$vhost_user_fs" = "yes" ; then 7079 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 7080fi 7081if test "$blobs" = "yes" ; then 7082 echo "INSTALL_BLOBS=yes" >> $config_host_mak 7083fi 7084if test "$iovec" = "yes" ; then 7085 echo "CONFIG_IOVEC=y" >> $config_host_mak 7086fi 7087if test "$preadv" = "yes" ; then 7088 echo "CONFIG_PREADV=y" >> $config_host_mak 7089fi 7090if test "$fdt" != "no" ; then 7091 echo "CONFIG_FDT=y" >> $config_host_mak 7092 echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak 7093 echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak 7094fi 7095if test "$membarrier" = "yes" ; then 7096 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 7097fi 7098if test "$signalfd" = "yes" ; then 7099 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 7100fi 7101if test "$optreset" = "yes" ; then 7102 echo "HAVE_OPTRESET=y" >> $config_host_mak 7103fi 7104if test "$tcg" = "yes"; then 7105 echo "CONFIG_TCG=y" >> $config_host_mak 7106 if test "$tcg_interpreter" = "yes" ; then 7107 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 7108 fi 7109fi 7110if test "$fdatasync" = "yes" ; then 7111 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 7112fi 7113if test "$madvise" = "yes" ; then 7114 echo "CONFIG_MADVISE=y" >> $config_host_mak 7115fi 7116if test "$posix_madvise" = "yes" ; then 7117 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 7118fi 7119if test "$posix_memalign" = "yes" ; then 7120 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 7121fi 7122if test "$spice" = "yes" ; then 7123 echo "CONFIG_SPICE=y" >> $config_host_mak 7124 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak 7125 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak 7126fi 7127 7128if test "$smartcard" = "yes" ; then 7129 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 7130 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 7131 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 7132fi 7133 7134if test "$libusb" = "yes" ; then 7135 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 7136 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 7137 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 7138fi 7139 7140if test "$usb_redir" = "yes" ; then 7141 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 7142 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 7143 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 7144fi 7145 7146if test "$opengl" = "yes" ; then 7147 echo "CONFIG_OPENGL=y" >> $config_host_mak 7148 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 7149 if test "$opengl_dmabuf" = "yes" ; then 7150 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 7151 fi 7152fi 7153 7154if test "$gbm" = "yes" ; then 7155 echo "CONFIG_GBM=y" >> $config_host_mak 7156 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 7157 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 7158fi 7159 7160 7161if test "$malloc_trim" = "yes" ; then 7162 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 7163fi 7164 7165if test "$avx2_opt" = "yes" ; then 7166 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 7167fi 7168 7169if test "$avx512f_opt" = "yes" ; then 7170 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 7171fi 7172 7173if test "$lzo" = "yes" ; then 7174 echo "CONFIG_LZO=y" >> $config_host_mak 7175 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak 7176fi 7177 7178if test "$snappy" = "yes" ; then 7179 echo "CONFIG_SNAPPY=y" >> $config_host_mak 7180 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak 7181fi 7182 7183if test "$bzip2" = "yes" ; then 7184 echo "CONFIG_BZIP2=y" >> $config_host_mak 7185 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 7186fi 7187 7188if test "$lzfse" = "yes" ; then 7189 echo "CONFIG_LZFSE=y" >> $config_host_mak 7190 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 7191fi 7192 7193if test "$zstd" = "yes" ; then 7194 echo "CONFIG_ZSTD=y" >> $config_host_mak 7195 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak 7196 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak 7197fi 7198 7199if test "$libiscsi" = "yes" ; then 7200 echo "CONFIG_LIBISCSI=y" >> $config_host_mak 7201 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 7202 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 7203fi 7204 7205if test "$libnfs" = "yes" ; then 7206 echo "CONFIG_LIBNFS=y" >> $config_host_mak 7207 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 7208fi 7209 7210if test "$seccomp" = "yes"; then 7211 echo "CONFIG_SECCOMP=y" >> $config_host_mak 7212 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 7213 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 7214fi 7215 7216# XXX: suppress that 7217if [ "$bsd" = "yes" ] ; then 7218 echo "CONFIG_BSD=y" >> $config_host_mak 7219fi 7220 7221if test "$localtime_r" = "yes" ; then 7222 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 7223fi 7224if test "$qom_cast_debug" = "yes" ; then 7225 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 7226fi 7227if test "$rbd" = "yes" ; then 7228 echo "CONFIG_RBD=y" >> $config_host_mak 7229 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 7230fi 7231 7232echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 7233if test "$coroutine_pool" = "yes" ; then 7234 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7235else 7236 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7237fi 7238 7239if test "$debug_stack_usage" = "yes" ; then 7240 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7241fi 7242 7243if test "$crypto_afalg" = "yes" ; then 7244 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7245fi 7246 7247if test "$open_by_handle_at" = "yes" ; then 7248 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7249fi 7250 7251if test "$linux_magic_h" = "yes" ; then 7252 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7253fi 7254 7255if test "$valgrind_h" = "yes" ; then 7256 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 7257fi 7258 7259if test "$have_asan_iface_fiber" = "yes" ; then 7260 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 7261fi 7262 7263if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 7264 echo "CONFIG_TSAN=y" >> $config_host_mak 7265fi 7266 7267if test "$has_environ" = "yes" ; then 7268 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 7269fi 7270 7271if test "$cpuid_h" = "yes" ; then 7272 echo "CONFIG_CPUID_H=y" >> $config_host_mak 7273fi 7274 7275if test "$int128" = "yes" ; then 7276 echo "CONFIG_INT128=y" >> $config_host_mak 7277fi 7278 7279if test "$atomic128" = "yes" ; then 7280 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 7281fi 7282 7283if test "$cmpxchg128" = "yes" ; then 7284 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 7285fi 7286 7287if test "$atomic64" = "yes" ; then 7288 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 7289fi 7290 7291if test "$attralias" = "yes" ; then 7292 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 7293fi 7294 7295if test "$getauxval" = "yes" ; then 7296 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 7297fi 7298 7299if test "$glusterfs" = "yes" ; then 7300 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak 7301 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 7302 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 7303fi 7304 7305if test "$glusterfs_xlator_opt" = "yes" ; then 7306 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 7307fi 7308 7309if test "$glusterfs_discard" = "yes" ; then 7310 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 7311fi 7312 7313if test "$glusterfs_fallocate" = "yes" ; then 7314 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 7315fi 7316 7317if test "$glusterfs_zerofill" = "yes" ; then 7318 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 7319fi 7320 7321if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 7322 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 7323fi 7324 7325if test "$glusterfs_iocb_has_stat" = "yes" ; then 7326 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 7327fi 7328 7329if test "$libssh" = "yes" ; then 7330 echo "CONFIG_LIBSSH=y" >> $config_host_mak 7331 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 7332 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 7333fi 7334 7335if test "$live_block_migration" = "yes" ; then 7336 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 7337fi 7338 7339if test "$tpm" = "yes"; then 7340 echo 'CONFIG_TPM=y' >> $config_host_mak 7341fi 7342 7343echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 7344if have_backend "nop"; then 7345 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 7346fi 7347if have_backend "simple"; then 7348 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 7349 # Set the appropriate trace file. 7350 trace_file="\"$trace_file-\" FMT_pid" 7351fi 7352if have_backend "log"; then 7353 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 7354fi 7355if have_backend "ust"; then 7356 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 7357 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak 7358 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak 7359fi 7360if have_backend "dtrace"; then 7361 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 7362 if test "$trace_backend_stap" = "yes" ; then 7363 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 7364 fi 7365fi 7366if have_backend "ftrace"; then 7367 if test "$linux" = "yes" ; then 7368 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 7369 else 7370 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 7371 fi 7372fi 7373if have_backend "syslog"; then 7374 if test "$posix_syslog" = "yes" ; then 7375 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 7376 else 7377 feature_not_found "syslog(trace backend)" "syslog not available" 7378 fi 7379fi 7380echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 7381 7382if test "$rdma" = "yes" ; then 7383 echo "CONFIG_RDMA=y" >> $config_host_mak 7384 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 7385fi 7386 7387if test "$pvrdma" = "yes" ; then 7388 echo "CONFIG_PVRDMA=y" >> $config_host_mak 7389fi 7390 7391if test "$have_rtnetlink" = "yes" ; then 7392 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 7393fi 7394 7395if test "$libxml2" = "yes" ; then 7396 echo "CONFIG_LIBXML2=y" >> $config_host_mak 7397 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 7398 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 7399fi 7400 7401if test "$replication" = "yes" ; then 7402 echo "CONFIG_REPLICATION=y" >> $config_host_mak 7403fi 7404 7405if test "$have_af_vsock" = "yes" ; then 7406 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 7407fi 7408 7409if test "$have_sysmacros" = "yes" ; then 7410 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 7411fi 7412 7413if test "$have_static_assert" = "yes" ; then 7414 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 7415fi 7416 7417if test "$have_utmpx" = "yes" ; then 7418 echo "HAVE_UTMPX=y" >> $config_host_mak 7419fi 7420if test "$have_getrandom" = "yes" ; then 7421 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 7422fi 7423if test "$ivshmem" = "yes" ; then 7424 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 7425fi 7426if test "$capstone" != "no" ; then 7427 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 7428 echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak 7429 echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak 7430fi 7431if test "$debug_mutex" = "yes" ; then 7432 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 7433fi 7434 7435# Hold two types of flag: 7436# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 7437# a thread we have a handle to 7438# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 7439# platform 7440if test "$pthread_setname_np_w_tid" = "yes" ; then 7441 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7442 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 7443elif test "$pthread_setname_np_wo_tid" = "yes" ; then 7444 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7445 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 7446fi 7447 7448if test "$libpmem" = "yes" ; then 7449 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 7450 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak 7451 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak 7452fi 7453 7454if test "$libdaxctl" = "yes" ; then 7455 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak 7456 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak 7457fi 7458 7459if test "$bochs" = "yes" ; then 7460 echo "CONFIG_BOCHS=y" >> $config_host_mak 7461fi 7462if test "$cloop" = "yes" ; then 7463 echo "CONFIG_CLOOP=y" >> $config_host_mak 7464fi 7465if test "$dmg" = "yes" ; then 7466 echo "CONFIG_DMG=y" >> $config_host_mak 7467fi 7468if test "$qcow1" = "yes" ; then 7469 echo "CONFIG_QCOW1=y" >> $config_host_mak 7470fi 7471if test "$vdi" = "yes" ; then 7472 echo "CONFIG_VDI=y" >> $config_host_mak 7473fi 7474if test "$vvfat" = "yes" ; then 7475 echo "CONFIG_VVFAT=y" >> $config_host_mak 7476fi 7477if test "$qed" = "yes" ; then 7478 echo "CONFIG_QED=y" >> $config_host_mak 7479fi 7480if test "$parallels" = "yes" ; then 7481 echo "CONFIG_PARALLELS=y" >> $config_host_mak 7482fi 7483if test "$sheepdog" = "yes" ; then 7484 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 7485fi 7486if test "$pty_h" = "yes" ; then 7487 echo "HAVE_PTY_H=y" >> $config_host_mak 7488fi 7489if test "$have_mlockall" = "yes" ; then 7490 echo "HAVE_MLOCKALL=y" >> $config_host_mak 7491fi 7492if test "$fuzzing" = "yes" ; then 7493 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" 7494fi 7495 7496if test "$plugins" = "yes" ; then 7497 echo "CONFIG_PLUGIN=y" >> $config_host_mak 7498 LIBS="-ldl $LIBS" 7499 # Copy the export object list to the build dir 7500 if test "$ld_dynamic_list" = "yes" ; then 7501 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 7502 ld_symbols=qemu-plugins-ld.symbols 7503 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 7504 elif test "$ld_exported_symbols_list" = "yes" ; then 7505 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 7506 ld64_symbols=qemu-plugins-ld64.symbols 7507 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 7508 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 7509 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 7510 else 7511 error_exit \ 7512 "If \$plugins=yes, either \$ld_dynamic_list or " \ 7513 "\$ld_exported_symbols_list should have been set to 'yes'." 7514 fi 7515fi 7516 7517if test -n "$gdb_bin" ; then 7518 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 7519fi 7520 7521if test "$secret_keyring" = "yes" ; then 7522 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 7523 if test "$have_keyutils" = "yes" ; then 7524 echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak 7525 fi 7526fi 7527 7528if test "$tcg_interpreter" = "yes"; then 7529 QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES" 7530elif test "$ARCH" = "sparc64" ; then 7531 QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES" 7532elif test "$ARCH" = "s390x" ; then 7533 QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES" 7534elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7535 QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES" 7536elif test "$ARCH" = "ppc64" ; then 7537 QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES" 7538elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7539 QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES" 7540else 7541 QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES" 7542fi 7543 7544echo "ROMS=$roms" >> $config_host_mak 7545echo "MAKE=$make" >> $config_host_mak 7546echo "INSTALL=$install" >> $config_host_mak 7547echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 7548echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 7549echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 7550echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 7551echo "PYTHON=$python" >> $config_host_mak 7552echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak 7553echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 7554echo "MESON=$meson" >> $config_host_mak 7555echo "CC=$cc" >> $config_host_mak 7556if $iasl -h > /dev/null 2>&1; then 7557 echo "CONFIG_IASL=$iasl" >> $config_host_mak 7558fi 7559echo "CXX=$cxx" >> $config_host_mak 7560echo "OBJCC=$objcc" >> $config_host_mak 7561echo "AR=$ar" >> $config_host_mak 7562echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 7563echo "AS=$as" >> $config_host_mak 7564echo "CCAS=$ccas" >> $config_host_mak 7565echo "CPP=$cpp" >> $config_host_mak 7566echo "OBJCOPY=$objcopy" >> $config_host_mak 7567echo "LD=$ld" >> $config_host_mak 7568echo "RANLIB=$ranlib" >> $config_host_mak 7569echo "NM=$nm" >> $config_host_mak 7570echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 7571echo "WINDRES=$windres" >> $config_host_mak 7572echo "CFLAGS=$CFLAGS" >> $config_host_mak 7573echo "CXXFLAGS=$CXXFLAGS" >> $config_host_mak 7574echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 7575echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 7576echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 7577echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 7578echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 7579echo "GLIB_LIBS=$glib_libs" >> $config_host_mak 7580if test "$sparse" = "yes" ; then 7581 echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 7582fi 7583echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 7584echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 7585echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 7586echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 7587echo "LIBS+=$LIBS" >> $config_host_mak 7588echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 7589echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 7590echo "EXESUF=$EXESUF" >> $config_host_mak 7591echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak 7592echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 7593echo "LIBS_QGA=$libs_qga" >> $config_host_mak 7594echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 7595echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 7596echo "POD2MAN=$POD2MAN" >> $config_host_mak 7597if test "$gcov" = "yes" ; then 7598 echo "CONFIG_GCOV=y" >> $config_host_mak 7599fi 7600 7601if test "$libudev" != "no"; then 7602 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 7603 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 7604fi 7605if test "$fuzzing" != "no"; then 7606 echo "CONFIG_FUZZ=y" >> $config_host_mak 7607fi 7608 7609if test "$edk2_blobs" = "yes" ; then 7610 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak 7611fi 7612 7613if test "$rng_none" = "yes"; then 7614 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 7615fi 7616 7617# use included Linux headers 7618if test "$linux" = "yes" ; then 7619 mkdir -p linux-headers 7620 case "$cpu" in 7621 i386|x86_64|x32) 7622 linux_arch=x86 7623 ;; 7624 ppc|ppc64|ppc64le) 7625 linux_arch=powerpc 7626 ;; 7627 s390x) 7628 linux_arch=s390 7629 ;; 7630 aarch64) 7631 linux_arch=arm64 7632 ;; 7633 mips64) 7634 linux_arch=mips 7635 ;; 7636 *) 7637 # For most CPUs the kernel architecture name and QEMU CPU name match. 7638 linux_arch="$cpu" 7639 ;; 7640 esac 7641 # For non-KVM architectures we will not have asm headers 7642 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 7643 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 7644 fi 7645fi 7646 7647for target in $target_list; do 7648target_dir="$target" 7649config_target_mak=$target_dir/config-target.mak 7650target_name=$(echo $target | cut -d '-' -f 1) 7651target_aligned_only="no" 7652case "$target_name" in 7653 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) 7654 target_aligned_only="yes" 7655 ;; 7656esac 7657target_bigendian="no" 7658case "$target_name" in 7659 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 7660 target_bigendian="yes" 7661 ;; 7662esac 7663target_softmmu="no" 7664target_user_only="no" 7665target_linux_user="no" 7666target_bsd_user="no" 7667case "$target" in 7668 ${target_name}-softmmu) 7669 target_softmmu="yes" 7670 ;; 7671 ${target_name}-linux-user) 7672 target_user_only="yes" 7673 target_linux_user="yes" 7674 ;; 7675 ${target_name}-bsd-user) 7676 target_user_only="yes" 7677 target_bsd_user="yes" 7678 ;; 7679 *) 7680 error_exit "Target '$target' not recognised" 7681 exit 1 7682 ;; 7683esac 7684 7685mkdir -p $target_dir 7686echo "# Automatically generated by configure - do not modify" > $config_target_mak 7687 7688bflt="no" 7689mttcg="no" 7690interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7691gdb_xml_files="" 7692 7693TARGET_ARCH="$target_name" 7694TARGET_BASE_ARCH="" 7695TARGET_ABI_DIR="" 7696TARGET_SYSTBL_ABI="" 7697TARGET_SYSTBL="" 7698 7699case "$target_name" in 7700 i386) 7701 mttcg="yes" 7702 gdb_xml_files="i386-32bit.xml" 7703 TARGET_SYSTBL_ABI=i386 7704 TARGET_SYSTBL=syscall_32.tbl 7705 ;; 7706 x86_64) 7707 TARGET_BASE_ARCH=i386 7708 TARGET_SYSTBL_ABI=common,64 7709 TARGET_SYSTBL=syscall_64.tbl 7710 mttcg="yes" 7711 gdb_xml_files="i386-64bit.xml" 7712 ;; 7713 alpha) 7714 mttcg="yes" 7715 TARGET_SYSTBL_ABI=common 7716 ;; 7717 arm|armeb) 7718 TARGET_ARCH=arm 7719 TARGET_SYSTBL_ABI=common,oabi 7720 bflt="yes" 7721 mttcg="yes" 7722 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml" 7723 ;; 7724 aarch64|aarch64_be) 7725 TARGET_ARCH=aarch64 7726 TARGET_BASE_ARCH=arm 7727 bflt="yes" 7728 mttcg="yes" 7729 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" 7730 ;; 7731 avr) 7732 gdb_xml_files="avr-cpu.xml" 7733 target_compiler=$cross_cc_avr 7734 ;; 7735 cris) 7736 ;; 7737 hppa) 7738 mttcg="yes" 7739 TARGET_SYSTBL_ABI=common,32 7740 ;; 7741 lm32) 7742 ;; 7743 m68k) 7744 bflt="yes" 7745 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml" 7746 TARGET_SYSTBL_ABI=common 7747 ;; 7748 microblaze|microblazeel) 7749 TARGET_ARCH=microblaze 7750 TARGET_SYSTBL_ABI=common 7751 mttcg="yes" 7752 bflt="yes" 7753 echo "TARGET_ABI32=y" >> $config_target_mak 7754 ;; 7755 mips|mipsel) 7756 mttcg="yes" 7757 TARGET_ARCH=mips 7758 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7759 TARGET_SYSTBL_ABI=o32 7760 TARGET_SYSTBL=syscall_o32.tbl 7761 ;; 7762 mipsn32|mipsn32el) 7763 mttcg="yes" 7764 TARGET_ARCH=mips64 7765 TARGET_BASE_ARCH=mips 7766 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7767 echo "TARGET_ABI32=y" >> $config_target_mak 7768 TARGET_SYSTBL_ABI=n32 7769 TARGET_SYSTBL=syscall_n32.tbl 7770 ;; 7771 mips64|mips64el) 7772 mttcg="no" 7773 TARGET_ARCH=mips64 7774 TARGET_BASE_ARCH=mips 7775 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7776 TARGET_SYSTBL_ABI=n64 7777 TARGET_SYSTBL=syscall_n64.tbl 7778 ;; 7779 moxie) 7780 ;; 7781 nios2) 7782 ;; 7783 or1k) 7784 TARGET_ARCH=openrisc 7785 TARGET_BASE_ARCH=openrisc 7786 ;; 7787 ppc) 7788 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7789 TARGET_SYSTBL_ABI=common,nospu,32 7790 ;; 7791 ppc64) 7792 TARGET_BASE_ARCH=ppc 7793 TARGET_ABI_DIR=ppc 7794 TARGET_SYSTBL_ABI=common,nospu,64 7795 mttcg=yes 7796 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7797 ;; 7798 ppc64le) 7799 TARGET_ARCH=ppc64 7800 TARGET_BASE_ARCH=ppc 7801 TARGET_ABI_DIR=ppc 7802 TARGET_SYSTBL_ABI=common,nospu,64 7803 mttcg=yes 7804 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7805 ;; 7806 ppc64abi32) 7807 TARGET_ARCH=ppc64 7808 TARGET_BASE_ARCH=ppc 7809 TARGET_ABI_DIR=ppc 7810 TARGET_SYSTBL_ABI=common,nospu,32 7811 echo "TARGET_ABI32=y" >> $config_target_mak 7812 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7813 ;; 7814 riscv32) 7815 TARGET_BASE_ARCH=riscv 7816 TARGET_ABI_DIR=riscv 7817 mttcg=yes 7818 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml" 7819 ;; 7820 riscv64) 7821 TARGET_BASE_ARCH=riscv 7822 TARGET_ABI_DIR=riscv 7823 mttcg=yes 7824 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml" 7825 ;; 7826 rx) 7827 TARGET_ARCH=rx 7828 bflt="yes" 7829 target_compiler=$cross_cc_rx 7830 gdb_xml_files="rx-core.xml" 7831 ;; 7832 sh4|sh4eb) 7833 TARGET_ARCH=sh4 7834 TARGET_SYSTBL_ABI=common 7835 bflt="yes" 7836 ;; 7837 sparc) 7838 TARGET_SYSTBL_ABI=common,32 7839 ;; 7840 sparc64) 7841 TARGET_BASE_ARCH=sparc 7842 TARGET_SYSTBL_ABI=common,64 7843 ;; 7844 sparc32plus) 7845 TARGET_ARCH=sparc64 7846 TARGET_BASE_ARCH=sparc 7847 TARGET_ABI_DIR=sparc 7848 TARGET_SYSTBL_ABI=common,32 7849 echo "TARGET_ABI32=y" >> $config_target_mak 7850 ;; 7851 s390x) 7852 TARGET_SYSTBL_ABI=common,64 7853 mttcg=yes 7854 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7855 ;; 7856 tilegx) 7857 ;; 7858 tricore) 7859 ;; 7860 unicore32) 7861 ;; 7862 xtensa|xtensaeb) 7863 TARGET_ARCH=xtensa 7864 TARGET_SYSTBL_ABI=common 7865 bflt="yes" 7866 mttcg="yes" 7867 ;; 7868 *) 7869 error_exit "Unsupported target CPU" 7870 ;; 7871esac 7872# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7873if [ "$TARGET_BASE_ARCH" = "" ]; then 7874 TARGET_BASE_ARCH=$TARGET_ARCH 7875fi 7876if [ "$TARGET_SYSTBL_ABI" != "" ] && [ "$TARGET_SYSTBL" = "" ]; then 7877 TARGET_SYSTBL=syscall.tbl 7878fi 7879 7880upper() { 7881 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7882} 7883 7884target_arch_name="$(upper $TARGET_ARCH)" 7885echo "TARGET_$target_arch_name=y" >> $config_target_mak 7886echo "TARGET_NAME=$target_name" >> $config_target_mak 7887echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7888if [ "$TARGET_ABI_DIR" = "" ]; then 7889 TARGET_ABI_DIR=$TARGET_ARCH 7890fi 7891echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7892if [ "$HOST_VARIANT_DIR" != "" ]; then 7893 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7894fi 7895if [ "$TARGET_SYSTBL_ABI" != "" ]; then 7896 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak 7897 echo "TARGET_SYSTBL=$TARGET_SYSTBL" >> $config_target_mak 7898fi 7899 7900if supported_xen_target $target; then 7901 echo "CONFIG_XEN=y" >> $config_target_mak 7902 if test "$xen_pci_passthrough" = yes; then 7903 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7904 fi 7905fi 7906if supported_kvm_target $target; then 7907 echo "CONFIG_KVM=y" >> $config_target_mak 7908fi 7909if supported_hax_target $target; then 7910 echo "CONFIG_HAX=y" >> $config_target_mak 7911fi 7912if supported_hvf_target $target; then 7913 echo "CONFIG_HVF=y" >> $config_target_mak 7914fi 7915if supported_whpx_target $target; then 7916 echo "CONFIG_WHPX=y" >> $config_target_mak 7917fi 7918if test "$target_aligned_only" = "yes" ; then 7919 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak 7920fi 7921if test "$target_bigendian" = "yes" ; then 7922 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7923fi 7924if test "$target_softmmu" = "yes" ; then 7925 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7926 if test "$mttcg" = "yes" ; then 7927 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7928 fi 7929fi 7930if test "$target_user_only" = "yes" ; then 7931 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7932 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7933 symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" 7934else 7935 symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" 7936fi 7937if test "$target_linux_user" = "yes" ; then 7938 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7939fi 7940list="" 7941if test ! -z "$gdb_xml_files" ; then 7942 for x in $gdb_xml_files; do 7943 list="$list gdb-xml/$x" 7944 done 7945 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7946fi 7947 7948if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 7949 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7950fi 7951if test "$target_bsd_user" = "yes" ; then 7952 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7953fi 7954 7955 7956# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets 7957 7958disas_config() { 7959 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7960 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7961} 7962 7963for i in $ARCH $TARGET_BASE_ARCH ; do 7964 case "$i" in 7965 alpha) 7966 disas_config "ALPHA" 7967 ;; 7968 aarch64) 7969 if test -n "${cxx}"; then 7970 disas_config "ARM_A64" 7971 fi 7972 ;; 7973 arm) 7974 disas_config "ARM" 7975 if test -n "${cxx}"; then 7976 disas_config "ARM_A64" 7977 fi 7978 ;; 7979 avr) 7980 disas_config "AVR" 7981 ;; 7982 cris) 7983 disas_config "CRIS" 7984 ;; 7985 hppa) 7986 disas_config "HPPA" 7987 ;; 7988 i386|x86_64|x32) 7989 disas_config "I386" 7990 ;; 7991 lm32) 7992 disas_config "LM32" 7993 ;; 7994 m68k) 7995 disas_config "M68K" 7996 ;; 7997 microblaze*) 7998 disas_config "MICROBLAZE" 7999 ;; 8000 mips*) 8001 disas_config "MIPS" 8002 if test -n "${cxx}"; then 8003 disas_config "NANOMIPS" 8004 fi 8005 ;; 8006 moxie*) 8007 disas_config "MOXIE" 8008 ;; 8009 nios2) 8010 disas_config "NIOS2" 8011 ;; 8012 or1k) 8013 disas_config "OPENRISC" 8014 ;; 8015 ppc*) 8016 disas_config "PPC" 8017 ;; 8018 riscv*) 8019 disas_config "RISCV" 8020 ;; 8021 rx) 8022 disas_config "RX" 8023 ;; 8024 s390*) 8025 disas_config "S390" 8026 ;; 8027 sh4) 8028 disas_config "SH4" 8029 ;; 8030 sparc*) 8031 disas_config "SPARC" 8032 ;; 8033 xtensa*) 8034 disas_config "XTENSA" 8035 ;; 8036 esac 8037done 8038if test "$tcg_interpreter" = "yes" ; then 8039 disas_config "TCI" 8040fi 8041 8042done # for target in $targets 8043 8044if [ "$fdt" = "git" ]; then 8045 subdirs="$subdirs dtc" 8046fi 8047if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 8048 subdirs="$subdirs capstone" 8049fi 8050echo "SUBDIRS=$subdirs" >> $config_host_mak 8051if test -n "$LIBCAPSTONE"; then 8052 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 8053fi 8054 8055if test "$numa" = "yes"; then 8056 echo "CONFIG_NUMA=y" >> $config_host_mak 8057 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 8058fi 8059 8060if test "$ccache_cpp2" = "yes"; then 8061 echo "export CCACHE_CPP2=y" >> $config_host_mak 8062fi 8063 8064if test "$safe_stack" = "yes"; then 8065 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 8066fi 8067 8068# If we're using a separate build tree, set it up now. 8069# DIRS are directories which we simply mkdir in the build tree; 8070# LINKS are things to symlink back into the source tree 8071# (these can be both files and directories). 8072# Caution: do not add files or directories here using wildcards. This 8073# will result in problems later if a new file matching the wildcard is 8074# added to the source tree -- nothing will cause configure to be rerun 8075# so the build tree will be missing the link back to the new file, and 8076# tests might fail. Prefer to keep the relevant files in their own 8077# directory and symlink the directory instead. 8078# UNLINK is used to remove symlinks from older development versions 8079# that might get into the way when doing "git update" without doing 8080# a "make distclean" in between. 8081DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 8082DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 8083DIRS="$DIRS docs docs/interop fsdev scsi" 8084DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 8085DIRS="$DIRS roms/seabios" 8086LINKS="Makefile" 8087LINKS="$LINKS tests/tcg/lm32/Makefile" 8088LINKS="$LINKS tests/tcg/Makefile.target" 8089LINKS="$LINKS pc-bios/optionrom/Makefile" 8090LINKS="$LINKS pc-bios/s390-ccw/Makefile" 8091LINKS="$LINKS roms/seabios/Makefile" 8092LINKS="$LINKS pc-bios/qemu-icon.bmp" 8093LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 8094LINKS="$LINKS tests/acceptance tests/data" 8095LINKS="$LINKS tests/qemu-iotests/check" 8096LINKS="$LINKS python" 8097UNLINK="pc-bios/keymaps" 8098for bios_file in \ 8099 $source_path/pc-bios/*.bin \ 8100 $source_path/pc-bios/*.elf \ 8101 $source_path/pc-bios/*.lid \ 8102 $source_path/pc-bios/*.rom \ 8103 $source_path/pc-bios/*.dtb \ 8104 $source_path/pc-bios/*.img \ 8105 $source_path/pc-bios/openbios-* \ 8106 $source_path/pc-bios/u-boot.* \ 8107 $source_path/pc-bios/edk2-*.fd.bz2 \ 8108 $source_path/pc-bios/palcode-* 8109do 8110 LINKS="$LINKS pc-bios/$(basename $bios_file)" 8111done 8112mkdir -p $DIRS 8113for f in $LINKS ; do 8114 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 8115 symlink "$source_path/$f" "$f" 8116 fi 8117done 8118for f in $UNLINK ; do 8119 if [ -L "$f" ]; then 8120 rm -f "$f" 8121 fi 8122done 8123 8124(for i in $cross_cc_vars; do 8125 export $i 8126done 8127export target_list source_path use_containers 8128$source_path/tests/tcg/configure.sh) 8129 8130# temporary config to build submodules 8131for rom in seabios; do 8132 config_mak=roms/$rom/config.mak 8133 echo "# Automatically generated by configure - do not modify" > $config_mak 8134 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 8135 echo "AS=$as" >> $config_mak 8136 echo "CCAS=$ccas" >> $config_mak 8137 echo "CC=$cc" >> $config_mak 8138 echo "BCC=bcc" >> $config_mak 8139 echo "CPP=$cpp" >> $config_mak 8140 echo "OBJCOPY=objcopy" >> $config_mak 8141 echo "IASL=$iasl" >> $config_mak 8142 echo "LD=$ld" >> $config_mak 8143 echo "RANLIB=$ranlib" >> $config_mak 8144done 8145 8146# set up qemu-iotests in this build directory 8147iotests_common_env="tests/qemu-iotests/common.env" 8148 8149echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 8150echo >> "$iotests_common_env" 8151echo "export PYTHON='$python'" >> "$iotests_common_env" 8152 8153if test "$skip_meson" = no; then 8154cross="config-meson.cross.new" 8155meson_quote() { 8156 echo "['$(echo $* | sed "s/ /','/g")']" 8157} 8158 8159echo "# Automatically generated by configure - do not modify" > $cross 8160echo "[properties]" >> $cross 8161test -z "$cxx" && echo "link_language = 'c'" >> $cross 8162echo "[binaries]" >> $cross 8163echo "c = $(meson_quote $cc)" >> $cross 8164test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross 8165echo "ar = $(meson_quote $ar)" >> $cross 8166echo "nm = $(meson_quote $nm)" >> $cross 8167echo "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross 8168echo "ranlib = $(meson_quote $ranlib)" >> $cross 8169echo "strip = $(meson_quote $strip)" >> $cross 8170echo "windres = $(meson_quote $windres)" >> $cross 8171if test -n "$cross_prefix"; then 8172 cross_arg="--cross-file config-meson.cross" 8173 # Hack: Meson expects an absolute path for the *build* machine 8174 # for the prefix, so add a slash in front of a Windows path that 8175 # includes a drive letter. 8176 # 8177 # See https://github.com/mesonbuild/meson/issues/7577. 8178 echo "[host_machine]" >> $cross 8179 if test "$mingw32" = "yes" ; then 8180 echo "system = 'windows'" >> $cross 8181 case $prefix in 8182 ?:*) pre_prefix=/ ;; 8183 esac 8184 fi 8185 if test "$linux" = "yes" ; then 8186 echo "system = 'linux'" >> $cross 8187 fi 8188 case "$ARCH" in 8189 i386|x86_64) 8190 echo "cpu_family = 'x86'" >> $cross 8191 ;; 8192 ppc64le) 8193 echo "cpu_family = 'ppc64'" >> $cross 8194 ;; 8195 *) 8196 echo "cpu_family = '$ARCH'" >> $cross 8197 ;; 8198 esac 8199 echo "cpu = '$cpu'" >> $cross 8200 if test "$bigendian" = "yes" ; then 8201 echo "endian = 'big'" >> $cross 8202 else 8203 echo "endian = 'little'" >> $cross 8204 fi 8205else 8206 cross_arg="--native-file config-meson.cross" 8207fi 8208mv $cross config-meson.cross 8209 8210rm -rf meson-private meson-info meson-logs 8211NINJA=${ninja:-$PWD/ninjatool} $meson setup \ 8212 --prefix "${pre_prefix}$prefix" \ 8213 --libdir "${pre_prefix}$libdir" \ 8214 --libexecdir "${pre_prefix}$libexecdir" \ 8215 --bindir "${pre_prefix}$bindir" \ 8216 --includedir "${pre_prefix}$includedir" \ 8217 --datadir "${pre_prefix}$datadir" \ 8218 --mandir "${pre_prefix}$mandir" \ 8219 --sysconfdir "${pre_prefix}$sysconfdir" \ 8220 --localstatedir "${pre_prefix}$local_statedir" \ 8221 -Ddocdir="${pre_prefix}$docdir" \ 8222 -Dqemu_suffix="$qemu_suffix" \ 8223 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 8224 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 8225 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 8226 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 8227 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 8228 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 8229 -Dsdl=$sdl -Dsdl_image=$sdl_image \ 8230 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \ 8231 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\ 8232 $cross_arg \ 8233 "$PWD" "$source_path" 8234 8235if test "$?" -ne 0 ; then 8236 error_exit "meson setup failed" 8237fi 8238touch ninjatool.stamp 8239fi 8240 8241# Save the configure command line for later reuse. 8242cat <<EOD >config.status 8243#!/bin/sh 8244# Generated by configure. 8245# Run this file to recreate the current configuration. 8246# Compiler output produced by configure, useful for debugging 8247# configure, is in config.log if it exists. 8248EOD 8249 8250preserve_env() { 8251 envname=$1 8252 8253 eval envval=\$$envname 8254 8255 if test -n "$envval" 8256 then 8257 echo "$envname='$envval'" >> config.status 8258 echo "export $envname" >> config.status 8259 else 8260 echo "unset $envname" >> config.status 8261 fi 8262} 8263 8264# Preserve various env variables that influence what 8265# features/build target configure will detect 8266preserve_env AR 8267preserve_env AS 8268preserve_env CC 8269preserve_env CPP 8270preserve_env CXX 8271preserve_env INSTALL 8272preserve_env LD 8273preserve_env LD_LIBRARY_PATH 8274preserve_env LIBTOOL 8275preserve_env MAKE 8276preserve_env NM 8277preserve_env OBJCOPY 8278preserve_env PATH 8279preserve_env PKG_CONFIG 8280preserve_env PKG_CONFIG_LIBDIR 8281preserve_env PKG_CONFIG_PATH 8282preserve_env PYTHON 8283preserve_env SDL2_CONFIG 8284preserve_env SMBD 8285preserve_env STRIP 8286preserve_env WINDRES 8287 8288printf "exec" >>config.status 8289for i in "$0" "$@"; do 8290 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status 8291done 8292echo ' "$@"' >>config.status 8293chmod +x config.status 8294 8295rm -r "$TMPDIR1" 8296