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