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