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