]> Git Repo - qemu.git/blob - configure
acpi: acpi_build_hest: use acpi_table_begin()/acpi_table_end() instead of build_header()
[qemu.git] / configure
1 #!/bin/sh
2 #
3 # qemu configure script (c) 2003 Fabrice Bellard
4 #
5
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
10
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
13
14 # make source path absolute
15 source_path=$(cd "$(dirname -- "$0")"; pwd)
16
17 if test "$PWD" = "$source_path"
18 then
19     echo "Using './build' as the directory for build output"
20
21     MARKER=build/auto-created-by-configure
22
23     if test -e build
24     then
25         if test -f $MARKER
26         then
27            rm -rf build
28         else
29             echo "ERROR: ./build dir already exists and was not previously created by configure"
30             exit 1
31         fi
32     fi
33
34     mkdir build
35     touch $MARKER
36
37     cat > GNUmakefile <<'EOF'
38 # This file is auto-generated by configure to support in-source tree
39 # 'make' command invocation
40
41 ifeq ($(MAKECMDGOALS),)
42 recurse: all
43 endif
44
45 .NOTPARALLEL: %
46 %: force
47         @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48         @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49         @if test "$(MAKECMDGOALS)" = "distclean" && \
50             test -e build/auto-created-by-configure ; \
51         then \
52             rm -rf build GNUmakefile ; \
53         fi
54 force: ;
55 .PHONY: force
56 GNUmakefile: ;
57
58 EOF
59     cd build
60     exec $source_path/configure "$@"
61 fi
62
63 # Temporary directory used for files created while
64 # configure runs. Since it is in the build directory
65 # we can safely blow away any previous version of it
66 # (and we need not jump through hoops to try to delete
67 # it when configure exits.)
68 TMPDIR1="config-temp"
69 rm -rf "${TMPDIR1}"
70 mkdir -p "${TMPDIR1}"
71 if [ $? -ne 0 ]; then
72     echo "ERROR: failed to create temporary directory"
73     exit 1
74 fi
75
76 TMPB="qemu-conf"
77 TMPC="${TMPDIR1}/${TMPB}.c"
78 TMPO="${TMPDIR1}/${TMPB}.o"
79 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
80 TMPE="${TMPDIR1}/${TMPB}.exe"
81 TMPTXT="${TMPDIR1}/${TMPB}.txt"
82
83 rm -f config.log
84
85 # Print a helpful header at the top of config.log
86 echo "# QEMU configure log $(date)" >> config.log
87 printf "# Configured with:" >> config.log
88 printf " '%s'" "$0" "$@" >> config.log
89 echo >> config.log
90 echo "#" >> config.log
91
92 quote_sh() {
93     printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
94 }
95
96 print_error() {
97     (echo
98     echo "ERROR: $1"
99     while test -n "$2"; do
100         echo "       $2"
101         shift
102     done
103     echo) >&2
104 }
105
106 error_exit() {
107     print_error "$@"
108     exit 1
109 }
110
111 do_compiler() {
112     # Run the compiler, capturing its output to the log. First argument
113     # is compiler binary to execute.
114     compiler="$1"
115     shift
116     if test -n "$BASH_VERSION"; then eval '
117         echo >>config.log "
118 funcs: ${FUNCNAME[*]}
119 lines: ${BASH_LINENO[*]}"
120     '; fi
121     echo $compiler "$@" >> config.log
122     $compiler "$@" >> config.log 2>&1 || return $?
123     # Test passed. If this is an --enable-werror build, rerun
124     # the test with -Werror and bail out if it fails. This
125     # makes warning-generating-errors in configure test code
126     # obvious to developers.
127     if test "$werror" != "yes"; then
128         return 0
129     fi
130     # Don't bother rerunning the compile if we were already using -Werror
131     case "$*" in
132         *-Werror*)
133            return 0
134         ;;
135     esac
136     echo $compiler -Werror "$@" >> config.log
137     $compiler -Werror "$@" >> config.log 2>&1 && return $?
138     error_exit "configure test passed without -Werror but failed with -Werror." \
139         "This is probably a bug in the configure script. The failing command" \
140         "will be at the bottom of config.log." \
141         "You can run configure with --disable-werror to bypass this check."
142 }
143
144 do_cc() {
145     do_compiler "$cc" "$@"
146 }
147
148 do_cxx() {
149     do_compiler "$cxx" "$@"
150 }
151
152 # Append $2 to the variable named $1, with space separation
153 add_to() {
154     eval $1=\${$1:+\"\$$1 \"}\$2
155 }
156
157 update_cxxflags() {
158     # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
159     # options which some versions of GCC's C++ compiler complain about
160     # because they only make sense for C programs.
161     QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
162     CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=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 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1692
1693 # For user-mode emulation the host arch has to be one we explicitly
1694 # support, even if we're using TCI.
1695 if [ "$ARCH" = "unknown" ]; then
1696   bsd_user="no"
1697   linux_user="no"
1698 fi
1699
1700 default_target_list=""
1701 deprecated_targets_list=ppc64abi32-linux-user
1702 deprecated_features=""
1703 mak_wilds=""
1704
1705 if [ "$softmmu" = "yes" ]; then
1706     mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
1707 fi
1708 if [ "$linux_user" = "yes" ]; then
1709     mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
1710 fi
1711 if [ "$bsd_user" = "yes" ]; then
1712     mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
1713 fi
1714
1715 # If the user doesn't explicitly specify a deprecated target we will
1716 # skip it.
1717 if test -z "$target_list"; then
1718     if test -z "$target_list_exclude"; then
1719         target_list_exclude="$deprecated_targets_list"
1720     else
1721         target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1722     fi
1723 fi
1724
1725 for config in $mak_wilds; do
1726     target="$(basename "$config" .mak)"
1727     if echo "$target_list_exclude" | grep -vq "$target"; then
1728         default_target_list="${default_target_list} $target"
1729     fi
1730 done
1731
1732 # Enumerate public trace backends for --help output
1733 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1734
1735 if test x"$show_help" = x"yes" ; then
1736 cat << EOF
1737
1738 Usage: configure [options]
1739 Options: [defaults in brackets after descriptions]
1740
1741 Standard options:
1742   --help                   print this message
1743   --prefix=PREFIX          install in PREFIX [$prefix]
1744   --interp-prefix=PREFIX   where to find shared libraries, etc.
1745                            use %M for cpu name [$interp_prefix]
1746   --target-list=LIST       set target list (default: build all non-deprecated)
1747 $(echo Available targets: $default_target_list | \
1748   fold -s -w 53 | sed -e 's/^/                           /')
1749 $(echo Deprecated targets: $deprecated_targets_list | \
1750   fold -s -w 53 | sed -e 's/^/                           /')
1751   --target-list-exclude=LIST exclude a set of targets from the default target-list
1752
1753 Advanced options (experts only):
1754   --cross-prefix=PREFIX    use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
1755   --cc=CC                  use C compiler CC [$cc]
1756   --iasl=IASL              use ACPI compiler IASL [$iasl]
1757   --host-cc=CC             use C compiler CC [$host_cc] for code run at
1758                            build time
1759   --cxx=CXX                use C++ compiler CXX [$cxx]
1760   --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1761   --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
1762   --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1763   --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1764   --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1765   --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
1766   --make=MAKE              use specified make [$make]
1767   --python=PYTHON          use specified python [$python]
1768   --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1769   --meson=MESON            use specified meson [$meson]
1770   --ninja=NINJA            use specified ninja [$ninja]
1771   --smbd=SMBD              use specified smbd [$smbd]
1772   --with-git=GIT           use specified git [$git]
1773   --with-git-submodules=update   update git submodules (default if .git dir exists)
1774   --with-git-submodules=validate fail if git submodules are not up to date
1775   --with-git-submodules=ignore   do not update or check git submodules (default if no .git dir)
1776   --static                 enable static build [$static]
1777   --mandir=PATH            install man pages in PATH
1778   --datadir=PATH           install firmware in PATH/$qemu_suffix
1779   --localedir=PATH         install translation in PATH/$qemu_suffix
1780   --docdir=PATH            install documentation in PATH/$qemu_suffix
1781   --bindir=PATH            install binaries in PATH
1782   --libdir=PATH            install libraries in PATH
1783   --libexecdir=PATH        install helper binaries in PATH
1784   --sysconfdir=PATH        install config in PATH/$qemu_suffix
1785   --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1786   --firmwarepath=PATH      search PATH for firmware files
1787   --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1788   --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1789   --with-pkgversion=VERS   use specified string as sub-version of the package
1790   --without-default-features default all --enable-* options to "disabled"
1791   --without-default-devices  do not include any device that is not needed to
1792                            start the emulator (only use if you are including
1793                            desired devices in configs/devices/)
1794   --with-devices-ARCH=NAME override default configs/devices
1795   --enable-debug           enable common debug build options
1796   --enable-sanitizers      enable default sanitizers
1797   --enable-tsan            enable thread sanitizer
1798   --disable-strip          disable stripping binaries
1799   --disable-werror         disable compilation abort on warning
1800   --disable-stack-protector disable compiler-provided stack protection
1801   --audio-drv-list=LIST    set audio drivers list:
1802                            Available drivers: $audio_possible_drivers
1803   --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
1804   --block-drv-rw-whitelist=L
1805                            set block driver read-write whitelist
1806                            (by default affects only QEMU, not tools like qemu-img)
1807   --block-drv-ro-whitelist=L
1808                            set block driver read-only whitelist
1809                            (by default affects only QEMU, not tools like qemu-img)
1810   --enable-block-drv-whitelist-in-tools
1811                            use block whitelist also in tools instead of only QEMU
1812   --enable-trace-backends=B Set trace backend
1813                            Available backends: $trace_backend_list
1814   --with-trace-file=NAME   Full PATH,NAME of file to store traces
1815                            Default:trace-<pid>
1816   --disable-slirp          disable SLIRP userspace network connectivity
1817   --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
1818   --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1819   --oss-lib                path to OSS library
1820   --cpu=CPU                Build for host CPU [$cpu]
1821   --with-coroutine=BACKEND coroutine backend. Supported options:
1822                            ucontext, sigaltstack, windows
1823   --enable-gcov            enable test coverage analysis with gcov
1824   --disable-blobs          disable installing provided firmware blobs
1825   --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1826   --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1827   --tls-priority           default TLS protocol/cipher priority string
1828   --enable-gprof           QEMU profiling with gprof
1829   --enable-profiler        profiler support
1830   --enable-debug-stack-usage
1831                            track the maximum stack usage of stacks created by qemu_alloc_stack
1832   --enable-plugins
1833                            enable plugins via shared library loading
1834   --disable-containers     don't use containers for cross-building
1835   --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
1836
1837 Optional features, enabled with --enable-FEATURE and
1838 disabled with --disable-FEATURE, default is enabled if available
1839 (unless built with --without-default-features):
1840
1841   system          all system emulation targets
1842   user            supported user emulation targets
1843   linux-user      all linux usermode emulation targets
1844   bsd-user        all BSD usermode emulation targets
1845   docs            build documentation
1846   guest-agent     build the QEMU Guest Agent
1847   guest-agent-msi build guest agent Windows MSI installation package
1848   pie             Position Independent Executables
1849   modules         modules support (non-Windows)
1850   module-upgrades try to load modules from alternate paths for upgrades
1851   debug-tcg       TCG debugging (default is disabled)
1852   debug-info      debugging information
1853   lto             Enable Link-Time Optimization.
1854   sparse          sparse checker
1855   safe-stack      SafeStack Stack Smash Protection. Depends on
1856                   clang/llvm >= 3.7 and requires coroutine backend ucontext.
1857   cfi             Enable Control-Flow Integrity for indirect function calls.
1858                   In case of a cfi violation, QEMU is terminated with SIGILL
1859                   Depends on lto and is incompatible with modules
1860                   Automatically enables Link-Time Optimization (lto)
1861   cfi-debug       In case of a cfi violation, a message containing the line that
1862                   triggered the error is written to stderr. After the error,
1863                   QEMU is still terminated with SIGILL
1864   gnutls          GNUTLS cryptography support
1865   nettle          nettle cryptography support
1866   gcrypt          libgcrypt cryptography support
1867   auth-pam        PAM access control
1868   sdl             SDL UI
1869   sdl-image       SDL Image support for icons
1870   gtk             gtk UI
1871   vte             vte support for the gtk UI
1872   curses          curses UI
1873   iconv           font glyph conversion support
1874   vnc             VNC UI support
1875   vnc-sasl        SASL encryption for VNC server
1876   vnc-jpeg        JPEG lossy compression for VNC server
1877   vnc-png         PNG compression for VNC server
1878   cocoa           Cocoa UI (Mac OS X only)
1879   virtfs          VirtFS
1880   virtiofsd       build virtiofs daemon (virtiofsd)
1881   libudev         Use libudev to enumerate host devices
1882   mpath           Multipath persistent reservation passthrough
1883   xen             xen backend driver support
1884   xen-pci-passthrough    PCI passthrough support for Xen
1885   brlapi          BrlAPI (Braile)
1886   curl            curl connectivity
1887   membarrier      membarrier system call (for Linux 4.14+ or Windows)
1888   fdt             fdt device tree
1889   kvm             KVM acceleration support
1890   hax             HAX acceleration support
1891   hvf             Hypervisor.framework acceleration support
1892   nvmm            NVMM acceleration support
1893   whpx            Windows Hypervisor Platform acceleration support
1894   rdma            Enable RDMA-based migration
1895   pvrdma          Enable PVRDMA support
1896   vde             support for vde network
1897   netmap          support for netmap network
1898   linux-aio       Linux AIO support
1899   linux-io-uring  Linux io_uring support
1900   cap-ng          libcap-ng support
1901   attr            attr and xattr support
1902   vhost-net       vhost-net kernel acceleration support
1903   vhost-vsock     virtio sockets device support
1904   vhost-scsi      vhost-scsi kernel target support
1905   vhost-crypto    vhost-user-crypto backend support
1906   vhost-kernel    vhost kernel backend support
1907   vhost-user      vhost-user backend support
1908   vhost-user-blk-server    vhost-user-blk server support
1909   vhost-vdpa      vhost-vdpa kernel backend support
1910   bpf             BPF kernel support
1911   spice           spice
1912   spice-protocol  spice-protocol
1913   rbd             rados block device (rbd)
1914   libiscsi        iscsi support
1915   libnfs          nfs support
1916   smartcard       smartcard support (libcacard)
1917   u2f             U2F support (u2f-emu)
1918   libusb          libusb (for usb passthrough)
1919   live-block-migration   Block migration in the main migration stream
1920   usb-redir       usb network redirection support
1921   lzo             support of lzo compression library
1922   snappy          support of snappy compression library
1923   bzip2           support of bzip2 compression library
1924                   (for reading bzip2-compressed dmg images)
1925   lzfse           support of lzfse compression library
1926                   (for reading lzfse-compressed dmg images)
1927   zstd            support for zstd compression library
1928                   (for migration compression and qcow2 cluster compression)
1929   seccomp         seccomp support
1930   coroutine-pool  coroutine freelist (better performance)
1931   glusterfs       GlusterFS backend
1932   tpm             TPM support
1933   libssh          ssh block device support
1934   numa            libnuma support
1935   libxml2         for Parallels image format
1936   tcmalloc        tcmalloc support
1937   jemalloc        jemalloc support
1938   avx2            AVX2 optimization support
1939   avx512f         AVX512F optimization support
1940   replication     replication support
1941   opengl          opengl support
1942   virglrenderer   virgl rendering support
1943   xfsctl          xfsctl support
1944   qom-cast-debug  cast debugging support
1945   tools           build qemu-io, qemu-nbd and qemu-img tools
1946   bochs           bochs image format support
1947   cloop           cloop image format support
1948   dmg             dmg image format support
1949   qcow1           qcow v1 image format support
1950   vdi             vdi image format support
1951   vvfat           vvfat image format support
1952   qed             qed image format support
1953   parallels       parallels image format support
1954   crypto-afalg    Linux AF_ALG crypto backend driver
1955   capstone        capstone disassembler support
1956   debug-mutex     mutex debugging support
1957   libpmem         libpmem support
1958   xkbcommon       xkbcommon support
1959   rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
1960   libdaxctl       libdaxctl support
1961   fuse            FUSE block device export
1962   fuse-lseek      SEEK_HOLE/SEEK_DATA support for FUSE exports
1963   multiprocess    Out of process device emulation support
1964   gio             libgio support
1965   slirp-smbd      use smbd (at path --smbd=*) in slirp networking
1966
1967 NOTE: The object files are built at the place where configure is launched
1968 EOF
1969 exit 0
1970 fi
1971
1972 # Remove old dependency files to make sure that they get properly regenerated
1973 rm -f */config-devices.mak.d
1974
1975 if test -z "$python"
1976 then
1977     error_exit "Python not found. Use --python=/path/to/python"
1978 fi
1979 if ! has "$make"
1980 then
1981     error_exit "GNU make ($make) not found"
1982 fi
1983
1984 # Note that if the Python conditional here evaluates True we will exit
1985 # with status 1 which is a shell 'false' value.
1986 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1987   error_exit "Cannot use '$python', Python >= 3.6 is required." \
1988       "Use --python=/path/to/python to specify a supported Python."
1989 fi
1990
1991 # Preserve python version since some functionality is dependent on it
1992 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)
1993
1994 # Suppress writing compiled files
1995 python="$python -B"
1996
1997 if test -z "$meson"; then
1998     if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
1999         meson=meson
2000     elif test $git_submodules_action != 'ignore' ; then
2001         meson=git
2002     elif test -e "${source_path}/meson/meson.py" ; then
2003         meson=internal
2004     else
2005         if test "$explicit_python" = yes; then
2006             error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
2007         else
2008             error_exit "Meson not found.  Use --meson=/path/to/meson"
2009         fi
2010     fi
2011 else
2012     # Meson uses its own Python interpreter to invoke other Python scripts,
2013     # but the user wants to use the one they specified with --python.
2014     #
2015     # We do not want to override the distro Python interpreter (and sometimes
2016     # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2017     # just require --meson=git|internal together with --python.
2018     if test "$explicit_python" = yes; then
2019         case "$meson" in
2020             git | internal) ;;
2021             *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2022         esac
2023     fi
2024 fi
2025
2026 if test "$meson" = git; then
2027     git_submodules="${git_submodules} meson"
2028 fi
2029
2030 case "$meson" in
2031     git | internal)
2032         meson="$python ${source_path}/meson/meson.py"
2033         ;;
2034     *) meson=$(command -v "$meson") ;;
2035 esac
2036
2037 # Probe for ninja
2038
2039 if test -z "$ninja"; then
2040     for c in ninja ninja-build samu; do
2041         if has $c; then
2042             ninja=$(command -v "$c")
2043             break
2044         fi
2045     done
2046     if test -z "$ninja"; then
2047       error_exit "Cannot find Ninja"
2048     fi
2049 fi
2050
2051 # Check that the C compiler works. Doing this here before testing
2052 # the host CPU ensures that we had a valid CC to autodetect the
2053 # $cpu var (and we should bail right here if that's not the case).
2054 # It also allows the help message to be printed without a CC.
2055 write_c_skeleton;
2056 if compile_object ; then
2057   : C compiler works ok
2058 else
2059     error_exit "\"$cc\" either does not exist or does not work"
2060 fi
2061 if ! compile_prog ; then
2062     error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2063 fi
2064
2065 # Consult white-list to determine whether to enable werror
2066 # by default.  Only enable by default for git builds
2067 if test -z "$werror" ; then
2068     if test "$git_submodules_action" != "ignore" && \
2069         { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2070         werror="yes"
2071     else
2072         werror="no"
2073     fi
2074 fi
2075
2076 if test "$targetos" = "bogus"; then
2077     # Now that we know that we're not printing the help and that
2078     # the compiler works (so the results of the check_defines we used
2079     # to identify the OS are reliable), if we didn't recognize the
2080     # host OS we should stop now.
2081     error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2082 fi
2083
2084 # Check whether the compiler matches our minimum requirements:
2085 cat > $TMPC << EOF
2086 #if defined(__clang_major__) && defined(__clang_minor__)
2087 # ifdef __apple_build_version__
2088 #  if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
2089 #   error You need at least XCode Clang v10.0 to compile QEMU
2090 #  endif
2091 # else
2092 #  if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
2093 #   error You need at least Clang v6.0 to compile QEMU
2094 #  endif
2095 # endif
2096 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2097 # if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
2098 #  error You need at least GCC v7.4.0 to compile QEMU
2099 # endif
2100 #else
2101 # error You either need GCC or Clang to compiler QEMU
2102 #endif
2103 int main (void) { return 0; }
2104 EOF
2105 if ! compile_prog "" "" ; then
2106     error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)"
2107 fi
2108
2109 # Accumulate -Wfoo and -Wno-bar separately.
2110 # We will list all of the enable flags first, and the disable flags second.
2111 # Note that we do not add -Werror, because that would enable it for all
2112 # configure tests. If a configure test failed due to -Werror this would
2113 # just silently disable some features, so it's too error prone.
2114
2115 warn_flags=
2116 add_to warn_flags -Wold-style-declaration
2117 add_to warn_flags -Wold-style-definition
2118 add_to warn_flags -Wtype-limits
2119 add_to warn_flags -Wformat-security
2120 add_to warn_flags -Wformat-y2k
2121 add_to warn_flags -Winit-self
2122 add_to warn_flags -Wignored-qualifiers
2123 add_to warn_flags -Wempty-body
2124 add_to warn_flags -Wnested-externs
2125 add_to warn_flags -Wendif-labels
2126 add_to warn_flags -Wexpansion-to-defined
2127 add_to warn_flags -Wimplicit-fallthrough=2
2128
2129 nowarn_flags=
2130 add_to nowarn_flags -Wno-initializer-overrides
2131 add_to nowarn_flags -Wno-missing-include-dirs
2132 add_to nowarn_flags -Wno-shift-negative-value
2133 add_to nowarn_flags -Wno-string-plus-int
2134 add_to nowarn_flags -Wno-typedef-redefinition
2135 add_to nowarn_flags -Wno-tautological-type-limit-compare
2136 add_to nowarn_flags -Wno-psabi
2137
2138 gcc_flags="$warn_flags $nowarn_flags"
2139
2140 cc_has_warning_flag() {
2141     write_c_skeleton;
2142
2143     # Use the positive sense of the flag when testing for -Wno-wombat
2144     # support (gcc will happily accept the -Wno- form of unknown
2145     # warning options).
2146     optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2147     compile_prog "-Werror $optflag" ""
2148 }
2149
2150 for flag in $gcc_flags; do
2151     if cc_has_warning_flag $flag ; then
2152         QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2153     fi
2154 done
2155
2156 if test "$stack_protector" != "no"; then
2157   cat > $TMPC << EOF
2158 int main(int argc, char *argv[])
2159 {
2160     char arr[64], *p = arr, *c = argv[0];
2161     while (*c) {
2162         *p++ = *c++;
2163     }
2164     return 0;
2165 }
2166 EOF
2167   gcc_flags="-fstack-protector-strong -fstack-protector-all"
2168   sp_on=0
2169   for flag in $gcc_flags; do
2170     # We need to check both a compile and a link, since some compiler
2171     # setups fail only on a .c->.o compile and some only at link time
2172     if compile_object "-Werror $flag" &&
2173        compile_prog "-Werror $flag" ""; then
2174       QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2175       QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2176       sp_on=1
2177       break
2178     fi
2179   done
2180   if test "$stack_protector" = yes; then
2181     if test $sp_on = 0; then
2182       error_exit "Stack protector not supported"
2183     fi
2184   fi
2185 fi
2186
2187 # Disable -Wmissing-braces on older compilers that warn even for
2188 # the "universal" C zero initializer {0}.
2189 cat > $TMPC << EOF
2190 struct {
2191   int a[2];
2192 } x = {0};
2193 EOF
2194 if compile_object "-Werror" "" ; then
2195   :
2196 else
2197   QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2198 fi
2199
2200 # Our module code doesn't support Windows
2201 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2202   error_exit "Modules are not available for Windows"
2203 fi
2204
2205 # module_upgrades is only reasonable if modules are enabled
2206 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2207   error_exit "Can't enable module-upgrades as Modules are not enabled"
2208 fi
2209
2210 # Static linking is not possible with plugins, modules or PIE
2211 if test "$static" = "yes" ; then
2212   if test "$modules" = "yes" ; then
2213     error_exit "static and modules are mutually incompatible"
2214   fi
2215   if test "$plugins" = "yes"; then
2216     error_exit "static and plugins are mutually incompatible"
2217   else
2218     plugins="no"
2219   fi
2220 fi
2221
2222 # Unconditional check for compiler __thread support
2223   cat > $TMPC << EOF
2224 static __thread int tls_var;
2225 int main(void) { return tls_var; }
2226 EOF
2227
2228 if ! compile_prog "-Werror" "" ; then
2229     error_exit "Your compiler does not support the __thread specifier for " \
2230         "Thread-Local Storage (TLS). Please upgrade to a version that does."
2231 fi
2232
2233 cat > $TMPC << EOF
2234
2235 #ifdef __linux__
2236 #  define THREAD __thread
2237 #else
2238 #  define THREAD
2239 #endif
2240 static THREAD int tls_var;
2241 int main(void) { return tls_var; }
2242 EOF
2243
2244 # Check we support --no-pie first; we will need this for building ROMs.
2245 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2246   CFLAGS_NOPIE="-fno-pie"
2247 fi
2248
2249 if test "$static" = "yes"; then
2250   if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2251     CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2252     QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2253     pie="yes"
2254   elif test "$pie" = "yes"; then
2255     error_exit "-static-pie not available due to missing toolchain support"
2256   else
2257     QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2258     pie="no"
2259   fi
2260 elif test "$pie" = "no"; then
2261   CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2262 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2263   CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2264   CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2265   pie="yes"
2266 elif test "$pie" = "yes"; then
2267   error_exit "PIE not available due to missing toolchain support"
2268 else
2269   echo "Disabling PIE due to missing toolchain support"
2270   pie="no"
2271 fi
2272
2273 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2274 # The combination is known as "full relro", because .got.plt is read-only too.
2275 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2276   QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2277 fi
2278
2279 ##########################################
2280 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2281 # use i686 as default anyway, but for those that don't, an explicit
2282 # specification is necessary
2283
2284 if test "$cpu" = "i386"; then
2285   cat > $TMPC << EOF
2286 static int sfaa(int *ptr)
2287 {
2288   return __sync_fetch_and_and(ptr, 0);
2289 }
2290
2291 int main(void)
2292 {
2293   int val = 42;
2294   val = __sync_val_compare_and_swap(&val, 0, 1);
2295   sfaa(&val);
2296   return val;
2297 }
2298 EOF
2299   if ! compile_prog "" "" ; then
2300     QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2301   fi
2302 fi
2303
2304 #########################################
2305 # Solaris specific configure tool chain decisions
2306
2307 if test "$solaris" = "yes" ; then
2308   if has ar; then
2309     :
2310   else
2311     if test -f /usr/ccs/bin/ar ; then
2312       error_exit "No path includes ar" \
2313           "Add /usr/ccs/bin to your path and rerun configure"
2314     fi
2315     error_exit "No path includes ar"
2316   fi
2317 fi
2318
2319 if test "$tcg" = "enabled"; then
2320     git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
2321     git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
2322 fi
2323
2324 if test -z "${target_list+xxx}" ; then
2325     default_targets=yes
2326     for target in $default_target_list; do
2327         target_list="$target_list $target"
2328     done
2329     target_list="${target_list# }"
2330 else
2331     default_targets=no
2332     target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2333     for target in $target_list; do
2334         # Check that we recognised the target name; this allows a more
2335         # friendly error message than if we let it fall through.
2336         case " $default_target_list " in
2337             *" $target "*)
2338                 ;;
2339             *)
2340                 error_exit "Unknown target name '$target'"
2341                 ;;
2342         esac
2343     done
2344 fi
2345
2346 for target in $target_list; do
2347     # if a deprecated target is enabled we note it here
2348     if echo "$deprecated_targets_list" | grep -q "$target"; then
2349         add_to deprecated_features $target
2350     fi
2351 done
2352
2353 # see if system emulation was really requested
2354 case " $target_list " in
2355   *"-softmmu "*) softmmu=yes
2356   ;;
2357   *) softmmu=no
2358   ;;
2359 esac
2360
2361 feature_not_found() {
2362   feature=$1
2363   remedy=$2
2364
2365   error_exit "User requested feature $feature" \
2366       "configure was not able to find it." \
2367       "$remedy"
2368 }
2369
2370 # ---
2371 # big/little endian test
2372 cat > $TMPC << EOF
2373 #include <stdio.h>
2374 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2375 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2376 int main(int argc, char *argv[])
2377 {
2378     return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
2379 }
2380 EOF
2381
2382 if compile_prog ; then
2383     if strings -a $TMPE | grep -q BiGeNdIaN ; then
2384         bigendian="yes"
2385     elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then
2386         bigendian="no"
2387     else
2388         echo big/little test failed
2389         exit 1
2390     fi
2391 else
2392     echo big/little test failed
2393     exit 1
2394 fi
2395
2396 ##########################################
2397 # system tools
2398 if test -z "$want_tools"; then
2399     if test "$softmmu" = "no"; then
2400         want_tools=no
2401     else
2402         want_tools=yes
2403     fi
2404 fi
2405
2406 ##########################################
2407 # Disable features only meaningful for system-mode emulation
2408 if test "$softmmu" = "no"; then
2409     audio_drv_list=""
2410 fi
2411
2412 ##########################################
2413 # L2TPV3 probe
2414
2415 cat > $TMPC <<EOF
2416 #include <sys/socket.h>
2417 #include <linux/ip.h>
2418 int main(void) { return sizeof(struct mmsghdr); }
2419 EOF
2420 if compile_prog "" "" ; then
2421   l2tpv3=yes
2422 else
2423   l2tpv3=no
2424 fi
2425
2426 cat > $TMPC <<EOF
2427 #include <sys/mman.h>
2428 int main(int argc, char *argv[]) {
2429     return mlockall(MCL_FUTURE);
2430 }
2431 EOF
2432 if compile_prog "" "" ; then
2433   have_mlockall=yes
2434 else
2435   have_mlockall=no
2436 fi
2437
2438 #########################################
2439 # vhost interdependencies and host support
2440
2441 # vhost backends
2442 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2443   error_exit "vhost-user is only available on Linux"
2444 fi
2445 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2446 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2447   error_exit "vhost-vdpa is only available on Linux"
2448 fi
2449 test "$vhost_kernel" = "" && vhost_kernel=$linux
2450 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2451   error_exit "vhost-kernel is only available on Linux"
2452 fi
2453
2454 # vhost-kernel devices
2455 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2456 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2457   error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2458 fi
2459 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2460 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2461   error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2462 fi
2463
2464 # vhost-user backends
2465 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2466 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2467   error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2468 fi
2469 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2470 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2471   error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2472 fi
2473 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2474 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2475   error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2476 fi
2477 #vhost-vdpa backends
2478 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2479 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2480   error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2481 fi
2482
2483 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2484 if test "$vhost_net" = ""; then
2485   test "$vhost_net_user" = "yes" && vhost_net=yes
2486   test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2487   test "$vhost_kernel" = "yes" && vhost_net=yes
2488 fi
2489
2490 ##########################################
2491 # pkg-config probe
2492
2493 if ! has "$pkg_config_exe"; then
2494   error_exit "pkg-config binary '$pkg_config_exe' not found"
2495 fi
2496
2497 ##########################################
2498 # NPTL probe
2499
2500 if test "$linux_user" = "yes"; then
2501   cat > $TMPC <<EOF
2502 #include <sched.h>
2503 #include <linux/futex.h>
2504 int main(void) {
2505 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2506 #error bork
2507 #endif
2508   return 0;
2509 }
2510 EOF
2511   if ! compile_object ; then
2512     feature_not_found "nptl" "Install glibc and linux kernel headers."
2513   fi
2514 fi
2515
2516 ##########################################
2517 # xen probe
2518
2519 if test "$xen" != "disabled" ; then
2520   # Check whether Xen library path is specified via --extra-ldflags to avoid
2521   # overriding this setting with pkg-config output. If not, try pkg-config
2522   # to obtain all needed flags.
2523
2524   if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2525      $pkg_config --exists xencontrol ; then
2526     xen_ctrl_version="$(printf '%d%02d%02d' \
2527       $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2528     xen=enabled
2529     xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
2530     xen_pc="$xen_pc xenevtchn xendevicemodel"
2531     if $pkg_config --exists xentoolcore; then
2532       xen_pc="$xen_pc xentoolcore"
2533     fi
2534     xen_cflags="$($pkg_config --cflags $xen_pc)"
2535     xen_libs="$($pkg_config --libs $xen_pc)"
2536   else
2537
2538     xen_libs="-lxenstore -lxenctrl"
2539     xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2540
2541     # First we test whether Xen headers and libraries are available.
2542     # If no, we are done and there is no Xen support.
2543     # If yes, more tests are run to detect the Xen version.
2544
2545     # Xen (any)
2546     cat > $TMPC <<EOF
2547 #include <xenctrl.h>
2548 int main(void) {
2549   return 0;
2550 }
2551 EOF
2552     if ! compile_prog "" "$xen_libs" ; then
2553       # Xen not found
2554       if test "$xen" = "enabled" ; then
2555         feature_not_found "xen" "Install xen devel"
2556       fi
2557       xen=disabled
2558
2559     # Xen unstable
2560     elif
2561         cat > $TMPC <<EOF &&
2562 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2563 #define __XEN_TOOLS__
2564 #include <xendevicemodel.h>
2565 #include <xenforeignmemory.h>
2566 int main(void) {
2567   xendevicemodel_handle *xd;
2568   xenforeignmemory_handle *xfmem;
2569
2570   xd = xendevicemodel_open(0, 0);
2571   xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2572
2573   xfmem = xenforeignmemory_open(0, 0);
2574   xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2575
2576   return 0;
2577 }
2578 EOF
2579         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2580       then
2581       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2582       xen_ctrl_version=41100
2583       xen=enabled
2584     elif
2585         cat > $TMPC <<EOF &&
2586 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2587 #include <xenforeignmemory.h>
2588 #include <xentoolcore.h>
2589 int main(void) {
2590   xenforeignmemory_handle *xfmem;
2591
2592   xfmem = xenforeignmemory_open(0, 0);
2593   xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2594   xentoolcore_restrict_all(0);
2595
2596   return 0;
2597 }
2598 EOF
2599         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2600       then
2601       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2602       xen_ctrl_version=41000
2603       xen=enabled
2604     elif
2605         cat > $TMPC <<EOF &&
2606 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2607 #define __XEN_TOOLS__
2608 #include <xendevicemodel.h>
2609 int main(void) {
2610   xendevicemodel_handle *xd;
2611
2612   xd = xendevicemodel_open(0, 0);
2613   xendevicemodel_close(xd);
2614
2615   return 0;
2616 }
2617 EOF
2618         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2619       then
2620       xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2621       xen_ctrl_version=40900
2622       xen=enabled
2623     elif
2624         cat > $TMPC <<EOF &&
2625 /*
2626  * If we have stable libs the we don't want the libxc compat
2627  * layers, regardless of what CFLAGS we may have been given.
2628  *
2629  * Also, check if xengnttab_grant_copy_segment_t is defined and
2630  * grant copy operation is implemented.
2631  */
2632 #undef XC_WANT_COMPAT_EVTCHN_API
2633 #undef XC_WANT_COMPAT_GNTTAB_API
2634 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2635 #include <xenctrl.h>
2636 #include <xenstore.h>
2637 #include <xenevtchn.h>
2638 #include <xengnttab.h>
2639 #include <xenforeignmemory.h>
2640 #include <stdint.h>
2641 #include <xen/hvm/hvm_info_table.h>
2642 #if !defined(HVM_MAX_VCPUS)
2643 # error HVM_MAX_VCPUS not defined
2644 #endif
2645 int main(void) {
2646   xc_interface *xc = NULL;
2647   xenforeignmemory_handle *xfmem;
2648   xenevtchn_handle *xe;
2649   xengnttab_handle *xg;
2650   xengnttab_grant_copy_segment_t* seg = NULL;
2651
2652   xs_daemon_open();
2653
2654   xc = xc_interface_open(0, 0, 0);
2655   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2656   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2657   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2658   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2659
2660   xfmem = xenforeignmemory_open(0, 0);
2661   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2662
2663   xe = xenevtchn_open(0, 0);
2664   xenevtchn_fd(xe);
2665
2666   xg = xengnttab_open(0, 0);
2667   xengnttab_grant_copy(xg, 0, seg);
2668
2669   return 0;
2670 }
2671 EOF
2672         compile_prog "" "$xen_libs $xen_stable_libs"
2673       then
2674       xen_ctrl_version=40800
2675       xen=enabled
2676     elif
2677         cat > $TMPC <<EOF &&
2678 /*
2679  * If we have stable libs the we don't want the libxc compat
2680  * layers, regardless of what CFLAGS we may have been given.
2681  */
2682 #undef XC_WANT_COMPAT_EVTCHN_API
2683 #undef XC_WANT_COMPAT_GNTTAB_API
2684 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2685 #include <xenctrl.h>
2686 #include <xenstore.h>
2687 #include <xenevtchn.h>
2688 #include <xengnttab.h>
2689 #include <xenforeignmemory.h>
2690 #include <stdint.h>
2691 #include <xen/hvm/hvm_info_table.h>
2692 #if !defined(HVM_MAX_VCPUS)
2693 # error HVM_MAX_VCPUS not defined
2694 #endif
2695 int main(void) {
2696   xc_interface *xc = NULL;
2697   xenforeignmemory_handle *xfmem;
2698   xenevtchn_handle *xe;
2699   xengnttab_handle *xg;
2700
2701   xs_daemon_open();
2702
2703   xc = xc_interface_open(0, 0, 0);
2704   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2705   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2706   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2707   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2708
2709   xfmem = xenforeignmemory_open(0, 0);
2710   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2711
2712   xe = xenevtchn_open(0, 0);
2713   xenevtchn_fd(xe);
2714
2715   xg = xengnttab_open(0, 0);
2716   xengnttab_map_grant_ref(xg, 0, 0, 0);
2717
2718   return 0;
2719 }
2720 EOF
2721         compile_prog "" "$xen_libs $xen_stable_libs"
2722       then
2723       xen_ctrl_version=40701
2724       xen=enabled
2725
2726     # Xen 4.6
2727     elif
2728         cat > $TMPC <<EOF &&
2729 #include <xenctrl.h>
2730 #include <xenstore.h>
2731 #include <stdint.h>
2732 #include <xen/hvm/hvm_info_table.h>
2733 #if !defined(HVM_MAX_VCPUS)
2734 # error HVM_MAX_VCPUS not defined
2735 #endif
2736 int main(void) {
2737   xc_interface *xc;
2738   xs_daemon_open();
2739   xc = xc_interface_open(0, 0, 0);
2740   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2741   xc_gnttab_open(NULL, 0);
2742   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2743   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2744   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2745   xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2746   return 0;
2747 }
2748 EOF
2749         compile_prog "" "$xen_libs"
2750       then
2751       xen_ctrl_version=40600
2752       xen=enabled
2753
2754     # Xen 4.5
2755     elif
2756         cat > $TMPC <<EOF &&
2757 #include <xenctrl.h>
2758 #include <xenstore.h>
2759 #include <stdint.h>
2760 #include <xen/hvm/hvm_info_table.h>
2761 #if !defined(HVM_MAX_VCPUS)
2762 # error HVM_MAX_VCPUS not defined
2763 #endif
2764 int main(void) {
2765   xc_interface *xc;
2766   xs_daemon_open();
2767   xc = xc_interface_open(0, 0, 0);
2768   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2769   xc_gnttab_open(NULL, 0);
2770   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2771   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2772   xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2773   return 0;
2774 }
2775 EOF
2776         compile_prog "" "$xen_libs"
2777       then
2778       xen_ctrl_version=40500
2779       xen=enabled
2780
2781     elif
2782         cat > $TMPC <<EOF &&
2783 #include <xenctrl.h>
2784 #include <xenstore.h>
2785 #include <stdint.h>
2786 #include <xen/hvm/hvm_info_table.h>
2787 #if !defined(HVM_MAX_VCPUS)
2788 # error HVM_MAX_VCPUS not defined
2789 #endif
2790 int main(void) {
2791   xc_interface *xc;
2792   xs_daemon_open();
2793   xc = xc_interface_open(0, 0, 0);
2794   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2795   xc_gnttab_open(NULL, 0);
2796   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2797   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2798   return 0;
2799 }
2800 EOF
2801         compile_prog "" "$xen_libs"
2802       then
2803       xen_ctrl_version=40200
2804       xen=enabled
2805
2806     else
2807       if test "$xen" = "enabled" ; then
2808         feature_not_found "xen (unsupported version)" \
2809                           "Install a supported xen (xen 4.2 or newer)"
2810       fi
2811       xen=disabled
2812     fi
2813
2814     if test "$xen" = enabled; then
2815       if test $xen_ctrl_version -ge 40701  ; then
2816         xen_libs="$xen_libs $xen_stable_libs "
2817       fi
2818     fi
2819   fi
2820 fi
2821
2822 ##########################################
2823 # RDMA needs OpenFabrics libraries
2824 if test "$rdma" != "no" ; then
2825   cat > $TMPC <<EOF
2826 #include <rdma/rdma_cma.h>
2827 int main(void) { return 0; }
2828 EOF
2829   rdma_libs="-lrdmacm -libverbs -libumad"
2830   if compile_prog "" "$rdma_libs" ; then
2831     rdma="yes"
2832   else
2833     if test "$rdma" = "yes" ; then
2834         error_exit \
2835             " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2836             " Your options:" \
2837             "  (1) Fast: Install infiniband packages (devel) from your distro." \
2838             "  (2) Cleanest: Install libraries from www.openfabrics.org" \
2839             "  (3) Also: Install softiwarp if you don't have RDMA hardware"
2840     fi
2841     rdma="no"
2842   fi
2843 fi
2844
2845 ##########################################
2846 # PVRDMA detection
2847
2848 cat > $TMPC <<EOF &&
2849 #include <sys/mman.h>
2850
2851 int
2852 main(void)
2853 {
2854     char buf = 0;
2855     void *addr = &buf;
2856     addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2857
2858     return 0;
2859 }
2860 EOF
2861
2862 if test "$rdma" = "yes" ; then
2863     case "$pvrdma" in
2864     "")
2865         if compile_prog "" ""; then
2866             pvrdma="yes"
2867         else
2868             pvrdma="no"
2869         fi
2870         ;;
2871     "yes")
2872         if ! compile_prog "" ""; then
2873             error_exit "PVRDMA is not supported since mremap is not implemented"
2874         fi
2875         pvrdma="yes"
2876         ;;
2877     "no")
2878         pvrdma="no"
2879         ;;
2880     esac
2881 else
2882     if test "$pvrdma" = "yes" ; then
2883         error_exit "PVRDMA requires rdma suppport"
2884     fi
2885     pvrdma="no"
2886 fi
2887
2888 # Let's see if enhanced reg_mr is supported
2889 if test "$pvrdma" = "yes" ; then
2890
2891 cat > $TMPC <<EOF &&
2892 #include <infiniband/verbs.h>
2893
2894 int
2895 main(void)
2896 {
2897     struct ibv_mr *mr;
2898     struct ibv_pd *pd = NULL;
2899     size_t length = 10;
2900     uint64_t iova = 0;
2901     int access = 0;
2902     void *addr = NULL;
2903
2904     mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
2905
2906     ibv_dereg_mr(mr);
2907
2908     return 0;
2909 }
2910 EOF
2911     if ! compile_prog "" "-libverbs"; then
2912         QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
2913     fi
2914 fi
2915
2916 ##########################################
2917 # xfsctl() probe, used for file-posix.c
2918 if test "$xfs" != "no" ; then
2919   cat > $TMPC << EOF
2920 #include <stddef.h>  /* NULL */
2921 #include <xfs/xfs.h>
2922 int main(void)
2923 {
2924     xfsctl(NULL, 0, 0, NULL);
2925     return 0;
2926 }
2927 EOF
2928   if compile_prog "" "" ; then
2929     xfs="yes"
2930   else
2931     if test "$xfs" = "yes" ; then
2932       feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
2933     fi
2934     xfs=no
2935   fi
2936 fi
2937
2938 ##########################################
2939 # vde libraries probe
2940 if test "$vde" != "no" ; then
2941   vde_libs="-lvdeplug"
2942   cat > $TMPC << EOF
2943 #include <libvdeplug.h>
2944 int main(void)
2945 {
2946     struct vde_open_args a = {0, 0, 0};
2947     char s[] = "";
2948     vde_open(s, s, &a);
2949     return 0;
2950 }
2951 EOF
2952   if compile_prog "" "$vde_libs" ; then
2953     vde=yes
2954   else
2955     if test "$vde" = "yes" ; then
2956       feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2957     fi
2958     vde=no
2959   fi
2960 fi
2961
2962 ##########################################
2963 # netmap support probe
2964 # Apart from looking for netmap headers, we make sure that the host API version
2965 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2966 # a minor/major version number. Minor new features will be marked with values up
2967 # to 15, and if something happens that requires a change to the backend we will
2968 # move above 15, submit the backend fixes and modify this two bounds.
2969 if test "$netmap" != "no" ; then
2970   cat > $TMPC << EOF
2971 #include <inttypes.h>
2972 #include <net/if.h>
2973 #include <net/netmap.h>
2974 #include <net/netmap_user.h>
2975 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2976 #error
2977 #endif
2978 int main(void) { return 0; }
2979 EOF
2980   if compile_prog "" "" ; then
2981     netmap=yes
2982   else
2983     if test "$netmap" = "yes" ; then
2984       feature_not_found "netmap"
2985     fi
2986     netmap=no
2987   fi
2988 fi
2989
2990 ##########################################
2991 # detect CoreAudio
2992 if test "$coreaudio" != "no" ; then
2993   coreaudio_libs="-framework CoreAudio"
2994   cat > $TMPC << EOF
2995 #include <CoreAudio/CoreAudio.h>
2996 int main(void)
2997 {
2998   return (int)AudioGetCurrentHostTime();
2999 }
3000 EOF
3001   if compile_prog "" "$coreaudio_libs" ; then
3002     coreaudio=yes
3003   else
3004     coreaudio=no
3005   fi
3006 fi
3007
3008 ##########################################
3009 # Sound support libraries probe
3010
3011 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3012 for drv in $audio_drv_list; do
3013     case $drv in
3014     alsa | try-alsa)
3015     if $pkg_config alsa --exists; then
3016         alsa_libs=$($pkg_config alsa --libs)
3017         alsa_cflags=$($pkg_config alsa --cflags)
3018         alsa=yes
3019         if test "$drv" = "try-alsa"; then
3020             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3021         fi
3022     else
3023         if test "$drv" = "try-alsa"; then
3024             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3025         else
3026             error_exit "$drv check failed" \
3027                 "Make sure to have the $drv libs and headers installed."
3028         fi
3029     fi
3030     ;;
3031
3032     pa | try-pa)
3033     if $pkg_config libpulse --exists; then
3034         libpulse=yes
3035         pulse_libs=$($pkg_config libpulse --libs)
3036         pulse_cflags=$($pkg_config libpulse --cflags)
3037         if test "$drv" = "try-pa"; then
3038             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3039         fi
3040     else
3041         if test "$drv" = "try-pa"; then
3042             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3043         else
3044             error_exit "$drv check failed" \
3045                 "Make sure to have the $drv libs and headers installed."
3046         fi
3047     fi
3048     ;;
3049
3050     sdl)
3051     if test "$sdl" = "no"; then
3052         error_exit "sdl not found or disabled, can not use sdl audio driver"
3053     fi
3054     ;;
3055
3056     try-sdl)
3057     if test "$sdl" = "no"; then
3058         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3059     else
3060         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3061     fi
3062     ;;
3063
3064     coreaudio | try-coreaudio)
3065     if test "$coreaudio" = "no"; then
3066       if test "$drv" = "try-coreaudio"; then
3067         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio//')
3068       else
3069         error_exit "$drv check failed" \
3070                 "Make sure to have the $drv is available."
3071       fi
3072     else
3073       coreaudio_libs="-framework CoreAudio"
3074       if test "$drv" = "try-coreaudio"; then
3075         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio/coreaudio/')
3076       fi
3077     fi
3078     ;;
3079
3080     dsound)
3081       dsound_libs="-lole32 -ldxguid"
3082       audio_win_int="yes"
3083     ;;
3084
3085     oss)
3086       oss_libs="$oss_lib"
3087     ;;
3088
3089     jack | try-jack)
3090     if $pkg_config jack --exists; then
3091         libjack=yes
3092         jack_libs=$($pkg_config jack --libs)
3093         if test "$drv" = "try-jack"; then
3094             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3095         fi
3096     else
3097         if test "$drv" = "try-jack"; then
3098             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3099         else
3100             error_exit "$drv check failed" \
3101                 "Make sure to have the $drv libs and headers installed."
3102         fi
3103     fi
3104     ;;
3105
3106     *)
3107     echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3108         error_exit "Unknown driver '$drv' selected" \
3109             "Possible drivers are: $audio_possible_drivers"
3110     }
3111     ;;
3112     esac
3113 done
3114
3115 ##########################################
3116 # plugin linker support probe
3117
3118 if test "$plugins" != "no"; then
3119
3120     #########################################
3121     # See if --dynamic-list is supported by the linker
3122
3123     ld_dynamic_list="no"
3124     cat > $TMPTXT <<EOF
3125 {
3126   foo;
3127 };
3128 EOF
3129
3130         cat > $TMPC <<EOF
3131 #include <stdio.h>
3132 void foo(void);
3133
3134 void foo(void)
3135 {
3136   printf("foo\n");
3137 }
3138
3139 int main(void)
3140 {
3141   foo();
3142   return 0;
3143 }
3144 EOF
3145
3146     if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
3147         ld_dynamic_list="yes"
3148     fi
3149
3150     #########################################
3151     # See if -exported_symbols_list is supported by the linker
3152
3153     ld_exported_symbols_list="no"
3154     cat > $TMPTXT <<EOF
3155   _foo
3156 EOF
3157
3158     if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
3159         ld_exported_symbols_list="yes"
3160     fi
3161
3162     if test "$ld_dynamic_list" = "no" &&
3163        test "$ld_exported_symbols_list" = "no" ; then
3164         if test "$plugins" = "yes"; then
3165             error_exit \
3166                 "Plugin support requires dynamic linking and specifying a set of symbols " \
3167                 "that are exported to plugins. Unfortunately your linker doesn't " \
3168                 "support the flag (--dynamic-list or -exported_symbols_list) used " \
3169                 "for this purpose."
3170         else
3171             plugins="no"
3172         fi
3173     else
3174         plugins="yes"
3175     fi
3176 fi
3177
3178 ##########################################
3179 # glib support probe
3180
3181 glib_req_ver=2.56
3182 glib_modules=gthread-2.0
3183 if test "$modules" = yes; then
3184     glib_modules="$glib_modules gmodule-export-2.0"
3185 elif test "$plugins" = "yes"; then
3186     glib_modules="$glib_modules gmodule-no-export-2.0"
3187 fi
3188
3189 for i in $glib_modules; do
3190     if $pkg_config --atleast-version=$glib_req_ver $i; then
3191         glib_cflags=$($pkg_config --cflags $i)
3192         glib_libs=$($pkg_config --libs $i)
3193     else
3194         error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3195     fi
3196 done
3197
3198 # This workaround is required due to a bug in pkg-config file for glib as it
3199 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3200
3201 if test "$static" = yes && test "$mingw32" = yes; then
3202     glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3203 fi
3204
3205 if ! test "$gio" = "no"; then
3206     pass=no
3207     if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3208         gio_cflags=$($pkg_config --cflags gio-2.0)
3209         gio_libs=$($pkg_config --libs gio-2.0)
3210         gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3211         if ! has "$gdbus_codegen"; then
3212             gdbus_codegen=
3213         fi
3214         # Check that the libraries actually work -- Ubuntu 18.04 ships
3215         # with pkg-config --static --libs data for gio-2.0 that is missing
3216         # -lblkid and will give a link error.
3217         cat > $TMPC <<EOF
3218 #include <gio/gio.h>
3219 int main(void)
3220 {
3221     g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3222     return 0;
3223 }
3224 EOF
3225         if compile_prog "$gio_cflags" "$gio_libs" ; then
3226             pass=yes
3227         else
3228             pass=no
3229         fi
3230
3231         if test "$pass" = "yes" &&
3232             $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3233             gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3234             gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3235         fi
3236     fi
3237
3238     if test "$pass" = "no"; then
3239         if test "$gio" = "yes"; then
3240             feature_not_found "gio" "Install libgio >= 2.0"
3241         else
3242             gio=no
3243         fi
3244     else
3245         gio=yes
3246     fi
3247 fi
3248
3249 # Sanity check that the current size_t matches the
3250 # size that glib thinks it should be. This catches
3251 # problems on multi-arch where people try to build
3252 # 32-bit QEMU while pointing at 64-bit glib headers
3253 cat > $TMPC <<EOF
3254 #include <glib.h>
3255 #include <unistd.h>
3256
3257 #define QEMU_BUILD_BUG_ON(x) \
3258   typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3259
3260 int main(void) {
3261    QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3262    return 0;
3263 }
3264 EOF
3265
3266 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3267     error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3268                "You probably need to set PKG_CONFIG_LIBDIR"\
3269                "to point to the right pkg-config files for your"\
3270                "build target"
3271 fi
3272
3273 # Silence clang warnings triggered by glib < 2.57.2
3274 cat > $TMPC << EOF
3275 #include <glib.h>
3276 typedef struct Foo {
3277     int i;
3278 } Foo;
3279 static void foo_free(Foo *f)
3280 {
3281     g_free(f);
3282 }
3283 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3284 int main(void) { return 0; }
3285 EOF
3286 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3287     if cc_has_warning_flag "-Wno-unused-function"; then
3288         glib_cflags="$glib_cflags -Wno-unused-function"
3289         CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
3290     fi
3291 fi
3292
3293 ##########################################
3294 # SHA command probe for modules
3295 if test "$modules" = yes; then
3296     shacmd_probe="sha1sum sha1 shasum"
3297     for c in $shacmd_probe; do
3298         if has $c; then
3299             shacmd="$c"
3300             break
3301         fi
3302     done
3303     if test "$shacmd" = ""; then
3304         error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3305     fi
3306 fi
3307
3308 ##########################################
3309 # pthread probe
3310 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3311
3312 pthread=no
3313 cat > $TMPC << EOF
3314 #include <pthread.h>
3315 static void *f(void *p) { return NULL; }
3316 int main(void) {
3317   pthread_t thread;
3318   pthread_create(&thread, 0, f, 0);
3319   return 0;
3320 }
3321 EOF
3322 if compile_prog "" "" ; then
3323   pthread=yes
3324 else
3325   for pthread_lib in $PTHREADLIBS_LIST; do
3326     if compile_prog "" "$pthread_lib" ; then
3327       pthread=yes
3328       break
3329     fi
3330   done
3331 fi
3332
3333 if test "$mingw32" != yes && test "$pthread" = no; then
3334   error_exit "pthread check failed" \
3335       "Make sure to have the pthread libs and headers installed."
3336 fi
3337
3338 # check for pthread_setname_np with thread id
3339 pthread_setname_np_w_tid=no
3340 cat > $TMPC << EOF
3341 #include <pthread.h>
3342
3343 static void *f(void *p) { return NULL; }
3344 int main(void)
3345 {
3346     pthread_t thread;
3347     pthread_create(&thread, 0, f, 0);
3348     pthread_setname_np(thread, "QEMU");
3349     return 0;
3350 }
3351 EOF
3352 if compile_prog "" "$pthread_lib" ; then
3353   pthread_setname_np_w_tid=yes
3354 fi
3355
3356 # check for pthread_setname_np without thread id
3357 pthread_setname_np_wo_tid=no
3358 cat > $TMPC << EOF
3359 #include <pthread.h>
3360
3361 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3362 int main(void)
3363 {
3364     pthread_t thread;
3365     pthread_create(&thread, 0, f, 0);
3366     return 0;
3367 }
3368 EOF
3369 if compile_prog "" "$pthread_lib" ; then
3370   pthread_setname_np_wo_tid=yes
3371 fi
3372
3373 ##########################################
3374 # libssh probe
3375 if test "$libssh" != "no" ; then
3376   if $pkg_config --exists "libssh >= 0.8.7"; then
3377     libssh_cflags=$($pkg_config libssh --cflags)
3378     libssh_libs=$($pkg_config libssh --libs)
3379     libssh=yes
3380   else
3381     if test "$libssh" = "yes" ; then
3382       error_exit "libssh required for --enable-libssh"
3383     fi
3384     libssh=no
3385   fi
3386 fi
3387
3388 ##########################################
3389 # linux-aio probe
3390
3391 if test "$linux_aio" != "no" ; then
3392   cat > $TMPC <<EOF
3393 #include <libaio.h>
3394 #include <sys/eventfd.h>
3395 #include <stddef.h>
3396 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3397 EOF
3398   if compile_prog "" "-laio" ; then
3399     linux_aio=yes
3400   else
3401     if test "$linux_aio" = "yes" ; then
3402       feature_not_found "linux AIO" "Install libaio devel"
3403     fi
3404     linux_aio=no
3405   fi
3406 fi
3407
3408 ##########################################
3409 # TPM emulation is only on POSIX
3410
3411 if test "$tpm" = ""; then
3412   if test "$mingw32" = "yes"; then
3413     tpm=no
3414   else
3415     tpm=yes
3416   fi
3417 elif test "$tpm" = "yes"; then
3418   if test "$mingw32" = "yes" ; then
3419     error_exit "TPM emulation only available on POSIX systems"
3420   fi
3421 fi
3422
3423 ##########################################
3424 # iovec probe
3425 cat > $TMPC <<EOF
3426 #include <sys/types.h>
3427 #include <sys/uio.h>
3428 #include <unistd.h>
3429 int main(void) { return sizeof(struct iovec); }
3430 EOF
3431 iovec=no
3432 if compile_prog "" "" ; then
3433   iovec=yes
3434 fi
3435
3436 ##########################################
3437 # fdt probe
3438
3439 case "$fdt" in
3440   auto | enabled | internal)
3441     # Simpler to always update submodule, even if not needed.
3442     git_submodules="${git_submodules} dtc"
3443     ;;
3444 esac
3445
3446 ##########################################
3447 # opengl probe (for sdl2, gtk)
3448
3449 if test "$opengl" != "no" ; then
3450   epoxy=no
3451   if $pkg_config epoxy; then
3452     cat > $TMPC << EOF
3453 #include <epoxy/egl.h>
3454 int main(void) { return 0; }
3455 EOF
3456     if compile_prog "" "" ; then
3457       epoxy=yes
3458     fi
3459   fi
3460
3461   if test "$epoxy" = "yes" ; then
3462     opengl_cflags="$($pkg_config --cflags epoxy)"
3463     opengl_libs="$($pkg_config --libs epoxy)"
3464     opengl=yes
3465   else
3466     if test "$opengl" = "yes" ; then
3467       feature_not_found "opengl" "Please install epoxy with EGL"
3468     fi
3469     opengl_cflags=""
3470     opengl_libs=""
3471     opengl=no
3472   fi
3473 fi
3474
3475 ##########################################
3476 # libnuma probe
3477
3478 if test "$numa" != "no" ; then
3479   cat > $TMPC << EOF
3480 #include <numa.h>
3481 int main(void) { return numa_available(); }
3482 EOF
3483
3484   if compile_prog "" "-lnuma" ; then
3485     numa=yes
3486     numa_libs="-lnuma"
3487   else
3488     if test "$numa" = "yes" ; then
3489       feature_not_found "numa" "install numactl devel"
3490     fi
3491     numa=no
3492   fi
3493 fi
3494
3495 malloc=system
3496 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3497     echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3498     exit 1
3499 elif test "$tcmalloc" = "yes" ; then
3500     malloc=tcmalloc
3501 elif test "$jemalloc" = "yes" ; then
3502     malloc=jemalloc
3503 fi
3504
3505 # check for usbfs
3506 have_usbfs=no
3507 if test "$linux_user" = "yes"; then
3508   cat > $TMPC << EOF
3509 #include <linux/usbdevice_fs.h>
3510
3511 #ifndef USBDEVFS_GET_CAPABILITIES
3512 #error "USBDEVFS_GET_CAPABILITIES undefined"
3513 #endif
3514
3515 #ifndef USBDEVFS_DISCONNECT_CLAIM
3516 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
3517 #endif
3518
3519 int main(void)
3520 {
3521     return 0;
3522 }
3523 EOF
3524   if compile_prog "" ""; then
3525     have_usbfs=yes
3526   fi
3527 fi
3528
3529 ##########################################
3530 # spice probe
3531 if test "$spice_protocol" != "no" ; then
3532   spice_protocol_cflags=$($pkg_config --cflags spice-protocol 2>/dev/null)
3533   if $pkg_config --atleast-version=0.12.3 spice-protocol; then
3534     spice_protocol="yes"
3535   else
3536     if test "$spice_protocol" = "yes" ; then
3537       feature_not_found "spice_protocol" \
3538           "Install spice-protocol(>=0.12.3) devel"
3539     fi
3540     spice_protocol="no"
3541   fi
3542 fi
3543
3544 if test "$spice" != "no" ; then
3545   cat > $TMPC << EOF
3546 #include <spice.h>
3547 int main(void) { spice_server_new(); return 0; }
3548 EOF
3549   spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3550   spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3551   if $pkg_config --atleast-version=0.12.5 spice-server && \
3552      test "$spice_protocol" = "yes" && \
3553      compile_prog "$spice_cflags" "$spice_libs" ; then
3554     spice="yes"
3555   else
3556     if test "$spice" = "yes" ; then
3557       feature_not_found "spice" \
3558           "Install spice-server(>=0.12.5) devel"
3559     fi
3560     spice="no"
3561   fi
3562 fi
3563
3564 ##########################################
3565 # check if we have VSS SDK headers for win
3566
3567 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3568         test "$vss_win32_sdk" != "no" ; then
3569   case "$vss_win32_sdk" in
3570     "")   vss_win32_include="-isystem $source_path" ;;
3571     *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3572           # handle path with spaces. So we symlink the headers into ".sdk/vss".
3573           vss_win32_include="-isystem $source_path/.sdk/vss"
3574           symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3575           ;;
3576     *)    vss_win32_include="-isystem $vss_win32_sdk"
3577   esac
3578   cat > $TMPC << EOF
3579 #define __MIDL_user_allocate_free_DEFINED__
3580 #include <inc/win2003/vss.h>
3581 int main(void) { return VSS_CTX_BACKUP; }
3582 EOF
3583   if compile_prog "$vss_win32_include" "" ; then
3584     guest_agent_with_vss="yes"
3585     QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3586     libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3587     qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
3588   else
3589     if test "$vss_win32_sdk" != "" ; then
3590       echo "ERROR: Please download and install Microsoft VSS SDK:"
3591       echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3592       echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3593       echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
3594       echo "ERROR: The headers are extracted in the directory \`inc'."
3595       feature_not_found "VSS support"
3596     fi
3597     guest_agent_with_vss="no"
3598   fi
3599 fi
3600
3601 ##########################################
3602 # lookup Windows platform SDK (if not specified)
3603 # The SDK is needed only to build .tlb (type library) file of guest agent
3604 # VSS provider from the source. It is usually unnecessary because the
3605 # pre-compiled .tlb file is included.
3606
3607 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3608         test "$guest_agent_with_vss" = "yes" ; then
3609   if test -z "$win_sdk"; then
3610     programfiles="$PROGRAMFILES"
3611     test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3612     if test -n "$programfiles"; then
3613       win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3614     else
3615       feature_not_found "Windows SDK"
3616     fi
3617   elif test "$win_sdk" = "no"; then
3618     win_sdk=""
3619   fi
3620 fi
3621
3622 ##########################################
3623 # check if mingw environment provides a recent ntddscsi.h
3624 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
3625   cat > $TMPC << EOF
3626 #include <windows.h>
3627 #include <ntddscsi.h>
3628 int main(void) {
3629 #if !defined(IOCTL_SCSI_GET_ADDRESS)
3630 #error Missing required ioctl definitions
3631 #endif
3632   SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
3633   return addr.Lun;
3634 }
3635 EOF
3636   if compile_prog "" "" ; then
3637     guest_agent_ntddscsi=yes
3638     libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
3639   fi
3640 fi
3641
3642 ##########################################
3643 # capstone
3644
3645 case "$capstone" in
3646   auto | enabled | internal)
3647     # Simpler to always update submodule, even if not needed.
3648     git_submodules="${git_submodules} capstone"
3649     ;;
3650 esac
3651
3652 ##########################################
3653 # check if we have posix_syslog
3654
3655 posix_syslog=no
3656 cat > $TMPC << EOF
3657 #include <syslog.h>
3658 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
3659 EOF
3660 if compile_prog "" "" ; then
3661     posix_syslog=yes
3662 fi
3663
3664 ##########################################
3665 # check if trace backend exists
3666
3667 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
3668 if test "$?" -ne 0 ; then
3669   error_exit "invalid trace backends" \
3670       "Please choose supported trace backends."
3671 fi
3672
3673 ##########################################
3674 # For 'ust' backend, test if ust headers are present
3675 if have_backend "ust"; then
3676   if $pkg_config lttng-ust --exists; then
3677     lttng_ust_libs=$($pkg_config --libs lttng-ust)
3678   else
3679     error_exit "Trace backend 'ust' missing lttng-ust header files"
3680   fi
3681 fi
3682
3683 ##########################################
3684 # For 'dtrace' backend, test if 'dtrace' command is present
3685 if have_backend "dtrace"; then
3686   if ! has 'dtrace' ; then
3687     error_exit "dtrace command is not found in PATH $PATH"
3688   fi
3689   trace_backend_stap="no"
3690   if has 'stap' ; then
3691     trace_backend_stap="yes"
3692
3693     # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
3694     # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
3695     # instead. QEMU --enable-modules depends on this because the SystemTap
3696     # semaphores are linked into the main binary and not the module's shared
3697     # object.
3698     QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
3699   fi
3700 fi
3701
3702 ##########################################
3703 # check and set a backend for coroutine
3704
3705 # We prefer ucontext, but it's not always possible. The fallback
3706 # is sigcontext. On Windows the only valid backend is the Windows
3707 # specific one.
3708
3709 ucontext_works=no
3710 if test "$darwin" != "yes"; then
3711   cat > $TMPC << EOF
3712 #include <ucontext.h>
3713 #ifdef __stub_makecontext
3714 #error Ignoring glibc stub makecontext which will always fail
3715 #endif
3716 int main(void) { makecontext(0, 0, 0); return 0; }
3717 EOF
3718   if compile_prog "" "" ; then
3719     ucontext_works=yes
3720   fi
3721 fi
3722
3723 if test "$coroutine" = ""; then
3724   if test "$mingw32" = "yes"; then
3725     coroutine=win32
3726   elif test "$ucontext_works" = "yes"; then
3727     coroutine=ucontext
3728   else
3729     coroutine=sigaltstack
3730   fi
3731 else
3732   case $coroutine in
3733   windows)
3734     if test "$mingw32" != "yes"; then
3735       error_exit "'windows' coroutine backend only valid for Windows"
3736     fi
3737     # Unfortunately the user visible backend name doesn't match the
3738     # coroutine-*.c filename for this case, so we have to adjust it here.
3739     coroutine=win32
3740     ;;
3741   ucontext)
3742     if test "$ucontext_works" != "yes"; then
3743       feature_not_found "ucontext"
3744     fi
3745     ;;
3746   sigaltstack)
3747     if test "$mingw32" = "yes"; then
3748       error_exit "only the 'windows' coroutine backend is valid for Windows"
3749     fi
3750     ;;
3751   *)
3752     error_exit "unknown coroutine backend $coroutine"
3753     ;;
3754   esac
3755 fi
3756
3757 if test "$coroutine_pool" = ""; then
3758   coroutine_pool=yes
3759 fi
3760
3761 if test "$debug_stack_usage" = "yes"; then
3762   if test "$coroutine_pool" = "yes"; then
3763     echo "WARN: disabling coroutine pool for stack usage debugging"
3764     coroutine_pool=no
3765   fi
3766 fi
3767
3768 ##################################################
3769 # SafeStack
3770
3771
3772 if test "$safe_stack" = "yes"; then
3773 cat > $TMPC << EOF
3774 int main(int argc, char *argv[])
3775 {
3776 #if ! __has_feature(safe_stack)
3777 #error SafeStack Disabled
3778 #endif
3779     return 0;
3780 }
3781 EOF
3782   flag="-fsanitize=safe-stack"
3783   # Check that safe-stack is supported and enabled.
3784   if compile_prog "-Werror $flag" "$flag"; then
3785     # Flag needed both at compilation and at linking
3786     QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3787     QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3788   else
3789     error_exit "SafeStack not supported by your compiler"
3790   fi
3791   if test "$coroutine" != "ucontext"; then
3792     error_exit "SafeStack is only supported by the coroutine backend ucontext"
3793   fi
3794 else
3795 cat > $TMPC << EOF
3796 int main(int argc, char *argv[])
3797 {
3798 #if defined(__has_feature)
3799 #if __has_feature(safe_stack)
3800 #error SafeStack Enabled
3801 #endif
3802 #endif
3803     return 0;
3804 }
3805 EOF
3806 if test "$safe_stack" = "no"; then
3807   # Make sure that safe-stack is disabled
3808   if ! compile_prog "-Werror" ""; then
3809     # SafeStack was already enabled, try to explicitly remove the feature
3810     flag="-fno-sanitize=safe-stack"
3811     if ! compile_prog "-Werror $flag" "$flag"; then
3812       error_exit "Configure cannot disable SafeStack"
3813     fi
3814     QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3815     QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3816   fi
3817 else # "$safe_stack" = ""
3818   # Set safe_stack to yes or no based on pre-existing flags
3819   if compile_prog "-Werror" ""; then
3820     safe_stack="no"
3821   else
3822     safe_stack="yes"
3823     if test "$coroutine" != "ucontext"; then
3824       error_exit "SafeStack is only supported by the coroutine backend ucontext"
3825     fi
3826   fi
3827 fi
3828 fi
3829
3830 ########################################
3831 # check if cpuid.h is usable.
3832
3833 cat > $TMPC << EOF
3834 #include <cpuid.h>
3835 int main(void) {
3836     unsigned a, b, c, d;
3837     int max = __get_cpuid_max(0, 0);
3838
3839     if (max >= 1) {
3840         __cpuid(1, a, b, c, d);
3841     }
3842
3843     if (max >= 7) {
3844         __cpuid_count(7, 0, a, b, c, d);
3845     }
3846
3847     return 0;
3848 }
3849 EOF
3850 if compile_prog "" "" ; then
3851     cpuid_h=yes
3852 fi
3853
3854 ##########################################
3855 # avx2 optimization requirement check
3856 #
3857 # There is no point enabling this if cpuid.h is not usable,
3858 # since we won't be able to select the new routines.
3859
3860 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
3861   cat > $TMPC << EOF
3862 #pragma GCC push_options
3863 #pragma GCC target("avx2")
3864 #include <cpuid.h>
3865 #include <immintrin.h>
3866 static int bar(void *a) {
3867     __m256i x = *(__m256i *)a;
3868     return _mm256_testz_si256(x, x);
3869 }
3870 int main(int argc, char *argv[]) { return bar(argv[0]); }
3871 EOF
3872   if compile_object "-Werror" ; then
3873     avx2_opt="yes"
3874   else
3875     avx2_opt="no"
3876   fi
3877 fi
3878
3879 ##########################################
3880 # avx512f optimization requirement check
3881 #
3882 # There is no point enabling this if cpuid.h is not usable,
3883 # since we won't be able to select the new routines.
3884 # by default, it is turned off.
3885 # if user explicitly want to enable it, check environment
3886
3887 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
3888   cat > $TMPC << EOF
3889 #pragma GCC push_options
3890 #pragma GCC target("avx512f")
3891 #include <cpuid.h>
3892 #include <immintrin.h>
3893 static int bar(void *a) {
3894     __m512i x = *(__m512i *)a;
3895     return _mm512_test_epi64_mask(x, x);
3896 }
3897 int main(int argc, char *argv[])
3898 {
3899         return bar(argv[0]);
3900 }
3901 EOF
3902   if ! compile_object "-Werror" ; then
3903     avx512f_opt="no"
3904   fi
3905 else
3906   avx512f_opt="no"
3907 fi
3908
3909 ########################################
3910 # check if __[u]int128_t is usable.
3911
3912 int128=no
3913 cat > $TMPC << EOF
3914 __int128_t a;
3915 __uint128_t b;
3916 int main (void) {
3917   a = a + b;
3918   b = a * b;
3919   a = a * a;
3920   return 0;
3921 }
3922 EOF
3923 if compile_prog "" "" ; then
3924     int128=yes
3925 fi
3926
3927 #########################################
3928 # See if 128-bit atomic operations are supported.
3929
3930 atomic128=no
3931 if test "$int128" = "yes"; then
3932   cat > $TMPC << EOF
3933 int main(void)
3934 {
3935   unsigned __int128 x = 0, y = 0;
3936   y = __atomic_load(&x, 0);
3937   __atomic_store(&x, y, 0);
3938   __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
3939   return 0;
3940 }
3941 EOF
3942   if compile_prog "" "" ; then
3943     atomic128=yes
3944   fi
3945 fi
3946
3947 cmpxchg128=no
3948 if test "$int128" = yes && test "$atomic128" = no; then
3949   cat > $TMPC << EOF
3950 int main(void)
3951 {
3952   unsigned __int128 x = 0, y = 0;
3953   __sync_val_compare_and_swap_16(&x, y, x);
3954   return 0;
3955 }
3956 EOF
3957   if compile_prog "" "" ; then
3958     cmpxchg128=yes
3959   fi
3960 fi
3961
3962 #########################################
3963 # See if 64-bit atomic operations are supported.
3964 # Note that without __atomic builtins, we can only
3965 # assume atomic loads/stores max at pointer size.
3966
3967 cat > $TMPC << EOF
3968 #include <stdint.h>
3969 int main(void)
3970 {
3971   uint64_t x = 0, y = 0;
3972   y = __atomic_load_n(&x, __ATOMIC_RELAXED);
3973   __atomic_store_n(&x, y, __ATOMIC_RELAXED);
3974   __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
3975   __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
3976   __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
3977   return 0;
3978 }
3979 EOF
3980 if compile_prog "" "" ; then
3981   atomic64=yes
3982 fi
3983
3984 ########################################
3985 # check if getauxval is available.
3986
3987 getauxval=no
3988 cat > $TMPC << EOF
3989 #include <sys/auxv.h>
3990 int main(void) {
3991   return getauxval(AT_HWCAP) == 0;
3992 }
3993 EOF
3994 if compile_prog "" "" ; then
3995     getauxval=yes
3996 fi
3997
3998 ########################################
3999 # check if ccache is interfering with
4000 # semantic analysis of macros
4001
4002 unset CCACHE_CPP2
4003 ccache_cpp2=no
4004 cat > $TMPC << EOF
4005 static const int Z = 1;
4006 #define fn() ({ Z; })
4007 #define TAUT(X) ((X) == Z)
4008 #define PAREN(X, Y) (X == Y)
4009 #define ID(X) (X)
4010 int main(int argc, char *argv[])
4011 {
4012     int x = 0, y = 0;
4013     x = ID(x);
4014     x = fn();
4015     fn();
4016     if (PAREN(x, y)) return 0;
4017     if (TAUT(Z)) return 0;
4018     return 0;
4019 }
4020 EOF
4021
4022 if ! compile_object "-Werror"; then
4023     ccache_cpp2=yes
4024 fi
4025
4026 #################################################
4027 # clang does not support glibc + FORTIFY_SOURCE.
4028
4029 if test "$fortify_source" != "no"; then
4030   if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4031     fortify_source="no";
4032   elif test -n "$cxx" && has $cxx &&
4033        echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4034     fortify_source="no";
4035   else
4036     fortify_source="yes"
4037   fi
4038 fi
4039
4040 ##########################################
4041 # check if struct fsxattr is available via linux/fs.h
4042
4043 have_fsxattr=no
4044 cat > $TMPC << EOF
4045 #include <linux/fs.h>
4046 struct fsxattr foo;
4047 int main(void) {
4048   return 0;
4049 }
4050 EOF
4051 if compile_prog "" "" ; then
4052     have_fsxattr=yes
4053 fi
4054
4055 ##########################################
4056 # check for usable membarrier system call
4057 if test "$membarrier" = "yes"; then
4058     have_membarrier=no
4059     if test "$mingw32" = "yes" ; then
4060         have_membarrier=yes
4061     elif test "$linux" = "yes" ; then
4062         cat > $TMPC << EOF
4063     #include <linux/membarrier.h>
4064     #include <sys/syscall.h>
4065     #include <unistd.h>
4066     #include <stdlib.h>
4067     int main(void) {
4068         syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
4069         syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
4070         exit(0);
4071     }
4072 EOF
4073         if compile_prog "" "" ; then
4074             have_membarrier=yes
4075         fi
4076     fi
4077     if test "$have_membarrier" = "no"; then
4078       feature_not_found "membarrier" "membarrier system call not available"
4079     fi
4080 else
4081     # Do not enable it by default even for Mingw32, because it doesn't
4082     # work on Wine.
4083     membarrier=no
4084 fi
4085
4086 ##########################################
4087 # check for usable AF_VSOCK environment
4088 have_af_vsock=no
4089 cat > $TMPC << EOF
4090 #include <errno.h>
4091 #include <sys/types.h>
4092 #include <sys/socket.h>
4093 #if !defined(AF_VSOCK)
4094 # error missing AF_VSOCK flag
4095 #endif
4096 #include <linux/vm_sockets.h>
4097 int main(void) {
4098     int sock, ret;
4099     struct sockaddr_vm svm;
4100     socklen_t len = sizeof(svm);
4101     sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4102     ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4103     if ((ret == -1) && (errno == ENOTCONN)) {
4104         return 0;
4105     }
4106     return -1;
4107 }
4108 EOF
4109 if compile_prog "" "" ; then
4110     have_af_vsock=yes
4111 fi
4112
4113 ##########################################
4114 # check for usable AF_ALG environment
4115 have_afalg=no
4116 cat > $TMPC << EOF
4117 #include <errno.h>
4118 #include <sys/types.h>
4119 #include <sys/socket.h>
4120 #include <linux/if_alg.h>
4121 int main(void) {
4122     int sock;
4123     sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
4124     return sock;
4125 }
4126 EOF
4127 if compile_prog "" "" ; then
4128     have_afalg=yes
4129 fi
4130 if test "$crypto_afalg" = "yes"
4131 then
4132     if test "$have_afalg" != "yes"
4133     then
4134         error_exit "AF_ALG requested but could not be detected"
4135     fi
4136 fi
4137
4138
4139 ##########################################
4140 # checks for sanitizers
4141
4142 have_asan=no
4143 have_ubsan=no
4144 have_asan_iface_h=no
4145 have_asan_iface_fiber=no
4146
4147 if test "$sanitizers" = "yes" ; then
4148   write_c_skeleton
4149   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
4150       have_asan=yes
4151   fi
4152
4153   # we could use a simple skeleton for flags checks, but this also
4154   # detect the static linking issue of ubsan, see also:
4155   # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
4156   cat > $TMPC << EOF
4157 #include <stdlib.h>
4158 int main(void) {
4159     void *tmp = malloc(10);
4160     if (tmp != NULL) {
4161         return *(int *)(tmp + 2);
4162     }
4163     return 1;
4164 }
4165 EOF
4166   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
4167       have_ubsan=yes
4168   fi
4169
4170   if check_include "sanitizer/asan_interface.h" ; then
4171       have_asan_iface_h=yes
4172   fi
4173
4174   cat > $TMPC << EOF
4175 #include <sanitizer/asan_interface.h>
4176 int main(void) {
4177   __sanitizer_start_switch_fiber(0, 0, 0);
4178   return 0;
4179 }
4180 EOF
4181   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
4182       have_asan_iface_fiber=yes
4183   fi
4184 fi
4185
4186 ##########################################
4187 # checks for fuzzer
4188 if test "$fuzzing" = "yes" ; then
4189   write_c_fuzzer_skeleton
4190   if test -z "${LIB_FUZZING_ENGINE+xxx}"; then
4191     if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
4192       have_fuzzer=yes
4193     else
4194       error_exit "Your compiler doesn't support -fsanitize=fuzzer"
4195       exit 1
4196     fi
4197   fi
4198
4199   have_clang_coverage_filter=no
4200   echo > $TMPTXT
4201   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer -fsanitize-coverage-allowlist=$TMPTXT" ""; then
4202     have_clang_coverage_filter=yes
4203   fi
4204 fi
4205
4206 # Thread sanitizer is, for now, much noisier than the other sanitizers;
4207 # keep it separate until that is not the case.
4208 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
4209   error_exit "TSAN is not supported with other sanitiziers."
4210 fi
4211 have_tsan=no
4212 have_tsan_iface_fiber=no
4213 if test "$tsan" = "yes" ; then
4214   write_c_skeleton
4215   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
4216       have_tsan=yes
4217   fi
4218   cat > $TMPC << EOF
4219 #include <sanitizer/tsan_interface.h>
4220 int main(void) {
4221   __tsan_create_fiber(0);
4222   return 0;
4223 }
4224 EOF
4225   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
4226       have_tsan_iface_fiber=yes
4227   fi
4228 fi
4229
4230 ##########################################
4231 # check for slirp
4232
4233 case "$slirp" in
4234   auto | enabled | internal)
4235     # Simpler to always update submodule, even if not needed.
4236     git_submodules="${git_submodules} slirp"
4237     ;;
4238 esac
4239
4240 # Check for slirp smbd dupport
4241 : ${smbd=${SMBD-/usr/sbin/smbd}}
4242 if test "$slirp_smbd" != "no" ; then
4243   if test "$mingw32" = "yes" ; then
4244     if test "$slirp_smbd" = "yes" ; then
4245       error_exit "Host smbd not supported on this platform."
4246     fi
4247     slirp_smbd=no
4248   else
4249     slirp_smbd=yes
4250   fi
4251 fi
4252
4253 ##########################################
4254 # check for usable __NR_keyctl syscall
4255
4256 if test "$linux" = "yes" ; then
4257
4258     have_keyring=no
4259     cat > $TMPC << EOF
4260 #include <errno.h>
4261 #include <asm/unistd.h>
4262 #include <linux/keyctl.h>
4263 #include <unistd.h>
4264 int main(void) {
4265     return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
4266 }
4267 EOF
4268     if compile_prog "" "" ; then
4269         have_keyring=yes
4270     fi
4271 fi
4272 if test "$secret_keyring" != "no"
4273 then
4274     if test "$have_keyring" = "yes"
4275     then
4276         secret_keyring=yes
4277     else
4278         if test "$secret_keyring" = "yes"
4279         then
4280             error_exit "syscall __NR_keyctl requested, \
4281 but not implemented on your system"
4282         else
4283             secret_keyring=no
4284         fi
4285     fi
4286 fi
4287
4288 ##########################################
4289 # End of CC checks
4290 # After here, no more $cc or $ld runs
4291
4292 write_c_skeleton
4293
4294 if test "$gcov" = "yes" ; then
4295   :
4296 elif test "$fortify_source" = "yes" ; then
4297   QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
4298   debug=no
4299 fi
4300
4301 case "$ARCH" in
4302 alpha)
4303   # Ensure there's only a single GP
4304   QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
4305 ;;
4306 esac
4307
4308 if test "$gprof" = "yes" ; then
4309   QEMU_CFLAGS="-p $QEMU_CFLAGS"
4310   QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
4311 fi
4312
4313 if test "$have_asan" = "yes"; then
4314   QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
4315   QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
4316   if test "$have_asan_iface_h" = "no" ; then
4317       echo "ASAN build enabled, but ASAN header missing." \
4318            "Without code annotation, the report may be inferior."
4319   elif test "$have_asan_iface_fiber" = "no" ; then
4320       echo "ASAN build enabled, but ASAN header is too old." \
4321            "Without code annotation, the report may be inferior."
4322   fi
4323 fi
4324 if test "$have_tsan" = "yes" ; then
4325   if test "$have_tsan_iface_fiber" = "yes" ; then
4326     QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
4327     QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
4328   else
4329     error_exit "Cannot enable TSAN due to missing fiber annotation interface."
4330   fi
4331 elif test "$tsan" = "yes" ; then
4332   error_exit "Cannot enable TSAN due to missing sanitize thread interface."
4333 fi
4334 if test "$have_ubsan" = "yes"; then
4335   QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
4336   QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
4337 fi
4338
4339 ##########################################
4340
4341 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
4342 if test "$solaris" = "no" && test "$tsan" = "no"; then
4343     if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4344         QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
4345     fi
4346 fi
4347
4348 # Use ASLR, no-SEH and DEP if available
4349 if test "$mingw32" = "yes" ; then
4350     flags="--no-seh --nxcompat"
4351
4352     # Disable ASLR for debug builds to allow debugging with gdb
4353     if test "$debug" = "no" ; then
4354         flags="--dynamicbase $flags"
4355     fi
4356
4357     for flag in $flags; do
4358         if ld_has $flag ; then
4359             QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
4360         fi
4361     done
4362 fi
4363
4364 # Probe for guest agent support/options
4365
4366 if [ "$guest_agent" != "no" ]; then
4367   if [ "$softmmu" = no -a "$want_tools" = no ] ; then
4368       guest_agent=no
4369   elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4370       guest_agent=yes
4371   elif [ "$guest_agent" != yes ]; then
4372       guest_agent=no
4373   else
4374       error_exit "Guest agent is not supported on this platform"
4375   fi
4376 fi
4377
4378 # Guest agent Windows MSI package
4379
4380 if test "$QEMU_GA_MANUFACTURER" = ""; then
4381   QEMU_GA_MANUFACTURER=QEMU
4382 fi
4383 if test "$QEMU_GA_DISTRO" = ""; then
4384   QEMU_GA_DISTRO=Linux
4385 fi
4386 if test "$QEMU_GA_VERSION" = ""; then
4387     QEMU_GA_VERSION=$(cat $source_path/VERSION)
4388 fi
4389
4390 QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
4391
4392 # Mac OS X ships with a broken assembler
4393 roms=
4394 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
4395         test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
4396         test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
4397     # Different host OS linkers have different ideas about the name of the ELF
4398     # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
4399     # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
4400     for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
4401         if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4402             ld_i386_emulation="$emu"
4403             roms="optionrom"
4404             break
4405         fi
4406     done
4407 fi
4408
4409 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
4410 # or -march=z10 (which is the lowest architecture level that Clang supports)
4411 if test "$cpu" = "s390x" ; then
4412   write_c_skeleton
4413   compile_prog "-march=z900" ""
4414   has_z900=$?
4415   if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then
4416     if [ $has_z900 != 0 ]; then
4417       echo "WARNING: Your compiler does not support the z900!"
4418       echo "         The s390-ccw bios will only work with guest CPUs >= z10."
4419     fi
4420     roms="$roms s390-ccw"
4421     # SLOF is required for building the s390-ccw firmware on s390x,
4422     # since it is using the libnet code from SLOF for network booting.
4423     git_submodules="${git_submodules} roms/SLOF"
4424   fi
4425 fi
4426
4427 # Check that the C++ compiler exists and works with the C compiler.
4428 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
4429 if has $cxx; then
4430     cat > $TMPC <<EOF
4431 int c_function(void);
4432 int main(void) { return c_function(); }
4433 EOF
4434
4435     compile_object
4436
4437     cat > $TMPCXX <<EOF
4438 extern "C" {
4439    int c_function(void);
4440 }
4441 int c_function(void) { return 42; }
4442 EOF
4443
4444     update_cxxflags
4445
4446     if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
4447         # C++ compiler $cxx works ok with C compiler $cc
4448         :
4449     else
4450         echo "C++ compiler $cxx does not work with C compiler $cc"
4451         echo "Disabling C++ specific optional code"
4452         cxx=
4453     fi
4454 else
4455     echo "No C++ compiler available; disabling C++ specific optional code"
4456     cxx=
4457 fi
4458
4459 if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
4460     exit 1
4461 fi
4462
4463 config_host_mak="config-host.mak"
4464
4465 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4466 echo >> $config_host_mak
4467
4468 echo all: >> $config_host_mak
4469 echo "GIT=$git" >> $config_host_mak
4470 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
4471 echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
4472
4473 echo "ARCH=$ARCH" >> $config_host_mak
4474
4475 if test "$debug_tcg" = "yes" ; then
4476   echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4477 fi
4478 if test "$strip_opt" = "yes" ; then
4479   echo "STRIP=${strip}" >> $config_host_mak
4480 fi
4481 if test "$bigendian" = "yes" ; then
4482   echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4483 fi
4484 if test "$mingw32" = "yes" ; then
4485   echo "CONFIG_WIN32=y" >> $config_host_mak
4486   if test "$guest_agent_with_vss" = "yes" ; then
4487     echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4488     echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
4489     echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4490   fi
4491   if test "$guest_agent_ntddscsi" = "yes" ; then
4492     echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
4493   fi
4494   echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4495   echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4496   echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4497   echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4498 else
4499   echo "CONFIG_POSIX=y" >> $config_host_mak
4500 fi
4501
4502 if test "$linux" = "yes" ; then
4503   echo "CONFIG_LINUX=y" >> $config_host_mak
4504 fi
4505
4506 if test "$darwin" = "yes" ; then
4507   echo "CONFIG_DARWIN=y" >> $config_host_mak
4508 fi
4509
4510 if test "$solaris" = "yes" ; then
4511   echo "CONFIG_SOLARIS=y" >> $config_host_mak
4512 fi
4513 if test "$haiku" = "yes" ; then
4514   echo "CONFIG_HAIKU=y" >> $config_host_mak
4515 fi
4516 if test "$static" = "yes" ; then
4517   echo "CONFIG_STATIC=y" >> $config_host_mak
4518 fi
4519 if test "$profiler" = "yes" ; then
4520   echo "CONFIG_PROFILER=y" >> $config_host_mak
4521 fi
4522 if test "$want_tools" = "yes" ; then
4523   echo "CONFIG_TOOLS=y" >> $config_host_mak
4524 fi
4525 if test "$guest_agent" = "yes" ; then
4526   echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
4527 fi
4528 if test "$slirp_smbd" = "yes" ; then
4529   echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
4530   echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4531 fi
4532 if test "$vde" = "yes" ; then
4533   echo "CONFIG_VDE=y" >> $config_host_mak
4534   echo "VDE_LIBS=$vde_libs" >> $config_host_mak
4535 fi
4536 if test "$netmap" = "yes" ; then
4537   echo "CONFIG_NETMAP=y" >> $config_host_mak
4538 fi
4539 if test "$l2tpv3" = "yes" ; then
4540   echo "CONFIG_L2TPV3=y" >> $config_host_mak
4541 fi
4542 if test "$gprof" = "yes" ; then
4543   echo "CONFIG_GPROF=y" >> $config_host_mak
4544 fi
4545 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4546 for drv in $audio_drv_list; do
4547     def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
4548     echo "$def=y" >> $config_host_mak
4549 done
4550 if test "$alsa" = "yes" ; then
4551     echo "CONFIG_ALSA=y" >> $config_host_mak
4552 fi
4553 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
4554 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
4555 if test "$libpulse" = "yes" ; then
4556     echo "CONFIG_LIBPULSE=y" >> $config_host_mak
4557 fi
4558 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
4559 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
4560 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
4561 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
4562 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
4563 if test "$libjack" = "yes" ; then
4564     echo "CONFIG_LIBJACK=y" >> $config_host_mak
4565 fi
4566 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
4567 if test "$audio_win_int" = "yes" ; then
4568   echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4569 fi
4570 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4571 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4572 if test "$block_drv_whitelist_tools" = "yes" ; then
4573   echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
4574 fi
4575 if test "$xfs" = "yes" ; then
4576   echo "CONFIG_XFS=y" >> $config_host_mak
4577 fi
4578 qemu_version=$(head $source_path/VERSION)
4579 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4580 echo "SRC_PATH=$source_path" >> $config_host_mak
4581 echo "TARGET_DIRS=$target_list" >> $config_host_mak
4582 if test "$modules" = "yes"; then
4583   # $shacmd can generate a hash started with digit, which the compiler doesn't
4584   # like as an symbol. So prefix it with an underscore
4585   echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
4586   echo "CONFIG_MODULES=y" >> $config_host_mak
4587 fi
4588 if test "$module_upgrades" = "yes"; then
4589   echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
4590 fi
4591 if test "$have_usbfs" = "yes" ; then
4592   echo "CONFIG_USBFS=y" >> $config_host_mak
4593 fi
4594 if test "$gio" = "yes" ; then
4595     echo "CONFIG_GIO=y" >> $config_host_mak
4596     echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
4597     echo "GIO_LIBS=$gio_libs" >> $config_host_mak
4598 fi
4599 if test "$gdbus_codegen" != "" ; then
4600     echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
4601 fi
4602 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
4603
4604 # Work around a system header bug with some kernel/XFS header
4605 # versions where they both try to define 'struct fsxattr':
4606 # xfs headers will not try to redefine structs from linux headers
4607 # if this macro is set.
4608 if test "$have_fsxattr" = "yes" ; then
4609     echo "HAVE_FSXATTR=y" >> $config_host_mak
4610 fi
4611 if test "$xen" = "enabled" ; then
4612   echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4613   echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4614   echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
4615   echo "XEN_LIBS=$xen_libs" >> $config_host_mak
4616 fi
4617 if test "$linux_aio" = "yes" ; then
4618   echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4619 fi
4620 if test "$vhost_scsi" = "yes" ; then
4621   echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4622 fi
4623 if test "$vhost_net" = "yes" ; then
4624   echo "CONFIG_VHOST_NET=y" >> $config_host_mak
4625 fi
4626 if test "$vhost_net_user" = "yes" ; then
4627   echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
4628 fi
4629 if test "$vhost_net_vdpa" = "yes" ; then
4630   echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
4631 fi
4632 if test "$vhost_crypto" = "yes" ; then
4633   echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
4634 fi
4635 if test "$vhost_vsock" = "yes" ; then
4636   echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
4637   if test "$vhost_user" = "yes" ; then
4638     echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
4639   fi
4640 fi
4641 if test "$vhost_kernel" = "yes" ; then
4642   echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
4643 fi
4644 if test "$vhost_user" = "yes" ; then
4645   echo "CONFIG_VHOST_USER=y" >> $config_host_mak
4646 fi
4647 if test "$vhost_vdpa" = "yes" ; then
4648   echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
4649 fi
4650 if test "$vhost_user_fs" = "yes" ; then
4651   echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
4652 fi
4653 if test "$iovec" = "yes" ; then
4654   echo "CONFIG_IOVEC=y" >> $config_host_mak
4655 fi
4656 if test "$membarrier" = "yes" ; then
4657   echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
4658 fi
4659 if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
4660   echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4661 fi
4662
4663 if test "$spice_protocol" = "yes" ; then
4664   echo "CONFIG_SPICE_PROTOCOL=y" >> $config_host_mak
4665   echo "SPICE_PROTOCOL_CFLAGS=$spice_protocol_cflags" >> $config_host_mak
4666 fi
4667 if test "$spice" = "yes" ; then
4668   echo "CONFIG_SPICE=y" >> $config_host_mak
4669   echo "SPICE_CFLAGS=$spice_cflags $spice_protocol_cflags" >> $config_host_mak
4670   echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
4671 fi
4672
4673 if test "$opengl" = "yes" ; then
4674   echo "CONFIG_OPENGL=y" >> $config_host_mak
4675   echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4676   echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
4677 fi
4678
4679 if test "$avx2_opt" = "yes" ; then
4680   echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
4681 fi
4682
4683 if test "$avx512f_opt" = "yes" ; then
4684   echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
4685 fi
4686
4687 # XXX: suppress that
4688 if [ "$bsd" = "yes" ] ; then
4689   echo "CONFIG_BSD=y" >> $config_host_mak
4690 fi
4691
4692 if test "$qom_cast_debug" = "yes" ; then
4693   echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4694 fi
4695
4696 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4697 if test "$coroutine_pool" = "yes" ; then
4698   echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4699 else
4700   echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4701 fi
4702
4703 if test "$debug_stack_usage" = "yes" ; then
4704   echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
4705 fi
4706
4707 if test "$crypto_afalg" = "yes" ; then
4708   echo "CONFIG_AF_ALG=y" >> $config_host_mak
4709 fi
4710
4711 if test "$have_asan_iface_fiber" = "yes" ; then
4712     echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
4713 fi
4714
4715 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
4716     echo "CONFIG_TSAN=y" >> $config_host_mak
4717 fi
4718
4719 if test "$cpuid_h" = "yes" ; then
4720   echo "CONFIG_CPUID_H=y" >> $config_host_mak
4721 fi
4722
4723 if test "$int128" = "yes" ; then
4724   echo "CONFIG_INT128=y" >> $config_host_mak
4725 fi
4726
4727 if test "$atomic128" = "yes" ; then
4728   echo "CONFIG_ATOMIC128=y" >> $config_host_mak
4729 fi
4730
4731 if test "$cmpxchg128" = "yes" ; then
4732   echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
4733 fi
4734
4735 if test "$atomic64" = "yes" ; then
4736   echo "CONFIG_ATOMIC64=y" >> $config_host_mak
4737 fi
4738
4739 if test "$getauxval" = "yes" ; then
4740   echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4741 fi
4742
4743 if test "$libssh" = "yes" ; then
4744   echo "CONFIG_LIBSSH=y" >> $config_host_mak
4745   echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
4746   echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
4747 fi
4748
4749 if test "$live_block_migration" = "yes" ; then
4750   echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
4751 fi
4752
4753 if test "$tpm" = "yes"; then
4754   echo 'CONFIG_TPM=y' >> $config_host_mak
4755 fi
4756
4757 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
4758 if have_backend "nop"; then
4759   echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
4760 fi
4761 if have_backend "simple"; then
4762   echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
4763   # Set the appropriate trace file.
4764   trace_file="\"$trace_file-\" FMT_pid"
4765 fi
4766 if have_backend "log"; then
4767   echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
4768 fi
4769 if have_backend "ust"; then
4770   echo "CONFIG_TRACE_UST=y" >> $config_host_mak
4771   echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
4772 fi
4773 if have_backend "dtrace"; then
4774   echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
4775   if test "$trace_backend_stap" = "yes" ; then
4776     echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
4777   fi
4778 fi
4779 if have_backend "ftrace"; then
4780   if test "$linux" = "yes" ; then
4781     echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
4782   else
4783     feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
4784   fi
4785 fi
4786 if have_backend "syslog"; then
4787   if test "$posix_syslog" = "yes" ; then
4788     echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
4789   else
4790     feature_not_found "syslog(trace backend)" "syslog not available"
4791   fi
4792 fi
4793 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
4794
4795 if test "$rdma" = "yes" ; then
4796   echo "CONFIG_RDMA=y" >> $config_host_mak
4797   echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
4798 fi
4799
4800 if test "$pvrdma" = "yes" ; then
4801   echo "CONFIG_PVRDMA=y" >> $config_host_mak
4802 fi
4803
4804 if test "$replication" = "yes" ; then
4805   echo "CONFIG_REPLICATION=y" >> $config_host_mak
4806 fi
4807
4808 if test "$have_af_vsock" = "yes" ; then
4809   echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
4810 fi
4811
4812 if test "$debug_mutex" = "yes" ; then
4813   echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
4814 fi
4815
4816 # Hold two types of flag:
4817 #   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
4818 #                                     a thread we have a handle to
4819 #   CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
4820 #                                     platform
4821 if test "$pthread_setname_np_w_tid" = "yes" ; then
4822   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
4823   echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
4824 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
4825   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
4826   echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
4827 fi
4828
4829 if test "$bochs" = "yes" ; then
4830   echo "CONFIG_BOCHS=y" >> $config_host_mak
4831 fi
4832 if test "$cloop" = "yes" ; then
4833   echo "CONFIG_CLOOP=y" >> $config_host_mak
4834 fi
4835 if test "$dmg" = "yes" ; then
4836   echo "CONFIG_DMG=y" >> $config_host_mak
4837 fi
4838 if test "$qcow1" = "yes" ; then
4839   echo "CONFIG_QCOW1=y" >> $config_host_mak
4840 fi
4841 if test "$vdi" = "yes" ; then
4842   echo "CONFIG_VDI=y" >> $config_host_mak
4843 fi
4844 if test "$vvfat" = "yes" ; then
4845   echo "CONFIG_VVFAT=y" >> $config_host_mak
4846 fi
4847 if test "$qed" = "yes" ; then
4848   echo "CONFIG_QED=y" >> $config_host_mak
4849 fi
4850 if test "$parallels" = "yes" ; then
4851   echo "CONFIG_PARALLELS=y" >> $config_host_mak
4852 fi
4853 if test "$have_mlockall" = "yes" ; then
4854   echo "HAVE_MLOCKALL=y" >> $config_host_mak
4855 fi
4856 if test "$fuzzing" = "yes" ; then
4857   # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
4858   # needed CFLAGS have already been provided
4859   if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
4860     # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
4861     # compiled code.
4862     QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
4863     # To build non-fuzzer binaries with --enable-fuzzing, link everything with
4864     # fsanitize=fuzzer-no-link. Otherwise, the linker will be unable to bind
4865     # the fuzzer-related callbacks added by instrumentation.
4866     QEMU_LDFLAGS="$QEMU_LDFLAGS -fsanitize=fuzzer-no-link"
4867     # For the actual fuzzer binaries, we need to link against the libfuzzer
4868     # library. Provide the flags for doing this in FUZZ_EXE_LDFLAGS. The meson
4869     # rule for the fuzzer adds these to the link_args. They need to be
4870     # configurable, to support OSS-Fuzz
4871     FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
4872   else
4873     FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
4874   fi
4875
4876   # Specify a filter to only instrument code that is directly related to
4877   # virtual-devices.
4878   if test "$have_clang_coverage_filter" = "yes" ; then
4879     cp "$source_path/scripts/oss-fuzz/instrumentation-filter-template" \
4880        instrumentation-filter
4881     QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize-coverage-allowlist=instrumentation-filter"
4882   fi
4883 fi
4884
4885 if test "$plugins" = "yes" ; then
4886     echo "CONFIG_PLUGIN=y" >> $config_host_mak
4887     # Copy the export object list to the build dir
4888     if test "$ld_dynamic_list" = "yes" ; then
4889         echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
4890         ld_symbols=qemu-plugins-ld.symbols
4891         cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
4892     elif test "$ld_exported_symbols_list" = "yes" ; then
4893         echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
4894         ld64_symbols=qemu-plugins-ld64.symbols
4895         echo "# Automatically generated by configure - do not modify" > $ld64_symbols
4896         grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
4897             sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
4898     else
4899         error_exit \
4900             "If \$plugins=yes, either \$ld_dynamic_list or " \
4901             "\$ld_exported_symbols_list should have been set to 'yes'."
4902     fi
4903 fi
4904
4905 if test -n "$gdb_bin"; then
4906     gdb_version=$($gdb_bin --version | head -n 1)
4907     if version_ge ${gdb_version##* } 9.1; then
4908         echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
4909     fi
4910 fi
4911
4912 if test "$secret_keyring" = "yes" ; then
4913   echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
4914 fi
4915
4916 echo "ROMS=$roms" >> $config_host_mak
4917 echo "MAKE=$make" >> $config_host_mak
4918 echo "PYTHON=$python" >> $config_host_mak
4919 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
4920 echo "MESON=$meson" >> $config_host_mak
4921 echo "NINJA=$ninja" >> $config_host_mak
4922 echo "CC=$cc" >> $config_host_mak
4923 echo "HOST_CC=$host_cc" >> $config_host_mak
4924 if $iasl -h > /dev/null 2>&1; then
4925   echo "CONFIG_IASL=$iasl" >> $config_host_mak
4926 fi
4927 echo "AR=$ar" >> $config_host_mak
4928 echo "AS=$as" >> $config_host_mak
4929 echo "CCAS=$ccas" >> $config_host_mak
4930 echo "CPP=$cpp" >> $config_host_mak
4931 echo "OBJCOPY=$objcopy" >> $config_host_mak
4932 echo "LD=$ld" >> $config_host_mak
4933 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
4934 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
4935 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
4936 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4937 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
4938 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
4939 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
4940 echo "EXESUF=$EXESUF" >> $config_host_mak
4941 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
4942 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
4943 if test "$gcov" = "yes" ; then
4944   echo "CONFIG_GCOV=y" >> $config_host_mak
4945 fi
4946
4947 if test "$fuzzing" != "no"; then
4948     echo "CONFIG_FUZZ=y" >> $config_host_mak
4949 fi
4950 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
4951
4952 if test "$rng_none" = "yes"; then
4953   echo "CONFIG_RNG_NONE=y" >> $config_host_mak
4954 fi
4955
4956 # use included Linux headers
4957 if test "$linux" = "yes" ; then
4958   mkdir -p linux-headers
4959   case "$cpu" in
4960   i386|x86_64|x32)
4961     linux_arch=x86
4962     ;;
4963   ppc|ppc64|ppc64le)
4964     linux_arch=powerpc
4965     ;;
4966   s390x)
4967     linux_arch=s390
4968     ;;
4969   aarch64)
4970     linux_arch=arm64
4971     ;;
4972   mips64)
4973     linux_arch=mips
4974     ;;
4975   *)
4976     # For most CPUs the kernel architecture name and QEMU CPU name match.
4977     linux_arch="$cpu"
4978     ;;
4979   esac
4980     # For non-KVM architectures we will not have asm headers
4981     if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
4982       symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
4983     fi
4984 fi
4985
4986 for target in $target_list; do
4987     target_dir="$target"
4988     target_name=$(echo $target | cut -d '-' -f 1)
4989     mkdir -p $target_dir
4990     case $target in
4991         *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
4992         *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
4993     esac
4994 done
4995
4996 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
4997 if test "$default_targets" = "yes"; then
4998   echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
4999 fi
5000
5001 if test "$numa" = "yes"; then
5002   echo "CONFIG_NUMA=y" >> $config_host_mak
5003   echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
5004 fi
5005
5006 if test "$ccache_cpp2" = "yes"; then
5007   echo "export CCACHE_CPP2=y" >> $config_host_mak
5008 fi
5009
5010 if test "$safe_stack" = "yes"; then
5011   echo "CONFIG_SAFESTACK=y" >> $config_host_mak
5012 fi
5013
5014 # If we're using a separate build tree, set it up now.
5015 # DIRS are directories which we simply mkdir in the build tree;
5016 # LINKS are things to symlink back into the source tree
5017 # (these can be both files and directories).
5018 # Caution: do not add files or directories here using wildcards. This
5019 # will result in problems later if a new file matching the wildcard is
5020 # added to the source tree -- nothing will cause configure to be rerun
5021 # so the build tree will be missing the link back to the new file, and
5022 # tests might fail. Prefer to keep the relevant files in their own
5023 # directory and symlink the directory instead.
5024 # UNLINK is used to remove symlinks from older development versions
5025 # that might get into the way when doing "git update" without doing
5026 # a "make distclean" in between.
5027 DIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos"
5028 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
5029 DIRS="$DIRS docs docs/interop fsdev scsi"
5030 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
5031 DIRS="$DIRS roms/seabios"
5032 DIRS="$DIRS contrib/plugins/"
5033 LINKS="Makefile"
5034 LINKS="$LINKS tests/tcg/Makefile.target"
5035 LINKS="$LINKS pc-bios/optionrom/Makefile"
5036 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
5037 LINKS="$LINKS roms/seabios/Makefile"
5038 LINKS="$LINKS pc-bios/qemu-icon.bmp"
5039 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
5040 LINKS="$LINKS tests/acceptance tests/data"
5041 LINKS="$LINKS tests/qemu-iotests/check"
5042 LINKS="$LINKS python"
5043 LINKS="$LINKS contrib/plugins/Makefile "
5044 UNLINK="pc-bios/keymaps"
5045 for bios_file in \
5046     $source_path/pc-bios/*.bin \
5047     $source_path/pc-bios/*.elf \
5048     $source_path/pc-bios/*.lid \
5049     $source_path/pc-bios/*.rom \
5050     $source_path/pc-bios/*.dtb \
5051     $source_path/pc-bios/*.img \
5052     $source_path/pc-bios/openbios-* \
5053     $source_path/pc-bios/u-boot.* \
5054     $source_path/pc-bios/edk2-*.fd.bz2 \
5055     $source_path/pc-bios/palcode-* \
5056     $source_path/pc-bios/qemu_vga.ndrv
5057
5058 do
5059     LINKS="$LINKS pc-bios/$(basename $bios_file)"
5060 done
5061 mkdir -p $DIRS
5062 for f in $LINKS ; do
5063     if [ -e "$source_path/$f" ]; then
5064         symlink "$source_path/$f" "$f"
5065     fi
5066 done
5067 for f in $UNLINK ; do
5068     if [ -L "$f" ]; then
5069         rm -f "$f"
5070     fi
5071 done
5072
5073 (for i in $cross_cc_vars; do
5074   export $i
5075 done
5076 export target_list source_path use_containers ARCH
5077 $source_path/tests/tcg/configure.sh)
5078
5079 # temporary config to build submodules
5080 for rom in seabios; do
5081     config_mak=roms/$rom/config.mak
5082     echo "# Automatically generated by configure - do not modify" > $config_mak
5083     echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5084     echo "AS=$as" >> $config_mak
5085     echo "CCAS=$ccas" >> $config_mak
5086     echo "CC=$cc" >> $config_mak
5087     echo "BCC=bcc" >> $config_mak
5088     echo "CPP=$cpp" >> $config_mak
5089     echo "OBJCOPY=objcopy" >> $config_mak
5090     echo "IASL=$iasl" >> $config_mak
5091     echo "LD=$ld" >> $config_mak
5092     echo "RANLIB=$ranlib" >> $config_mak
5093 done
5094
5095 if test "$skip_meson" = no; then
5096   cross="config-meson.cross.new"
5097   meson_quote() {
5098     echo "'$(echo $* | sed "s/ /','/g")'"
5099   }
5100
5101   echo "# Automatically generated by configure - do not modify" > $cross
5102   echo "[properties]" >> $cross
5103
5104   # unroll any custom device configs
5105   for a in $device_archs; do
5106       eval "c=\$devices_${a}"
5107       echo "${a}-softmmu = '$c'" >> $cross
5108   done
5109
5110   test -z "$cxx" && echo "link_language = 'c'" >> $cross
5111   echo "[built-in options]" >> $cross
5112   echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
5113   echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
5114   echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
5115   echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
5116   echo "[binaries]" >> $cross
5117   echo "c = [$(meson_quote $cc)]" >> $cross
5118   test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
5119   test -n "$objcc" && echo "objc = [$(meson_quote $objcc)]" >> $cross
5120   echo "ar = [$(meson_quote $ar)]" >> $cross
5121   echo "nm = [$(meson_quote $nm)]" >> $cross
5122   echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
5123   echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
5124   if has $sdl2_config; then
5125     echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
5126   fi
5127   echo "strip = [$(meson_quote $strip)]" >> $cross
5128   echo "windres = [$(meson_quote $windres)]" >> $cross
5129   if test "$cross_compile" = "yes"; then
5130     cross_arg="--cross-file config-meson.cross"
5131     echo "[host_machine]" >> $cross
5132     if test "$mingw32" = "yes" ; then
5133         echo "system = 'windows'" >> $cross
5134     fi
5135     if test "$linux" = "yes" ; then
5136         echo "system = 'linux'" >> $cross
5137     fi
5138     if test "$darwin" = "yes" ; then
5139         echo "system = 'darwin'" >> $cross
5140     fi
5141     case "$ARCH" in
5142         i386)
5143             echo "cpu_family = 'x86'" >> $cross
5144             ;;
5145         x86_64|x32)
5146             echo "cpu_family = 'x86_64'" >> $cross
5147             ;;
5148         ppc64le)
5149             echo "cpu_family = 'ppc64'" >> $cross
5150             ;;
5151         *)
5152             echo "cpu_family = '$ARCH'" >> $cross
5153             ;;
5154     esac
5155     echo "cpu = '$cpu'" >> $cross
5156     if test "$bigendian" = "yes" ; then
5157         echo "endian = 'big'" >> $cross
5158     else
5159         echo "endian = 'little'" >> $cross
5160     fi
5161   else
5162     cross_arg="--native-file config-meson.cross"
5163   fi
5164   mv $cross config-meson.cross
5165
5166   rm -rf meson-private meson-info meson-logs
5167   unset staticpic
5168   if ! version_ge "$($meson --version)" 0.56.0; then
5169     staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
5170   fi
5171   NINJA=$ninja $meson setup \
5172         --prefix "$prefix" \
5173         --libdir "$libdir" \
5174         --libexecdir "$libexecdir" \
5175         --bindir "$bindir" \
5176         --includedir "$includedir" \
5177         --datadir "$datadir" \
5178         --mandir "$mandir" \
5179         --sysconfdir "$sysconfdir" \
5180         --localedir "$localedir" \
5181         --localstatedir "$local_statedir" \
5182         -Ddocdir="$docdir" \
5183         -Dqemu_firmwarepath="$firmwarepath" \
5184         -Dqemu_suffix="$qemu_suffix" \
5185         -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
5186         -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
5187         -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
5188         -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
5189         -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
5190         ${staticpic:+-Db_staticpic=$staticpic} \
5191         -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
5192         -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \
5193         -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
5194         -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
5195         -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
5196         -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
5197         -Dlibusb=$libusb -Dsmartcard=$smartcard -Dusb_redir=$usb_redir -Dvte=$vte \
5198         -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
5199         -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
5200         -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
5201         -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
5202         -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
5203         -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse -Dlibxml2=$libxml2 \
5204         -Dlibdaxctl=$libdaxctl -Dlibpmem=$libpmem -Dlinux_io_uring=$linux_io_uring \
5205         -Dgnutls=$gnutls -Dnettle=$nettle -Dgcrypt=$gcrypt -Dauth_pam=$auth_pam \
5206         -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
5207         -Dattr=$attr -Ddefault_devices=$default_devices -Dvirglrenderer=$virglrenderer \
5208         -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
5209         -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
5210         -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
5211         $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
5212         -Dtcg_interpreter=$tcg_interpreter \
5213         $cross_arg \
5214         "$PWD" "$source_path"
5215
5216   if test "$?" -ne 0 ; then
5217       error_exit "meson setup failed"
5218   fi
5219 else
5220   if test -f meson-private/cmd_line.txt; then
5221     # Adjust old command line options whose type was changed
5222     # Avoids having to use "setup --wipe" when Meson is upgraded
5223     perl -i -ne '
5224       s/^gettext = true$/gettext = auto/;
5225       s/^gettext = false$/gettext = disabled/;
5226       print;' meson-private/cmd_line.txt
5227   fi
5228 fi
5229
5230 if test -n "${deprecated_features}"; then
5231     echo "Warning, deprecated features enabled."
5232     echo "Please see docs/about/deprecated.rst"
5233     echo "  features: ${deprecated_features}"
5234 fi
5235
5236 # Create list of config switches that should be poisoned in common code...
5237 # but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
5238 target_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
5239 if test -n "$target_configs_h" ; then
5240     sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
5241         -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
5242         $target_configs_h | sort -u > config-poison.h
5243 else
5244     :> config-poison.h
5245 fi
5246
5247 # Save the configure command line for later reuse.
5248 cat <<EOD >config.status
5249 #!/bin/sh
5250 # Generated by configure.
5251 # Run this file to recreate the current configuration.
5252 # Compiler output produced by configure, useful for debugging
5253 # configure, is in config.log if it exists.
5254 EOD
5255
5256 preserve_env() {
5257     envname=$1
5258
5259     eval envval=\$$envname
5260
5261     if test -n "$envval"
5262     then
5263         echo "$envname='$envval'" >> config.status
5264         echo "export $envname" >> config.status
5265     else
5266         echo "unset $envname" >> config.status
5267     fi
5268 }
5269
5270 # Preserve various env variables that influence what
5271 # features/build target configure will detect
5272 preserve_env AR
5273 preserve_env AS
5274 preserve_env CC
5275 preserve_env CPP
5276 preserve_env CXX
5277 preserve_env INSTALL
5278 preserve_env LD
5279 preserve_env LD_LIBRARY_PATH
5280 preserve_env LIBTOOL
5281 preserve_env MAKE
5282 preserve_env NM
5283 preserve_env OBJCOPY
5284 preserve_env PATH
5285 preserve_env PKG_CONFIG
5286 preserve_env PKG_CONFIG_LIBDIR
5287 preserve_env PKG_CONFIG_PATH
5288 preserve_env PYTHON
5289 preserve_env SDL2_CONFIG
5290 preserve_env SMBD
5291 preserve_env STRIP
5292 preserve_env WINDRES
5293
5294 printf "exec" >>config.status
5295 for i in "$0" "$@"; do
5296   test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
5297 done
5298 echo ' "$@"' >>config.status
5299 chmod +x config.status
5300
5301 rm -r "$TMPDIR1"
This page took 0.312915 seconds and 4 git commands to generate.