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