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# If we're making warnings fatal, apply this to Sphinx runs as well 4924sphinx_werror="" 4925if test "$werror" = "yes"; then 4926 sphinx_werror="-W" 4927fi 4928 4929# Check we have a new enough version of sphinx-build 4930has_sphinx_build() { 4931 # This is a bit awkward but works: create a trivial document and 4932 # try to run it with our configuration file (which enforces a 4933 # version requirement). This will fail if either 4934 # sphinx-build doesn't exist at all or if it is too old. 4935 mkdir -p "$TMPDIR1/sphinx" 4936 touch "$TMPDIR1/sphinx/index.rst" 4937 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ 4938 -b html "$TMPDIR1/sphinx" \ 4939 "$TMPDIR1/sphinx/out" >> config.log 2>&1 4940} 4941 4942# Check if tools are available to build documentation. 4943if test "$docs" != "no" ; then 4944 if has_sphinx_build; then 4945 sphinx_ok=yes 4946 else 4947 sphinx_ok=no 4948 fi 4949 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then 4950 docs=yes 4951 else 4952 if test "$docs" = "yes" ; then 4953 if has $sphinx_build && test "$sphinx_ok" != "yes"; then 4954 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 4955 fi 4956 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx" 4957 fi 4958 docs=no 4959 fi 4960fi 4961 4962# Search for bswap_32 function 4963byteswap_h=no 4964cat > $TMPC << EOF 4965#include <byteswap.h> 4966int main(void) { return bswap_32(0); } 4967EOF 4968if compile_prog "" "" ; then 4969 byteswap_h=yes 4970fi 4971 4972# Search for bswap32 function 4973bswap_h=no 4974cat > $TMPC << EOF 4975#include <sys/endian.h> 4976#include <sys/types.h> 4977#include <machine/bswap.h> 4978int main(void) { return bswap32(0); } 4979EOF 4980if compile_prog "" "" ; then 4981 bswap_h=yes 4982fi 4983 4984########################################## 4985# Do we have libiscsi >= 1.9.0 4986if test "$libiscsi" != "no" ; then 4987 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4988 libiscsi="yes" 4989 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4990 libiscsi_libs=$($pkg_config --libs libiscsi) 4991 else 4992 if test "$libiscsi" = "yes" ; then 4993 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4994 fi 4995 libiscsi="no" 4996 fi 4997fi 4998 4999########################################## 5000# Do we need libm 5001cat > $TMPC << EOF 5002#include <math.h> 5003int main(int argc, char **argv) { return isnan(sin((double)argc)); } 5004EOF 5005if compile_prog "" "" ; then 5006 : 5007elif compile_prog "" "-lm" ; then 5008 LIBS="-lm $LIBS" 5009else 5010 error_exit "libm check failed" 5011fi 5012 5013########################################## 5014# Do we need librt 5015# uClibc provides 2 versions of clock_gettime(), one with realtime 5016# support and one without. This means that the clock_gettime() don't 5017# need -lrt. We still need it for timer_create() so we check for this 5018# function in addition. 5019cat > $TMPC <<EOF 5020#include <signal.h> 5021#include <time.h> 5022int main(void) { 5023 timer_create(CLOCK_REALTIME, NULL, NULL); 5024 return clock_gettime(CLOCK_REALTIME, NULL); 5025} 5026EOF 5027 5028if compile_prog "" "" ; then 5029 : 5030# we need pthread for static linking. use previous pthread test result 5031elif compile_prog "" "$pthread_lib -lrt" ; then 5032 LIBS="$LIBS -lrt" 5033fi 5034 5035# Check whether we need to link libutil for openpty() 5036cat > $TMPC << EOF 5037extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 5038int main(void) { return openpty(0, 0, 0, 0, 0); } 5039EOF 5040 5041have_openpty="no" 5042if compile_prog "" "" ; then 5043 have_openpty="yes" 5044else 5045 if compile_prog "" "-lutil" ; then 5046 libs_tools="-lutil $libs_tools" 5047 have_openpty="yes" 5048 fi 5049fi 5050 5051########################################## 5052# spice probe 5053if test "$spice" != "no" ; then 5054 cat > $TMPC << EOF 5055#include <spice.h> 5056int main(void) { spice_server_new(); return 0; } 5057EOF 5058 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 5059 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 5060 if $pkg_config --atleast-version=0.12.5 spice-server && \ 5061 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 5062 compile_prog "$spice_cflags" "$spice_libs" ; then 5063 spice="yes" 5064 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 5065 else 5066 if test "$spice" = "yes" ; then 5067 feature_not_found "spice" \ 5068 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 5069 fi 5070 spice="no" 5071 fi 5072fi 5073 5074# check for smartcard support 5075if test "$smartcard" != "no"; then 5076 if $pkg_config --atleast-version=2.5.1 libcacard; then 5077 libcacard_cflags=$($pkg_config --cflags libcacard) 5078 libcacard_libs=$($pkg_config --libs libcacard) 5079 smartcard="yes" 5080 else 5081 if test "$smartcard" = "yes"; then 5082 feature_not_found "smartcard" "Install libcacard devel" 5083 fi 5084 smartcard="no" 5085 fi 5086fi 5087 5088# check for libusb 5089if test "$libusb" != "no" ; then 5090 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 5091 libusb="yes" 5092 libusb_cflags=$($pkg_config --cflags libusb-1.0) 5093 libusb_libs=$($pkg_config --libs libusb-1.0) 5094 else 5095 if test "$libusb" = "yes"; then 5096 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 5097 fi 5098 libusb="no" 5099 fi 5100fi 5101 5102# check for usbredirparser for usb network redirection support 5103if test "$usb_redir" != "no" ; then 5104 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 5105 usb_redir="yes" 5106 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 5107 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 5108 else 5109 if test "$usb_redir" = "yes"; then 5110 feature_not_found "usb-redir" "Install usbredir devel" 5111 fi 5112 usb_redir="no" 5113 fi 5114fi 5115 5116########################################## 5117# check if we have VSS SDK headers for win 5118 5119if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5120 test "$vss_win32_sdk" != "no" ; then 5121 case "$vss_win32_sdk" in 5122 "") vss_win32_include="-isystem $source_path" ;; 5123 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 5124 # handle path with spaces. So we symlink the headers into ".sdk/vss". 5125 vss_win32_include="-isystem $source_path/.sdk/vss" 5126 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 5127 ;; 5128 *) vss_win32_include="-isystem $vss_win32_sdk" 5129 esac 5130 cat > $TMPC << EOF 5131#define __MIDL_user_allocate_free_DEFINED__ 5132#include <inc/win2003/vss.h> 5133int main(void) { return VSS_CTX_BACKUP; } 5134EOF 5135 if compile_prog "$vss_win32_include" "" ; then 5136 guest_agent_with_vss="yes" 5137 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 5138 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 5139 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 5140 else 5141 if test "$vss_win32_sdk" != "" ; then 5142 echo "ERROR: Please download and install Microsoft VSS SDK:" 5143 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 5144 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 5145 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 5146 echo "ERROR: The headers are extracted in the directory \`inc'." 5147 feature_not_found "VSS support" 5148 fi 5149 guest_agent_with_vss="no" 5150 fi 5151fi 5152 5153########################################## 5154# lookup Windows platform SDK (if not specified) 5155# The SDK is needed only to build .tlb (type library) file of guest agent 5156# VSS provider from the source. It is usually unnecessary because the 5157# pre-compiled .tlb file is included. 5158 5159if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5160 test "$guest_agent_with_vss" = "yes" ; then 5161 if test -z "$win_sdk"; then 5162 programfiles="$PROGRAMFILES" 5163 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 5164 if test -n "$programfiles"; then 5165 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 5166 else 5167 feature_not_found "Windows SDK" 5168 fi 5169 elif test "$win_sdk" = "no"; then 5170 win_sdk="" 5171 fi 5172fi 5173 5174########################################## 5175# check if mingw environment provides a recent ntddscsi.h 5176if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 5177 cat > $TMPC << EOF 5178#include <windows.h> 5179#include <ntddscsi.h> 5180int main(void) { 5181#if !defined(IOCTL_SCSI_GET_ADDRESS) 5182#error Missing required ioctl definitions 5183#endif 5184 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 5185 return addr.Lun; 5186} 5187EOF 5188 if compile_prog "" "" ; then 5189 guest_agent_ntddscsi=yes 5190 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 5191 fi 5192fi 5193 5194########################################## 5195# virgl renderer probe 5196 5197if test "$virglrenderer" != "no" ; then 5198 cat > $TMPC << EOF 5199#include <virglrenderer.h> 5200int main(void) { virgl_renderer_poll(); return 0; } 5201EOF 5202 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 5203 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 5204 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 5205 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 5206 compile_prog "$virgl_cflags" "$virgl_libs" ; then 5207 virglrenderer="yes" 5208 else 5209 if test "$virglrenderer" = "yes" ; then 5210 feature_not_found "virglrenderer" 5211 fi 5212 virglrenderer="no" 5213 fi 5214fi 5215 5216########################################## 5217# capstone 5218 5219case "$capstone" in 5220 "" | yes) 5221 if $pkg_config capstone; then 5222 capstone=system 5223 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5224 capstone=git 5225 elif test -e "${source_path}/capstone/Makefile" ; then 5226 capstone=internal 5227 elif test -z "$capstone" ; then 5228 capstone=no 5229 else 5230 feature_not_found "capstone" "Install capstone devel or git submodule" 5231 fi 5232 ;; 5233 5234 system) 5235 if ! $pkg_config capstone; then 5236 feature_not_found "capstone" "Install capstone devel" 5237 fi 5238 ;; 5239esac 5240 5241case "$capstone" in 5242 git | internal) 5243 if test "$capstone" = git; then 5244 git_submodules="${git_submodules} capstone" 5245 fi 5246 mkdir -p capstone 5247 QEMU_CFLAGS="$QEMU_CFLAGS -I${source_path}/capstone/include" 5248 if test "$mingw32" = "yes"; then 5249 LIBCAPSTONE=capstone.lib 5250 else 5251 LIBCAPSTONE=libcapstone.a 5252 fi 5253 capstone_libs="-L$PWD/capstone -lcapstone" 5254 capstone_cflags="-I${source_path}/capstone/include" 5255 ;; 5256 5257 system) 5258 capstone_libs="$($pkg_config --libs capstone)" 5259 capstone_cflags="$($pkg_config --cflags capstone)" 5260 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 5261 ;; 5262 5263 no) 5264 ;; 5265 *) 5266 error_exit "Unknown state for capstone: $capstone" 5267 ;; 5268esac 5269 5270########################################## 5271# check if we have fdatasync 5272 5273fdatasync=no 5274cat > $TMPC << EOF 5275#include <unistd.h> 5276int main(void) { 5277#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 5278return fdatasync(0); 5279#else 5280#error Not supported 5281#endif 5282} 5283EOF 5284if compile_prog "" "" ; then 5285 fdatasync=yes 5286fi 5287 5288########################################## 5289# check if we have madvise 5290 5291madvise=no 5292cat > $TMPC << EOF 5293#include <sys/types.h> 5294#include <sys/mman.h> 5295#include <stddef.h> 5296int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 5297EOF 5298if compile_prog "" "" ; then 5299 madvise=yes 5300fi 5301 5302########################################## 5303# check if we have posix_madvise 5304 5305posix_madvise=no 5306cat > $TMPC << EOF 5307#include <sys/mman.h> 5308#include <stddef.h> 5309int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 5310EOF 5311if compile_prog "" "" ; then 5312 posix_madvise=yes 5313fi 5314 5315########################################## 5316# check if we have posix_memalign() 5317 5318posix_memalign=no 5319cat > $TMPC << EOF 5320#include <stdlib.h> 5321int main(void) { 5322 void *p; 5323 return posix_memalign(&p, 8, 8); 5324} 5325EOF 5326if compile_prog "" "" ; then 5327 posix_memalign=yes 5328fi 5329 5330########################################## 5331# check if we have posix_syslog 5332 5333posix_syslog=no 5334cat > $TMPC << EOF 5335#include <syslog.h> 5336int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 5337EOF 5338if compile_prog "" "" ; then 5339 posix_syslog=yes 5340fi 5341 5342########################################## 5343# check if we have sem_timedwait 5344 5345sem_timedwait=no 5346cat > $TMPC << EOF 5347#include <semaphore.h> 5348int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 5349EOF 5350if compile_prog "" "" ; then 5351 sem_timedwait=yes 5352fi 5353 5354########################################## 5355# check if we have strchrnul 5356 5357strchrnul=no 5358cat > $TMPC << EOF 5359#include <string.h> 5360int main(void); 5361// Use a haystack that the compiler shouldn't be able to constant fold 5362char *haystack = (char*)&main; 5363int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 5364EOF 5365if compile_prog "" "" ; then 5366 strchrnul=yes 5367fi 5368 5369######################################### 5370# check if we have st_atim 5371 5372st_atim=no 5373cat > $TMPC << EOF 5374#include <sys/stat.h> 5375#include <stddef.h> 5376int main(void) { return offsetof(struct stat, st_atim); } 5377EOF 5378if compile_prog "" "" ; then 5379 st_atim=yes 5380fi 5381 5382########################################## 5383# check if trace backend exists 5384 5385$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 5386if test "$?" -ne 0 ; then 5387 error_exit "invalid trace backends" \ 5388 "Please choose supported trace backends." 5389fi 5390 5391########################################## 5392# For 'ust' backend, test if ust headers are present 5393if have_backend "ust"; then 5394 cat > $TMPC << EOF 5395#include <lttng/tracepoint.h> 5396int main(void) { return 0; } 5397EOF 5398 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5399 if $pkg_config lttng-ust --exists; then 5400 lttng_ust_libs=$($pkg_config --libs lttng-ust) 5401 else 5402 lttng_ust_libs="-llttng-ust -ldl" 5403 fi 5404 if $pkg_config liburcu-bp --exists; then 5405 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5406 else 5407 urcu_bp_libs="-lurcu-bp" 5408 fi 5409 5410 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 5411 else 5412 error_exit "Trace backend 'ust' missing lttng-ust header files" 5413 fi 5414fi 5415 5416########################################## 5417# For 'dtrace' backend, test if 'dtrace' command is present 5418if have_backend "dtrace"; then 5419 if ! has 'dtrace' ; then 5420 error_exit "dtrace command is not found in PATH $PATH" 5421 fi 5422 trace_backend_stap="no" 5423 if has 'stap' ; then 5424 trace_backend_stap="yes" 5425 fi 5426fi 5427 5428########################################## 5429# check and set a backend for coroutine 5430 5431# We prefer ucontext, but it's not always possible. The fallback 5432# is sigcontext. On Windows the only valid backend is the Windows 5433# specific one. 5434 5435ucontext_works=no 5436if test "$darwin" != "yes"; then 5437 cat > $TMPC << EOF 5438#include <ucontext.h> 5439#ifdef __stub_makecontext 5440#error Ignoring glibc stub makecontext which will always fail 5441#endif 5442int main(void) { makecontext(0, 0, 0); return 0; } 5443EOF 5444 if compile_prog "" "" ; then 5445 ucontext_works=yes 5446 fi 5447fi 5448 5449if test "$coroutine" = ""; then 5450 if test "$mingw32" = "yes"; then 5451 coroutine=win32 5452 elif test "$ucontext_works" = "yes"; then 5453 coroutine=ucontext 5454 else 5455 coroutine=sigaltstack 5456 fi 5457else 5458 case $coroutine in 5459 windows) 5460 if test "$mingw32" != "yes"; then 5461 error_exit "'windows' coroutine backend only valid for Windows" 5462 fi 5463 # Unfortunately the user visible backend name doesn't match the 5464 # coroutine-*.c filename for this case, so we have to adjust it here. 5465 coroutine=win32 5466 ;; 5467 ucontext) 5468 if test "$ucontext_works" != "yes"; then 5469 feature_not_found "ucontext" 5470 fi 5471 ;; 5472 sigaltstack) 5473 if test "$mingw32" = "yes"; then 5474 error_exit "only the 'windows' coroutine backend is valid for Windows" 5475 fi 5476 ;; 5477 *) 5478 error_exit "unknown coroutine backend $coroutine" 5479 ;; 5480 esac 5481fi 5482 5483if test "$coroutine_pool" = ""; then 5484 coroutine_pool=yes 5485fi 5486 5487if test "$debug_stack_usage" = "yes"; then 5488 if test "$coroutine_pool" = "yes"; then 5489 echo "WARN: disabling coroutine pool for stack usage debugging" 5490 coroutine_pool=no 5491 fi 5492fi 5493 5494################################################## 5495# SafeStack 5496 5497 5498if test "$safe_stack" = "yes"; then 5499cat > $TMPC << EOF 5500int main(int argc, char *argv[]) 5501{ 5502#if ! __has_feature(safe_stack) 5503#error SafeStack Disabled 5504#endif 5505 return 0; 5506} 5507EOF 5508 flag="-fsanitize=safe-stack" 5509 # Check that safe-stack is supported and enabled. 5510 if compile_prog "-Werror $flag" "$flag"; then 5511 # Flag needed both at compilation and at linking 5512 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5513 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5514 else 5515 error_exit "SafeStack not supported by your compiler" 5516 fi 5517 if test "$coroutine" != "ucontext"; then 5518 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5519 fi 5520else 5521cat > $TMPC << EOF 5522int main(int argc, char *argv[]) 5523{ 5524#if defined(__has_feature) 5525#if __has_feature(safe_stack) 5526#error SafeStack Enabled 5527#endif 5528#endif 5529 return 0; 5530} 5531EOF 5532if test "$safe_stack" = "no"; then 5533 # Make sure that safe-stack is disabled 5534 if ! compile_prog "-Werror" ""; then 5535 # SafeStack was already enabled, try to explicitly remove the feature 5536 flag="-fno-sanitize=safe-stack" 5537 if ! compile_prog "-Werror $flag" "$flag"; then 5538 error_exit "Configure cannot disable SafeStack" 5539 fi 5540 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5541 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5542 fi 5543else # "$safe_stack" = "" 5544 # Set safe_stack to yes or no based on pre-existing flags 5545 if compile_prog "-Werror" ""; then 5546 safe_stack="no" 5547 else 5548 safe_stack="yes" 5549 if test "$coroutine" != "ucontext"; then 5550 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5551 fi 5552 fi 5553fi 5554fi 5555 5556########################################## 5557# check if we have open_by_handle_at 5558 5559open_by_handle_at=no 5560cat > $TMPC << EOF 5561#include <fcntl.h> 5562#if !defined(AT_EMPTY_PATH) 5563# error missing definition 5564#else 5565int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5566#endif 5567EOF 5568if compile_prog "" "" ; then 5569 open_by_handle_at=yes 5570fi 5571 5572######################################## 5573# check if we have linux/magic.h 5574 5575linux_magic_h=no 5576cat > $TMPC << EOF 5577#include <linux/magic.h> 5578int main(void) { 5579 return 0; 5580} 5581EOF 5582if compile_prog "" "" ; then 5583 linux_magic_h=yes 5584fi 5585 5586######################################## 5587# check if we have valgrind/valgrind.h 5588 5589valgrind_h=no 5590cat > $TMPC << EOF 5591#include <valgrind/valgrind.h> 5592int main(void) { 5593 return 0; 5594} 5595EOF 5596if compile_prog "" "" ; then 5597 valgrind_h=yes 5598fi 5599 5600######################################## 5601# check if environ is declared 5602 5603has_environ=no 5604cat > $TMPC << EOF 5605#include <unistd.h> 5606int main(void) { 5607 environ = 0; 5608 return 0; 5609} 5610EOF 5611if compile_prog "" "" ; then 5612 has_environ=yes 5613fi 5614 5615######################################## 5616# check if cpuid.h is usable. 5617 5618cat > $TMPC << EOF 5619#include <cpuid.h> 5620int main(void) { 5621 unsigned a, b, c, d; 5622 int max = __get_cpuid_max(0, 0); 5623 5624 if (max >= 1) { 5625 __cpuid(1, a, b, c, d); 5626 } 5627 5628 if (max >= 7) { 5629 __cpuid_count(7, 0, a, b, c, d); 5630 } 5631 5632 return 0; 5633} 5634EOF 5635if compile_prog "" "" ; then 5636 cpuid_h=yes 5637fi 5638 5639########################################## 5640# avx2 optimization requirement check 5641# 5642# There is no point enabling this if cpuid.h is not usable, 5643# since we won't be able to select the new routines. 5644 5645if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5646 cat > $TMPC << EOF 5647#pragma GCC push_options 5648#pragma GCC target("avx2") 5649#include <cpuid.h> 5650#include <immintrin.h> 5651static int bar(void *a) { 5652 __m256i x = *(__m256i *)a; 5653 return _mm256_testz_si256(x, x); 5654} 5655int main(int argc, char *argv[]) { return bar(argv[0]); } 5656EOF 5657 if compile_object "" ; then 5658 avx2_opt="yes" 5659 else 5660 avx2_opt="no" 5661 fi 5662fi 5663 5664########################################## 5665# avx512f optimization requirement check 5666# 5667# There is no point enabling this if cpuid.h is not usable, 5668# since we won't be able to select the new routines. 5669# by default, it is turned off. 5670# if user explicitly want to enable it, check environment 5671 5672if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 5673 cat > $TMPC << EOF 5674#pragma GCC push_options 5675#pragma GCC target("avx512f") 5676#include <cpuid.h> 5677#include <immintrin.h> 5678static int bar(void *a) { 5679 __m512i x = *(__m512i *)a; 5680 return _mm512_test_epi64_mask(x, x); 5681} 5682int main(int argc, char *argv[]) 5683{ 5684 return bar(argv[0]); 5685} 5686EOF 5687 if ! compile_object "" ; then 5688 avx512f_opt="no" 5689 fi 5690else 5691 avx512f_opt="no" 5692fi 5693 5694######################################## 5695# check if __[u]int128_t is usable. 5696 5697int128=no 5698cat > $TMPC << EOF 5699__int128_t a; 5700__uint128_t b; 5701int main (void) { 5702 a = a + b; 5703 b = a * b; 5704 a = a * a; 5705 return 0; 5706} 5707EOF 5708if compile_prog "" "" ; then 5709 int128=yes 5710fi 5711 5712######################################### 5713# See if 128-bit atomic operations are supported. 5714 5715atomic128=no 5716if test "$int128" = "yes"; then 5717 cat > $TMPC << EOF 5718int main(void) 5719{ 5720 unsigned __int128 x = 0, y = 0; 5721 y = __atomic_load_16(&x, 0); 5722 __atomic_store_16(&x, y, 0); 5723 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5724 return 0; 5725} 5726EOF 5727 if compile_prog "" "" ; then 5728 atomic128=yes 5729 fi 5730fi 5731 5732cmpxchg128=no 5733if test "$int128" = yes && test "$atomic128" = no; then 5734 cat > $TMPC << EOF 5735int main(void) 5736{ 5737 unsigned __int128 x = 0, y = 0; 5738 __sync_val_compare_and_swap_16(&x, y, x); 5739 return 0; 5740} 5741EOF 5742 if compile_prog "" "" ; then 5743 cmpxchg128=yes 5744 fi 5745fi 5746 5747######################################### 5748# See if 64-bit atomic operations are supported. 5749# Note that without __atomic builtins, we can only 5750# assume atomic loads/stores max at pointer size. 5751 5752cat > $TMPC << EOF 5753#include <stdint.h> 5754int main(void) 5755{ 5756 uint64_t x = 0, y = 0; 5757#ifdef __ATOMIC_RELAXED 5758 y = __atomic_load_8(&x, 0); 5759 __atomic_store_8(&x, y, 0); 5760 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5761 __atomic_exchange_8(&x, y, 0); 5762 __atomic_fetch_add_8(&x, y, 0); 5763#else 5764 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5765 __sync_lock_test_and_set(&x, y); 5766 __sync_val_compare_and_swap(&x, y, 0); 5767 __sync_fetch_and_add(&x, y); 5768#endif 5769 return 0; 5770} 5771EOF 5772if compile_prog "" "" ; then 5773 atomic64=yes 5774fi 5775 5776######################################### 5777# See if --dynamic-list is supported by the linker 5778ld_dynamic_list="no" 5779if test "$static" = "no" ; then 5780 cat > $TMPTXT <<EOF 5781{ 5782 foo; 5783}; 5784EOF 5785 5786 cat > $TMPC <<EOF 5787#include <stdio.h> 5788void foo(void); 5789 5790void foo(void) 5791{ 5792 printf("foo\n"); 5793} 5794 5795int main(void) 5796{ 5797 foo(); 5798 return 0; 5799} 5800EOF 5801 5802 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 5803 ld_dynamic_list="yes" 5804 fi 5805fi 5806 5807######################################### 5808# See if -exported_symbols_list is supported by the linker 5809 5810ld_exported_symbols_list="no" 5811if test "$static" = "no" ; then 5812 cat > $TMPTXT <<EOF 5813 _foo 5814EOF 5815 5816 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 5817 ld_exported_symbols_list="yes" 5818 fi 5819fi 5820 5821if test "$plugins" = "yes" && 5822 test "$ld_dynamic_list" = "no" && 5823 test "$ld_exported_symbols_list" = "no" ; then 5824 error_exit \ 5825 "Plugin support requires dynamic linking and specifying a set of symbols " \ 5826 "that are exported to plugins. Unfortunately your linker doesn't " \ 5827 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 5828 "for this purpose. You can't build with --static." 5829fi 5830 5831######################################## 5832# See if __attribute__((alias)) is supported. 5833# This false for Xcode 9, but has been remedied for Xcode 10. 5834# Unfortunately, travis uses Xcode 9 by default. 5835 5836attralias=no 5837cat > $TMPC << EOF 5838int x = 1; 5839extern const int y __attribute__((alias("x"))); 5840int main(void) { return 0; } 5841EOF 5842if compile_prog "" "" ; then 5843 attralias=yes 5844fi 5845 5846######################################## 5847# check if getauxval is available. 5848 5849getauxval=no 5850cat > $TMPC << EOF 5851#include <sys/auxv.h> 5852int main(void) { 5853 return getauxval(AT_HWCAP) == 0; 5854} 5855EOF 5856if compile_prog "" "" ; then 5857 getauxval=yes 5858fi 5859 5860######################################## 5861# check if ccache is interfering with 5862# semantic analysis of macros 5863 5864unset CCACHE_CPP2 5865ccache_cpp2=no 5866cat > $TMPC << EOF 5867static const int Z = 1; 5868#define fn() ({ Z; }) 5869#define TAUT(X) ((X) == Z) 5870#define PAREN(X, Y) (X == Y) 5871#define ID(X) (X) 5872int main(int argc, char *argv[]) 5873{ 5874 int x = 0, y = 0; 5875 x = ID(x); 5876 x = fn(); 5877 fn(); 5878 if (PAREN(x, y)) return 0; 5879 if (TAUT(Z)) return 0; 5880 return 0; 5881} 5882EOF 5883 5884if ! compile_object "-Werror"; then 5885 ccache_cpp2=yes 5886fi 5887 5888################################################# 5889# clang does not support glibc + FORTIFY_SOURCE. 5890 5891if test "$fortify_source" != "no"; then 5892 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5893 fortify_source="no"; 5894 elif test -n "$cxx" && has $cxx && 5895 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5896 fortify_source="no"; 5897 else 5898 fortify_source="yes" 5899 fi 5900fi 5901 5902############################################### 5903# Check if copy_file_range is provided by glibc 5904have_copy_file_range=no 5905cat > $TMPC << EOF 5906#include <unistd.h> 5907int main(void) { 5908 copy_file_range(0, NULL, 0, NULL, 0, 0); 5909 return 0; 5910} 5911EOF 5912if compile_prog "" "" ; then 5913 have_copy_file_range=yes 5914fi 5915 5916########################################## 5917# check if struct fsxattr is available via linux/fs.h 5918 5919have_fsxattr=no 5920cat > $TMPC << EOF 5921#include <linux/fs.h> 5922struct fsxattr foo; 5923int main(void) { 5924 return 0; 5925} 5926EOF 5927if compile_prog "" "" ; then 5928 have_fsxattr=yes 5929fi 5930 5931########################################## 5932# check for usable membarrier system call 5933if test "$membarrier" = "yes"; then 5934 have_membarrier=no 5935 if test "$mingw32" = "yes" ; then 5936 have_membarrier=yes 5937 elif test "$linux" = "yes" ; then 5938 cat > $TMPC << EOF 5939 #include <linux/membarrier.h> 5940 #include <sys/syscall.h> 5941 #include <unistd.h> 5942 #include <stdlib.h> 5943 int main(void) { 5944 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5945 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5946 exit(0); 5947 } 5948EOF 5949 if compile_prog "" "" ; then 5950 have_membarrier=yes 5951 fi 5952 fi 5953 if test "$have_membarrier" = "no"; then 5954 feature_not_found "membarrier" "membarrier system call not available" 5955 fi 5956else 5957 # Do not enable it by default even for Mingw32, because it doesn't 5958 # work on Wine. 5959 membarrier=no 5960fi 5961 5962########################################## 5963# check if rtnetlink.h exists and is useful 5964have_rtnetlink=no 5965cat > $TMPC << EOF 5966#include <linux/rtnetlink.h> 5967int main(void) { 5968 return IFLA_PROTO_DOWN; 5969} 5970EOF 5971if compile_prog "" "" ; then 5972 have_rtnetlink=yes 5973fi 5974 5975########################################## 5976# check for usable AF_VSOCK environment 5977have_af_vsock=no 5978cat > $TMPC << EOF 5979#include <errno.h> 5980#include <sys/types.h> 5981#include <sys/socket.h> 5982#if !defined(AF_VSOCK) 5983# error missing AF_VSOCK flag 5984#endif 5985#include <linux/vm_sockets.h> 5986int main(void) { 5987 int sock, ret; 5988 struct sockaddr_vm svm; 5989 socklen_t len = sizeof(svm); 5990 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5991 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5992 if ((ret == -1) && (errno == ENOTCONN)) { 5993 return 0; 5994 } 5995 return -1; 5996} 5997EOF 5998if compile_prog "" "" ; then 5999 have_af_vsock=yes 6000fi 6001 6002########################################## 6003# check for usable AF_ALG environment 6004have_afalg=no 6005cat > $TMPC << EOF 6006#include <errno.h> 6007#include <sys/types.h> 6008#include <sys/socket.h> 6009#include <linux/if_alg.h> 6010int main(void) { 6011 int sock; 6012 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 6013 return sock; 6014} 6015EOF 6016if compile_prog "" "" ; then 6017 have_afalg=yes 6018fi 6019if test "$crypto_afalg" = "yes" 6020then 6021 if test "$have_afalg" != "yes" 6022 then 6023 error_exit "AF_ALG requested but could not be detected" 6024 fi 6025fi 6026 6027 6028################################################# 6029# Check to see if we have the Hypervisor framework 6030if [ "$darwin" = "yes" ] ; then 6031 cat > $TMPC << EOF 6032#include <Hypervisor/hv.h> 6033int main() { return 0;} 6034EOF 6035 if ! compile_object ""; then 6036 hvf='no' 6037 else 6038 hvf='yes' 6039 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS" 6040 fi 6041fi 6042 6043########################################## 6044# check for sysmacros.h 6045 6046have_sysmacros=no 6047cat > $TMPC << EOF 6048#include <sys/sysmacros.h> 6049int main(void) { 6050 return makedev(0, 0); 6051} 6052EOF 6053if compile_prog "" "" ; then 6054 have_sysmacros=yes 6055fi 6056 6057########################################## 6058# check for _Static_assert() 6059 6060have_static_assert=no 6061cat > $TMPC << EOF 6062_Static_assert(1, "success"); 6063int main(void) { 6064 return 0; 6065} 6066EOF 6067if compile_prog "" "" ; then 6068 have_static_assert=yes 6069fi 6070 6071########################################## 6072# check for utmpx.h, it is missing e.g. on OpenBSD 6073 6074have_utmpx=no 6075cat > $TMPC << EOF 6076#include <utmpx.h> 6077struct utmpx user_info; 6078int main(void) { 6079 return 0; 6080} 6081EOF 6082if compile_prog "" "" ; then 6083 have_utmpx=yes 6084fi 6085 6086########################################## 6087# check for getrandom() 6088 6089have_getrandom=no 6090cat > $TMPC << EOF 6091#include <sys/random.h> 6092int main(void) { 6093 return getrandom(0, 0, GRND_NONBLOCK); 6094} 6095EOF 6096if compile_prog "" "" ; then 6097 have_getrandom=yes 6098fi 6099 6100########################################## 6101# checks for sanitizers 6102 6103have_asan=no 6104have_ubsan=no 6105have_asan_iface_h=no 6106have_asan_iface_fiber=no 6107 6108if test "$sanitizers" = "yes" ; then 6109 write_c_skeleton 6110 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 6111 have_asan=yes 6112 fi 6113 6114 # we could use a simple skeleton for flags checks, but this also 6115 # detect the static linking issue of ubsan, see also: 6116 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 6117 cat > $TMPC << EOF 6118#include <stdlib.h> 6119int main(void) { 6120 void *tmp = malloc(10); 6121 if (tmp != NULL) { 6122 return *(int *)(tmp + 2); 6123 } 6124 return 1; 6125} 6126EOF 6127 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 6128 have_ubsan=yes 6129 fi 6130 6131 if check_include "sanitizer/asan_interface.h" ; then 6132 have_asan_iface_h=yes 6133 fi 6134 6135 cat > $TMPC << EOF 6136#include <sanitizer/asan_interface.h> 6137int main(void) { 6138 __sanitizer_start_switch_fiber(0, 0, 0); 6139 return 0; 6140} 6141EOF 6142 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 6143 have_asan_iface_fiber=yes 6144 fi 6145fi 6146 6147########################################## 6148# checks for fuzzer 6149if test "$fuzzing" = "yes" ; then 6150 write_c_fuzzer_skeleton 6151 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then 6152 have_fuzzer=yes 6153 else 6154 error_exit "Your compiler doesn't support -fsanitize=fuzzer" 6155 exit 1 6156 fi 6157fi 6158 6159# Thread sanitizer is, for now, much noisier than the other sanitizers; 6160# keep it separate until that is not the case. 6161if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 6162 error_exit "TSAN is not supported with other sanitiziers." 6163fi 6164have_tsan=no 6165have_tsan_iface_fiber=no 6166if test "$tsan" = "yes" ; then 6167 write_c_skeleton 6168 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6169 have_tsan=yes 6170 fi 6171 cat > $TMPC << EOF 6172#include <sanitizer/tsan_interface.h> 6173int main(void) { 6174 __tsan_create_fiber(0); 6175 return 0; 6176} 6177EOF 6178 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6179 have_tsan_iface_fiber=yes 6180 fi 6181fi 6182 6183########################################## 6184# check for libpmem 6185 6186if test "$libpmem" != "no"; then 6187 if $pkg_config --exists "libpmem"; then 6188 libpmem="yes" 6189 libpmem_libs=$($pkg_config --libs libpmem) 6190 libpmem_cflags=$($pkg_config --cflags libpmem) 6191 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 6192 else 6193 if test "$libpmem" = "yes" ; then 6194 feature_not_found "libpmem" "Install nvml or pmdk" 6195 fi 6196 libpmem="no" 6197 fi 6198fi 6199 6200########################################## 6201# check for libdaxctl 6202 6203if test "$libdaxctl" != "no"; then 6204 if $pkg_config --atleast-version=57 "libdaxctl"; then 6205 libdaxctl="yes" 6206 libdaxctl_libs=$($pkg_config --libs libdaxctl) 6207 libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 6208 QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags" 6209 else 6210 if test "$libdaxctl" = "yes" ; then 6211 feature_not_found "libdaxctl" "Install libdaxctl" 6212 fi 6213 libdaxctl="no" 6214 fi 6215fi 6216 6217########################################## 6218# check for slirp 6219 6220# slirp is only required when building softmmu targets 6221if test -z "$slirp" -a "$softmmu" != "yes" ; then 6222 slirp="no" 6223fi 6224 6225case "$slirp" in 6226 "" | yes) 6227 if $pkg_config slirp; then 6228 slirp=system 6229 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 6230 slirp=git 6231 elif test -e "${source_path}/slirp/Makefile" ; then 6232 slirp=internal 6233 elif test -z "$slirp" ; then 6234 slirp=no 6235 else 6236 feature_not_found "slirp" "Install slirp devel or git submodule" 6237 fi 6238 ;; 6239 6240 system) 6241 if ! $pkg_config slirp; then 6242 feature_not_found "slirp" "Install slirp devel" 6243 fi 6244 ;; 6245esac 6246 6247case "$slirp" in 6248 git | internal) 6249 if test "$slirp" = git; then 6250 git_submodules="${git_submodules} slirp" 6251 fi 6252 mkdir -p slirp 6253 slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src" 6254 slirp_libs="-L$PWD/slirp -lslirp" 6255 if test "$mingw32" = "yes" ; then 6256 slirp_libs="$slirp_libs -lws2_32 -liphlpapi" 6257 fi 6258 ;; 6259 6260 system) 6261 slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 6262 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 6263 slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 6264 ;; 6265 6266 no) 6267 ;; 6268 *) 6269 error_exit "Unknown state for slirp: $slirp" 6270 ;; 6271esac 6272 6273########################################## 6274# check for usable __NR_keyctl syscall 6275 6276if test "$linux" = "yes" ; then 6277 6278 have_keyring=no 6279 cat > $TMPC << EOF 6280#include <errno.h> 6281#include <asm/unistd.h> 6282#include <linux/keyctl.h> 6283#include <unistd.h> 6284int main(void) { 6285 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 6286} 6287EOF 6288 if compile_prog "" "" ; then 6289 have_keyring=yes 6290 fi 6291fi 6292if test "$secret_keyring" != "no" 6293then 6294 if test "$have_keyring" = "yes" 6295 then 6296 secret_keyring=yes 6297 else 6298 if test "$secret_keyring" = "yes" 6299 then 6300 error_exit "syscall __NR_keyctl requested, \ 6301but not implemented on your system" 6302 else 6303 secret_keyring=no 6304 fi 6305 fi 6306fi 6307 6308########################################## 6309# check for usable keyutils.h 6310 6311if test "$linux" = "yes" ; then 6312 6313 have_keyutils=no 6314 cat > $TMPC << EOF 6315#include <errno.h> 6316#include <asm/unistd.h> 6317#include <unistd.h> 6318#include <sys/types.h> 6319#include <keyutils.h> 6320int main(void) { 6321 return request_key("user", NULL, NULL, 0); 6322} 6323EOF 6324 if compile_prog "" "-lkeyutils"; then 6325 have_keyutils=yes 6326 fi 6327fi 6328 6329 6330########################################## 6331# End of CC checks 6332# After here, no more $cc or $ld runs 6333 6334write_c_skeleton 6335 6336if test "$gcov" = "yes" ; then 6337 : 6338elif test "$fortify_source" = "yes" ; then 6339 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 6340 debug=no 6341fi 6342if test "$debug_info" = "yes"; then 6343 CFLAGS="-g $CFLAGS" 6344 LDFLAGS="-g $LDFLAGS" 6345fi 6346if test "$debug" = "no"; then 6347 CFLAGS="-O2 $CFLAGS" 6348fi 6349 6350case "$ARCH" in 6351alpha) 6352 # Ensure there's only a single GP 6353 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 6354;; 6355esac 6356 6357if test "$gprof" = "yes" ; then 6358 QEMU_CFLAGS="-p $QEMU_CFLAGS" 6359 QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 6360fi 6361 6362if test "$have_asan" = "yes"; then 6363 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 6364 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 6365 if test "$have_asan_iface_h" = "no" ; then 6366 echo "ASAN build enabled, but ASAN header missing." \ 6367 "Without code annotation, the report may be inferior." 6368 elif test "$have_asan_iface_fiber" = "no" ; then 6369 echo "ASAN build enabled, but ASAN header is too old." \ 6370 "Without code annotation, the report may be inferior." 6371 fi 6372fi 6373if test "$have_tsan" = "yes" ; then 6374 if test "$have_tsan_iface_fiber" = "yes" ; then 6375 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 6376 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 6377 else 6378 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 6379 fi 6380elif test "$tsan" = "yes" ; then 6381 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 6382fi 6383if test "$have_ubsan" = "yes"; then 6384 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 6385 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 6386fi 6387 6388########################################## 6389# Do we have libnfs 6390if test "$libnfs" != "no" ; then 6391 if $pkg_config --atleast-version=1.9.3 libnfs; then 6392 libnfs="yes" 6393 libnfs_libs=$($pkg_config --libs libnfs) 6394 else 6395 if test "$libnfs" = "yes" ; then 6396 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 6397 fi 6398 libnfs="no" 6399 fi 6400fi 6401 6402########################################## 6403# Do we have libudev 6404if test "$libudev" != "no" ; then 6405 if $pkg_config libudev && test "$static" != "yes"; then 6406 libudev="yes" 6407 libudev_libs=$($pkg_config --libs libudev) 6408 else 6409 libudev="no" 6410 fi 6411fi 6412 6413# Now we've finished running tests it's OK to add -Werror to the compiler flags 6414if test "$werror" = "yes"; then 6415 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 6416fi 6417 6418# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 6419if test "$solaris" = "no" && test "$tsan" = "no"; then 6420 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 6421 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 6422 fi 6423fi 6424 6425# test if pod2man has --utf8 option 6426if pod2man --help | grep -q utf8; then 6427 POD2MAN="pod2man --utf8" 6428else 6429 POD2MAN="pod2man" 6430fi 6431 6432# Use ASLR, no-SEH and DEP if available 6433if test "$mingw32" = "yes" ; then 6434 for flag in --dynamicbase --no-seh --nxcompat; do 6435 if ld_has $flag ; then 6436 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 6437 fi 6438 done 6439fi 6440 6441# Disable OpenBSD W^X if available 6442if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then 6443 cat > $TMPC <<EOF 6444 int main(void) { return 0; } 6445EOF 6446 wx_ldflags="-Wl,-z,wxneeded" 6447 if compile_prog "" "$wx_ldflags"; then 6448 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" 6449 fi 6450fi 6451 6452qemu_confdir="$sysconfdir/$qemu_suffix" 6453qemu_moddir="$libdir/$qemu_suffix" 6454qemu_datadir="$datadir/$qemu_suffix" 6455qemu_docdir="$docdir/$qemu_suffix" 6456qemu_localedir="$datadir/locale" 6457qemu_icondir="$datadir/icons" 6458qemu_desktopdir="$datadir/applications" 6459 6460# We can only support ivshmem if we have eventfd 6461if [ "$eventfd" = "yes" ]; then 6462 ivshmem=yes 6463fi 6464 6465if test "$softmmu" = yes ; then 6466 if test "$linux" = yes; then 6467 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 6468 virtfs=yes 6469 else 6470 if test "$virtfs" = yes; then 6471 error_exit "VirtFS requires libcap-ng devel and libattr devel" 6472 fi 6473 virtfs=no 6474 fi 6475 if test "$mpath" != no && test "$mpathpersist" = yes ; then 6476 mpath=yes 6477 else 6478 if test "$mpath" = yes; then 6479 error_exit "Multipath requires libmpathpersist devel" 6480 fi 6481 mpath=no 6482 fi 6483 else 6484 if test "$virtfs" = yes; then 6485 error_exit "VirtFS is supported only on Linux" 6486 fi 6487 virtfs=no 6488 if test "$mpath" = yes; then 6489 error_exit "Multipath is supported only on Linux" 6490 fi 6491 mpath=no 6492 fi 6493fi 6494 6495# Probe for guest agent support/options 6496 6497if [ "$guest_agent" != "no" ]; then 6498 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6499 guest_agent=no 6500 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6501 guest_agent=yes 6502 elif [ "$guest_agent" != yes ]; then 6503 guest_agent=no 6504 else 6505 error_exit "Guest agent is not supported on this platform" 6506 fi 6507fi 6508 6509# Guest agent Window MSI package 6510 6511if test "$guest_agent" != yes; then 6512 if test "$guest_agent_msi" = yes; then 6513 error_exit "MSI guest agent package requires guest agent enabled" 6514 fi 6515 guest_agent_msi=no 6516elif test "$mingw32" != "yes"; then 6517 if test "$guest_agent_msi" = "yes"; then 6518 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6519 fi 6520 guest_agent_msi=no 6521elif ! has wixl; then 6522 if test "$guest_agent_msi" = "yes"; then 6523 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6524 fi 6525 guest_agent_msi=no 6526else 6527 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6528 # disabled explicitly 6529 if test "$guest_agent_msi" != "no"; then 6530 guest_agent_msi=yes 6531 fi 6532fi 6533 6534if test "$guest_agent_msi" = "yes"; then 6535 if test "$guest_agent_with_vss" = "yes"; then 6536 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6537 fi 6538 6539 if test "$QEMU_GA_MANUFACTURER" = ""; then 6540 QEMU_GA_MANUFACTURER=QEMU 6541 fi 6542 6543 if test "$QEMU_GA_DISTRO" = ""; then 6544 QEMU_GA_DISTRO=Linux 6545 fi 6546 6547 if test "$QEMU_GA_VERSION" = ""; then 6548 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6549 fi 6550 6551 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6552 6553 case "$cpu" in 6554 x86_64) 6555 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6556 ;; 6557 i386) 6558 QEMU_GA_MSI_ARCH="-D Arch=32" 6559 ;; 6560 *) 6561 error_exit "CPU $cpu not supported for building installation package" 6562 ;; 6563 esac 6564fi 6565 6566# Mac OS X ships with a broken assembler 6567roms= 6568if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6569 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6570 test "$softmmu" = yes ; then 6571 # Different host OS linkers have different ideas about the name of the ELF 6572 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6573 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6574 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6575 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6576 ld_i386_emulation="$emu" 6577 roms="optionrom" 6578 break 6579 fi 6580 done 6581fi 6582 6583# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6584if test "$cpu" = "s390x" ; then 6585 write_c_skeleton 6586 if compile_prog "-march=z900" ""; then 6587 roms="$roms s390-ccw" 6588 # SLOF is required for building the s390-ccw firmware on s390x, 6589 # since it is using the libnet code from SLOF for network booting. 6590 if test -e "${source_path}/.git" ; then 6591 git_submodules="${git_submodules} roms/SLOF" 6592 fi 6593 fi 6594fi 6595 6596# Check that the C++ compiler exists and works with the C compiler. 6597# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6598if has $cxx; then 6599 cat > $TMPC <<EOF 6600int c_function(void); 6601int main(void) { return c_function(); } 6602EOF 6603 6604 compile_object 6605 6606 cat > $TMPCXX <<EOF 6607extern "C" { 6608 int c_function(void); 6609} 6610int c_function(void) { return 42; } 6611EOF 6612 6613 update_cxxflags 6614 6615 if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 6616 # C++ compiler $cxx works ok with C compiler $cc 6617 : 6618 else 6619 echo "C++ compiler $cxx does not work with C compiler $cc" 6620 echo "Disabling C++ specific optional code" 6621 cxx= 6622 fi 6623else 6624 echo "No C++ compiler available; disabling C++ specific optional code" 6625 cxx= 6626fi 6627 6628echo_version() { 6629 if test "$1" = "yes" ; then 6630 echo "($2)" 6631 fi 6632} 6633 6634# prepend ftd flags after all config tests are done 6635QEMU_CFLAGS="$fdt_cflags $QEMU_CFLAGS" 6636QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 6637 6638config_host_mak="config-host.mak" 6639 6640echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6641 6642echo "# Automatically generated by configure - do not modify" > $config_host_mak 6643echo >> $config_host_mak 6644 6645echo all: >> $config_host_mak 6646echo "prefix=$prefix" >> $config_host_mak 6647echo "bindir=$bindir" >> $config_host_mak 6648echo "libdir=$libdir" >> $config_host_mak 6649echo "libexecdir=$libexecdir" >> $config_host_mak 6650echo "includedir=$includedir" >> $config_host_mak 6651echo "sysconfdir=$sysconfdir" >> $config_host_mak 6652echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6653echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6654echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6655echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6656if test "$mingw32" = "no" ; then 6657 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6658fi 6659echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6660echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6661echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 6662echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 6663echo "GIT=$git" >> $config_host_mak 6664echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6665echo "GIT_UPDATE=$git_update" >> $config_host_mak 6666 6667echo "ARCH=$ARCH" >> $config_host_mak 6668 6669if test "$default_devices" = "yes" ; then 6670 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 6671else 6672 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 6673fi 6674if test "$debug_tcg" = "yes" ; then 6675 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6676fi 6677if test "$strip_opt" = "yes" ; then 6678 echo "STRIP=${strip}" >> $config_host_mak 6679fi 6680if test "$bigendian" = "yes" ; then 6681 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6682fi 6683if test "$mingw32" = "yes" ; then 6684 echo "CONFIG_WIN32=y" >> $config_host_mak 6685 rc_version=$(cat $source_path/VERSION) 6686 version_major=${rc_version%%.*} 6687 rc_version=${rc_version#*.} 6688 version_minor=${rc_version%%.*} 6689 rc_version=${rc_version#*.} 6690 version_subminor=${rc_version%%.*} 6691 version_micro=0 6692 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6693 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6694 if test "$guest_agent_with_vss" = "yes" ; then 6695 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6696 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6697 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6698 fi 6699 if test "$guest_agent_ntddscsi" = "yes" ; then 6700 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 6701 fi 6702 if test "$guest_agent_msi" = "yes"; then 6703 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6704 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6705 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6706 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6707 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6708 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6709 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6710 fi 6711else 6712 echo "CONFIG_POSIX=y" >> $config_host_mak 6713fi 6714 6715if test "$linux" = "yes" ; then 6716 echo "CONFIG_LINUX=y" >> $config_host_mak 6717fi 6718 6719if test "$darwin" = "yes" ; then 6720 echo "CONFIG_DARWIN=y" >> $config_host_mak 6721fi 6722 6723if test "$solaris" = "yes" ; then 6724 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6725fi 6726if test "$haiku" = "yes" ; then 6727 echo "CONFIG_HAIKU=y" >> $config_host_mak 6728fi 6729if test "$static" = "yes" ; then 6730 echo "CONFIG_STATIC=y" >> $config_host_mak 6731fi 6732if test "$profiler" = "yes" ; then 6733 echo "CONFIG_PROFILER=y" >> $config_host_mak 6734fi 6735if test "$want_tools" = "yes" ; then 6736 echo "CONFIG_TOOLS=y" >> $config_host_mak 6737fi 6738if test "$guest_agent" = "yes" ; then 6739 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 6740fi 6741if test "$slirp" != "no"; then 6742 echo "CONFIG_SLIRP=y" >> $config_host_mak 6743 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6744 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 6745 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 6746fi 6747subdirs= 6748if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 6749 subdirs="$subdirs slirp" 6750fi 6751if test "$vde" = "yes" ; then 6752 echo "CONFIG_VDE=y" >> $config_host_mak 6753 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6754fi 6755if test "$netmap" = "yes" ; then 6756 echo "CONFIG_NETMAP=y" >> $config_host_mak 6757fi 6758if test "$l2tpv3" = "yes" ; then 6759 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6760fi 6761if test "$gprof" = "yes" ; then 6762 echo "CONFIG_GPROF=y" >> $config_host_mak 6763fi 6764if test "$cap_ng" = "yes" ; then 6765 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 6766 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak 6767fi 6768echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6769for drv in $audio_drv_list; do 6770 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6771 echo "$def=y" >> $config_host_mak 6772done 6773if test "$alsa" = "yes" ; then 6774 echo "CONFIG_ALSA=y" >> $config_host_mak 6775fi 6776echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6777echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak 6778if test "$libpulse" = "yes" ; then 6779 echo "CONFIG_LIBPULSE=y" >> $config_host_mak 6780fi 6781echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6782echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak 6783echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6784echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6785echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6786if test "$libjack" = "yes" ; then 6787 echo "CONFIG_LIBJACK=y" >> $config_host_mak 6788fi 6789echo "JACK_LIBS=$jack_libs" >> $config_host_mak 6790if test "$audio_win_int" = "yes" ; then 6791 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6792fi 6793echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6794echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6795if test "$xfs" = "yes" ; then 6796 echo "CONFIG_XFS=y" >> $config_host_mak 6797fi 6798qemu_version=$(head $source_path/VERSION) 6799echo "PKGVERSION=$pkgversion" >>$config_host_mak 6800echo "SRC_PATH=$source_path" >> $config_host_mak 6801echo "TARGET_DIRS=$target_list" >> $config_host_mak 6802if [ "$docs" = "yes" ] ; then 6803 echo "BUILD_DOCS=yes" >> $config_host_mak 6804fi 6805if test "$modules" = "yes"; then 6806 # $shacmd can generate a hash started with digit, which the compiler doesn't 6807 # like as an symbol. So prefix it with an underscore 6808 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6809 echo "CONFIG_MODULES=y" >> $config_host_mak 6810fi 6811if test "$module_upgrades" = "yes"; then 6812 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 6813fi 6814if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 6815 echo "CONFIG_X11=y" >> $config_host_mak 6816 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6817 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6818fi 6819if test "$cocoa" = "yes" ; then 6820 echo "CONFIG_COCOA=y" >> $config_host_mak 6821fi 6822if test "$iconv" = "yes" ; then 6823 echo "CONFIG_ICONV=y" >> $config_host_mak 6824 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 6825 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 6826fi 6827if test "$curses" = "yes" ; then 6828 echo "CONFIG_CURSES=y" >> $config_host_mak 6829 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6830 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6831fi 6832if test "$pipe2" = "yes" ; then 6833 echo "CONFIG_PIPE2=y" >> $config_host_mak 6834fi 6835if test "$accept4" = "yes" ; then 6836 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6837fi 6838if test "$splice" = "yes" ; then 6839 echo "CONFIG_SPLICE=y" >> $config_host_mak 6840fi 6841if test "$eventfd" = "yes" ; then 6842 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6843fi 6844if test "$memfd" = "yes" ; then 6845 echo "CONFIG_MEMFD=y" >> $config_host_mak 6846fi 6847if test "$have_usbfs" = "yes" ; then 6848 echo "CONFIG_USBFS=y" >> $config_host_mak 6849fi 6850if test "$fallocate" = "yes" ; then 6851 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6852fi 6853if test "$fallocate_punch_hole" = "yes" ; then 6854 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6855fi 6856if test "$fallocate_zero_range" = "yes" ; then 6857 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6858fi 6859if test "$posix_fallocate" = "yes" ; then 6860 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6861fi 6862if test "$sync_file_range" = "yes" ; then 6863 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6864fi 6865if test "$fiemap" = "yes" ; then 6866 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6867fi 6868if test "$dup3" = "yes" ; then 6869 echo "CONFIG_DUP3=y" >> $config_host_mak 6870fi 6871if test "$ppoll" = "yes" ; then 6872 echo "CONFIG_PPOLL=y" >> $config_host_mak 6873fi 6874if test "$prctl_pr_set_timerslack" = "yes" ; then 6875 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6876fi 6877if test "$epoll" = "yes" ; then 6878 echo "CONFIG_EPOLL=y" >> $config_host_mak 6879fi 6880if test "$epoll_create1" = "yes" ; then 6881 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6882fi 6883if test "$sendfile" = "yes" ; then 6884 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6885fi 6886if test "$timerfd" = "yes" ; then 6887 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6888fi 6889if test "$setns" = "yes" ; then 6890 echo "CONFIG_SETNS=y" >> $config_host_mak 6891fi 6892if test "$clock_adjtime" = "yes" ; then 6893 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6894fi 6895if test "$syncfs" = "yes" ; then 6896 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6897fi 6898if test "$kcov" = "yes" ; then 6899 echo "CONFIG_KCOV=y" >> $config_host_mak 6900fi 6901if test "$inotify" = "yes" ; then 6902 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6903fi 6904if test "$inotify1" = "yes" ; then 6905 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6906fi 6907if test "$sem_timedwait" = "yes" ; then 6908 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6909fi 6910if test "$strchrnul" = "yes" ; then 6911 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6912fi 6913if test "$st_atim" = "yes" ; then 6914 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 6915fi 6916if test "$byteswap_h" = "yes" ; then 6917 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6918fi 6919if test "$bswap_h" = "yes" ; then 6920 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6921fi 6922if test "$curl" = "yes" ; then 6923 echo "CONFIG_CURL=y" >> $config_host_mak 6924 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6925 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6926fi 6927if test "$brlapi" = "yes" ; then 6928 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6929 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6930fi 6931if test "$gtk" = "yes" ; then 6932 echo "CONFIG_GTK=y" >> $config_host_mak 6933 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6934 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6935 if test "$gtk_gl" = "yes" ; then 6936 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6937 fi 6938fi 6939if test "$gio" = "yes" ; then 6940 echo "CONFIG_GIO=y" >> $config_host_mak 6941 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 6942 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 6943 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 6944fi 6945echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6946if test "$gnutls" = "yes" ; then 6947 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6948 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak 6949 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak 6950fi 6951if test "$gcrypt" = "yes" ; then 6952 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6953 if test "$gcrypt_hmac" = "yes" ; then 6954 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6955 fi 6956fi 6957if test "$nettle" = "yes" ; then 6958 echo "CONFIG_NETTLE=y" >> $config_host_mak 6959 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6960 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak 6961 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak 6962fi 6963if test "$qemu_private_xts" = "yes" ; then 6964 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 6965fi 6966if test "$tasn1" = "yes" ; then 6967 echo "CONFIG_TASN1=y" >> $config_host_mak 6968fi 6969if test "$auth_pam" = "yes" ; then 6970 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 6971fi 6972if test "$have_ifaddrs_h" = "yes" ; then 6973 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6974fi 6975if test "$have_drm_h" = "yes" ; then 6976 echo "HAVE_DRM_H=y" >> $config_host_mak 6977fi 6978if test "$have_broken_size_max" = "yes" ; then 6979 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6980fi 6981if test "$have_openpty" = "yes" ; then 6982 echo "HAVE_OPENPTY=y" >> $config_host_mak 6983fi 6984if test "$have_sys_signal_h" = "yes" ; then 6985 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak 6986fi 6987 6988# Work around a system header bug with some kernel/XFS header 6989# versions where they both try to define 'struct fsxattr': 6990# xfs headers will not try to redefine structs from linux headers 6991# if this macro is set. 6992if test "$have_fsxattr" = "yes" ; then 6993 echo "HAVE_FSXATTR=y" >> $config_host_mak 6994fi 6995if test "$have_copy_file_range" = "yes" ; then 6996 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6997fi 6998if test "$vte" = "yes" ; then 6999 echo "CONFIG_VTE=y" >> $config_host_mak 7000 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 7001 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 7002fi 7003if test "$virglrenderer" = "yes" ; then 7004 echo "CONFIG_VIRGL=y" >> $config_host_mak 7005 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 7006 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 7007fi 7008if test "$xen" = "yes" ; then 7009 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 7010 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 7011 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak 7012 echo "XEN_LIBS=$xen_libs" >> $config_host_mak 7013fi 7014if test "$linux_aio" = "yes" ; then 7015 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 7016fi 7017if test "$linux_io_uring" = "yes" ; then 7018 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 7019 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 7020 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 7021fi 7022if test "$attr" = "yes" ; then 7023 echo "CONFIG_ATTR=y" >> $config_host_mak 7024 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak 7025fi 7026if test "$libattr" = "yes" ; then 7027 echo "CONFIG_LIBATTR=y" >> $config_host_mak 7028fi 7029if test "$virtfs" = "yes" ; then 7030 echo "CONFIG_VIRTFS=y" >> $config_host_mak 7031fi 7032if test "$mpath" = "yes" ; then 7033 echo "CONFIG_MPATH=y" >> $config_host_mak 7034 if test "$mpathpersist_new_api" = "yes"; then 7035 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 7036 fi 7037fi 7038if test "$vhost_scsi" = "yes" ; then 7039 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 7040fi 7041if test "$vhost_net" = "yes" ; then 7042 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 7043fi 7044if test "$vhost_net_user" = "yes" ; then 7045 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 7046fi 7047if test "$vhost_net_vdpa" = "yes" ; then 7048 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 7049fi 7050if test "$vhost_crypto" = "yes" ; then 7051 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 7052fi 7053if test "$vhost_vsock" = "yes" ; then 7054 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 7055 if test "$vhost_user" = "yes" ; then 7056 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 7057 fi 7058fi 7059if test "$vhost_kernel" = "yes" ; then 7060 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 7061fi 7062if test "$vhost_user" = "yes" ; then 7063 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 7064fi 7065if test "$vhost_vdpa" = "yes" ; then 7066 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 7067fi 7068if test "$vhost_user_fs" = "yes" ; then 7069 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 7070fi 7071if test "$blobs" = "yes" ; then 7072 echo "INSTALL_BLOBS=yes" >> $config_host_mak 7073fi 7074if test "$iovec" = "yes" ; then 7075 echo "CONFIG_IOVEC=y" >> $config_host_mak 7076fi 7077if test "$preadv" = "yes" ; then 7078 echo "CONFIG_PREADV=y" >> $config_host_mak 7079fi 7080if test "$fdt" != "no" ; then 7081 echo "CONFIG_FDT=y" >> $config_host_mak 7082 echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak 7083 echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak 7084fi 7085if test "$membarrier" = "yes" ; then 7086 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 7087fi 7088if test "$signalfd" = "yes" ; then 7089 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 7090fi 7091if test "$optreset" = "yes" ; then 7092 echo "HAVE_OPTRESET=y" >> $config_host_mak 7093fi 7094if test "$tcg" = "yes"; then 7095 echo "CONFIG_TCG=y" >> $config_host_mak 7096 if test "$tcg_interpreter" = "yes" ; then 7097 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 7098 fi 7099fi 7100if test "$fdatasync" = "yes" ; then 7101 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 7102fi 7103if test "$madvise" = "yes" ; then 7104 echo "CONFIG_MADVISE=y" >> $config_host_mak 7105fi 7106if test "$posix_madvise" = "yes" ; then 7107 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 7108fi 7109if test "$posix_memalign" = "yes" ; then 7110 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 7111fi 7112if test "$spice" = "yes" ; then 7113 echo "CONFIG_SPICE=y" >> $config_host_mak 7114 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak 7115 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak 7116fi 7117 7118if test "$smartcard" = "yes" ; then 7119 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 7120 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 7121 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 7122fi 7123 7124if test "$libusb" = "yes" ; then 7125 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 7126 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 7127 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 7128fi 7129 7130if test "$usb_redir" = "yes" ; then 7131 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 7132 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 7133 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 7134fi 7135 7136if test "$opengl" = "yes" ; then 7137 echo "CONFIG_OPENGL=y" >> $config_host_mak 7138 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 7139 if test "$opengl_dmabuf" = "yes" ; then 7140 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 7141 fi 7142fi 7143 7144if test "$gbm" = "yes" ; then 7145 echo "CONFIG_GBM=y" >> $config_host_mak 7146 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 7147 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 7148fi 7149 7150 7151if test "$malloc_trim" = "yes" ; then 7152 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 7153fi 7154 7155if test "$avx2_opt" = "yes" ; then 7156 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 7157fi 7158 7159if test "$avx512f_opt" = "yes" ; then 7160 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 7161fi 7162 7163if test "$lzo" = "yes" ; then 7164 echo "CONFIG_LZO=y" >> $config_host_mak 7165 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak 7166fi 7167 7168if test "$snappy" = "yes" ; then 7169 echo "CONFIG_SNAPPY=y" >> $config_host_mak 7170 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak 7171fi 7172 7173if test "$bzip2" = "yes" ; then 7174 echo "CONFIG_BZIP2=y" >> $config_host_mak 7175 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 7176fi 7177 7178if test "$lzfse" = "yes" ; then 7179 echo "CONFIG_LZFSE=y" >> $config_host_mak 7180 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 7181fi 7182 7183if test "$zstd" = "yes" ; then 7184 echo "CONFIG_ZSTD=y" >> $config_host_mak 7185 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak 7186 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak 7187fi 7188 7189if test "$libiscsi" = "yes" ; then 7190 echo "CONFIG_LIBISCSI=y" >> $config_host_mak 7191 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 7192 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 7193fi 7194 7195if test "$libnfs" = "yes" ; then 7196 echo "CONFIG_LIBNFS=y" >> $config_host_mak 7197 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 7198fi 7199 7200if test "$seccomp" = "yes"; then 7201 echo "CONFIG_SECCOMP=y" >> $config_host_mak 7202 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 7203 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 7204fi 7205 7206# XXX: suppress that 7207if [ "$bsd" = "yes" ] ; then 7208 echo "CONFIG_BSD=y" >> $config_host_mak 7209fi 7210 7211if test "$localtime_r" = "yes" ; then 7212 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 7213fi 7214if test "$qom_cast_debug" = "yes" ; then 7215 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 7216fi 7217if test "$rbd" = "yes" ; then 7218 echo "CONFIG_RBD=y" >> $config_host_mak 7219 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 7220fi 7221 7222echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 7223if test "$coroutine_pool" = "yes" ; then 7224 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7225else 7226 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7227fi 7228 7229if test "$debug_stack_usage" = "yes" ; then 7230 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7231fi 7232 7233if test "$crypto_afalg" = "yes" ; then 7234 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7235fi 7236 7237if test "$open_by_handle_at" = "yes" ; then 7238 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7239fi 7240 7241if test "$linux_magic_h" = "yes" ; then 7242 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7243fi 7244 7245if test "$valgrind_h" = "yes" ; then 7246 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 7247fi 7248 7249if test "$have_asan_iface_fiber" = "yes" ; then 7250 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 7251fi 7252 7253if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 7254 echo "CONFIG_TSAN=y" >> $config_host_mak 7255fi 7256 7257if test "$has_environ" = "yes" ; then 7258 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 7259fi 7260 7261if test "$cpuid_h" = "yes" ; then 7262 echo "CONFIG_CPUID_H=y" >> $config_host_mak 7263fi 7264 7265if test "$int128" = "yes" ; then 7266 echo "CONFIG_INT128=y" >> $config_host_mak 7267fi 7268 7269if test "$atomic128" = "yes" ; then 7270 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 7271fi 7272 7273if test "$cmpxchg128" = "yes" ; then 7274 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 7275fi 7276 7277if test "$atomic64" = "yes" ; then 7278 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 7279fi 7280 7281if test "$attralias" = "yes" ; then 7282 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 7283fi 7284 7285if test "$getauxval" = "yes" ; then 7286 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 7287fi 7288 7289if test "$glusterfs" = "yes" ; then 7290 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak 7291 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 7292 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 7293fi 7294 7295if test "$glusterfs_xlator_opt" = "yes" ; then 7296 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 7297fi 7298 7299if test "$glusterfs_discard" = "yes" ; then 7300 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 7301fi 7302 7303if test "$glusterfs_fallocate" = "yes" ; then 7304 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 7305fi 7306 7307if test "$glusterfs_zerofill" = "yes" ; then 7308 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 7309fi 7310 7311if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 7312 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 7313fi 7314 7315if test "$glusterfs_iocb_has_stat" = "yes" ; then 7316 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 7317fi 7318 7319if test "$libssh" = "yes" ; then 7320 echo "CONFIG_LIBSSH=y" >> $config_host_mak 7321 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 7322 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 7323fi 7324 7325if test "$live_block_migration" = "yes" ; then 7326 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 7327fi 7328 7329if test "$tpm" = "yes"; then 7330 echo 'CONFIG_TPM=y' >> $config_host_mak 7331fi 7332 7333echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 7334if have_backend "nop"; then 7335 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 7336fi 7337if have_backend "simple"; then 7338 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 7339 # Set the appropriate trace file. 7340 trace_file="\"$trace_file-\" FMT_pid" 7341fi 7342if have_backend "log"; then 7343 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 7344fi 7345if have_backend "ust"; then 7346 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 7347 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak 7348 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak 7349fi 7350if have_backend "dtrace"; then 7351 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 7352 if test "$trace_backend_stap" = "yes" ; then 7353 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 7354 fi 7355fi 7356if have_backend "ftrace"; then 7357 if test "$linux" = "yes" ; then 7358 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 7359 else 7360 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 7361 fi 7362fi 7363if have_backend "syslog"; then 7364 if test "$posix_syslog" = "yes" ; then 7365 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 7366 else 7367 feature_not_found "syslog(trace backend)" "syslog not available" 7368 fi 7369fi 7370echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 7371 7372if test "$rdma" = "yes" ; then 7373 echo "CONFIG_RDMA=y" >> $config_host_mak 7374 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 7375fi 7376 7377if test "$pvrdma" = "yes" ; then 7378 echo "CONFIG_PVRDMA=y" >> $config_host_mak 7379fi 7380 7381if test "$have_rtnetlink" = "yes" ; then 7382 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 7383fi 7384 7385if test "$libxml2" = "yes" ; then 7386 echo "CONFIG_LIBXML2=y" >> $config_host_mak 7387 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 7388 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 7389fi 7390 7391if test "$replication" = "yes" ; then 7392 echo "CONFIG_REPLICATION=y" >> $config_host_mak 7393fi 7394 7395if test "$have_af_vsock" = "yes" ; then 7396 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 7397fi 7398 7399if test "$have_sysmacros" = "yes" ; then 7400 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 7401fi 7402 7403if test "$have_static_assert" = "yes" ; then 7404 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 7405fi 7406 7407if test "$have_utmpx" = "yes" ; then 7408 echo "HAVE_UTMPX=y" >> $config_host_mak 7409fi 7410if test "$have_getrandom" = "yes" ; then 7411 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 7412fi 7413if test "$ivshmem" = "yes" ; then 7414 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 7415fi 7416if test "$capstone" != "no" ; then 7417 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 7418 echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak 7419 echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak 7420fi 7421if test "$debug_mutex" = "yes" ; then 7422 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 7423fi 7424 7425# Hold two types of flag: 7426# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 7427# a thread we have a handle to 7428# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 7429# platform 7430if test "$pthread_setname_np_w_tid" = "yes" ; then 7431 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7432 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 7433elif test "$pthread_setname_np_wo_tid" = "yes" ; then 7434 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7435 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 7436fi 7437 7438if test "$libpmem" = "yes" ; then 7439 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 7440 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak 7441 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak 7442fi 7443 7444if test "$libdaxctl" = "yes" ; then 7445 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak 7446 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak 7447fi 7448 7449if test "$bochs" = "yes" ; then 7450 echo "CONFIG_BOCHS=y" >> $config_host_mak 7451fi 7452if test "$cloop" = "yes" ; then 7453 echo "CONFIG_CLOOP=y" >> $config_host_mak 7454fi 7455if test "$dmg" = "yes" ; then 7456 echo "CONFIG_DMG=y" >> $config_host_mak 7457fi 7458if test "$qcow1" = "yes" ; then 7459 echo "CONFIG_QCOW1=y" >> $config_host_mak 7460fi 7461if test "$vdi" = "yes" ; then 7462 echo "CONFIG_VDI=y" >> $config_host_mak 7463fi 7464if test "$vvfat" = "yes" ; then 7465 echo "CONFIG_VVFAT=y" >> $config_host_mak 7466fi 7467if test "$qed" = "yes" ; then 7468 echo "CONFIG_QED=y" >> $config_host_mak 7469fi 7470if test "$parallels" = "yes" ; then 7471 echo "CONFIG_PARALLELS=y" >> $config_host_mak 7472fi 7473if test "$sheepdog" = "yes" ; then 7474 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 7475fi 7476if test "$pty_h" = "yes" ; then 7477 echo "HAVE_PTY_H=y" >> $config_host_mak 7478fi 7479if test "$have_mlockall" = "yes" ; then 7480 echo "HAVE_MLOCKALL=y" >> $config_host_mak 7481fi 7482if test "$fuzzing" = "yes" ; then 7483 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" 7484fi 7485 7486if test "$plugins" = "yes" ; then 7487 echo "CONFIG_PLUGIN=y" >> $config_host_mak 7488 LIBS="-ldl $LIBS" 7489 # Copy the export object list to the build dir 7490 if test "$ld_dynamic_list" = "yes" ; then 7491 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 7492 ld_symbols=qemu-plugins-ld.symbols 7493 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 7494 elif test "$ld_exported_symbols_list" = "yes" ; then 7495 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 7496 ld64_symbols=qemu-plugins-ld64.symbols 7497 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 7498 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 7499 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 7500 else 7501 error_exit \ 7502 "If \$plugins=yes, either \$ld_dynamic_list or " \ 7503 "\$ld_exported_symbols_list should have been set to 'yes'." 7504 fi 7505fi 7506 7507if test -n "$gdb_bin" ; then 7508 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 7509fi 7510 7511if test "$secret_keyring" = "yes" ; then 7512 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 7513 if test "$have_keyutils" = "yes" ; then 7514 echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak 7515 fi 7516fi 7517 7518if test "$tcg_interpreter" = "yes"; then 7519 QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES" 7520elif test "$ARCH" = "sparc64" ; then 7521 QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES" 7522elif test "$ARCH" = "s390x" ; then 7523 QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES" 7524elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7525 QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES" 7526elif test "$ARCH" = "ppc64" ; then 7527 QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES" 7528elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7529 QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES" 7530else 7531 QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES" 7532fi 7533 7534echo "ROMS=$roms" >> $config_host_mak 7535echo "MAKE=$make" >> $config_host_mak 7536echo "INSTALL=$install" >> $config_host_mak 7537echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 7538echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 7539echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 7540echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 7541echo "PYTHON=$python" >> $config_host_mak 7542echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak 7543echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 7544echo "MESON=$meson" >> $config_host_mak 7545echo "CC=$cc" >> $config_host_mak 7546if $iasl -h > /dev/null 2>&1; then 7547 echo "CONFIG_IASL=$iasl" >> $config_host_mak 7548fi 7549echo "CXX=$cxx" >> $config_host_mak 7550echo "OBJCC=$objcc" >> $config_host_mak 7551echo "AR=$ar" >> $config_host_mak 7552echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 7553echo "AS=$as" >> $config_host_mak 7554echo "CCAS=$ccas" >> $config_host_mak 7555echo "CPP=$cpp" >> $config_host_mak 7556echo "OBJCOPY=$objcopy" >> $config_host_mak 7557echo "LD=$ld" >> $config_host_mak 7558echo "RANLIB=$ranlib" >> $config_host_mak 7559echo "NM=$nm" >> $config_host_mak 7560echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 7561echo "WINDRES=$windres" >> $config_host_mak 7562echo "CFLAGS=$CFLAGS" >> $config_host_mak 7563echo "CXXFLAGS=$CXXFLAGS" >> $config_host_mak 7564echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 7565echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 7566echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 7567echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 7568echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 7569echo "GLIB_LIBS=$glib_libs" >> $config_host_mak 7570if test "$sparse" = "yes" ; then 7571 echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 7572fi 7573echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 7574echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 7575echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 7576echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 7577echo "LIBS+=$LIBS" >> $config_host_mak 7578echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 7579echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 7580echo "EXESUF=$EXESUF" >> $config_host_mak 7581echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak 7582echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 7583echo "LIBS_QGA=$libs_qga" >> $config_host_mak 7584echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 7585echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 7586echo "POD2MAN=$POD2MAN" >> $config_host_mak 7587if test "$gcov" = "yes" ; then 7588 echo "CONFIG_GCOV=y" >> $config_host_mak 7589fi 7590 7591if test "$libudev" != "no"; then 7592 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 7593 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 7594fi 7595if test "$fuzzing" != "no"; then 7596 echo "CONFIG_FUZZ=y" >> $config_host_mak 7597fi 7598 7599if test "$edk2_blobs" = "yes" ; then 7600 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak 7601fi 7602 7603if test "$rng_none" = "yes"; then 7604 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 7605fi 7606 7607# use included Linux headers 7608if test "$linux" = "yes" ; then 7609 mkdir -p linux-headers 7610 case "$cpu" in 7611 i386|x86_64|x32) 7612 linux_arch=x86 7613 ;; 7614 ppc|ppc64|ppc64le) 7615 linux_arch=powerpc 7616 ;; 7617 s390x) 7618 linux_arch=s390 7619 ;; 7620 aarch64) 7621 linux_arch=arm64 7622 ;; 7623 mips64) 7624 linux_arch=mips 7625 ;; 7626 *) 7627 # For most CPUs the kernel architecture name and QEMU CPU name match. 7628 linux_arch="$cpu" 7629 ;; 7630 esac 7631 # For non-KVM architectures we will not have asm headers 7632 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 7633 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 7634 fi 7635fi 7636 7637for target in $target_list; do 7638target_dir="$target" 7639config_target_mak=$target_dir/config-target.mak 7640target_name=$(echo $target | cut -d '-' -f 1) 7641target_aligned_only="no" 7642case "$target_name" in 7643 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) 7644 target_aligned_only="yes" 7645 ;; 7646esac 7647target_bigendian="no" 7648case "$target_name" in 7649 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 7650 target_bigendian="yes" 7651 ;; 7652esac 7653target_softmmu="no" 7654target_user_only="no" 7655target_linux_user="no" 7656target_bsd_user="no" 7657case "$target" in 7658 ${target_name}-softmmu) 7659 target_softmmu="yes" 7660 ;; 7661 ${target_name}-linux-user) 7662 target_user_only="yes" 7663 target_linux_user="yes" 7664 ;; 7665 ${target_name}-bsd-user) 7666 target_user_only="yes" 7667 target_bsd_user="yes" 7668 ;; 7669 *) 7670 error_exit "Target '$target' not recognised" 7671 exit 1 7672 ;; 7673esac 7674 7675mkdir -p $target_dir 7676echo "# Automatically generated by configure - do not modify" > $config_target_mak 7677 7678bflt="no" 7679mttcg="no" 7680interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7681gdb_xml_files="" 7682 7683TARGET_ARCH="$target_name" 7684TARGET_BASE_ARCH="" 7685TARGET_ABI_DIR="" 7686TARGET_SYSTBL_ABI="" 7687TARGET_SYSTBL="" 7688 7689case "$target_name" in 7690 i386) 7691 mttcg="yes" 7692 gdb_xml_files="i386-32bit.xml" 7693 TARGET_SYSTBL_ABI=i386 7694 TARGET_SYSTBL=syscall_32.tbl 7695 ;; 7696 x86_64) 7697 TARGET_BASE_ARCH=i386 7698 TARGET_SYSTBL_ABI=common,64 7699 TARGET_SYSTBL=syscall_64.tbl 7700 mttcg="yes" 7701 gdb_xml_files="i386-64bit.xml" 7702 ;; 7703 alpha) 7704 mttcg="yes" 7705 TARGET_SYSTBL_ABI=common 7706 ;; 7707 arm|armeb) 7708 TARGET_ARCH=arm 7709 TARGET_SYSTBL_ABI=common,oabi 7710 bflt="yes" 7711 mttcg="yes" 7712 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml" 7713 ;; 7714 aarch64|aarch64_be) 7715 TARGET_ARCH=aarch64 7716 TARGET_BASE_ARCH=arm 7717 bflt="yes" 7718 mttcg="yes" 7719 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" 7720 ;; 7721 avr) 7722 gdb_xml_files="avr-cpu.xml" 7723 target_compiler=$cross_cc_avr 7724 ;; 7725 cris) 7726 ;; 7727 hppa) 7728 mttcg="yes" 7729 TARGET_SYSTBL_ABI=common,32 7730 ;; 7731 lm32) 7732 ;; 7733 m68k) 7734 bflt="yes" 7735 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml" 7736 TARGET_SYSTBL_ABI=common 7737 ;; 7738 microblaze|microblazeel) 7739 TARGET_ARCH=microblaze 7740 TARGET_SYSTBL_ABI=common 7741 mttcg="yes" 7742 bflt="yes" 7743 echo "TARGET_ABI32=y" >> $config_target_mak 7744 ;; 7745 mips|mipsel) 7746 mttcg="yes" 7747 TARGET_ARCH=mips 7748 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7749 TARGET_SYSTBL_ABI=o32 7750 TARGET_SYSTBL=syscall_o32.tbl 7751 ;; 7752 mipsn32|mipsn32el) 7753 mttcg="yes" 7754 TARGET_ARCH=mips64 7755 TARGET_BASE_ARCH=mips 7756 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7757 echo "TARGET_ABI32=y" >> $config_target_mak 7758 TARGET_SYSTBL_ABI=n32 7759 TARGET_SYSTBL=syscall_n32.tbl 7760 ;; 7761 mips64|mips64el) 7762 mttcg="no" 7763 TARGET_ARCH=mips64 7764 TARGET_BASE_ARCH=mips 7765 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7766 TARGET_SYSTBL_ABI=n64 7767 TARGET_SYSTBL=syscall_n64.tbl 7768 ;; 7769 moxie) 7770 ;; 7771 nios2) 7772 ;; 7773 or1k) 7774 TARGET_ARCH=openrisc 7775 TARGET_BASE_ARCH=openrisc 7776 ;; 7777 ppc) 7778 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7779 TARGET_SYSTBL_ABI=common,nospu,32 7780 ;; 7781 ppc64) 7782 TARGET_BASE_ARCH=ppc 7783 TARGET_ABI_DIR=ppc 7784 TARGET_SYSTBL_ABI=common,nospu,64 7785 mttcg=yes 7786 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7787 ;; 7788 ppc64le) 7789 TARGET_ARCH=ppc64 7790 TARGET_BASE_ARCH=ppc 7791 TARGET_ABI_DIR=ppc 7792 TARGET_SYSTBL_ABI=common,nospu,64 7793 mttcg=yes 7794 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7795 ;; 7796 ppc64abi32) 7797 TARGET_ARCH=ppc64 7798 TARGET_BASE_ARCH=ppc 7799 TARGET_ABI_DIR=ppc 7800 TARGET_SYSTBL_ABI=common,nospu,32 7801 echo "TARGET_ABI32=y" >> $config_target_mak 7802 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7803 ;; 7804 riscv32) 7805 TARGET_BASE_ARCH=riscv 7806 TARGET_ABI_DIR=riscv 7807 mttcg=yes 7808 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml" 7809 ;; 7810 riscv64) 7811 TARGET_BASE_ARCH=riscv 7812 TARGET_ABI_DIR=riscv 7813 mttcg=yes 7814 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml" 7815 ;; 7816 rx) 7817 TARGET_ARCH=rx 7818 bflt="yes" 7819 target_compiler=$cross_cc_rx 7820 gdb_xml_files="rx-core.xml" 7821 ;; 7822 sh4|sh4eb) 7823 TARGET_ARCH=sh4 7824 TARGET_SYSTBL_ABI=common 7825 bflt="yes" 7826 ;; 7827 sparc) 7828 TARGET_SYSTBL_ABI=common,32 7829 ;; 7830 sparc64) 7831 TARGET_BASE_ARCH=sparc 7832 TARGET_SYSTBL_ABI=common,64 7833 ;; 7834 sparc32plus) 7835 TARGET_ARCH=sparc64 7836 TARGET_BASE_ARCH=sparc 7837 TARGET_ABI_DIR=sparc 7838 TARGET_SYSTBL_ABI=common,32 7839 echo "TARGET_ABI32=y" >> $config_target_mak 7840 ;; 7841 s390x) 7842 TARGET_SYSTBL_ABI=common,64 7843 mttcg=yes 7844 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7845 ;; 7846 tilegx) 7847 ;; 7848 tricore) 7849 ;; 7850 unicore32) 7851 ;; 7852 xtensa|xtensaeb) 7853 TARGET_ARCH=xtensa 7854 TARGET_SYSTBL_ABI=common 7855 bflt="yes" 7856 mttcg="yes" 7857 ;; 7858 *) 7859 error_exit "Unsupported target CPU" 7860 ;; 7861esac 7862# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7863if [ "$TARGET_BASE_ARCH" = "" ]; then 7864 TARGET_BASE_ARCH=$TARGET_ARCH 7865fi 7866if [ "$TARGET_SYSTBL_ABI" != "" ] && [ "$TARGET_SYSTBL" = "" ]; then 7867 TARGET_SYSTBL=syscall.tbl 7868fi 7869 7870upper() { 7871 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7872} 7873 7874target_arch_name="$(upper $TARGET_ARCH)" 7875echo "TARGET_$target_arch_name=y" >> $config_target_mak 7876echo "TARGET_NAME=$target_name" >> $config_target_mak 7877echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7878if [ "$TARGET_ABI_DIR" = "" ]; then 7879 TARGET_ABI_DIR=$TARGET_ARCH 7880fi 7881echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7882if [ "$HOST_VARIANT_DIR" != "" ]; then 7883 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7884fi 7885if [ "$TARGET_SYSTBL_ABI" != "" ]; then 7886 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak 7887 echo "TARGET_SYSTBL=$TARGET_SYSTBL" >> $config_target_mak 7888fi 7889 7890if supported_xen_target $target; then 7891 echo "CONFIG_XEN=y" >> $config_target_mak 7892 if test "$xen_pci_passthrough" = yes; then 7893 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7894 fi 7895fi 7896if supported_kvm_target $target; then 7897 echo "CONFIG_KVM=y" >> $config_target_mak 7898fi 7899if supported_hax_target $target; then 7900 echo "CONFIG_HAX=y" >> $config_target_mak 7901fi 7902if supported_hvf_target $target; then 7903 echo "CONFIG_HVF=y" >> $config_target_mak 7904fi 7905if supported_whpx_target $target; then 7906 echo "CONFIG_WHPX=y" >> $config_target_mak 7907fi 7908if test "$target_aligned_only" = "yes" ; then 7909 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak 7910fi 7911if test "$target_bigendian" = "yes" ; then 7912 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7913fi 7914if test "$target_softmmu" = "yes" ; then 7915 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7916 if test "$mttcg" = "yes" ; then 7917 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7918 fi 7919fi 7920if test "$target_user_only" = "yes" ; then 7921 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7922 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7923 symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" 7924else 7925 symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" 7926fi 7927if test "$target_linux_user" = "yes" ; then 7928 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7929fi 7930list="" 7931if test ! -z "$gdb_xml_files" ; then 7932 for x in $gdb_xml_files; do 7933 list="$list gdb-xml/$x" 7934 done 7935 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7936fi 7937 7938if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 7939 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7940fi 7941if test "$target_bsd_user" = "yes" ; then 7942 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7943fi 7944 7945 7946# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets 7947 7948disas_config() { 7949 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7950 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7951} 7952 7953for i in $ARCH $TARGET_BASE_ARCH ; do 7954 case "$i" in 7955 alpha) 7956 disas_config "ALPHA" 7957 ;; 7958 aarch64) 7959 if test -n "${cxx}"; then 7960 disas_config "ARM_A64" 7961 fi 7962 ;; 7963 arm) 7964 disas_config "ARM" 7965 if test -n "${cxx}"; then 7966 disas_config "ARM_A64" 7967 fi 7968 ;; 7969 avr) 7970 disas_config "AVR" 7971 ;; 7972 cris) 7973 disas_config "CRIS" 7974 ;; 7975 hppa) 7976 disas_config "HPPA" 7977 ;; 7978 i386|x86_64|x32) 7979 disas_config "I386" 7980 ;; 7981 lm32) 7982 disas_config "LM32" 7983 ;; 7984 m68k) 7985 disas_config "M68K" 7986 ;; 7987 microblaze*) 7988 disas_config "MICROBLAZE" 7989 ;; 7990 mips*) 7991 disas_config "MIPS" 7992 if test -n "${cxx}"; then 7993 disas_config "NANOMIPS" 7994 fi 7995 ;; 7996 moxie*) 7997 disas_config "MOXIE" 7998 ;; 7999 nios2) 8000 disas_config "NIOS2" 8001 ;; 8002 or1k) 8003 disas_config "OPENRISC" 8004 ;; 8005 ppc*) 8006 disas_config "PPC" 8007 ;; 8008 riscv*) 8009 disas_config "RISCV" 8010 ;; 8011 rx) 8012 disas_config "RX" 8013 ;; 8014 s390*) 8015 disas_config "S390" 8016 ;; 8017 sh4) 8018 disas_config "SH4" 8019 ;; 8020 sparc*) 8021 disas_config "SPARC" 8022 ;; 8023 xtensa*) 8024 disas_config "XTENSA" 8025 ;; 8026 esac 8027done 8028if test "$tcg_interpreter" = "yes" ; then 8029 disas_config "TCI" 8030fi 8031 8032done # for target in $targets 8033 8034if [ "$fdt" = "git" ]; then 8035 subdirs="$subdirs dtc" 8036fi 8037if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 8038 subdirs="$subdirs capstone" 8039fi 8040echo "SUBDIRS=$subdirs" >> $config_host_mak 8041if test -n "$LIBCAPSTONE"; then 8042 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 8043fi 8044 8045if test "$numa" = "yes"; then 8046 echo "CONFIG_NUMA=y" >> $config_host_mak 8047 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak 8048fi 8049 8050if test "$ccache_cpp2" = "yes"; then 8051 echo "export CCACHE_CPP2=y" >> $config_host_mak 8052fi 8053 8054if test "$safe_stack" = "yes"; then 8055 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 8056fi 8057 8058# If we're using a separate build tree, set it up now. 8059# DIRS are directories which we simply mkdir in the build tree; 8060# LINKS are things to symlink back into the source tree 8061# (these can be both files and directories). 8062# Caution: do not add files or directories here using wildcards. This 8063# will result in problems later if a new file matching the wildcard is 8064# added to the source tree -- nothing will cause configure to be rerun 8065# so the build tree will be missing the link back to the new file, and 8066# tests might fail. Prefer to keep the relevant files in their own 8067# directory and symlink the directory instead. 8068DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 8069DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 8070DIRS="$DIRS docs docs/interop fsdev scsi" 8071DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 8072DIRS="$DIRS roms/seabios" 8073LINKS="Makefile" 8074LINKS="$LINKS tests/tcg/lm32/Makefile" 8075LINKS="$LINKS tests/tcg/Makefile.target" 8076LINKS="$LINKS pc-bios/optionrom/Makefile" 8077LINKS="$LINKS pc-bios/s390-ccw/Makefile" 8078LINKS="$LINKS roms/seabios/Makefile" 8079LINKS="$LINKS pc-bios/qemu-icon.bmp" 8080LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 8081LINKS="$LINKS tests/acceptance tests/data" 8082LINKS="$LINKS tests/qemu-iotests/check" 8083LINKS="$LINKS python" 8084for bios_file in \ 8085 $source_path/pc-bios/*.bin \ 8086 $source_path/pc-bios/*.elf \ 8087 $source_path/pc-bios/*.lid \ 8088 $source_path/pc-bios/*.rom \ 8089 $source_path/pc-bios/*.dtb \ 8090 $source_path/pc-bios/*.img \ 8091 $source_path/pc-bios/openbios-* \ 8092 $source_path/pc-bios/u-boot.* \ 8093 $source_path/pc-bios/edk2-*.fd.bz2 \ 8094 $source_path/pc-bios/palcode-* 8095do 8096 LINKS="$LINKS pc-bios/$(basename $bios_file)" 8097done 8098mkdir -p $DIRS 8099for f in $LINKS ; do 8100 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 8101 symlink "$source_path/$f" "$f" 8102 fi 8103done 8104 8105(for i in $cross_cc_vars; do 8106 export $i 8107done 8108export target_list source_path use_containers 8109$source_path/tests/tcg/configure.sh) 8110 8111# temporary config to build submodules 8112for rom in seabios; do 8113 config_mak=roms/$rom/config.mak 8114 echo "# Automatically generated by configure - do not modify" > $config_mak 8115 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 8116 echo "AS=$as" >> $config_mak 8117 echo "CCAS=$ccas" >> $config_mak 8118 echo "CC=$cc" >> $config_mak 8119 echo "BCC=bcc" >> $config_mak 8120 echo "CPP=$cpp" >> $config_mak 8121 echo "OBJCOPY=objcopy" >> $config_mak 8122 echo "IASL=$iasl" >> $config_mak 8123 echo "LD=$ld" >> $config_mak 8124 echo "RANLIB=$ranlib" >> $config_mak 8125done 8126 8127# set up qemu-iotests in this build directory 8128iotests_common_env="tests/qemu-iotests/common.env" 8129 8130echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 8131echo >> "$iotests_common_env" 8132echo "export PYTHON='$python'" >> "$iotests_common_env" 8133 8134if test "$skip_meson" = no; then 8135cross="config-meson.cross.new" 8136meson_quote() { 8137 echo "['$(echo $* | sed "s/ /','/g")']" 8138} 8139 8140echo "# Automatically generated by configure - do not modify" > $cross 8141echo "[properties]" >> $cross 8142test -z "$cxx" && echo "link_language = 'c'" >> $cross 8143echo "[binaries]" >> $cross 8144echo "c = $(meson_quote $cc)" >> $cross 8145test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross 8146echo "ar = $(meson_quote $ar)" >> $cross 8147echo "nm = $(meson_quote $nm)" >> $cross 8148echo "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross 8149echo "ranlib = $(meson_quote $ranlib)" >> $cross 8150echo "strip = $(meson_quote $strip)" >> $cross 8151echo "windres = $(meson_quote $windres)" >> $cross 8152if test -n "$cross_prefix"; then 8153 cross_arg="--cross-file config-meson.cross" 8154 # Hack: Meson expects an absolute path for the *build* machine 8155 # for the prefix, so add a slash in front of a Windows path that 8156 # includes a drive letter. 8157 # 8158 # See https://github.com/mesonbuild/meson/issues/7577. 8159 echo "[host_machine]" >> $cross 8160 if test "$mingw32" = "yes" ; then 8161 echo "system = 'windows'" >> $cross 8162 case $prefix in 8163 ?:*) pre_prefix=/ ;; 8164 esac 8165 fi 8166 case "$ARCH" in 8167 i386|x86_64) 8168 echo "cpu_family = 'x86'" >> $cross 8169 ;; 8170 ppc64le) 8171 echo "cpu_family = 'ppc64'" >> $cross 8172 ;; 8173 *) 8174 echo "cpu_family = '$ARCH'" >> $cross 8175 ;; 8176 esac 8177 echo "cpu = '$cpu'" >> $cross 8178 if test "$bigendian" = "yes" ; then 8179 echo "endian = 'big'" >> $cross 8180 else 8181 echo "endian = 'little'" >> $cross 8182 fi 8183else 8184 cross_arg="--native-file config-meson.cross" 8185fi 8186mv $cross config-meson.cross 8187 8188rm -rf meson-private meson-info meson-logs 8189NINJA=${ninja:-$PWD/ninjatool} $meson setup \ 8190 --prefix "${pre_prefix}$prefix" \ 8191 --libdir "${pre_prefix}$libdir" \ 8192 --libexecdir "${pre_prefix}$libexecdir" \ 8193 --bindir "${pre_prefix}$bindir" \ 8194 --includedir "${pre_prefix}$includedir" \ 8195 --datadir "${pre_prefix}$datadir" \ 8196 --mandir "${pre_prefix}$mandir" \ 8197 --sysconfdir "${pre_prefix}$sysconfdir" \ 8198 --localstatedir "${pre_prefix}$local_statedir" \ 8199 -Ddocdir="${pre_prefix}$docdir" \ 8200 -Dqemu_suffix="$qemu_suffix" \ 8201 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 8202 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 8203 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 8204 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 8205 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 8206 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 8207 -Dsdl=$sdl -Dsdl_image=$sdl_image \ 8208 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \ 8209 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\ 8210 $cross_arg \ 8211 "$PWD" "$source_path" 8212 8213if test "$?" -ne 0 ; then 8214 error_exit "meson setup failed" 8215fi 8216touch ninjatool.stamp 8217fi 8218 8219# Save the configure command line for later reuse. 8220cat <<EOD >config.status 8221#!/bin/sh 8222# Generated by configure. 8223# Run this file to recreate the current configuration. 8224# Compiler output produced by configure, useful for debugging 8225# configure, is in config.log if it exists. 8226EOD 8227 8228preserve_env() { 8229 envname=$1 8230 8231 eval envval=\$$envname 8232 8233 if test -n "$envval" 8234 then 8235 echo "$envname='$envval'" >> config.status 8236 echo "export $envname" >> config.status 8237 else 8238 echo "unset $envname" >> config.status 8239 fi 8240} 8241 8242# Preserve various env variables that influence what 8243# features/build target configure will detect 8244preserve_env AR 8245preserve_env AS 8246preserve_env CC 8247preserve_env CPP 8248preserve_env CXX 8249preserve_env INSTALL 8250preserve_env LD 8251preserve_env LD_LIBRARY_PATH 8252preserve_env LIBTOOL 8253preserve_env MAKE 8254preserve_env NM 8255preserve_env OBJCOPY 8256preserve_env PATH 8257preserve_env PKG_CONFIG 8258preserve_env PKG_CONFIG_LIBDIR 8259preserve_env PKG_CONFIG_PATH 8260preserve_env PYTHON 8261preserve_env SDL2_CONFIG 8262preserve_env SMBD 8263preserve_env STRIP 8264preserve_env WINDRES 8265 8266printf "exec" >>config.status 8267for i in "$0" "$@"; do 8268 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status 8269done 8270echo ' "$@"' >>config.status 8271chmod +x config.status 8272 8273rm -r "$TMPDIR1" 8274