]> git.proxmox.com Git - mirror_qemu.git/blob - configure
crypto: bump min nettle to 3.4, dropping RHEL-7 support
[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" "$@"
146 }
147
148 do_cxx() {
149 do_compiler "$cxx" "$@"
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=gnu99/-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=""
244 block_drv_rw_whitelist=""
245 block_drv_ro_whitelist=""
246 host_cc="cc"
247 audio_win_int=""
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 coreaudio="auto"
303 virtiofsd="auto"
304 virtfs="auto"
305 libudev="auto"
306 mpath="auto"
307 vnc="enabled"
308 sparse="auto"
309 vde="$default_feature"
310 vnc_sasl="auto"
311 vnc_jpeg="auto"
312 vnc_png="auto"
313 xkbcommon="auto"
314 xen="$default_feature"
315 xen_ctrl_version="$default_feature"
316 xen_pci_passthrough="auto"
317 linux_aio="$default_feature"
318 linux_io_uring="$default_feature"
319 cap_ng="auto"
320 attr="auto"
321 xfs="$default_feature"
322 tcg="enabled"
323 membarrier="$default_feature"
324 vhost_net="$default_feature"
325 vhost_crypto="$default_feature"
326 vhost_scsi="$default_feature"
327 vhost_vsock="$default_feature"
328 vhost_user="no"
329 vhost_user_blk_server="auto"
330 vhost_user_fs="$default_feature"
331 kvm="auto"
332 hax="auto"
333 hvf="auto"
334 whpx="auto"
335 nvmm="auto"
336 rdma="$default_feature"
337 pvrdma="$default_feature"
338 gprof="no"
339 debug_tcg="no"
340 debug="no"
341 sanitizers="no"
342 tsan="no"
343 fortify_source="$default_feature"
344 strip_opt="yes"
345 tcg_interpreter="false"
346 bigendian="no"
347 mingw32="no"
348 gcov="no"
349 EXESUF=""
350 HOST_DSOSUF=".so"
351 modules="no"
352 module_upgrades="no"
353 prefix="/usr/local"
354 qemu_suffix="qemu"
355 slirp="auto"
356 oss_lib=""
357 bsd="no"
358 linux="no"
359 solaris="no"
360 profiler="no"
361 cocoa="auto"
362 softmmu="yes"
363 linux_user="no"
364 bsd_user="no"
365 blobs="true"
366 pkgversion=""
367 pie=""
368 qom_cast_debug="yes"
369 trace_backends="log"
370 trace_file="trace"
371 spice="$default_feature"
372 spice_protocol="auto"
373 rbd="auto"
374 smartcard="$default_feature"
375 u2f="auto"
376 libusb="$default_feature"
377 usb_redir="$default_feature"
378 opengl="$default_feature"
379 cpuid_h="no"
380 avx2_opt="$default_feature"
381 capstone="auto"
382 lzo="auto"
383 snappy="auto"
384 bzip2="auto"
385 lzfse="auto"
386 zstd="auto"
387 guest_agent="$default_feature"
388 guest_agent_with_vss="no"
389 guest_agent_ntddscsi="no"
390 guest_agent_msi="auto"
391 vss_win32_sdk="$default_feature"
392 win_sdk="no"
393 want_tools="$default_feature"
394 libiscsi="auto"
395 libnfs="auto"
396 coroutine=""
397 coroutine_pool="$default_feature"
398 debug_stack_usage="no"
399 crypto_afalg="no"
400 cfi="false"
401 cfi_debug="false"
402 seccomp="auto"
403 glusterfs="auto"
404 gtk="auto"
405 tls_priority="NORMAL"
406 gnutls="$default_feature"
407 nettle="$default_feature"
408 nettle_xts="no"
409 gcrypt="$default_feature"
410 gcrypt_hmac="no"
411 gcrypt_xts="no"
412 qemu_private_xts="yes"
413 auth_pam="$default_feature"
414 vte="$default_feature"
415 virglrenderer="$default_feature"
416 tpm="$default_feature"
417 libssh="$default_feature"
418 live_block_migration=${default_feature:-yes}
419 numa="$default_feature"
420 tcmalloc="no"
421 jemalloc="no"
422 replication=${default_feature:-yes}
423 bochs=${default_feature:-yes}
424 cloop=${default_feature:-yes}
425 dmg=${default_feature:-yes}
426 qcow1=${default_feature:-yes}
427 vdi=${default_feature:-yes}
428 vvfat=${default_feature:-yes}
429 qed=${default_feature:-yes}
430 parallels=${default_feature:-yes}
431 libxml2="$default_feature"
432 debug_mutex="no"
433 libpmem="$default_feature"
434 default_devices="true"
435 plugins="no"
436 fuzzing="no"
437 rng_none="no"
438 secret_keyring="$default_feature"
439 libdaxctl="$default_feature"
440 meson=""
441 ninja=""
442 skip_meson=no
443 gettext="auto"
444 fuse="auto"
445 fuse_lseek="auto"
446 multiprocess="auto"
447 slirp_smbd="$default_feature"
448
449 malloc_trim="auto"
450 gio="$default_feature"
451
452 # parse CC options second
453 for opt do
454 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
455 case "$opt" in
456 --cross-prefix=*) cross_prefix="$optarg"
457 cross_compile="yes"
458 ;;
459 --cc=*) CC="$optarg"
460 ;;
461 --cxx=*) CXX="$optarg"
462 ;;
463 --cpu=*) cpu="$optarg"
464 ;;
465 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
466 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
467 ;;
468 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
469 ;;
470 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
471 EXTRA_LDFLAGS="$optarg"
472 ;;
473 --enable-debug-info) debug_info="yes"
474 ;;
475 --disable-debug-info) debug_info="no"
476 ;;
477 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
478 ;;
479 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
480 eval "cross_cc_cflags_${cc_arch}=\$optarg"
481 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
482 ;;
483 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
484 cc_archs="$cc_archs $cc_arch"
485 eval "cross_cc_${cc_arch}=\$optarg"
486 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
487 ;;
488 esac
489 done
490 # OS specific
491 # Using uname is really, really broken. Once we have the right set of checks
492 # we can eliminate its usage altogether.
493
494 # Preferred compiler:
495 # ${CC} (if set)
496 # ${cross_prefix}gcc (if cross-prefix specified)
497 # system compiler
498 if test -z "${CC}${cross_prefix}"; then
499 cc="$host_cc"
500 else
501 cc="${CC-${cross_prefix}gcc}"
502 fi
503
504 if test -z "${CXX}${cross_prefix}"; then
505 cxx="c++"
506 else
507 cxx="${CXX-${cross_prefix}g++}"
508 fi
509
510 ar="${AR-${cross_prefix}ar}"
511 as="${AS-${cross_prefix}as}"
512 ccas="${CCAS-$cc}"
513 cpp="${CPP-$cc -E}"
514 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
515 ld="${LD-${cross_prefix}ld}"
516 ranlib="${RANLIB-${cross_prefix}ranlib}"
517 nm="${NM-${cross_prefix}nm}"
518 strip="${STRIP-${cross_prefix}strip}"
519 windres="${WINDRES-${cross_prefix}windres}"
520 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
521 query_pkg_config() {
522 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
523 }
524 pkg_config=query_pkg_config
525 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
526
527 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
528 ARFLAGS="${ARFLAGS-rv}"
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=gnu99 -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 write_c_fuzzer_skeleton() {
570 cat > $TMPC <<EOF
571 #include <stdint.h>
572 #include <sys/types.h>
573 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
574 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
575 EOF
576 }
577
578 if check_define __linux__ ; then
579 targetos="Linux"
580 elif check_define _WIN32 ; then
581 targetos='MINGW32'
582 elif check_define __OpenBSD__ ; then
583 targetos='OpenBSD'
584 elif check_define __sun__ ; then
585 targetos='SunOS'
586 elif check_define __HAIKU__ ; then
587 targetos='Haiku'
588 elif check_define __FreeBSD__ ; then
589 targetos='FreeBSD'
590 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
591 targetos='GNU/kFreeBSD'
592 elif check_define __DragonFly__ ; then
593 targetos='DragonFly'
594 elif check_define __NetBSD__; then
595 targetos='NetBSD'
596 elif check_define __APPLE__; then
597 targetos='Darwin'
598 else
599 # This is a fatal error, but don't report it yet, because we
600 # might be going to just print the --help text, or it might
601 # be the result of a missing compiler.
602 targetos='bogus'
603 fi
604
605 # Some host OSes need non-standard checks for which CPU to use.
606 # Note that these checks are broken for cross-compilation: if you're
607 # cross-compiling to one of these OSes then you'll need to specify
608 # the correct CPU with the --cpu option.
609 case $targetos in
610 Darwin)
611 HOST_DSOSUF=".dylib"
612 ;;
613 SunOS)
614 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
615 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
616 cpu="x86_64"
617 fi
618 esac
619
620 if test ! -z "$cpu" ; then
621 # command line argument
622 :
623 elif check_define __i386__ ; then
624 cpu="i386"
625 elif check_define __x86_64__ ; then
626 if check_define __ILP32__ ; then
627 cpu="x32"
628 else
629 cpu="x86_64"
630 fi
631 elif check_define __sparc__ ; then
632 if check_define __arch64__ ; then
633 cpu="sparc64"
634 else
635 cpu="sparc"
636 fi
637 elif check_define _ARCH_PPC ; then
638 if check_define _ARCH_PPC64 ; then
639 if check_define _LITTLE_ENDIAN ; then
640 cpu="ppc64le"
641 else
642 cpu="ppc64"
643 fi
644 else
645 cpu="ppc"
646 fi
647 elif check_define __mips__ ; then
648 cpu="mips"
649 elif check_define __s390__ ; then
650 if check_define __s390x__ ; then
651 cpu="s390x"
652 else
653 cpu="s390"
654 fi
655 elif check_define __riscv ; then
656 if check_define _LP64 ; then
657 cpu="riscv64"
658 else
659 cpu="riscv32"
660 fi
661 elif check_define __arm__ ; then
662 cpu="arm"
663 elif check_define __aarch64__ ; then
664 cpu="aarch64"
665 else
666 cpu=$(uname -m)
667 fi
668
669 ARCH=
670 # Normalise host CPU name and set ARCH.
671 # Note that this case should only have supported host CPUs, not guests.
672 case "$cpu" in
673 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
674 ;;
675 ppc64le)
676 ARCH="ppc64"
677 ;;
678 i386|i486|i586|i686|i86pc|BePC)
679 cpu="i386"
680 ;;
681 x86_64|amd64)
682 cpu="x86_64"
683 ;;
684 armv*b|armv*l|arm)
685 cpu="arm"
686 ;;
687 aarch64)
688 cpu="aarch64"
689 ;;
690 mips*)
691 cpu="mips"
692 ;;
693 sparc|sun4[cdmuv])
694 cpu="sparc"
695 ;;
696 *)
697 # This will result in either an error or falling back to TCI later
698 ARCH=unknown
699 ;;
700 esac
701 if test -z "$ARCH"; then
702 ARCH="$cpu"
703 fi
704
705 # OS specific
706
707 case $targetos in
708 MINGW32*)
709 mingw32="yes"
710 audio_possible_drivers="dsound sdl"
711 if check_include dsound.h; then
712 audio_drv_list="dsound"
713 else
714 audio_drv_list=""
715 fi
716 supported_os="yes"
717 pie="no"
718 ;;
719 GNU/kFreeBSD)
720 bsd="yes"
721 audio_drv_list="oss try-sdl"
722 audio_possible_drivers="oss sdl pa"
723 ;;
724 FreeBSD)
725 bsd="yes"
726 make="${MAKE-gmake}"
727 audio_drv_list="oss try-sdl"
728 audio_possible_drivers="oss sdl pa"
729 # needed for kinfo_getvmmap(3) in libutil.h
730 netmap="" # enable netmap autodetect
731 ;;
732 DragonFly)
733 bsd="yes"
734 make="${MAKE-gmake}"
735 audio_drv_list="oss try-sdl"
736 audio_possible_drivers="oss sdl pa"
737 ;;
738 NetBSD)
739 bsd="yes"
740 make="${MAKE-gmake}"
741 audio_drv_list="oss try-sdl"
742 audio_possible_drivers="oss sdl"
743 oss_lib="-lossaudio"
744 ;;
745 OpenBSD)
746 bsd="yes"
747 make="${MAKE-gmake}"
748 audio_drv_list="try-sdl"
749 audio_possible_drivers="sdl"
750 ;;
751 Darwin)
752 bsd="yes"
753 darwin="yes"
754 audio_drv_list="try-coreaudio try-sdl"
755 audio_possible_drivers="coreaudio sdl"
756 # Disable attempts to use ObjectiveC features in os/object.h since they
757 # won't work when we're compiling with gcc as a C compiler.
758 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
759 ;;
760 SunOS)
761 solaris="yes"
762 make="${MAKE-gmake}"
763 smbd="${SMBD-/usr/sfw/sbin/smbd}"
764 if test -f /usr/include/sys/soundcard.h ; then
765 audio_drv_list="oss try-sdl"
766 fi
767 audio_possible_drivers="oss sdl"
768 # needed for CMSG_ macros in sys/socket.h
769 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
770 # needed for TIOCWIN* defines in termios.h
771 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
772 ;;
773 Haiku)
774 haiku="yes"
775 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
776 ;;
777 Linux)
778 audio_drv_list="try-pa oss"
779 audio_possible_drivers="oss alsa sdl pa"
780 linux="yes"
781 linux_user="yes"
782 vhost_user=${default_feature:-yes}
783 ;;
784 esac
785
786 if [ "$bsd" = "yes" ] ; then
787 if [ "$darwin" != "yes" ] ; then
788 bsd_user="yes"
789 fi
790 fi
791
792 : ${make=${MAKE-make}}
793
794 # We prefer python 3.x. A bare 'python' is traditionally
795 # python 2.x, but some distros have it as python 3.x, so
796 # we check that too
797 python=
798 explicit_python=no
799 for binary in "${PYTHON-python3}" python
800 do
801 if has "$binary"
802 then
803 python=$(command -v "$binary")
804 break
805 fi
806 done
807
808
809 # Check for ancillary tools used in testing
810 genisoimage=
811 for binary in genisoimage mkisofs
812 do
813 if has $binary
814 then
815 genisoimage=$(command -v "$binary")
816 break
817 fi
818 done
819
820 # Default objcc to clang if available, otherwise use CC
821 if has clang; then
822 objcc=clang
823 else
824 objcc="$cc"
825 fi
826
827 if test "$mingw32" = "yes" ; then
828 EXESUF=".exe"
829 HOST_DSOSUF=".dll"
830 # MinGW needs -mthreads for TLS and macro _MT.
831 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
832 write_c_skeleton;
833 prefix="/qemu"
834 qemu_suffix=""
835 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
836 fi
837
838 werror=""
839
840 for opt do
841 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
842 case "$opt" in
843 --help|-h) show_help=yes
844 ;;
845 --version|-V) exec cat $source_path/VERSION
846 ;;
847 --prefix=*) prefix="$optarg"
848 ;;
849 --interp-prefix=*) interp_prefix="$optarg"
850 ;;
851 --cross-prefix=*)
852 ;;
853 --cc=*)
854 ;;
855 --host-cc=*) host_cc="$optarg"
856 ;;
857 --cxx=*)
858 ;;
859 --iasl=*) iasl="$optarg"
860 ;;
861 --objcc=*) objcc="$optarg"
862 ;;
863 --make=*) make="$optarg"
864 ;;
865 --install=*)
866 ;;
867 --python=*) python="$optarg" ; explicit_python=yes
868 ;;
869 --sphinx-build=*) sphinx_build="$optarg"
870 ;;
871 --skip-meson) skip_meson=yes
872 ;;
873 --meson=*) meson="$optarg"
874 ;;
875 --ninja=*) ninja="$optarg"
876 ;;
877 --smbd=*) smbd="$optarg"
878 ;;
879 --extra-cflags=*)
880 ;;
881 --extra-cxxflags=*)
882 ;;
883 --extra-ldflags=*)
884 ;;
885 --enable-debug-info)
886 ;;
887 --disable-debug-info)
888 ;;
889 --cross-cc-*)
890 ;;
891 --enable-modules)
892 modules="yes"
893 ;;
894 --disable-modules)
895 modules="no"
896 ;;
897 --disable-module-upgrades) module_upgrades="no"
898 ;;
899 --enable-module-upgrades) module_upgrades="yes"
900 ;;
901 --cpu=*)
902 ;;
903 --target-list=*) target_list="$optarg"
904 if test "$target_list_exclude"; then
905 error_exit "Can't mix --target-list with --target-list-exclude"
906 fi
907 ;;
908 --target-list-exclude=*) target_list_exclude="$optarg"
909 if test "$target_list"; then
910 error_exit "Can't mix --target-list-exclude with --target-list"
911 fi
912 ;;
913 --enable-trace-backends=*) trace_backends="$optarg"
914 ;;
915 # XXX: backwards compatibility
916 --enable-trace-backend=*) trace_backends="$optarg"
917 ;;
918 --with-trace-file=*) trace_file="$optarg"
919 ;;
920 --with-default-devices) default_devices="true"
921 ;;
922 --without-default-devices) default_devices="false"
923 ;;
924 --without-default-features) # processed above
925 ;;
926 --enable-gprof) gprof="yes"
927 ;;
928 --enable-gcov) gcov="yes"
929 ;;
930 --static)
931 static="yes"
932 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
933 ;;
934 --mandir=*) mandir="$optarg"
935 ;;
936 --bindir=*) bindir="$optarg"
937 ;;
938 --libdir=*) libdir="$optarg"
939 ;;
940 --libexecdir=*) libexecdir="$optarg"
941 ;;
942 --includedir=*) includedir="$optarg"
943 ;;
944 --datadir=*) datadir="$optarg"
945 ;;
946 --with-suffix=*) qemu_suffix="$optarg"
947 ;;
948 --docdir=*) docdir="$optarg"
949 ;;
950 --localedir=*) localedir="$optarg"
951 ;;
952 --sysconfdir=*) sysconfdir="$optarg"
953 ;;
954 --localstatedir=*) local_statedir="$optarg"
955 ;;
956 --firmwarepath=*) firmwarepath="$optarg"
957 ;;
958 --host=*|--build=*|\
959 --disable-dependency-tracking|\
960 --sbindir=*|--sharedstatedir=*|\
961 --oldincludedir=*|--datarootdir=*|--infodir=*|\
962 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
963 # These switches are silently ignored, for compatibility with
964 # autoconf-generated configure scripts. This allows QEMU's
965 # configure to be used by RPM and similar macros that set
966 # lots of directory switches by default.
967 ;;
968 --disable-sdl) sdl="disabled"
969 ;;
970 --enable-sdl) sdl="enabled"
971 ;;
972 --disable-sdl-image) sdl_image="disabled"
973 ;;
974 --enable-sdl-image) sdl_image="enabled"
975 ;;
976 --disable-qom-cast-debug) qom_cast_debug="no"
977 ;;
978 --enable-qom-cast-debug) qom_cast_debug="yes"
979 ;;
980 --disable-virtfs) virtfs="disabled"
981 ;;
982 --enable-virtfs) virtfs="enabled"
983 ;;
984 --disable-libudev) libudev="disabled"
985 ;;
986 --enable-libudev) libudev="enabled"
987 ;;
988 --disable-virtiofsd) virtiofsd="disabled"
989 ;;
990 --enable-virtiofsd) virtiofsd="enabled"
991 ;;
992 --disable-mpath) mpath="disabled"
993 ;;
994 --enable-mpath) mpath="enabled"
995 ;;
996 --disable-vnc) vnc="disabled"
997 ;;
998 --enable-vnc) vnc="enabled"
999 ;;
1000 --disable-gettext) gettext="disabled"
1001 ;;
1002 --enable-gettext) gettext="enabled"
1003 ;;
1004 --oss-lib=*) oss_lib="$optarg"
1005 ;;
1006 --audio-drv-list=*) audio_drv_list="$optarg"
1007 ;;
1008 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1009 ;;
1010 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1011 ;;
1012 --enable-debug-tcg) debug_tcg="yes"
1013 ;;
1014 --disable-debug-tcg) debug_tcg="no"
1015 ;;
1016 --enable-debug)
1017 # Enable debugging options that aren't excessively noisy
1018 debug_tcg="yes"
1019 debug_mutex="yes"
1020 debug="yes"
1021 strip_opt="no"
1022 fortify_source="no"
1023 ;;
1024 --enable-sanitizers) sanitizers="yes"
1025 ;;
1026 --disable-sanitizers) sanitizers="no"
1027 ;;
1028 --enable-tsan) tsan="yes"
1029 ;;
1030 --disable-tsan) tsan="no"
1031 ;;
1032 --enable-sparse) sparse="enabled"
1033 ;;
1034 --disable-sparse) sparse="disabled"
1035 ;;
1036 --disable-strip) strip_opt="no"
1037 ;;
1038 --disable-vnc-sasl) vnc_sasl="disabled"
1039 ;;
1040 --enable-vnc-sasl) vnc_sasl="enabled"
1041 ;;
1042 --disable-vnc-jpeg) vnc_jpeg="disabled"
1043 ;;
1044 --enable-vnc-jpeg) vnc_jpeg="enabled"
1045 ;;
1046 --disable-vnc-png) vnc_png="disabled"
1047 ;;
1048 --enable-vnc-png) vnc_png="enabled"
1049 ;;
1050 --disable-slirp) slirp="disabled"
1051 ;;
1052 --enable-slirp) slirp="enabled"
1053 ;;
1054 --enable-slirp=git) slirp="internal"
1055 ;;
1056 --enable-slirp=system) slirp="system"
1057 ;;
1058 --disable-vde) vde="no"
1059 ;;
1060 --enable-vde) vde="yes"
1061 ;;
1062 --disable-netmap) netmap="no"
1063 ;;
1064 --enable-netmap) netmap="yes"
1065 ;;
1066 --disable-xen) xen="disabled"
1067 ;;
1068 --enable-xen) xen="enabled"
1069 ;;
1070 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1071 ;;
1072 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1073 ;;
1074 --disable-brlapi) brlapi="disabled"
1075 ;;
1076 --enable-brlapi) brlapi="enabled"
1077 ;;
1078 --disable-kvm) kvm="disabled"
1079 ;;
1080 --enable-kvm) kvm="enabled"
1081 ;;
1082 --disable-hax) hax="disabled"
1083 ;;
1084 --enable-hax) hax="enabled"
1085 ;;
1086 --disable-hvf) hvf="disabled"
1087 ;;
1088 --enable-hvf) hvf="enabled"
1089 ;;
1090 --disable-nvmm) nvmm="disabled"
1091 ;;
1092 --enable-nvmm) nvmm="enabled"
1093 ;;
1094 --disable-whpx) whpx="disabled"
1095 ;;
1096 --enable-whpx) whpx="enabled"
1097 ;;
1098 --disable-tcg-interpreter) tcg_interpreter="false"
1099 ;;
1100 --enable-tcg-interpreter) tcg_interpreter="true"
1101 ;;
1102 --disable-cap-ng) cap_ng="disabled"
1103 ;;
1104 --enable-cap-ng) cap_ng="enabled"
1105 ;;
1106 --disable-tcg) tcg="disabled"
1107 ;;
1108 --enable-tcg) tcg="enabled"
1109 ;;
1110 --disable-malloc-trim) malloc_trim="disabled"
1111 ;;
1112 --enable-malloc-trim) malloc_trim="enabled"
1113 ;;
1114 --disable-spice) spice="no"
1115 ;;
1116 --enable-spice)
1117 spice_protocol="yes"
1118 spice="yes"
1119 ;;
1120 --disable-spice-protocol)
1121 spice_protocol="no"
1122 spice="no"
1123 ;;
1124 --enable-spice-protocol) spice_protocol="yes"
1125 ;;
1126 --disable-libiscsi) libiscsi="disabled"
1127 ;;
1128 --enable-libiscsi) libiscsi="enabled"
1129 ;;
1130 --disable-libnfs) libnfs="disabled"
1131 ;;
1132 --enable-libnfs) libnfs="enabled"
1133 ;;
1134 --enable-profiler) profiler="yes"
1135 ;;
1136 --disable-cocoa) cocoa="disabled"
1137 ;;
1138 --enable-cocoa) cocoa="enabled"
1139 ;;
1140 --disable-system) softmmu="no"
1141 ;;
1142 --enable-system) softmmu="yes"
1143 ;;
1144 --disable-user)
1145 linux_user="no" ;
1146 bsd_user="no" ;
1147 ;;
1148 --enable-user) ;;
1149 --disable-linux-user) linux_user="no"
1150 ;;
1151 --enable-linux-user) linux_user="yes"
1152 ;;
1153 --disable-bsd-user) bsd_user="no"
1154 ;;
1155 --enable-bsd-user) bsd_user="yes"
1156 ;;
1157 --enable-pie) pie="yes"
1158 ;;
1159 --disable-pie) pie="no"
1160 ;;
1161 --enable-werror) werror="yes"
1162 ;;
1163 --disable-werror) werror="no"
1164 ;;
1165 --enable-lto) lto="true"
1166 ;;
1167 --disable-lto) lto="false"
1168 ;;
1169 --enable-stack-protector) stack_protector="yes"
1170 ;;
1171 --disable-stack-protector) stack_protector="no"
1172 ;;
1173 --enable-safe-stack) safe_stack="yes"
1174 ;;
1175 --disable-safe-stack) safe_stack="no"
1176 ;;
1177 --enable-cfi)
1178 cfi="true";
1179 lto="true";
1180 ;;
1181 --disable-cfi) cfi="false"
1182 ;;
1183 --enable-cfi-debug) cfi_debug="true"
1184 ;;
1185 --disable-cfi-debug) cfi_debug="false"
1186 ;;
1187 --disable-curses) curses="disabled"
1188 ;;
1189 --enable-curses) curses="enabled"
1190 ;;
1191 --disable-iconv) iconv="disabled"
1192 ;;
1193 --enable-iconv) iconv="enabled"
1194 ;;
1195 --disable-curl) curl="disabled"
1196 ;;
1197 --enable-curl) curl="enabled"
1198 ;;
1199 --disable-fdt) fdt="disabled"
1200 ;;
1201 --enable-fdt) fdt="enabled"
1202 ;;
1203 --enable-fdt=git) fdt="internal"
1204 ;;
1205 --enable-fdt=system) fdt="system"
1206 ;;
1207 --disable-linux-aio) linux_aio="no"
1208 ;;
1209 --enable-linux-aio) linux_aio="yes"
1210 ;;
1211 --disable-linux-io-uring) linux_io_uring="no"
1212 ;;
1213 --enable-linux-io-uring) linux_io_uring="yes"
1214 ;;
1215 --disable-attr) attr="disabled"
1216 ;;
1217 --enable-attr) attr="enabled"
1218 ;;
1219 --disable-membarrier) membarrier="no"
1220 ;;
1221 --enable-membarrier) membarrier="yes"
1222 ;;
1223 --disable-blobs) blobs="false"
1224 ;;
1225 --with-pkgversion=*) pkgversion="$optarg"
1226 ;;
1227 --with-coroutine=*) coroutine="$optarg"
1228 ;;
1229 --disable-coroutine-pool) coroutine_pool="no"
1230 ;;
1231 --enable-coroutine-pool) coroutine_pool="yes"
1232 ;;
1233 --enable-debug-stack-usage) debug_stack_usage="yes"
1234 ;;
1235 --enable-crypto-afalg) crypto_afalg="yes"
1236 ;;
1237 --disable-crypto-afalg) crypto_afalg="no"
1238 ;;
1239 --disable-docs) docs="disabled"
1240 ;;
1241 --enable-docs) docs="enabled"
1242 ;;
1243 --disable-vhost-net) vhost_net="no"
1244 ;;
1245 --enable-vhost-net) vhost_net="yes"
1246 ;;
1247 --disable-vhost-crypto) vhost_crypto="no"
1248 ;;
1249 --enable-vhost-crypto) vhost_crypto="yes"
1250 ;;
1251 --disable-vhost-scsi) vhost_scsi="no"
1252 ;;
1253 --enable-vhost-scsi) vhost_scsi="yes"
1254 ;;
1255 --disable-vhost-vsock) vhost_vsock="no"
1256 ;;
1257 --enable-vhost-vsock) vhost_vsock="yes"
1258 ;;
1259 --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
1260 ;;
1261 --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
1262 ;;
1263 --disable-vhost-user-fs) vhost_user_fs="no"
1264 ;;
1265 --enable-vhost-user-fs) vhost_user_fs="yes"
1266 ;;
1267 --disable-opengl) opengl="no"
1268 ;;
1269 --enable-opengl) opengl="yes"
1270 ;;
1271 --disable-rbd) rbd="disabled"
1272 ;;
1273 --enable-rbd) rbd="enabled"
1274 ;;
1275 --disable-xfsctl) xfs="no"
1276 ;;
1277 --enable-xfsctl) xfs="yes"
1278 ;;
1279 --disable-smartcard) smartcard="no"
1280 ;;
1281 --enable-smartcard) smartcard="yes"
1282 ;;
1283 --disable-u2f) u2f="disabled"
1284 ;;
1285 --enable-u2f) u2f="enabled"
1286 ;;
1287 --disable-libusb) libusb="no"
1288 ;;
1289 --enable-libusb) libusb="yes"
1290 ;;
1291 --disable-usb-redir) usb_redir="no"
1292 ;;
1293 --enable-usb-redir) usb_redir="yes"
1294 ;;
1295 --disable-zlib-test)
1296 ;;
1297 --disable-lzo) lzo="disabled"
1298 ;;
1299 --enable-lzo) lzo="enabled"
1300 ;;
1301 --disable-snappy) snappy="disabled"
1302 ;;
1303 --enable-snappy) snappy="enabled"
1304 ;;
1305 --disable-bzip2) bzip2="disabled"
1306 ;;
1307 --enable-bzip2) bzip2="enabled"
1308 ;;
1309 --enable-lzfse) lzfse="enabled"
1310 ;;
1311 --disable-lzfse) lzfse="disabled"
1312 ;;
1313 --disable-zstd) zstd="disabled"
1314 ;;
1315 --enable-zstd) zstd="enabled"
1316 ;;
1317 --enable-guest-agent) guest_agent="yes"
1318 ;;
1319 --disable-guest-agent) guest_agent="no"
1320 ;;
1321 --enable-guest-agent-msi) guest_agent_msi="enabled"
1322 ;;
1323 --disable-guest-agent-msi) guest_agent_msi="disabled"
1324 ;;
1325 --with-vss-sdk) vss_win32_sdk=""
1326 ;;
1327 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1328 ;;
1329 --without-vss-sdk) vss_win32_sdk="no"
1330 ;;
1331 --with-win-sdk) win_sdk=""
1332 ;;
1333 --with-win-sdk=*) win_sdk="$optarg"
1334 ;;
1335 --without-win-sdk) win_sdk="no"
1336 ;;
1337 --enable-tools) want_tools="yes"
1338 ;;
1339 --disable-tools) want_tools="no"
1340 ;;
1341 --enable-seccomp) seccomp="enabled"
1342 ;;
1343 --disable-seccomp) seccomp="disabled"
1344 ;;
1345 --disable-glusterfs) glusterfs="disabled"
1346 ;;
1347 --disable-avx2) avx2_opt="no"
1348 ;;
1349 --enable-avx2) avx2_opt="yes"
1350 ;;
1351 --disable-avx512f) avx512f_opt="no"
1352 ;;
1353 --enable-avx512f) avx512f_opt="yes"
1354 ;;
1355
1356 --enable-glusterfs) glusterfs="enabled"
1357 ;;
1358 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1359 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1360 ;;
1361 --enable-vhdx|--disable-vhdx)
1362 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1363 ;;
1364 --enable-uuid|--disable-uuid)
1365 echo "$0: $opt is obsolete, UUID support is always built" >&2
1366 ;;
1367 --disable-gtk) gtk="disabled"
1368 ;;
1369 --enable-gtk) gtk="enabled"
1370 ;;
1371 --tls-priority=*) tls_priority="$optarg"
1372 ;;
1373 --disable-gnutls) gnutls="no"
1374 ;;
1375 --enable-gnutls) gnutls="yes"
1376 ;;
1377 --disable-nettle) nettle="no"
1378 ;;
1379 --enable-nettle) nettle="yes"
1380 ;;
1381 --disable-gcrypt) gcrypt="no"
1382 ;;
1383 --enable-gcrypt) gcrypt="yes"
1384 ;;
1385 --disable-auth-pam) auth_pam="no"
1386 ;;
1387 --enable-auth-pam) auth_pam="yes"
1388 ;;
1389 --enable-rdma) rdma="yes"
1390 ;;
1391 --disable-rdma) rdma="no"
1392 ;;
1393 --enable-pvrdma) pvrdma="yes"
1394 ;;
1395 --disable-pvrdma) pvrdma="no"
1396 ;;
1397 --disable-vte) vte="no"
1398 ;;
1399 --enable-vte) vte="yes"
1400 ;;
1401 --disable-virglrenderer) virglrenderer="no"
1402 ;;
1403 --enable-virglrenderer) virglrenderer="yes"
1404 ;;
1405 --disable-tpm) tpm="no"
1406 ;;
1407 --enable-tpm) tpm="yes"
1408 ;;
1409 --disable-libssh) libssh="no"
1410 ;;
1411 --enable-libssh) libssh="yes"
1412 ;;
1413 --disable-live-block-migration) live_block_migration="no"
1414 ;;
1415 --enable-live-block-migration) live_block_migration="yes"
1416 ;;
1417 --disable-numa) numa="no"
1418 ;;
1419 --enable-numa) numa="yes"
1420 ;;
1421 --disable-libxml2) libxml2="no"
1422 ;;
1423 --enable-libxml2) libxml2="yes"
1424 ;;
1425 --disable-tcmalloc) tcmalloc="no"
1426 ;;
1427 --enable-tcmalloc) tcmalloc="yes"
1428 ;;
1429 --disable-jemalloc) jemalloc="no"
1430 ;;
1431 --enable-jemalloc) jemalloc="yes"
1432 ;;
1433 --disable-replication) replication="no"
1434 ;;
1435 --enable-replication) replication="yes"
1436 ;;
1437 --disable-bochs) bochs="no"
1438 ;;
1439 --enable-bochs) bochs="yes"
1440 ;;
1441 --disable-cloop) cloop="no"
1442 ;;
1443 --enable-cloop) cloop="yes"
1444 ;;
1445 --disable-dmg) dmg="no"
1446 ;;
1447 --enable-dmg) dmg="yes"
1448 ;;
1449 --disable-qcow1) qcow1="no"
1450 ;;
1451 --enable-qcow1) qcow1="yes"
1452 ;;
1453 --disable-vdi) vdi="no"
1454 ;;
1455 --enable-vdi) vdi="yes"
1456 ;;
1457 --disable-vvfat) vvfat="no"
1458 ;;
1459 --enable-vvfat) vvfat="yes"
1460 ;;
1461 --disable-qed) qed="no"
1462 ;;
1463 --enable-qed) qed="yes"
1464 ;;
1465 --disable-parallels) parallels="no"
1466 ;;
1467 --enable-parallels) parallels="yes"
1468 ;;
1469 --disable-vhost-user) vhost_user="no"
1470 ;;
1471 --enable-vhost-user) vhost_user="yes"
1472 ;;
1473 --disable-vhost-vdpa) vhost_vdpa="no"
1474 ;;
1475 --enable-vhost-vdpa) vhost_vdpa="yes"
1476 ;;
1477 --disable-vhost-kernel) vhost_kernel="no"
1478 ;;
1479 --enable-vhost-kernel) vhost_kernel="yes"
1480 ;;
1481 --disable-capstone) capstone="disabled"
1482 ;;
1483 --enable-capstone) capstone="enabled"
1484 ;;
1485 --enable-capstone=git) capstone="internal"
1486 ;;
1487 --enable-capstone=system) capstone="system"
1488 ;;
1489 --with-git=*) git="$optarg"
1490 ;;
1491 --enable-git-update)
1492 git_submodules_action="update"
1493 echo "--enable-git-update deprecated, use --with-git-submodules=update"
1494 ;;
1495 --disable-git-update)
1496 git_submodules_action="validate"
1497 echo "--disable-git-update deprecated, use --with-git-submodules=validate"
1498 ;;
1499 --with-git-submodules=*)
1500 git_submodules_action="$optarg"
1501 ;;
1502 --enable-debug-mutex) debug_mutex=yes
1503 ;;
1504 --disable-debug-mutex) debug_mutex=no
1505 ;;
1506 --enable-libpmem) libpmem=yes
1507 ;;
1508 --disable-libpmem) libpmem=no
1509 ;;
1510 --enable-xkbcommon) xkbcommon="enabled"
1511 ;;
1512 --disable-xkbcommon) xkbcommon="disabled"
1513 ;;
1514 --enable-plugins) plugins="yes"
1515 ;;
1516 --disable-plugins) plugins="no"
1517 ;;
1518 --enable-containers) use_containers="yes"
1519 ;;
1520 --disable-containers) use_containers="no"
1521 ;;
1522 --enable-fuzzing) fuzzing=yes
1523 ;;
1524 --disable-fuzzing) fuzzing=no
1525 ;;
1526 --gdb=*) gdb_bin="$optarg"
1527 ;;
1528 --enable-rng-none) rng_none=yes
1529 ;;
1530 --disable-rng-none) rng_none=no
1531 ;;
1532 --enable-keyring) secret_keyring="yes"
1533 ;;
1534 --disable-keyring) secret_keyring="no"
1535 ;;
1536 --enable-libdaxctl) libdaxctl=yes
1537 ;;
1538 --disable-libdaxctl) libdaxctl=no
1539 ;;
1540 --enable-fuse) fuse="enabled"
1541 ;;
1542 --disable-fuse) fuse="disabled"
1543 ;;
1544 --enable-fuse-lseek) fuse_lseek="enabled"
1545 ;;
1546 --disable-fuse-lseek) fuse_lseek="disabled"
1547 ;;
1548 --enable-multiprocess) multiprocess="enabled"
1549 ;;
1550 --disable-multiprocess) multiprocess="disabled"
1551 ;;
1552 --enable-gio) gio=yes
1553 ;;
1554 --disable-gio) gio=no
1555 ;;
1556 --enable-slirp-smbd) slirp_smbd=yes
1557 ;;
1558 --disable-slirp-smbd) slirp_smbd=no
1559 ;;
1560 *)
1561 echo "ERROR: unknown option $opt"
1562 echo "Try '$0 --help' for more information"
1563 exit 1
1564 ;;
1565 esac
1566 done
1567
1568 case $git_submodules_action in
1569 update|validate)
1570 if test ! -e "$source_path/.git"; then
1571 echo "ERROR: cannot $git_submodules_action git submodules without .git"
1572 exit 1
1573 fi
1574 ;;
1575 ignore)
1576 if ! test -f "$source_path/ui/keycodemapdb/README"
1577 then
1578 echo
1579 echo "ERROR: missing GIT submodules"
1580 echo
1581 if test -e "$source_path/.git"; then
1582 echo "--with-git-submodules=ignore specified but submodules were not"
1583 echo "checked out. Please initialize and update submodules."
1584 else
1585 echo "This is not a GIT checkout but module content appears to"
1586 echo "be missing. Do not use 'git archive' or GitHub download links"
1587 echo "to acquire QEMU source archives. Non-GIT builds are only"
1588 echo "supported with source archives linked from:"
1589 echo
1590 echo " https://www.qemu.org/download/#source"
1591 echo
1592 echo "Developers working with GIT can use scripts/archive-source.sh"
1593 echo "if they need to create valid source archives."
1594 fi
1595 echo
1596 exit 1
1597 fi
1598 ;;
1599 *)
1600 echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
1601 exit 1
1602 ;;
1603 esac
1604
1605 libdir="${libdir:-$prefix/lib}"
1606 libexecdir="${libexecdir:-$prefix/libexec}"
1607 includedir="${includedir:-$prefix/include}"
1608
1609 if test "$mingw32" = "yes" ; then
1610 bindir="${bindir:-$prefix}"
1611 else
1612 bindir="${bindir:-$prefix/bin}"
1613 fi
1614 mandir="${mandir:-$prefix/share/man}"
1615 datadir="${datadir:-$prefix/share}"
1616 docdir="${docdir:-$prefix/share/doc}"
1617 sysconfdir="${sysconfdir:-$prefix/etc}"
1618 local_statedir="${local_statedir:-$prefix/var}"
1619 firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1620 localedir="${localedir:-$datadir/locale}"
1621
1622 case "$cpu" in
1623 ppc)
1624 CPU_CFLAGS="-m32"
1625 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1626 ;;
1627 ppc64)
1628 CPU_CFLAGS="-m64"
1629 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1630 ;;
1631 sparc)
1632 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1633 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1634 ;;
1635 sparc64)
1636 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1637 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1638 ;;
1639 s390)
1640 CPU_CFLAGS="-m31"
1641 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1642 ;;
1643 s390x)
1644 CPU_CFLAGS="-m64"
1645 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1646 ;;
1647 i386)
1648 CPU_CFLAGS="-m32"
1649 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1650 ;;
1651 x86_64)
1652 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1653 # If we truly care, we should simply detect this case at
1654 # runtime and generate the fallback to serial emulation.
1655 CPU_CFLAGS="-m64 -mcx16"
1656 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1657 ;;
1658 x32)
1659 CPU_CFLAGS="-mx32"
1660 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1661 ;;
1662 # No special flags required for other host CPUs
1663 esac
1664
1665 eval "cross_cc_${cpu}=\$cc"
1666 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1667 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1668
1669 # For user-mode emulation the host arch has to be one we explicitly
1670 # support, even if we're using TCI.
1671 if [ "$ARCH" = "unknown" ]; then
1672 bsd_user="no"
1673 linux_user="no"
1674 fi
1675
1676 default_target_list=""
1677 deprecated_targets_list=ppc64abi32-linux-user
1678 deprecated_features=""
1679 mak_wilds=""
1680
1681 if [ "$softmmu" = "yes" ]; then
1682 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
1683 fi
1684 if [ "$linux_user" = "yes" ]; then
1685 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
1686 fi
1687 if [ "$bsd_user" = "yes" ]; then
1688 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
1689 fi
1690
1691 # If the user doesn't explicitly specify a deprecated target we will
1692 # skip it.
1693 if test -z "$target_list"; then
1694 if test -z "$target_list_exclude"; then
1695 target_list_exclude="$deprecated_targets_list"
1696 else
1697 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1698 fi
1699 fi
1700
1701 for config in $mak_wilds; do
1702 target="$(basename "$config" .mak)"
1703 if echo "$target_list_exclude" | grep -vq "$target"; then
1704 default_target_list="${default_target_list} $target"
1705 fi
1706 done
1707
1708 # Enumerate public trace backends for --help output
1709 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1710
1711 if test x"$show_help" = x"yes" ; then
1712 cat << EOF
1713
1714 Usage: configure [options]
1715 Options: [defaults in brackets after descriptions]
1716
1717 Standard options:
1718 --help print this message
1719 --prefix=PREFIX install in PREFIX [$prefix]
1720 --interp-prefix=PREFIX where to find shared libraries, etc.
1721 use %M for cpu name [$interp_prefix]
1722 --target-list=LIST set target list (default: build all non-deprecated)
1723 $(echo Available targets: $default_target_list | \
1724 fold -s -w 53 | sed -e 's/^/ /')
1725 $(echo Deprecated targets: $deprecated_targets_list | \
1726 fold -s -w 53 | sed -e 's/^/ /')
1727 --target-list-exclude=LIST exclude a set of targets from the default target-list
1728
1729 Advanced options (experts only):
1730 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
1731 --cc=CC use C compiler CC [$cc]
1732 --iasl=IASL use ACPI compiler IASL [$iasl]
1733 --host-cc=CC use C compiler CC [$host_cc] for code run at
1734 build time
1735 --cxx=CXX use C++ compiler CXX [$cxx]
1736 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1737 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1738 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1739 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1740 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1741 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1742 --make=MAKE use specified make [$make]
1743 --python=PYTHON use specified python [$python]
1744 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1745 --meson=MESON use specified meson [$meson]
1746 --ninja=NINJA use specified ninja [$ninja]
1747 --smbd=SMBD use specified smbd [$smbd]
1748 --with-git=GIT use specified git [$git]
1749 --with-git-submodules=update update git submodules (default if .git dir exists)
1750 --with-git-submodules=validate fail if git submodules are not up to date
1751 --with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
1752 --static enable static build [$static]
1753 --mandir=PATH install man pages in PATH
1754 --datadir=PATH install firmware in PATH/$qemu_suffix
1755 --localedir=PATH install translation in PATH/$qemu_suffix
1756 --docdir=PATH install documentation in PATH/$qemu_suffix
1757 --bindir=PATH install binaries in PATH
1758 --libdir=PATH install libraries in PATH
1759 --libexecdir=PATH install helper binaries in PATH
1760 --sysconfdir=PATH install config in PATH/$qemu_suffix
1761 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1762 --firmwarepath=PATH search PATH for firmware files
1763 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1764 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1765 --with-pkgversion=VERS use specified string as sub-version of the package
1766 --without-default-features default all --enable-* options to "disabled"
1767 --without-default-devices do not include any device that is not needed to
1768 start the emulator (only use if you are including
1769 desired devices in default-configs/devices/)
1770 --enable-debug enable common debug build options
1771 --enable-sanitizers enable default sanitizers
1772 --enable-tsan enable thread sanitizer
1773 --disable-strip disable stripping binaries
1774 --disable-werror disable compilation abort on warning
1775 --disable-stack-protector disable compiler-provided stack protection
1776 --audio-drv-list=LIST set audio drivers list:
1777 Available drivers: $audio_possible_drivers
1778 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1779 --block-drv-rw-whitelist=L
1780 set block driver read-write whitelist
1781 (affects only QEMU, not qemu-img)
1782 --block-drv-ro-whitelist=L
1783 set block driver read-only whitelist
1784 (affects only QEMU, not qemu-img)
1785 --enable-trace-backends=B Set trace backend
1786 Available backends: $trace_backend_list
1787 --with-trace-file=NAME Full PATH,NAME of file to store traces
1788 Default:trace-<pid>
1789 --disable-slirp disable SLIRP userspace network connectivity
1790 --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
1791 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1792 --oss-lib path to OSS library
1793 --cpu=CPU Build for host CPU [$cpu]
1794 --with-coroutine=BACKEND coroutine backend. Supported options:
1795 ucontext, sigaltstack, windows
1796 --enable-gcov enable test coverage analysis with gcov
1797 --disable-blobs disable installing provided firmware blobs
1798 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1799 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1800 --tls-priority default TLS protocol/cipher priority string
1801 --enable-gprof QEMU profiling with gprof
1802 --enable-profiler profiler support
1803 --enable-debug-stack-usage
1804 track the maximum stack usage of stacks created by qemu_alloc_stack
1805 --enable-plugins
1806 enable plugins via shared library loading
1807 --disable-containers don't use containers for cross-building
1808 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1809
1810 Optional features, enabled with --enable-FEATURE and
1811 disabled with --disable-FEATURE, default is enabled if available
1812 (unless built with --without-default-features):
1813
1814 system all system emulation targets
1815 user supported user emulation targets
1816 linux-user all linux usermode emulation targets
1817 bsd-user all BSD usermode emulation targets
1818 docs build documentation
1819 guest-agent build the QEMU Guest Agent
1820 guest-agent-msi build guest agent Windows MSI installation package
1821 pie Position Independent Executables
1822 modules modules support (non-Windows)
1823 module-upgrades try to load modules from alternate paths for upgrades
1824 debug-tcg TCG debugging (default is disabled)
1825 debug-info debugging information
1826 lto Enable Link-Time Optimization.
1827 sparse sparse checker
1828 safe-stack SafeStack Stack Smash Protection. Depends on
1829 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1830 cfi Enable Control-Flow Integrity for indirect function calls.
1831 In case of a cfi violation, QEMU is terminated with SIGILL
1832 Depends on lto and is incompatible with modules
1833 Automatically enables Link-Time Optimization (lto)
1834 cfi-debug In case of a cfi violation, a message containing the line that
1835 triggered the error is written to stderr. After the error,
1836 QEMU is still terminated with SIGILL
1837 gnutls GNUTLS cryptography support
1838 nettle nettle cryptography support
1839 gcrypt libgcrypt cryptography support
1840 auth-pam PAM access control
1841 sdl SDL UI
1842 sdl-image SDL Image support for icons
1843 gtk gtk UI
1844 vte vte support for the gtk UI
1845 curses curses UI
1846 iconv font glyph conversion support
1847 vnc VNC UI support
1848 vnc-sasl SASL encryption for VNC server
1849 vnc-jpeg JPEG lossy compression for VNC server
1850 vnc-png PNG compression for VNC server
1851 cocoa Cocoa UI (Mac OS X only)
1852 virtfs VirtFS
1853 virtiofsd build virtiofs daemon (virtiofsd)
1854 libudev Use libudev to enumerate host devices
1855 mpath Multipath persistent reservation passthrough
1856 xen xen backend driver support
1857 xen-pci-passthrough PCI passthrough support for Xen
1858 brlapi BrlAPI (Braile)
1859 curl curl connectivity
1860 membarrier membarrier system call (for Linux 4.14+ or Windows)
1861 fdt fdt device tree
1862 kvm KVM acceleration support
1863 hax HAX acceleration support
1864 hvf Hypervisor.framework acceleration support
1865 nvmm NVMM acceleration support
1866 whpx Windows Hypervisor Platform acceleration support
1867 rdma Enable RDMA-based migration
1868 pvrdma Enable PVRDMA support
1869 vde support for vde network
1870 netmap support for netmap network
1871 linux-aio Linux AIO support
1872 linux-io-uring Linux io_uring support
1873 cap-ng libcap-ng support
1874 attr attr and xattr support
1875 vhost-net vhost-net kernel acceleration support
1876 vhost-vsock virtio sockets device support
1877 vhost-scsi vhost-scsi kernel target support
1878 vhost-crypto vhost-user-crypto backend support
1879 vhost-kernel vhost kernel backend support
1880 vhost-user vhost-user backend support
1881 vhost-user-blk-server vhost-user-blk server support
1882 vhost-vdpa vhost-vdpa kernel backend support
1883 spice spice
1884 spice-protocol spice-protocol
1885 rbd rados block device (rbd)
1886 libiscsi iscsi support
1887 libnfs nfs support
1888 smartcard smartcard support (libcacard)
1889 u2f U2F support (u2f-emu)
1890 libusb libusb (for usb passthrough)
1891 live-block-migration Block migration in the main migration stream
1892 usb-redir usb network redirection support
1893 lzo support of lzo compression library
1894 snappy support of snappy compression library
1895 bzip2 support of bzip2 compression library
1896 (for reading bzip2-compressed dmg images)
1897 lzfse support of lzfse compression library
1898 (for reading lzfse-compressed dmg images)
1899 zstd support for zstd compression library
1900 (for migration compression and qcow2 cluster compression)
1901 seccomp seccomp support
1902 coroutine-pool coroutine freelist (better performance)
1903 glusterfs GlusterFS backend
1904 tpm TPM support
1905 libssh ssh block device support
1906 numa libnuma support
1907 libxml2 for Parallels image format
1908 tcmalloc tcmalloc support
1909 jemalloc jemalloc support
1910 avx2 AVX2 optimization support
1911 avx512f AVX512F optimization support
1912 replication replication support
1913 opengl opengl support
1914 virglrenderer virgl rendering support
1915 xfsctl xfsctl support
1916 qom-cast-debug cast debugging support
1917 tools build qemu-io, qemu-nbd and qemu-img tools
1918 bochs bochs image format support
1919 cloop cloop image format support
1920 dmg dmg image format support
1921 qcow1 qcow v1 image format support
1922 vdi vdi image format support
1923 vvfat vvfat image format support
1924 qed qed image format support
1925 parallels parallels image format support
1926 crypto-afalg Linux AF_ALG crypto backend driver
1927 capstone capstone disassembler support
1928 debug-mutex mutex debugging support
1929 libpmem libpmem support
1930 xkbcommon xkbcommon support
1931 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1932 libdaxctl libdaxctl support
1933 fuse FUSE block device export
1934 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
1935 multiprocess Out of process device emulation support
1936 gio libgio support
1937 slirp-smbd use smbd (at path --smbd=*) in slirp networking
1938
1939 NOTE: The object files are built at the place where configure is launched
1940 EOF
1941 exit 0
1942 fi
1943
1944 # Remove old dependency files to make sure that they get properly regenerated
1945 rm -f */config-devices.mak.d
1946
1947 if test -z "$python"
1948 then
1949 error_exit "Python not found. Use --python=/path/to/python"
1950 fi
1951 if ! has "$make"
1952 then
1953 error_exit "GNU make ($make) not found"
1954 fi
1955
1956 # Note that if the Python conditional here evaluates True we will exit
1957 # with status 1 which is a shell 'false' value.
1958 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1959 error_exit "Cannot use '$python', Python >= 3.6 is required." \
1960 "Use --python=/path/to/python to specify a supported Python."
1961 fi
1962
1963 # Preserve python version since some functionality is dependent on it
1964 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)
1965
1966 # Suppress writing compiled files
1967 python="$python -B"
1968
1969 if test -z "$meson"; then
1970 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
1971 meson=meson
1972 elif test $git_submodules_action != 'ignore' ; then
1973 meson=git
1974 elif test -e "${source_path}/meson/meson.py" ; then
1975 meson=internal
1976 else
1977 if test "$explicit_python" = yes; then
1978 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1979 else
1980 error_exit "Meson not found. Use --meson=/path/to/meson"
1981 fi
1982 fi
1983 else
1984 # Meson uses its own Python interpreter to invoke other Python scripts,
1985 # but the user wants to use the one they specified with --python.
1986 #
1987 # We do not want to override the distro Python interpreter (and sometimes
1988 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1989 # just require --meson=git|internal together with --python.
1990 if test "$explicit_python" = yes; then
1991 case "$meson" in
1992 git | internal) ;;
1993 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
1994 esac
1995 fi
1996 fi
1997
1998 if test "$meson" = git; then
1999 git_submodules="${git_submodules} meson"
2000 fi
2001
2002 case "$meson" in
2003 git | internal)
2004 meson="$python ${source_path}/meson/meson.py"
2005 ;;
2006 *) meson=$(command -v "$meson") ;;
2007 esac
2008
2009 # Probe for ninja
2010
2011 if test -z "$ninja"; then
2012 for c in ninja ninja-build samu; do
2013 if has $c; then
2014 ninja=$(command -v "$c")
2015 break
2016 fi
2017 done
2018 if test -z "$ninja"; then
2019 error_exit "Cannot find Ninja"
2020 fi
2021 fi
2022
2023 # Check that the C compiler works. Doing this here before testing
2024 # the host CPU ensures that we had a valid CC to autodetect the
2025 # $cpu var (and we should bail right here if that's not the case).
2026 # It also allows the help message to be printed without a CC.
2027 write_c_skeleton;
2028 if compile_object ; then
2029 : C compiler works ok
2030 else
2031 error_exit "\"$cc\" either does not exist or does not work"
2032 fi
2033 if ! compile_prog ; then
2034 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2035 fi
2036
2037 # Consult white-list to determine whether to enable werror
2038 # by default. Only enable by default for git builds
2039 if test -z "$werror" ; then
2040 if test "$git_submodules_action" != "ignore" && \
2041 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2042 werror="yes"
2043 else
2044 werror="no"
2045 fi
2046 fi
2047
2048 if test "$targetos" = "bogus"; then
2049 # Now that we know that we're not printing the help and that
2050 # the compiler works (so the results of the check_defines we used
2051 # to identify the OS are reliable), if we didn't recognize the
2052 # host OS we should stop now.
2053 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2054 fi
2055
2056 # Check whether the compiler matches our minimum requirements:
2057 cat > $TMPC << EOF
2058 #if defined(__clang_major__) && defined(__clang_minor__)
2059 # ifdef __apple_build_version__
2060 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2061 # error You need at least XCode Clang v5.1 to compile QEMU
2062 # endif
2063 # else
2064 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2065 # error You need at least Clang v3.4 to compile QEMU
2066 # endif
2067 # endif
2068 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2069 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2070 # error You need at least GCC v4.8 to compile QEMU
2071 # endif
2072 #else
2073 # error You either need GCC or Clang to compiler QEMU
2074 #endif
2075 int main (void) { return 0; }
2076 EOF
2077 if ! compile_prog "" "" ; then
2078 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2079 fi
2080
2081 # Accumulate -Wfoo and -Wno-bar separately.
2082 # We will list all of the enable flags first, and the disable flags second.
2083 # Note that we do not add -Werror, because that would enable it for all
2084 # configure tests. If a configure test failed due to -Werror this would
2085 # just silently disable some features, so it's too error prone.
2086
2087 warn_flags=
2088 add_to warn_flags -Wold-style-declaration
2089 add_to warn_flags -Wold-style-definition
2090 add_to warn_flags -Wtype-limits
2091 add_to warn_flags -Wformat-security
2092 add_to warn_flags -Wformat-y2k
2093 add_to warn_flags -Winit-self
2094 add_to warn_flags -Wignored-qualifiers
2095 add_to warn_flags -Wempty-body
2096 add_to warn_flags -Wnested-externs
2097 add_to warn_flags -Wendif-labels
2098 add_to warn_flags -Wexpansion-to-defined
2099 add_to warn_flags -Wimplicit-fallthrough=2
2100
2101 nowarn_flags=
2102 add_to nowarn_flags -Wno-initializer-overrides
2103 add_to nowarn_flags -Wno-missing-include-dirs
2104 add_to nowarn_flags -Wno-shift-negative-value
2105 add_to nowarn_flags -Wno-string-plus-int
2106 add_to nowarn_flags -Wno-typedef-redefinition
2107 add_to nowarn_flags -Wno-tautological-type-limit-compare
2108 add_to nowarn_flags -Wno-psabi
2109
2110 gcc_flags="$warn_flags $nowarn_flags"
2111
2112 cc_has_warning_flag() {
2113 write_c_skeleton;
2114
2115 # Use the positive sense of the flag when testing for -Wno-wombat
2116 # support (gcc will happily accept the -Wno- form of unknown
2117 # warning options).
2118 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2119 compile_prog "-Werror $optflag" ""
2120 }
2121
2122 for flag in $gcc_flags; do
2123 if cc_has_warning_flag $flag ; then
2124 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2125 fi
2126 done
2127
2128 if test "$stack_protector" != "no"; then
2129 cat > $TMPC << EOF
2130 int main(int argc, char *argv[])
2131 {
2132 char arr[64], *p = arr, *c = argv[0];
2133 while (*c) {
2134 *p++ = *c++;
2135 }
2136 return 0;
2137 }
2138 EOF
2139 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2140 sp_on=0
2141 for flag in $gcc_flags; do
2142 # We need to check both a compile and a link, since some compiler
2143 # setups fail only on a .c->.o compile and some only at link time
2144 if compile_object "-Werror $flag" &&
2145 compile_prog "-Werror $flag" ""; then
2146 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2147 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2148 sp_on=1
2149 break
2150 fi
2151 done
2152 if test "$stack_protector" = yes; then
2153 if test $sp_on = 0; then
2154 error_exit "Stack protector not supported"
2155 fi
2156 fi
2157 fi
2158
2159 # Disable -Wmissing-braces on older compilers that warn even for
2160 # the "universal" C zero initializer {0}.
2161 cat > $TMPC << EOF
2162 struct {
2163 int a[2];
2164 } x = {0};
2165 EOF
2166 if compile_object "-Werror" "" ; then
2167 :
2168 else
2169 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2170 fi
2171
2172 # Our module code doesn't support Windows
2173 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2174 error_exit "Modules are not available for Windows"
2175 fi
2176
2177 # module_upgrades is only reasonable if modules are enabled
2178 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2179 error_exit "Can't enable module-upgrades as Modules are not enabled"
2180 fi
2181
2182 # Static linking is not possible with modules or PIE
2183 if test "$static" = "yes" ; then
2184 if test "$modules" = "yes" ; then
2185 error_exit "static and modules are mutually incompatible"
2186 fi
2187 fi
2188
2189 # Unconditional check for compiler __thread support
2190 cat > $TMPC << EOF
2191 static __thread int tls_var;
2192 int main(void) { return tls_var; }
2193 EOF
2194
2195 if ! compile_prog "-Werror" "" ; then
2196 error_exit "Your compiler does not support the __thread specifier for " \
2197 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2198 fi
2199
2200 cat > $TMPC << EOF
2201
2202 #ifdef __linux__
2203 # define THREAD __thread
2204 #else
2205 # define THREAD
2206 #endif
2207 static THREAD int tls_var;
2208 int main(void) { return tls_var; }
2209 EOF
2210
2211 # Check we support --no-pie first; we will need this for building ROMs.
2212 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2213 CFLAGS_NOPIE="-fno-pie"
2214 fi
2215
2216 if test "$static" = "yes"; then
2217 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2218 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2219 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2220 pie="yes"
2221 elif test "$pie" = "yes"; then
2222 error_exit "-static-pie not available due to missing toolchain support"
2223 else
2224 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2225 pie="no"
2226 fi
2227 elif test "$pie" = "no"; then
2228 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2229 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2230 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2231 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2232 pie="yes"
2233 elif test "$pie" = "yes"; then
2234 error_exit "PIE not available due to missing toolchain support"
2235 else
2236 echo "Disabling PIE due to missing toolchain support"
2237 pie="no"
2238 fi
2239
2240 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2241 # The combination is known as "full relro", because .got.plt is read-only too.
2242 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2243 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2244 fi
2245
2246 ##########################################
2247 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2248 # use i686 as default anyway, but for those that don't, an explicit
2249 # specification is necessary
2250
2251 if test "$cpu" = "i386"; then
2252 cat > $TMPC << EOF
2253 static int sfaa(int *ptr)
2254 {
2255 return __sync_fetch_and_and(ptr, 0);
2256 }
2257
2258 int main(void)
2259 {
2260 int val = 42;
2261 val = __sync_val_compare_and_swap(&val, 0, 1);
2262 sfaa(&val);
2263 return val;
2264 }
2265 EOF
2266 if ! compile_prog "" "" ; then
2267 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2268 fi
2269 fi
2270
2271 #########################################
2272 # Solaris specific configure tool chain decisions
2273
2274 if test "$solaris" = "yes" ; then
2275 if has ar; then
2276 :
2277 else
2278 if test -f /usr/ccs/bin/ar ; then
2279 error_exit "No path includes ar" \
2280 "Add /usr/ccs/bin to your path and rerun configure"
2281 fi
2282 error_exit "No path includes ar"
2283 fi
2284 fi
2285
2286 if test "$tcg" = "enabled"; then
2287 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
2288 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
2289 fi
2290
2291 if test -z "${target_list+xxx}" ; then
2292 default_targets=yes
2293 for target in $default_target_list; do
2294 target_list="$target_list $target"
2295 done
2296 target_list="${target_list# }"
2297 else
2298 default_targets=no
2299 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2300 for target in $target_list; do
2301 # Check that we recognised the target name; this allows a more
2302 # friendly error message than if we let it fall through.
2303 case " $default_target_list " in
2304 *" $target "*)
2305 ;;
2306 *)
2307 error_exit "Unknown target name '$target'"
2308 ;;
2309 esac
2310 done
2311 fi
2312
2313 for target in $target_list; do
2314 # if a deprecated target is enabled we note it here
2315 if echo "$deprecated_targets_list" | grep -q "$target"; then
2316 add_to deprecated_features $target
2317 fi
2318 done
2319
2320 # see if system emulation was really requested
2321 case " $target_list " in
2322 *"-softmmu "*) softmmu=yes
2323 ;;
2324 *) softmmu=no
2325 ;;
2326 esac
2327
2328 feature_not_found() {
2329 feature=$1
2330 remedy=$2
2331
2332 error_exit "User requested feature $feature" \
2333 "configure was not able to find it." \
2334 "$remedy"
2335 }
2336
2337 # ---
2338 # big/little endian test
2339 cat > $TMPC << EOF
2340 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2341 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2342 extern int foo(short *, short *);
2343 int main(int argc, char *argv[]) {
2344 return foo(big_endian, little_endian);
2345 }
2346 EOF
2347
2348 if compile_object ; then
2349 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2350 bigendian="yes"
2351 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2352 bigendian="no"
2353 else
2354 echo big/little test failed
2355 fi
2356 else
2357 echo big/little test failed
2358 fi
2359
2360 ##########################################
2361 # system tools
2362 if test -z "$want_tools"; then
2363 if test "$softmmu" = "no"; then
2364 want_tools=no
2365 else
2366 want_tools=yes
2367 fi
2368 fi
2369
2370 ##########################################
2371 # Disable features only meaningful for system-mode emulation
2372 if test "$softmmu" = "no"; then
2373 audio_drv_list=""
2374 fi
2375
2376 ##########################################
2377 # Some versions of Mac OS X incorrectly define SIZE_MAX
2378 cat > $TMPC << EOF
2379 #include <stdint.h>
2380 #include <stdio.h>
2381 int main(int argc, char *argv[]) {
2382 return printf("%zu", SIZE_MAX);
2383 }
2384 EOF
2385 have_broken_size_max=no
2386 if ! compile_object -Werror ; then
2387 have_broken_size_max=yes
2388 fi
2389
2390 ##########################################
2391 # L2TPV3 probe
2392
2393 cat > $TMPC <<EOF
2394 #include <sys/socket.h>
2395 #include <linux/ip.h>
2396 int main(void) { return sizeof(struct mmsghdr); }
2397 EOF
2398 if compile_prog "" "" ; then
2399 l2tpv3=yes
2400 else
2401 l2tpv3=no
2402 fi
2403
2404 cat > $TMPC <<EOF
2405 #include <sys/mman.h>
2406 int main(int argc, char *argv[]) {
2407 return mlockall(MCL_FUTURE);
2408 }
2409 EOF
2410 if compile_prog "" "" ; then
2411 have_mlockall=yes
2412 else
2413 have_mlockall=no
2414 fi
2415
2416 #########################################
2417 # vhost interdependencies and host support
2418
2419 # vhost backends
2420 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2421 error_exit "vhost-user is only available on Linux"
2422 fi
2423 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2424 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2425 error_exit "vhost-vdpa is only available on Linux"
2426 fi
2427 test "$vhost_kernel" = "" && vhost_kernel=$linux
2428 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2429 error_exit "vhost-kernel is only available on Linux"
2430 fi
2431
2432 # vhost-kernel devices
2433 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2434 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2435 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2436 fi
2437 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2438 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2439 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2440 fi
2441
2442 # vhost-user backends
2443 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2444 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2445 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2446 fi
2447 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2448 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2449 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2450 fi
2451 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2452 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2453 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2454 fi
2455 #vhost-vdpa backends
2456 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2457 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2458 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2459 fi
2460
2461 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2462 if test "$vhost_net" = ""; then
2463 test "$vhost_net_user" = "yes" && vhost_net=yes
2464 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2465 test "$vhost_kernel" = "yes" && vhost_net=yes
2466 fi
2467
2468 ##########################################
2469 # pkg-config probe
2470
2471 if ! has "$pkg_config_exe"; then
2472 error_exit "pkg-config binary '$pkg_config_exe' not found"
2473 fi
2474
2475 ##########################################
2476 # NPTL probe
2477
2478 if test "$linux_user" = "yes"; then
2479 cat > $TMPC <<EOF
2480 #include <sched.h>
2481 #include <linux/futex.h>
2482 int main(void) {
2483 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2484 #error bork
2485 #endif
2486 return 0;
2487 }
2488 EOF
2489 if ! compile_object ; then
2490 feature_not_found "nptl" "Install glibc and linux kernel headers."
2491 fi
2492 fi
2493
2494 ##########################################
2495 # xen probe
2496
2497 if test "$xen" != "disabled" ; then
2498 # Check whether Xen library path is specified via --extra-ldflags to avoid
2499 # overriding this setting with pkg-config output. If not, try pkg-config
2500 # to obtain all needed flags.
2501
2502 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2503 $pkg_config --exists xencontrol ; then
2504 xen_ctrl_version="$(printf '%d%02d%02d' \
2505 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2506 xen=enabled
2507 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
2508 xen_pc="$xen_pc xenevtchn xendevicemodel"
2509 if $pkg_config --exists xentoolcore; then
2510 xen_pc="$xen_pc xentoolcore"
2511 fi
2512 xen_cflags="$($pkg_config --cflags $xen_pc)"
2513 xen_libs="$($pkg_config --libs $xen_pc)"
2514 else
2515
2516 xen_libs="-lxenstore -lxenctrl"
2517 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2518
2519 # First we test whether Xen headers and libraries are available.
2520 # If no, we are done and there is no Xen support.
2521 # If yes, more tests are run to detect the Xen version.
2522
2523 # Xen (any)
2524 cat > $TMPC <<EOF
2525 #include <xenctrl.h>
2526 int main(void) {
2527 return 0;
2528 }
2529 EOF
2530 if ! compile_prog "" "$xen_libs" ; then
2531 # Xen not found
2532 if test "$xen" = "enabled" ; then
2533 feature_not_found "xen" "Install xen devel"
2534 fi
2535 xen=disabled
2536
2537 # Xen unstable
2538 elif
2539 cat > $TMPC <<EOF &&
2540 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2541 #define __XEN_TOOLS__
2542 #include <xendevicemodel.h>
2543 #include <xenforeignmemory.h>
2544 int main(void) {
2545 xendevicemodel_handle *xd;
2546 xenforeignmemory_handle *xfmem;
2547
2548 xd = xendevicemodel_open(0, 0);
2549 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2550
2551 xfmem = xenforeignmemory_open(0, 0);
2552 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2553
2554 return 0;
2555 }
2556 EOF
2557 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2558 then
2559 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2560 xen_ctrl_version=41100
2561 xen=enabled
2562 elif
2563 cat > $TMPC <<EOF &&
2564 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2565 #include <xenforeignmemory.h>
2566 #include <xentoolcore.h>
2567 int main(void) {
2568 xenforeignmemory_handle *xfmem;
2569
2570 xfmem = xenforeignmemory_open(0, 0);
2571 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2572 xentoolcore_restrict_all(0);
2573
2574 return 0;
2575 }
2576 EOF
2577 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2578 then
2579 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2580 xen_ctrl_version=41000
2581 xen=enabled
2582 elif
2583 cat > $TMPC <<EOF &&
2584 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2585 #define __XEN_TOOLS__
2586 #include <xendevicemodel.h>
2587 int main(void) {
2588 xendevicemodel_handle *xd;
2589
2590 xd = xendevicemodel_open(0, 0);
2591 xendevicemodel_close(xd);
2592
2593 return 0;
2594 }
2595 EOF
2596 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2597 then
2598 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2599 xen_ctrl_version=40900
2600 xen=enabled
2601 elif
2602 cat > $TMPC <<EOF &&
2603 /*
2604 * If we have stable libs the we don't want the libxc compat
2605 * layers, regardless of what CFLAGS we may have been given.
2606 *
2607 * Also, check if xengnttab_grant_copy_segment_t is defined and
2608 * grant copy operation is implemented.
2609 */
2610 #undef XC_WANT_COMPAT_EVTCHN_API
2611 #undef XC_WANT_COMPAT_GNTTAB_API
2612 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2613 #include <xenctrl.h>
2614 #include <xenstore.h>
2615 #include <xenevtchn.h>
2616 #include <xengnttab.h>
2617 #include <xenforeignmemory.h>
2618 #include <stdint.h>
2619 #include <xen/hvm/hvm_info_table.h>
2620 #if !defined(HVM_MAX_VCPUS)
2621 # error HVM_MAX_VCPUS not defined
2622 #endif
2623 int main(void) {
2624 xc_interface *xc = NULL;
2625 xenforeignmemory_handle *xfmem;
2626 xenevtchn_handle *xe;
2627 xengnttab_handle *xg;
2628 xengnttab_grant_copy_segment_t* seg = NULL;
2629
2630 xs_daemon_open();
2631
2632 xc = xc_interface_open(0, 0, 0);
2633 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2634 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2635 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2636 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2637
2638 xfmem = xenforeignmemory_open(0, 0);
2639 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2640
2641 xe = xenevtchn_open(0, 0);
2642 xenevtchn_fd(xe);
2643
2644 xg = xengnttab_open(0, 0);
2645 xengnttab_grant_copy(xg, 0, seg);
2646
2647 return 0;
2648 }
2649 EOF
2650 compile_prog "" "$xen_libs $xen_stable_libs"
2651 then
2652 xen_ctrl_version=40800
2653 xen=enabled
2654 elif
2655 cat > $TMPC <<EOF &&
2656 /*
2657 * If we have stable libs the we don't want the libxc compat
2658 * layers, regardless of what CFLAGS we may have been given.
2659 */
2660 #undef XC_WANT_COMPAT_EVTCHN_API
2661 #undef XC_WANT_COMPAT_GNTTAB_API
2662 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2663 #include <xenctrl.h>
2664 #include <xenstore.h>
2665 #include <xenevtchn.h>
2666 #include <xengnttab.h>
2667 #include <xenforeignmemory.h>
2668 #include <stdint.h>
2669 #include <xen/hvm/hvm_info_table.h>
2670 #if !defined(HVM_MAX_VCPUS)
2671 # error HVM_MAX_VCPUS not defined
2672 #endif
2673 int main(void) {
2674 xc_interface *xc = NULL;
2675 xenforeignmemory_handle *xfmem;
2676 xenevtchn_handle *xe;
2677 xengnttab_handle *xg;
2678
2679 xs_daemon_open();
2680
2681 xc = xc_interface_open(0, 0, 0);
2682 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2683 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2684 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2685 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2686
2687 xfmem = xenforeignmemory_open(0, 0);
2688 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2689
2690 xe = xenevtchn_open(0, 0);
2691 xenevtchn_fd(xe);
2692
2693 xg = xengnttab_open(0, 0);
2694 xengnttab_map_grant_ref(xg, 0, 0, 0);
2695
2696 return 0;
2697 }
2698 EOF
2699 compile_prog "" "$xen_libs $xen_stable_libs"
2700 then
2701 xen_ctrl_version=40701
2702 xen=enabled
2703
2704 # Xen 4.6
2705 elif
2706 cat > $TMPC <<EOF &&
2707 #include <xenctrl.h>
2708 #include <xenstore.h>
2709 #include <stdint.h>
2710 #include <xen/hvm/hvm_info_table.h>
2711 #if !defined(HVM_MAX_VCPUS)
2712 # error HVM_MAX_VCPUS not defined
2713 #endif
2714 int main(void) {
2715 xc_interface *xc;
2716 xs_daemon_open();
2717 xc = xc_interface_open(0, 0, 0);
2718 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2719 xc_gnttab_open(NULL, 0);
2720 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2721 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2722 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2723 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2724 return 0;
2725 }
2726 EOF
2727 compile_prog "" "$xen_libs"
2728 then
2729 xen_ctrl_version=40600
2730 xen=enabled
2731
2732 # Xen 4.5
2733 elif
2734 cat > $TMPC <<EOF &&
2735 #include <xenctrl.h>
2736 #include <xenstore.h>
2737 #include <stdint.h>
2738 #include <xen/hvm/hvm_info_table.h>
2739 #if !defined(HVM_MAX_VCPUS)
2740 # error HVM_MAX_VCPUS not defined
2741 #endif
2742 int main(void) {
2743 xc_interface *xc;
2744 xs_daemon_open();
2745 xc = xc_interface_open(0, 0, 0);
2746 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2747 xc_gnttab_open(NULL, 0);
2748 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2749 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2750 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2751 return 0;
2752 }
2753 EOF
2754 compile_prog "" "$xen_libs"
2755 then
2756 xen_ctrl_version=40500
2757 xen=enabled
2758
2759 elif
2760 cat > $TMPC <<EOF &&
2761 #include <xenctrl.h>
2762 #include <xenstore.h>
2763 #include <stdint.h>
2764 #include <xen/hvm/hvm_info_table.h>
2765 #if !defined(HVM_MAX_VCPUS)
2766 # error HVM_MAX_VCPUS not defined
2767 #endif
2768 int main(void) {
2769 xc_interface *xc;
2770 xs_daemon_open();
2771 xc = xc_interface_open(0, 0, 0);
2772 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2773 xc_gnttab_open(NULL, 0);
2774 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2775 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2776 return 0;
2777 }
2778 EOF
2779 compile_prog "" "$xen_libs"
2780 then
2781 xen_ctrl_version=40200
2782 xen=enabled
2783
2784 else
2785 if test "$xen" = "enabled" ; then
2786 feature_not_found "xen (unsupported version)" \
2787 "Install a supported xen (xen 4.2 or newer)"
2788 fi
2789 xen=disabled
2790 fi
2791
2792 if test "$xen" = enabled; then
2793 if test $xen_ctrl_version -ge 40701 ; then
2794 xen_libs="$xen_libs $xen_stable_libs "
2795 fi
2796 fi
2797 fi
2798 fi
2799
2800 ##########################################
2801 # GNUTLS probe
2802
2803 if test "$gnutls" != "no"; then
2804 pass="no"
2805 if $pkg_config --exists "gnutls >= 3.1.18"; then
2806 gnutls_cflags=$($pkg_config --cflags gnutls)
2807 gnutls_libs=$($pkg_config --libs gnutls)
2808 # Packaging for the static libraries is not always correct.
2809 # At least ubuntu 18.04 ships only shared libraries.
2810 write_c_skeleton
2811 if compile_prog "" "$gnutls_libs" ; then
2812 pass="yes"
2813 fi
2814 fi
2815 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2816 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2817 else
2818 gnutls="$pass"
2819 fi
2820 fi
2821
2822
2823 # If user didn't give a --disable/enable-gcrypt flag,
2824 # then mark as disabled if user requested nettle
2825 # explicitly
2826 if test -z "$gcrypt"
2827 then
2828 if test "$nettle" = "yes"
2829 then
2830 gcrypt="no"
2831 fi
2832 fi
2833
2834 # If user didn't give a --disable/enable-nettle flag,
2835 # then mark as disabled if user requested gcrypt
2836 # explicitly
2837 if test -z "$nettle"
2838 then
2839 if test "$gcrypt" = "yes"
2840 then
2841 nettle="no"
2842 fi
2843 fi
2844
2845 has_libgcrypt() {
2846 if ! has "libgcrypt-config"
2847 then
2848 return 1
2849 fi
2850
2851 if test -n "$cross_prefix"
2852 then
2853 host=$(libgcrypt-config --host)
2854 if test "$host-" != $cross_prefix
2855 then
2856 return 1
2857 fi
2858 fi
2859
2860 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2861 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2862
2863 if test $maj != 1 || test $min -lt 5
2864 then
2865 return 1
2866 fi
2867
2868 return 0
2869 }
2870
2871
2872 if test "$nettle" != "no"; then
2873 pass="no"
2874 if $pkg_config --exists "nettle >= 3.4"; then
2875 nettle_cflags=$($pkg_config --cflags nettle)
2876 nettle_libs=$($pkg_config --libs nettle)
2877 # Link test to make sure the given libraries work (e.g for static).
2878 write_c_skeleton
2879 if compile_prog "" "$nettle_libs" ; then
2880 if test -z "$gcrypt"; then
2881 gcrypt="no"
2882 fi
2883 pass="yes"
2884 fi
2885 fi
2886 if test "$pass" = "yes"
2887 then
2888 cat > $TMPC << EOF
2889 #include <nettle/xts.h>
2890 int main(void) {
2891 return 0;
2892 }
2893 EOF
2894 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2895 nettle_xts=yes
2896 qemu_private_xts=no
2897 fi
2898 fi
2899 if test "$pass" = "no" && test "$nettle" = "yes"; then
2900 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2901 else
2902 nettle="$pass"
2903 fi
2904 fi
2905
2906 if test "$gcrypt" != "no"; then
2907 pass="no"
2908 if has_libgcrypt; then
2909 gcrypt_cflags=$(libgcrypt-config --cflags)
2910 gcrypt_libs=$(libgcrypt-config --libs)
2911 # Debian has removed -lgpg-error from libgcrypt-config
2912 # as it "spreads unnecessary dependencies" which in
2913 # turn breaks static builds...
2914 if test "$static" = "yes"
2915 then
2916 gcrypt_libs="$gcrypt_libs -lgpg-error"
2917 fi
2918
2919 # Link test to make sure the given libraries work (e.g for static).
2920 write_c_skeleton
2921 if compile_prog "" "$gcrypt_libs" ; then
2922 pass="yes"
2923 fi
2924 fi
2925 if test "$pass" = "yes"; then
2926 gcrypt="yes"
2927 cat > $TMPC << EOF
2928 #include <gcrypt.h>
2929 int main(void) {
2930 gcry_mac_hd_t handle;
2931 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2932 GCRY_MAC_FLAG_SECURE, NULL);
2933 return 0;
2934 }
2935 EOF
2936 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2937 gcrypt_hmac=yes
2938 fi
2939 cat > $TMPC << EOF
2940 #include <gcrypt.h>
2941 int main(void) {
2942 gcry_cipher_hd_t handle;
2943 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
2944 return 0;
2945 }
2946 EOF
2947 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2948 gcrypt_xts=yes
2949 qemu_private_xts=no
2950 fi
2951 elif test "$gcrypt" = "yes"; then
2952 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
2953 else
2954 gcrypt="no"
2955 fi
2956 fi
2957
2958
2959 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2960 then
2961 error_exit "Only one of gcrypt & nettle can be enabled"
2962 fi
2963
2964 ##########################################
2965 # libtasn1 - only for the TLS creds/session test suite
2966
2967 tasn1=yes
2968 tasn1_cflags=""
2969 tasn1_libs=""
2970 if $pkg_config --exists "libtasn1"; then
2971 tasn1_cflags=$($pkg_config --cflags libtasn1)
2972 tasn1_libs=$($pkg_config --libs libtasn1)
2973 else
2974 tasn1=no
2975 fi
2976
2977
2978 ##########################################
2979 # PAM probe
2980
2981 if test "$auth_pam" != "no"; then
2982 cat > $TMPC <<EOF
2983 #include <security/pam_appl.h>
2984 #include <stdio.h>
2985 int main(void) {
2986 const char *service_name = "qemu";
2987 const char *user = "frank";
2988 const struct pam_conv pam_conv = { 0 };
2989 pam_handle_t *pamh = NULL;
2990 pam_start(service_name, user, &pam_conv, &pamh);
2991 return 0;
2992 }
2993 EOF
2994 if compile_prog "" "-lpam" ; then
2995 auth_pam=yes
2996 else
2997 if test "$auth_pam" = "yes"; then
2998 feature_not_found "PAM" "Install PAM development package"
2999 else
3000 auth_pam=no
3001 fi
3002 fi
3003 fi
3004
3005 ##########################################
3006 # VTE probe
3007
3008 if test "$vte" != "no"; then
3009 vteminversion="0.32.0"
3010 if $pkg_config --exists "vte-2.91"; then
3011 vtepackage="vte-2.91"
3012 else
3013 vtepackage="vte-2.90"
3014 fi
3015 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3016 vte_cflags=$($pkg_config --cflags $vtepackage)
3017 vte_libs=$($pkg_config --libs $vtepackage)
3018 vteversion=$($pkg_config --modversion $vtepackage)
3019 vte="yes"
3020 elif test "$vte" = "yes"; then
3021 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3022 else
3023 vte="no"
3024 fi
3025 fi
3026
3027 ##########################################
3028 # RDMA needs OpenFabrics libraries
3029 if test "$rdma" != "no" ; then
3030 cat > $TMPC <<EOF
3031 #include <rdma/rdma_cma.h>
3032 int main(void) { return 0; }
3033 EOF
3034 rdma_libs="-lrdmacm -libverbs -libumad"
3035 if compile_prog "" "$rdma_libs" ; then
3036 rdma="yes"
3037 else
3038 if test "$rdma" = "yes" ; then
3039 error_exit \
3040 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3041 " Your options:" \
3042 " (1) Fast: Install infiniband packages (devel) from your distro." \
3043 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3044 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3045 fi
3046 rdma="no"
3047 fi
3048 fi
3049
3050 ##########################################
3051 # PVRDMA detection
3052
3053 cat > $TMPC <<EOF &&
3054 #include <sys/mman.h>
3055
3056 int
3057 main(void)
3058 {
3059 char buf = 0;
3060 void *addr = &buf;
3061 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3062
3063 return 0;
3064 }
3065 EOF
3066
3067 if test "$rdma" = "yes" ; then
3068 case "$pvrdma" in
3069 "")
3070 if compile_prog "" ""; then
3071 pvrdma="yes"
3072 else
3073 pvrdma="no"
3074 fi
3075 ;;
3076 "yes")
3077 if ! compile_prog "" ""; then
3078 error_exit "PVRDMA is not supported since mremap is not implemented"
3079 fi
3080 pvrdma="yes"
3081 ;;
3082 "no")
3083 pvrdma="no"
3084 ;;
3085 esac
3086 else
3087 if test "$pvrdma" = "yes" ; then
3088 error_exit "PVRDMA requires rdma suppport"
3089 fi
3090 pvrdma="no"
3091 fi
3092
3093 # Let's see if enhanced reg_mr is supported
3094 if test "$pvrdma" = "yes" ; then
3095
3096 cat > $TMPC <<EOF &&
3097 #include <infiniband/verbs.h>
3098
3099 int
3100 main(void)
3101 {
3102 struct ibv_mr *mr;
3103 struct ibv_pd *pd = NULL;
3104 size_t length = 10;
3105 uint64_t iova = 0;
3106 int access = 0;
3107 void *addr = NULL;
3108
3109 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3110
3111 ibv_dereg_mr(mr);
3112
3113 return 0;
3114 }
3115 EOF
3116 if ! compile_prog "" "-libverbs"; then
3117 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3118 fi
3119 fi
3120
3121 ##########################################
3122 # xfsctl() probe, used for file-posix.c
3123 if test "$xfs" != "no" ; then
3124 cat > $TMPC << EOF
3125 #include <stddef.h> /* NULL */
3126 #include <xfs/xfs.h>
3127 int main(void)
3128 {
3129 xfsctl(NULL, 0, 0, NULL);
3130 return 0;
3131 }
3132 EOF
3133 if compile_prog "" "" ; then
3134 xfs="yes"
3135 else
3136 if test "$xfs" = "yes" ; then
3137 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3138 fi
3139 xfs=no
3140 fi
3141 fi
3142
3143 ##########################################
3144 # vde libraries probe
3145 if test "$vde" != "no" ; then
3146 vde_libs="-lvdeplug"
3147 cat > $TMPC << EOF
3148 #include <libvdeplug.h>
3149 int main(void)
3150 {
3151 struct vde_open_args a = {0, 0, 0};
3152 char s[] = "";
3153 vde_open(s, s, &a);
3154 return 0;
3155 }
3156 EOF
3157 if compile_prog "" "$vde_libs" ; then
3158 vde=yes
3159 else
3160 if test "$vde" = "yes" ; then
3161 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3162 fi
3163 vde=no
3164 fi
3165 fi
3166
3167 ##########################################
3168 # netmap support probe
3169 # Apart from looking for netmap headers, we make sure that the host API version
3170 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3171 # a minor/major version number. Minor new features will be marked with values up
3172 # to 15, and if something happens that requires a change to the backend we will
3173 # move above 15, submit the backend fixes and modify this two bounds.
3174 if test "$netmap" != "no" ; then
3175 cat > $TMPC << EOF
3176 #include <inttypes.h>
3177 #include <net/if.h>
3178 #include <net/netmap.h>
3179 #include <net/netmap_user.h>
3180 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3181 #error
3182 #endif
3183 int main(void) { return 0; }
3184 EOF
3185 if compile_prog "" "" ; then
3186 netmap=yes
3187 else
3188 if test "$netmap" = "yes" ; then
3189 feature_not_found "netmap"
3190 fi
3191 netmap=no
3192 fi
3193 fi
3194
3195 ##########################################
3196 # detect CoreAudio
3197 if test "$coreaudio" != "no" ; then
3198 coreaudio_libs="-framework CoreAudio"
3199 cat > $TMPC << EOF
3200 #include <CoreAudio/CoreAudio.h>
3201 int main(void)
3202 {
3203 return (int)AudioGetCurrentHostTime();
3204 }
3205 EOF
3206 if compile_prog "" "$coreaudio_libs" ; then
3207 coreaudio=yes
3208 else
3209 coreaudio=no
3210 fi
3211 fi
3212
3213 ##########################################
3214 # Sound support libraries probe
3215
3216 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3217 for drv in $audio_drv_list; do
3218 case $drv in
3219 alsa | try-alsa)
3220 if $pkg_config alsa --exists; then
3221 alsa_libs=$($pkg_config alsa --libs)
3222 alsa_cflags=$($pkg_config alsa --cflags)
3223 alsa=yes
3224 if test "$drv" = "try-alsa"; then
3225 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3226 fi
3227 else
3228 if test "$drv" = "try-alsa"; then
3229 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3230 else
3231 error_exit "$drv check failed" \
3232 "Make sure to have the $drv libs and headers installed."
3233 fi
3234 fi
3235 ;;
3236
3237 pa | try-pa)
3238 if $pkg_config libpulse --exists; then
3239 libpulse=yes
3240 pulse_libs=$($pkg_config libpulse --libs)
3241 pulse_cflags=$($pkg_config libpulse --cflags)
3242 if test "$drv" = "try-pa"; then
3243 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3244 fi
3245 else
3246 if test "$drv" = "try-pa"; then
3247 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3248 else
3249 error_exit "$drv check failed" \
3250 "Make sure to have the $drv libs and headers installed."
3251 fi
3252 fi
3253 ;;
3254
3255 sdl)
3256 if test "$sdl" = "no"; then
3257 error_exit "sdl not found or disabled, can not use sdl audio driver"
3258 fi
3259 ;;
3260
3261 try-sdl)
3262 if test "$sdl" = "no"; then
3263 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3264 else
3265 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3266 fi
3267 ;;
3268
3269 coreaudio | try-coreaudio)
3270 if test "$coreaudio" = "no"; then
3271 if test "$drv" = "try-coreaudio"; then
3272 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio//')
3273 else
3274 error_exit "$drv check failed" \
3275 "Make sure to have the $drv is available."
3276 fi
3277 else
3278 coreaudio_libs="-framework CoreAudio"
3279 if test "$drv" = "try-coreaudio"; then
3280 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio/coreaudio/')
3281 fi
3282 fi
3283 ;;
3284
3285 dsound)
3286 dsound_libs="-lole32 -ldxguid"
3287 audio_win_int="yes"
3288 ;;
3289
3290 oss)
3291 oss_libs="$oss_lib"
3292 ;;
3293
3294 jack | try-jack)
3295 if $pkg_config jack --exists; then
3296 libjack=yes
3297 jack_libs=$($pkg_config jack --libs)
3298 if test "$drv" = "try-jack"; then
3299 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3300 fi
3301 else
3302 if test "$drv" = "try-jack"; then
3303 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3304 else
3305 error_exit "$drv check failed" \
3306 "Make sure to have the $drv libs and headers installed."
3307 fi
3308 fi
3309 ;;
3310
3311 *)
3312 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3313 error_exit "Unknown driver '$drv' selected" \
3314 "Possible drivers are: $audio_possible_drivers"
3315 }
3316 ;;
3317 esac
3318 done
3319
3320 ##########################################
3321 # glib support probe
3322
3323 glib_req_ver=2.48
3324 glib_modules=gthread-2.0
3325 if test "$modules" = yes; then
3326 glib_modules="$glib_modules gmodule-export-2.0"
3327 fi
3328 if test "$plugins" = yes; then
3329 glib_modules="$glib_modules gmodule-2.0"
3330 fi
3331
3332 for i in $glib_modules; do
3333 if $pkg_config --atleast-version=$glib_req_ver $i; then
3334 glib_cflags=$($pkg_config --cflags $i)
3335 glib_libs=$($pkg_config --libs $i)
3336 else
3337 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3338 fi
3339 done
3340
3341 # This workaround is required due to a bug in pkg-config file for glib as it
3342 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3343
3344 if test "$static" = yes && test "$mingw32" = yes; then
3345 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3346 fi
3347
3348 if ! test "$gio" = "no"; then
3349 pass=no
3350 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3351 gio_cflags=$($pkg_config --cflags gio-2.0)
3352 gio_libs=$($pkg_config --libs gio-2.0)
3353 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3354 if ! has "$gdbus_codegen"; then
3355 gdbus_codegen=
3356 fi
3357 # Check that the libraries actually work -- Ubuntu 18.04 ships
3358 # with pkg-config --static --libs data for gio-2.0 that is missing
3359 # -lblkid and will give a link error.
3360 cat > $TMPC <<EOF
3361 #include <gio/gio.h>
3362 int main(void)
3363 {
3364 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3365 return 0;
3366 }
3367 EOF
3368 if compile_prog "$gio_cflags" "$gio_libs" ; then
3369 pass=yes
3370 else
3371 pass=no
3372 fi
3373
3374 if test "$pass" = "yes" &&
3375 $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3376 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3377 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3378 fi
3379 fi
3380
3381 if test "$pass" = "no"; then
3382 if test "$gio" = "yes"; then
3383 feature_not_found "gio" "Install libgio >= 2.0"
3384 else
3385 gio=no
3386 fi
3387 else
3388 gio=yes
3389 fi
3390 fi
3391
3392 # Sanity check that the current size_t matches the
3393 # size that glib thinks it should be. This catches
3394 # problems on multi-arch where people try to build
3395 # 32-bit QEMU while pointing at 64-bit glib headers
3396 cat > $TMPC <<EOF
3397 #include <glib.h>
3398 #include <unistd.h>
3399
3400 #define QEMU_BUILD_BUG_ON(x) \
3401 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3402
3403 int main(void) {
3404 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3405 return 0;
3406 }
3407 EOF
3408
3409 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3410 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3411 "You probably need to set PKG_CONFIG_LIBDIR"\
3412 "to point to the right pkg-config files for your"\
3413 "build target"
3414 fi
3415
3416 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3417 cat > $TMPC << EOF
3418 #include <glib.h>
3419 int main(void) { return 0; }
3420 EOF
3421 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3422 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3423 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3424 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3425 fi
3426 fi
3427
3428 # Silence clang warnings triggered by glib < 2.57.2
3429 cat > $TMPC << EOF
3430 #include <glib.h>
3431 typedef struct Foo {
3432 int i;
3433 } Foo;
3434 static void foo_free(Foo *f)
3435 {
3436 g_free(f);
3437 }
3438 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3439 int main(void) { return 0; }
3440 EOF
3441 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3442 if cc_has_warning_flag "-Wno-unused-function"; then
3443 glib_cflags="$glib_cflags -Wno-unused-function"
3444 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
3445 fi
3446 fi
3447
3448 ##########################################
3449 # SHA command probe for modules
3450 if test "$modules" = yes; then
3451 shacmd_probe="sha1sum sha1 shasum"
3452 for c in $shacmd_probe; do
3453 if has $c; then
3454 shacmd="$c"
3455 break
3456 fi
3457 done
3458 if test "$shacmd" = ""; then
3459 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3460 fi
3461 fi
3462
3463 ##########################################
3464 # pthread probe
3465 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3466
3467 pthread=no
3468 cat > $TMPC << EOF
3469 #include <pthread.h>
3470 static void *f(void *p) { return NULL; }
3471 int main(void) {
3472 pthread_t thread;
3473 pthread_create(&thread, 0, f, 0);
3474 return 0;
3475 }
3476 EOF
3477 if compile_prog "" "" ; then
3478 pthread=yes
3479 else
3480 for pthread_lib in $PTHREADLIBS_LIST; do
3481 if compile_prog "" "$pthread_lib" ; then
3482 pthread=yes
3483 break
3484 fi
3485 done
3486 fi
3487
3488 if test "$mingw32" != yes && test "$pthread" = no; then
3489 error_exit "pthread check failed" \
3490 "Make sure to have the pthread libs and headers installed."
3491 fi
3492
3493 # check for pthread_setname_np with thread id
3494 pthread_setname_np_w_tid=no
3495 cat > $TMPC << EOF
3496 #include <pthread.h>
3497
3498 static void *f(void *p) { return NULL; }
3499 int main(void)
3500 {
3501 pthread_t thread;
3502 pthread_create(&thread, 0, f, 0);
3503 pthread_setname_np(thread, "QEMU");
3504 return 0;
3505 }
3506 EOF
3507 if compile_prog "" "$pthread_lib" ; then
3508 pthread_setname_np_w_tid=yes
3509 fi
3510
3511 # check for pthread_setname_np without thread id
3512 pthread_setname_np_wo_tid=no
3513 cat > $TMPC << EOF
3514 #include <pthread.h>
3515
3516 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3517 int main(void)
3518 {
3519 pthread_t thread;
3520 pthread_create(&thread, 0, f, 0);
3521 return 0;
3522 }
3523 EOF
3524 if compile_prog "" "$pthread_lib" ; then
3525 pthread_setname_np_wo_tid=yes
3526 fi
3527
3528 ##########################################
3529 # libssh probe
3530 if test "$libssh" != "no" ; then
3531 if $pkg_config --exists "libssh >= 0.8.7"; then
3532 libssh_cflags=$($pkg_config libssh --cflags)
3533 libssh_libs=$($pkg_config libssh --libs)
3534 libssh=yes
3535 else
3536 if test "$libssh" = "yes" ; then
3537 error_exit "libssh required for --enable-libssh"
3538 fi
3539 libssh=no
3540 fi
3541 fi
3542
3543 ##########################################
3544 # linux-aio probe
3545
3546 if test "$linux_aio" != "no" ; then
3547 cat > $TMPC <<EOF
3548 #include <libaio.h>
3549 #include <sys/eventfd.h>
3550 #include <stddef.h>
3551 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3552 EOF
3553 if compile_prog "" "-laio" ; then
3554 linux_aio=yes
3555 else
3556 if test "$linux_aio" = "yes" ; then
3557 feature_not_found "linux AIO" "Install libaio devel"
3558 fi
3559 linux_aio=no
3560 fi
3561 fi
3562 ##########################################
3563 # linux-io-uring probe
3564
3565 if test "$linux_io_uring" != "no" ; then
3566 if $pkg_config liburing; then
3567 linux_io_uring_cflags=$($pkg_config --cflags liburing)
3568 linux_io_uring_libs=$($pkg_config --libs liburing)
3569 linux_io_uring=yes
3570 else
3571 if test "$linux_io_uring" = "yes" ; then
3572 feature_not_found "linux io_uring" "Install liburing devel"
3573 fi
3574 linux_io_uring=no
3575 fi
3576 fi
3577
3578 ##########################################
3579 # TPM emulation is only on POSIX
3580
3581 if test "$tpm" = ""; then
3582 if test "$mingw32" = "yes"; then
3583 tpm=no
3584 else
3585 tpm=yes
3586 fi
3587 elif test "$tpm" = "yes"; then
3588 if test "$mingw32" = "yes" ; then
3589 error_exit "TPM emulation only available on POSIX systems"
3590 fi
3591 fi
3592
3593 ##########################################
3594 # iovec probe
3595 cat > $TMPC <<EOF
3596 #include <sys/types.h>
3597 #include <sys/uio.h>
3598 #include <unistd.h>
3599 int main(void) { return sizeof(struct iovec); }
3600 EOF
3601 iovec=no
3602 if compile_prog "" "" ; then
3603 iovec=yes
3604 fi
3605
3606 ##########################################
3607 # fdt probe
3608
3609 case "$fdt" in
3610 auto | enabled | internal)
3611 # Simpler to always update submodule, even if not needed.
3612 git_submodules="${git_submodules} dtc"
3613 ;;
3614 esac
3615
3616 ##########################################
3617 # opengl probe (for sdl2, gtk)
3618
3619 gbm="no"
3620 if $pkg_config gbm; then
3621 gbm_cflags="$($pkg_config --cflags gbm)"
3622 gbm_libs="$($pkg_config --libs gbm)"
3623 gbm="yes"
3624 fi
3625
3626 if test "$opengl" != "no" ; then
3627 epoxy=no
3628 if $pkg_config epoxy; then
3629 cat > $TMPC << EOF
3630 #include <epoxy/egl.h>
3631 int main(void) { return 0; }
3632 EOF
3633 if compile_prog "" "" ; then
3634 epoxy=yes
3635 fi
3636 fi
3637
3638 if test "$epoxy" = "yes" ; then
3639 opengl_cflags="$($pkg_config --cflags epoxy)"
3640 opengl_libs="$($pkg_config --libs epoxy)"
3641 opengl=yes
3642 else
3643 if test "$opengl" = "yes" ; then
3644 feature_not_found "opengl" "Please install epoxy with EGL"
3645 fi
3646 opengl_cflags=""
3647 opengl_libs=""
3648 opengl=no
3649 fi
3650 fi
3651
3652 ##########################################
3653 # libxml2 probe
3654 if test "$libxml2" != "no" ; then
3655 if $pkg_config --exists libxml-2.0; then
3656 libxml2="yes"
3657 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3658 libxml2_libs=$($pkg_config --libs libxml-2.0)
3659 else
3660 if test "$libxml2" = "yes"; then
3661 feature_not_found "libxml2" "Install libxml2 devel"
3662 fi
3663 libxml2="no"
3664 fi
3665 fi
3666
3667 # Check for inotify functions when we are building linux-user
3668 # emulator. This is done because older glibc versions don't
3669 # have syscall stubs for these implemented. In that case we
3670 # don't provide them even if kernel supports them.
3671 #
3672 inotify=no
3673 cat > $TMPC << EOF
3674 #include <sys/inotify.h>
3675
3676 int
3677 main(void)
3678 {
3679 /* try to start inotify */
3680 return inotify_init();
3681 }
3682 EOF
3683 if compile_prog "" "" ; then
3684 inotify=yes
3685 fi
3686
3687 inotify1=no
3688 cat > $TMPC << EOF
3689 #include <sys/inotify.h>
3690
3691 int
3692 main(void)
3693 {
3694 /* try to start inotify */
3695 return inotify_init1(0);
3696 }
3697 EOF
3698 if compile_prog "" "" ; then
3699 inotify1=yes
3700 fi
3701
3702 # check if pipe2 is there
3703 pipe2=no
3704 cat > $TMPC << EOF
3705 #include <unistd.h>
3706 #include <fcntl.h>
3707
3708 int main(void)
3709 {
3710 int pipefd[2];
3711 return pipe2(pipefd, O_CLOEXEC);
3712 }
3713 EOF
3714 if compile_prog "" "" ; then
3715 pipe2=yes
3716 fi
3717
3718 # check if accept4 is there
3719 accept4=no
3720 cat > $TMPC << EOF
3721 #include <sys/socket.h>
3722 #include <stddef.h>
3723
3724 int main(void)
3725 {
3726 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3727 return 0;
3728 }
3729 EOF
3730 if compile_prog "" "" ; then
3731 accept4=yes
3732 fi
3733
3734 # check if tee/splice is there. vmsplice was added same time.
3735 splice=no
3736 cat > $TMPC << EOF
3737 #include <unistd.h>
3738 #include <fcntl.h>
3739 #include <limits.h>
3740
3741 int main(void)
3742 {
3743 int len, fd = 0;
3744 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3745 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3746 return 0;
3747 }
3748 EOF
3749 if compile_prog "" "" ; then
3750 splice=yes
3751 fi
3752
3753 ##########################################
3754 # libnuma probe
3755
3756 if test "$numa" != "no" ; then
3757 cat > $TMPC << EOF
3758 #include <numa.h>
3759 int main(void) { return numa_available(); }
3760 EOF
3761
3762 if compile_prog "" "-lnuma" ; then
3763 numa=yes
3764 numa_libs="-lnuma"
3765 else
3766 if test "$numa" = "yes" ; then
3767 feature_not_found "numa" "install numactl devel"
3768 fi
3769 numa=no
3770 fi
3771 fi
3772
3773 malloc=system
3774 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3775 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3776 exit 1
3777 elif test "$tcmalloc" = "yes" ; then
3778 malloc=tcmalloc
3779 elif test "$jemalloc" = "yes" ; then
3780 malloc=jemalloc
3781 fi
3782
3783 ##########################################
3784 # signalfd probe
3785 signalfd="no"
3786 cat > $TMPC << EOF
3787 #include <unistd.h>
3788 #include <sys/syscall.h>
3789 #include <signal.h>
3790 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3791 EOF
3792
3793 if compile_prog "" "" ; then
3794 signalfd=yes
3795 fi
3796
3797 # check if optreset global is declared by <getopt.h>
3798 optreset="no"
3799 cat > $TMPC << EOF
3800 #include <getopt.h>
3801 int main(void) { return optreset; }
3802 EOF
3803
3804 if compile_prog "" "" ; then
3805 optreset=yes
3806 fi
3807
3808 # check if eventfd is supported
3809 eventfd=no
3810 cat > $TMPC << EOF
3811 #include <sys/eventfd.h>
3812
3813 int main(void)
3814 {
3815 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3816 }
3817 EOF
3818 if compile_prog "" "" ; then
3819 eventfd=yes
3820 fi
3821
3822 # check if memfd is supported
3823 memfd=no
3824 cat > $TMPC << EOF
3825 #include <sys/mman.h>
3826
3827 int main(void)
3828 {
3829 return memfd_create("foo", MFD_ALLOW_SEALING);
3830 }
3831 EOF
3832 if compile_prog "" "" ; then
3833 memfd=yes
3834 fi
3835
3836 # check for usbfs
3837 have_usbfs=no
3838 if test "$linux_user" = "yes"; then
3839 cat > $TMPC << EOF
3840 #include <linux/usbdevice_fs.h>
3841
3842 #ifndef USBDEVFS_GET_CAPABILITIES
3843 #error "USBDEVFS_GET_CAPABILITIES undefined"
3844 #endif
3845
3846 #ifndef USBDEVFS_DISCONNECT_CLAIM
3847 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
3848 #endif
3849
3850 int main(void)
3851 {
3852 return 0;
3853 }
3854 EOF
3855 if compile_prog "" ""; then
3856 have_usbfs=yes
3857 fi
3858 fi
3859
3860 # check for fallocate
3861 fallocate=no
3862 cat > $TMPC << EOF
3863 #include <fcntl.h>
3864
3865 int main(void)
3866 {
3867 fallocate(0, 0, 0, 0);
3868 return 0;
3869 }
3870 EOF
3871 if compile_prog "" "" ; then
3872 fallocate=yes
3873 fi
3874
3875 # check for fallocate hole punching
3876 fallocate_punch_hole=no
3877 cat > $TMPC << EOF
3878 #include <fcntl.h>
3879 #include <linux/falloc.h>
3880
3881 int main(void)
3882 {
3883 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3884 return 0;
3885 }
3886 EOF
3887 if compile_prog "" "" ; then
3888 fallocate_punch_hole=yes
3889 fi
3890
3891 # check that fallocate supports range zeroing inside the file
3892 fallocate_zero_range=no
3893 cat > $TMPC << EOF
3894 #include <fcntl.h>
3895 #include <linux/falloc.h>
3896
3897 int main(void)
3898 {
3899 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3900 return 0;
3901 }
3902 EOF
3903 if compile_prog "" "" ; then
3904 fallocate_zero_range=yes
3905 fi
3906
3907 # check for posix_fallocate
3908 posix_fallocate=no
3909 cat > $TMPC << EOF
3910 #include <fcntl.h>
3911
3912 int main(void)
3913 {
3914 posix_fallocate(0, 0, 0);
3915 return 0;
3916 }
3917 EOF
3918 if compile_prog "" "" ; then
3919 posix_fallocate=yes
3920 fi
3921
3922 # check for sync_file_range
3923 sync_file_range=no
3924 cat > $TMPC << EOF
3925 #include <fcntl.h>
3926
3927 int main(void)
3928 {
3929 sync_file_range(0, 0, 0, 0);
3930 return 0;
3931 }
3932 EOF
3933 if compile_prog "" "" ; then
3934 sync_file_range=yes
3935 fi
3936
3937 # check for linux/fiemap.h and FS_IOC_FIEMAP
3938 fiemap=no
3939 cat > $TMPC << EOF
3940 #include <sys/ioctl.h>
3941 #include <linux/fs.h>
3942 #include <linux/fiemap.h>
3943
3944 int main(void)
3945 {
3946 ioctl(0, FS_IOC_FIEMAP, 0);
3947 return 0;
3948 }
3949 EOF
3950 if compile_prog "" "" ; then
3951 fiemap=yes
3952 fi
3953
3954 # check for dup3
3955 dup3=no
3956 cat > $TMPC << EOF
3957 #include <unistd.h>
3958
3959 int main(void)
3960 {
3961 dup3(0, 0, 0);
3962 return 0;
3963 }
3964 EOF
3965 if compile_prog "" "" ; then
3966 dup3=yes
3967 fi
3968
3969 # check for ppoll support
3970 ppoll=no
3971 cat > $TMPC << EOF
3972 #include <poll.h>
3973
3974 int main(void)
3975 {
3976 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3977 ppoll(&pfd, 1, 0, 0);
3978 return 0;
3979 }
3980 EOF
3981 if compile_prog "" "" ; then
3982 ppoll=yes
3983 fi
3984
3985 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3986 prctl_pr_set_timerslack=no
3987 cat > $TMPC << EOF
3988 #include <sys/prctl.h>
3989
3990 int main(void)
3991 {
3992 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3993 return 0;
3994 }
3995 EOF
3996 if compile_prog "" "" ; then
3997 prctl_pr_set_timerslack=yes
3998 fi
3999
4000 # check for epoll support
4001 epoll=no
4002 cat > $TMPC << EOF
4003 #include <sys/epoll.h>
4004
4005 int main(void)
4006 {
4007 epoll_create(0);
4008 return 0;
4009 }
4010 EOF
4011 if compile_prog "" "" ; then
4012 epoll=yes
4013 fi
4014
4015 # epoll_create1 is a later addition
4016 # so we must check separately for its presence
4017 epoll_create1=no
4018 cat > $TMPC << EOF
4019 #include <sys/epoll.h>
4020
4021 int main(void)
4022 {
4023 /* Note that we use epoll_create1 as a value, not as
4024 * a function being called. This is necessary so that on
4025 * old SPARC glibc versions where the function was present in
4026 * the library but not declared in the header file we will
4027 * fail the configure check. (Otherwise we will get a compiler
4028 * warning but not an error, and will proceed to fail the
4029 * qemu compile where we compile with -Werror.)
4030 */
4031 return (int)(uintptr_t)&epoll_create1;
4032 }
4033 EOF
4034 if compile_prog "" "" ; then
4035 epoll_create1=yes
4036 fi
4037
4038 # check for sendfile support
4039 sendfile=no
4040 cat > $TMPC << EOF
4041 #include <sys/sendfile.h>
4042
4043 int main(void)
4044 {
4045 return sendfile(0, 0, 0, 0);
4046 }
4047 EOF
4048 if compile_prog "" "" ; then
4049 sendfile=yes
4050 fi
4051
4052 # check for timerfd support (glibc 2.8 and newer)
4053 timerfd=no
4054 cat > $TMPC << EOF
4055 #include <sys/timerfd.h>
4056
4057 int main(void)
4058 {
4059 return(timerfd_create(CLOCK_REALTIME, 0));
4060 }
4061 EOF
4062 if compile_prog "" "" ; then
4063 timerfd=yes
4064 fi
4065
4066 # check for setns and unshare support
4067 setns=no
4068 cat > $TMPC << EOF
4069 #include <sched.h>
4070
4071 int main(void)
4072 {
4073 int ret;
4074 ret = setns(0, 0);
4075 ret = unshare(0);
4076 return ret;
4077 }
4078 EOF
4079 if compile_prog "" "" ; then
4080 setns=yes
4081 fi
4082
4083 # clock_adjtime probe
4084 clock_adjtime=no
4085 cat > $TMPC <<EOF
4086 #include <time.h>
4087 #include <sys/timex.h>
4088
4089 int main(void)
4090 {
4091 return clock_adjtime(0, 0);
4092 }
4093 EOF
4094 clock_adjtime=no
4095 if compile_prog "" "" ; then
4096 clock_adjtime=yes
4097 fi
4098
4099 # syncfs probe
4100 syncfs=no
4101 cat > $TMPC <<EOF
4102 #include <unistd.h>
4103
4104 int main(void)
4105 {
4106 return syncfs(0);
4107 }
4108 EOF
4109 syncfs=no
4110 if compile_prog "" "" ; then
4111 syncfs=yes
4112 fi
4113
4114 # Search for bswap_32 function
4115 byteswap_h=no
4116 cat > $TMPC << EOF
4117 #include <byteswap.h>
4118 int main(void) { return bswap_32(0); }
4119 EOF
4120 if compile_prog "" "" ; then
4121 byteswap_h=yes
4122 fi
4123
4124 # Search for bswap32 function
4125 bswap_h=no
4126 cat > $TMPC << EOF
4127 #include <sys/endian.h>
4128 #include <sys/types.h>
4129 #include <machine/bswap.h>
4130 int main(void) { return bswap32(0); }
4131 EOF
4132 if compile_prog "" "" ; then
4133 bswap_h=yes
4134 fi
4135
4136 # Check whether we have openpty() in either libc or libutil
4137 cat > $TMPC << EOF
4138 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4139 int main(void) { return openpty(0, 0, 0, 0, 0); }
4140 EOF
4141
4142 have_openpty="no"
4143 if compile_prog "" "" ; then
4144 have_openpty="yes"
4145 else
4146 if compile_prog "" "-lutil" ; then
4147 have_openpty="yes"
4148 fi
4149 fi
4150
4151 ##########################################
4152 # spice probe
4153 if test "$spice_protocol" != "no" ; then
4154 spice_protocol_cflags=$($pkg_config --cflags spice-protocol 2>/dev/null)
4155 if $pkg_config --atleast-version=0.12.3 spice-protocol; then
4156 spice_protocol="yes"
4157 else
4158 if test "$spice_protocol" = "yes" ; then
4159 feature_not_found "spice_protocol" \
4160 "Install spice-protocol(>=0.12.3) devel"
4161 fi
4162 spice_protocol="no"
4163 fi
4164 fi
4165
4166 if test "$spice" != "no" ; then
4167 cat > $TMPC << EOF
4168 #include <spice.h>
4169 int main(void) { spice_server_new(); return 0; }
4170 EOF
4171 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4172 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4173 if $pkg_config --atleast-version=0.12.5 spice-server && \
4174 test "$spice_protocol" = "yes" && \
4175 compile_prog "$spice_cflags" "$spice_libs" ; then
4176 spice="yes"
4177 else
4178 if test "$spice" = "yes" ; then
4179 feature_not_found "spice" \
4180 "Install spice-server(>=0.12.5) devel"
4181 fi
4182 spice="no"
4183 fi
4184 fi
4185
4186 # check for smartcard support
4187 if test "$smartcard" != "no"; then
4188 if $pkg_config --atleast-version=2.5.1 libcacard; then
4189 libcacard_cflags=$($pkg_config --cflags libcacard)
4190 libcacard_libs=$($pkg_config --libs libcacard)
4191 smartcard="yes"
4192 else
4193 if test "$smartcard" = "yes"; then
4194 feature_not_found "smartcard" "Install libcacard devel"
4195 fi
4196 smartcard="no"
4197 fi
4198 fi
4199
4200 # check for libusb
4201 if test "$libusb" != "no" ; then
4202 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4203 libusb="yes"
4204 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4205 libusb_libs=$($pkg_config --libs libusb-1.0)
4206 else
4207 if test "$libusb" = "yes"; then
4208 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4209 fi
4210 libusb="no"
4211 fi
4212 fi
4213
4214 # check for usbredirparser for usb network redirection support
4215 if test "$usb_redir" != "no" ; then
4216 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4217 usb_redir="yes"
4218 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4219 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4220 else
4221 if test "$usb_redir" = "yes"; then
4222 feature_not_found "usb-redir" "Install usbredir devel"
4223 fi
4224 usb_redir="no"
4225 fi
4226 fi
4227
4228 ##########################################
4229 # check if we have VSS SDK headers for win
4230
4231 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4232 test "$vss_win32_sdk" != "no" ; then
4233 case "$vss_win32_sdk" in
4234 "") vss_win32_include="-isystem $source_path" ;;
4235 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4236 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4237 vss_win32_include="-isystem $source_path/.sdk/vss"
4238 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4239 ;;
4240 *) vss_win32_include="-isystem $vss_win32_sdk"
4241 esac
4242 cat > $TMPC << EOF
4243 #define __MIDL_user_allocate_free_DEFINED__
4244 #include <inc/win2003/vss.h>
4245 int main(void) { return VSS_CTX_BACKUP; }
4246 EOF
4247 if compile_prog "$vss_win32_include" "" ; then
4248 guest_agent_with_vss="yes"
4249 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4250 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4251 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4252 else
4253 if test "$vss_win32_sdk" != "" ; then
4254 echo "ERROR: Please download and install Microsoft VSS SDK:"
4255 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4256 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4257 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4258 echo "ERROR: The headers are extracted in the directory \`inc'."
4259 feature_not_found "VSS support"
4260 fi
4261 guest_agent_with_vss="no"
4262 fi
4263 fi
4264
4265 ##########################################
4266 # lookup Windows platform SDK (if not specified)
4267 # The SDK is needed only to build .tlb (type library) file of guest agent
4268 # VSS provider from the source. It is usually unnecessary because the
4269 # pre-compiled .tlb file is included.
4270
4271 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4272 test "$guest_agent_with_vss" = "yes" ; then
4273 if test -z "$win_sdk"; then
4274 programfiles="$PROGRAMFILES"
4275 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4276 if test -n "$programfiles"; then
4277 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4278 else
4279 feature_not_found "Windows SDK"
4280 fi
4281 elif test "$win_sdk" = "no"; then
4282 win_sdk=""
4283 fi
4284 fi
4285
4286 ##########################################
4287 # check if mingw environment provides a recent ntddscsi.h
4288 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4289 cat > $TMPC << EOF
4290 #include <windows.h>
4291 #include <ntddscsi.h>
4292 int main(void) {
4293 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4294 #error Missing required ioctl definitions
4295 #endif
4296 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4297 return addr.Lun;
4298 }
4299 EOF
4300 if compile_prog "" "" ; then
4301 guest_agent_ntddscsi=yes
4302 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4303 fi
4304 fi
4305
4306 ##########################################
4307 # virgl renderer probe
4308
4309 if test "$virglrenderer" != "no" ; then
4310 cat > $TMPC << EOF
4311 #include <virglrenderer.h>
4312 int main(void) { virgl_renderer_poll(); return 0; }
4313 EOF
4314 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4315 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4316 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4317 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4318 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4319 virglrenderer="yes"
4320 else
4321 if test "$virglrenderer" = "yes" ; then
4322 feature_not_found "virglrenderer"
4323 fi
4324 virglrenderer="no"
4325 fi
4326 fi
4327
4328 ##########################################
4329 # capstone
4330
4331 case "$capstone" in
4332 auto | enabled | internal)
4333 # Simpler to always update submodule, even if not needed.
4334 git_submodules="${git_submodules} capstone"
4335 ;;
4336 esac
4337
4338 ##########################################
4339 # check if we have fdatasync
4340
4341 fdatasync=no
4342 cat > $TMPC << EOF
4343 #include <unistd.h>
4344 int main(void) {
4345 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4346 return fdatasync(0);
4347 #else
4348 #error Not supported
4349 #endif
4350 }
4351 EOF
4352 if compile_prog "" "" ; then
4353 fdatasync=yes
4354 fi
4355
4356 ##########################################
4357 # check if we have madvise
4358
4359 madvise=no
4360 cat > $TMPC << EOF
4361 #include <sys/types.h>
4362 #include <sys/mman.h>
4363 #include <stddef.h>
4364 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4365 EOF
4366 if compile_prog "" "" ; then
4367 madvise=yes
4368 fi
4369
4370 ##########################################
4371 # check if we have posix_madvise
4372
4373 posix_madvise=no
4374 cat > $TMPC << EOF
4375 #include <sys/mman.h>
4376 #include <stddef.h>
4377 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4378 EOF
4379 if compile_prog "" "" ; then
4380 posix_madvise=yes
4381 fi
4382
4383 ##########################################
4384 # check if we have posix_memalign()
4385
4386 posix_memalign=no
4387 cat > $TMPC << EOF
4388 #include <stdlib.h>
4389 int main(void) {
4390 void *p;
4391 return posix_memalign(&p, 8, 8);
4392 }
4393 EOF
4394 if compile_prog "" "" ; then
4395 posix_memalign=yes
4396 fi
4397
4398 ##########################################
4399 # check if we have posix_syslog
4400
4401 posix_syslog=no
4402 cat > $TMPC << EOF
4403 #include <syslog.h>
4404 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4405 EOF
4406 if compile_prog "" "" ; then
4407 posix_syslog=yes
4408 fi
4409
4410 ##########################################
4411 # check if we have sem_timedwait
4412
4413 sem_timedwait=no
4414 cat > $TMPC << EOF
4415 #include <semaphore.h>
4416 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4417 EOF
4418 if compile_prog "" "" ; then
4419 sem_timedwait=yes
4420 fi
4421
4422 ##########################################
4423 # check if we have strchrnul
4424
4425 strchrnul=no
4426 cat > $TMPC << EOF
4427 #include <string.h>
4428 int main(void);
4429 // Use a haystack that the compiler shouldn't be able to constant fold
4430 char *haystack = (char*)&main;
4431 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4432 EOF
4433 if compile_prog "" "" ; then
4434 strchrnul=yes
4435 fi
4436
4437 #########################################
4438 # check if we have st_atim
4439
4440 st_atim=no
4441 cat > $TMPC << EOF
4442 #include <sys/stat.h>
4443 #include <stddef.h>
4444 int main(void) { return offsetof(struct stat, st_atim); }
4445 EOF
4446 if compile_prog "" "" ; then
4447 st_atim=yes
4448 fi
4449
4450 ##########################################
4451 # check if trace backend exists
4452
4453 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4454 if test "$?" -ne 0 ; then
4455 error_exit "invalid trace backends" \
4456 "Please choose supported trace backends."
4457 fi
4458
4459 ##########################################
4460 # For 'ust' backend, test if ust headers are present
4461 if have_backend "ust"; then
4462 cat > $TMPC << EOF
4463 #include <lttng/tracepoint.h>
4464 int main(void) { return 0; }
4465 EOF
4466 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4467 if $pkg_config lttng-ust --exists; then
4468 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4469 else
4470 lttng_ust_libs="-llttng-ust -ldl"
4471 fi
4472 if $pkg_config liburcu-bp --exists; then
4473 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4474 else
4475 urcu_bp_libs="-lurcu-bp"
4476 fi
4477 else
4478 error_exit "Trace backend 'ust' missing lttng-ust header files"
4479 fi
4480 fi
4481
4482 ##########################################
4483 # For 'dtrace' backend, test if 'dtrace' command is present
4484 if have_backend "dtrace"; then
4485 if ! has 'dtrace' ; then
4486 error_exit "dtrace command is not found in PATH $PATH"
4487 fi
4488 trace_backend_stap="no"
4489 if has 'stap' ; then
4490 trace_backend_stap="yes"
4491
4492 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
4493 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
4494 # instead. QEMU --enable-modules depends on this because the SystemTap
4495 # semaphores are linked into the main binary and not the module's shared
4496 # object.
4497 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
4498 fi
4499 fi
4500
4501 ##########################################
4502 # check and set a backend for coroutine
4503
4504 # We prefer ucontext, but it's not always possible. The fallback
4505 # is sigcontext. On Windows the only valid backend is the Windows
4506 # specific one.
4507
4508 ucontext_works=no
4509 if test "$darwin" != "yes"; then
4510 cat > $TMPC << EOF
4511 #include <ucontext.h>
4512 #ifdef __stub_makecontext
4513 #error Ignoring glibc stub makecontext which will always fail
4514 #endif
4515 int main(void) { makecontext(0, 0, 0); return 0; }
4516 EOF
4517 if compile_prog "" "" ; then
4518 ucontext_works=yes
4519 fi
4520 fi
4521
4522 if test "$coroutine" = ""; then
4523 if test "$mingw32" = "yes"; then
4524 coroutine=win32
4525 elif test "$ucontext_works" = "yes"; then
4526 coroutine=ucontext
4527 else
4528 coroutine=sigaltstack
4529 fi
4530 else
4531 case $coroutine in
4532 windows)
4533 if test "$mingw32" != "yes"; then
4534 error_exit "'windows' coroutine backend only valid for Windows"
4535 fi
4536 # Unfortunately the user visible backend name doesn't match the
4537 # coroutine-*.c filename for this case, so we have to adjust it here.
4538 coroutine=win32
4539 ;;
4540 ucontext)
4541 if test "$ucontext_works" != "yes"; then
4542 feature_not_found "ucontext"
4543 fi
4544 ;;
4545 sigaltstack)
4546 if test "$mingw32" = "yes"; then
4547 error_exit "only the 'windows' coroutine backend is valid for Windows"
4548 fi
4549 ;;
4550 *)
4551 error_exit "unknown coroutine backend $coroutine"
4552 ;;
4553 esac
4554 fi
4555
4556 if test "$coroutine_pool" = ""; then
4557 coroutine_pool=yes
4558 fi
4559
4560 if test "$debug_stack_usage" = "yes"; then
4561 if test "$coroutine_pool" = "yes"; then
4562 echo "WARN: disabling coroutine pool for stack usage debugging"
4563 coroutine_pool=no
4564 fi
4565 fi
4566
4567 ##################################################
4568 # SafeStack
4569
4570
4571 if test "$safe_stack" = "yes"; then
4572 cat > $TMPC << EOF
4573 int main(int argc, char *argv[])
4574 {
4575 #if ! __has_feature(safe_stack)
4576 #error SafeStack Disabled
4577 #endif
4578 return 0;
4579 }
4580 EOF
4581 flag="-fsanitize=safe-stack"
4582 # Check that safe-stack is supported and enabled.
4583 if compile_prog "-Werror $flag" "$flag"; then
4584 # Flag needed both at compilation and at linking
4585 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4586 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4587 else
4588 error_exit "SafeStack not supported by your compiler"
4589 fi
4590 if test "$coroutine" != "ucontext"; then
4591 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4592 fi
4593 else
4594 cat > $TMPC << EOF
4595 int main(int argc, char *argv[])
4596 {
4597 #if defined(__has_feature)
4598 #if __has_feature(safe_stack)
4599 #error SafeStack Enabled
4600 #endif
4601 #endif
4602 return 0;
4603 }
4604 EOF
4605 if test "$safe_stack" = "no"; then
4606 # Make sure that safe-stack is disabled
4607 if ! compile_prog "-Werror" ""; then
4608 # SafeStack was already enabled, try to explicitly remove the feature
4609 flag="-fno-sanitize=safe-stack"
4610 if ! compile_prog "-Werror $flag" "$flag"; then
4611 error_exit "Configure cannot disable SafeStack"
4612 fi
4613 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4614 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4615 fi
4616 else # "$safe_stack" = ""
4617 # Set safe_stack to yes or no based on pre-existing flags
4618 if compile_prog "-Werror" ""; then
4619 safe_stack="no"
4620 else
4621 safe_stack="yes"
4622 if test "$coroutine" != "ucontext"; then
4623 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4624 fi
4625 fi
4626 fi
4627 fi
4628
4629 ##########################################
4630 # check if we have open_by_handle_at
4631
4632 open_by_handle_at=no
4633 cat > $TMPC << EOF
4634 #include <fcntl.h>
4635 #if !defined(AT_EMPTY_PATH)
4636 # error missing definition
4637 #else
4638 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4639 #endif
4640 EOF
4641 if compile_prog "" "" ; then
4642 open_by_handle_at=yes
4643 fi
4644
4645 ########################################
4646 # check if we have linux/magic.h
4647
4648 linux_magic_h=no
4649 cat > $TMPC << EOF
4650 #include <linux/magic.h>
4651 int main(void) {
4652 return 0;
4653 }
4654 EOF
4655 if compile_prog "" "" ; then
4656 linux_magic_h=yes
4657 fi
4658
4659 ########################################
4660 # check if we have valgrind/valgrind.h
4661
4662 valgrind_h=no
4663 cat > $TMPC << EOF
4664 #include <valgrind/valgrind.h>
4665 int main(void) {
4666 return 0;
4667 }
4668 EOF
4669 if compile_prog "" "" ; then
4670 valgrind_h=yes
4671 fi
4672
4673 ########################################
4674 # check if environ is declared
4675
4676 has_environ=no
4677 cat > $TMPC << EOF
4678 #include <unistd.h>
4679 int main(void) {
4680 environ = 0;
4681 return 0;
4682 }
4683 EOF
4684 if compile_prog "" "" ; then
4685 has_environ=yes
4686 fi
4687
4688 ########################################
4689 # check if cpuid.h is usable.
4690
4691 cat > $TMPC << EOF
4692 #include <cpuid.h>
4693 int main(void) {
4694 unsigned a, b, c, d;
4695 int max = __get_cpuid_max(0, 0);
4696
4697 if (max >= 1) {
4698 __cpuid(1, a, b, c, d);
4699 }
4700
4701 if (max >= 7) {
4702 __cpuid_count(7, 0, a, b, c, d);
4703 }
4704
4705 return 0;
4706 }
4707 EOF
4708 if compile_prog "" "" ; then
4709 cpuid_h=yes
4710 fi
4711
4712 ##########################################
4713 # avx2 optimization requirement check
4714 #
4715 # There is no point enabling this if cpuid.h is not usable,
4716 # since we won't be able to select the new routines.
4717
4718 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
4719 cat > $TMPC << EOF
4720 #pragma GCC push_options
4721 #pragma GCC target("avx2")
4722 #include <cpuid.h>
4723 #include <immintrin.h>
4724 static int bar(void *a) {
4725 __m256i x = *(__m256i *)a;
4726 return _mm256_testz_si256(x, x);
4727 }
4728 int main(int argc, char *argv[]) { return bar(argv[0]); }
4729 EOF
4730 if compile_object "" ; then
4731 avx2_opt="yes"
4732 else
4733 avx2_opt="no"
4734 fi
4735 fi
4736
4737 ##########################################
4738 # avx512f optimization requirement check
4739 #
4740 # There is no point enabling this if cpuid.h is not usable,
4741 # since we won't be able to select the new routines.
4742 # by default, it is turned off.
4743 # if user explicitly want to enable it, check environment
4744
4745 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
4746 cat > $TMPC << EOF
4747 #pragma GCC push_options
4748 #pragma GCC target("avx512f")
4749 #include <cpuid.h>
4750 #include <immintrin.h>
4751 static int bar(void *a) {
4752 __m512i x = *(__m512i *)a;
4753 return _mm512_test_epi64_mask(x, x);
4754 }
4755 int main(int argc, char *argv[])
4756 {
4757 return bar(argv[0]);
4758 }
4759 EOF
4760 if ! compile_object "" ; then
4761 avx512f_opt="no"
4762 fi
4763 else
4764 avx512f_opt="no"
4765 fi
4766
4767 ########################################
4768 # check if __[u]int128_t is usable.
4769
4770 int128=no
4771 cat > $TMPC << EOF
4772 __int128_t a;
4773 __uint128_t b;
4774 int main (void) {
4775 a = a + b;
4776 b = a * b;
4777 a = a * a;
4778 return 0;
4779 }
4780 EOF
4781 if compile_prog "" "" ; then
4782 int128=yes
4783 fi
4784
4785 #########################################
4786 # See if 128-bit atomic operations are supported.
4787
4788 atomic128=no
4789 if test "$int128" = "yes"; then
4790 cat > $TMPC << EOF
4791 int main(void)
4792 {
4793 unsigned __int128 x = 0, y = 0;
4794 y = __atomic_load(&x, 0);
4795 __atomic_store(&x, y, 0);
4796 __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
4797 return 0;
4798 }
4799 EOF
4800 if compile_prog "" "" ; then
4801 atomic128=yes
4802 fi
4803 fi
4804
4805 cmpxchg128=no
4806 if test "$int128" = yes && test "$atomic128" = no; then
4807 cat > $TMPC << EOF
4808 int main(void)
4809 {
4810 unsigned __int128 x = 0, y = 0;
4811 __sync_val_compare_and_swap_16(&x, y, x);
4812 return 0;
4813 }
4814 EOF
4815 if compile_prog "" "" ; then
4816 cmpxchg128=yes
4817 fi
4818 fi
4819
4820 #########################################
4821 # See if 64-bit atomic operations are supported.
4822 # Note that without __atomic builtins, we can only
4823 # assume atomic loads/stores max at pointer size.
4824
4825 cat > $TMPC << EOF
4826 #include <stdint.h>
4827 int main(void)
4828 {
4829 uint64_t x = 0, y = 0;
4830 #ifdef __ATOMIC_RELAXED
4831 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
4832 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
4833 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
4834 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
4835 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
4836 #else
4837 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4838 __sync_lock_test_and_set(&x, y);
4839 __sync_val_compare_and_swap(&x, y, 0);
4840 __sync_fetch_and_add(&x, y);
4841 #endif
4842 return 0;
4843 }
4844 EOF
4845 if compile_prog "" "" ; then
4846 atomic64=yes
4847 fi
4848
4849 #########################################
4850 # See if --dynamic-list is supported by the linker
4851 ld_dynamic_list="no"
4852 if test "$static" = "no" ; then
4853 cat > $TMPTXT <<EOF
4854 {
4855 foo;
4856 };
4857 EOF
4858
4859 cat > $TMPC <<EOF
4860 #include <stdio.h>
4861 void foo(void);
4862
4863 void foo(void)
4864 {
4865 printf("foo\n");
4866 }
4867
4868 int main(void)
4869 {
4870 foo();
4871 return 0;
4872 }
4873 EOF
4874
4875 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
4876 ld_dynamic_list="yes"
4877 fi
4878 fi
4879
4880 #########################################
4881 # See if -exported_symbols_list is supported by the linker
4882
4883 ld_exported_symbols_list="no"
4884 if test "$static" = "no" ; then
4885 cat > $TMPTXT <<EOF
4886 _foo
4887 EOF
4888
4889 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
4890 ld_exported_symbols_list="yes"
4891 fi
4892 fi
4893
4894 if test "$plugins" = "yes" &&
4895 test "$ld_dynamic_list" = "no" &&
4896 test "$ld_exported_symbols_list" = "no" ; then
4897 error_exit \
4898 "Plugin support requires dynamic linking and specifying a set of symbols " \
4899 "that are exported to plugins. Unfortunately your linker doesn't " \
4900 "support the flag (--dynamic-list or -exported_symbols_list) used " \
4901 "for this purpose. You can't build with --static."
4902 fi
4903
4904 ########################################
4905 # check if getauxval is available.
4906
4907 getauxval=no
4908 cat > $TMPC << EOF
4909 #include <sys/auxv.h>
4910 int main(void) {
4911 return getauxval(AT_HWCAP) == 0;
4912 }
4913 EOF
4914 if compile_prog "" "" ; then
4915 getauxval=yes
4916 fi
4917
4918 ########################################
4919 # check if ccache is interfering with
4920 # semantic analysis of macros
4921
4922 unset CCACHE_CPP2
4923 ccache_cpp2=no
4924 cat > $TMPC << EOF
4925 static const int Z = 1;
4926 #define fn() ({ Z; })
4927 #define TAUT(X) ((X) == Z)
4928 #define PAREN(X, Y) (X == Y)
4929 #define ID(X) (X)
4930 int main(int argc, char *argv[])
4931 {
4932 int x = 0, y = 0;
4933 x = ID(x);
4934 x = fn();
4935 fn();
4936 if (PAREN(x, y)) return 0;
4937 if (TAUT(Z)) return 0;
4938 return 0;
4939 }
4940 EOF
4941
4942 if ! compile_object "-Werror"; then
4943 ccache_cpp2=yes
4944 fi
4945
4946 #################################################
4947 # clang does not support glibc + FORTIFY_SOURCE.
4948
4949 if test "$fortify_source" != "no"; then
4950 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4951 fortify_source="no";
4952 elif test -n "$cxx" && has $cxx &&
4953 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4954 fortify_source="no";
4955 else
4956 fortify_source="yes"
4957 fi
4958 fi
4959
4960 ###############################################
4961 # Check if copy_file_range is provided by glibc
4962 have_copy_file_range=no
4963 cat > $TMPC << EOF
4964 #include <unistd.h>
4965 int main(void) {
4966 copy_file_range(0, NULL, 0, NULL, 0, 0);
4967 return 0;
4968 }
4969 EOF
4970 if compile_prog "" "" ; then
4971 have_copy_file_range=yes
4972 fi
4973
4974 ##########################################
4975 # check if struct fsxattr is available via linux/fs.h
4976
4977 have_fsxattr=no
4978 cat > $TMPC << EOF
4979 #include <linux/fs.h>
4980 struct fsxattr foo;
4981 int main(void) {
4982 return 0;
4983 }
4984 EOF
4985 if compile_prog "" "" ; then
4986 have_fsxattr=yes
4987 fi
4988
4989 ##########################################
4990 # check for usable membarrier system call
4991 if test "$membarrier" = "yes"; then
4992 have_membarrier=no
4993 if test "$mingw32" = "yes" ; then
4994 have_membarrier=yes
4995 elif test "$linux" = "yes" ; then
4996 cat > $TMPC << EOF
4997 #include <linux/membarrier.h>
4998 #include <sys/syscall.h>
4999 #include <unistd.h>
5000 #include <stdlib.h>
5001 int main(void) {
5002 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5003 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5004 exit(0);
5005 }
5006 EOF
5007 if compile_prog "" "" ; then
5008 have_membarrier=yes
5009 fi
5010 fi
5011 if test "$have_membarrier" = "no"; then
5012 feature_not_found "membarrier" "membarrier system call not available"
5013 fi
5014 else
5015 # Do not enable it by default even for Mingw32, because it doesn't
5016 # work on Wine.
5017 membarrier=no
5018 fi
5019
5020 ##########################################
5021 # check if rtnetlink.h exists and is useful
5022 have_rtnetlink=no
5023 cat > $TMPC << EOF
5024 #include <linux/rtnetlink.h>
5025 int main(void) {
5026 return IFLA_PROTO_DOWN;
5027 }
5028 EOF
5029 if compile_prog "" "" ; then
5030 have_rtnetlink=yes
5031 fi
5032
5033 ##########################################
5034 # check for usable AF_VSOCK environment
5035 have_af_vsock=no
5036 cat > $TMPC << EOF
5037 #include <errno.h>
5038 #include <sys/types.h>
5039 #include <sys/socket.h>
5040 #if !defined(AF_VSOCK)
5041 # error missing AF_VSOCK flag
5042 #endif
5043 #include <linux/vm_sockets.h>
5044 int main(void) {
5045 int sock, ret;
5046 struct sockaddr_vm svm;
5047 socklen_t len = sizeof(svm);
5048 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5049 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5050 if ((ret == -1) && (errno == ENOTCONN)) {
5051 return 0;
5052 }
5053 return -1;
5054 }
5055 EOF
5056 if compile_prog "" "" ; then
5057 have_af_vsock=yes
5058 fi
5059
5060 ##########################################
5061 # check for usable AF_ALG environment
5062 have_afalg=no
5063 cat > $TMPC << EOF
5064 #include <errno.h>
5065 #include <sys/types.h>
5066 #include <sys/socket.h>
5067 #include <linux/if_alg.h>
5068 int main(void) {
5069 int sock;
5070 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5071 return sock;
5072 }
5073 EOF
5074 if compile_prog "" "" ; then
5075 have_afalg=yes
5076 fi
5077 if test "$crypto_afalg" = "yes"
5078 then
5079 if test "$have_afalg" != "yes"
5080 then
5081 error_exit "AF_ALG requested but could not be detected"
5082 fi
5083 fi
5084
5085
5086 #################################################
5087 # check for sysmacros.h
5088
5089 have_sysmacros=no
5090 cat > $TMPC << EOF
5091 #include <sys/sysmacros.h>
5092 int main(void) {
5093 return makedev(0, 0);
5094 }
5095 EOF
5096 if compile_prog "" "" ; then
5097 have_sysmacros=yes
5098 fi
5099
5100 ##########################################
5101 # check for _Static_assert()
5102
5103 have_static_assert=no
5104 cat > $TMPC << EOF
5105 _Static_assert(1, "success");
5106 int main(void) {
5107 return 0;
5108 }
5109 EOF
5110 if compile_prog "" "" ; then
5111 have_static_assert=yes
5112 fi
5113
5114 ##########################################
5115 # check for utmpx.h, it is missing e.g. on OpenBSD
5116
5117 have_utmpx=no
5118 cat > $TMPC << EOF
5119 #include <utmpx.h>
5120 struct utmpx user_info;
5121 int main(void) {
5122 return 0;
5123 }
5124 EOF
5125 if compile_prog "" "" ; then
5126 have_utmpx=yes
5127 fi
5128
5129 ##########################################
5130 # check for getrandom()
5131
5132 have_getrandom=no
5133 cat > $TMPC << EOF
5134 #include <sys/random.h>
5135 int main(void) {
5136 return getrandom(0, 0, GRND_NONBLOCK);
5137 }
5138 EOF
5139 if compile_prog "" "" ; then
5140 have_getrandom=yes
5141 fi
5142
5143 ##########################################
5144 # checks for sanitizers
5145
5146 have_asan=no
5147 have_ubsan=no
5148 have_asan_iface_h=no
5149 have_asan_iface_fiber=no
5150
5151 if test "$sanitizers" = "yes" ; then
5152 write_c_skeleton
5153 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5154 have_asan=yes
5155 fi
5156
5157 # we could use a simple skeleton for flags checks, but this also
5158 # detect the static linking issue of ubsan, see also:
5159 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5160 cat > $TMPC << EOF
5161 #include <stdlib.h>
5162 int main(void) {
5163 void *tmp = malloc(10);
5164 if (tmp != NULL) {
5165 return *(int *)(tmp + 2);
5166 }
5167 return 1;
5168 }
5169 EOF
5170 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5171 have_ubsan=yes
5172 fi
5173
5174 if check_include "sanitizer/asan_interface.h" ; then
5175 have_asan_iface_h=yes
5176 fi
5177
5178 cat > $TMPC << EOF
5179 #include <sanitizer/asan_interface.h>
5180 int main(void) {
5181 __sanitizer_start_switch_fiber(0, 0, 0);
5182 return 0;
5183 }
5184 EOF
5185 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5186 have_asan_iface_fiber=yes
5187 fi
5188 fi
5189
5190 ##########################################
5191 # checks for fuzzer
5192 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5193 write_c_fuzzer_skeleton
5194 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5195 have_fuzzer=yes
5196 else
5197 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
5198 exit 1
5199 fi
5200 fi
5201
5202 # Thread sanitizer is, for now, much noisier than the other sanitizers;
5203 # keep it separate until that is not the case.
5204 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
5205 error_exit "TSAN is not supported with other sanitiziers."
5206 fi
5207 have_tsan=no
5208 have_tsan_iface_fiber=no
5209 if test "$tsan" = "yes" ; then
5210 write_c_skeleton
5211 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5212 have_tsan=yes
5213 fi
5214 cat > $TMPC << EOF
5215 #include <sanitizer/tsan_interface.h>
5216 int main(void) {
5217 __tsan_create_fiber(0);
5218 return 0;
5219 }
5220 EOF
5221 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5222 have_tsan_iface_fiber=yes
5223 fi
5224 fi
5225
5226 ##########################################
5227 # check for libpmem
5228
5229 if test "$libpmem" != "no"; then
5230 if $pkg_config --exists "libpmem"; then
5231 libpmem="yes"
5232 libpmem_libs=$($pkg_config --libs libpmem)
5233 libpmem_cflags=$($pkg_config --cflags libpmem)
5234 else
5235 if test "$libpmem" = "yes" ; then
5236 feature_not_found "libpmem" "Install nvml or pmdk"
5237 fi
5238 libpmem="no"
5239 fi
5240 fi
5241
5242 ##########################################
5243 # check for libdaxctl
5244
5245 if test "$libdaxctl" != "no"; then
5246 if $pkg_config --atleast-version=57 "libdaxctl"; then
5247 libdaxctl="yes"
5248 libdaxctl_libs=$($pkg_config --libs libdaxctl)
5249 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
5250 else
5251 if test "$libdaxctl" = "yes" ; then
5252 feature_not_found "libdaxctl" "Install libdaxctl"
5253 fi
5254 libdaxctl="no"
5255 fi
5256 fi
5257
5258 ##########################################
5259 # check for slirp
5260
5261 case "$slirp" in
5262 auto | enabled | internal)
5263 # Simpler to always update submodule, even if not needed.
5264 git_submodules="${git_submodules} slirp"
5265 ;;
5266 esac
5267
5268 # Check for slirp smbd dupport
5269 : ${smbd=${SMBD-/usr/sbin/smbd}}
5270 if test "$slirp_smbd" != "no" ; then
5271 if test "$mingw32" = "yes" ; then
5272 if test "$slirp_smbd" = "yes" ; then
5273 error_exit "Host smbd not supported on this platform."
5274 fi
5275 slirp_smbd=no
5276 else
5277 slirp_smbd=yes
5278 fi
5279 fi
5280
5281 ##########################################
5282 # check for usable __NR_keyctl syscall
5283
5284 if test "$linux" = "yes" ; then
5285
5286 have_keyring=no
5287 cat > $TMPC << EOF
5288 #include <errno.h>
5289 #include <asm/unistd.h>
5290 #include <linux/keyctl.h>
5291 #include <unistd.h>
5292 int main(void) {
5293 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
5294 }
5295 EOF
5296 if compile_prog "" "" ; then
5297 have_keyring=yes
5298 fi
5299 fi
5300 if test "$secret_keyring" != "no"
5301 then
5302 if test "$have_keyring" = "yes"
5303 then
5304 secret_keyring=yes
5305 else
5306 if test "$secret_keyring" = "yes"
5307 then
5308 error_exit "syscall __NR_keyctl requested, \
5309 but not implemented on your system"
5310 else
5311 secret_keyring=no
5312 fi
5313 fi
5314 fi
5315
5316 ##########################################
5317 # End of CC checks
5318 # After here, no more $cc or $ld runs
5319
5320 write_c_skeleton
5321
5322 if test "$gcov" = "yes" ; then
5323 :
5324 elif test "$fortify_source" = "yes" ; then
5325 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5326 debug=no
5327 fi
5328
5329 case "$ARCH" in
5330 alpha)
5331 # Ensure there's only a single GP
5332 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5333 ;;
5334 esac
5335
5336 if test "$gprof" = "yes" ; then
5337 QEMU_CFLAGS="-p $QEMU_CFLAGS"
5338 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5339 fi
5340
5341 if test "$have_asan" = "yes"; then
5342 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5343 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
5344 if test "$have_asan_iface_h" = "no" ; then
5345 echo "ASAN build enabled, but ASAN header missing." \
5346 "Without code annotation, the report may be inferior."
5347 elif test "$have_asan_iface_fiber" = "no" ; then
5348 echo "ASAN build enabled, but ASAN header is too old." \
5349 "Without code annotation, the report may be inferior."
5350 fi
5351 fi
5352 if test "$have_tsan" = "yes" ; then
5353 if test "$have_tsan_iface_fiber" = "yes" ; then
5354 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
5355 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
5356 else
5357 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
5358 fi
5359 elif test "$tsan" = "yes" ; then
5360 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
5361 fi
5362 if test "$have_ubsan" = "yes"; then
5363 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
5364 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
5365 fi
5366
5367 ##########################################
5368
5369 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
5370 if test "$solaris" = "no" && test "$tsan" = "no"; then
5371 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5372 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
5373 fi
5374 fi
5375
5376 # Use ASLR, no-SEH and DEP if available
5377 if test "$mingw32" = "yes" ; then
5378 flags="--no-seh --nxcompat"
5379
5380 # Disable ASLR for debug builds to allow debugging with gdb
5381 if test "$debug" = "no" ; then
5382 flags="--dynamicbase $flags"
5383 fi
5384
5385 for flag in $flags; do
5386 if ld_has $flag ; then
5387 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
5388 fi
5389 done
5390 fi
5391
5392 # We can only support ivshmem if we have eventfd
5393 if [ "$eventfd" = "yes" ]; then
5394 ivshmem=yes
5395 fi
5396
5397 # Probe for guest agent support/options
5398
5399 if [ "$guest_agent" != "no" ]; then
5400 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
5401 guest_agent=no
5402 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5403 guest_agent=yes
5404 elif [ "$guest_agent" != yes ]; then
5405 guest_agent=no
5406 else
5407 error_exit "Guest agent is not supported on this platform"
5408 fi
5409 fi
5410
5411 # Guest agent Windows MSI package
5412
5413 if test "$QEMU_GA_MANUFACTURER" = ""; then
5414 QEMU_GA_MANUFACTURER=QEMU
5415 fi
5416 if test "$QEMU_GA_DISTRO" = ""; then
5417 QEMU_GA_DISTRO=Linux
5418 fi
5419 if test "$QEMU_GA_VERSION" = ""; then
5420 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5421 fi
5422
5423 QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
5424
5425 # Mac OS X ships with a broken assembler
5426 roms=
5427 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5428 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5429 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
5430 # Different host OS linkers have different ideas about the name of the ELF
5431 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5432 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5433 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5434 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5435 ld_i386_emulation="$emu"
5436 roms="optionrom"
5437 break
5438 fi
5439 done
5440 fi
5441
5442 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5443 # or -march=z10 (which is the lowest architecture level that Clang supports)
5444 if test "$cpu" = "s390x" ; then
5445 write_c_skeleton
5446 compile_prog "-march=z900" ""
5447 has_z900=$?
5448 if [ $has_z900 = 0 ] || compile_prog "-march=z10" ""; then
5449 if [ $has_z900 != 0 ]; then
5450 echo "WARNING: Your compiler does not support the z900!"
5451 echo " The s390-ccw bios will only work with guest CPUs >= z10."
5452 fi
5453 roms="$roms s390-ccw"
5454 # SLOF is required for building the s390-ccw firmware on s390x,
5455 # since it is using the libnet code from SLOF for network booting.
5456 git_submodules="${git_submodules} roms/SLOF"
5457 fi
5458 fi
5459
5460 # Check that the C++ compiler exists and works with the C compiler.
5461 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5462 if has $cxx; then
5463 cat > $TMPC <<EOF
5464 int c_function(void);
5465 int main(void) { return c_function(); }
5466 EOF
5467
5468 compile_object
5469
5470 cat > $TMPCXX <<EOF
5471 extern "C" {
5472 int c_function(void);
5473 }
5474 int c_function(void) { return 42; }
5475 EOF
5476
5477 update_cxxflags
5478
5479 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
5480 # C++ compiler $cxx works ok with C compiler $cc
5481 :
5482 else
5483 echo "C++ compiler $cxx does not work with C compiler $cc"
5484 echo "Disabling C++ specific optional code"
5485 cxx=
5486 fi
5487 else
5488 echo "No C++ compiler available; disabling C++ specific optional code"
5489 cxx=
5490 fi
5491
5492 if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
5493 exit 1
5494 fi
5495
5496 config_host_mak="config-host.mak"
5497
5498 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5499 echo >> $config_host_mak
5500
5501 echo all: >> $config_host_mak
5502 echo "GIT=$git" >> $config_host_mak
5503 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5504 echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
5505
5506 echo "ARCH=$ARCH" >> $config_host_mak
5507
5508 if test "$debug_tcg" = "yes" ; then
5509 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5510 fi
5511 if test "$strip_opt" = "yes" ; then
5512 echo "STRIP=${strip}" >> $config_host_mak
5513 fi
5514 if test "$bigendian" = "yes" ; then
5515 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5516 fi
5517 if test "$mingw32" = "yes" ; then
5518 echo "CONFIG_WIN32=y" >> $config_host_mak
5519 if test "$guest_agent_with_vss" = "yes" ; then
5520 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5521 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5522 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5523 fi
5524 if test "$guest_agent_ntddscsi" = "yes" ; then
5525 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
5526 fi
5527 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5528 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5529 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5530 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5531 else
5532 echo "CONFIG_POSIX=y" >> $config_host_mak
5533 fi
5534
5535 if test "$linux" = "yes" ; then
5536 echo "CONFIG_LINUX=y" >> $config_host_mak
5537 fi
5538
5539 if test "$darwin" = "yes" ; then
5540 echo "CONFIG_DARWIN=y" >> $config_host_mak
5541 fi
5542
5543 if test "$solaris" = "yes" ; then
5544 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5545 fi
5546 if test "$haiku" = "yes" ; then
5547 echo "CONFIG_HAIKU=y" >> $config_host_mak
5548 fi
5549 if test "$static" = "yes" ; then
5550 echo "CONFIG_STATIC=y" >> $config_host_mak
5551 fi
5552 if test "$profiler" = "yes" ; then
5553 echo "CONFIG_PROFILER=y" >> $config_host_mak
5554 fi
5555 if test "$want_tools" = "yes" ; then
5556 echo "CONFIG_TOOLS=y" >> $config_host_mak
5557 fi
5558 if test "$guest_agent" = "yes" ; then
5559 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
5560 fi
5561 if test "$slirp_smbd" = "yes" ; then
5562 echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
5563 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5564 fi
5565 if test "$vde" = "yes" ; then
5566 echo "CONFIG_VDE=y" >> $config_host_mak
5567 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5568 fi
5569 if test "$netmap" = "yes" ; then
5570 echo "CONFIG_NETMAP=y" >> $config_host_mak
5571 fi
5572 if test "$l2tpv3" = "yes" ; then
5573 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5574 fi
5575 if test "$gprof" = "yes" ; then
5576 echo "CONFIG_GPROF=y" >> $config_host_mak
5577 fi
5578 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5579 for drv in $audio_drv_list; do
5580 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5581 echo "$def=y" >> $config_host_mak
5582 done
5583 if test "$alsa" = "yes" ; then
5584 echo "CONFIG_ALSA=y" >> $config_host_mak
5585 fi
5586 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5587 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
5588 if test "$libpulse" = "yes" ; then
5589 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
5590 fi
5591 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5592 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
5593 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5594 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5595 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5596 if test "$libjack" = "yes" ; then
5597 echo "CONFIG_LIBJACK=y" >> $config_host_mak
5598 fi
5599 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
5600 if test "$audio_win_int" = "yes" ; then
5601 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5602 fi
5603 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5604 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5605 if test "$xfs" = "yes" ; then
5606 echo "CONFIG_XFS=y" >> $config_host_mak
5607 fi
5608 qemu_version=$(head $source_path/VERSION)
5609 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5610 echo "SRC_PATH=$source_path" >> $config_host_mak
5611 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5612 if test "$modules" = "yes"; then
5613 # $shacmd can generate a hash started with digit, which the compiler doesn't
5614 # like as an symbol. So prefix it with an underscore
5615 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5616 echo "CONFIG_MODULES=y" >> $config_host_mak
5617 fi
5618 if test "$module_upgrades" = "yes"; then
5619 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
5620 fi
5621 if test "$pipe2" = "yes" ; then
5622 echo "CONFIG_PIPE2=y" >> $config_host_mak
5623 fi
5624 if test "$accept4" = "yes" ; then
5625 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5626 fi
5627 if test "$splice" = "yes" ; then
5628 echo "CONFIG_SPLICE=y" >> $config_host_mak
5629 fi
5630 if test "$eventfd" = "yes" ; then
5631 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5632 fi
5633 if test "$memfd" = "yes" ; then
5634 echo "CONFIG_MEMFD=y" >> $config_host_mak
5635 fi
5636 if test "$have_usbfs" = "yes" ; then
5637 echo "CONFIG_USBFS=y" >> $config_host_mak
5638 fi
5639 if test "$fallocate" = "yes" ; then
5640 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5641 fi
5642 if test "$fallocate_punch_hole" = "yes" ; then
5643 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5644 fi
5645 if test "$fallocate_zero_range" = "yes" ; then
5646 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5647 fi
5648 if test "$posix_fallocate" = "yes" ; then
5649 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5650 fi
5651 if test "$sync_file_range" = "yes" ; then
5652 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5653 fi
5654 if test "$fiemap" = "yes" ; then
5655 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5656 fi
5657 if test "$dup3" = "yes" ; then
5658 echo "CONFIG_DUP3=y" >> $config_host_mak
5659 fi
5660 if test "$ppoll" = "yes" ; then
5661 echo "CONFIG_PPOLL=y" >> $config_host_mak
5662 fi
5663 if test "$prctl_pr_set_timerslack" = "yes" ; then
5664 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5665 fi
5666 if test "$epoll" = "yes" ; then
5667 echo "CONFIG_EPOLL=y" >> $config_host_mak
5668 fi
5669 if test "$epoll_create1" = "yes" ; then
5670 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5671 fi
5672 if test "$sendfile" = "yes" ; then
5673 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5674 fi
5675 if test "$timerfd" = "yes" ; then
5676 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5677 fi
5678 if test "$setns" = "yes" ; then
5679 echo "CONFIG_SETNS=y" >> $config_host_mak
5680 fi
5681 if test "$clock_adjtime" = "yes" ; then
5682 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5683 fi
5684 if test "$syncfs" = "yes" ; then
5685 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5686 fi
5687 if test "$inotify" = "yes" ; then
5688 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5689 fi
5690 if test "$inotify1" = "yes" ; then
5691 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5692 fi
5693 if test "$sem_timedwait" = "yes" ; then
5694 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5695 fi
5696 if test "$strchrnul" = "yes" ; then
5697 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
5698 fi
5699 if test "$st_atim" = "yes" ; then
5700 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
5701 fi
5702 if test "$byteswap_h" = "yes" ; then
5703 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5704 fi
5705 if test "$bswap_h" = "yes" ; then
5706 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5707 fi
5708 if test "$gio" = "yes" ; then
5709 echo "CONFIG_GIO=y" >> $config_host_mak
5710 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
5711 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
5712 fi
5713 if test "$gdbus_codegen" != "" ; then
5714 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
5715 fi
5716 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5717 if test "$gnutls" = "yes" ; then
5718 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5719 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
5720 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
5721 fi
5722 if test "$gcrypt" = "yes" ; then
5723 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5724 if test "$gcrypt_hmac" = "yes" ; then
5725 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5726 fi
5727 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
5728 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
5729 fi
5730 if test "$nettle" = "yes" ; then
5731 echo "CONFIG_NETTLE=y" >> $config_host_mak
5732 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
5733 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
5734 fi
5735 if test "$qemu_private_xts" = "yes" ; then
5736 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
5737 fi
5738 if test "$tasn1" = "yes" ; then
5739 echo "CONFIG_TASN1=y" >> $config_host_mak
5740 fi
5741 if test "$auth_pam" = "yes" ; then
5742 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
5743 fi
5744 if test "$have_broken_size_max" = "yes" ; then
5745 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5746 fi
5747 if test "$have_openpty" = "yes" ; then
5748 echo "HAVE_OPENPTY=y" >> $config_host_mak
5749 fi
5750
5751 # Work around a system header bug with some kernel/XFS header
5752 # versions where they both try to define 'struct fsxattr':
5753 # xfs headers will not try to redefine structs from linux headers
5754 # if this macro is set.
5755 if test "$have_fsxattr" = "yes" ; then
5756 echo "HAVE_FSXATTR=y" >> $config_host_mak
5757 fi
5758 if test "$have_copy_file_range" = "yes" ; then
5759 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
5760 fi
5761 if test "$vte" = "yes" ; then
5762 echo "CONFIG_VTE=y" >> $config_host_mak
5763 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5764 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
5765 fi
5766 if test "$virglrenderer" = "yes" ; then
5767 echo "CONFIG_VIRGL=y" >> $config_host_mak
5768 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5769 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5770 fi
5771 if test "$xen" = "enabled" ; then
5772 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5773 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5774 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
5775 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
5776 fi
5777 if test "$linux_aio" = "yes" ; then
5778 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5779 fi
5780 if test "$linux_io_uring" = "yes" ; then
5781 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
5782 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
5783 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
5784 fi
5785 if test "$vhost_scsi" = "yes" ; then
5786 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5787 fi
5788 if test "$vhost_net" = "yes" ; then
5789 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
5790 fi
5791 if test "$vhost_net_user" = "yes" ; then
5792 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
5793 fi
5794 if test "$vhost_net_vdpa" = "yes" ; then
5795 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
5796 fi
5797 if test "$vhost_crypto" = "yes" ; then
5798 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
5799 fi
5800 if test "$vhost_vsock" = "yes" ; then
5801 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5802 if test "$vhost_user" = "yes" ; then
5803 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
5804 fi
5805 fi
5806 if test "$vhost_kernel" = "yes" ; then
5807 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
5808 fi
5809 if test "$vhost_user" = "yes" ; then
5810 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5811 fi
5812 if test "$vhost_vdpa" = "yes" ; then
5813 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
5814 fi
5815 if test "$vhost_user_fs" = "yes" ; then
5816 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
5817 fi
5818 if test "$iovec" = "yes" ; then
5819 echo "CONFIG_IOVEC=y" >> $config_host_mak
5820 fi
5821 if test "$membarrier" = "yes" ; then
5822 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
5823 fi
5824 if test "$signalfd" = "yes" ; then
5825 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5826 fi
5827 if test "$optreset" = "yes" ; then
5828 echo "HAVE_OPTRESET=y" >> $config_host_mak
5829 fi
5830 if test "$fdatasync" = "yes" ; then
5831 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5832 fi
5833 if test "$madvise" = "yes" ; then
5834 echo "CONFIG_MADVISE=y" >> $config_host_mak
5835 fi
5836 if test "$posix_madvise" = "yes" ; then
5837 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5838 fi
5839 if test "$posix_memalign" = "yes" ; then
5840 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
5841 fi
5842
5843 if test "$spice_protocol" = "yes" ; then
5844 echo "CONFIG_SPICE_PROTOCOL=y" >> $config_host_mak
5845 echo "SPICE_PROTOCOL_CFLAGS=$spice_protocol_cflags" >> $config_host_mak
5846 fi
5847 if test "$spice" = "yes" ; then
5848 echo "CONFIG_SPICE=y" >> $config_host_mak
5849 echo "SPICE_CFLAGS=$spice_cflags $spice_protocol_cflags" >> $config_host_mak
5850 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
5851 fi
5852
5853 if test "$smartcard" = "yes" ; then
5854 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5855 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
5856 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
5857 fi
5858
5859 if test "$libusb" = "yes" ; then
5860 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5861 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
5862 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
5863 fi
5864
5865 if test "$usb_redir" = "yes" ; then
5866 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5867 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
5868 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
5869 fi
5870
5871 if test "$opengl" = "yes" ; then
5872 echo "CONFIG_OPENGL=y" >> $config_host_mak
5873 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5874 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5875 fi
5876
5877 if test "$gbm" = "yes" ; then
5878 echo "CONFIG_GBM=y" >> $config_host_mak
5879 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
5880 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
5881 fi
5882
5883
5884 if test "$avx2_opt" = "yes" ; then
5885 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5886 fi
5887
5888 if test "$avx512f_opt" = "yes" ; then
5889 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
5890 fi
5891
5892 # XXX: suppress that
5893 if [ "$bsd" = "yes" ] ; then
5894 echo "CONFIG_BSD=y" >> $config_host_mak
5895 fi
5896
5897 if test "$qom_cast_debug" = "yes" ; then
5898 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5899 fi
5900
5901 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5902 if test "$coroutine_pool" = "yes" ; then
5903 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5904 else
5905 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5906 fi
5907
5908 if test "$debug_stack_usage" = "yes" ; then
5909 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5910 fi
5911
5912 if test "$crypto_afalg" = "yes" ; then
5913 echo "CONFIG_AF_ALG=y" >> $config_host_mak
5914 fi
5915
5916 if test "$open_by_handle_at" = "yes" ; then
5917 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5918 fi
5919
5920 if test "$linux_magic_h" = "yes" ; then
5921 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5922 fi
5923
5924 if test "$valgrind_h" = "yes" ; then
5925 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5926 fi
5927
5928 if test "$have_asan_iface_fiber" = "yes" ; then
5929 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
5930 fi
5931
5932 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
5933 echo "CONFIG_TSAN=y" >> $config_host_mak
5934 fi
5935
5936 if test "$has_environ" = "yes" ; then
5937 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5938 fi
5939
5940 if test "$cpuid_h" = "yes" ; then
5941 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5942 fi
5943
5944 if test "$int128" = "yes" ; then
5945 echo "CONFIG_INT128=y" >> $config_host_mak
5946 fi
5947
5948 if test "$atomic128" = "yes" ; then
5949 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5950 fi
5951
5952 if test "$cmpxchg128" = "yes" ; then
5953 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
5954 fi
5955
5956 if test "$atomic64" = "yes" ; then
5957 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5958 fi
5959
5960 if test "$getauxval" = "yes" ; then
5961 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5962 fi
5963
5964 if test "$libssh" = "yes" ; then
5965 echo "CONFIG_LIBSSH=y" >> $config_host_mak
5966 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
5967 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
5968 fi
5969
5970 if test "$live_block_migration" = "yes" ; then
5971 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
5972 fi
5973
5974 if test "$tpm" = "yes"; then
5975 echo 'CONFIG_TPM=y' >> $config_host_mak
5976 fi
5977
5978 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5979 if have_backend "nop"; then
5980 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5981 fi
5982 if have_backend "simple"; then
5983 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5984 # Set the appropriate trace file.
5985 trace_file="\"$trace_file-\" FMT_pid"
5986 fi
5987 if have_backend "log"; then
5988 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5989 fi
5990 if have_backend "ust"; then
5991 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5992 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
5993 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
5994 fi
5995 if have_backend "dtrace"; then
5996 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5997 if test "$trace_backend_stap" = "yes" ; then
5998 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5999 fi
6000 fi
6001 if have_backend "ftrace"; then
6002 if test "$linux" = "yes" ; then
6003 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6004 else
6005 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6006 fi
6007 fi
6008 if have_backend "syslog"; then
6009 if test "$posix_syslog" = "yes" ; then
6010 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6011 else
6012 feature_not_found "syslog(trace backend)" "syslog not available"
6013 fi
6014 fi
6015 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6016
6017 if test "$rdma" = "yes" ; then
6018 echo "CONFIG_RDMA=y" >> $config_host_mak
6019 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6020 fi
6021
6022 if test "$pvrdma" = "yes" ; then
6023 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6024 fi
6025
6026 if test "$have_rtnetlink" = "yes" ; then
6027 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6028 fi
6029
6030 if test "$libxml2" = "yes" ; then
6031 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6032 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6033 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6034 fi
6035
6036 if test "$replication" = "yes" ; then
6037 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6038 fi
6039
6040 if test "$have_af_vsock" = "yes" ; then
6041 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6042 fi
6043
6044 if test "$have_sysmacros" = "yes" ; then
6045 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6046 fi
6047
6048 if test "$have_static_assert" = "yes" ; then
6049 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6050 fi
6051
6052 if test "$have_utmpx" = "yes" ; then
6053 echo "HAVE_UTMPX=y" >> $config_host_mak
6054 fi
6055 if test "$have_getrandom" = "yes" ; then
6056 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6057 fi
6058 if test "$ivshmem" = "yes" ; then
6059 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6060 fi
6061 if test "$debug_mutex" = "yes" ; then
6062 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6063 fi
6064
6065 # Hold two types of flag:
6066 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6067 # a thread we have a handle to
6068 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
6069 # platform
6070 if test "$pthread_setname_np_w_tid" = "yes" ; then
6071 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6072 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6073 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6074 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6075 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
6076 fi
6077
6078 if test "$libpmem" = "yes" ; then
6079 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6080 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6081 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
6082 fi
6083
6084 if test "$libdaxctl" = "yes" ; then
6085 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6086 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
6087 fi
6088
6089 if test "$bochs" = "yes" ; then
6090 echo "CONFIG_BOCHS=y" >> $config_host_mak
6091 fi
6092 if test "$cloop" = "yes" ; then
6093 echo "CONFIG_CLOOP=y" >> $config_host_mak
6094 fi
6095 if test "$dmg" = "yes" ; then
6096 echo "CONFIG_DMG=y" >> $config_host_mak
6097 fi
6098 if test "$qcow1" = "yes" ; then
6099 echo "CONFIG_QCOW1=y" >> $config_host_mak
6100 fi
6101 if test "$vdi" = "yes" ; then
6102 echo "CONFIG_VDI=y" >> $config_host_mak
6103 fi
6104 if test "$vvfat" = "yes" ; then
6105 echo "CONFIG_VVFAT=y" >> $config_host_mak
6106 fi
6107 if test "$qed" = "yes" ; then
6108 echo "CONFIG_QED=y" >> $config_host_mak
6109 fi
6110 if test "$parallels" = "yes" ; then
6111 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6112 fi
6113 if test "$have_mlockall" = "yes" ; then
6114 echo "HAVE_MLOCKALL=y" >> $config_host_mak
6115 fi
6116 if test "$fuzzing" = "yes" ; then
6117 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
6118 # needed CFLAGS have already been provided
6119 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6120 # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
6121 # compiled code.
6122 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6123 # To build non-fuzzer binaries with --enable-fuzzing, link everything with
6124 # fsanitize=fuzzer-no-link. Otherwise, the linker will be unable to bind
6125 # the fuzzer-related callbacks added by instrumentation.
6126 QEMU_LDFLAGS="$QEMU_LDFLAGS -fsanitize=fuzzer-no-link"
6127 # For the actual fuzzer binaries, we need to link against the libfuzzer
6128 # library. Provide the flags for doing this in FUZZ_EXE_LDFLAGS. The meson
6129 # rule for the fuzzer adds these to the link_args. They need to be
6130 # configurable, to support OSS-Fuzz
6131 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
6132 else
6133 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
6134 fi
6135 fi
6136
6137 if test "$plugins" = "yes" ; then
6138 echo "CONFIG_PLUGIN=y" >> $config_host_mak
6139 # Copy the export object list to the build dir
6140 if test "$ld_dynamic_list" = "yes" ; then
6141 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
6142 ld_symbols=qemu-plugins-ld.symbols
6143 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
6144 elif test "$ld_exported_symbols_list" = "yes" ; then
6145 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
6146 ld64_symbols=qemu-plugins-ld64.symbols
6147 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
6148 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
6149 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
6150 else
6151 error_exit \
6152 "If \$plugins=yes, either \$ld_dynamic_list or " \
6153 "\$ld_exported_symbols_list should have been set to 'yes'."
6154 fi
6155 fi
6156
6157 if test -n "$gdb_bin"; then
6158 gdb_version=$($gdb_bin --version | head -n 1)
6159 if version_ge ${gdb_version##* } 9.1; then
6160 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6161 fi
6162 fi
6163
6164 if test "$secret_keyring" = "yes" ; then
6165 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
6166 fi
6167
6168 echo "ROMS=$roms" >> $config_host_mak
6169 echo "MAKE=$make" >> $config_host_mak
6170 echo "PYTHON=$python" >> $config_host_mak
6171 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
6172 echo "MESON=$meson" >> $config_host_mak
6173 echo "NINJA=$ninja" >> $config_host_mak
6174 echo "CC=$cc" >> $config_host_mak
6175 echo "HOST_CC=$host_cc" >> $config_host_mak
6176 if $iasl -h > /dev/null 2>&1; then
6177 echo "CONFIG_IASL=$iasl" >> $config_host_mak
6178 fi
6179 echo "CXX=$cxx" >> $config_host_mak
6180 echo "OBJCC=$objcc" >> $config_host_mak
6181 echo "AR=$ar" >> $config_host_mak
6182 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6183 echo "AS=$as" >> $config_host_mak
6184 echo "CCAS=$ccas" >> $config_host_mak
6185 echo "CPP=$cpp" >> $config_host_mak
6186 echo "OBJCOPY=$objcopy" >> $config_host_mak
6187 echo "LD=$ld" >> $config_host_mak
6188 echo "RANLIB=$ranlib" >> $config_host_mak
6189 echo "NM=$nm" >> $config_host_mak
6190 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
6191 echo "WINDRES=$windres" >> $config_host_mak
6192 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6193 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6194 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6195 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6196 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
6197 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6198 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6199 echo "EXESUF=$EXESUF" >> $config_host_mak
6200 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6201 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
6202 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6203 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6204 if test "$gcov" = "yes" ; then
6205 echo "CONFIG_GCOV=y" >> $config_host_mak
6206 fi
6207
6208 if test "$fuzzing" != "no"; then
6209 echo "CONFIG_FUZZ=y" >> $config_host_mak
6210 fi
6211 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
6212
6213 if test "$rng_none" = "yes"; then
6214 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6215 fi
6216
6217 # use included Linux headers
6218 if test "$linux" = "yes" ; then
6219 mkdir -p linux-headers
6220 case "$cpu" in
6221 i386|x86_64|x32)
6222 linux_arch=x86
6223 ;;
6224 ppc|ppc64|ppc64le)
6225 linux_arch=powerpc
6226 ;;
6227 s390x)
6228 linux_arch=s390
6229 ;;
6230 aarch64)
6231 linux_arch=arm64
6232 ;;
6233 mips64)
6234 linux_arch=mips
6235 ;;
6236 *)
6237 # For most CPUs the kernel architecture name and QEMU CPU name match.
6238 linux_arch="$cpu"
6239 ;;
6240 esac
6241 # For non-KVM architectures we will not have asm headers
6242 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6243 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6244 fi
6245 fi
6246
6247 for target in $target_list; do
6248 target_dir="$target"
6249 target_name=$(echo $target | cut -d '-' -f 1)
6250 mkdir -p $target_dir
6251 case $target in
6252 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6253 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
6254 esac
6255 done
6256
6257 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
6258 if test "$default_targets" = "yes"; then
6259 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6260 fi
6261
6262 if test "$numa" = "yes"; then
6263 echo "CONFIG_NUMA=y" >> $config_host_mak
6264 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6265 fi
6266
6267 if test "$ccache_cpp2" = "yes"; then
6268 echo "export CCACHE_CPP2=y" >> $config_host_mak
6269 fi
6270
6271 if test "$safe_stack" = "yes"; then
6272 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
6273 fi
6274
6275 # If we're using a separate build tree, set it up now.
6276 # DIRS are directories which we simply mkdir in the build tree;
6277 # LINKS are things to symlink back into the source tree
6278 # (these can be both files and directories).
6279 # Caution: do not add files or directories here using wildcards. This
6280 # will result in problems later if a new file matching the wildcard is
6281 # added to the source tree -- nothing will cause configure to be rerun
6282 # so the build tree will be missing the link back to the new file, and
6283 # tests might fail. Prefer to keep the relevant files in their own
6284 # directory and symlink the directory instead.
6285 # UNLINK is used to remove symlinks from older development versions
6286 # that might get into the way when doing "git update" without doing
6287 # a "make distclean" in between.
6288 DIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos"
6289 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6290 DIRS="$DIRS docs docs/interop fsdev scsi"
6291 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
6292 DIRS="$DIRS roms/seabios"
6293 DIRS="$DIRS contrib/plugins/"
6294 LINKS="Makefile"
6295 LINKS="$LINKS tests/tcg/Makefile.target"
6296 LINKS="$LINKS pc-bios/optionrom/Makefile"
6297 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
6298 LINKS="$LINKS roms/seabios/Makefile"
6299 LINKS="$LINKS pc-bios/qemu-icon.bmp"
6300 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
6301 LINKS="$LINKS tests/acceptance tests/data"
6302 LINKS="$LINKS tests/qemu-iotests/check"
6303 LINKS="$LINKS python"
6304 LINKS="$LINKS contrib/plugins/Makefile "
6305 UNLINK="pc-bios/keymaps"
6306 for bios_file in \
6307 $source_path/pc-bios/*.bin \
6308 $source_path/pc-bios/*.elf \
6309 $source_path/pc-bios/*.lid \
6310 $source_path/pc-bios/*.rom \
6311 $source_path/pc-bios/*.dtb \
6312 $source_path/pc-bios/*.img \
6313 $source_path/pc-bios/openbios-* \
6314 $source_path/pc-bios/u-boot.* \
6315 $source_path/pc-bios/edk2-*.fd.bz2 \
6316 $source_path/pc-bios/palcode-*
6317 do
6318 LINKS="$LINKS pc-bios/$(basename $bios_file)"
6319 done
6320 mkdir -p $DIRS
6321 for f in $LINKS ; do
6322 if [ -e "$source_path/$f" ]; then
6323 symlink "$source_path/$f" "$f"
6324 fi
6325 done
6326 for f in $UNLINK ; do
6327 if [ -L "$f" ]; then
6328 rm -f "$f"
6329 fi
6330 done
6331
6332 (for i in $cross_cc_vars; do
6333 export $i
6334 done
6335 export target_list source_path use_containers ARCH
6336 $source_path/tests/tcg/configure.sh)
6337
6338 # temporary config to build submodules
6339 for rom in seabios; do
6340 config_mak=roms/$rom/config.mak
6341 echo "# Automatically generated by configure - do not modify" > $config_mak
6342 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6343 echo "AS=$as" >> $config_mak
6344 echo "CCAS=$ccas" >> $config_mak
6345 echo "CC=$cc" >> $config_mak
6346 echo "BCC=bcc" >> $config_mak
6347 echo "CPP=$cpp" >> $config_mak
6348 echo "OBJCOPY=objcopy" >> $config_mak
6349 echo "IASL=$iasl" >> $config_mak
6350 echo "LD=$ld" >> $config_mak
6351 echo "RANLIB=$ranlib" >> $config_mak
6352 done
6353
6354 if test "$skip_meson" = no; then
6355 cross="config-meson.cross.new"
6356 meson_quote() {
6357 echo "'$(echo $* | sed "s/ /','/g")'"
6358 }
6359
6360 echo "# Automatically generated by configure - do not modify" > $cross
6361 echo "[properties]" >> $cross
6362 test -z "$cxx" && echo "link_language = 'c'" >> $cross
6363 echo "[built-in options]" >> $cross
6364 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
6365 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
6366 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6367 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6368 echo "[binaries]" >> $cross
6369 echo "c = [$(meson_quote $cc)]" >> $cross
6370 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
6371 test -n "$objcc" && echo "objc = [$(meson_quote $objcc)]" >> $cross
6372 echo "ar = [$(meson_quote $ar)]" >> $cross
6373 echo "nm = [$(meson_quote $nm)]" >> $cross
6374 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
6375 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
6376 if has $sdl2_config; then
6377 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
6378 fi
6379 echo "strip = [$(meson_quote $strip)]" >> $cross
6380 echo "windres = [$(meson_quote $windres)]" >> $cross
6381 if test "$cross_compile" = "yes"; then
6382 cross_arg="--cross-file config-meson.cross"
6383 echo "[host_machine]" >> $cross
6384 if test "$mingw32" = "yes" ; then
6385 echo "system = 'windows'" >> $cross
6386 fi
6387 if test "$linux" = "yes" ; then
6388 echo "system = 'linux'" >> $cross
6389 fi
6390 if test "$darwin" = "yes" ; then
6391 echo "system = 'darwin'" >> $cross
6392 fi
6393 case "$ARCH" in
6394 i386)
6395 echo "cpu_family = 'x86'" >> $cross
6396 ;;
6397 x86_64)
6398 echo "cpu_family = 'x86_64'" >> $cross
6399 ;;
6400 ppc64le)
6401 echo "cpu_family = 'ppc64'" >> $cross
6402 ;;
6403 *)
6404 echo "cpu_family = '$ARCH'" >> $cross
6405 ;;
6406 esac
6407 echo "cpu = '$cpu'" >> $cross
6408 if test "$bigendian" = "yes" ; then
6409 echo "endian = 'big'" >> $cross
6410 else
6411 echo "endian = 'little'" >> $cross
6412 fi
6413 else
6414 cross_arg="--native-file config-meson.cross"
6415 fi
6416 mv $cross config-meson.cross
6417
6418 rm -rf meson-private meson-info meson-logs
6419 unset staticpic
6420 if ! version_ge "$($meson --version)" 0.56.0; then
6421 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
6422 fi
6423 NINJA=$ninja $meson setup \
6424 --prefix "$prefix" \
6425 --libdir "$libdir" \
6426 --libexecdir "$libexecdir" \
6427 --bindir "$bindir" \
6428 --includedir "$includedir" \
6429 --datadir "$datadir" \
6430 --mandir "$mandir" \
6431 --sysconfdir "$sysconfdir" \
6432 --localedir "$localedir" \
6433 --localstatedir "$local_statedir" \
6434 -Ddocdir="$docdir" \
6435 -Dqemu_firmwarepath="$firmwarepath" \
6436 -Dqemu_suffix="$qemu_suffix" \
6437 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
6438 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
6439 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
6440 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
6441 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
6442 ${staticpic:+-Db_staticpic=$staticpic} \
6443 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
6444 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \
6445 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
6446 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
6447 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
6448 -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
6449 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
6450 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
6451 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
6452 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
6453 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
6454 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse \
6455 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
6456 -Dattr=$attr -Ddefault_devices=$default_devices \
6457 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
6458 -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
6459 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi \
6460 $(if test "$default_features" = no; then echo "-Dauto_features=disabled"; fi) \
6461 -Dtcg_interpreter=$tcg_interpreter \
6462 $cross_arg \
6463 "$PWD" "$source_path"
6464
6465 if test "$?" -ne 0 ; then
6466 error_exit "meson setup failed"
6467 fi
6468 else
6469 if test -f meson-private/cmd_line.txt; then
6470 # Adjust old command line options whose type was changed
6471 # Avoids having to use "setup --wipe" when Meson is upgraded
6472 perl -i -ne '
6473 s/^gettext = true$/gettext = auto/;
6474 s/^gettext = false$/gettext = disabled/;
6475 print;' meson-private/cmd_line.txt
6476 fi
6477 fi
6478
6479 if test -n "${deprecated_features}"; then
6480 echo "Warning, deprecated features enabled."
6481 echo "Please see docs/system/deprecated.rst"
6482 echo " features: ${deprecated_features}"
6483 fi
6484
6485 # Create list of config switches that should be poisoned in common code...
6486 # but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
6487 target_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
6488 if test -n "$target_configs_h" ; then
6489 sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
6490 -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
6491 $target_configs_h | sort -u > config-poison.h
6492 else
6493 :> config-poison.h
6494 fi
6495
6496 # Save the configure command line for later reuse.
6497 cat <<EOD >config.status
6498 #!/bin/sh
6499 # Generated by configure.
6500 # Run this file to recreate the current configuration.
6501 # Compiler output produced by configure, useful for debugging
6502 # configure, is in config.log if it exists.
6503 EOD
6504
6505 preserve_env() {
6506 envname=$1
6507
6508 eval envval=\$$envname
6509
6510 if test -n "$envval"
6511 then
6512 echo "$envname='$envval'" >> config.status
6513 echo "export $envname" >> config.status
6514 else
6515 echo "unset $envname" >> config.status
6516 fi
6517 }
6518
6519 # Preserve various env variables that influence what
6520 # features/build target configure will detect
6521 preserve_env AR
6522 preserve_env AS
6523 preserve_env CC
6524 preserve_env CPP
6525 preserve_env CXX
6526 preserve_env INSTALL
6527 preserve_env LD
6528 preserve_env LD_LIBRARY_PATH
6529 preserve_env LIBTOOL
6530 preserve_env MAKE
6531 preserve_env NM
6532 preserve_env OBJCOPY
6533 preserve_env PATH
6534 preserve_env PKG_CONFIG
6535 preserve_env PKG_CONFIG_LIBDIR
6536 preserve_env PKG_CONFIG_PATH
6537 preserve_env PYTHON
6538 preserve_env SDL2_CONFIG
6539 preserve_env SMBD
6540 preserve_env STRIP
6541 preserve_env WINDRES
6542
6543 printf "exec" >>config.status
6544 for i in "$0" "$@"; do
6545 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
6546 done
6547 echo ' "$@"' >>config.status
6548 chmod +x config.status
6549
6550 rm -r "$TMPDIR1"