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