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