]> git.proxmox.com Git - mirror_qemu.git/blob - configure
c27c4d6f1caf3c932c4fc9e8747a6eac425cdc4c
[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 quote_sh() {
93 printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
94 }
95
96 print_error() {
97 (echo
98 echo "ERROR: $1"
99 while test -n "$2"; do
100 echo " $2"
101 shift
102 done
103 echo) >&2
104 }
105
106 error_exit() {
107 print_error "$@"
108 exit 1
109 }
110
111 do_compiler() {
112 # Run the compiler, capturing its output to the log. First argument
113 # is compiler binary to execute.
114 compiler="$1"
115 shift
116 if test -n "$BASH_VERSION"; then eval '
117 echo >>config.log "
118 funcs: ${FUNCNAME[*]}
119 lines: ${BASH_LINENO[*]}"
120 '; fi
121 echo $compiler "$@" >> config.log
122 $compiler "$@" >> config.log 2>&1 || return $?
123 # Test passed. If this is an --enable-werror build, rerun
124 # the test with -Werror and bail out if it fails. This
125 # makes warning-generating-errors in configure test code
126 # obvious to developers.
127 if test "$werror" != "yes"; then
128 return 0
129 fi
130 # Don't bother rerunning the compile if we were already using -Werror
131 case "$*" in
132 *-Werror*)
133 return 0
134 ;;
135 esac
136 echo $compiler -Werror "$@" >> config.log
137 $compiler -Werror "$@" >> config.log 2>&1 && return $?
138 error_exit "configure test passed without -Werror but failed with -Werror." \
139 "This is probably a bug in the configure script. The failing command" \
140 "will be at the bottom of config.log." \
141 "You can run configure with --disable-werror to bypass this check."
142 }
143
144 do_cc() {
145 do_compiler "$cc" $CPU_CFLAGS "$@"
146 }
147
148 do_cxx() {
149 do_compiler "$cxx" $CPU_CFLAGS "$@"
150 }
151
152 # Append $2 to the variable named $1, with space separation
153 add_to() {
154 eval $1=\${$1:+\"\$$1 \"}\$2
155 }
156
157 update_cxxflags() {
158 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
159 # options which some versions of GCC's C++ compiler complain about
160 # because they only make sense for C programs.
161 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
162 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/)
163 for arg in $QEMU_CFLAGS; do
164 case $arg in
165 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
166 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
167 ;;
168 *)
169 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
170 ;;
171 esac
172 done
173 }
174
175 compile_object() {
176 local_cflags="$1"
177 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
178 }
179
180 compile_prog() {
181 local_cflags="$1"
182 local_ldflags="$2"
183 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
184 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
185 }
186
187 # symbolically link $1 to $2. Portable version of "ln -sf".
188 symlink() {
189 rm -rf "$2"
190 mkdir -p "$(dirname "$2")"
191 ln -s "$1" "$2"
192 }
193
194 # check whether a command is available to this shell (may be either an
195 # executable or a builtin)
196 has() {
197 type "$1" >/dev/null 2>&1
198 }
199
200 version_ge () {
201 local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
202 local_ver2=$(echo "$2" | tr . ' ')
203 while true; do
204 set x $local_ver1
205 local_first=${2-0}
206 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
207 shift ${2:+2}
208 local_ver1=$*
209 set x $local_ver2
210 # the second argument finished, the first must be greater or equal
211 test $# = 1 && return 0
212 test $local_first -lt $2 && return 1
213 test $local_first -gt $2 && return 0
214 shift ${2:+2}
215 local_ver2=$*
216 done
217 }
218
219 have_backend () {
220 echo "$trace_backends" | grep "$1" >/dev/null
221 }
222
223 glob() {
224 eval test -z '"${1#'"$2"'}"'
225 }
226
227 ld_has() {
228 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
229 }
230
231 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
232 then
233 error_exit "main directory cannot contain spaces nor colons"
234 fi
235
236 # default parameters
237 cpu=""
238 iasl="iasl"
239 interp_prefix="/usr/gnemul/qemu-%M"
240 static="no"
241 cross_compile="no"
242 cross_prefix=""
243 audio_drv_list="default"
244 block_drv_rw_whitelist=""
245 block_drv_ro_whitelist=""
246 block_drv_whitelist_tools="no"
247 host_cc="cc"
248 libs_qga=""
249 debug_info="yes"
250 lto="false"
251 stack_protector=""
252 safe_stack=""
253 use_containers="yes"
254 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
255
256 if test -e "$source_path/.git"
257 then
258 git_submodules_action="update"
259 else
260 git_submodules_action="ignore"
261 fi
262
263 git_submodules="ui/keycodemapdb"
264 git="git"
265
266 # Don't accept a target_list environment variable.
267 unset target_list
268 unset target_list_exclude
269
270 # Default value for a variable defining feature "foo".
271 # * foo="no" feature will only be used if --enable-foo arg is given
272 # * foo="" feature will be searched for, and if found, will be used
273 # unless --disable-foo is given
274 # * foo="yes" this value will only be set by --enable-foo flag.
275 # feature will searched for,
276 # if not found, configure exits with error
277 #
278 # Always add --enable-foo and --disable-foo command line args.
279 # Distributions want to ensure that several features are compiled in, and it
280 # is impossible without a --enable-foo that exits if a feature is not found.
281
282 default_feature=""
283 # parse CC options second
284 for opt do
285 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
286 case "$opt" in
287 --without-default-features)
288 default_feature="no"
289 ;;
290 esac
291 done
292
293 brlapi="auto"
294 curl="auto"
295 iconv="auto"
296 curses="auto"
297 docs="auto"
298 fdt="auto"
299 netmap="no"
300 sdl="auto"
301 sdl_image="auto"
302 virtiofsd="auto"
303 virtfs="auto"
304 libudev="auto"
305 mpath="auto"
306 vnc="auto"
307 sparse="auto"
308 vde="$default_feature"
309 vnc_sasl="auto"
310 vnc_jpeg="auto"
311 vnc_png="auto"
312 xkbcommon="auto"
313 alsa="auto"
314 coreaudio="auto"
315 dsound="auto"
316 jack="auto"
317 oss="auto"
318 pa="auto"
319 xen=${default_feature:+disabled}
320 xen_ctrl_version="$default_feature"
321 xen_pci_passthrough="auto"
322 linux_aio="$default_feature"
323 linux_io_uring="auto"
324 cap_ng="auto"
325 attr="auto"
326 xfs="$default_feature"
327 tcg="enabled"
328 membarrier="$default_feature"
329 vhost_kernel="$default_feature"
330 vhost_net="$default_feature"
331 vhost_crypto="$default_feature"
332 vhost_scsi="$default_feature"
333 vhost_vsock="$default_feature"
334 vhost_user="no"
335 vhost_user_blk_server="auto"
336 vhost_user_fs="$default_feature"
337 vhost_vdpa="$default_feature"
338 bpf="auto"
339 kvm="auto"
340 hax="auto"
341 hvf="auto"
342 whpx="auto"
343 nvmm="auto"
344 rdma="$default_feature"
345 pvrdma="$default_feature"
346 gprof="no"
347 debug_tcg="no"
348 debug="no"
349 sanitizers="no"
350 tsan="no"
351 fortify_source="$default_feature"
352 strip_opt="yes"
353 tcg_interpreter="false"
354 bigendian="no"
355 mingw32="no"
356 gcov="no"
357 EXESUF=""
358 HOST_DSOSUF=".so"
359 modules="no"
360 module_upgrades="no"
361 prefix="/usr/local"
362 qemu_suffix="qemu"
363 slirp="auto"
364 bsd="no"
365 linux="no"
366 solaris="no"
367 profiler="no"
368 cocoa="auto"
369 softmmu="yes"
370 linux_user="no"
371 bsd_user="no"
372 blobs="true"
373 pkgversion=""
374 pie=""
375 qom_cast_debug="yes"
376 trace_backends="log"
377 trace_file="trace"
378 spice="$default_feature"
379 spice_protocol="auto"
380 rbd="auto"
381 smartcard="auto"
382 u2f="auto"
383 libusb="auto"
384 usb_redir="auto"
385 opengl="$default_feature"
386 cpuid_h="no"
387 avx2_opt="$default_feature"
388 capstone="auto"
389 lzo="auto"
390 snappy="auto"
391 bzip2="auto"
392 lzfse="auto"
393 zstd="auto"
394 guest_agent="$default_feature"
395 guest_agent_with_vss="no"
396 guest_agent_ntddscsi="no"
397 guest_agent_msi="auto"
398 vss_win32_sdk="$default_feature"
399 win_sdk="no"
400 want_tools="$default_feature"
401 libiscsi="auto"
402 libnfs="auto"
403 coroutine=""
404 coroutine_pool="$default_feature"
405 debug_stack_usage="no"
406 crypto_afalg="no"
407 cfi="false"
408 cfi_debug="false"
409 seccomp="auto"
410 glusterfs="auto"
411 gtk="auto"
412 tls_priority="NORMAL"
413 gnutls="auto"
414 nettle="auto"
415 gcrypt="auto"
416 auth_pam="auto"
417 vte="auto"
418 virglrenderer="auto"
419 tpm="$default_feature"
420 libssh="$default_feature"
421 live_block_migration=${default_feature:-yes}
422 numa="$default_feature"
423 tcmalloc="no"
424 jemalloc="no"
425 replication=${default_feature:-yes}
426 bochs=${default_feature:-yes}
427 cloop=${default_feature:-yes}
428 dmg=${default_feature:-yes}
429 qcow1=${default_feature:-yes}
430 vdi=${default_feature:-yes}
431 vvfat=${default_feature:-yes}
432 qed=${default_feature:-yes}
433 parallels=${default_feature:-yes}
434 libxml2="auto"
435 debug_mutex="no"
436 libpmem="auto"
437 default_devices="true"
438 plugins="$default_feature"
439 fuzzing="false"
440 rng_none="no"
441 secret_keyring="$default_feature"
442 libdaxctl="auto"
443 meson=""
444 ninja=""
445 skip_meson=no
446 gettext="auto"
447 fuse="auto"
448 fuse_lseek="auto"
449 multiprocess="auto"
450 slirp_smbd="$default_feature"
451
452 malloc_trim="auto"
453 gio="$default_feature"
454
455 # parse CC options second
456 for opt do
457 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
458 case "$opt" in
459 --cross-prefix=*) cross_prefix="$optarg"
460 cross_compile="yes"
461 ;;
462 --cc=*) CC="$optarg"
463 ;;
464 --cxx=*) CXX="$optarg"
465 ;;
466 --cpu=*) cpu="$optarg"
467 ;;
468 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
469 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
470 ;;
471 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
472 ;;
473 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
474 EXTRA_LDFLAGS="$optarg"
475 ;;
476 --enable-debug-info) debug_info="yes"
477 ;;
478 --disable-debug-info) debug_info="no"
479 ;;
480 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
481 ;;
482 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
483 eval "cross_cc_cflags_${cc_arch}=\$optarg"
484 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
485 ;;
486 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
487 cc_archs="$cc_archs $cc_arch"
488 eval "cross_cc_${cc_arch}=\$optarg"
489 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
490 ;;
491 esac
492 done
493 # OS specific
494 # Using uname is really, really broken. Once we have the right set of checks
495 # we can eliminate its usage altogether.
496
497 # Preferred compiler:
498 # ${CC} (if set)
499 # ${cross_prefix}gcc (if cross-prefix specified)
500 # system compiler
501 if test -z "${CC}${cross_prefix}"; then
502 cc="$host_cc"
503 else
504 cc="${CC-${cross_prefix}gcc}"
505 fi
506
507 if test -z "${CXX}${cross_prefix}"; then
508 cxx="c++"
509 else
510 cxx="${CXX-${cross_prefix}g++}"
511 fi
512
513 ar="${AR-${cross_prefix}ar}"
514 as="${AS-${cross_prefix}as}"
515 ccas="${CCAS-$cc}"
516 cpp="${CPP-$cc -E}"
517 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
518 ld="${LD-${cross_prefix}ld}"
519 ranlib="${RANLIB-${cross_prefix}ranlib}"
520 nm="${NM-${cross_prefix}nm}"
521 strip="${STRIP-${cross_prefix}strip}"
522 windres="${WINDRES-${cross_prefix}windres}"
523 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
524 query_pkg_config() {
525 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
526 }
527 pkg_config=query_pkg_config
528 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
529
530 # default flags for all hosts
531 # We use -fwrapv to tell the compiler that we require a C dialect where
532 # left shift of signed integers is well defined and has the expected
533 # 2s-complement style results. (Both clang and gcc agree that it
534 # provides these semantics.)
535 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
536 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
537 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
538 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
539
540 # Flags that are needed during configure but later taken care of by Meson
541 CONFIGURE_CFLAGS="-std=gnu11 -Wall"
542 CONFIGURE_LDFLAGS=
543
544
545 check_define() {
546 cat > $TMPC <<EOF
547 #if !defined($1)
548 #error $1 not defined
549 #endif
550 int main(void) { return 0; }
551 EOF
552 compile_object
553 }
554
555 check_include() {
556 cat > $TMPC <<EOF
557 #include <$1>
558 int main(void) { return 0; }
559 EOF
560 compile_object
561 }
562
563 write_c_skeleton() {
564 cat > $TMPC <<EOF
565 int main(void) { return 0; }
566 EOF
567 }
568
569 if check_define __linux__ ; then
570 targetos="Linux"
571 elif check_define _WIN32 ; then
572 targetos='MINGW32'
573 elif check_define __OpenBSD__ ; then
574 targetos='OpenBSD'
575 elif check_define __sun__ ; then
576 targetos='SunOS'
577 elif check_define __HAIKU__ ; then
578 targetos='Haiku'
579 elif check_define __FreeBSD__ ; then
580 targetos='FreeBSD'
581 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
582 targetos='GNU/kFreeBSD'
583 elif check_define __DragonFly__ ; then
584 targetos='DragonFly'
585 elif check_define __NetBSD__; then
586 targetos='NetBSD'
587 elif check_define __APPLE__; then
588 targetos='Darwin'
589 else
590 # This is a fatal error, but don't report it yet, because we
591 # might be going to just print the --help text, or it might
592 # be the result of a missing compiler.
593 targetos='bogus'
594 fi
595
596 # Some host OSes need non-standard checks for which CPU to use.
597 # Note that these checks are broken for cross-compilation: if you're
598 # cross-compiling to one of these OSes then you'll need to specify
599 # the correct CPU with the --cpu option.
600 case $targetos in
601 Darwin)
602 HOST_DSOSUF=".dylib"
603 ;;
604 SunOS)
605 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
606 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
607 cpu="x86_64"
608 fi
609 esac
610
611 if test ! -z "$cpu" ; then
612 # command line argument
613 :
614 elif check_define __i386__ ; then
615 cpu="i386"
616 elif check_define __x86_64__ ; then
617 if check_define __ILP32__ ; then
618 cpu="x32"
619 else
620 cpu="x86_64"
621 fi
622 elif check_define __sparc__ ; then
623 if check_define __arch64__ ; then
624 cpu="sparc64"
625 else
626 cpu="sparc"
627 fi
628 elif check_define _ARCH_PPC ; then
629 if check_define _ARCH_PPC64 ; then
630 if check_define _LITTLE_ENDIAN ; then
631 cpu="ppc64le"
632 else
633 cpu="ppc64"
634 fi
635 else
636 cpu="ppc"
637 fi
638 elif check_define __mips__ ; then
639 cpu="mips"
640 elif check_define __s390__ ; then
641 if check_define __s390x__ ; then
642 cpu="s390x"
643 else
644 cpu="s390"
645 fi
646 elif check_define __riscv ; then
647 if check_define _LP64 ; then
648 cpu="riscv64"
649 else
650 cpu="riscv32"
651 fi
652 elif check_define __arm__ ; then
653 cpu="arm"
654 elif check_define __aarch64__ ; then
655 cpu="aarch64"
656 else
657 cpu=$(uname -m)
658 fi
659
660 ARCH=
661 # Normalise host CPU name and set ARCH.
662 # Note that this case should only have supported host CPUs, not guests.
663 case "$cpu" in
664 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
665 ;;
666 ppc64le)
667 ARCH="ppc64"
668 ;;
669 i386|i486|i586|i686|i86pc|BePC)
670 cpu="i386"
671 ;;
672 x86_64|amd64)
673 cpu="x86_64"
674 ;;
675 armv*b|armv*l|arm)
676 cpu="arm"
677 ;;
678 aarch64)
679 cpu="aarch64"
680 ;;
681 mips*)
682 cpu="mips"
683 ;;
684 sparc|sun4[cdmuv])
685 cpu="sparc"
686 ;;
687 *)
688 # This will result in either an error or falling back to TCI later
689 ARCH=unknown
690 ;;
691 esac
692 if test -z "$ARCH"; then
693 ARCH="$cpu"
694 fi
695
696 # OS specific
697
698 case $targetos in
699 MINGW32*)
700 mingw32="yes"
701 supported_os="yes"
702 plugins="no"
703 pie="no"
704 ;;
705 GNU/kFreeBSD)
706 bsd="yes"
707 ;;
708 FreeBSD)
709 bsd="yes"
710 bsd_user="yes"
711 make="${MAKE-gmake}"
712 # needed for kinfo_getvmmap(3) in libutil.h
713 netmap="" # enable netmap autodetect
714 ;;
715 DragonFly)
716 bsd="yes"
717 make="${MAKE-gmake}"
718 ;;
719 NetBSD)
720 bsd="yes"
721 make="${MAKE-gmake}"
722 ;;
723 OpenBSD)
724 bsd="yes"
725 make="${MAKE-gmake}"
726 ;;
727 Darwin)
728 bsd="yes"
729 darwin="yes"
730 # Disable attempts to use ObjectiveC features in os/object.h since they
731 # won't work when we're compiling with gcc as a C compiler.
732 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
733 ;;
734 SunOS)
735 solaris="yes"
736 make="${MAKE-gmake}"
737 smbd="${SMBD-/usr/sfw/sbin/smbd}"
738 # needed for CMSG_ macros in sys/socket.h
739 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
740 # needed for TIOCWIN* defines in termios.h
741 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
742 ;;
743 Haiku)
744 haiku="yes"
745 pie="no"
746 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
747 ;;
748 Linux)
749 linux="yes"
750 linux_user="yes"
751 vhost_user=${default_feature:-yes}
752 ;;
753 esac
754
755 : ${make=${MAKE-make}}
756
757 # We prefer python 3.x. A bare 'python' is traditionally
758 # python 2.x, but some distros have it as python 3.x, so
759 # we check that too
760 python=
761 explicit_python=no
762 for binary in "${PYTHON-python3}" python
763 do
764 if has "$binary"
765 then
766 python=$(command -v "$binary")
767 break
768 fi
769 done
770
771
772 # Check for ancillary tools used in testing
773 genisoimage=
774 for binary in genisoimage mkisofs
775 do
776 if has $binary
777 then
778 genisoimage=$(command -v "$binary")
779 break
780 fi
781 done
782
783 # Default objcc to clang if available, otherwise use CC
784 if has clang; then
785 objcc=clang
786 else
787 objcc="$cc"
788 fi
789
790 if test "$mingw32" = "yes" ; then
791 EXESUF=".exe"
792 HOST_DSOSUF=".dll"
793 # MinGW needs -mthreads for TLS and macro _MT.
794 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
795 write_c_skeleton;
796 prefix="/qemu"
797 qemu_suffix=""
798 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
799 fi
800
801 werror=""
802
803 for opt do
804 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
805 case "$opt" in
806 --help|-h) show_help=yes
807 ;;
808 --version|-V) exec cat $source_path/VERSION
809 ;;
810 --prefix=*) prefix="$optarg"
811 ;;
812 --interp-prefix=*) interp_prefix="$optarg"
813 ;;
814 --cross-prefix=*)
815 ;;
816 --cc=*)
817 ;;
818 --host-cc=*) host_cc="$optarg"
819 ;;
820 --cxx=*)
821 ;;
822 --iasl=*) iasl="$optarg"
823 ;;
824 --objcc=*) objcc="$optarg"
825 ;;
826 --make=*) make="$optarg"
827 ;;
828 --install=*)
829 ;;
830 --python=*) python="$optarg" ; explicit_python=yes
831 ;;
832 --sphinx-build=*) sphinx_build="$optarg"
833 ;;
834 --skip-meson) skip_meson=yes
835 ;;
836 --meson=*) meson="$optarg"
837 ;;
838 --ninja=*) ninja="$optarg"
839 ;;
840 --smbd=*) smbd="$optarg"
841 ;;
842 --extra-cflags=*)
843 ;;
844 --extra-cxxflags=*)
845 ;;
846 --extra-ldflags=*)
847 ;;
848 --enable-debug-info)
849 ;;
850 --disable-debug-info)
851 ;;
852 --cross-cc-*)
853 ;;
854 --enable-modules)
855 modules="yes"
856 ;;
857 --disable-modules)
858 modules="no"
859 ;;
860 --disable-module-upgrades) module_upgrades="no"
861 ;;
862 --enable-module-upgrades) module_upgrades="yes"
863 ;;
864 --cpu=*)
865 ;;
866 --target-list=*) target_list="$optarg"
867 if test "$target_list_exclude"; then
868 error_exit "Can't mix --target-list with --target-list-exclude"
869 fi
870 ;;
871 --target-list-exclude=*) target_list_exclude="$optarg"
872 if test "$target_list"; then
873 error_exit "Can't mix --target-list-exclude with --target-list"
874 fi
875 ;;
876 --enable-trace-backends=*) trace_backends="$optarg"
877 ;;
878 # XXX: backwards compatibility
879 --enable-trace-backend=*) trace_backends="$optarg"
880 ;;
881 --with-trace-file=*) trace_file="$optarg"
882 ;;
883 --with-default-devices) default_devices="true"
884 ;;
885 --without-default-devices) default_devices="false"
886 ;;
887 --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
888 ;;
889 --with-devices-*) device_arch=${opt#--with-devices-};
890 device_arch=${device_arch%%=*}
891 cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
892 if test -f "$cf"; then
893 device_archs="$device_archs $device_arch"
894 eval "devices_${device_arch}=\$optarg"
895 else
896 error_exit "File $cf does not exist"
897 fi
898 ;;
899 --without-default-features) # processed above
900 ;;
901 --enable-gprof) gprof="yes"
902 ;;
903 --enable-gcov) gcov="yes"
904 ;;
905 --static)
906 static="yes"
907 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
908 ;;
909 --mandir=*) mandir="$optarg"
910 ;;
911 --bindir=*) bindir="$optarg"
912 ;;
913 --libdir=*) libdir="$optarg"
914 ;;
915 --libexecdir=*) libexecdir="$optarg"
916 ;;
917 --includedir=*) includedir="$optarg"
918 ;;
919 --datadir=*) datadir="$optarg"
920 ;;
921 --with-suffix=*) qemu_suffix="$optarg"
922 ;;
923 --docdir=*) docdir="$optarg"
924 ;;
925 --localedir=*) localedir="$optarg"
926 ;;
927 --sysconfdir=*) sysconfdir="$optarg"
928 ;;
929 --localstatedir=*) local_statedir="$optarg"
930 ;;
931 --firmwarepath=*) firmwarepath="$optarg"
932 ;;
933 --host=*|--build=*|\
934 --disable-dependency-tracking|\
935 --sbindir=*|--sharedstatedir=*|\
936 --oldincludedir=*|--datarootdir=*|--infodir=*|\
937 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
938 # These switches are silently ignored, for compatibility with
939 # autoconf-generated configure scripts. This allows QEMU's
940 # configure to be used by RPM and similar macros that set
941 # lots of directory switches by default.
942 ;;
943 --disable-sdl) sdl="disabled"
944 ;;
945 --enable-sdl) sdl="enabled"
946 ;;
947 --disable-sdl-image) sdl_image="disabled"
948 ;;
949 --enable-sdl-image) sdl_image="enabled"
950 ;;
951 --disable-qom-cast-debug) qom_cast_debug="no"
952 ;;
953 --enable-qom-cast-debug) qom_cast_debug="yes"
954 ;;
955 --disable-virtfs) virtfs="disabled"
956 ;;
957 --enable-virtfs) virtfs="enabled"
958 ;;
959 --disable-libudev) libudev="disabled"
960 ;;
961 --enable-libudev) libudev="enabled"
962 ;;
963 --disable-virtiofsd) virtiofsd="disabled"
964 ;;
965 --enable-virtiofsd) virtiofsd="enabled"
966 ;;
967 --disable-mpath) mpath="disabled"
968 ;;
969 --enable-mpath) mpath="enabled"
970 ;;
971 --disable-vnc) vnc="disabled"
972 ;;
973 --enable-vnc) vnc="enabled"
974 ;;
975 --disable-gettext) gettext="disabled"
976 ;;
977 --enable-gettext) gettext="enabled"
978 ;;
979 --audio-drv-list=*) audio_drv_list="$optarg"
980 ;;
981 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
982 ;;
983 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
984 ;;
985 --enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="yes"
986 ;;
987 --disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="no"
988 ;;
989 --enable-debug-tcg) debug_tcg="yes"
990 ;;
991 --disable-debug-tcg) debug_tcg="no"
992 ;;
993 --enable-debug)
994 # Enable debugging options that aren't excessively noisy
995 debug_tcg="yes"
996 debug_mutex="yes"
997 debug="yes"
998 strip_opt="no"
999 fortify_source="no"
1000 ;;
1001 --enable-sanitizers) sanitizers="yes"
1002 ;;
1003 --disable-sanitizers) sanitizers="no"
1004 ;;
1005 --enable-tsan) tsan="yes"
1006 ;;
1007 --disable-tsan) tsan="no"
1008 ;;
1009 --enable-sparse) sparse="enabled"
1010 ;;
1011 --disable-sparse) sparse="disabled"
1012 ;;
1013 --disable-strip) strip_opt="no"
1014 ;;
1015 --disable-vnc-sasl) vnc_sasl="disabled"
1016 ;;
1017 --enable-vnc-sasl) vnc_sasl="enabled"
1018 ;;
1019 --disable-vnc-jpeg) vnc_jpeg="disabled"
1020 ;;
1021 --enable-vnc-jpeg) vnc_jpeg="enabled"
1022 ;;
1023 --disable-vnc-png) vnc_png="disabled"
1024 ;;
1025 --enable-vnc-png) vnc_png="enabled"
1026 ;;
1027 --disable-slirp) slirp="disabled"
1028 ;;
1029 --enable-slirp) slirp="enabled"
1030 ;;
1031 --enable-slirp=git) slirp="internal"
1032 ;;
1033 --enable-slirp=system) slirp="system"
1034 ;;
1035 --disable-vde) vde="no"
1036 ;;
1037 --enable-vde) vde="yes"
1038 ;;
1039 --disable-netmap) netmap="no"
1040 ;;
1041 --enable-netmap) netmap="yes"
1042 ;;
1043 --disable-xen) xen="disabled"
1044 ;;
1045 --enable-xen) xen="enabled"
1046 ;;
1047 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1048 ;;
1049 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1050 ;;
1051 --disable-alsa) alsa="disabled"
1052 ;;
1053 --enable-alsa) alsa="enabled"
1054 ;;
1055 --disable-coreaudio) coreaudio="disabled"
1056 ;;
1057 --enable-coreaudio) coreaudio="enabled"
1058 ;;
1059 --disable-dsound) dsound="disabled"
1060 ;;
1061 --enable-dsound) dsound="enabled"
1062 ;;
1063 --disable-jack) jack="disabled"
1064 ;;
1065 --enable-jack) jack="enabled"
1066 ;;
1067 --disable-oss) oss="disabled"
1068 ;;
1069 --enable-oss) oss="enabled"
1070 ;;
1071 --disable-pa) pa="disabled"
1072 ;;
1073 --enable-pa) pa="enabled"
1074 ;;
1075 --disable-brlapi) brlapi="disabled"
1076 ;;
1077 --enable-brlapi) brlapi="enabled"
1078 ;;
1079 --disable-kvm) kvm="disabled"
1080 ;;
1081 --enable-kvm) kvm="enabled"
1082 ;;
1083 --disable-hax) hax="disabled"
1084 ;;
1085 --enable-hax) hax="enabled"
1086 ;;
1087 --disable-hvf) hvf="disabled"
1088 ;;
1089 --enable-hvf) hvf="enabled"
1090 ;;
1091 --disable-nvmm) nvmm="disabled"
1092 ;;
1093 --enable-nvmm) nvmm="enabled"
1094 ;;
1095 --disable-whpx) whpx="disabled"
1096 ;;
1097 --enable-whpx) whpx="enabled"
1098 ;;
1099 --disable-tcg-interpreter) tcg_interpreter="false"
1100 ;;
1101 --enable-tcg-interpreter) tcg_interpreter="true"
1102 ;;
1103 --disable-cap-ng) cap_ng="disabled"
1104 ;;
1105 --enable-cap-ng) cap_ng="enabled"
1106 ;;
1107 --disable-tcg) tcg="disabled"
1108 plugins="no"
1109 ;;
1110 --enable-tcg) tcg="enabled"
1111 ;;
1112 --disable-malloc-trim) malloc_trim="disabled"
1113 ;;
1114 --enable-malloc-trim) malloc_trim="enabled"
1115 ;;
1116 --disable-spice) spice="no"
1117 ;;
1118 --enable-spice)
1119 spice_protocol="yes"
1120 spice="yes"
1121 ;;
1122 --disable-spice-protocol)
1123 spice_protocol="no"
1124 spice="no"
1125 ;;
1126 --enable-spice-protocol) spice_protocol="yes"
1127 ;;
1128 --disable-libiscsi) libiscsi="disabled"
1129 ;;
1130 --enable-libiscsi) libiscsi="enabled"
1131 ;;
1132 --disable-libnfs) libnfs="disabled"
1133 ;;
1134 --enable-libnfs) libnfs="enabled"
1135 ;;
1136 --enable-profiler) profiler="yes"
1137 ;;
1138 --disable-cocoa) cocoa="disabled"
1139 ;;
1140 --enable-cocoa) cocoa="enabled"
1141 ;;
1142 --disable-system) softmmu="no"
1143 ;;
1144 --enable-system) softmmu="yes"
1145 ;;
1146 --disable-user)
1147 linux_user="no" ;
1148 bsd_user="no" ;
1149 ;;
1150 --enable-user) ;;
1151 --disable-linux-user) linux_user="no"
1152 ;;
1153 --enable-linux-user) linux_user="yes"
1154 ;;
1155 --disable-bsd-user) bsd_user="no"
1156 ;;
1157 --enable-bsd-user) bsd_user="yes"
1158 ;;
1159 --enable-pie) pie="yes"
1160 ;;
1161 --disable-pie) pie="no"
1162 ;;
1163 --enable-werror) werror="yes"
1164 ;;
1165 --disable-werror) werror="no"
1166 ;;
1167 --enable-lto) lto="true"
1168 ;;
1169 --disable-lto) lto="false"
1170 ;;
1171 --enable-stack-protector) stack_protector="yes"
1172 ;;
1173 --disable-stack-protector) stack_protector="no"
1174 ;;
1175 --enable-safe-stack) safe_stack="yes"
1176 ;;
1177 --disable-safe-stack) safe_stack="no"
1178 ;;
1179 --enable-cfi)
1180 cfi="true";
1181 lto="true";
1182 ;;
1183 --disable-cfi) cfi="false"
1184 ;;
1185 --enable-cfi-debug) cfi_debug="true"
1186 ;;
1187 --disable-cfi-debug) cfi_debug="false"
1188 ;;
1189 --disable-curses) curses="disabled"
1190 ;;
1191 --enable-curses) curses="enabled"
1192 ;;
1193 --disable-iconv) iconv="disabled"
1194 ;;
1195 --enable-iconv) iconv="enabled"
1196 ;;
1197 --disable-curl) curl="disabled"
1198 ;;
1199 --enable-curl) curl="enabled"
1200 ;;
1201 --disable-fdt) fdt="disabled"
1202 ;;
1203 --enable-fdt) fdt="enabled"
1204 ;;
1205 --enable-fdt=git) fdt="internal"
1206 ;;
1207 --enable-fdt=system) fdt="system"
1208 ;;
1209 --disable-linux-aio) linux_aio="no"
1210 ;;
1211 --enable-linux-aio) linux_aio="yes"
1212 ;;
1213 --disable-linux-io-uring) linux_io_uring="disabled"
1214 ;;
1215 --enable-linux-io-uring) linux_io_uring="enabled"
1216 ;;
1217 --disable-attr) attr="disabled"
1218 ;;
1219 --enable-attr) attr="enabled"
1220 ;;
1221 --disable-membarrier) membarrier="no"
1222 ;;
1223 --enable-membarrier) membarrier="yes"
1224 ;;
1225 --disable-bpf) bpf="disabled"
1226 ;;
1227 --enable-bpf) bpf="enabled"
1228 ;;
1229 --disable-blobs) blobs="false"
1230 ;;
1231 --with-pkgversion=*) pkgversion="$optarg"
1232 ;;
1233 --with-coroutine=*) coroutine="$optarg"
1234 ;;
1235 --disable-coroutine-pool) coroutine_pool="no"
1236 ;;
1237 --enable-coroutine-pool) coroutine_pool="yes"
1238 ;;
1239 --enable-debug-stack-usage) debug_stack_usage="yes"
1240 ;;
1241 --enable-crypto-afalg) crypto_afalg="yes"
1242 ;;
1243 --disable-crypto-afalg) crypto_afalg="no"
1244 ;;
1245 --disable-docs) docs="disabled"
1246 ;;
1247 --enable-docs) docs="enabled"
1248 ;;
1249 --disable-vhost-net) vhost_net="no"
1250 ;;
1251 --enable-vhost-net) vhost_net="yes"
1252 ;;
1253 --disable-vhost-crypto) vhost_crypto="no"
1254 ;;
1255 --enable-vhost-crypto) vhost_crypto="yes"
1256 ;;
1257 --disable-vhost-scsi) vhost_scsi="no"
1258 ;;
1259 --enable-vhost-scsi) vhost_scsi="yes"
1260 ;;
1261 --disable-vhost-vsock) vhost_vsock="no"
1262 ;;
1263 --enable-vhost-vsock) vhost_vsock="yes"
1264 ;;
1265 --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
1266 ;;
1267 --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
1268 ;;
1269 --disable-vhost-user-fs) vhost_user_fs="no"
1270 ;;
1271 --enable-vhost-user-fs) vhost_user_fs="yes"
1272 ;;
1273 --disable-opengl) opengl="no"
1274 ;;
1275 --enable-opengl) opengl="yes"
1276 ;;
1277 --disable-rbd) rbd="disabled"
1278 ;;
1279 --enable-rbd) rbd="enabled"
1280 ;;
1281 --disable-xfsctl) xfs="no"
1282 ;;
1283 --enable-xfsctl) xfs="yes"
1284 ;;
1285 --disable-smartcard) smartcard="disabled"
1286 ;;
1287 --enable-smartcard) smartcard="enabled"
1288 ;;
1289 --disable-u2f) u2f="disabled"
1290 ;;
1291 --enable-u2f) u2f="enabled"
1292 ;;
1293 --disable-libusb) libusb="disabled"
1294 ;;
1295 --enable-libusb) libusb="enabled"
1296 ;;
1297 --disable-usb-redir) usb_redir="disabled"
1298 ;;
1299 --enable-usb-redir) usb_redir="enabled"
1300 ;;
1301 --disable-zlib-test)
1302 ;;
1303 --disable-lzo) lzo="disabled"
1304 ;;
1305 --enable-lzo) lzo="enabled"
1306 ;;
1307 --disable-snappy) snappy="disabled"
1308 ;;
1309 --enable-snappy) snappy="enabled"
1310 ;;
1311 --disable-bzip2) bzip2="disabled"
1312 ;;
1313 --enable-bzip2) bzip2="enabled"
1314 ;;
1315 --enable-lzfse) lzfse="enabled"
1316 ;;
1317 --disable-lzfse) lzfse="disabled"
1318 ;;
1319 --disable-zstd) zstd="disabled"
1320 ;;
1321 --enable-zstd) zstd="enabled"
1322 ;;
1323 --enable-guest-agent) guest_agent="yes"
1324 ;;
1325 --disable-guest-agent) guest_agent="no"
1326 ;;
1327 --enable-guest-agent-msi) guest_agent_msi="enabled"
1328 ;;
1329 --disable-guest-agent-msi) guest_agent_msi="disabled"
1330 ;;
1331 --with-vss-sdk) vss_win32_sdk=""
1332 ;;
1333 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1334 ;;
1335 --without-vss-sdk) vss_win32_sdk="no"
1336 ;;
1337 --with-win-sdk) win_sdk=""
1338 ;;
1339 --with-win-sdk=*) win_sdk="$optarg"
1340 ;;
1341 --without-win-sdk) win_sdk="no"
1342 ;;
1343 --enable-tools) want_tools="yes"
1344 ;;
1345 --disable-tools) want_tools="no"
1346 ;;
1347 --enable-seccomp) seccomp="enabled"
1348 ;;
1349 --disable-seccomp) seccomp="disabled"
1350 ;;
1351 --disable-glusterfs) glusterfs="disabled"
1352 ;;
1353 --disable-avx2) avx2_opt="no"
1354 ;;
1355 --enable-avx2) avx2_opt="yes"
1356 ;;
1357 --disable-avx512f) avx512f_opt="no"
1358 ;;
1359 --enable-avx512f) avx512f_opt="yes"
1360 ;;
1361
1362 --enable-glusterfs) glusterfs="enabled"
1363 ;;
1364 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1365 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1366 ;;
1367 --enable-vhdx|--disable-vhdx)
1368 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1369 ;;
1370 --enable-uuid|--disable-uuid)
1371 echo "$0: $opt is obsolete, UUID support is always built" >&2
1372 ;;
1373 --disable-gtk) gtk="disabled"
1374 ;;
1375 --enable-gtk) gtk="enabled"
1376 ;;
1377 --tls-priority=*) tls_priority="$optarg"
1378 ;;
1379 --disable-gnutls) gnutls="disabled"
1380 ;;
1381 --enable-gnutls) gnutls="enabled"
1382 ;;
1383 --disable-nettle) nettle="disabled"
1384 ;;
1385 --enable-nettle) nettle="enabled"
1386 ;;
1387 --disable-gcrypt) gcrypt="disabled"
1388 ;;
1389 --enable-gcrypt) gcrypt="enabled"
1390 ;;
1391 --disable-auth-pam) auth_pam="disabled"
1392 ;;
1393 --enable-auth-pam) auth_pam="enabled"
1394 ;;
1395 --enable-rdma) rdma="yes"
1396 ;;
1397 --disable-rdma) rdma="no"
1398 ;;
1399 --enable-pvrdma) pvrdma="yes"
1400 ;;
1401 --disable-pvrdma) pvrdma="no"
1402 ;;
1403 --disable-vte) vte="disabled"
1404 ;;
1405 --enable-vte) vte="enabled"
1406 ;;
1407 --disable-virglrenderer) virglrenderer="disabled"
1408 ;;
1409 --enable-virglrenderer) virglrenderer="enabled"
1410 ;;
1411 --disable-tpm) tpm="no"
1412 ;;
1413 --enable-tpm) tpm="yes"
1414 ;;
1415 --disable-libssh) libssh="no"
1416 ;;
1417 --enable-libssh) libssh="yes"
1418 ;;
1419 --disable-live-block-migration) live_block_migration="no"
1420 ;;
1421 --enable-live-block-migration) live_block_migration="yes"
1422 ;;
1423 --disable-numa) numa="no"
1424 ;;
1425 --enable-numa) numa="yes"
1426 ;;
1427 --disable-libxml2) libxml2="disabled"
1428 ;;
1429 --enable-libxml2) libxml2="enabled"
1430 ;;
1431 --disable-tcmalloc) tcmalloc="no"
1432 ;;
1433 --enable-tcmalloc) tcmalloc="yes"
1434 ;;
1435 --disable-jemalloc) jemalloc="no"
1436 ;;
1437 --enable-jemalloc) jemalloc="yes"
1438 ;;
1439 --disable-replication) replication="no"
1440 ;;
1441 --enable-replication) replication="yes"
1442 ;;
1443 --disable-bochs) bochs="no"
1444 ;;
1445 --enable-bochs) bochs="yes"
1446 ;;
1447 --disable-cloop) cloop="no"
1448 ;;
1449 --enable-cloop) cloop="yes"
1450 ;;
1451 --disable-dmg) dmg="no"
1452 ;;
1453 --enable-dmg) dmg="yes"
1454 ;;
1455 --disable-qcow1) qcow1="no"
1456 ;;
1457 --enable-qcow1) qcow1="yes"
1458 ;;
1459 --disable-vdi) vdi="no"
1460 ;;
1461 --enable-vdi) vdi="yes"
1462 ;;
1463 --disable-vvfat) vvfat="no"
1464 ;;
1465 --enable-vvfat) vvfat="yes"
1466 ;;
1467 --disable-qed) qed="no"
1468 ;;
1469 --enable-qed) qed="yes"
1470 ;;
1471 --disable-parallels) parallels="no"
1472 ;;
1473 --enable-parallels) parallels="yes"
1474 ;;
1475 --disable-vhost-user) vhost_user="no"
1476 ;;
1477 --enable-vhost-user) vhost_user="yes"
1478 ;;
1479 --disable-vhost-vdpa) vhost_vdpa="no"
1480 ;;
1481 --enable-vhost-vdpa) vhost_vdpa="yes"
1482 ;;
1483 --disable-vhost-kernel) vhost_kernel="no"
1484 ;;
1485 --enable-vhost-kernel) vhost_kernel="yes"
1486 ;;
1487 --disable-capstone) capstone="disabled"
1488 ;;
1489 --enable-capstone) capstone="enabled"
1490 ;;
1491 --enable-capstone=git) capstone="internal"
1492 ;;
1493 --enable-capstone=system) capstone="system"
1494 ;;
1495 --with-git=*) git="$optarg"
1496 ;;
1497 --enable-git-update)
1498 git_submodules_action="update"
1499 echo "--enable-git-update deprecated, use --with-git-submodules=update"
1500 ;;
1501 --disable-git-update)
1502 git_submodules_action="validate"
1503 echo "--disable-git-update deprecated, use --with-git-submodules=validate"
1504 ;;
1505 --with-git-submodules=*)
1506 git_submodules_action="$optarg"
1507 ;;
1508 --enable-debug-mutex) debug_mutex=yes
1509 ;;
1510 --disable-debug-mutex) debug_mutex=no
1511 ;;
1512 --enable-libpmem) libpmem="enabled"
1513 ;;
1514 --disable-libpmem) libpmem="disabled"
1515 ;;
1516 --enable-xkbcommon) xkbcommon="enabled"
1517 ;;
1518 --disable-xkbcommon) xkbcommon="disabled"
1519 ;;
1520 --enable-plugins) if test "$mingw32" = "yes"; then
1521 error_exit "TCG plugins not currently supported on Windows platforms"
1522 else
1523 plugins="yes"
1524 fi
1525 ;;
1526 --disable-plugins) plugins="no"
1527 ;;
1528 --enable-containers) use_containers="yes"
1529 ;;
1530 --disable-containers) use_containers="no"
1531 ;;
1532 --enable-fuzzing) fuzzing=true
1533 ;;
1534 --disable-fuzzing) fuzzing=false
1535 ;;
1536 --gdb=*) gdb_bin="$optarg"
1537 ;;
1538 --enable-rng-none) rng_none=yes
1539 ;;
1540 --disable-rng-none) rng_none=no
1541 ;;
1542 --enable-keyring) secret_keyring="yes"
1543 ;;
1544 --disable-keyring) secret_keyring="no"
1545 ;;
1546 --enable-libdaxctl) libdaxctl="enabled"
1547 ;;
1548 --disable-libdaxctl) libdaxctl="disabled"
1549 ;;
1550 --enable-fuse) fuse="enabled"
1551 ;;
1552 --disable-fuse) fuse="disabled"
1553 ;;
1554 --enable-fuse-lseek) fuse_lseek="enabled"
1555 ;;
1556 --disable-fuse-lseek) fuse_lseek="disabled"
1557 ;;
1558 --enable-multiprocess) multiprocess="enabled"
1559 ;;
1560 --disable-multiprocess) multiprocess="disabled"
1561 ;;
1562 --enable-gio) gio=yes
1563 ;;
1564 --disable-gio) gio=no
1565 ;;
1566 --enable-slirp-smbd) slirp_smbd=yes
1567 ;;
1568 --disable-slirp-smbd) slirp_smbd=no
1569 ;;
1570 *)
1571 echo "ERROR: unknown option $opt"
1572 echo "Try '$0 --help' for more information"
1573 exit 1
1574 ;;
1575 esac
1576 done
1577
1578 # test for any invalid configuration combinations
1579 if test "$plugins" = "yes" -a "$tcg" = "disabled"; then
1580 error_exit "Can't enable plugins on non-TCG builds"
1581 fi
1582
1583 case $git_submodules_action in
1584 update|validate)
1585 if test ! -e "$source_path/.git"; then
1586 echo "ERROR: cannot $git_submodules_action git submodules without .git"
1587 exit 1
1588 fi
1589 ;;
1590 ignore)
1591 if ! test -f "$source_path/ui/keycodemapdb/README"
1592 then
1593 echo
1594 echo "ERROR: missing GIT submodules"
1595 echo
1596 if test -e "$source_path/.git"; then
1597 echo "--with-git-submodules=ignore specified but submodules were not"
1598 echo "checked out. Please initialize and update submodules."
1599 else
1600 echo "This is not a GIT checkout but module content appears to"
1601 echo "be missing. Do not use 'git archive' or GitHub download links"
1602 echo "to acquire QEMU source archives. Non-GIT builds are only"
1603 echo "supported with source archives linked from:"
1604 echo
1605 echo " https://www.qemu.org/download/#source"
1606 echo
1607 echo "Developers working with GIT can use scripts/archive-source.sh"
1608 echo "if they need to create valid source archives."
1609 fi
1610 echo
1611 exit 1
1612 fi
1613 ;;
1614 *)
1615 echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
1616 exit 1
1617 ;;
1618 esac
1619
1620 libdir="${libdir:-$prefix/lib}"
1621 libexecdir="${libexecdir:-$prefix/libexec}"
1622 includedir="${includedir:-$prefix/include}"
1623
1624 if test "$mingw32" = "yes" ; then
1625 bindir="${bindir:-$prefix}"
1626 else
1627 bindir="${bindir:-$prefix/bin}"
1628 fi
1629 mandir="${mandir:-$prefix/share/man}"
1630 datadir="${datadir:-$prefix/share}"
1631 docdir="${docdir:-$prefix/share/doc}"
1632 sysconfdir="${sysconfdir:-$prefix/etc}"
1633 local_statedir="${local_statedir:-$prefix/var}"
1634 firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1635 localedir="${localedir:-$datadir/locale}"
1636
1637 case "$cpu" in
1638 ppc)
1639 CPU_CFLAGS="-m32"
1640 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1641 ;;
1642 ppc64)
1643 CPU_CFLAGS="-m64"
1644 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1645 ;;
1646 sparc)
1647 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1648 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1649 ;;
1650 sparc64)
1651 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1652 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1653 ;;
1654 s390)
1655 CPU_CFLAGS="-m31"
1656 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1657 ;;
1658 s390x)
1659 CPU_CFLAGS="-m64"
1660 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1661 ;;
1662 i386)
1663 CPU_CFLAGS="-m32"
1664 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1665 ;;
1666 x86_64)
1667 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1668 # If we truly care, we should simply detect this case at
1669 # runtime and generate the fallback to serial emulation.
1670 CPU_CFLAGS="-m64 -mcx16"
1671 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1672 ;;
1673 x32)
1674 CPU_CFLAGS="-mx32"
1675 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1676 ;;
1677 # No special flags required for other host CPUs
1678 esac
1679
1680 if eval test -z "\${cross_cc_$cpu}"; then
1681 eval "cross_cc_${cpu}=\$cc"
1682 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1683 fi
1684
1685 # For user-mode emulation the host arch has to be one we explicitly
1686 # support, even if we're using TCI.
1687 if [ "$ARCH" = "unknown" ]; then
1688 bsd_user="no"
1689 linux_user="no"
1690 fi
1691
1692 default_target_list=""
1693 deprecated_targets_list=ppc64abi32-linux-user
1694 deprecated_features=""
1695 mak_wilds=""
1696
1697 if [ "$softmmu" = "yes" ]; then
1698 mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
1699 fi
1700 if [ "$linux_user" = "yes" ]; then
1701 mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
1702 fi
1703 if [ "$bsd_user" = "yes" ]; then
1704 mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
1705 fi
1706
1707 # If the user doesn't explicitly specify a deprecated target we will
1708 # skip it.
1709 if test -z "$target_list"; then
1710 if test -z "$target_list_exclude"; then
1711 target_list_exclude="$deprecated_targets_list"
1712 else
1713 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1714 fi
1715 fi
1716
1717 for config in $mak_wilds; do
1718 target="$(basename "$config" .mak)"
1719 if echo "$target_list_exclude" | grep -vq "$target"; then
1720 default_target_list="${default_target_list} $target"
1721 fi
1722 done
1723
1724 # Enumerate public trace backends for --help output
1725 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1726
1727 if test x"$show_help" = x"yes" ; then
1728 cat << EOF
1729
1730 Usage: configure [options]
1731 Options: [defaults in brackets after descriptions]
1732
1733 Standard options:
1734 --help print this message
1735 --prefix=PREFIX install in PREFIX [$prefix]
1736 --interp-prefix=PREFIX where to find shared libraries, etc.
1737 use %M for cpu name [$interp_prefix]
1738 --target-list=LIST set target list (default: build all non-deprecated)
1739 $(echo Available targets: $default_target_list | \
1740 fold -s -w 53 | sed -e 's/^/ /')
1741 $(echo Deprecated targets: $deprecated_targets_list | \
1742 fold -s -w 53 | sed -e 's/^/ /')
1743 --target-list-exclude=LIST exclude a set of targets from the default target-list
1744
1745 Advanced options (experts only):
1746 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
1747 --cc=CC use C compiler CC [$cc]
1748 --iasl=IASL use ACPI compiler IASL [$iasl]
1749 --host-cc=CC use C compiler CC [$host_cc] for code run at
1750 build time
1751 --cxx=CXX use C++ compiler CXX [$cxx]
1752 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1753 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1754 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1755 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1756 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1757 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1758 --make=MAKE use specified make [$make]
1759 --python=PYTHON use specified python [$python]
1760 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1761 --meson=MESON use specified meson [$meson]
1762 --ninja=NINJA use specified ninja [$ninja]
1763 --smbd=SMBD use specified smbd [$smbd]
1764 --with-git=GIT use specified git [$git]
1765 --with-git-submodules=update update git submodules (default if .git dir exists)
1766 --with-git-submodules=validate fail if git submodules are not up to date
1767 --with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
1768 --static enable static build [$static]
1769 --mandir=PATH install man pages in PATH
1770 --datadir=PATH install firmware in PATH/$qemu_suffix
1771 --localedir=PATH install translation in PATH/$qemu_suffix
1772 --docdir=PATH install documentation in PATH/$qemu_suffix
1773 --bindir=PATH install binaries in PATH
1774 --libdir=PATH install libraries in PATH
1775 --libexecdir=PATH install helper binaries in PATH
1776 --sysconfdir=PATH install config in PATH/$qemu_suffix
1777 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1778 --firmwarepath=PATH search PATH for firmware files
1779 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1780 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1781 --with-pkgversion=VERS use specified string as sub-version of the package
1782 --without-default-features default all --enable-* options to "disabled"
1783 --without-default-devices do not include any device that is not needed to
1784 start the emulator (only use if you are including
1785 desired devices in configs/devices/)
1786 --with-devices-ARCH=NAME override default configs/devices
1787 --enable-debug enable common debug build options
1788 --enable-sanitizers enable default sanitizers
1789 --enable-tsan enable thread sanitizer
1790 --disable-strip disable stripping binaries
1791 --disable-werror disable compilation abort on warning
1792 --disable-stack-protector disable compiler-provided stack protection
1793 --audio-drv-list=LIST set audio drivers list
1794 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1795 --block-drv-rw-whitelist=L
1796 set block driver read-write whitelist
1797 (by default affects only QEMU, not tools like qemu-img)
1798 --block-drv-ro-whitelist=L
1799 set block driver read-only whitelist
1800 (by default affects only QEMU, not tools like qemu-img)
1801 --enable-block-drv-whitelist-in-tools
1802 use block whitelist also in tools instead of only QEMU
1803 --enable-trace-backends=B Set trace backend
1804 Available backends: $trace_backend_list
1805 --with-trace-file=NAME Full PATH,NAME of file to store traces
1806 Default:trace-<pid>
1807 --disable-slirp disable SLIRP userspace network connectivity
1808 --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
1809 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1810 --cpu=CPU Build for host CPU [$cpu]
1811 --with-coroutine=BACKEND coroutine backend. Supported options:
1812 ucontext, sigaltstack, windows
1813 --enable-gcov enable test coverage analysis with gcov
1814 --disable-blobs disable installing provided firmware blobs
1815 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1816 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1817 --tls-priority default TLS protocol/cipher priority string
1818 --enable-gprof QEMU profiling with gprof
1819 --enable-profiler profiler support
1820 --enable-debug-stack-usage
1821 track the maximum stack usage of stacks created by qemu_alloc_stack
1822 --enable-plugins
1823 enable plugins via shared library loading
1824 --disable-containers don't use containers for cross-building
1825 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1826
1827 Optional features, enabled with --enable-FEATURE and
1828 disabled with --disable-FEATURE, default is enabled if available
1829 (unless built with --without-default-features):
1830
1831 system all system emulation targets
1832 user supported user emulation targets
1833 linux-user all linux usermode emulation targets
1834 bsd-user all BSD usermode emulation targets
1835 docs build documentation
1836 guest-agent build the QEMU Guest Agent
1837 guest-agent-msi build guest agent Windows MSI installation package
1838 pie Position Independent Executables
1839 modules modules support (non-Windows)
1840 module-upgrades try to load modules from alternate paths for upgrades
1841 debug-tcg TCG debugging (default is disabled)
1842 debug-info debugging information
1843 lto Enable Link-Time Optimization.
1844 sparse sparse checker
1845 safe-stack SafeStack Stack Smash Protection. Depends on
1846 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1847 cfi Enable Control-Flow Integrity for indirect function calls.
1848 In case of a cfi violation, QEMU is terminated with SIGILL
1849 Depends on lto and is incompatible with modules
1850 Automatically enables Link-Time Optimization (lto)
1851 cfi-debug In case of a cfi violation, a message containing the line that
1852 triggered the error is written to stderr. After the error,
1853 QEMU is still terminated with SIGILL
1854 gnutls GNUTLS cryptography support
1855 nettle nettle cryptography support
1856 gcrypt libgcrypt cryptography support
1857 auth-pam PAM access control
1858 sdl SDL UI
1859 sdl-image SDL Image support for icons
1860 gtk gtk UI
1861 vte vte support for the gtk UI
1862 curses curses UI
1863 iconv font glyph conversion support
1864 vnc VNC UI support
1865 vnc-sasl SASL encryption for VNC server
1866 vnc-jpeg JPEG lossy compression for VNC server
1867 vnc-png PNG compression for VNC server
1868 cocoa Cocoa UI (Mac OS X only)
1869 virtfs VirtFS
1870 virtiofsd build virtiofs daemon (virtiofsd)
1871 libudev Use libudev to enumerate host devices
1872 mpath Multipath persistent reservation passthrough
1873 xen xen backend driver support
1874 xen-pci-passthrough PCI passthrough support for Xen
1875 alsa ALSA sound support
1876 coreaudio CoreAudio sound support
1877 dsound DirectSound sound support
1878 jack JACK sound support
1879 oss OSS sound support
1880 pa PulseAudio sound support
1881 brlapi BrlAPI (Braile)
1882 curl curl connectivity
1883 membarrier membarrier system call (for Linux 4.14+ or Windows)
1884 fdt fdt device tree
1885 kvm KVM acceleration support
1886 hax HAX acceleration support
1887 hvf Hypervisor.framework acceleration support
1888 nvmm NVMM acceleration support
1889 whpx Windows Hypervisor Platform acceleration support
1890 rdma Enable RDMA-based migration
1891 pvrdma Enable PVRDMA support
1892 vde support for vde network
1893 netmap support for netmap network
1894 linux-aio Linux AIO support
1895 linux-io-uring Linux io_uring support
1896 cap-ng libcap-ng support
1897 attr attr and xattr support
1898 vhost-net vhost-net kernel acceleration support
1899 vhost-vsock virtio sockets device support
1900 vhost-scsi vhost-scsi kernel target support
1901 vhost-crypto vhost-user-crypto backend support
1902 vhost-kernel vhost kernel backend support
1903 vhost-user vhost-user backend support
1904 vhost-user-blk-server vhost-user-blk server support
1905 vhost-vdpa vhost-vdpa kernel backend support
1906 bpf BPF kernel support
1907 spice spice
1908 spice-protocol spice-protocol
1909 rbd rados block device (rbd)
1910 libiscsi iscsi support
1911 libnfs nfs support
1912 smartcard smartcard support (libcacard)
1913 u2f U2F support (u2f-emu)
1914 libusb libusb (for usb passthrough)
1915 live-block-migration Block migration in the main migration stream
1916 usb-redir usb network redirection support
1917 lzo support of lzo compression library
1918 snappy support of snappy compression library
1919 bzip2 support of bzip2 compression library
1920 (for reading bzip2-compressed dmg images)
1921 lzfse support of lzfse compression library
1922 (for reading lzfse-compressed dmg images)
1923 zstd support for zstd compression library
1924 (for migration compression and qcow2 cluster compression)
1925 seccomp seccomp support
1926 coroutine-pool coroutine freelist (better performance)
1927 glusterfs GlusterFS backend
1928 tpm TPM support
1929 libssh ssh block device support
1930 numa libnuma support
1931 libxml2 for Parallels image format
1932 tcmalloc tcmalloc support
1933 jemalloc jemalloc support
1934 avx2 AVX2 optimization support
1935 avx512f AVX512F optimization support
1936 replication replication support
1937 opengl opengl support
1938 virglrenderer virgl rendering support
1939 xfsctl xfsctl support
1940 qom-cast-debug cast debugging support
1941 tools build qemu-io, qemu-nbd and qemu-img tools
1942 bochs bochs image format support
1943 cloop cloop image format support
1944 dmg dmg image format support
1945 qcow1 qcow v1 image format support
1946 vdi vdi image format support
1947 vvfat vvfat image format support
1948 qed qed image format support
1949 parallels parallels image format support
1950 crypto-afalg Linux AF_ALG crypto backend driver
1951 capstone capstone disassembler support
1952 debug-mutex mutex debugging support
1953 libpmem libpmem support
1954 xkbcommon xkbcommon support
1955 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1956 libdaxctl libdaxctl support
1957 fuse FUSE block device export
1958 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
1959 multiprocess Out of process device emulation support
1960 gio libgio support
1961 slirp-smbd use smbd (at path --smbd=*) in slirp networking
1962
1963 NOTE: The object files are built at the place where configure is launched
1964 EOF
1965 exit 0
1966 fi
1967
1968 # Remove old dependency files to make sure that they get properly regenerated
1969 rm -f */config-devices.mak.d
1970
1971 if test -z "$python"
1972 then
1973 error_exit "Python not found. Use --python=/path/to/python"
1974 fi
1975 if ! has "$make"
1976 then
1977 error_exit "GNU make ($make) not found"
1978 fi
1979
1980 # Note that if the Python conditional here evaluates True we will exit
1981 # with status 1 which is a shell 'false' value.
1982 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1983 error_exit "Cannot use '$python', Python >= 3.6 is required." \
1984 "Use --python=/path/to/python to specify a supported Python."
1985 fi
1986
1987 # Preserve python version since some functionality is dependent on it
1988 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)
1989
1990 # Suppress writing compiled files
1991 python="$python -B"
1992
1993 if test -z "$meson"; then
1994 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.59.2; then
1995 meson=meson
1996 elif test $git_submodules_action != 'ignore' ; then
1997 meson=git
1998 elif test -e "${source_path}/meson/meson.py" ; then
1999 meson=internal
2000 else
2001 if test "$explicit_python" = yes; then
2002 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
2003 else
2004 error_exit "Meson not found. Use --meson=/path/to/meson"
2005 fi
2006 fi
2007 else
2008 # Meson uses its own Python interpreter to invoke other Python scripts,
2009 # but the user wants to use the one they specified with --python.
2010 #
2011 # We do not want to override the distro Python interpreter (and sometimes
2012 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2013 # just require --meson=git|internal together with --python.
2014 if test "$explicit_python" = yes; then
2015 case "$meson" in
2016 git | internal) ;;
2017 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2018 esac
2019 fi
2020 fi
2021
2022 if test "$meson" = git; then
2023 git_submodules="${git_submodules} meson"
2024 fi
2025
2026 case "$meson" in
2027 git | internal)
2028 meson="$python ${source_path}/meson/meson.py"
2029 ;;
2030 *) meson=$(command -v "$meson") ;;
2031 esac
2032
2033 # Probe for ninja
2034
2035 if test -z "$ninja"; then
2036 for c in ninja ninja-build samu; do
2037 if has $c; then
2038 ninja=$(command -v "$c")
2039 break
2040 fi
2041 done
2042 if test -z "$ninja"; then
2043 error_exit "Cannot find Ninja"
2044 fi
2045 fi
2046
2047 # Check that the C compiler works. Doing this here before testing
2048 # the host CPU ensures that we had a valid CC to autodetect the
2049 # $cpu var (and we should bail right here if that's not the case).
2050 # It also allows the help message to be printed without a CC.
2051 write_c_skeleton;
2052 if compile_object ; then
2053 : C compiler works ok
2054 else
2055 error_exit "\"$cc\" either does not exist or does not work"
2056 fi
2057 if ! compile_prog ; then
2058 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2059 fi
2060
2061 # Consult white-list to determine whether to enable werror
2062 # by default. Only enable by default for git builds
2063 if test -z "$werror" ; then
2064 if test "$git_submodules_action" != "ignore" && \
2065 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2066 werror="yes"
2067 else
2068 werror="no"
2069 fi
2070 fi
2071
2072 if test "$targetos" = "bogus"; then
2073 # Now that we know that we're not printing the help and that
2074 # the compiler works (so the results of the check_defines we used
2075 # to identify the OS are reliable), if we didn't recognize the
2076 # host OS we should stop now.
2077 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2078 fi
2079
2080 # Check whether the compiler matches our minimum requirements:
2081 cat > $TMPC << EOF
2082 #if defined(__clang_major__) && defined(__clang_minor__)
2083 # ifdef __apple_build_version__
2084 # if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
2085 # error You need at least XCode Clang v10.0 to compile QEMU
2086 # endif
2087 # else
2088 # if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
2089 # error You need at least Clang v6.0 to compile QEMU
2090 # endif
2091 # endif
2092 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2093 # if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
2094 # error You need at least GCC v7.4.0 to compile QEMU
2095 # endif
2096 #else
2097 # error You either need GCC or Clang to compiler QEMU
2098 #endif
2099 int main (void) { return 0; }
2100 EOF
2101 if ! compile_prog "" "" ; then
2102 error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)"
2103 fi
2104
2105 # Accumulate -Wfoo and -Wno-bar separately.
2106 # We will list all of the enable flags first, and the disable flags second.
2107 # Note that we do not add -Werror, because that would enable it for all
2108 # configure tests. If a configure test failed due to -Werror this would
2109 # just silently disable some features, so it's too error prone.
2110
2111 warn_flags=
2112 add_to warn_flags -Wold-style-declaration
2113 add_to warn_flags -Wold-style-definition
2114 add_to warn_flags -Wtype-limits
2115 add_to warn_flags -Wformat-security
2116 add_to warn_flags -Wformat-y2k
2117 add_to warn_flags -Winit-self
2118 add_to warn_flags -Wignored-qualifiers
2119 add_to warn_flags -Wempty-body
2120 add_to warn_flags -Wnested-externs
2121 add_to warn_flags -Wendif-labels
2122 add_to warn_flags -Wexpansion-to-defined
2123 add_to warn_flags -Wimplicit-fallthrough=2
2124
2125 nowarn_flags=
2126 add_to nowarn_flags -Wno-initializer-overrides
2127 add_to nowarn_flags -Wno-missing-include-dirs
2128 add_to nowarn_flags -Wno-shift-negative-value
2129 add_to nowarn_flags -Wno-string-plus-int
2130 add_to nowarn_flags -Wno-typedef-redefinition
2131 add_to nowarn_flags -Wno-tautological-type-limit-compare
2132 add_to nowarn_flags -Wno-psabi
2133
2134 gcc_flags="$warn_flags $nowarn_flags"
2135
2136 cc_has_warning_flag() {
2137 write_c_skeleton;
2138
2139 # Use the positive sense of the flag when testing for -Wno-wombat
2140 # support (gcc will happily accept the -Wno- form of unknown
2141 # warning options).
2142 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2143 compile_prog "-Werror $optflag" ""
2144 }
2145
2146 for flag in $gcc_flags; do
2147 if cc_has_warning_flag $flag ; then
2148 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2149 fi
2150 done
2151
2152 if test "$stack_protector" != "no"; then
2153 cat > $TMPC << EOF
2154 int main(int argc, char *argv[])
2155 {
2156 char arr[64], *p = arr, *c = argv[0];
2157 while (*c) {
2158 *p++ = *c++;
2159 }
2160 return 0;
2161 }
2162 EOF
2163 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2164 sp_on=0
2165 for flag in $gcc_flags; do
2166 # We need to check both a compile and a link, since some compiler
2167 # setups fail only on a .c->.o compile and some only at link time
2168 if compile_object "-Werror $flag" &&
2169 compile_prog "-Werror $flag" ""; then
2170 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2171 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2172 sp_on=1
2173 break
2174 fi
2175 done
2176 if test "$stack_protector" = yes; then
2177 if test $sp_on = 0; then
2178 error_exit "Stack protector not supported"
2179 fi
2180 fi
2181 fi
2182
2183 # Disable -Wmissing-braces on older compilers that warn even for
2184 # the "universal" C zero initializer {0}.
2185 cat > $TMPC << EOF
2186 struct {
2187 int a[2];
2188 } x = {0};
2189 EOF
2190 if compile_object "-Werror" "" ; then
2191 :
2192 else
2193 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2194 fi
2195
2196 # Our module code doesn't support Windows
2197 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2198 error_exit "Modules are not available for Windows"
2199 fi
2200
2201 # module_upgrades is only reasonable if modules are enabled
2202 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2203 error_exit "Can't enable module-upgrades as Modules are not enabled"
2204 fi
2205
2206 # Static linking is not possible with plugins, modules or PIE
2207 if test "$static" = "yes" ; then
2208 if test "$modules" = "yes" ; then
2209 error_exit "static and modules are mutually incompatible"
2210 fi
2211 if test "$plugins" = "yes"; then
2212 error_exit "static and plugins are mutually incompatible"
2213 else
2214 plugins="no"
2215 fi
2216 fi
2217
2218 # Unconditional check for compiler __thread support
2219 cat > $TMPC << EOF
2220 static __thread int tls_var;
2221 int main(void) { return tls_var; }
2222 EOF
2223
2224 if ! compile_prog "-Werror" "" ; then
2225 error_exit "Your compiler does not support the __thread specifier for " \
2226 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2227 fi
2228
2229 cat > $TMPC << EOF
2230
2231 #ifdef __linux__
2232 # define THREAD __thread
2233 #else
2234 # define THREAD
2235 #endif
2236 static THREAD int tls_var;
2237 int main(void) { return tls_var; }
2238 EOF
2239
2240 # Check we support --no-pie first; we will need this for building ROMs.
2241 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2242 CFLAGS_NOPIE="-fno-pie"
2243 fi
2244
2245 if test "$static" = "yes"; then
2246 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2247 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2248 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2249 pie="yes"
2250 elif test "$pie" = "yes"; then
2251 error_exit "-static-pie not available due to missing toolchain support"
2252 else
2253 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2254 pie="no"
2255 fi
2256 elif test "$pie" = "no"; then
2257 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2258 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2259 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2260 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2261 pie="yes"
2262 elif test "$pie" = "yes"; then
2263 error_exit "PIE not available due to missing toolchain support"
2264 else
2265 echo "Disabling PIE due to missing toolchain support"
2266 pie="no"
2267 fi
2268
2269 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2270 # The combination is known as "full relro", because .got.plt is read-only too.
2271 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2272 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2273 fi
2274
2275 ##########################################
2276 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2277 # use i686 as default anyway, but for those that don't, an explicit
2278 # specification is necessary
2279
2280 if test "$cpu" = "i386"; then
2281 cat > $TMPC << EOF
2282 static int sfaa(int *ptr)
2283 {
2284 return __sync_fetch_and_and(ptr, 0);
2285 }
2286
2287 int main(void)
2288 {
2289 int val = 42;
2290 val = __sync_val_compare_and_swap(&val, 0, 1);
2291 sfaa(&val);
2292 return val;
2293 }
2294 EOF
2295 if ! compile_prog "" "" ; then
2296 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2297 fi
2298 fi
2299
2300 #########################################
2301 # Solaris specific configure tool chain decisions
2302
2303 if test "$solaris" = "yes" ; then
2304 if has ar; then
2305 :
2306 else
2307 if test -f /usr/ccs/bin/ar ; then
2308 error_exit "No path includes ar" \
2309 "Add /usr/ccs/bin to your path and rerun configure"
2310 fi
2311 error_exit "No path includes ar"
2312 fi
2313 fi
2314
2315 if test "$tcg" = "enabled"; then
2316 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
2317 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
2318 fi
2319
2320 if test -z "${target_list+xxx}" ; then
2321 default_targets=yes
2322 for target in $default_target_list; do
2323 target_list="$target_list $target"
2324 done
2325 target_list="${target_list# }"
2326 else
2327 default_targets=no
2328 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2329 for target in $target_list; do
2330 # Check that we recognised the target name; this allows a more
2331 # friendly error message than if we let it fall through.
2332 case " $default_target_list " in
2333 *" $target "*)
2334 ;;
2335 *)
2336 error_exit "Unknown target name '$target'"
2337 ;;
2338 esac
2339 done
2340 fi
2341
2342 for target in $target_list; do
2343 # if a deprecated target is enabled we note it here
2344 if echo "$deprecated_targets_list" | grep -q "$target"; then
2345 add_to deprecated_features $target
2346 fi
2347 done
2348
2349 # see if system emulation was really requested
2350 case " $target_list " in
2351 *"-softmmu "*) softmmu=yes
2352 ;;
2353 *) softmmu=no
2354 ;;
2355 esac
2356
2357 feature_not_found() {
2358 feature=$1
2359 remedy=$2
2360
2361 error_exit "User requested feature $feature" \
2362 "configure was not able to find it." \
2363 "$remedy"
2364 }
2365
2366 # ---
2367 # big/little endian test
2368 cat > $TMPC << EOF
2369 #include <stdio.h>
2370 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2371 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2372 int main(int argc, char *argv[])
2373 {
2374 return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
2375 }
2376 EOF
2377
2378 if compile_prog ; then
2379 if strings -a $TMPE | grep -q BiGeNdIaN ; then
2380 bigendian="yes"
2381 elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then
2382 bigendian="no"
2383 else
2384 echo big/little test failed
2385 exit 1
2386 fi
2387 else
2388 echo big/little test failed
2389 exit 1
2390 fi
2391
2392 ##########################################
2393 # system tools
2394 if test -z "$want_tools"; then
2395 if test "$softmmu" = "no"; then
2396 want_tools=no
2397 else
2398 want_tools=yes
2399 fi
2400 fi
2401
2402 ##########################################
2403 # L2TPV3 probe
2404
2405 cat > $TMPC <<EOF
2406 #include <sys/socket.h>
2407 #include <linux/ip.h>
2408 int main(void) { return sizeof(struct mmsghdr); }
2409 EOF
2410 if compile_prog "" "" ; then
2411 l2tpv3=yes
2412 else
2413 l2tpv3=no
2414 fi
2415
2416 cat > $TMPC <<EOF
2417 #include <sys/mman.h>
2418 int main(int argc, char *argv[]) {
2419 return mlockall(MCL_FUTURE);
2420 }
2421 EOF
2422 if compile_prog "" "" ; then
2423 have_mlockall=yes
2424 else
2425 have_mlockall=no
2426 fi
2427
2428 #########################################
2429 # vhost interdependencies and host support
2430
2431 # vhost backends
2432 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2433 error_exit "vhost-user is only available on Linux"
2434 fi
2435 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2436 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2437 error_exit "vhost-vdpa is only available on Linux"
2438 fi
2439 test "$vhost_kernel" = "" && vhost_kernel=$linux
2440 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2441 error_exit "vhost-kernel is only available on Linux"
2442 fi
2443
2444 # vhost-kernel devices
2445 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2446 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2447 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2448 fi
2449 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2450 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2451 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2452 fi
2453
2454 # vhost-user backends
2455 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2456 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2457 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2458 fi
2459 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2460 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2461 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2462 fi
2463 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2464 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2465 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2466 fi
2467 #vhost-vdpa backends
2468 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2469 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2470 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2471 fi
2472
2473 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2474 if test "$vhost_net" = ""; then
2475 test "$vhost_net_user" = "yes" && vhost_net=yes
2476 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2477 test "$vhost_kernel" = "yes" && vhost_net=yes
2478 fi
2479
2480 ##########################################
2481 # pkg-config probe
2482
2483 if ! has "$pkg_config_exe"; then
2484 error_exit "pkg-config binary '$pkg_config_exe' not found"
2485 fi
2486
2487 ##########################################
2488 # NPTL probe
2489
2490 if test "$linux_user" = "yes"; then
2491 cat > $TMPC <<EOF
2492 #include <sched.h>
2493 #include <linux/futex.h>
2494 int main(void) {
2495 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2496 #error bork
2497 #endif
2498 return 0;
2499 }
2500 EOF
2501 if ! compile_object ; then
2502 feature_not_found "nptl" "Install glibc and linux kernel headers."
2503 fi
2504 fi
2505
2506 ##########################################
2507 # xen probe
2508
2509 if test "$xen" != "disabled" ; then
2510 # Check whether Xen library path is specified via --extra-ldflags to avoid
2511 # overriding this setting with pkg-config output. If not, try pkg-config
2512 # to obtain all needed flags.
2513
2514 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2515 $pkg_config --exists xencontrol ; then
2516 xen_ctrl_version="$(printf '%d%02d%02d' \
2517 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2518 xen=enabled
2519 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
2520 xen_pc="$xen_pc xenevtchn xendevicemodel"
2521 if $pkg_config --exists xentoolcore; then
2522 xen_pc="$xen_pc xentoolcore"
2523 fi
2524 xen_cflags="$($pkg_config --cflags $xen_pc)"
2525 xen_libs="$($pkg_config --libs $xen_pc)"
2526 else
2527
2528 xen_libs="-lxenstore -lxenctrl"
2529 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2530
2531 # First we test whether Xen headers and libraries are available.
2532 # If no, we are done and there is no Xen support.
2533 # If yes, more tests are run to detect the Xen version.
2534
2535 # Xen (any)
2536 cat > $TMPC <<EOF
2537 #include <xenctrl.h>
2538 int main(void) {
2539 return 0;
2540 }
2541 EOF
2542 if ! compile_prog "" "$xen_libs" ; then
2543 # Xen not found
2544 if test "$xen" = "enabled" ; then
2545 feature_not_found "xen" "Install xen devel"
2546 fi
2547 xen=disabled
2548
2549 # Xen unstable
2550 elif
2551 cat > $TMPC <<EOF &&
2552 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2553 #define __XEN_TOOLS__
2554 #include <xendevicemodel.h>
2555 #include <xenforeignmemory.h>
2556 int main(void) {
2557 xendevicemodel_handle *xd;
2558 xenforeignmemory_handle *xfmem;
2559
2560 xd = xendevicemodel_open(0, 0);
2561 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2562
2563 xfmem = xenforeignmemory_open(0, 0);
2564 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2565
2566 return 0;
2567 }
2568 EOF
2569 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2570 then
2571 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2572 xen_ctrl_version=41100
2573 xen=enabled
2574 elif
2575 cat > $TMPC <<EOF &&
2576 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2577 #include <xenforeignmemory.h>
2578 #include <xentoolcore.h>
2579 int main(void) {
2580 xenforeignmemory_handle *xfmem;
2581
2582 xfmem = xenforeignmemory_open(0, 0);
2583 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2584 xentoolcore_restrict_all(0);
2585
2586 return 0;
2587 }
2588 EOF
2589 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2590 then
2591 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2592 xen_ctrl_version=41000
2593 xen=enabled
2594 elif
2595 cat > $TMPC <<EOF &&
2596 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2597 #define __XEN_TOOLS__
2598 #include <xendevicemodel.h>
2599 int main(void) {
2600 xendevicemodel_handle *xd;
2601
2602 xd = xendevicemodel_open(0, 0);
2603 xendevicemodel_close(xd);
2604
2605 return 0;
2606 }
2607 EOF
2608 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2609 then
2610 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2611 xen_ctrl_version=40900
2612 xen=enabled
2613 elif
2614 cat > $TMPC <<EOF &&
2615 /*
2616 * If we have stable libs the we don't want the libxc compat
2617 * layers, regardless of what CFLAGS we may have been given.
2618 *
2619 * Also, check if xengnttab_grant_copy_segment_t is defined and
2620 * grant copy operation is implemented.
2621 */
2622 #undef XC_WANT_COMPAT_EVTCHN_API
2623 #undef XC_WANT_COMPAT_GNTTAB_API
2624 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2625 #include <xenctrl.h>
2626 #include <xenstore.h>
2627 #include <xenevtchn.h>
2628 #include <xengnttab.h>
2629 #include <xenforeignmemory.h>
2630 #include <stdint.h>
2631 #include <xen/hvm/hvm_info_table.h>
2632 #if !defined(HVM_MAX_VCPUS)
2633 # error HVM_MAX_VCPUS not defined
2634 #endif
2635 int main(void) {
2636 xc_interface *xc = NULL;
2637 xenforeignmemory_handle *xfmem;
2638 xenevtchn_handle *xe;
2639 xengnttab_handle *xg;
2640 xengnttab_grant_copy_segment_t* seg = NULL;
2641
2642 xs_daemon_open();
2643
2644 xc = xc_interface_open(0, 0, 0);
2645 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2646 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2647 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2648 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2649
2650 xfmem = xenforeignmemory_open(0, 0);
2651 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2652
2653 xe = xenevtchn_open(0, 0);
2654 xenevtchn_fd(xe);
2655
2656 xg = xengnttab_open(0, 0);
2657 xengnttab_grant_copy(xg, 0, seg);
2658
2659 return 0;
2660 }
2661 EOF
2662 compile_prog "" "$xen_libs $xen_stable_libs"
2663 then
2664 xen_ctrl_version=40800
2665 xen=enabled
2666 elif
2667 cat > $TMPC <<EOF &&
2668 /*
2669 * If we have stable libs the we don't want the libxc compat
2670 * layers, regardless of what CFLAGS we may have been given.
2671 */
2672 #undef XC_WANT_COMPAT_EVTCHN_API
2673 #undef XC_WANT_COMPAT_GNTTAB_API
2674 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2675 #include <xenctrl.h>
2676 #include <xenstore.h>
2677 #include <xenevtchn.h>
2678 #include <xengnttab.h>
2679 #include <xenforeignmemory.h>
2680 #include <stdint.h>
2681 #include <xen/hvm/hvm_info_table.h>
2682 #if !defined(HVM_MAX_VCPUS)
2683 # error HVM_MAX_VCPUS not defined
2684 #endif
2685 int main(void) {
2686 xc_interface *xc = NULL;
2687 xenforeignmemory_handle *xfmem;
2688 xenevtchn_handle *xe;
2689 xengnttab_handle *xg;
2690
2691 xs_daemon_open();
2692
2693 xc = xc_interface_open(0, 0, 0);
2694 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2695 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2696 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2697 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2698
2699 xfmem = xenforeignmemory_open(0, 0);
2700 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2701
2702 xe = xenevtchn_open(0, 0);
2703 xenevtchn_fd(xe);
2704
2705 xg = xengnttab_open(0, 0);
2706 xengnttab_map_grant_ref(xg, 0, 0, 0);
2707
2708 return 0;
2709 }
2710 EOF
2711 compile_prog "" "$xen_libs $xen_stable_libs"
2712 then
2713 xen_ctrl_version=40701
2714 xen=enabled
2715
2716 # Xen 4.6
2717 elif
2718 cat > $TMPC <<EOF &&
2719 #include <xenctrl.h>
2720 #include <xenstore.h>
2721 #include <stdint.h>
2722 #include <xen/hvm/hvm_info_table.h>
2723 #if !defined(HVM_MAX_VCPUS)
2724 # error HVM_MAX_VCPUS not defined
2725 #endif
2726 int main(void) {
2727 xc_interface *xc;
2728 xs_daemon_open();
2729 xc = xc_interface_open(0, 0, 0);
2730 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2731 xc_gnttab_open(NULL, 0);
2732 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2733 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2734 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2735 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2736 return 0;
2737 }
2738 EOF
2739 compile_prog "" "$xen_libs"
2740 then
2741 xen_ctrl_version=40600
2742 xen=enabled
2743
2744 # Xen 4.5
2745 elif
2746 cat > $TMPC <<EOF &&
2747 #include <xenctrl.h>
2748 #include <xenstore.h>
2749 #include <stdint.h>
2750 #include <xen/hvm/hvm_info_table.h>
2751 #if !defined(HVM_MAX_VCPUS)
2752 # error HVM_MAX_VCPUS not defined
2753 #endif
2754 int main(void) {
2755 xc_interface *xc;
2756 xs_daemon_open();
2757 xc = xc_interface_open(0, 0, 0);
2758 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2759 xc_gnttab_open(NULL, 0);
2760 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2761 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2762 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2763 return 0;
2764 }
2765 EOF
2766 compile_prog "" "$xen_libs"
2767 then
2768 xen_ctrl_version=40500
2769 xen=enabled
2770
2771 elif
2772 cat > $TMPC <<EOF &&
2773 #include <xenctrl.h>
2774 #include <xenstore.h>
2775 #include <stdint.h>
2776 #include <xen/hvm/hvm_info_table.h>
2777 #if !defined(HVM_MAX_VCPUS)
2778 # error HVM_MAX_VCPUS not defined
2779 #endif
2780 int main(void) {
2781 xc_interface *xc;
2782 xs_daemon_open();
2783 xc = xc_interface_open(0, 0, 0);
2784 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2785 xc_gnttab_open(NULL, 0);
2786 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2787 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2788 return 0;
2789 }
2790 EOF
2791 compile_prog "" "$xen_libs"
2792 then
2793 xen_ctrl_version=40200
2794 xen=enabled
2795
2796 else
2797 if test "$xen" = "enabled" ; then
2798 feature_not_found "xen (unsupported version)" \
2799 "Install a supported xen (xen 4.2 or newer)"
2800 fi
2801 xen=disabled
2802 fi
2803
2804 if test "$xen" = enabled; then
2805 if test $xen_ctrl_version -ge 40701 ; then
2806 xen_libs="$xen_libs $xen_stable_libs "
2807 fi
2808 fi
2809 fi
2810 fi
2811
2812 ##########################################
2813 # RDMA needs OpenFabrics libraries
2814 if test "$rdma" != "no" ; then
2815 cat > $TMPC <<EOF
2816 #include <rdma/rdma_cma.h>
2817 int main(void) { return 0; }
2818 EOF
2819 rdma_libs="-lrdmacm -libverbs -libumad"
2820 if compile_prog "" "$rdma_libs" ; then
2821 rdma="yes"
2822 else
2823 if test "$rdma" = "yes" ; then
2824 error_exit \
2825 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2826 " Your options:" \
2827 " (1) Fast: Install infiniband packages (devel) from your distro." \
2828 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2829 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2830 fi
2831 rdma="no"
2832 fi
2833 fi
2834
2835 ##########################################
2836 # PVRDMA detection
2837
2838 cat > $TMPC <<EOF &&
2839 #include <sys/mman.h>
2840
2841 int
2842 main(void)
2843 {
2844 char buf = 0;
2845 void *addr = &buf;
2846 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2847
2848 return 0;
2849 }
2850 EOF
2851
2852 if test "$rdma" = "yes" ; then
2853 case "$pvrdma" in
2854 "")
2855 if compile_prog "" ""; then
2856 pvrdma="yes"
2857 else
2858 pvrdma="no"
2859 fi
2860 ;;
2861 "yes")
2862 if ! compile_prog "" ""; then
2863 error_exit "PVRDMA is not supported since mremap is not implemented"
2864 fi
2865 pvrdma="yes"
2866 ;;
2867 "no")
2868 pvrdma="no"
2869 ;;
2870 esac
2871 else
2872 if test "$pvrdma" = "yes" ; then
2873 error_exit "PVRDMA requires rdma suppport"
2874 fi
2875 pvrdma="no"
2876 fi
2877
2878 # Let's see if enhanced reg_mr is supported
2879 if test "$pvrdma" = "yes" ; then
2880
2881 cat > $TMPC <<EOF &&
2882 #include <infiniband/verbs.h>
2883
2884 int
2885 main(void)
2886 {
2887 struct ibv_mr *mr;
2888 struct ibv_pd *pd = NULL;
2889 size_t length = 10;
2890 uint64_t iova = 0;
2891 int access = 0;
2892 void *addr = NULL;
2893
2894 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
2895
2896 ibv_dereg_mr(mr);
2897
2898 return 0;
2899 }
2900 EOF
2901 if ! compile_prog "" "-libverbs"; then
2902 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
2903 fi
2904 fi
2905
2906 ##########################################
2907 # xfsctl() probe, used for file-posix.c
2908 if test "$xfs" != "no" ; then
2909 cat > $TMPC << EOF
2910 #include <stddef.h> /* NULL */
2911 #include <xfs/xfs.h>
2912 int main(void)
2913 {
2914 xfsctl(NULL, 0, 0, NULL);
2915 return 0;
2916 }
2917 EOF
2918 if compile_prog "" "" ; then
2919 xfs="yes"
2920 else
2921 if test "$xfs" = "yes" ; then
2922 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
2923 fi
2924 xfs=no
2925 fi
2926 fi
2927
2928 ##########################################
2929 # vde libraries probe
2930 if test "$vde" != "no" ; then
2931 vde_libs="-lvdeplug"
2932 cat > $TMPC << EOF
2933 #include <libvdeplug.h>
2934 int main(void)
2935 {
2936 struct vde_open_args a = {0, 0, 0};
2937 char s[] = "";
2938 vde_open(s, s, &a);
2939 return 0;
2940 }
2941 EOF
2942 if compile_prog "" "$vde_libs" ; then
2943 vde=yes
2944 else
2945 if test "$vde" = "yes" ; then
2946 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2947 fi
2948 vde=no
2949 fi
2950 fi
2951
2952 ##########################################
2953 # netmap support probe
2954 # Apart from looking for netmap headers, we make sure that the host API version
2955 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2956 # a minor/major version number. Minor new features will be marked with values up
2957 # to 15, and if something happens that requires a change to the backend we will
2958 # move above 15, submit the backend fixes and modify this two bounds.
2959 if test "$netmap" != "no" ; then
2960 cat > $TMPC << EOF
2961 #include <inttypes.h>
2962 #include <net/if.h>
2963 #include <net/netmap.h>
2964 #include <net/netmap_user.h>
2965 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2966 #error
2967 #endif
2968 int main(void) { return 0; }
2969 EOF
2970 if compile_prog "" "" ; then
2971 netmap=yes
2972 else
2973 if test "$netmap" = "yes" ; then
2974 feature_not_found "netmap"
2975 fi
2976 netmap=no
2977 fi
2978 fi
2979
2980 ##########################################
2981 # plugin linker support probe
2982
2983 if test "$plugins" != "no"; then
2984
2985 #########################################
2986 # See if --dynamic-list is supported by the linker
2987
2988 ld_dynamic_list="no"
2989 cat > $TMPTXT <<EOF
2990 {
2991 foo;
2992 };
2993 EOF
2994
2995 cat > $TMPC <<EOF
2996 #include <stdio.h>
2997 void foo(void);
2998
2999 void foo(void)
3000 {
3001 printf("foo\n");
3002 }
3003
3004 int main(void)
3005 {
3006 foo();
3007 return 0;
3008 }
3009 EOF
3010
3011 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
3012 ld_dynamic_list="yes"
3013 fi
3014
3015 #########################################
3016 # See if -exported_symbols_list is supported by the linker
3017
3018 ld_exported_symbols_list="no"
3019 cat > $TMPTXT <<EOF
3020 _foo
3021 EOF
3022
3023 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
3024 ld_exported_symbols_list="yes"
3025 fi
3026
3027 if test "$ld_dynamic_list" = "no" &&
3028 test "$ld_exported_symbols_list" = "no" ; then
3029 if test "$plugins" = "yes"; then
3030 error_exit \
3031 "Plugin support requires dynamic linking and specifying a set of symbols " \
3032 "that are exported to plugins. Unfortunately your linker doesn't " \
3033 "support the flag (--dynamic-list or -exported_symbols_list) used " \
3034 "for this purpose."
3035 else
3036 plugins="no"
3037 fi
3038 else
3039 plugins="yes"
3040 fi
3041 fi
3042
3043 ##########################################
3044 # glib support probe
3045
3046 glib_req_ver=2.56
3047 glib_modules=gthread-2.0
3048 if test "$modules" = yes; then
3049 glib_modules="$glib_modules gmodule-export-2.0"
3050 elif test "$plugins" = "yes"; then
3051 glib_modules="$glib_modules gmodule-no-export-2.0"
3052 fi
3053
3054 for i in $glib_modules; do
3055 if $pkg_config --atleast-version=$glib_req_ver $i; then
3056 glib_cflags=$($pkg_config --cflags $i)
3057 glib_libs=$($pkg_config --libs $i)
3058 else
3059 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3060 fi
3061 done
3062
3063 # This workaround is required due to a bug in pkg-config file for glib as it
3064 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3065
3066 if test "$static" = yes && test "$mingw32" = yes; then
3067 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3068 fi
3069
3070 if ! test "$gio" = "no"; then
3071 pass=no
3072 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3073 gio_cflags=$($pkg_config --cflags gio-2.0)
3074 gio_libs=$($pkg_config --libs gio-2.0)
3075 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3076 if ! has "$gdbus_codegen"; then
3077 gdbus_codegen=
3078 fi
3079 # Check that the libraries actually work -- Ubuntu 18.04 ships
3080 # with pkg-config --static --libs data for gio-2.0 that is missing
3081 # -lblkid and will give a link error.
3082 cat > $TMPC <<EOF
3083 #include <gio/gio.h>
3084 int main(void)
3085 {
3086 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3087 return 0;
3088 }
3089 EOF
3090 if compile_prog "$gio_cflags" "$gio_libs" ; then
3091 pass=yes
3092 else
3093 pass=no
3094 fi
3095
3096 if test "$pass" = "yes" &&
3097 $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3098 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3099 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3100 fi
3101 fi
3102
3103 if test "$pass" = "no"; then
3104 if test "$gio" = "yes"; then
3105 feature_not_found "gio" "Install libgio >= 2.0"
3106 else
3107 gio=no
3108 fi
3109 else
3110 gio=yes
3111 fi
3112 fi
3113
3114 # Sanity check that the current size_t matches the
3115 # size that glib thinks it should be. This catches
3116 # problems on multi-arch where people try to build
3117 # 32-bit QEMU while pointing at 64-bit glib headers
3118 cat > $TMPC <<EOF
3119 #include <glib.h>
3120 #include <unistd.h>
3121
3122 #define QEMU_BUILD_BUG_ON(x) \
3123 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3124
3125 int main(void) {
3126 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3127 return 0;
3128 }
3129 EOF
3130
3131 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3132 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3133 "You probably need to set PKG_CONFIG_LIBDIR"\
3134 "to point to the right pkg-config files for your"\
3135 "build target"
3136 fi
3137
3138 # Silence clang warnings triggered by glib < 2.57.2
3139 cat > $TMPC << EOF
3140 #include <glib.h>
3141 typedef struct Foo {
3142 int i;
3143 } Foo;
3144 static void foo_free(Foo *f)
3145 {
3146 g_free(f);
3147 }
3148 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3149 int main(void) { return 0; }
3150 EOF
3151 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3152 if cc_has_warning_flag "-Wno-unused-function"; then
3153 glib_cflags="$glib_cflags -Wno-unused-function"
3154 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
3155 fi
3156 fi
3157
3158 ##########################################
3159 # SHA command probe for modules
3160 if test "$modules" = yes; then
3161 shacmd_probe="sha1sum sha1 shasum"
3162 for c in $shacmd_probe; do
3163 if has $c; then
3164 shacmd="$c"
3165 break
3166 fi
3167 done
3168 if test "$shacmd" = ""; then
3169 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3170 fi
3171 fi
3172
3173 ##########################################
3174 # pthread probe
3175 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3176
3177 pthread=no
3178 cat > $TMPC << EOF
3179 #include <pthread.h>
3180 static void *f(void *p) { return NULL; }
3181 int main(void) {
3182 pthread_t thread;
3183 pthread_create(&thread, 0, f, 0);
3184 return 0;
3185 }
3186 EOF
3187 if compile_prog "" "" ; then
3188 pthread=yes
3189 else
3190 for pthread_lib in $PTHREADLIBS_LIST; do
3191 if compile_prog "" "$pthread_lib" ; then
3192 pthread=yes
3193 break
3194 fi
3195 done
3196 fi
3197
3198 if test "$mingw32" != yes && test "$pthread" = no; then
3199 error_exit "pthread check failed" \
3200 "Make sure to have the pthread libs and headers installed."
3201 fi
3202
3203 # check for pthread_setname_np with thread id
3204 pthread_setname_np_w_tid=no
3205 cat > $TMPC << EOF
3206 #include <pthread.h>
3207
3208 static void *f(void *p) { return NULL; }
3209 int main(void)
3210 {
3211 pthread_t thread;
3212 pthread_create(&thread, 0, f, 0);
3213 pthread_setname_np(thread, "QEMU");
3214 return 0;
3215 }
3216 EOF
3217 if compile_prog "" "$pthread_lib" ; then
3218 pthread_setname_np_w_tid=yes
3219 fi
3220
3221 # check for pthread_setname_np without thread id
3222 pthread_setname_np_wo_tid=no
3223 cat > $TMPC << EOF
3224 #include <pthread.h>
3225
3226 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3227 int main(void)
3228 {
3229 pthread_t thread;
3230 pthread_create(&thread, 0, f, 0);
3231 return 0;
3232 }
3233 EOF
3234 if compile_prog "" "$pthread_lib" ; then
3235 pthread_setname_np_wo_tid=yes
3236 fi
3237
3238 ##########################################
3239 # libssh probe
3240 if test "$libssh" != "no" ; then
3241 if $pkg_config --exists "libssh >= 0.8.7"; then
3242 libssh_cflags=$($pkg_config libssh --cflags)
3243 libssh_libs=$($pkg_config libssh --libs)
3244 libssh=yes
3245 else
3246 if test "$libssh" = "yes" ; then
3247 error_exit "libssh required for --enable-libssh"
3248 fi
3249 libssh=no
3250 fi
3251 fi
3252
3253 ##########################################
3254 # linux-aio probe
3255
3256 if test "$linux_aio" != "no" ; then
3257 cat > $TMPC <<EOF
3258 #include <libaio.h>
3259 #include <sys/eventfd.h>
3260 #include <stddef.h>
3261 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3262 EOF
3263 if compile_prog "" "-laio" ; then
3264 linux_aio=yes
3265 else
3266 if test "$linux_aio" = "yes" ; then
3267 feature_not_found "linux AIO" "Install libaio devel"
3268 fi
3269 linux_aio=no
3270 fi
3271 fi
3272
3273 ##########################################
3274 # TPM emulation is only on POSIX
3275
3276 if test "$tpm" = ""; then
3277 if test "$mingw32" = "yes"; then
3278 tpm=no
3279 else
3280 tpm=yes
3281 fi
3282 elif test "$tpm" = "yes"; then
3283 if test "$mingw32" = "yes" ; then
3284 error_exit "TPM emulation only available on POSIX systems"
3285 fi
3286 fi
3287
3288 ##########################################
3289 # iovec probe
3290 cat > $TMPC <<EOF
3291 #include <sys/types.h>
3292 #include <sys/uio.h>
3293 #include <unistd.h>
3294 int main(void) { return sizeof(struct iovec); }
3295 EOF
3296 iovec=no
3297 if compile_prog "" "" ; then
3298 iovec=yes
3299 fi
3300
3301 ##########################################
3302 # fdt probe
3303
3304 case "$fdt" in
3305 auto | enabled | internal)
3306 # Simpler to always update submodule, even if not needed.
3307 git_submodules="${git_submodules} dtc"
3308 ;;
3309 esac
3310
3311 ##########################################
3312 # opengl probe (for sdl2, gtk)
3313
3314 if test "$opengl" != "no" ; then
3315 epoxy=no
3316 if $pkg_config epoxy; then
3317 cat > $TMPC << EOF
3318 #include <epoxy/egl.h>
3319 int main(void) { return 0; }
3320 EOF
3321 if compile_prog "" "" ; then
3322 epoxy=yes
3323 fi
3324 fi
3325
3326 if test "$epoxy" = "yes" ; then
3327 opengl_cflags="$($pkg_config --cflags epoxy)"
3328 opengl_libs="$($pkg_config --libs epoxy)"
3329 opengl=yes
3330 else
3331 if test "$opengl" = "yes" ; then
3332 feature_not_found "opengl" "Please install epoxy with EGL"
3333 fi
3334 opengl_cflags=""
3335 opengl_libs=""
3336 opengl=no
3337 fi
3338 fi
3339
3340 ##########################################
3341 # libnuma probe
3342
3343 if test "$numa" != "no" ; then
3344 cat > $TMPC << EOF
3345 #include <numa.h>
3346 int main(void) { return numa_available(); }
3347 EOF
3348
3349 if compile_prog "" "-lnuma" ; then
3350 numa=yes
3351 numa_libs="-lnuma"
3352 else
3353 if test "$numa" = "yes" ; then
3354 feature_not_found "numa" "install numactl devel"
3355 fi
3356 numa=no
3357 fi
3358 fi
3359
3360 malloc=system
3361 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3362 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3363 exit 1
3364 elif test "$tcmalloc" = "yes" ; then
3365 malloc=tcmalloc
3366 elif test "$jemalloc" = "yes" ; then
3367 malloc=jemalloc
3368 fi
3369
3370 # check for usbfs
3371 have_usbfs=no
3372 if test "$linux_user" = "yes"; then
3373 cat > $TMPC << EOF
3374 #include <linux/usbdevice_fs.h>
3375
3376 #ifndef USBDEVFS_GET_CAPABILITIES
3377 #error "USBDEVFS_GET_CAPABILITIES undefined"
3378 #endif
3379
3380 #ifndef USBDEVFS_DISCONNECT_CLAIM
3381 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
3382 #endif
3383
3384 int main(void)
3385 {
3386 return 0;
3387 }
3388 EOF
3389 if compile_prog "" ""; then
3390 have_usbfs=yes
3391 fi
3392 fi
3393
3394 ##########################################
3395 # spice probe
3396 if test "$spice_protocol" != "no" ; then
3397 spice_protocol_cflags=$($pkg_config --cflags spice-protocol 2>/dev/null)
3398 if $pkg_config --atleast-version=0.12.3 spice-protocol; then
3399 spice_protocol="yes"
3400 else
3401 if test "$spice_protocol" = "yes" ; then
3402 feature_not_found "spice_protocol" \
3403 "Install spice-protocol(>=0.12.3) devel"
3404 fi
3405 spice_protocol="no"
3406 fi
3407 fi
3408
3409 if test "$spice" != "no" ; then
3410 cat > $TMPC << EOF
3411 #include <spice.h>
3412 int main(void) { spice_server_new(); return 0; }
3413 EOF
3414 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3415 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3416 if $pkg_config --atleast-version=0.12.5 spice-server && \
3417 test "$spice_protocol" = "yes" && \
3418 compile_prog "$spice_cflags" "$spice_libs" ; then
3419 spice="yes"
3420 else
3421 if test "$spice" = "yes" ; then
3422 feature_not_found "spice" \
3423 "Install spice-server(>=0.12.5) devel"
3424 fi
3425 spice="no"
3426 fi
3427 fi
3428
3429 ##########################################
3430 # check if we have VSS SDK headers for win
3431
3432 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3433 test "$vss_win32_sdk" != "no" ; then
3434 case "$vss_win32_sdk" in
3435 "") vss_win32_include="-isystem $source_path" ;;
3436 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3437 # handle path with spaces. So we symlink the headers into ".sdk/vss".
3438 vss_win32_include="-isystem $source_path/.sdk/vss"
3439 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3440 ;;
3441 *) vss_win32_include="-isystem $vss_win32_sdk"
3442 esac
3443 cat > $TMPC << EOF
3444 #define __MIDL_user_allocate_free_DEFINED__
3445 #include <inc/win2003/vss.h>
3446 int main(void) { return VSS_CTX_BACKUP; }
3447 EOF
3448 if compile_prog "$vss_win32_include" "" ; then
3449 guest_agent_with_vss="yes"
3450 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3451 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3452 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
3453 else
3454 if test "$vss_win32_sdk" != "" ; then
3455 echo "ERROR: Please download and install Microsoft VSS SDK:"
3456 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3457 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3458 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3459 echo "ERROR: The headers are extracted in the directory \`inc'."
3460 feature_not_found "VSS support"
3461 fi
3462 guest_agent_with_vss="no"
3463 fi
3464 fi
3465
3466 ##########################################
3467 # lookup Windows platform SDK (if not specified)
3468 # The SDK is needed only to build .tlb (type library) file of guest agent
3469 # VSS provider from the source. It is usually unnecessary because the
3470 # pre-compiled .tlb file is included.
3471
3472 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3473 test "$guest_agent_with_vss" = "yes" ; then
3474 if test -z "$win_sdk"; then
3475 programfiles="$PROGRAMFILES"
3476 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3477 if test -n "$programfiles"; then
3478 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3479 else
3480 feature_not_found "Windows SDK"
3481 fi
3482 elif test "$win_sdk" = "no"; then
3483 win_sdk=""
3484 fi
3485 fi
3486
3487 ##########################################
3488 # check if mingw environment provides a recent ntddscsi.h
3489 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
3490 cat > $TMPC << EOF
3491 #include <windows.h>
3492 #include <ntddscsi.h>
3493 int main(void) {
3494 #if !defined(IOCTL_SCSI_GET_ADDRESS)
3495 #error Missing required ioctl definitions
3496 #endif
3497 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
3498 return addr.Lun;
3499 }
3500 EOF
3501 if compile_prog "" "" ; then
3502 guest_agent_ntddscsi=yes
3503 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
3504 fi
3505 fi
3506
3507 ##########################################
3508 # capstone
3509
3510 case "$capstone" in
3511 auto | enabled | internal)
3512 # Simpler to always update submodule, even if not needed.
3513 git_submodules="${git_submodules} capstone"
3514 ;;
3515 esac
3516
3517 ##########################################
3518 # check if we have posix_syslog
3519
3520 posix_syslog=no
3521 cat > $TMPC << EOF
3522 #include <syslog.h>
3523 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
3524 EOF
3525 if compile_prog "" "" ; then
3526 posix_syslog=yes
3527 fi
3528
3529 ##########################################
3530 # check if trace backend exists
3531
3532 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
3533 if test "$?" -ne 0 ; then
3534 error_exit "invalid trace backends" \
3535 "Please choose supported trace backends."
3536 fi
3537
3538 ##########################################
3539 # For 'ust' backend, test if ust headers are present
3540 if have_backend "ust"; then
3541 if $pkg_config lttng-ust --exists; then
3542 lttng_ust_libs=$($pkg_config --libs lttng-ust)
3543 else
3544 error_exit "Trace backend 'ust' missing lttng-ust header files"
3545 fi
3546 fi
3547
3548 ##########################################
3549 # For 'dtrace' backend, test if 'dtrace' command is present
3550 if have_backend "dtrace"; then
3551 if ! has 'dtrace' ; then
3552 error_exit "dtrace command is not found in PATH $PATH"
3553 fi
3554 trace_backend_stap="no"
3555 if has 'stap' ; then
3556 trace_backend_stap="yes"
3557
3558 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
3559 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
3560 # instead. QEMU --enable-modules depends on this because the SystemTap
3561 # semaphores are linked into the main binary and not the module's shared
3562 # object.
3563 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
3564 fi
3565 fi
3566
3567 ##########################################
3568 # check and set a backend for coroutine
3569
3570 # We prefer ucontext, but it's not always possible. The fallback
3571 # is sigcontext. On Windows the only valid backend is the Windows
3572 # specific one.
3573
3574 ucontext_works=no
3575 if test "$darwin" != "yes"; then
3576 cat > $TMPC << EOF
3577 #include <ucontext.h>
3578 #ifdef __stub_makecontext
3579 #error Ignoring glibc stub makecontext which will always fail
3580 #endif
3581 int main(void) { makecontext(0, 0, 0); return 0; }
3582 EOF
3583 if compile_prog "" "" ; then
3584 ucontext_works=yes
3585 fi
3586 fi
3587
3588 if test "$coroutine" = ""; then
3589 if test "$mingw32" = "yes"; then
3590 coroutine=win32
3591 elif test "$ucontext_works" = "yes"; then
3592 coroutine=ucontext
3593 else
3594 coroutine=sigaltstack
3595 fi
3596 else
3597 case $coroutine in
3598 windows)
3599 if test "$mingw32" != "yes"; then
3600 error_exit "'windows' coroutine backend only valid for Windows"
3601 fi
3602 # Unfortunately the user visible backend name doesn't match the
3603 # coroutine-*.c filename for this case, so we have to adjust it here.
3604 coroutine=win32
3605 ;;
3606 ucontext)
3607 if test "$ucontext_works" != "yes"; then
3608 feature_not_found "ucontext"
3609 fi
3610 ;;
3611 sigaltstack)
3612 if test "$mingw32" = "yes"; then
3613 error_exit "only the 'windows' coroutine backend is valid for Windows"
3614 fi
3615 ;;
3616 *)
3617 error_exit "unknown coroutine backend $coroutine"
3618 ;;
3619 esac
3620 fi
3621
3622 if test "$coroutine_pool" = ""; then
3623 coroutine_pool=yes
3624 fi
3625
3626 if test "$debug_stack_usage" = "yes"; then
3627 if test "$coroutine_pool" = "yes"; then
3628 echo "WARN: disabling coroutine pool for stack usage debugging"
3629 coroutine_pool=no
3630 fi
3631 fi
3632
3633 ##################################################
3634 # SafeStack
3635
3636
3637 if test "$safe_stack" = "yes"; then
3638 cat > $TMPC << EOF
3639 int main(int argc, char *argv[])
3640 {
3641 #if ! __has_feature(safe_stack)
3642 #error SafeStack Disabled
3643 #endif
3644 return 0;
3645 }
3646 EOF
3647 flag="-fsanitize=safe-stack"
3648 # Check that safe-stack is supported and enabled.
3649 if compile_prog "-Werror $flag" "$flag"; then
3650 # Flag needed both at compilation and at linking
3651 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3652 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3653 else
3654 error_exit "SafeStack not supported by your compiler"
3655 fi
3656 if test "$coroutine" != "ucontext"; then
3657 error_exit "SafeStack is only supported by the coroutine backend ucontext"
3658 fi
3659 else
3660 cat > $TMPC << EOF
3661 int main(int argc, char *argv[])
3662 {
3663 #if defined(__has_feature)
3664 #if __has_feature(safe_stack)
3665 #error SafeStack Enabled
3666 #endif
3667 #endif
3668 return 0;
3669 }
3670 EOF
3671 if test "$safe_stack" = "no"; then
3672 # Make sure that safe-stack is disabled
3673 if ! compile_prog "-Werror" ""; then
3674 # SafeStack was already enabled, try to explicitly remove the feature
3675 flag="-fno-sanitize=safe-stack"
3676 if ! compile_prog "-Werror $flag" "$flag"; then
3677 error_exit "Configure cannot disable SafeStack"
3678 fi
3679 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3680 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3681 fi
3682 else # "$safe_stack" = ""
3683 # Set safe_stack to yes or no based on pre-existing flags
3684 if compile_prog "-Werror" ""; then
3685 safe_stack="no"
3686 else
3687 safe_stack="yes"
3688 if test "$coroutine" != "ucontext"; then
3689 error_exit "SafeStack is only supported by the coroutine backend ucontext"
3690 fi
3691 fi
3692 fi
3693 fi
3694
3695 ########################################
3696 # check if cpuid.h is usable.
3697
3698 cat > $TMPC << EOF
3699 #include <cpuid.h>
3700 int main(void) {
3701 unsigned a, b, c, d;
3702 int max = __get_cpuid_max(0, 0);
3703
3704 if (max >= 1) {
3705 __cpuid(1, a, b, c, d);
3706 }
3707
3708 if (max >= 7) {
3709 __cpuid_count(7, 0, a, b, c, d);
3710 }
3711
3712 return 0;
3713 }
3714 EOF
3715 if compile_prog "" "" ; then
3716 cpuid_h=yes
3717 fi
3718
3719 ##########################################
3720 # avx2 optimization requirement check
3721 #
3722 # There is no point enabling this if cpuid.h is not usable,
3723 # since we won't be able to select the new routines.
3724
3725 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
3726 cat > $TMPC << EOF
3727 #pragma GCC push_options
3728 #pragma GCC target("avx2")
3729 #include <cpuid.h>
3730 #include <immintrin.h>
3731 static int bar(void *a) {
3732 __m256i x = *(__m256i *)a;
3733 return _mm256_testz_si256(x, x);
3734 }
3735 int main(int argc, char *argv[]) { return bar(argv[0]); }
3736 EOF
3737 if compile_object "-Werror" ; then
3738 avx2_opt="yes"
3739 else
3740 avx2_opt="no"
3741 fi
3742 fi
3743
3744 ##########################################
3745 # avx512f optimization requirement check
3746 #
3747 # There is no point enabling this if cpuid.h is not usable,
3748 # since we won't be able to select the new routines.
3749 # by default, it is turned off.
3750 # if user explicitly want to enable it, check environment
3751
3752 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
3753 cat > $TMPC << EOF
3754 #pragma GCC push_options
3755 #pragma GCC target("avx512f")
3756 #include <cpuid.h>
3757 #include <immintrin.h>
3758 static int bar(void *a) {
3759 __m512i x = *(__m512i *)a;
3760 return _mm512_test_epi64_mask(x, x);
3761 }
3762 int main(int argc, char *argv[])
3763 {
3764 return bar(argv[0]);
3765 }
3766 EOF
3767 if ! compile_object "-Werror" ; then
3768 avx512f_opt="no"
3769 fi
3770 else
3771 avx512f_opt="no"
3772 fi
3773
3774 ########################################
3775 # check if __[u]int128_t is usable.
3776
3777 int128=no
3778 cat > $TMPC << EOF
3779 __int128_t a;
3780 __uint128_t b;
3781 int main (void) {
3782 a = a + b;
3783 b = a * b;
3784 a = a * a;
3785 return 0;
3786 }
3787 EOF
3788 if compile_prog "" "" ; then
3789 int128=yes
3790 fi
3791
3792 #########################################
3793 # See if 128-bit atomic operations are supported.
3794
3795 atomic128=no
3796 if test "$int128" = "yes"; then
3797 cat > $TMPC << EOF
3798 int main(void)
3799 {
3800 unsigned __int128 x = 0, y = 0;
3801 y = __atomic_load(&x, 0);
3802 __atomic_store(&x, y, 0);
3803 __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
3804 return 0;
3805 }
3806 EOF
3807 if compile_prog "" "" ; then
3808 atomic128=yes
3809 fi
3810 fi
3811
3812 cmpxchg128=no
3813 if test "$int128" = yes && test "$atomic128" = no; then
3814 cat > $TMPC << EOF
3815 int main(void)
3816 {
3817 unsigned __int128 x = 0, y = 0;
3818 __sync_val_compare_and_swap_16(&x, y, x);
3819 return 0;
3820 }
3821 EOF
3822 if compile_prog "" "" ; then
3823 cmpxchg128=yes
3824 fi
3825 fi
3826
3827 #########################################
3828 # See if 64-bit atomic operations are supported.
3829 # Note that without __atomic builtins, we can only
3830 # assume atomic loads/stores max at pointer size.
3831
3832 cat > $TMPC << EOF
3833 #include <stdint.h>
3834 int main(void)
3835 {
3836 uint64_t x = 0, y = 0;
3837 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
3838 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
3839 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
3840 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
3841 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
3842 return 0;
3843 }
3844 EOF
3845 if compile_prog "" "" ; then
3846 atomic64=yes
3847 fi
3848
3849 ########################################
3850 # check if getauxval is available.
3851
3852 getauxval=no
3853 cat > $TMPC << EOF
3854 #include <sys/auxv.h>
3855 int main(void) {
3856 return getauxval(AT_HWCAP) == 0;
3857 }
3858 EOF
3859 if compile_prog "" "" ; then
3860 getauxval=yes
3861 fi
3862
3863 ########################################
3864 # check if ccache is interfering with
3865 # semantic analysis of macros
3866
3867 unset CCACHE_CPP2
3868 ccache_cpp2=no
3869 cat > $TMPC << EOF
3870 static const int Z = 1;
3871 #define fn() ({ Z; })
3872 #define TAUT(X) ((X) == Z)
3873 #define PAREN(X, Y) (X == Y)
3874 #define ID(X) (X)
3875 int main(int argc, char *argv[])
3876 {
3877 int x = 0, y = 0;
3878 x = ID(x);
3879 x = fn();
3880 fn();
3881 if (PAREN(x, y)) return 0;
3882 if (TAUT(Z)) return 0;
3883 return 0;
3884 }
3885 EOF
3886
3887 if ! compile_object "-Werror"; then
3888 ccache_cpp2=yes
3889 fi
3890
3891 #################################################
3892 # clang does not support glibc + FORTIFY_SOURCE.
3893
3894 if test "$fortify_source" != "no"; then
3895 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
3896 fortify_source="no";
3897 elif test -n "$cxx" && has $cxx &&
3898 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
3899 fortify_source="no";
3900 else
3901 fortify_source="yes"
3902 fi
3903 fi
3904
3905 ##########################################
3906 # check if struct fsxattr is available via linux/fs.h
3907
3908 have_fsxattr=no
3909 cat > $TMPC << EOF
3910 #include <linux/fs.h>
3911 struct fsxattr foo;
3912 int main(void) {
3913 return 0;
3914 }
3915 EOF
3916 if compile_prog "" "" ; then
3917 have_fsxattr=yes
3918 fi
3919
3920 ##########################################
3921 # check for usable membarrier system call
3922 if test "$membarrier" = "yes"; then
3923 have_membarrier=no
3924 if test "$mingw32" = "yes" ; then
3925 have_membarrier=yes
3926 elif test "$linux" = "yes" ; then
3927 cat > $TMPC << EOF
3928 #include <linux/membarrier.h>
3929 #include <sys/syscall.h>
3930 #include <unistd.h>
3931 #include <stdlib.h>
3932 int main(void) {
3933 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
3934 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
3935 exit(0);
3936 }
3937 EOF
3938 if compile_prog "" "" ; then
3939 have_membarrier=yes
3940 fi
3941 fi
3942 if test "$have_membarrier" = "no"; then
3943 feature_not_found "membarrier" "membarrier system call not available"
3944 fi
3945 else
3946 # Do not enable it by default even for Mingw32, because it doesn't
3947 # work on Wine.
3948 membarrier=no
3949 fi
3950
3951 ##########################################
3952 # check for usable AF_VSOCK environment
3953 have_af_vsock=no
3954 cat > $TMPC << EOF
3955 #include <errno.h>
3956 #include <sys/types.h>
3957 #include <sys/socket.h>
3958 #if !defined(AF_VSOCK)
3959 # error missing AF_VSOCK flag
3960 #endif
3961 #include <linux/vm_sockets.h>
3962 int main(void) {
3963 int sock, ret;
3964 struct sockaddr_vm svm;
3965 socklen_t len = sizeof(svm);
3966 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
3967 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
3968 if ((ret == -1) && (errno == ENOTCONN)) {
3969 return 0;
3970 }
3971 return -1;
3972 }
3973 EOF
3974 if compile_prog "" "" ; then
3975 have_af_vsock=yes
3976 fi
3977
3978 ##########################################
3979 # check for usable AF_ALG environment
3980 have_afalg=no
3981 cat > $TMPC << EOF
3982 #include <errno.h>
3983 #include <sys/types.h>
3984 #include <sys/socket.h>
3985 #include <linux/if_alg.h>
3986 int main(void) {
3987 int sock;
3988 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
3989 return sock;
3990 }
3991 EOF
3992 if compile_prog "" "" ; then
3993 have_afalg=yes
3994 fi
3995 if test "$crypto_afalg" = "yes"
3996 then
3997 if test "$have_afalg" != "yes"
3998 then
3999 error_exit "AF_ALG requested but could not be detected"
4000 fi
4001 fi
4002
4003
4004 ##########################################
4005 # checks for sanitizers
4006
4007 have_asan=no
4008 have_ubsan=no
4009 have_asan_iface_h=no
4010 have_asan_iface_fiber=no
4011
4012 if test "$sanitizers" = "yes" ; then
4013 write_c_skeleton
4014 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
4015 have_asan=yes
4016 fi
4017
4018 # we could use a simple skeleton for flags checks, but this also
4019 # detect the static linking issue of ubsan, see also:
4020 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
4021 cat > $TMPC << EOF
4022 #include <stdlib.h>
4023 int main(void) {
4024 void *tmp = malloc(10);
4025 if (tmp != NULL) {
4026 return *(int *)(tmp + 2);
4027 }
4028 return 1;
4029 }
4030 EOF
4031 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
4032 have_ubsan=yes
4033 fi
4034
4035 if check_include "sanitizer/asan_interface.h" ; then
4036 have_asan_iface_h=yes
4037 fi
4038
4039 cat > $TMPC << EOF
4040 #include <sanitizer/asan_interface.h>
4041 int main(void) {
4042 __sanitizer_start_switch_fiber(0, 0, 0);
4043 return 0;
4044 }
4045 EOF
4046 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
4047 have_asan_iface_fiber=yes
4048 fi
4049 fi
4050
4051 # Thread sanitizer is, for now, much noisier than the other sanitizers;
4052 # keep it separate until that is not the case.
4053 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
4054 error_exit "TSAN is not supported with other sanitiziers."
4055 fi
4056 have_tsan=no
4057 have_tsan_iface_fiber=no
4058 if test "$tsan" = "yes" ; then
4059 write_c_skeleton
4060 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
4061 have_tsan=yes
4062 fi
4063 cat > $TMPC << EOF
4064 #include <sanitizer/tsan_interface.h>
4065 int main(void) {
4066 __tsan_create_fiber(0);
4067 return 0;
4068 }
4069 EOF
4070 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
4071 have_tsan_iface_fiber=yes
4072 fi
4073 fi
4074
4075 ##########################################
4076 # check for slirp
4077
4078 case "$slirp" in
4079 auto | enabled | internal)
4080 # Simpler to always update submodule, even if not needed.
4081 git_submodules="${git_submodules} slirp"
4082 ;;
4083 esac
4084
4085 # Check for slirp smbd dupport
4086 : ${smbd=${SMBD-/usr/sbin/smbd}}
4087 if test "$slirp_smbd" != "no" ; then
4088 if test "$mingw32" = "yes" ; then
4089 if test "$slirp_smbd" = "yes" ; then
4090 error_exit "Host smbd not supported on this platform."
4091 fi
4092 slirp_smbd=no
4093 else
4094 slirp_smbd=yes
4095 fi
4096 fi
4097
4098 ##########################################
4099 # check for usable __NR_keyctl syscall
4100
4101 if test "$linux" = "yes" ; then
4102
4103 have_keyring=no
4104 cat > $TMPC << EOF
4105 #include <errno.h>
4106 #include <asm/unistd.h>
4107 #include <linux/keyctl.h>
4108 #include <unistd.h>
4109 int main(void) {
4110 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
4111 }
4112 EOF
4113 if compile_prog "" "" ; then
4114 have_keyring=yes
4115 fi
4116 fi
4117 if test "$secret_keyring" != "no"
4118 then
4119 if test "$have_keyring" = "yes"
4120 then
4121 secret_keyring=yes
4122 else
4123 if test "$secret_keyring" = "yes"
4124 then
4125 error_exit "syscall __NR_keyctl requested, \
4126 but not implemented on your system"
4127 else
4128 secret_keyring=no
4129 fi
4130 fi
4131 fi
4132
4133 ##########################################
4134 # End of CC checks
4135 # After here, no more $cc or $ld runs
4136
4137 write_c_skeleton
4138
4139 if test "$gcov" = "yes" ; then
4140 :
4141 elif test "$fortify_source" = "yes" ; then
4142 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
4143 debug=no
4144 fi
4145
4146 case "$ARCH" in
4147 alpha)
4148 # Ensure there's only a single GP
4149 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
4150 ;;
4151 esac
4152
4153 if test "$gprof" = "yes" ; then
4154 QEMU_CFLAGS="-p $QEMU_CFLAGS"
4155 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
4156 fi
4157
4158 if test "$have_asan" = "yes"; then
4159 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
4160 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
4161 if test "$have_asan_iface_h" = "no" ; then
4162 echo "ASAN build enabled, but ASAN header missing." \
4163 "Without code annotation, the report may be inferior."
4164 elif test "$have_asan_iface_fiber" = "no" ; then
4165 echo "ASAN build enabled, but ASAN header is too old." \
4166 "Without code annotation, the report may be inferior."
4167 fi
4168 fi
4169 if test "$have_tsan" = "yes" ; then
4170 if test "$have_tsan_iface_fiber" = "yes" ; then
4171 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
4172 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
4173 else
4174 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
4175 fi
4176 elif test "$tsan" = "yes" ; then
4177 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
4178 fi
4179 if test "$have_ubsan" = "yes"; then
4180 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
4181 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
4182 fi
4183
4184 ##########################################
4185
4186 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
4187 if test "$solaris" = "no" && test "$tsan" = "no"; then
4188 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4189 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
4190 fi
4191 fi
4192
4193 # Use ASLR, no-SEH and DEP if available
4194 if test "$mingw32" = "yes" ; then
4195 flags="--no-seh --nxcompat"
4196
4197 # Disable ASLR for debug builds to allow debugging with gdb
4198 if test "$debug" = "no" ; then
4199 flags="--dynamicbase $flags"
4200 fi
4201
4202 for flag in $flags; do
4203 if ld_has $flag ; then
4204 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
4205 fi
4206 done
4207 fi
4208
4209 # Probe for guest agent support/options
4210
4211 if [ "$guest_agent" != "no" ]; then
4212 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
4213 guest_agent=no
4214 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4215 guest_agent=yes
4216 elif [ "$guest_agent" != yes ]; then
4217 guest_agent=no
4218 else
4219 error_exit "Guest agent is not supported on this platform"
4220 fi
4221 fi
4222
4223 # Guest agent Windows MSI package
4224
4225 if test "$QEMU_GA_MANUFACTURER" = ""; then
4226 QEMU_GA_MANUFACTURER=QEMU
4227 fi
4228 if test "$QEMU_GA_DISTRO" = ""; then
4229 QEMU_GA_DISTRO=Linux
4230 fi
4231 if test "$QEMU_GA_VERSION" = ""; then
4232 QEMU_GA_VERSION=$(cat $source_path/VERSION)
4233 fi
4234
4235 QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
4236
4237 # Mac OS X ships with a broken assembler
4238 roms=
4239 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
4240 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
4241 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
4242 # Different host OS linkers have different ideas about the name of the ELF
4243 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
4244 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
4245 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
4246 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4247 ld_i386_emulation="$emu"
4248 roms="optionrom"
4249 break
4250 fi
4251 done
4252 fi
4253
4254 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
4255 # or -march=z10 (which is the lowest architecture level that Clang supports)
4256 if test "$cpu" = "s390x" ; then
4257 write_c_skeleton
4258 compile_prog "-march=z900" ""
4259 has_z900=$?
4260 if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then
4261 if [ $has_z900 != 0 ]; then
4262 echo "WARNING: Your compiler does not support the z900!"
4263 echo " The s390-ccw bios will only work with guest CPUs >= z10."
4264 fi
4265 roms="$roms s390-ccw"
4266 # SLOF is required for building the s390-ccw firmware on s390x,
4267 # since it is using the libnet code from SLOF for network booting.
4268 git_submodules="${git_submodules} roms/SLOF"
4269 fi
4270 fi
4271
4272 # Check that the C++ compiler exists and works with the C compiler.
4273 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
4274 if has $cxx; then
4275 cat > $TMPC <<EOF
4276 int c_function(void);
4277 int main(void) { return c_function(); }
4278 EOF
4279
4280 compile_object
4281
4282 cat > $TMPCXX <<EOF
4283 extern "C" {
4284 int c_function(void);
4285 }
4286 int c_function(void) { return 42; }
4287 EOF
4288
4289 update_cxxflags
4290
4291 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
4292 # C++ compiler $cxx works ok with C compiler $cc
4293 :
4294 else
4295 echo "C++ compiler $cxx does not work with C compiler $cc"
4296 echo "Disabling C++ specific optional code"
4297 cxx=
4298 fi
4299 else
4300 echo "No C++ compiler available; disabling C++ specific optional code"
4301 cxx=
4302 fi
4303
4304 if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
4305 exit 1
4306 fi
4307
4308 config_host_mak="config-host.mak"
4309
4310 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4311 echo >> $config_host_mak
4312
4313 echo all: >> $config_host_mak
4314 echo "GIT=$git" >> $config_host_mak
4315 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
4316 echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
4317
4318 echo "ARCH=$ARCH" >> $config_host_mak
4319
4320 if test "$debug_tcg" = "yes" ; then
4321 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4322 fi
4323 if test "$strip_opt" = "yes" ; then
4324 echo "STRIP=${strip}" >> $config_host_mak
4325 fi
4326 if test "$bigendian" = "yes" ; then
4327 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4328 fi
4329 if test "$mingw32" = "yes" ; then
4330 echo "CONFIG_WIN32=y" >> $config_host_mak
4331 if test "$guest_agent_with_vss" = "yes" ; then
4332 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4333 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
4334 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4335 fi
4336 if test "$guest_agent_ntddscsi" = "yes" ; then
4337 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
4338 fi
4339 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4340 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4341 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4342 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4343 else
4344 echo "CONFIG_POSIX=y" >> $config_host_mak
4345 fi
4346
4347 if test "$linux" = "yes" ; then
4348 echo "CONFIG_LINUX=y" >> $config_host_mak
4349 fi
4350
4351 if test "$darwin" = "yes" ; then
4352 echo "CONFIG_DARWIN=y" >> $config_host_mak
4353 fi
4354
4355 if test "$solaris" = "yes" ; then
4356 echo "CONFIG_SOLARIS=y" >> $config_host_mak
4357 fi
4358 if test "$haiku" = "yes" ; then
4359 echo "CONFIG_HAIKU=y" >> $config_host_mak
4360 fi
4361 if test "$static" = "yes" ; then
4362 echo "CONFIG_STATIC=y" >> $config_host_mak
4363 fi
4364 if test "$profiler" = "yes" ; then
4365 echo "CONFIG_PROFILER=y" >> $config_host_mak
4366 fi
4367 if test "$want_tools" = "yes" ; then
4368 echo "CONFIG_TOOLS=y" >> $config_host_mak
4369 fi
4370 if test "$guest_agent" = "yes" ; then
4371 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
4372 fi
4373 if test "$slirp_smbd" = "yes" ; then
4374 echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
4375 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4376 fi
4377 if test "$vde" = "yes" ; then
4378 echo "CONFIG_VDE=y" >> $config_host_mak
4379 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
4380 fi
4381 if test "$netmap" = "yes" ; then
4382 echo "CONFIG_NETMAP=y" >> $config_host_mak
4383 fi
4384 if test "$l2tpv3" = "yes" ; then
4385 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4386 fi
4387 if test "$gprof" = "yes" ; then
4388 echo "CONFIG_GPROF=y" >> $config_host_mak
4389 fi
4390 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4391 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4392 if test "$block_drv_whitelist_tools" = "yes" ; then
4393 echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
4394 fi
4395 if test "$xfs" = "yes" ; then
4396 echo "CONFIG_XFS=y" >> $config_host_mak
4397 fi
4398 qemu_version=$(head $source_path/VERSION)
4399 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4400 echo "SRC_PATH=$source_path" >> $config_host_mak
4401 echo "TARGET_DIRS=$target_list" >> $config_host_mak
4402 if test "$modules" = "yes"; then
4403 # $shacmd can generate a hash started with digit, which the compiler doesn't
4404 # like as an symbol. So prefix it with an underscore
4405 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
4406 echo "CONFIG_MODULES=y" >> $config_host_mak
4407 fi
4408 if test "$module_upgrades" = "yes"; then
4409 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
4410 fi
4411 if test "$have_usbfs" = "yes" ; then
4412 echo "CONFIG_USBFS=y" >> $config_host_mak
4413 fi
4414 if test "$gio" = "yes" ; then
4415 echo "CONFIG_GIO=y" >> $config_host_mak
4416 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
4417 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
4418 fi
4419 if test "$gdbus_codegen" != "" ; then
4420 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
4421 fi
4422 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
4423
4424 # Work around a system header bug with some kernel/XFS header
4425 # versions where they both try to define 'struct fsxattr':
4426 # xfs headers will not try to redefine structs from linux headers
4427 # if this macro is set.
4428 if test "$have_fsxattr" = "yes" ; then
4429 echo "HAVE_FSXATTR=y" >> $config_host_mak
4430 fi
4431 if test "$xen" = "enabled" ; then
4432 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4433 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4434 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
4435 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
4436 fi
4437 if test "$linux_aio" = "yes" ; then
4438 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4439 fi
4440 if test "$vhost_scsi" = "yes" ; then
4441 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4442 fi
4443 if test "$vhost_net" = "yes" ; then
4444 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
4445 fi
4446 if test "$vhost_net_user" = "yes" ; then
4447 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
4448 fi
4449 if test "$vhost_net_vdpa" = "yes" ; then
4450 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
4451 fi
4452 if test "$vhost_crypto" = "yes" ; then
4453 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
4454 fi
4455 if test "$vhost_vsock" = "yes" ; then
4456 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
4457 if test "$vhost_user" = "yes" ; then
4458 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
4459 fi
4460 fi
4461 if test "$vhost_kernel" = "yes" ; then
4462 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
4463 fi
4464 if test "$vhost_user" = "yes" ; then
4465 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
4466 fi
4467 if test "$vhost_vdpa" = "yes" ; then
4468 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
4469 fi
4470 if test "$vhost_user_fs" = "yes" ; then
4471 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
4472 fi
4473 if test "$iovec" = "yes" ; then
4474 echo "CONFIG_IOVEC=y" >> $config_host_mak
4475 fi
4476 if test "$membarrier" = "yes" ; then
4477 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
4478 fi
4479 if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
4480 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4481 fi
4482
4483 if test "$spice_protocol" = "yes" ; then
4484 echo "CONFIG_SPICE_PROTOCOL=y" >> $config_host_mak
4485 echo "SPICE_PROTOCOL_CFLAGS=$spice_protocol_cflags" >> $config_host_mak
4486 fi
4487 if test "$spice" = "yes" ; then
4488 echo "CONFIG_SPICE=y" >> $config_host_mak
4489 echo "SPICE_CFLAGS=$spice_cflags $spice_protocol_cflags" >> $config_host_mak
4490 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
4491 fi
4492
4493 if test "$opengl" = "yes" ; then
4494 echo "CONFIG_OPENGL=y" >> $config_host_mak
4495 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4496 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
4497 fi
4498
4499 if test "$avx2_opt" = "yes" ; then
4500 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
4501 fi
4502
4503 if test "$avx512f_opt" = "yes" ; then
4504 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
4505 fi
4506
4507 # XXX: suppress that
4508 if [ "$bsd" = "yes" ] ; then
4509 echo "CONFIG_BSD=y" >> $config_host_mak
4510 fi
4511
4512 if test "$qom_cast_debug" = "yes" ; then
4513 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4514 fi
4515
4516 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4517 if test "$coroutine_pool" = "yes" ; then
4518 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4519 else
4520 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4521 fi
4522
4523 if test "$debug_stack_usage" = "yes" ; then
4524 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
4525 fi
4526
4527 if test "$crypto_afalg" = "yes" ; then
4528 echo "CONFIG_AF_ALG=y" >> $config_host_mak
4529 fi
4530
4531 if test "$have_asan_iface_fiber" = "yes" ; then
4532 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
4533 fi
4534
4535 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
4536 echo "CONFIG_TSAN=y" >> $config_host_mak
4537 fi
4538
4539 if test "$cpuid_h" = "yes" ; then
4540 echo "CONFIG_CPUID_H=y" >> $config_host_mak
4541 fi
4542
4543 if test "$int128" = "yes" ; then
4544 echo "CONFIG_INT128=y" >> $config_host_mak
4545 fi
4546
4547 if test "$atomic128" = "yes" ; then
4548 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
4549 fi
4550
4551 if test "$cmpxchg128" = "yes" ; then
4552 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
4553 fi
4554
4555 if test "$atomic64" = "yes" ; then
4556 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
4557 fi
4558
4559 if test "$getauxval" = "yes" ; then
4560 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4561 fi
4562
4563 if test "$libssh" = "yes" ; then
4564 echo "CONFIG_LIBSSH=y" >> $config_host_mak
4565 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
4566 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
4567 fi
4568
4569 if test "$live_block_migration" = "yes" ; then
4570 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
4571 fi
4572
4573 if test "$tpm" = "yes"; then
4574 echo 'CONFIG_TPM=y' >> $config_host_mak
4575 fi
4576
4577 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
4578 if have_backend "nop"; then
4579 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
4580 fi
4581 if have_backend "simple"; then
4582 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
4583 fi
4584 if have_backend "log"; then
4585 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
4586 fi
4587 if have_backend "ust"; then
4588 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
4589 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
4590 fi
4591 if have_backend "dtrace"; then
4592 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
4593 if test "$trace_backend_stap" = "yes" ; then
4594 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
4595 fi
4596 fi
4597 if have_backend "ftrace"; then
4598 if test "$linux" = "yes" ; then
4599 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
4600 else
4601 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
4602 fi
4603 fi
4604 if have_backend "syslog"; then
4605 if test "$posix_syslog" = "yes" ; then
4606 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
4607 else
4608 feature_not_found "syslog(trace backend)" "syslog not available"
4609 fi
4610 fi
4611 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
4612
4613 if test "$rdma" = "yes" ; then
4614 echo "CONFIG_RDMA=y" >> $config_host_mak
4615 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
4616 fi
4617
4618 if test "$pvrdma" = "yes" ; then
4619 echo "CONFIG_PVRDMA=y" >> $config_host_mak
4620 fi
4621
4622 if test "$replication" = "yes" ; then
4623 echo "CONFIG_REPLICATION=y" >> $config_host_mak
4624 fi
4625
4626 if test "$have_af_vsock" = "yes" ; then
4627 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
4628 fi
4629
4630 if test "$debug_mutex" = "yes" ; then
4631 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
4632 fi
4633
4634 # Hold two types of flag:
4635 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
4636 # a thread we have a handle to
4637 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
4638 # platform
4639 if test "$pthread_setname_np_w_tid" = "yes" ; then
4640 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
4641 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
4642 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
4643 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
4644 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
4645 fi
4646
4647 if test "$bochs" = "yes" ; then
4648 echo "CONFIG_BOCHS=y" >> $config_host_mak
4649 fi
4650 if test "$cloop" = "yes" ; then
4651 echo "CONFIG_CLOOP=y" >> $config_host_mak
4652 fi
4653 if test "$dmg" = "yes" ; then
4654 echo "CONFIG_DMG=y" >> $config_host_mak
4655 fi
4656 if test "$qcow1" = "yes" ; then
4657 echo "CONFIG_QCOW1=y" >> $config_host_mak
4658 fi
4659 if test "$vdi" = "yes" ; then
4660 echo "CONFIG_VDI=y" >> $config_host_mak
4661 fi
4662 if test "$vvfat" = "yes" ; then
4663 echo "CONFIG_VVFAT=y" >> $config_host_mak
4664 fi
4665 if test "$qed" = "yes" ; then
4666 echo "CONFIG_QED=y" >> $config_host_mak
4667 fi
4668 if test "$parallels" = "yes" ; then
4669 echo "CONFIG_PARALLELS=y" >> $config_host_mak
4670 fi
4671 if test "$have_mlockall" = "yes" ; then
4672 echo "HAVE_MLOCKALL=y" >> $config_host_mak
4673 fi
4674
4675 if test "$plugins" = "yes" ; then
4676 echo "CONFIG_PLUGIN=y" >> $config_host_mak
4677 # Copy the export object list to the build dir
4678 if test "$ld_dynamic_list" = "yes" ; then
4679 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
4680 ld_symbols=qemu-plugins-ld.symbols
4681 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
4682 elif test "$ld_exported_symbols_list" = "yes" ; then
4683 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
4684 ld64_symbols=qemu-plugins-ld64.symbols
4685 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
4686 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
4687 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
4688 else
4689 error_exit \
4690 "If \$plugins=yes, either \$ld_dynamic_list or " \
4691 "\$ld_exported_symbols_list should have been set to 'yes'."
4692 fi
4693 fi
4694
4695 if test -n "$gdb_bin"; then
4696 gdb_version=$($gdb_bin --version | head -n 1)
4697 if version_ge ${gdb_version##* } 9.1; then
4698 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
4699 fi
4700 fi
4701
4702 if test "$secret_keyring" = "yes" ; then
4703 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
4704 fi
4705
4706 echo "ROMS=$roms" >> $config_host_mak
4707 echo "MAKE=$make" >> $config_host_mak
4708 echo "PYTHON=$python" >> $config_host_mak
4709 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
4710 echo "MESON=$meson" >> $config_host_mak
4711 echo "NINJA=$ninja" >> $config_host_mak
4712 echo "CC=$cc" >> $config_host_mak
4713 echo "HOST_CC=$host_cc" >> $config_host_mak
4714 if $iasl -h > /dev/null 2>&1; then
4715 echo "CONFIG_IASL=$iasl" >> $config_host_mak
4716 fi
4717 echo "AR=$ar" >> $config_host_mak
4718 echo "AS=$as" >> $config_host_mak
4719 echo "CCAS=$ccas" >> $config_host_mak
4720 echo "CPP=$cpp" >> $config_host_mak
4721 echo "OBJCOPY=$objcopy" >> $config_host_mak
4722 echo "LD=$ld" >> $config_host_mak
4723 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
4724 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
4725 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
4726 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4727 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
4728 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
4729 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
4730 echo "EXESUF=$EXESUF" >> $config_host_mak
4731 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
4732 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
4733 if test "$gcov" = "yes" ; then
4734 echo "CONFIG_GCOV=y" >> $config_host_mak
4735 fi
4736
4737 if test "$rng_none" = "yes"; then
4738 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
4739 fi
4740
4741 # use included Linux headers
4742 if test "$linux" = "yes" ; then
4743 mkdir -p linux-headers
4744 case "$cpu" in
4745 i386|x86_64|x32)
4746 linux_arch=x86
4747 ;;
4748 ppc|ppc64|ppc64le)
4749 linux_arch=powerpc
4750 ;;
4751 s390x)
4752 linux_arch=s390
4753 ;;
4754 aarch64)
4755 linux_arch=arm64
4756 ;;
4757 mips64)
4758 linux_arch=mips
4759 ;;
4760 *)
4761 # For most CPUs the kernel architecture name and QEMU CPU name match.
4762 linux_arch="$cpu"
4763 ;;
4764 esac
4765 # For non-KVM architectures we will not have asm headers
4766 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
4767 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
4768 fi
4769 fi
4770
4771 for target in $target_list; do
4772 target_dir="$target"
4773 target_name=$(echo $target | cut -d '-' -f 1)
4774 mkdir -p $target_dir
4775 case $target in
4776 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
4777 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
4778 esac
4779 done
4780
4781 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
4782 if test "$default_targets" = "yes"; then
4783 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
4784 fi
4785
4786 if test "$numa" = "yes"; then
4787 echo "CONFIG_NUMA=y" >> $config_host_mak
4788 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
4789 fi
4790
4791 if test "$ccache_cpp2" = "yes"; then
4792 echo "export CCACHE_CPP2=y" >> $config_host_mak
4793 fi
4794
4795 if test "$safe_stack" = "yes"; then
4796 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
4797 fi
4798
4799 # If we're using a separate build tree, set it up now.
4800 # DIRS are directories which we simply mkdir in the build tree;
4801 # LINKS are things to symlink back into the source tree
4802 # (these can be both files and directories).
4803 # Caution: do not add files or directories here using wildcards. This
4804 # will result in problems later if a new file matching the wildcard is
4805 # added to the source tree -- nothing will cause configure to be rerun
4806 # so the build tree will be missing the link back to the new file, and
4807 # tests might fail. Prefer to keep the relevant files in their own
4808 # directory and symlink the directory instead.
4809 # UNLINK is used to remove symlinks from older development versions
4810 # that might get into the way when doing "git update" without doing
4811 # a "make distclean" in between.
4812 DIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos"
4813 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
4814 DIRS="$DIRS docs docs/interop fsdev scsi"
4815 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
4816 DIRS="$DIRS roms/seabios"
4817 DIRS="$DIRS contrib/plugins/"
4818 LINKS="Makefile"
4819 LINKS="$LINKS tests/tcg/Makefile.target"
4820 LINKS="$LINKS pc-bios/optionrom/Makefile"
4821 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
4822 LINKS="$LINKS roms/seabios/Makefile"
4823 LINKS="$LINKS pc-bios/qemu-icon.bmp"
4824 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
4825 LINKS="$LINKS tests/acceptance tests/data"
4826 LINKS="$LINKS tests/qemu-iotests/check"
4827 LINKS="$LINKS python"
4828 LINKS="$LINKS contrib/plugins/Makefile "
4829 UNLINK="pc-bios/keymaps"
4830 for bios_file in \
4831 $source_path/pc-bios/*.bin \
4832 $source_path/pc-bios/*.elf \
4833 $source_path/pc-bios/*.lid \
4834 $source_path/pc-bios/*.rom \
4835 $source_path/pc-bios/*.dtb \
4836 $source_path/pc-bios/*.img \
4837 $source_path/pc-bios/openbios-* \
4838 $source_path/pc-bios/u-boot.* \
4839 $source_path/pc-bios/edk2-*.fd.bz2 \
4840 $source_path/pc-bios/palcode-* \
4841 $source_path/pc-bios/qemu_vga.ndrv
4842
4843 do
4844 LINKS="$LINKS pc-bios/$(basename $bios_file)"
4845 done
4846 mkdir -p $DIRS
4847 for f in $LINKS ; do
4848 if [ -e "$source_path/$f" ]; then
4849 symlink "$source_path/$f" "$f"
4850 fi
4851 done
4852 for f in $UNLINK ; do
4853 if [ -L "$f" ]; then
4854 rm -f "$f"
4855 fi
4856 done
4857
4858 (for i in $cross_cc_vars; do
4859 export $i
4860 done
4861 export target_list source_path use_containers ARCH
4862 $source_path/tests/tcg/configure.sh)
4863
4864 # temporary config to build submodules
4865 for rom in seabios; do
4866 config_mak=roms/$rom/config.mak
4867 echo "# Automatically generated by configure - do not modify" > $config_mak
4868 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
4869 echo "AS=$as" >> $config_mak
4870 echo "CCAS=$ccas" >> $config_mak
4871 echo "CC=$cc" >> $config_mak
4872 echo "BCC=bcc" >> $config_mak
4873 echo "CPP=$cpp" >> $config_mak
4874 echo "OBJCOPY=objcopy" >> $config_mak
4875 echo "IASL=$iasl" >> $config_mak
4876 echo "LD=$ld" >> $config_mak
4877 echo "RANLIB=$ranlib" >> $config_mak
4878 done
4879
4880 if test "$skip_meson" = no; then
4881 cross="config-meson.cross.new"
4882 meson_quote() {
4883 echo "'$(echo $* | sed "s/ /','/g")'"
4884 }
4885
4886 echo "# Automatically generated by configure - do not modify" > $cross
4887 echo "[properties]" >> $cross
4888
4889 # unroll any custom device configs
4890 for a in $device_archs; do
4891 eval "c=\$devices_${a}"
4892 echo "${a}-softmmu = '$c'" >> $cross
4893 done
4894
4895 test -z "$cxx" && echo "link_language = 'c'" >> $cross
4896 echo "[built-in options]" >> $cross
4897 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
4898 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
4899 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
4900 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
4901 echo "[binaries]" >> $cross
4902 echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
4903 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
4904 test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross
4905 echo "ar = [$(meson_quote $ar)]" >> $cross
4906 echo "nm = [$(meson_quote $nm)]" >> $cross
4907 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
4908 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
4909 if has $sdl2_config; then
4910 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
4911 fi
4912 echo "strip = [$(meson_quote $strip)]" >> $cross
4913 echo "windres = [$(meson_quote $windres)]" >> $cross
4914 if test "$cross_compile" = "yes"; then
4915 cross_arg="--cross-file config-meson.cross"
4916 echo "[host_machine]" >> $cross
4917 if test "$mingw32" = "yes" ; then
4918 echo "system = 'windows'" >> $cross
4919 fi
4920 if test "$linux" = "yes" ; then
4921 echo "system = 'linux'" >> $cross
4922 fi
4923 if test "$darwin" = "yes" ; then
4924 echo "system = 'darwin'" >> $cross
4925 fi
4926 case "$ARCH" in
4927 i386)
4928 echo "cpu_family = 'x86'" >> $cross
4929 ;;
4930 x86_64|x32)
4931 echo "cpu_family = 'x86_64'" >> $cross
4932 ;;
4933 ppc64le)
4934 echo "cpu_family = 'ppc64'" >> $cross
4935 ;;
4936 *)
4937 echo "cpu_family = '$ARCH'" >> $cross
4938 ;;
4939 esac
4940 echo "cpu = '$cpu'" >> $cross
4941 if test "$bigendian" = "yes" ; then
4942 echo "endian = 'big'" >> $cross
4943 else
4944 echo "endian = 'little'" >> $cross
4945 fi
4946 else
4947 cross_arg="--native-file config-meson.cross"
4948 fi
4949 mv $cross config-meson.cross
4950
4951 rm -rf meson-private meson-info meson-logs
4952 NINJA=$ninja $meson setup \
4953 --prefix "$prefix" \
4954 --libdir "$libdir" \
4955 --libexecdir "$libexecdir" \
4956 --bindir "$bindir" \
4957 --includedir "$includedir" \
4958 --datadir "$datadir" \
4959 --mandir "$mandir" \
4960 --sysconfdir "$sysconfdir" \
4961 --localedir "$localedir" \
4962 --localstatedir "$local_statedir" \
4963 -Ddocdir="$docdir" \
4964 -Dqemu_firmwarepath="$firmwarepath" \
4965 -Dqemu_suffix="$qemu_suffix" \
4966 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
4967 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
4968 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
4969 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
4970 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
4971 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
4972 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug -Dfuzzing=$fuzzing \
4973 $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
4974 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
4975 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
4976 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
4977 -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
4978 -Dlibusb=$libusb -Dsmartcard=$smartcard -Dusb_redir=$usb_redir -Dvte=$vte \
4979 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
4980 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
4981 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
4982 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
4983 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
4984 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse -Dlibxml2=$libxml2 \
4985 -Dlibdaxctl=$libdaxctl -Dlibpmem=$libpmem -Dlinux_io_uring=$linux_io_uring \
4986 -Dgnutls=$gnutls -Dnettle=$nettle -Dgcrypt=$gcrypt -Dauth_pam=$auth_pam \
4987 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
4988 -Dattr=$attr -Ddefault_devices=$default_devices -Dvirglrenderer=$virglrenderer \
4989 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
4990 -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
4991 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
4992 $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
4993 -Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack -Doss=$oss \
4994 -Dpa=$pa -Daudio_drv_list=$audio_drv_list -Dtcg_interpreter=$tcg_interpreter \
4995 $cross_arg \
4996 "$PWD" "$source_path"
4997
4998 if test "$?" -ne 0 ; then
4999 error_exit "meson setup failed"
5000 fi
5001 else
5002 if test -f meson-private/cmd_line.txt; then
5003 # Adjust old command line options whose type was changed
5004 # Avoids having to use "setup --wipe" when Meson is upgraded
5005 perl -i -ne '
5006 s/^gettext = true$/gettext = auto/;
5007 s/^gettext = false$/gettext = disabled/;
5008 /^b_staticpic/ && next;
5009 print;' meson-private/cmd_line.txt
5010 fi
5011 fi
5012
5013 if test -n "${deprecated_features}"; then
5014 echo "Warning, deprecated features enabled."
5015 echo "Please see docs/about/deprecated.rst"
5016 echo " features: ${deprecated_features}"
5017 fi
5018
5019 # Create list of config switches that should be poisoned in common code...
5020 # but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
5021 target_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
5022 if test -n "$target_configs_h" ; then
5023 sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
5024 -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
5025 $target_configs_h | sort -u > config-poison.h
5026 else
5027 :> config-poison.h
5028 fi
5029
5030 # Save the configure command line for later reuse.
5031 cat <<EOD >config.status
5032 #!/bin/sh
5033 # Generated by configure.
5034 # Run this file to recreate the current configuration.
5035 # Compiler output produced by configure, useful for debugging
5036 # configure, is in config.log if it exists.
5037 EOD
5038
5039 preserve_env() {
5040 envname=$1
5041
5042 eval envval=\$$envname
5043
5044 if test -n "$envval"
5045 then
5046 echo "$envname='$envval'" >> config.status
5047 echo "export $envname" >> config.status
5048 else
5049 echo "unset $envname" >> config.status
5050 fi
5051 }
5052
5053 # Preserve various env variables that influence what
5054 # features/build target configure will detect
5055 preserve_env AR
5056 preserve_env AS
5057 preserve_env CC
5058 preserve_env CPP
5059 preserve_env CXX
5060 preserve_env INSTALL
5061 preserve_env LD
5062 preserve_env LD_LIBRARY_PATH
5063 preserve_env LIBTOOL
5064 preserve_env MAKE
5065 preserve_env NM
5066 preserve_env OBJCOPY
5067 preserve_env PATH
5068 preserve_env PKG_CONFIG
5069 preserve_env PKG_CONFIG_LIBDIR
5070 preserve_env PKG_CONFIG_PATH
5071 preserve_env PYTHON
5072 preserve_env SDL2_CONFIG
5073 preserve_env SMBD
5074 preserve_env STRIP
5075 preserve_env WINDRES
5076
5077 printf "exec" >>config.status
5078 for i in "$0" "$@"; do
5079 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
5080 done
5081 echo ' "$@"' >>config.status
5082 chmod +x config.status
5083
5084 rm -r "$TMPDIR1"