]> git.proxmox.com Git - mirror_qemu.git/blame_incremental - configure
tests/vm: include setuptools
[mirror_qemu.git] / configure
... / ...
CommitLineData
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.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
11# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
14# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
25fi
26
27TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
29TMPO="${TMPDIR1}/${TMPB}.o"
30TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31TMPE="${TMPDIR1}/${TMPB}.exe"
32TMPMO="${TMPDIR1}/${TMPB}.mo"
33TMPTXT="${TMPDIR1}/${TMPB}.txt"
34
35rm -f config.log
36
37# Print a helpful header at the top of config.log
38echo "# QEMU configure log $(date)" >> config.log
39printf "# Configured with:" >> config.log
40printf " '%s'" "$0" "$@" >> config.log
41echo >> config.log
42echo "#" >> config.log
43
44print_error() {
45 (echo
46 echo "ERROR: $1"
47 while test -n "$2"; do
48 echo " $2"
49 shift
50 done
51 echo) >&2
52}
53
54error_exit() {
55 print_error "$@"
56 exit 1
57}
58
59do_compiler() {
60 # Run the compiler, capturing its output to the log. First argument
61 # is compiler binary to execute.
62 local compiler="$1"
63 shift
64 if test -n "$BASH_VERSION"; then eval '
65 echo >>config.log "
66funcs: ${FUNCNAME[*]}
67lines: ${BASH_LINENO[*]}"
68 '; fi
69 echo $compiler "$@" >> config.log
70 $compiler "$@" >> config.log 2>&1 || return $?
71 # Test passed. If this is an --enable-werror build, rerun
72 # the test with -Werror and bail out if it fails. This
73 # makes warning-generating-errors in configure test code
74 # obvious to developers.
75 if test "$werror" != "yes"; then
76 return 0
77 fi
78 # Don't bother rerunning the compile if we were already using -Werror
79 case "$*" in
80 *-Werror*)
81 return 0
82 ;;
83 esac
84 echo $compiler -Werror "$@" >> config.log
85 $compiler -Werror "$@" >> config.log 2>&1 && return $?
86 error_exit "configure test passed without -Werror but failed with -Werror." \
87 "This is probably a bug in the configure script. The failing command" \
88 "will be at the bottom of config.log." \
89 "You can run configure with --disable-werror to bypass this check."
90}
91
92do_cc() {
93 do_compiler "$cc" "$@"
94}
95
96do_cxx() {
97 do_compiler "$cxx" "$@"
98}
99
100# Append $2 to the variable named $1, with space separation
101add_to() {
102 eval $1=\${$1:+\"\$$1 \"}\$2
103}
104
105update_cxxflags() {
106 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
107 # options which some versions of GCC's C++ compiler complain about
108 # because they only make sense for C programs.
109 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
110 CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
111 for arg in $QEMU_CFLAGS; do
112 case $arg in
113 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
114 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
115 ;;
116 *)
117 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
118 ;;
119 esac
120 done
121}
122
123compile_object() {
124 local_cflags="$1"
125 do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
126}
127
128compile_prog() {
129 local_cflags="$1"
130 local_ldflags="$2"
131 do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags
132}
133
134# symbolically link $1 to $2. Portable version of "ln -sf".
135symlink() {
136 rm -rf "$2"
137 mkdir -p "$(dirname "$2")"
138 ln -s "$1" "$2"
139}
140
141# check whether a command is available to this shell (may be either an
142# executable or a builtin)
143has() {
144 type "$1" >/dev/null 2>&1
145}
146
147# search for an executable in PATH
148path_of() {
149 local_command="$1"
150 local_ifs="$IFS"
151 local_dir=""
152
153 # pathname has a dir component?
154 if [ "${local_command#*/}" != "$local_command" ]; then
155 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
156 echo "$local_command"
157 return 0
158 fi
159 fi
160 if [ -z "$local_command" ]; then
161 return 1
162 fi
163
164 IFS=:
165 for local_dir in $PATH; do
166 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
167 echo "$local_dir/$local_command"
168 IFS="${local_ifs:-$(printf ' \t\n')}"
169 return 0
170 fi
171 done
172 # not found
173 IFS="${local_ifs:-$(printf ' \t\n')}"
174 return 1
175}
176
177have_backend () {
178 echo "$trace_backends" | grep "$1" >/dev/null
179}
180
181glob() {
182 eval test -z '"${1#'"$2"'}"'
183}
184
185supported_hax_target() {
186 test "$hax" = "yes" || return 1
187 glob "$1" "*-softmmu" || return 1
188 case "${1%-softmmu}" in
189 i386|x86_64)
190 return 0
191 ;;
192 esac
193 return 1
194}
195
196supported_kvm_target() {
197 test "$kvm" = "yes" || return 1
198 glob "$1" "*-softmmu" || return 1
199 case "${1%-softmmu}:$cpu" in
200 arm:arm | aarch64:aarch64 | \
201 i386:i386 | i386:x86_64 | i386:x32 | \
202 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
203 mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
204 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
205 s390x:s390x)
206 return 0
207 ;;
208 esac
209 return 1
210}
211
212supported_xen_target() {
213 test "$xen" = "yes" || return 1
214 glob "$1" "*-softmmu" || return 1
215 # Only i386 and x86_64 provide the xenpv machine.
216 case "${1%-softmmu}" in
217 i386|x86_64)
218 return 0
219 ;;
220 esac
221 return 1
222}
223
224supported_hvf_target() {
225 test "$hvf" = "yes" || return 1
226 glob "$1" "*-softmmu" || return 1
227 case "${1%-softmmu}" in
228 x86_64)
229 return 0
230 ;;
231 esac
232 return 1
233}
234
235supported_whpx_target() {
236 test "$whpx" = "yes" || return 1
237 glob "$1" "*-softmmu" || return 1
238 case "${1%-softmmu}" in
239 i386|x86_64)
240 return 0
241 ;;
242 esac
243 return 1
244}
245
246supported_target() {
247 case "$1" in
248 *-softmmu)
249 ;;
250 *-linux-user)
251 if test "$linux" != "yes"; then
252 print_error "Target '$target' is only available on a Linux host"
253 return 1
254 fi
255 ;;
256 *-bsd-user)
257 if test "$bsd" != "yes"; then
258 print_error "Target '$target' is only available on a BSD host"
259 return 1
260 fi
261 ;;
262 *)
263 print_error "Invalid target name '$target'"
264 return 1
265 ;;
266 esac
267 test "$tcg" = "yes" && return 0
268 supported_kvm_target "$1" && return 0
269 supported_xen_target "$1" && return 0
270 supported_hax_target "$1" && return 0
271 supported_hvf_target "$1" && return 0
272 supported_whpx_target "$1" && return 0
273 print_error "TCG disabled, but hardware accelerator not available for '$target'"
274 return 1
275}
276
277
278ld_has() {
279 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
280}
281
282# make source path absolute
283source_path=$(cd "$(dirname -- "$0")"; pwd)
284
285if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
286then
287 error_exit "main directory cannot contain spaces nor colons"
288fi
289
290# default parameters
291cpu=""
292iasl="iasl"
293interp_prefix="/usr/gnemul/qemu-%M"
294static="no"
295cross_prefix=""
296audio_drv_list=""
297block_drv_rw_whitelist=""
298block_drv_ro_whitelist=""
299host_cc="cc"
300libs_cpu=""
301libs_softmmu=""
302libs_tools=""
303audio_win_int=""
304libs_qga=""
305debug_info="yes"
306stack_protector=""
307safe_stack=""
308use_containers="yes"
309gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
310
311if test -e "$source_path/.git"
312then
313 git_update=yes
314 git_submodules="ui/keycodemapdb"
315 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
316 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
317else
318 git_update=no
319 git_submodules=""
320
321 if ! test -f "$source_path/ui/keycodemapdb/README"
322 then
323 echo
324 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
325 echo
326 echo "This is not a GIT checkout but module content appears to"
327 echo "be missing. Do not use 'git archive' or GitHub download links"
328 echo "to acquire QEMU source archives. Non-GIT builds are only"
329 echo "supported with source archives linked from:"
330 echo
331 echo " https://www.qemu.org/download/#source"
332 echo
333 echo "Developers working with GIT can use scripts/archive-source.sh"
334 echo "if they need to create valid source archives."
335 echo
336 exit 1
337 fi
338fi
339git="git"
340
341# Don't accept a target_list environment variable.
342unset target_list
343unset target_list_exclude
344
345# Default value for a variable defining feature "foo".
346# * foo="no" feature will only be used if --enable-foo arg is given
347# * foo="" feature will be searched for, and if found, will be used
348# unless --disable-foo is given
349# * foo="yes" this value will only be set by --enable-foo flag.
350# feature will searched for,
351# if not found, configure exits with error
352#
353# Always add --enable-foo and --disable-foo command line args.
354# Distributions want to ensure that several features are compiled in, and it
355# is impossible without a --enable-foo that exits if a feature is not found.
356
357brlapi=""
358curl=""
359curses=""
360docs=""
361fdt=""
362netmap="no"
363sdl=""
364sdl_image=""
365virtfs=""
366mpath=""
367vnc="yes"
368sparse="no"
369vde=""
370vnc_sasl=""
371vnc_jpeg=""
372vnc_png=""
373xkbcommon=""
374xen=""
375xen_ctrl_version=""
376xen_pci_passthrough=""
377linux_aio=""
378linux_io_uring=""
379cap_ng=""
380attr=""
381libattr=""
382xfs=""
383tcg="yes"
384membarrier=""
385vhost_net=""
386vhost_crypto=""
387vhost_scsi=""
388vhost_vsock=""
389vhost_user=""
390vhost_user_fs=""
391kvm="no"
392hax="no"
393hvf="no"
394whpx="no"
395rdma=""
396pvrdma=""
397gprof="no"
398debug_tcg="no"
399debug="no"
400sanitizers="no"
401tsan="no"
402fortify_source=""
403strip_opt="yes"
404tcg_interpreter="no"
405bigendian="no"
406mingw32="no"
407gcov="no"
408gcov_tool="gcov"
409EXESUF=""
410DSOSUF=".so"
411LDFLAGS_SHARED="-shared"
412modules="no"
413module_upgrades="no"
414prefix="/usr/local"
415firmwarepath="\${prefix}/share/qemu-firmware"
416confsuffix="/qemu"
417slirp=""
418oss_lib=""
419bsd="no"
420linux="no"
421solaris="no"
422profiler="no"
423cocoa="no"
424softmmu="yes"
425linux_user="no"
426bsd_user="no"
427blobs="yes"
428edk2_blobs="no"
429pkgversion=""
430pie=""
431qom_cast_debug="yes"
432trace_backends="log"
433trace_file="trace"
434spice=""
435rbd=""
436smartcard=""
437libusb=""
438usb_redir=""
439opengl=""
440opengl_dmabuf="no"
441cpuid_h="no"
442avx2_opt=""
443zlib="yes"
444capstone=""
445lzo=""
446snappy=""
447bzip2=""
448lzfse=""
449zstd=""
450guest_agent=""
451guest_agent_with_vss="no"
452guest_agent_ntddscsi="no"
453guest_agent_msi=""
454vss_win32_sdk=""
455win_sdk="no"
456want_tools=""
457libiscsi=""
458libnfs=""
459coroutine=""
460coroutine_pool=""
461debug_stack_usage="no"
462crypto_afalg="no"
463seccomp=""
464glusterfs=""
465glusterfs_xlator_opt="no"
466glusterfs_discard="no"
467glusterfs_fallocate="no"
468glusterfs_zerofill="no"
469glusterfs_ftruncate_has_stat="no"
470glusterfs_iocb_has_stat="no"
471gtk=""
472gtk_gl="no"
473tls_priority="NORMAL"
474gnutls=""
475nettle=""
476nettle_xts="no"
477gcrypt=""
478gcrypt_hmac="no"
479gcrypt_xts="no"
480qemu_private_xts="yes"
481auth_pam=""
482vte=""
483virglrenderer=""
484tpm=""
485libssh=""
486live_block_migration="yes"
487numa=""
488tcmalloc="no"
489jemalloc="no"
490replication="yes"
491bochs="yes"
492cloop="yes"
493dmg="yes"
494qcow1="yes"
495vdi="yes"
496vvfat="yes"
497qed="yes"
498parallels="yes"
499sheepdog="yes"
500libxml2=""
501debug_mutex="no"
502libpmem=""
503default_devices="yes"
504plugins="no"
505fuzzing="no"
506rng_none="no"
507secret_keyring=""
508libdaxctl=""
509
510supported_cpu="no"
511supported_os="no"
512bogus_os="no"
513malloc_trim=""
514
515# parse CC options first
516for opt do
517 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
518 case "$opt" in
519 --cross-prefix=*) cross_prefix="$optarg"
520 ;;
521 --cc=*) CC="$optarg"
522 ;;
523 --cxx=*) CXX="$optarg"
524 ;;
525 --cpu=*) cpu="$optarg"
526 ;;
527 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
528 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
529 ;;
530 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
531 ;;
532 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
533 EXTRA_LDFLAGS="$optarg"
534 ;;
535 --enable-debug-info) debug_info="yes"
536 ;;
537 --disable-debug-info) debug_info="no"
538 ;;
539 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
540 ;;
541 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
542 eval "cross_cc_cflags_${cc_arch}=\$optarg"
543 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
544 ;;
545 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
546 cc_archs="$cc_archs $cc_arch"
547 eval "cross_cc_${cc_arch}=\$optarg"
548 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
549 ;;
550 esac
551done
552# OS specific
553# Using uname is really, really broken. Once we have the right set of checks
554# we can eliminate its usage altogether.
555
556# Preferred compiler:
557# ${CC} (if set)
558# ${cross_prefix}gcc (if cross-prefix specified)
559# system compiler
560if test -z "${CC}${cross_prefix}"; then
561 cc="$host_cc"
562else
563 cc="${CC-${cross_prefix}gcc}"
564fi
565
566if test -z "${CXX}${cross_prefix}"; then
567 cxx="c++"
568else
569 cxx="${CXX-${cross_prefix}g++}"
570fi
571
572ar="${AR-${cross_prefix}ar}"
573as="${AS-${cross_prefix}as}"
574ccas="${CCAS-$cc}"
575cpp="${CPP-$cc -E}"
576objcopy="${OBJCOPY-${cross_prefix}objcopy}"
577ld="${LD-${cross_prefix}ld}"
578ranlib="${RANLIB-${cross_prefix}ranlib}"
579nm="${NM-${cross_prefix}nm}"
580strip="${STRIP-${cross_prefix}strip}"
581windres="${WINDRES-${cross_prefix}windres}"
582pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
583query_pkg_config() {
584 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
585}
586pkg_config=query_pkg_config
587sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
588
589# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
590ARFLAGS="${ARFLAGS-rv}"
591
592# default flags for all hosts
593# We use -fwrapv to tell the compiler that we require a C dialect where
594# left shift of signed integers is well defined and has the expected
595# 2s-complement style results. (Both clang and gcc agree that it
596# provides these semantics.)
597QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
598QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
599QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
600QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
601QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
602QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
603CFLAGS="-std=gnu99 -Wall"
604
605
606# running configure in the source tree?
607# we know that's the case if configure is there.
608if test -f "./configure"; then
609 pwd_is_source_path="y"
610else
611 pwd_is_source_path="n"
612fi
613
614check_define() {
615cat > $TMPC <<EOF
616#if !defined($1)
617#error $1 not defined
618#endif
619int main(void) { return 0; }
620EOF
621 compile_object
622}
623
624check_include() {
625cat > $TMPC <<EOF
626#include <$1>
627int main(void) { return 0; }
628EOF
629 compile_object
630}
631
632write_c_skeleton() {
633 cat > $TMPC <<EOF
634int main(void) { return 0; }
635EOF
636}
637
638write_c_fuzzer_skeleton() {
639 cat > $TMPC <<EOF
640#include <stdint.h>
641#include <sys/types.h>
642int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
643int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
644EOF
645}
646
647if check_define __linux__ ; then
648 targetos="Linux"
649elif check_define _WIN32 ; then
650 targetos='MINGW32'
651elif check_define __OpenBSD__ ; then
652 targetos='OpenBSD'
653elif check_define __sun__ ; then
654 targetos='SunOS'
655elif check_define __HAIKU__ ; then
656 targetos='Haiku'
657elif check_define __FreeBSD__ ; then
658 targetos='FreeBSD'
659elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
660 targetos='GNU/kFreeBSD'
661elif check_define __DragonFly__ ; then
662 targetos='DragonFly'
663elif check_define __NetBSD__; then
664 targetos='NetBSD'
665elif check_define __APPLE__; then
666 targetos='Darwin'
667else
668 # This is a fatal error, but don't report it yet, because we
669 # might be going to just print the --help text, or it might
670 # be the result of a missing compiler.
671 targetos='bogus'
672 bogus_os='yes'
673fi
674
675# Some host OSes need non-standard checks for which CPU to use.
676# Note that these checks are broken for cross-compilation: if you're
677# cross-compiling to one of these OSes then you'll need to specify
678# the correct CPU with the --cpu option.
679case $targetos in
680Darwin)
681 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
682 # run 64-bit userspace code.
683 # If the user didn't specify a CPU explicitly and the kernel says this is
684 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
685 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
686 cpu="x86_64"
687 fi
688 ;;
689SunOS)
690 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
691 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
692 cpu="x86_64"
693 fi
694esac
695
696if test ! -z "$cpu" ; then
697 # command line argument
698 :
699elif check_define __i386__ ; then
700 cpu="i386"
701elif check_define __x86_64__ ; then
702 if check_define __ILP32__ ; then
703 cpu="x32"
704 else
705 cpu="x86_64"
706 fi
707elif check_define __sparc__ ; then
708 if check_define __arch64__ ; then
709 cpu="sparc64"
710 else
711 cpu="sparc"
712 fi
713elif check_define _ARCH_PPC ; then
714 if check_define _ARCH_PPC64 ; then
715 if check_define _LITTLE_ENDIAN ; then
716 cpu="ppc64le"
717 else
718 cpu="ppc64"
719 fi
720 else
721 cpu="ppc"
722 fi
723elif check_define __mips__ ; then
724 cpu="mips"
725elif check_define __s390__ ; then
726 if check_define __s390x__ ; then
727 cpu="s390x"
728 else
729 cpu="s390"
730 fi
731elif check_define __riscv ; then
732 if check_define _LP64 ; then
733 cpu="riscv64"
734 else
735 cpu="riscv32"
736 fi
737elif check_define __arm__ ; then
738 cpu="arm"
739elif check_define __aarch64__ ; then
740 cpu="aarch64"
741else
742 cpu=$(uname -m)
743fi
744
745ARCH=
746# Normalise host CPU name and set ARCH.
747# Note that this case should only have supported host CPUs, not guests.
748case "$cpu" in
749 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
750 supported_cpu="yes"
751 ;;
752 ppc64le)
753 ARCH="ppc64"
754 supported_cpu="yes"
755 ;;
756 i386|i486|i586|i686|i86pc|BePC)
757 cpu="i386"
758 supported_cpu="yes"
759 ;;
760 x86_64|amd64)
761 cpu="x86_64"
762 supported_cpu="yes"
763 ;;
764 armv*b|armv*l|arm)
765 cpu="arm"
766 supported_cpu="yes"
767 ;;
768 aarch64)
769 cpu="aarch64"
770 supported_cpu="yes"
771 ;;
772 mips*)
773 cpu="mips"
774 supported_cpu="yes"
775 ;;
776 sparc|sun4[cdmuv])
777 cpu="sparc"
778 supported_cpu="yes"
779 ;;
780 *)
781 # This will result in either an error or falling back to TCI later
782 ARCH=unknown
783 ;;
784esac
785if test -z "$ARCH"; then
786 ARCH="$cpu"
787fi
788
789# OS specific
790
791# host *BSD for user mode
792HOST_VARIANT_DIR=""
793
794case $targetos in
795MINGW32*)
796 mingw32="yes"
797 hax="yes"
798 vhost_user="no"
799 audio_possible_drivers="dsound sdl"
800 if check_include dsound.h; then
801 audio_drv_list="dsound"
802 else
803 audio_drv_list=""
804 fi
805 supported_os="yes"
806 pie="no"
807;;
808GNU/kFreeBSD)
809 bsd="yes"
810 audio_drv_list="oss try-sdl"
811 audio_possible_drivers="oss sdl pa"
812;;
813FreeBSD)
814 bsd="yes"
815 make="${MAKE-gmake}"
816 audio_drv_list="oss try-sdl"
817 audio_possible_drivers="oss sdl pa"
818 # needed for kinfo_getvmmap(3) in libutil.h
819 LIBS="-lutil $LIBS"
820 # needed for kinfo_getproc
821 libs_qga="-lutil $libs_qga"
822 netmap="" # enable netmap autodetect
823 HOST_VARIANT_DIR="freebsd"
824 supported_os="yes"
825;;
826DragonFly)
827 bsd="yes"
828 make="${MAKE-gmake}"
829 audio_drv_list="oss try-sdl"
830 audio_possible_drivers="oss sdl pa"
831 HOST_VARIANT_DIR="dragonfly"
832;;
833NetBSD)
834 bsd="yes"
835 hax="yes"
836 make="${MAKE-gmake}"
837 audio_drv_list="oss try-sdl"
838 audio_possible_drivers="oss sdl"
839 oss_lib="-lossaudio"
840 HOST_VARIANT_DIR="netbsd"
841 supported_os="yes"
842;;
843OpenBSD)
844 bsd="yes"
845 make="${MAKE-gmake}"
846 audio_drv_list="try-sdl"
847 audio_possible_drivers="sdl"
848 HOST_VARIANT_DIR="openbsd"
849 supported_os="yes"
850;;
851Darwin)
852 bsd="yes"
853 darwin="yes"
854 hax="yes"
855 hvf="yes"
856 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
857 if [ "$cpu" = "x86_64" ] ; then
858 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
859 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
860 fi
861 cocoa="yes"
862 audio_drv_list="coreaudio try-sdl"
863 audio_possible_drivers="coreaudio sdl"
864 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
865 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
866 # Disable attempts to use ObjectiveC features in os/object.h since they
867 # won't work when we're compiling with gcc as a C compiler.
868 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
869 HOST_VARIANT_DIR="darwin"
870 supported_os="yes"
871;;
872SunOS)
873 solaris="yes"
874 make="${MAKE-gmake}"
875 install="${INSTALL-ginstall}"
876 smbd="${SMBD-/usr/sfw/sbin/smbd}"
877 if test -f /usr/include/sys/soundcard.h ; then
878 audio_drv_list="oss try-sdl"
879 fi
880 audio_possible_drivers="oss sdl"
881# needed for CMSG_ macros in sys/socket.h
882 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
883# needed for TIOCWIN* defines in termios.h
884 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
885 solarisnetlibs="-lsocket -lnsl -lresolv"
886 LIBS="$solarisnetlibs $LIBS"
887 libs_qga="$solarisnetlibs $libs_qga"
888;;
889Haiku)
890 haiku="yes"
891 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
892 LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS"
893;;
894Linux)
895 audio_drv_list="try-pa oss"
896 audio_possible_drivers="oss alsa sdl pa"
897 linux="yes"
898 linux_user="yes"
899 kvm="yes"
900 QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
901 supported_os="yes"
902 libudev="yes"
903;;
904esac
905
906if [ "$bsd" = "yes" ] ; then
907 if [ "$darwin" != "yes" ] ; then
908 bsd_user="yes"
909 fi
910fi
911
912: ${make=${MAKE-make}}
913: ${install=${INSTALL-install}}
914# We prefer python 3.x. A bare 'python' is traditionally
915# python 2.x, but some distros have it as python 3.x, so
916# we check that too
917python=
918for binary in "${PYTHON-python3}" python
919do
920 if has "$binary"
921 then
922 python=$(command -v "$binary")
923 break
924 fi
925done
926
927sphinx_build=
928for binary in sphinx-build-3 sphinx-build
929do
930 if has "$binary"
931 then
932 sphinx_build=$(command -v "$binary")
933 break
934 fi
935done
936
937# Check for ancillary tools used in testing
938genisoimage=
939for binary in genisoimage mkisofs
940do
941 if has $binary
942 then
943 genisoimage=$(command -v "$binary")
944 break
945 fi
946done
947
948: ${smbd=${SMBD-/usr/sbin/smbd}}
949
950# Default objcc to clang if available, otherwise use CC
951if has clang; then
952 objcc=clang
953else
954 objcc="$cc"
955fi
956
957if test "$mingw32" = "yes" ; then
958 EXESUF=".exe"
959 DSOSUF=".dll"
960 # MinGW needs -mthreads for TLS and macro _MT.
961 CFLAGS="-mthreads $CFLAGS"
962 LIBS="-lwinmm -lws2_32 $LIBS"
963 write_c_skeleton;
964 if compile_prog "" "-liberty" ; then
965 LIBS="-liberty $LIBS"
966 fi
967 prefix="c:/Program Files/QEMU"
968 confsuffix=""
969 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
970fi
971
972werror=""
973
974for opt do
975 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
976 case "$opt" in
977 --help|-h) show_help=yes
978 ;;
979 --version|-V) exec cat $source_path/VERSION
980 ;;
981 --prefix=*) prefix="$optarg"
982 ;;
983 --interp-prefix=*) interp_prefix="$optarg"
984 ;;
985 --cross-prefix=*)
986 ;;
987 --cc=*)
988 ;;
989 --host-cc=*) host_cc="$optarg"
990 ;;
991 --cxx=*)
992 ;;
993 --iasl=*) iasl="$optarg"
994 ;;
995 --objcc=*) objcc="$optarg"
996 ;;
997 --make=*) make="$optarg"
998 ;;
999 --install=*) install="$optarg"
1000 ;;
1001 --python=*) python="$optarg"
1002 ;;
1003 --sphinx-build=*) sphinx_build="$optarg"
1004 ;;
1005 --gcov=*) gcov_tool="$optarg"
1006 ;;
1007 --smbd=*) smbd="$optarg"
1008 ;;
1009 --extra-cflags=*)
1010 ;;
1011 --extra-cxxflags=*)
1012 ;;
1013 --extra-ldflags=*)
1014 ;;
1015 --enable-debug-info)
1016 ;;
1017 --disable-debug-info)
1018 ;;
1019 --cross-cc-*)
1020 ;;
1021 --enable-modules)
1022 modules="yes"
1023 ;;
1024 --disable-modules)
1025 modules="no"
1026 ;;
1027 --disable-module-upgrades) module_upgrades="no"
1028 ;;
1029 --enable-module-upgrades) module_upgrades="yes"
1030 ;;
1031 --cpu=*)
1032 ;;
1033 --target-list=*) target_list="$optarg"
1034 if test "$target_list_exclude"; then
1035 error_exit "Can't mix --target-list with --target-list-exclude"
1036 fi
1037 ;;
1038 --target-list-exclude=*) target_list_exclude="$optarg"
1039 if test "$target_list"; then
1040 error_exit "Can't mix --target-list-exclude with --target-list"
1041 fi
1042 ;;
1043 --enable-trace-backends=*) trace_backends="$optarg"
1044 ;;
1045 # XXX: backwards compatibility
1046 --enable-trace-backend=*) trace_backends="$optarg"
1047 ;;
1048 --with-trace-file=*) trace_file="$optarg"
1049 ;;
1050 --with-default-devices) default_devices="yes"
1051 ;;
1052 --without-default-devices) default_devices="no"
1053 ;;
1054 --enable-gprof) gprof="yes"
1055 ;;
1056 --enable-gcov) gcov="yes"
1057 ;;
1058 --static)
1059 static="yes"
1060 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1061 ;;
1062 --mandir=*) mandir="$optarg"
1063 ;;
1064 --bindir=*) bindir="$optarg"
1065 ;;
1066 --libdir=*) libdir="$optarg"
1067 ;;
1068 --libexecdir=*) libexecdir="$optarg"
1069 ;;
1070 --includedir=*) includedir="$optarg"
1071 ;;
1072 --datadir=*) datadir="$optarg"
1073 ;;
1074 --with-confsuffix=*) confsuffix="$optarg"
1075 ;;
1076 --docdir=*) qemu_docdir="$optarg"
1077 ;;
1078 --sysconfdir=*) sysconfdir="$optarg"
1079 ;;
1080 --localstatedir=*) local_statedir="$optarg"
1081 ;;
1082 --firmwarepath=*) firmwarepath="$optarg"
1083 ;;
1084 --host=*|--build=*|\
1085 --disable-dependency-tracking|\
1086 --sbindir=*|--sharedstatedir=*|\
1087 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1088 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1089 # These switches are silently ignored, for compatibility with
1090 # autoconf-generated configure scripts. This allows QEMU's
1091 # configure to be used by RPM and similar macros that set
1092 # lots of directory switches by default.
1093 ;;
1094 --disable-sdl) sdl="no"
1095 ;;
1096 --enable-sdl) sdl="yes"
1097 ;;
1098 --disable-sdl-image) sdl_image="no"
1099 ;;
1100 --enable-sdl-image) sdl_image="yes"
1101 ;;
1102 --disable-qom-cast-debug) qom_cast_debug="no"
1103 ;;
1104 --enable-qom-cast-debug) qom_cast_debug="yes"
1105 ;;
1106 --disable-virtfs) virtfs="no"
1107 ;;
1108 --enable-virtfs) virtfs="yes"
1109 ;;
1110 --disable-mpath) mpath="no"
1111 ;;
1112 --enable-mpath) mpath="yes"
1113 ;;
1114 --disable-vnc) vnc="no"
1115 ;;
1116 --enable-vnc) vnc="yes"
1117 ;;
1118 --oss-lib=*) oss_lib="$optarg"
1119 ;;
1120 --audio-drv-list=*) audio_drv_list="$optarg"
1121 ;;
1122 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1123 ;;
1124 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1125 ;;
1126 --enable-debug-tcg) debug_tcg="yes"
1127 ;;
1128 --disable-debug-tcg) debug_tcg="no"
1129 ;;
1130 --enable-debug)
1131 # Enable debugging options that aren't excessively noisy
1132 debug_tcg="yes"
1133 debug_mutex="yes"
1134 debug="yes"
1135 strip_opt="no"
1136 fortify_source="no"
1137 ;;
1138 --enable-sanitizers) sanitizers="yes"
1139 ;;
1140 --disable-sanitizers) sanitizers="no"
1141 ;;
1142 --enable-tsan) tsan="yes"
1143 ;;
1144 --disable-tsan) tsan="no"
1145 ;;
1146 --enable-sparse) sparse="yes"
1147 ;;
1148 --disable-sparse) sparse="no"
1149 ;;
1150 --disable-strip) strip_opt="no"
1151 ;;
1152 --disable-vnc-sasl) vnc_sasl="no"
1153 ;;
1154 --enable-vnc-sasl) vnc_sasl="yes"
1155 ;;
1156 --disable-vnc-jpeg) vnc_jpeg="no"
1157 ;;
1158 --enable-vnc-jpeg) vnc_jpeg="yes"
1159 ;;
1160 --disable-vnc-png) vnc_png="no"
1161 ;;
1162 --enable-vnc-png) vnc_png="yes"
1163 ;;
1164 --disable-slirp) slirp="no"
1165 ;;
1166 --enable-slirp=git) slirp="git"
1167 ;;
1168 --enable-slirp=system) slirp="system"
1169 ;;
1170 --disable-vde) vde="no"
1171 ;;
1172 --enable-vde) vde="yes"
1173 ;;
1174 --disable-netmap) netmap="no"
1175 ;;
1176 --enable-netmap) netmap="yes"
1177 ;;
1178 --disable-xen) xen="no"
1179 ;;
1180 --enable-xen) xen="yes"
1181 ;;
1182 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1183 ;;
1184 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1185 ;;
1186 --disable-brlapi) brlapi="no"
1187 ;;
1188 --enable-brlapi) brlapi="yes"
1189 ;;
1190 --disable-kvm) kvm="no"
1191 ;;
1192 --enable-kvm) kvm="yes"
1193 ;;
1194 --disable-hax) hax="no"
1195 ;;
1196 --enable-hax) hax="yes"
1197 ;;
1198 --disable-hvf) hvf="no"
1199 ;;
1200 --enable-hvf) hvf="yes"
1201 ;;
1202 --disable-whpx) whpx="no"
1203 ;;
1204 --enable-whpx) whpx="yes"
1205 ;;
1206 --disable-tcg-interpreter) tcg_interpreter="no"
1207 ;;
1208 --enable-tcg-interpreter) tcg_interpreter="yes"
1209 ;;
1210 --disable-cap-ng) cap_ng="no"
1211 ;;
1212 --enable-cap-ng) cap_ng="yes"
1213 ;;
1214 --disable-tcg) tcg="no"
1215 ;;
1216 --enable-tcg) tcg="yes"
1217 ;;
1218 --disable-malloc-trim) malloc_trim="no"
1219 ;;
1220 --enable-malloc-trim) malloc_trim="yes"
1221 ;;
1222 --disable-spice) spice="no"
1223 ;;
1224 --enable-spice) spice="yes"
1225 ;;
1226 --disable-libiscsi) libiscsi="no"
1227 ;;
1228 --enable-libiscsi) libiscsi="yes"
1229 ;;
1230 --disable-libnfs) libnfs="no"
1231 ;;
1232 --enable-libnfs) libnfs="yes"
1233 ;;
1234 --enable-profiler) profiler="yes"
1235 ;;
1236 --disable-cocoa) cocoa="no"
1237 ;;
1238 --enable-cocoa)
1239 cocoa="yes" ;
1240 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1241 ;;
1242 --disable-system) softmmu="no"
1243 ;;
1244 --enable-system) softmmu="yes"
1245 ;;
1246 --disable-user)
1247 linux_user="no" ;
1248 bsd_user="no" ;
1249 ;;
1250 --enable-user) ;;
1251 --disable-linux-user) linux_user="no"
1252 ;;
1253 --enable-linux-user) linux_user="yes"
1254 ;;
1255 --disable-bsd-user) bsd_user="no"
1256 ;;
1257 --enable-bsd-user) bsd_user="yes"
1258 ;;
1259 --enable-pie) pie="yes"
1260 ;;
1261 --disable-pie) pie="no"
1262 ;;
1263 --enable-werror) werror="yes"
1264 ;;
1265 --disable-werror) werror="no"
1266 ;;
1267 --enable-stack-protector) stack_protector="yes"
1268 ;;
1269 --disable-stack-protector) stack_protector="no"
1270 ;;
1271 --enable-safe-stack) safe_stack="yes"
1272 ;;
1273 --disable-safe-stack) safe_stack="no"
1274 ;;
1275 --disable-curses) curses="no"
1276 ;;
1277 --enable-curses) curses="yes"
1278 ;;
1279 --disable-iconv) iconv="no"
1280 ;;
1281 --enable-iconv) iconv="yes"
1282 ;;
1283 --disable-curl) curl="no"
1284 ;;
1285 --enable-curl) curl="yes"
1286 ;;
1287 --disable-fdt) fdt="no"
1288 ;;
1289 --enable-fdt) fdt="yes"
1290 ;;
1291 --disable-linux-aio) linux_aio="no"
1292 ;;
1293 --enable-linux-aio) linux_aio="yes"
1294 ;;
1295 --disable-linux-io-uring) linux_io_uring="no"
1296 ;;
1297 --enable-linux-io-uring) linux_io_uring="yes"
1298 ;;
1299 --disable-attr) attr="no"
1300 ;;
1301 --enable-attr) attr="yes"
1302 ;;
1303 --disable-membarrier) membarrier="no"
1304 ;;
1305 --enable-membarrier) membarrier="yes"
1306 ;;
1307 --disable-blobs) blobs="no"
1308 ;;
1309 --with-pkgversion=*) pkgversion="$optarg"
1310 ;;
1311 --with-coroutine=*) coroutine="$optarg"
1312 ;;
1313 --disable-coroutine-pool) coroutine_pool="no"
1314 ;;
1315 --enable-coroutine-pool) coroutine_pool="yes"
1316 ;;
1317 --enable-debug-stack-usage) debug_stack_usage="yes"
1318 ;;
1319 --enable-crypto-afalg) crypto_afalg="yes"
1320 ;;
1321 --disable-crypto-afalg) crypto_afalg="no"
1322 ;;
1323 --disable-docs) docs="no"
1324 ;;
1325 --enable-docs) docs="yes"
1326 ;;
1327 --disable-vhost-net) vhost_net="no"
1328 ;;
1329 --enable-vhost-net) vhost_net="yes"
1330 ;;
1331 --disable-vhost-crypto) vhost_crypto="no"
1332 ;;
1333 --enable-vhost-crypto) vhost_crypto="yes"
1334 ;;
1335 --disable-vhost-scsi) vhost_scsi="no"
1336 ;;
1337 --enable-vhost-scsi) vhost_scsi="yes"
1338 ;;
1339 --disable-vhost-vsock) vhost_vsock="no"
1340 ;;
1341 --enable-vhost-vsock) vhost_vsock="yes"
1342 ;;
1343 --disable-vhost-user-fs) vhost_user_fs="no"
1344 ;;
1345 --enable-vhost-user-fs) vhost_user_fs="yes"
1346 ;;
1347 --disable-opengl) opengl="no"
1348 ;;
1349 --enable-opengl) opengl="yes"
1350 ;;
1351 --disable-rbd) rbd="no"
1352 ;;
1353 --enable-rbd) rbd="yes"
1354 ;;
1355 --disable-xfsctl) xfs="no"
1356 ;;
1357 --enable-xfsctl) xfs="yes"
1358 ;;
1359 --disable-smartcard) smartcard="no"
1360 ;;
1361 --enable-smartcard) smartcard="yes"
1362 ;;
1363 --disable-libusb) libusb="no"
1364 ;;
1365 --enable-libusb) libusb="yes"
1366 ;;
1367 --disable-usb-redir) usb_redir="no"
1368 ;;
1369 --enable-usb-redir) usb_redir="yes"
1370 ;;
1371 --disable-zlib-test) zlib="no"
1372 ;;
1373 --disable-lzo) lzo="no"
1374 ;;
1375 --enable-lzo) lzo="yes"
1376 ;;
1377 --disable-snappy) snappy="no"
1378 ;;
1379 --enable-snappy) snappy="yes"
1380 ;;
1381 --disable-bzip2) bzip2="no"
1382 ;;
1383 --enable-bzip2) bzip2="yes"
1384 ;;
1385 --enable-lzfse) lzfse="yes"
1386 ;;
1387 --disable-lzfse) lzfse="no"
1388 ;;
1389 --disable-zstd) zstd="no"
1390 ;;
1391 --enable-zstd) zstd="yes"
1392 ;;
1393 --enable-guest-agent) guest_agent="yes"
1394 ;;
1395 --disable-guest-agent) guest_agent="no"
1396 ;;
1397 --enable-guest-agent-msi) guest_agent_msi="yes"
1398 ;;
1399 --disable-guest-agent-msi) guest_agent_msi="no"
1400 ;;
1401 --with-vss-sdk) vss_win32_sdk=""
1402 ;;
1403 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1404 ;;
1405 --without-vss-sdk) vss_win32_sdk="no"
1406 ;;
1407 --with-win-sdk) win_sdk=""
1408 ;;
1409 --with-win-sdk=*) win_sdk="$optarg"
1410 ;;
1411 --without-win-sdk) win_sdk="no"
1412 ;;
1413 --enable-tools) want_tools="yes"
1414 ;;
1415 --disable-tools) want_tools="no"
1416 ;;
1417 --enable-seccomp) seccomp="yes"
1418 ;;
1419 --disable-seccomp) seccomp="no"
1420 ;;
1421 --disable-glusterfs) glusterfs="no"
1422 ;;
1423 --disable-avx2) avx2_opt="no"
1424 ;;
1425 --enable-avx2) avx2_opt="yes"
1426 ;;
1427 --disable-avx512f) avx512f_opt="no"
1428 ;;
1429 --enable-avx512f) avx512f_opt="yes"
1430 ;;
1431
1432 --enable-glusterfs) glusterfs="yes"
1433 ;;
1434 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1435 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1436 ;;
1437 --enable-vhdx|--disable-vhdx)
1438 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1439 ;;
1440 --enable-uuid|--disable-uuid)
1441 echo "$0: $opt is obsolete, UUID support is always built" >&2
1442 ;;
1443 --disable-gtk) gtk="no"
1444 ;;
1445 --enable-gtk) gtk="yes"
1446 ;;
1447 --tls-priority=*) tls_priority="$optarg"
1448 ;;
1449 --disable-gnutls) gnutls="no"
1450 ;;
1451 --enable-gnutls) gnutls="yes"
1452 ;;
1453 --disable-nettle) nettle="no"
1454 ;;
1455 --enable-nettle) nettle="yes"
1456 ;;
1457 --disable-gcrypt) gcrypt="no"
1458 ;;
1459 --enable-gcrypt) gcrypt="yes"
1460 ;;
1461 --disable-auth-pam) auth_pam="no"
1462 ;;
1463 --enable-auth-pam) auth_pam="yes"
1464 ;;
1465 --enable-rdma) rdma="yes"
1466 ;;
1467 --disable-rdma) rdma="no"
1468 ;;
1469 --enable-pvrdma) pvrdma="yes"
1470 ;;
1471 --disable-pvrdma) pvrdma="no"
1472 ;;
1473 --disable-vte) vte="no"
1474 ;;
1475 --enable-vte) vte="yes"
1476 ;;
1477 --disable-virglrenderer) virglrenderer="no"
1478 ;;
1479 --enable-virglrenderer) virglrenderer="yes"
1480 ;;
1481 --disable-tpm) tpm="no"
1482 ;;
1483 --enable-tpm) tpm="yes"
1484 ;;
1485 --disable-libssh) libssh="no"
1486 ;;
1487 --enable-libssh) libssh="yes"
1488 ;;
1489 --disable-live-block-migration) live_block_migration="no"
1490 ;;
1491 --enable-live-block-migration) live_block_migration="yes"
1492 ;;
1493 --disable-numa) numa="no"
1494 ;;
1495 --enable-numa) numa="yes"
1496 ;;
1497 --disable-libxml2) libxml2="no"
1498 ;;
1499 --enable-libxml2) libxml2="yes"
1500 ;;
1501 --disable-tcmalloc) tcmalloc="no"
1502 ;;
1503 --enable-tcmalloc) tcmalloc="yes"
1504 ;;
1505 --disable-jemalloc) jemalloc="no"
1506 ;;
1507 --enable-jemalloc) jemalloc="yes"
1508 ;;
1509 --disable-replication) replication="no"
1510 ;;
1511 --enable-replication) replication="yes"
1512 ;;
1513 --disable-bochs) bochs="no"
1514 ;;
1515 --enable-bochs) bochs="yes"
1516 ;;
1517 --disable-cloop) cloop="no"
1518 ;;
1519 --enable-cloop) cloop="yes"
1520 ;;
1521 --disable-dmg) dmg="no"
1522 ;;
1523 --enable-dmg) dmg="yes"
1524 ;;
1525 --disable-qcow1) qcow1="no"
1526 ;;
1527 --enable-qcow1) qcow1="yes"
1528 ;;
1529 --disable-vdi) vdi="no"
1530 ;;
1531 --enable-vdi) vdi="yes"
1532 ;;
1533 --disable-vvfat) vvfat="no"
1534 ;;
1535 --enable-vvfat) vvfat="yes"
1536 ;;
1537 --disable-qed) qed="no"
1538 ;;
1539 --enable-qed) qed="yes"
1540 ;;
1541 --disable-parallels) parallels="no"
1542 ;;
1543 --enable-parallels) parallels="yes"
1544 ;;
1545 --disable-sheepdog) sheepdog="no"
1546 ;;
1547 --enable-sheepdog) sheepdog="yes"
1548 ;;
1549 --disable-vhost-user) vhost_user="no"
1550 ;;
1551 --enable-vhost-user) vhost_user="yes"
1552 ;;
1553 --disable-vhost-vdpa) vhost_vdpa="no"
1554 ;;
1555 --enable-vhost-vdpa) vhost_vdpa="yes"
1556 ;;
1557 --disable-vhost-kernel) vhost_kernel="no"
1558 ;;
1559 --enable-vhost-kernel) vhost_kernel="yes"
1560 ;;
1561 --disable-capstone) capstone="no"
1562 ;;
1563 --enable-capstone) capstone="yes"
1564 ;;
1565 --enable-capstone=git) capstone="git"
1566 ;;
1567 --enable-capstone=system) capstone="system"
1568 ;;
1569 --with-git=*) git="$optarg"
1570 ;;
1571 --enable-git-update) git_update=yes
1572 ;;
1573 --disable-git-update) git_update=no
1574 ;;
1575 --enable-debug-mutex) debug_mutex=yes
1576 ;;
1577 --disable-debug-mutex) debug_mutex=no
1578 ;;
1579 --enable-libpmem) libpmem=yes
1580 ;;
1581 --disable-libpmem) libpmem=no
1582 ;;
1583 --enable-xkbcommon) xkbcommon=yes
1584 ;;
1585 --disable-xkbcommon) xkbcommon=no
1586 ;;
1587 --enable-plugins) plugins="yes"
1588 ;;
1589 --disable-plugins) plugins="no"
1590 ;;
1591 --enable-containers) use_containers="yes"
1592 ;;
1593 --disable-containers) use_containers="no"
1594 ;;
1595 --enable-fuzzing) fuzzing=yes
1596 ;;
1597 --disable-fuzzing) fuzzing=no
1598 ;;
1599 --gdb=*) gdb_bin="$optarg"
1600 ;;
1601 --enable-rng-none) rng_none=yes
1602 ;;
1603 --disable-rng-none) rng_none=no
1604 ;;
1605 --enable-keyring) secret_keyring="yes"
1606 ;;
1607 --disable-keyring) secret_keyring="no"
1608 ;;
1609 --enable-libdaxctl) libdaxctl=yes
1610 ;;
1611 --disable-libdaxctl) libdaxctl=no
1612 ;;
1613 *)
1614 echo "ERROR: unknown option $opt"
1615 echo "Try '$0 --help' for more information"
1616 exit 1
1617 ;;
1618 esac
1619done
1620
1621libdir="${libdir:-$prefix/lib}"
1622libexecdir="${libexecdir:-$prefix/libexec}"
1623includedir="${includedir:-$prefix/include}"
1624
1625if test "$mingw32" = "yes" ; then
1626 mandir="$prefix"
1627 datadir="$prefix"
1628 qemu_docdir="$prefix"
1629 bindir="$prefix"
1630 sysconfdir="$prefix"
1631 local_statedir=
1632else
1633 mandir="${mandir:-$prefix/share/man}"
1634 datadir="${datadir:-$prefix/share}"
1635 qemu_docdir="${qemu_docdir:-$prefix/share/doc/qemu}"
1636 bindir="${bindir:-$prefix/bin}"
1637 sysconfdir="${sysconfdir:-$prefix/etc}"
1638 local_statedir="${local_statedir:-$prefix/var}"
1639fi
1640
1641case "$cpu" in
1642 ppc)
1643 CPU_CFLAGS="-m32"
1644 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1645 ;;
1646 ppc64)
1647 CPU_CFLAGS="-m64"
1648 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1649 ;;
1650 sparc)
1651 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1652 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1653 ;;
1654 sparc64)
1655 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1656 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1657 ;;
1658 s390)
1659 CPU_CFLAGS="-m31"
1660 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1661 ;;
1662 s390x)
1663 CPU_CFLAGS="-m64"
1664 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1665 ;;
1666 i386)
1667 CPU_CFLAGS="-m32"
1668 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1669 ;;
1670 x86_64)
1671 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1672 # If we truly care, we should simply detect this case at
1673 # runtime and generate the fallback to serial emulation.
1674 CPU_CFLAGS="-m64 -mcx16"
1675 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1676 ;;
1677 x32)
1678 CPU_CFLAGS="-mx32"
1679 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1680 ;;
1681 # No special flags required for other host CPUs
1682esac
1683
1684eval "cross_cc_${cpu}=\$host_cc"
1685cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1686QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1687
1688# For user-mode emulation the host arch has to be one we explicitly
1689# support, even if we're using TCI.
1690if [ "$ARCH" = "unknown" ]; then
1691 bsd_user="no"
1692 linux_user="no"
1693fi
1694
1695if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1696 tcg="no"
1697fi
1698
1699default_target_list=""
1700
1701mak_wilds=""
1702
1703if [ "$softmmu" = "yes" ]; then
1704 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1705fi
1706if [ "$linux_user" = "yes" ]; then
1707 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1708fi
1709if [ "$bsd_user" = "yes" ]; then
1710 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1711fi
1712
1713if test -z "$target_list_exclude"; then
1714 for config in $mak_wilds; do
1715 default_target_list="${default_target_list} $(basename "$config" .mak)"
1716 done
1717else
1718 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1719 for config in $mak_wilds; do
1720 target="$(basename "$config" .mak)"
1721 exclude="no"
1722 for excl in $exclude_list; do
1723 if test "$excl" = "$target"; then
1724 exclude="yes"
1725 break;
1726 fi
1727 done
1728 if test "$exclude" = "no"; then
1729 default_target_list="${default_target_list} $target"
1730 fi
1731 done
1732fi
1733
1734# Enumerate public trace backends for --help output
1735trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1736
1737if test x"$show_help" = x"yes" ; then
1738cat << EOF
1739
1740Usage: configure [options]
1741Options: [defaults in brackets after descriptions]
1742
1743Standard options:
1744 --help print this message
1745 --prefix=PREFIX install in PREFIX [$prefix]
1746 --interp-prefix=PREFIX where to find shared libraries, etc.
1747 use %M for cpu name [$interp_prefix]
1748 --target-list=LIST set target list (default: build everything)
1749$(echo Available targets: $default_target_list | \
1750 fold -s -w 53 | sed -e 's/^/ /')
1751 --target-list-exclude=LIST exclude a set of targets from the default target-list
1752
1753Advanced options (experts only):
1754 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1755 --cc=CC use C compiler CC [$cc]
1756 --iasl=IASL use ACPI compiler IASL [$iasl]
1757 --host-cc=CC use C compiler CC [$host_cc] for code run at
1758 build time
1759 --cxx=CXX use C++ compiler CXX [$cxx]
1760 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1761 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1762 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1763 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1764 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1765 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1766 --make=MAKE use specified make [$make]
1767 --install=INSTALL use specified install [$install]
1768 --python=PYTHON use specified python [$python]
1769 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1770 --smbd=SMBD use specified smbd [$smbd]
1771 --with-git=GIT use specified git [$git]
1772 --static enable static build [$static]
1773 --mandir=PATH install man pages in PATH
1774 --datadir=PATH install firmware in PATH$confsuffix
1775 --docdir=PATH install documentation in PATH$confsuffix
1776 --bindir=PATH install binaries in PATH
1777 --libdir=PATH install libraries in PATH
1778 --libexecdir=PATH install helper binaries in PATH
1779 --sysconfdir=PATH install config in PATH$confsuffix
1780 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1781 --firmwarepath=PATH search PATH for firmware files
1782 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1783 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1784 --with-pkgversion=VERS use specified string as sub-version of the package
1785 --enable-debug enable common debug build options
1786 --enable-sanitizers enable default sanitizers
1787 --enable-tsan enable thread sanitizer
1788 --disable-strip disable stripping binaries
1789 --disable-werror disable compilation abort on warning
1790 --disable-stack-protector disable compiler-provided stack protection
1791 --audio-drv-list=LIST set audio drivers list:
1792 Available drivers: $audio_possible_drivers
1793 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1794 --block-drv-rw-whitelist=L
1795 set block driver read-write whitelist
1796 (affects only QEMU, not qemu-img)
1797 --block-drv-ro-whitelist=L
1798 set block driver read-only whitelist
1799 (affects only QEMU, not qemu-img)
1800 --enable-trace-backends=B Set trace backend
1801 Available backends: $trace_backend_list
1802 --with-trace-file=NAME Full PATH,NAME of file to store traces
1803 Default:trace-<pid>
1804 --disable-slirp disable SLIRP userspace network connectivity
1805 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1806 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1807 --oss-lib path to OSS library
1808 --cpu=CPU Build for host CPU [$cpu]
1809 --with-coroutine=BACKEND coroutine backend. Supported options:
1810 ucontext, sigaltstack, windows
1811 --enable-gcov enable test coverage analysis with gcov
1812 --gcov=GCOV use specified gcov [$gcov_tool]
1813 --disable-blobs disable installing provided firmware blobs
1814 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1815 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1816 --tls-priority default TLS protocol/cipher priority string
1817 --enable-gprof QEMU profiling with gprof
1818 --enable-profiler profiler support
1819 --enable-debug-stack-usage
1820 track the maximum stack usage of stacks created by qemu_alloc_stack
1821 --enable-plugins
1822 enable plugins via shared library loading
1823 --disable-containers don't use containers for cross-building
1824 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1825
1826Optional features, enabled with --enable-FEATURE and
1827disabled with --disable-FEATURE, default is enabled if available:
1828
1829 system all system emulation targets
1830 user supported user emulation targets
1831 linux-user all linux usermode emulation targets
1832 bsd-user all BSD usermode emulation targets
1833 docs build documentation
1834 guest-agent build the QEMU Guest Agent
1835 guest-agent-msi build guest agent Windows MSI installation package
1836 pie Position Independent Executables
1837 modules modules support (non-Windows)
1838 module-upgrades try to load modules from alternate paths for upgrades
1839 debug-tcg TCG debugging (default is disabled)
1840 debug-info debugging information
1841 sparse sparse checker
1842 safe-stack SafeStack Stack Smash Protection. Depends on
1843 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1844
1845 gnutls GNUTLS cryptography support
1846 nettle nettle cryptography support
1847 gcrypt libgcrypt cryptography support
1848 auth-pam PAM access control
1849 sdl SDL UI
1850 sdl-image SDL Image support for icons
1851 gtk gtk UI
1852 vte vte support for the gtk UI
1853 curses curses UI
1854 iconv font glyph conversion support
1855 vnc VNC UI support
1856 vnc-sasl SASL encryption for VNC server
1857 vnc-jpeg JPEG lossy compression for VNC server
1858 vnc-png PNG compression for VNC server
1859 cocoa Cocoa UI (Mac OS X only)
1860 virtfs VirtFS
1861 mpath Multipath persistent reservation passthrough
1862 xen xen backend driver support
1863 xen-pci-passthrough PCI passthrough support for Xen
1864 brlapi BrlAPI (Braile)
1865 curl curl connectivity
1866 membarrier membarrier system call (for Linux 4.14+ or Windows)
1867 fdt fdt device tree
1868 kvm KVM acceleration support
1869 hax HAX acceleration support
1870 hvf Hypervisor.framework acceleration support
1871 whpx Windows Hypervisor Platform acceleration support
1872 rdma Enable RDMA-based migration
1873 pvrdma Enable PVRDMA support
1874 vde support for vde network
1875 netmap support for netmap network
1876 linux-aio Linux AIO support
1877 linux-io-uring Linux io_uring support
1878 cap-ng libcap-ng support
1879 attr attr and xattr support
1880 vhost-net vhost-net kernel acceleration support
1881 vhost-vsock virtio sockets device support
1882 vhost-scsi vhost-scsi kernel target support
1883 vhost-crypto vhost-user-crypto backend support
1884 vhost-kernel vhost kernel backend support
1885 vhost-user vhost-user backend support
1886 vhost-vdpa vhost-vdpa kernel backend support
1887 spice spice
1888 rbd rados block device (rbd)
1889 libiscsi iscsi support
1890 libnfs nfs support
1891 smartcard smartcard support (libcacard)
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 sheepdog sheepdog block driver support
1929 crypto-afalg Linux AF_ALG crypto backend driver
1930 capstone capstone disassembler support
1931 debug-mutex mutex debugging support
1932 libpmem libpmem support
1933 xkbcommon xkbcommon support
1934 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1935 libdaxctl libdaxctl support
1936
1937NOTE: The object files are built at the place where configure is launched
1938EOF
1939exit 0
1940fi
1941
1942# Remove old dependency files to make sure that they get properly regenerated
1943rm -f */config-devices.mak.d
1944
1945# Remove syscall_nr.h to be sure they will be regenerated in the build
1946# directory, not in the source directory
1947for arch in alpha hppa m68k xtensa sh4 microblaze arm ppc s390x sparc sparc64 \
1948 i386 x86_64 mips mips64 ; do
1949 # remove the file if it has been generated in the source directory
1950 rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
1951 # remove the dependency files
1952 for target in ${arch}*-linux-user ; do
1953 test -d "${target}" && find "${target}" -type f -name "*.d" \
1954 -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
1955 -print | while read file ; do rm "${file}" "${file%.d}.o" ; done
1956 done
1957done
1958
1959if test -z "$python"
1960then
1961 error_exit "Python not found. Use --python=/path/to/python"
1962fi
1963
1964# Note that if the Python conditional here evaluates True we will exit
1965# with status 1 which is a shell 'false' value.
1966if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1967 error_exit "Cannot use '$python', Python >= 3.5 is required." \
1968 "Use --python=/path/to/python to specify a supported Python."
1969fi
1970
1971# Preserve python version since some functionality is dependent on it
1972python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
1973
1974# Suppress writing compiled files
1975python="$python -B"
1976
1977# Check that the C compiler works. Doing this here before testing
1978# the host CPU ensures that we had a valid CC to autodetect the
1979# $cpu var (and we should bail right here if that's not the case).
1980# It also allows the help message to be printed without a CC.
1981write_c_skeleton;
1982if compile_object ; then
1983 : C compiler works ok
1984else
1985 error_exit "\"$cc\" either does not exist or does not work"
1986fi
1987if ! compile_prog ; then
1988 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1989fi
1990
1991# Now we have handled --enable-tcg-interpreter and know we're not just
1992# printing the help message, bail out if the host CPU isn't supported.
1993if test "$ARCH" = "unknown"; then
1994 if test "$tcg_interpreter" = "yes" ; then
1995 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1996 else
1997 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1998 fi
1999fi
2000
2001# Consult white-list to determine whether to enable werror
2002# by default. Only enable by default for git builds
2003if test -z "$werror" ; then
2004 if test -e "$source_path/.git" && \
2005 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2006 werror="yes"
2007 else
2008 werror="no"
2009 fi
2010fi
2011
2012if test "$bogus_os" = "yes"; then
2013 # Now that we know that we're not printing the help and that
2014 # the compiler works (so the results of the check_defines we used
2015 # to identify the OS are reliable), if we didn't recognize the
2016 # host OS we should stop now.
2017 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2018fi
2019
2020# Check whether the compiler matches our minimum requirements:
2021cat > $TMPC << EOF
2022#if defined(__clang_major__) && defined(__clang_minor__)
2023# ifdef __apple_build_version__
2024# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2025# error You need at least XCode Clang v5.1 to compile QEMU
2026# endif
2027# else
2028# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2029# error You need at least Clang v3.4 to compile QEMU
2030# endif
2031# endif
2032#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2033# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2034# error You need at least GCC v4.8 to compile QEMU
2035# endif
2036#else
2037# error You either need GCC or Clang to compiler QEMU
2038#endif
2039int main (void) { return 0; }
2040EOF
2041if ! compile_prog "" "" ; then
2042 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2043fi
2044
2045# Accumulate -Wfoo and -Wno-bar separately.
2046# We will list all of the enable flags first, and the disable flags second.
2047# Note that we do not add -Werror, because that would enable it for all
2048# configure tests. If a configure test failed due to -Werror this would
2049# just silently disable some features, so it's too error prone.
2050
2051warn_flags=
2052add_to warn_flags -Wold-style-declaration
2053add_to warn_flags -Wold-style-definition
2054add_to warn_flags -Wtype-limits
2055add_to warn_flags -Wformat-security
2056add_to warn_flags -Wformat-y2k
2057add_to warn_flags -Winit-self
2058add_to warn_flags -Wignored-qualifiers
2059add_to warn_flags -Wempty-body
2060add_to warn_flags -Wnested-externs
2061add_to warn_flags -Wendif-labels
2062add_to warn_flags -Wexpansion-to-defined
2063
2064nowarn_flags=
2065add_to nowarn_flags -Wno-initializer-overrides
2066add_to nowarn_flags -Wno-missing-include-dirs
2067add_to nowarn_flags -Wno-shift-negative-value
2068add_to nowarn_flags -Wno-string-plus-int
2069add_to nowarn_flags -Wno-typedef-redefinition
2070add_to nowarn_flags -Wno-tautological-type-limit-compare
2071add_to nowarn_flags -Wno-psabi
2072
2073gcc_flags="$warn_flags $nowarn_flags"
2074
2075cc_has_warning_flag() {
2076 write_c_skeleton;
2077
2078 # Use the positive sense of the flag when testing for -Wno-wombat
2079 # support (gcc will happily accept the -Wno- form of unknown
2080 # warning options).
2081 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2082 compile_prog "-Werror $optflag" ""
2083}
2084
2085for flag in $gcc_flags; do
2086 if cc_has_warning_flag $flag ; then
2087 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2088 fi
2089done
2090
2091if test "$stack_protector" != "no"; then
2092 cat > $TMPC << EOF
2093int main(int argc, char *argv[])
2094{
2095 char arr[64], *p = arr, *c = argv[0];
2096 while (*c) {
2097 *p++ = *c++;
2098 }
2099 return 0;
2100}
2101EOF
2102 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2103 sp_on=0
2104 for flag in $gcc_flags; do
2105 # We need to check both a compile and a link, since some compiler
2106 # setups fail only on a .c->.o compile and some only at link time
2107 if compile_object "-Werror $flag" &&
2108 compile_prog "-Werror $flag" ""; then
2109 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2110 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2111 sp_on=1
2112 break
2113 fi
2114 done
2115 if test "$stack_protector" = yes; then
2116 if test $sp_on = 0; then
2117 error_exit "Stack protector not supported"
2118 fi
2119 fi
2120fi
2121
2122# Disable -Wmissing-braces on older compilers that warn even for
2123# the "universal" C zero initializer {0}.
2124cat > $TMPC << EOF
2125struct {
2126 int a[2];
2127} x = {0};
2128EOF
2129if compile_object "-Werror" "" ; then
2130 :
2131else
2132 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2133fi
2134
2135# Our module code doesn't support Windows
2136if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2137 error_exit "Modules are not available for Windows"
2138fi
2139
2140# module_upgrades is only reasonable if modules are enabled
2141if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2142 error_exit "Can't enable module-upgrades as Modules are not enabled"
2143fi
2144
2145# Static linking is not possible with modules or PIE
2146if test "$static" = "yes" ; then
2147 if test "$modules" = "yes" ; then
2148 error_exit "static and modules are mutually incompatible"
2149 fi
2150fi
2151
2152# Unconditional check for compiler __thread support
2153 cat > $TMPC << EOF
2154static __thread int tls_var;
2155int main(void) { return tls_var; }
2156EOF
2157
2158if ! compile_prog "-Werror" "" ; then
2159 error_exit "Your compiler does not support the __thread specifier for " \
2160 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2161fi
2162
2163cat > $TMPC << EOF
2164
2165#ifdef __linux__
2166# define THREAD __thread
2167#else
2168# define THREAD
2169#endif
2170static THREAD int tls_var;
2171int main(void) { return tls_var; }
2172EOF
2173
2174# Check we support --no-pie first; we will need this for building ROMs.
2175if compile_prog "-Werror -fno-pie" "-no-pie"; then
2176 CFLAGS_NOPIE="-fno-pie"
2177 LDFLAGS_NOPIE="-no-pie"
2178fi
2179
2180if test "$static" = "yes"; then
2181 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2182 CFLAGS="-fPIE -DPIE $CFLAGS"
2183 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2184 pie="yes"
2185 elif test "$pie" = "yes"; then
2186 error_exit "-static-pie not available due to missing toolchain support"
2187 else
2188 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2189 pie="no"
2190 fi
2191elif test "$pie" = "no"; then
2192 CFLAGS="$CFLAGS_NOPIE $CFLAGS"
2193 LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
2194elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2195 CFLAGS="-fPIE -DPIE $CFLAGS"
2196 LDFLAGS="-pie $LDFLAGS"
2197 pie="yes"
2198elif test "$pie" = "yes"; then
2199 error_exit "PIE not available due to missing toolchain support"
2200else
2201 echo "Disabling PIE due to missing toolchain support"
2202 pie="no"
2203fi
2204
2205# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2206# The combination is known as "full relro", because .got.plt is read-only too.
2207if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2208 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2209fi
2210
2211##########################################
2212# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2213# use i686 as default anyway, but for those that don't, an explicit
2214# specification is necessary
2215
2216if test "$cpu" = "i386"; then
2217 cat > $TMPC << EOF
2218static int sfaa(int *ptr)
2219{
2220 return __sync_fetch_and_and(ptr, 0);
2221}
2222
2223int main(void)
2224{
2225 int val = 42;
2226 val = __sync_val_compare_and_swap(&val, 0, 1);
2227 sfaa(&val);
2228 return val;
2229}
2230EOF
2231 if ! compile_prog "" "" ; then
2232 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2233 fi
2234fi
2235
2236#########################################
2237# Solaris specific configure tool chain decisions
2238
2239if test "$solaris" = "yes" ; then
2240 if has $install; then
2241 :
2242 else
2243 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2244 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2245 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2246 fi
2247 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2248 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2249 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2250 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2251 fi
2252 if has ar; then
2253 :
2254 else
2255 if test -f /usr/ccs/bin/ar ; then
2256 error_exit "No path includes ar" \
2257 "Add /usr/ccs/bin to your path and rerun configure"
2258 fi
2259 error_exit "No path includes ar"
2260 fi
2261fi
2262
2263if test -z "${target_list+xxx}" ; then
2264 for target in $default_target_list; do
2265 supported_target $target 2>/dev/null && \
2266 target_list="$target_list $target"
2267 done
2268 target_list="${target_list# }"
2269else
2270 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2271 for target in $target_list; do
2272 # Check that we recognised the target name; this allows a more
2273 # friendly error message than if we let it fall through.
2274 case " $default_target_list " in
2275 *" $target "*)
2276 ;;
2277 *)
2278 error_exit "Unknown target name '$target'"
2279 ;;
2280 esac
2281 supported_target $target || exit 1
2282 done
2283fi
2284
2285# see if system emulation was really requested
2286case " $target_list " in
2287 *"-softmmu "*) softmmu=yes
2288 ;;
2289 *) softmmu=no
2290 ;;
2291esac
2292
2293for target in $target_list; do
2294 case "$target" in
2295 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2296 edk2_blobs="yes"
2297 ;;
2298 esac
2299done
2300# The EDK2 binaries are compressed with bzip2
2301if test "$edk2_blobs" = "yes" && ! has bzip2; then
2302 error_exit "The bzip2 program is required for building QEMU"
2303fi
2304
2305feature_not_found() {
2306 feature=$1
2307 remedy=$2
2308
2309 error_exit "User requested feature $feature" \
2310 "configure was not able to find it." \
2311 "$remedy"
2312}
2313
2314# ---
2315# big/little endian test
2316cat > $TMPC << EOF
2317short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2318short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2319extern int foo(short *, short *);
2320int main(int argc, char *argv[]) {
2321 return foo(big_endian, little_endian);
2322}
2323EOF
2324
2325if compile_object ; then
2326 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2327 bigendian="yes"
2328 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2329 bigendian="no"
2330 else
2331 echo big/little test failed
2332 fi
2333else
2334 echo big/little test failed
2335fi
2336
2337##########################################
2338# system tools
2339if test -z "$want_tools"; then
2340 if test "$softmmu" = "no"; then
2341 want_tools=no
2342 else
2343 want_tools=yes
2344 fi
2345fi
2346
2347##########################################
2348# cocoa implies not SDL or GTK
2349# (the cocoa UI code currently assumes it is always the active UI
2350# and doesn't interact well with other UI frontend code)
2351if test "$cocoa" = "yes"; then
2352 if test "$sdl" = "yes"; then
2353 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2354 fi
2355 if test "$gtk" = "yes"; then
2356 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2357 fi
2358 gtk=no
2359 sdl=no
2360fi
2361
2362# Some versions of Mac OS X incorrectly define SIZE_MAX
2363cat > $TMPC << EOF
2364#include <stdint.h>
2365#include <stdio.h>
2366int main(int argc, char *argv[]) {
2367 return printf("%zu", SIZE_MAX);
2368}
2369EOF
2370have_broken_size_max=no
2371if ! compile_object -Werror ; then
2372 have_broken_size_max=yes
2373fi
2374
2375##########################################
2376# L2TPV3 probe
2377
2378cat > $TMPC <<EOF
2379#include <sys/socket.h>
2380#include <linux/ip.h>
2381int main(void) { return sizeof(struct mmsghdr); }
2382EOF
2383if compile_prog "" "" ; then
2384 l2tpv3=yes
2385else
2386 l2tpv3=no
2387fi
2388
2389if check_include "pty.h" ; then
2390 pty_h=yes
2391else
2392 pty_h=no
2393fi
2394
2395cat > $TMPC <<EOF
2396#include <sys/mman.h>
2397int main(int argc, char *argv[]) {
2398 return mlockall(MCL_FUTURE);
2399}
2400EOF
2401if compile_prog "" "" ; then
2402 have_mlockall=yes
2403else
2404 have_mlockall=no
2405fi
2406
2407#########################################
2408# vhost interdependencies and host support
2409
2410# vhost backends
2411test "$vhost_user" = "" && vhost_user=yes
2412if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2413 error_exit "vhost-user isn't available on win32"
2414fi
2415test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2416if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2417 error_exit "vhost-vdpa is only available on Linux"
2418fi
2419test "$vhost_kernel" = "" && vhost_kernel=$linux
2420if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2421 error_exit "vhost-kernel is only available on Linux"
2422fi
2423
2424# vhost-kernel devices
2425test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2426if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2427 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2428fi
2429test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2430if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2431 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2432fi
2433
2434# vhost-user backends
2435test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2436if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2437 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2438fi
2439test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2440if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2441 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2442fi
2443test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2444if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2445 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2446fi
2447#vhost-vdpa backends
2448test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2449if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2450 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2451fi
2452
2453# OR the vhost-kernel and vhost-user values for simplicity
2454if test "$vhost_net" = ""; then
2455 test "$vhost_net_user" = "yes" && vhost_net=yes
2456 test "$vhost_kernel" = "yes" && vhost_net=yes
2457fi
2458
2459##########################################
2460# MinGW / Mingw-w64 localtime_r/gmtime_r check
2461
2462if test "$mingw32" = "yes"; then
2463 # Some versions of MinGW / Mingw-w64 lack localtime_r
2464 # and gmtime_r entirely.
2465 #
2466 # Some versions of Mingw-w64 define a macro for
2467 # localtime_r/gmtime_r.
2468 #
2469 # Some versions of Mingw-w64 will define functions
2470 # for localtime_r/gmtime_r, but only if you have
2471 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2472 # though, unistd.h and pthread.h both define
2473 # that for you.
2474 #
2475 # So this #undef localtime_r and #include <unistd.h>
2476 # are not in fact redundant.
2477cat > $TMPC << EOF
2478#include <unistd.h>
2479#include <time.h>
2480#undef localtime_r
2481int main(void) { localtime_r(NULL, NULL); return 0; }
2482EOF
2483 if compile_prog "" "" ; then
2484 localtime_r="yes"
2485 else
2486 localtime_r="no"
2487 fi
2488fi
2489
2490##########################################
2491# pkg-config probe
2492
2493if ! has "$pkg_config_exe"; then
2494 error_exit "pkg-config binary '$pkg_config_exe' not found"
2495fi
2496
2497##########################################
2498# NPTL probe
2499
2500if test "$linux_user" = "yes"; then
2501 cat > $TMPC <<EOF
2502#include <sched.h>
2503#include <linux/futex.h>
2504int main(void) {
2505#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2506#error bork
2507#endif
2508 return 0;
2509}
2510EOF
2511 if ! compile_object ; then
2512 feature_not_found "nptl" "Install glibc and linux kernel headers."
2513 fi
2514fi
2515
2516##########################################
2517# lzo check
2518
2519if test "$lzo" != "no" ; then
2520 cat > $TMPC << EOF
2521#include <lzo/lzo1x.h>
2522int main(void) { lzo_version(); return 0; }
2523EOF
2524 if compile_prog "" "-llzo2" ; then
2525 libs_softmmu="$libs_softmmu -llzo2"
2526 lzo="yes"
2527 else
2528 if test "$lzo" = "yes"; then
2529 feature_not_found "liblzo2" "Install liblzo2 devel"
2530 fi
2531 lzo="no"
2532 fi
2533fi
2534
2535##########################################
2536# snappy check
2537
2538if test "$snappy" != "no" ; then
2539 cat > $TMPC << EOF
2540#include <snappy-c.h>
2541int main(void) { snappy_max_compressed_length(4096); return 0; }
2542EOF
2543 if compile_prog "" "-lsnappy" ; then
2544 libs_softmmu="$libs_softmmu -lsnappy"
2545 snappy="yes"
2546 else
2547 if test "$snappy" = "yes"; then
2548 feature_not_found "libsnappy" "Install libsnappy devel"
2549 fi
2550 snappy="no"
2551 fi
2552fi
2553
2554##########################################
2555# bzip2 check
2556
2557if test "$bzip2" != "no" ; then
2558 cat > $TMPC << EOF
2559#include <bzlib.h>
2560int main(void) { BZ2_bzlibVersion(); return 0; }
2561EOF
2562 if compile_prog "" "-lbz2" ; then
2563 bzip2="yes"
2564 else
2565 if test "$bzip2" = "yes"; then
2566 feature_not_found "libbzip2" "Install libbzip2 devel"
2567 fi
2568 bzip2="no"
2569 fi
2570fi
2571
2572##########################################
2573# lzfse check
2574
2575if test "$lzfse" != "no" ; then
2576 cat > $TMPC << EOF
2577#include <lzfse.h>
2578int main(void) { lzfse_decode_scratch_size(); return 0; }
2579EOF
2580 if compile_prog "" "-llzfse" ; then
2581 lzfse="yes"
2582 else
2583 if test "$lzfse" = "yes"; then
2584 feature_not_found "lzfse" "Install lzfse devel"
2585 fi
2586 lzfse="no"
2587 fi
2588fi
2589
2590##########################################
2591# zstd check
2592
2593if test "$zstd" != "no" ; then
2594 libzstd_minver="1.4.0"
2595 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2596 zstd_cflags="$($pkg_config --cflags libzstd)"
2597 zstd_libs="$($pkg_config --libs libzstd)"
2598 LIBS="$zstd_libs $LIBS"
2599 QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2600 zstd="yes"
2601 else
2602 if test "$zstd" = "yes" ; then
2603 feature_not_found "libzstd" "Install libzstd devel"
2604 fi
2605 zstd="no"
2606 fi
2607fi
2608
2609##########################################
2610# libseccomp check
2611
2612if test "$seccomp" != "no" ; then
2613 libseccomp_minver="2.3.0"
2614 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2615 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2616 seccomp_libs="$($pkg_config --libs libseccomp)"
2617 seccomp="yes"
2618 else
2619 if test "$seccomp" = "yes" ; then
2620 feature_not_found "libseccomp" \
2621 "Install libseccomp devel >= $libseccomp_minver"
2622 fi
2623 seccomp="no"
2624 fi
2625fi
2626##########################################
2627# xen probe
2628
2629if test "$xen" != "no" ; then
2630 # Check whether Xen library path is specified via --extra-ldflags to avoid
2631 # overriding this setting with pkg-config output. If not, try pkg-config
2632 # to obtain all needed flags.
2633
2634 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2635 $pkg_config --exists xencontrol ; then
2636 xen_ctrl_version="$(printf '%d%02d%02d' \
2637 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2638 xen=yes
2639 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2640 xen_pc="$xen_pc xenevtchn xendevicemodel"
2641 if $pkg_config --exists xentoolcore; then
2642 xen_pc="$xen_pc xentoolcore"
2643 fi
2644 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2645 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2646 else
2647
2648 xen_libs="-lxenstore -lxenctrl -lxenguest"
2649 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2650
2651 # First we test whether Xen headers and libraries are available.
2652 # If no, we are done and there is no Xen support.
2653 # If yes, more tests are run to detect the Xen version.
2654
2655 # Xen (any)
2656 cat > $TMPC <<EOF
2657#include <xenctrl.h>
2658int main(void) {
2659 return 0;
2660}
2661EOF
2662 if ! compile_prog "" "$xen_libs" ; then
2663 # Xen not found
2664 if test "$xen" = "yes" ; then
2665 feature_not_found "xen" "Install xen devel"
2666 fi
2667 xen=no
2668
2669 # Xen unstable
2670 elif
2671 cat > $TMPC <<EOF &&
2672#undef XC_WANT_COMPAT_DEVICEMODEL_API
2673#define __XEN_TOOLS__
2674#include <xendevicemodel.h>
2675#include <xenforeignmemory.h>
2676int main(void) {
2677 xendevicemodel_handle *xd;
2678 xenforeignmemory_handle *xfmem;
2679
2680 xd = xendevicemodel_open(0, 0);
2681 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2682
2683 xfmem = xenforeignmemory_open(0, 0);
2684 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2685
2686 return 0;
2687}
2688EOF
2689 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2690 then
2691 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2692 xen_ctrl_version=41100
2693 xen=yes
2694 elif
2695 cat > $TMPC <<EOF &&
2696#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2697#include <xenforeignmemory.h>
2698#include <xentoolcore.h>
2699int main(void) {
2700 xenforeignmemory_handle *xfmem;
2701
2702 xfmem = xenforeignmemory_open(0, 0);
2703 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2704 xentoolcore_restrict_all(0);
2705
2706 return 0;
2707}
2708EOF
2709 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2710 then
2711 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2712 xen_ctrl_version=41000
2713 xen=yes
2714 elif
2715 cat > $TMPC <<EOF &&
2716#undef XC_WANT_COMPAT_DEVICEMODEL_API
2717#define __XEN_TOOLS__
2718#include <xendevicemodel.h>
2719int main(void) {
2720 xendevicemodel_handle *xd;
2721
2722 xd = xendevicemodel_open(0, 0);
2723 xendevicemodel_close(xd);
2724
2725 return 0;
2726}
2727EOF
2728 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2729 then
2730 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2731 xen_ctrl_version=40900
2732 xen=yes
2733 elif
2734 cat > $TMPC <<EOF &&
2735/*
2736 * If we have stable libs the we don't want the libxc compat
2737 * layers, regardless of what CFLAGS we may have been given.
2738 *
2739 * Also, check if xengnttab_grant_copy_segment_t is defined and
2740 * grant copy operation is implemented.
2741 */
2742#undef XC_WANT_COMPAT_EVTCHN_API
2743#undef XC_WANT_COMPAT_GNTTAB_API
2744#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2745#include <xenctrl.h>
2746#include <xenstore.h>
2747#include <xenevtchn.h>
2748#include <xengnttab.h>
2749#include <xenforeignmemory.h>
2750#include <stdint.h>
2751#include <xen/hvm/hvm_info_table.h>
2752#if !defined(HVM_MAX_VCPUS)
2753# error HVM_MAX_VCPUS not defined
2754#endif
2755int main(void) {
2756 xc_interface *xc = NULL;
2757 xenforeignmemory_handle *xfmem;
2758 xenevtchn_handle *xe;
2759 xengnttab_handle *xg;
2760 xengnttab_grant_copy_segment_t* seg = NULL;
2761
2762 xs_daemon_open();
2763
2764 xc = xc_interface_open(0, 0, 0);
2765 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2766 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2767 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2768 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2769
2770 xfmem = xenforeignmemory_open(0, 0);
2771 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2772
2773 xe = xenevtchn_open(0, 0);
2774 xenevtchn_fd(xe);
2775
2776 xg = xengnttab_open(0, 0);
2777 xengnttab_grant_copy(xg, 0, seg);
2778
2779 return 0;
2780}
2781EOF
2782 compile_prog "" "$xen_libs $xen_stable_libs"
2783 then
2784 xen_ctrl_version=40800
2785 xen=yes
2786 elif
2787 cat > $TMPC <<EOF &&
2788/*
2789 * If we have stable libs the we don't want the libxc compat
2790 * layers, regardless of what CFLAGS we may have been given.
2791 */
2792#undef XC_WANT_COMPAT_EVTCHN_API
2793#undef XC_WANT_COMPAT_GNTTAB_API
2794#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2795#include <xenctrl.h>
2796#include <xenstore.h>
2797#include <xenevtchn.h>
2798#include <xengnttab.h>
2799#include <xenforeignmemory.h>
2800#include <stdint.h>
2801#include <xen/hvm/hvm_info_table.h>
2802#if !defined(HVM_MAX_VCPUS)
2803# error HVM_MAX_VCPUS not defined
2804#endif
2805int main(void) {
2806 xc_interface *xc = NULL;
2807 xenforeignmemory_handle *xfmem;
2808 xenevtchn_handle *xe;
2809 xengnttab_handle *xg;
2810
2811 xs_daemon_open();
2812
2813 xc = xc_interface_open(0, 0, 0);
2814 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2815 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2816 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2817 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2818
2819 xfmem = xenforeignmemory_open(0, 0);
2820 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2821
2822 xe = xenevtchn_open(0, 0);
2823 xenevtchn_fd(xe);
2824
2825 xg = xengnttab_open(0, 0);
2826 xengnttab_map_grant_ref(xg, 0, 0, 0);
2827
2828 return 0;
2829}
2830EOF
2831 compile_prog "" "$xen_libs $xen_stable_libs"
2832 then
2833 xen_ctrl_version=40701
2834 xen=yes
2835
2836 # Xen 4.6
2837 elif
2838 cat > $TMPC <<EOF &&
2839#include <xenctrl.h>
2840#include <xenstore.h>
2841#include <stdint.h>
2842#include <xen/hvm/hvm_info_table.h>
2843#if !defined(HVM_MAX_VCPUS)
2844# error HVM_MAX_VCPUS not defined
2845#endif
2846int main(void) {
2847 xc_interface *xc;
2848 xs_daemon_open();
2849 xc = xc_interface_open(0, 0, 0);
2850 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2851 xc_gnttab_open(NULL, 0);
2852 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2853 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2854 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2855 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2856 return 0;
2857}
2858EOF
2859 compile_prog "" "$xen_libs"
2860 then
2861 xen_ctrl_version=40600
2862 xen=yes
2863
2864 # Xen 4.5
2865 elif
2866 cat > $TMPC <<EOF &&
2867#include <xenctrl.h>
2868#include <xenstore.h>
2869#include <stdint.h>
2870#include <xen/hvm/hvm_info_table.h>
2871#if !defined(HVM_MAX_VCPUS)
2872# error HVM_MAX_VCPUS not defined
2873#endif
2874int main(void) {
2875 xc_interface *xc;
2876 xs_daemon_open();
2877 xc = xc_interface_open(0, 0, 0);
2878 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2879 xc_gnttab_open(NULL, 0);
2880 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2881 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2882 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2883 return 0;
2884}
2885EOF
2886 compile_prog "" "$xen_libs"
2887 then
2888 xen_ctrl_version=40500
2889 xen=yes
2890
2891 elif
2892 cat > $TMPC <<EOF &&
2893#include <xenctrl.h>
2894#include <xenstore.h>
2895#include <stdint.h>
2896#include <xen/hvm/hvm_info_table.h>
2897#if !defined(HVM_MAX_VCPUS)
2898# error HVM_MAX_VCPUS not defined
2899#endif
2900int main(void) {
2901 xc_interface *xc;
2902 xs_daemon_open();
2903 xc = xc_interface_open(0, 0, 0);
2904 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2905 xc_gnttab_open(NULL, 0);
2906 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2907 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2908 return 0;
2909}
2910EOF
2911 compile_prog "" "$xen_libs"
2912 then
2913 xen_ctrl_version=40200
2914 xen=yes
2915
2916 else
2917 if test "$xen" = "yes" ; then
2918 feature_not_found "xen (unsupported version)" \
2919 "Install a supported xen (xen 4.2 or newer)"
2920 fi
2921 xen=no
2922 fi
2923
2924 if test "$xen" = yes; then
2925 if test $xen_ctrl_version -ge 40701 ; then
2926 libs_softmmu="$xen_stable_libs $libs_softmmu"
2927 fi
2928 libs_softmmu="$xen_libs $libs_softmmu"
2929 fi
2930 fi
2931fi
2932
2933if test "$xen_pci_passthrough" != "no"; then
2934 if test "$xen" = "yes" && test "$linux" = "yes"; then
2935 xen_pci_passthrough=yes
2936 else
2937 if test "$xen_pci_passthrough" = "yes"; then
2938 error_exit "User requested feature Xen PCI Passthrough" \
2939 " but this feature requires /sys from Linux"
2940 fi
2941 xen_pci_passthrough=no
2942 fi
2943fi
2944
2945##########################################
2946# Windows Hypervisor Platform accelerator (WHPX) check
2947if test "$whpx" != "no" ; then
2948 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2949 whpx="yes"
2950 else
2951 if test "$whpx" = "yes"; then
2952 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2953 fi
2954 whpx="no"
2955 fi
2956fi
2957
2958##########################################
2959# Sparse probe
2960if test "$sparse" != "no" ; then
2961 if has cgcc; then
2962 sparse=yes
2963 else
2964 if test "$sparse" = "yes" ; then
2965 feature_not_found "sparse" "Install sparse binary"
2966 fi
2967 sparse=no
2968 fi
2969fi
2970
2971##########################################
2972# X11 probe
2973if $pkg_config --exists "x11"; then
2974 have_x11=yes
2975 x11_cflags=$($pkg_config --cflags x11)
2976 x11_libs=$($pkg_config --libs x11)
2977fi
2978
2979##########################################
2980# GTK probe
2981
2982if test "$gtk" != "no"; then
2983 gtkpackage="gtk+-3.0"
2984 gtkx11package="gtk+-x11-3.0"
2985 gtkversion="3.22.0"
2986 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2987 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2988 gtk_libs=$($pkg_config --libs $gtkpackage)
2989 gtk_version=$($pkg_config --modversion $gtkpackage)
2990 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2991 need_x11=yes
2992 gtk_cflags="$gtk_cflags $x11_cflags"
2993 gtk_libs="$gtk_libs $x11_libs"
2994 fi
2995 gtk="yes"
2996 elif test "$gtk" = "yes"; then
2997 feature_not_found "gtk" "Install gtk3-devel"
2998 else
2999 gtk="no"
3000 fi
3001fi
3002
3003
3004##########################################
3005# GNUTLS probe
3006
3007if test "$gnutls" != "no"; then
3008 pass="no"
3009 if $pkg_config --exists "gnutls >= 3.1.18"; then
3010 gnutls_cflags=$($pkg_config --cflags gnutls)
3011 gnutls_libs=$($pkg_config --libs gnutls)
3012 # Packaging for the static libraries is not always correct.
3013 # At least ubuntu 18.04 ships only shared libraries.
3014 write_c_skeleton
3015 if compile_prog "" "$gnutls_libs" ; then
3016 LIBS="$gnutls_libs $LIBS"
3017 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
3018 pass="yes"
3019 fi
3020 fi
3021 if test "$pass" = "no" && test "$gnutls" = "yes"; then
3022 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
3023 else
3024 gnutls="$pass"
3025 fi
3026fi
3027
3028
3029# If user didn't give a --disable/enable-gcrypt flag,
3030# then mark as disabled if user requested nettle
3031# explicitly
3032if test -z "$gcrypt"
3033then
3034 if test "$nettle" = "yes"
3035 then
3036 gcrypt="no"
3037 fi
3038fi
3039
3040# If user didn't give a --disable/enable-nettle flag,
3041# then mark as disabled if user requested gcrypt
3042# explicitly
3043if test -z "$nettle"
3044then
3045 if test "$gcrypt" = "yes"
3046 then
3047 nettle="no"
3048 fi
3049fi
3050
3051has_libgcrypt() {
3052 if ! has "libgcrypt-config"
3053 then
3054 return 1
3055 fi
3056
3057 if test -n "$cross_prefix"
3058 then
3059 host=$(libgcrypt-config --host)
3060 if test "$host-" != $cross_prefix
3061 then
3062 return 1
3063 fi
3064 fi
3065
3066 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
3067 min=`libgcrypt-config --version | awk -F . '{print $2}'`
3068
3069 if test $maj != 1 || test $min -lt 5
3070 then
3071 return 1
3072 fi
3073
3074 return 0
3075}
3076
3077
3078if test "$nettle" != "no"; then
3079 pass="no"
3080 if $pkg_config --exists "nettle >= 2.7.1"; then
3081 nettle_cflags=$($pkg_config --cflags nettle)
3082 nettle_libs=$($pkg_config --libs nettle)
3083 nettle_version=$($pkg_config --modversion nettle)
3084 # Link test to make sure the given libraries work (e.g for static).
3085 write_c_skeleton
3086 if compile_prog "" "$nettle_libs" ; then
3087 LIBS="$nettle_libs $LIBS"
3088 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3089 if test -z "$gcrypt"; then
3090 gcrypt="no"
3091 fi
3092 pass="yes"
3093 fi
3094 fi
3095 if test "$pass" = "yes"
3096 then
3097 cat > $TMPC << EOF
3098#include <nettle/xts.h>
3099int main(void) {
3100 return 0;
3101}
3102EOF
3103 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3104 nettle_xts=yes
3105 qemu_private_xts=no
3106 fi
3107 fi
3108 if test "$pass" = "no" && test "$nettle" = "yes"; then
3109 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3110 else
3111 nettle="$pass"
3112 fi
3113fi
3114
3115if test "$gcrypt" != "no"; then
3116 pass="no"
3117 if has_libgcrypt; then
3118 gcrypt_cflags=$(libgcrypt-config --cflags)
3119 gcrypt_libs=$(libgcrypt-config --libs)
3120 # Debian has removed -lgpg-error from libgcrypt-config
3121 # as it "spreads unnecessary dependencies" which in
3122 # turn breaks static builds...
3123 if test "$static" = "yes"
3124 then
3125 gcrypt_libs="$gcrypt_libs -lgpg-error"
3126 fi
3127
3128 # Link test to make sure the given libraries work (e.g for static).
3129 write_c_skeleton
3130 if compile_prog "" "$gcrypt_libs" ; then
3131 LIBS="$gcrypt_libs $LIBS"
3132 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3133 pass="yes"
3134 fi
3135 fi
3136 if test "$pass" = "yes"; then
3137 gcrypt="yes"
3138 cat > $TMPC << EOF
3139#include <gcrypt.h>
3140int main(void) {
3141 gcry_mac_hd_t handle;
3142 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3143 GCRY_MAC_FLAG_SECURE, NULL);
3144 return 0;
3145}
3146EOF
3147 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3148 gcrypt_hmac=yes
3149 fi
3150 cat > $TMPC << EOF
3151#include <gcrypt.h>
3152int main(void) {
3153 gcry_cipher_hd_t handle;
3154 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3155 return 0;
3156}
3157EOF
3158 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3159 gcrypt_xts=yes
3160 qemu_private_xts=no
3161 fi
3162 elif test "$gcrypt" = "yes"; then
3163 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3164 else
3165 gcrypt="no"
3166 fi
3167fi
3168
3169
3170if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3171then
3172 error_exit "Only one of gcrypt & nettle can be enabled"
3173fi
3174
3175##########################################
3176# libtasn1 - only for the TLS creds/session test suite
3177
3178tasn1=yes
3179tasn1_cflags=""
3180tasn1_libs=""
3181if $pkg_config --exists "libtasn1"; then
3182 tasn1_cflags=$($pkg_config --cflags libtasn1)
3183 tasn1_libs=$($pkg_config --libs libtasn1)
3184else
3185 tasn1=no
3186fi
3187
3188
3189##########################################
3190# PAM probe
3191
3192if test "$auth_pam" != "no"; then
3193 cat > $TMPC <<EOF
3194#include <security/pam_appl.h>
3195#include <stdio.h>
3196int main(void) {
3197 const char *service_name = "qemu";
3198 const char *user = "frank";
3199 const struct pam_conv pam_conv = { 0 };
3200 pam_handle_t *pamh = NULL;
3201 pam_start(service_name, user, &pam_conv, &pamh);
3202 return 0;
3203}
3204EOF
3205 if compile_prog "" "-lpam" ; then
3206 auth_pam=yes
3207 else
3208 if test "$auth_pam" = "yes"; then
3209 feature_not_found "PAM" "Install PAM development package"
3210 else
3211 auth_pam=no
3212 fi
3213 fi
3214fi
3215
3216##########################################
3217# getifaddrs (for tests/test-io-channel-socket )
3218
3219have_ifaddrs_h=yes
3220if ! check_include "ifaddrs.h" ; then
3221 have_ifaddrs_h=no
3222fi
3223
3224#########################################
3225# libdrm check
3226have_drm_h=no
3227if check_include "libdrm/drm.h" ; then
3228 have_drm_h=yes
3229fi
3230
3231#########################################
3232# sys/signal.h check
3233have_sys_signal_h=no
3234if check_include "sys/signal.h" ; then
3235 have_sys_signal_h=yes
3236fi
3237
3238##########################################
3239# VTE probe
3240
3241if test "$vte" != "no"; then
3242 vteminversion="0.32.0"
3243 if $pkg_config --exists "vte-2.91"; then
3244 vtepackage="vte-2.91"
3245 else
3246 vtepackage="vte-2.90"
3247 fi
3248 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3249 vte_cflags=$($pkg_config --cflags $vtepackage)
3250 vte_libs=$($pkg_config --libs $vtepackage)
3251 vteversion=$($pkg_config --modversion $vtepackage)
3252 vte="yes"
3253 elif test "$vte" = "yes"; then
3254 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3255 else
3256 vte="no"
3257 fi
3258fi
3259
3260##########################################
3261# SDL probe
3262
3263# Look for sdl configuration program (pkg-config or sdl2-config). Try
3264# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
3265
3266sdl_probe ()
3267{
3268 if $pkg_config sdl2 --exists; then
3269 sdlconfig="$pkg_config sdl2"
3270 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3271 elif has "$sdl2_config"; then
3272 sdlconfig="$sdl2_config"
3273 sdlversion=$($sdlconfig --version)
3274 else
3275 if test "$sdl" = "yes" ; then
3276 feature_not_found "sdl" "Install SDL2-devel"
3277 fi
3278 sdl=no
3279 # no need to do the rest
3280 return
3281 fi
3282 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3283 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3284 fi
3285
3286 cat > $TMPC << EOF
3287#include <SDL.h>
3288#undef main /* We don't want SDL to override our main() */
3289int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3290EOF
3291 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3292 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3293 if test "$static" = "yes" ; then
3294 if $pkg_config sdl2 --exists; then
3295 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3296 else
3297 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3298 fi
3299 else
3300 sdl_libs=$($sdlconfig --libs 2>/dev/null)
3301 fi
3302 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3303 sdl=yes
3304
3305 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3306 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3307 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3308 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3309 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3310 fi
3311 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3312 :
3313 else
3314 sdl=no
3315 fi
3316 fi # static link
3317 else # sdl not found
3318 if test "$sdl" = "yes" ; then
3319 feature_not_found "sdl" "Install SDL2 devel"
3320 fi
3321 sdl=no
3322 fi # sdl compile test
3323}
3324
3325sdl_image_probe ()
3326{
3327 if test "$sdl_image" != "no" ; then
3328 if $pkg_config SDL2_image --exists; then
3329 if test "$static" = "yes"; then
3330 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3331 else
3332 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3333 fi
3334 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3335 sdl_image=yes
3336
3337 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3338 sdl_libs="$sdl_libs $sdl_image_libs"
3339 else
3340 if test "$sdl_image" = "yes" ; then
3341 feature_not_found "sdl_image" "Install SDL Image devel"
3342 else
3343 sdl_image=no
3344 fi
3345 fi
3346 fi
3347}
3348
3349if test "$sdl" != "no" ; then
3350 sdl_probe
3351fi
3352
3353if test "$sdl" = "yes" ; then
3354 sdl_image_probe
3355else
3356 if test "$sdl_image" = "yes"; then
3357 echo "warning: SDL Image requested, but SDL is not available, disabling"
3358 fi
3359 sdl_image=no
3360fi
3361
3362if test "$sdl" = "yes" ; then
3363 cat > $TMPC <<EOF
3364#include <SDL.h>
3365#if defined(SDL_VIDEO_DRIVER_X11)
3366#include <X11/XKBlib.h>
3367#else
3368#error No x11 support
3369#endif
3370int main(void) { return 0; }
3371EOF
3372 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3373 need_x11=yes
3374 sdl_cflags="$sdl_cflags $x11_cflags"
3375 sdl_libs="$sdl_libs $x11_libs"
3376 fi
3377fi
3378
3379##########################################
3380# RDMA needs OpenFabrics libraries
3381if test "$rdma" != "no" ; then
3382 cat > $TMPC <<EOF
3383#include <rdma/rdma_cma.h>
3384int main(void) { return 0; }
3385EOF
3386 rdma_libs="-lrdmacm -libverbs -libumad"
3387 if compile_prog "" "$rdma_libs" ; then
3388 rdma="yes"
3389 libs_softmmu="$libs_softmmu $rdma_libs"
3390 else
3391 if test "$rdma" = "yes" ; then
3392 error_exit \
3393 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3394 " Your options:" \
3395 " (1) Fast: Install infiniband packages (devel) from your distro." \
3396 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3397 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3398 fi
3399 rdma="no"
3400 fi
3401fi
3402
3403##########################################
3404# PVRDMA detection
3405
3406cat > $TMPC <<EOF &&
3407#include <sys/mman.h>
3408
3409int
3410main(void)
3411{
3412 char buf = 0;
3413 void *addr = &buf;
3414 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3415
3416 return 0;
3417}
3418EOF
3419
3420if test "$rdma" = "yes" ; then
3421 case "$pvrdma" in
3422 "")
3423 if compile_prog "" ""; then
3424 pvrdma="yes"
3425 else
3426 pvrdma="no"
3427 fi
3428 ;;
3429 "yes")
3430 if ! compile_prog "" ""; then
3431 error_exit "PVRDMA is not supported since mremap is not implemented"
3432 fi
3433 pvrdma="yes"
3434 ;;
3435 "no")
3436 pvrdma="no"
3437 ;;
3438 esac
3439else
3440 if test "$pvrdma" = "yes" ; then
3441 error_exit "PVRDMA requires rdma suppport"
3442 fi
3443 pvrdma="no"
3444fi
3445
3446# Let's see if enhanced reg_mr is supported
3447if test "$pvrdma" = "yes" ; then
3448
3449cat > $TMPC <<EOF &&
3450#include <infiniband/verbs.h>
3451
3452int
3453main(void)
3454{
3455 struct ibv_mr *mr;
3456 struct ibv_pd *pd = NULL;
3457 size_t length = 10;
3458 uint64_t iova = 0;
3459 int access = 0;
3460 void *addr = NULL;
3461
3462 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3463
3464 ibv_dereg_mr(mr);
3465
3466 return 0;
3467}
3468EOF
3469 if ! compile_prog "" "-libverbs"; then
3470 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3471 fi
3472fi
3473
3474##########################################
3475# VNC SASL detection
3476if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3477 cat > $TMPC <<EOF
3478#include <sasl/sasl.h>
3479#include <stdio.h>
3480int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3481EOF
3482 # Assuming Cyrus-SASL installed in /usr prefix
3483 # QEMU defines struct iovec in "qemu/osdep.h",
3484 # we don't want libsasl to redefine it in <sasl/sasl.h>.
3485 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
3486 vnc_sasl_libs="-lsasl2"
3487 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3488 vnc_sasl=yes
3489 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3490 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3491 else
3492 if test "$vnc_sasl" = "yes" ; then
3493 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3494 fi
3495 vnc_sasl=no
3496 fi
3497fi
3498
3499##########################################
3500# VNC JPEG detection
3501if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3502cat > $TMPC <<EOF
3503#include <stdio.h>
3504#include <jpeglib.h>
3505int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3506EOF
3507 vnc_jpeg_cflags=""
3508 vnc_jpeg_libs="-ljpeg"
3509 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3510 vnc_jpeg=yes
3511 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3512 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3513 else
3514 if test "$vnc_jpeg" = "yes" ; then
3515 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3516 fi
3517 vnc_jpeg=no
3518 fi
3519fi
3520
3521##########################################
3522# VNC PNG detection
3523if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3524cat > $TMPC <<EOF
3525//#include <stdio.h>
3526#include <png.h>
3527#include <stddef.h>
3528int main(void) {
3529 png_structp png_ptr;
3530 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3531 return png_ptr != 0;
3532}
3533EOF
3534 if $pkg_config libpng --exists; then
3535 vnc_png_cflags=$($pkg_config libpng --cflags)
3536 vnc_png_libs=$($pkg_config libpng --libs)
3537 else
3538 vnc_png_cflags=""
3539 vnc_png_libs="-lpng"
3540 fi
3541 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3542 vnc_png=yes
3543 libs_softmmu="$vnc_png_libs $libs_softmmu"
3544 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3545 else
3546 if test "$vnc_png" = "yes" ; then
3547 feature_not_found "vnc-png" "Install libpng devel"
3548 fi
3549 vnc_png=no
3550 fi
3551fi
3552
3553##########################################
3554# xkbcommon probe
3555if test "$xkbcommon" != "no" ; then
3556 if $pkg_config xkbcommon --exists; then
3557 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3558 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3559 xkbcommon=yes
3560 else
3561 if test "$xkbcommon" = "yes" ; then
3562 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3563 fi
3564 xkbcommon=no
3565 fi
3566fi
3567
3568
3569##########################################
3570# xfsctl() probe, used for file-posix.c
3571if test "$xfs" != "no" ; then
3572 cat > $TMPC << EOF
3573#include <stddef.h> /* NULL */
3574#include <xfs/xfs.h>
3575int main(void)
3576{
3577 xfsctl(NULL, 0, 0, NULL);
3578 return 0;
3579}
3580EOF
3581 if compile_prog "" "" ; then
3582 xfs="yes"
3583 else
3584 if test "$xfs" = "yes" ; then
3585 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3586 fi
3587 xfs=no
3588 fi
3589fi
3590
3591##########################################
3592# vde libraries probe
3593if test "$vde" != "no" ; then
3594 vde_libs="-lvdeplug"
3595 cat > $TMPC << EOF
3596#include <libvdeplug.h>
3597int main(void)
3598{
3599 struct vde_open_args a = {0, 0, 0};
3600 char s[] = "";
3601 vde_open(s, s, &a);
3602 return 0;
3603}
3604EOF
3605 if compile_prog "" "$vde_libs" ; then
3606 vde=yes
3607 else
3608 if test "$vde" = "yes" ; then
3609 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3610 fi
3611 vde=no
3612 fi
3613fi
3614
3615##########################################
3616# netmap support probe
3617# Apart from looking for netmap headers, we make sure that the host API version
3618# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3619# a minor/major version number. Minor new features will be marked with values up
3620# to 15, and if something happens that requires a change to the backend we will
3621# move above 15, submit the backend fixes and modify this two bounds.
3622if test "$netmap" != "no" ; then
3623 cat > $TMPC << EOF
3624#include <inttypes.h>
3625#include <net/if.h>
3626#include <net/netmap.h>
3627#include <net/netmap_user.h>
3628#if (NETMAP_API < 11) || (NETMAP_API > 15)
3629#error
3630#endif
3631int main(void) { return 0; }
3632EOF
3633 if compile_prog "" "" ; then
3634 netmap=yes
3635 else
3636 if test "$netmap" = "yes" ; then
3637 feature_not_found "netmap"
3638 fi
3639 netmap=no
3640 fi
3641fi
3642
3643##########################################
3644# libcap-ng library probe
3645if test "$cap_ng" != "no" ; then
3646 cap_libs="-lcap-ng"
3647 cat > $TMPC << EOF
3648#include <cap-ng.h>
3649int main(void)
3650{
3651 capng_capability_to_name(CAPNG_EFFECTIVE);
3652 return 0;
3653}
3654EOF
3655 if compile_prog "" "$cap_libs" ; then
3656 cap_ng=yes
3657 libs_tools="$cap_libs $libs_tools"
3658 else
3659 if test "$cap_ng" = "yes" ; then
3660 feature_not_found "cap_ng" "Install libcap-ng devel"
3661 fi
3662 cap_ng=no
3663 fi
3664fi
3665
3666##########################################
3667# Sound support libraries probe
3668
3669audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3670for drv in $audio_drv_list; do
3671 case $drv in
3672 alsa | try-alsa)
3673 if $pkg_config alsa --exists; then
3674 alsa_libs=$($pkg_config alsa --libs)
3675 if test "$drv" = "try-alsa"; then
3676 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3677 fi
3678 else
3679 if test "$drv" = "try-alsa"; then
3680 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3681 else
3682 error_exit "$drv check failed" \
3683 "Make sure to have the $drv libs and headers installed."
3684 fi
3685 fi
3686 ;;
3687
3688 pa | try-pa)
3689 if $pkg_config libpulse --exists; then
3690 pulse_libs=$($pkg_config libpulse --libs)
3691 if test "$drv" = "try-pa"; then
3692 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3693 fi
3694 else
3695 if test "$drv" = "try-pa"; then
3696 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3697 else
3698 error_exit "$drv check failed" \
3699 "Make sure to have the $drv libs and headers installed."
3700 fi
3701 fi
3702 ;;
3703
3704 sdl)
3705 if test "$sdl" = "no"; then
3706 error_exit "sdl not found or disabled, can not use sdl audio driver"
3707 fi
3708 ;;
3709
3710 try-sdl)
3711 if test "$sdl" = "no"; then
3712 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3713 else
3714 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3715 fi
3716 ;;
3717
3718 coreaudio)
3719 coreaudio_libs="-framework CoreAudio"
3720 ;;
3721
3722 dsound)
3723 dsound_libs="-lole32 -ldxguid"
3724 audio_win_int="yes"
3725 ;;
3726
3727 oss)
3728 oss_libs="$oss_lib"
3729 ;;
3730
3731 jack | try-jack)
3732 if $pkg_config jack --exists; then
3733 jack_libs=$($pkg_config jack --libs)
3734 if test "$drv" = "try-jack"; then
3735 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3736 fi
3737 else
3738 if test "$drv" = "try-jack"; then
3739 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3740 else
3741 error_exit "$drv check failed" \
3742 "Make sure to have the $drv libs and headers installed."
3743 fi
3744 fi
3745 ;;
3746
3747 *)
3748 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3749 error_exit "Unknown driver '$drv' selected" \
3750 "Possible drivers are: $audio_possible_drivers"
3751 }
3752 ;;
3753 esac
3754done
3755
3756##########################################
3757# BrlAPI probe
3758
3759if test "$brlapi" != "no" ; then
3760 brlapi_libs="-lbrlapi"
3761 cat > $TMPC << EOF
3762#include <brlapi.h>
3763#include <stddef.h>
3764int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3765EOF
3766 if compile_prog "" "$brlapi_libs" ; then
3767 brlapi=yes
3768 else
3769 if test "$brlapi" = "yes" ; then
3770 feature_not_found "brlapi" "Install brlapi devel"
3771 fi
3772 brlapi=no
3773 fi
3774fi
3775
3776##########################################
3777# iconv probe
3778if test "$iconv" != "no" ; then
3779 cat > $TMPC << EOF
3780#include <iconv.h>
3781int main(void) {
3782 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3783 return conv != (iconv_t) -1;
3784}
3785EOF
3786 iconv_prefix_list="/usr/local:/usr"
3787 iconv_lib_list=":-liconv"
3788 IFS=:
3789 for iconv_prefix in $iconv_prefix_list; do
3790 IFS=:
3791 iconv_cflags="-I$iconv_prefix/include"
3792 iconv_ldflags="-L$iconv_prefix/lib"
3793 for iconv_link in $iconv_lib_list; do
3794 unset IFS
3795 iconv_lib="$iconv_ldflags $iconv_link"
3796 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3797 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3798 iconv_found=yes
3799 break
3800 fi
3801 done
3802 if test "$iconv_found" = yes ; then
3803 break
3804 fi
3805 done
3806 if test "$iconv_found" = "yes" ; then
3807 iconv=yes
3808 else
3809 if test "$iconv" = "yes" ; then
3810 feature_not_found "iconv" "Install iconv devel"
3811 fi
3812 iconv=no
3813 fi
3814fi
3815
3816##########################################
3817# curses probe
3818if test "$iconv" = "no" ; then
3819 # curses will need iconv
3820 curses=no
3821fi
3822if test "$curses" != "no" ; then
3823 if test "$mingw32" = "yes" ; then
3824 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3825 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3826 else
3827 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3828 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3829 fi
3830 curses_found=no
3831 cat > $TMPC << EOF
3832#include <locale.h>
3833#include <curses.h>
3834#include <wchar.h>
3835#include <langinfo.h>
3836int main(void) {
3837 const char *codeset;
3838 wchar_t wch = L'w';
3839 setlocale(LC_ALL, "");
3840 resize_term(0, 0);
3841 addwstr(L"wide chars\n");
3842 addnwstr(&wch, 1);
3843 add_wch(WACS_DEGREE);
3844 codeset = nl_langinfo(CODESET);
3845 return codeset != 0;
3846}
3847EOF
3848 IFS=:
3849 for curses_inc in $curses_inc_list; do
3850 # Make sure we get the wide character prototypes
3851 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3852 IFS=:
3853 for curses_lib in $curses_lib_list; do
3854 unset IFS
3855 if compile_prog "$curses_inc" "$curses_lib" ; then
3856 curses_found=yes
3857 break
3858 fi
3859 done
3860 if test "$curses_found" = yes ; then
3861 break
3862 fi
3863 done
3864 unset IFS
3865 if test "$curses_found" = "yes" ; then
3866 curses=yes
3867 else
3868 if test "$curses" = "yes" ; then
3869 feature_not_found "curses" "Install ncurses devel"
3870 fi
3871 curses=no
3872 fi
3873fi
3874
3875##########################################
3876# curl probe
3877if test "$curl" != "no" ; then
3878 if $pkg_config libcurl --exists; then
3879 curlconfig="$pkg_config libcurl"
3880 else
3881 curlconfig=curl-config
3882 fi
3883 cat > $TMPC << EOF
3884#include <curl/curl.h>
3885int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3886EOF
3887 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3888 curl_libs=$($curlconfig --libs 2>/dev/null)
3889 if compile_prog "$curl_cflags" "$curl_libs" ; then
3890 curl=yes
3891 else
3892 if test "$curl" = "yes" ; then
3893 feature_not_found "curl" "Install libcurl devel"
3894 fi
3895 curl=no
3896 fi
3897fi # test "$curl"
3898
3899##########################################
3900# glib support probe
3901
3902glib_req_ver=2.48
3903glib_modules=gthread-2.0
3904if test "$modules" = yes; then
3905 glib_modules="$glib_modules gmodule-export-2.0"
3906fi
3907if test "$plugins" = yes; then
3908 glib_modules="$glib_modules gmodule-2.0"
3909fi
3910
3911# This workaround is required due to a bug in pkg-config file for glib as it
3912# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3913
3914if test "$static" = yes && test "$mingw32" = yes; then
3915 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3916fi
3917
3918for i in $glib_modules; do
3919 if $pkg_config --atleast-version=$glib_req_ver $i; then
3920 glib_cflags=$($pkg_config --cflags $i)
3921 glib_libs=$($pkg_config --libs $i)
3922 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3923 LIBS="$glib_libs $LIBS"
3924 libs_qga="$glib_libs $libs_qga"
3925 else
3926 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3927 fi
3928done
3929
3930if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3931 gio=yes
3932 gio_cflags=$($pkg_config --cflags gio-2.0)
3933 gio_libs=$($pkg_config --libs gio-2.0)
3934 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3935 if [ ! -x "$gdbus_codegen" ]; then
3936 gdbus_codegen=
3937 fi
3938else
3939 gio=no
3940fi
3941
3942if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3943 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3944 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3945fi
3946
3947# Sanity check that the current size_t matches the
3948# size that glib thinks it should be. This catches
3949# problems on multi-arch where people try to build
3950# 32-bit QEMU while pointing at 64-bit glib headers
3951cat > $TMPC <<EOF
3952#include <glib.h>
3953#include <unistd.h>
3954
3955#define QEMU_BUILD_BUG_ON(x) \
3956 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3957
3958int main(void) {
3959 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3960 return 0;
3961}
3962EOF
3963
3964if ! compile_prog "$CFLAGS" "$LIBS" ; then
3965 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3966 "You probably need to set PKG_CONFIG_LIBDIR"\
3967 "to point to the right pkg-config files for your"\
3968 "build target"
3969fi
3970
3971# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3972cat > $TMPC << EOF
3973#include <glib.h>
3974int main(void) { return 0; }
3975EOF
3976if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3977 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3978 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3979 QEMU_CFLAGS="-Wno-unknown-attributes $CFLAGS"
3980 fi
3981fi
3982
3983# Silence clang warnings triggered by glib < 2.57.2
3984cat > $TMPC << EOF
3985#include <glib.h>
3986typedef struct Foo {
3987 int i;
3988} Foo;
3989static void foo_free(Foo *f)
3990{
3991 g_free(f);
3992}
3993G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3994int main(void) { return 0; }
3995EOF
3996if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3997 if cc_has_warning_flag "-Wno-unused-function"; then
3998 glib_cflags="$glib_cflags -Wno-unused-function"
3999 CFLAGS="$CFLAGS -Wno-unused-function"
4000 fi
4001fi
4002
4003#########################################
4004# zlib check
4005
4006if test "$zlib" != "no" ; then
4007 if $pkg_config --exists zlib; then
4008 zlib_cflags=$($pkg_config --cflags zlib)
4009 zlib_libs=$($pkg_config --libs zlib)
4010 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
4011 LIBS="$zlib_libs $LIBS"
4012 else
4013 cat > $TMPC << EOF
4014#include <zlib.h>
4015int main(void) { zlibVersion(); return 0; }
4016EOF
4017 if compile_prog "" "-lz" ; then
4018 LIBS="$LIBS -lz"
4019 else
4020 error_exit "zlib check failed" \
4021 "Make sure to have the zlib libs and headers installed."
4022 fi
4023 fi
4024fi
4025
4026##########################################
4027# SHA command probe for modules
4028if test "$modules" = yes; then
4029 shacmd_probe="sha1sum sha1 shasum"
4030 for c in $shacmd_probe; do
4031 if has $c; then
4032 shacmd="$c"
4033 break
4034 fi
4035 done
4036 if test "$shacmd" = ""; then
4037 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
4038 fi
4039fi
4040
4041##########################################
4042# pixman support probe
4043
4044if test "$softmmu" = "no"; then
4045 pixman_cflags=
4046 pixman_libs=
4047elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
4048 pixman_cflags=$($pkg_config --cflags pixman-1)
4049 pixman_libs=$($pkg_config --libs pixman-1)
4050else
4051 error_exit "pixman >= 0.21.8 not present." \
4052 "Please install the pixman devel package."
4053fi
4054
4055##########################################
4056# libmpathpersist probe
4057
4058if test "$mpath" != "no" ; then
4059 # probe for the new API
4060 cat > $TMPC <<EOF
4061#include <libudev.h>
4062#include <mpath_persist.h>
4063unsigned mpath_mx_alloc_len = 1024;
4064int logsink;
4065static struct config *multipath_conf;
4066extern struct udev *udev;
4067extern struct config *get_multipath_config(void);
4068extern void put_multipath_config(struct config *conf);
4069struct udev *udev;
4070struct config *get_multipath_config(void) { return multipath_conf; }
4071void put_multipath_config(struct config *conf) { }
4072
4073int main(void) {
4074 udev = udev_new();
4075 multipath_conf = mpath_lib_init();
4076 return 0;
4077}
4078EOF
4079 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4080 mpathpersist=yes
4081 mpathpersist_new_api=yes
4082 else
4083 # probe for the old API
4084 cat > $TMPC <<EOF
4085#include <libudev.h>
4086#include <mpath_persist.h>
4087unsigned mpath_mx_alloc_len = 1024;
4088int logsink;
4089int main(void) {
4090 struct udev *udev = udev_new();
4091 mpath_lib_init(udev);
4092 return 0;
4093}
4094EOF
4095 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4096 mpathpersist=yes
4097 mpathpersist_new_api=no
4098 else
4099 mpathpersist=no
4100 fi
4101 fi
4102else
4103 mpathpersist=no
4104fi
4105
4106##########################################
4107# pthread probe
4108PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
4109
4110pthread=no
4111cat > $TMPC << EOF
4112#include <pthread.h>
4113static void *f(void *p) { return NULL; }
4114int main(void) {
4115 pthread_t thread;
4116 pthread_create(&thread, 0, f, 0);
4117 return 0;
4118}
4119EOF
4120if compile_prog "" "" ; then
4121 pthread=yes
4122else
4123 for pthread_lib in $PTHREADLIBS_LIST; do
4124 if compile_prog "" "$pthread_lib" ; then
4125 pthread=yes
4126 found=no
4127 for lib_entry in $LIBS; do
4128 if test "$lib_entry" = "$pthread_lib"; then
4129 found=yes
4130 break
4131 fi
4132 done
4133 if test "$found" = "no"; then
4134 LIBS="$pthread_lib $LIBS"
4135 libs_qga="$pthread_lib $libs_qga"
4136 fi
4137 PTHREAD_LIB="$pthread_lib"
4138 break
4139 fi
4140 done
4141fi
4142
4143if test "$mingw32" != yes && test "$pthread" = no; then
4144 error_exit "pthread check failed" \
4145 "Make sure to have the pthread libs and headers installed."
4146fi
4147
4148# check for pthread_setname_np with thread id
4149pthread_setname_np_w_tid=no
4150cat > $TMPC << EOF
4151#include <pthread.h>
4152
4153static void *f(void *p) { return NULL; }
4154int main(void)
4155{
4156 pthread_t thread;
4157 pthread_create(&thread, 0, f, 0);
4158 pthread_setname_np(thread, "QEMU");
4159 return 0;
4160}
4161EOF
4162if compile_prog "" "$pthread_lib" ; then
4163 pthread_setname_np_w_tid=yes
4164fi
4165
4166# check for pthread_setname_np without thread id
4167pthread_setname_np_wo_tid=no
4168cat > $TMPC << EOF
4169#include <pthread.h>
4170
4171static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
4172int main(void)
4173{
4174 pthread_t thread;
4175 pthread_create(&thread, 0, f, 0);
4176 return 0;
4177}
4178EOF
4179if compile_prog "" "$pthread_lib" ; then
4180 pthread_setname_np_wo_tid=yes
4181fi
4182
4183##########################################
4184# rbd probe
4185if test "$rbd" != "no" ; then
4186 cat > $TMPC <<EOF
4187#include <stdio.h>
4188#include <rbd/librbd.h>
4189int main(void) {
4190 rados_t cluster;
4191 rados_create(&cluster, NULL);
4192 return 0;
4193}
4194EOF
4195 rbd_libs="-lrbd -lrados"
4196 if compile_prog "" "$rbd_libs" ; then
4197 rbd=yes
4198 else
4199 if test "$rbd" = "yes" ; then
4200 feature_not_found "rados block device" "Install librbd/ceph devel"
4201 fi
4202 rbd=no
4203 fi
4204fi
4205
4206##########################################
4207# libssh probe
4208if test "$libssh" != "no" ; then
4209 if $pkg_config --exists libssh; then
4210 libssh_cflags=$($pkg_config libssh --cflags)
4211 libssh_libs=$($pkg_config libssh --libs)
4212 libssh=yes
4213 else
4214 if test "$libssh" = "yes" ; then
4215 error_exit "libssh required for --enable-libssh"
4216 fi
4217 libssh=no
4218 fi
4219fi
4220
4221##########################################
4222# Check for libssh 0.8
4223# This is done like this instead of using the LIBSSH_VERSION_* and
4224# SSH_VERSION_* macros because some distributions in the past shipped
4225# snapshots of the future 0.8 from Git, and those snapshots did not
4226# have updated version numbers (still referring to 0.7.0).
4227
4228if test "$libssh" = "yes"; then
4229 cat > $TMPC <<EOF
4230#include <libssh/libssh.h>
4231int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4232EOF
4233 if compile_prog "$libssh_cflags" "$libssh_libs"; then
4234 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4235 fi
4236fi
4237
4238##########################################
4239# linux-aio probe
4240
4241if test "$linux_aio" != "no" ; then
4242 cat > $TMPC <<EOF
4243#include <libaio.h>
4244#include <sys/eventfd.h>
4245#include <stddef.h>
4246int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4247EOF
4248 if compile_prog "" "-laio" ; then
4249 linux_aio=yes
4250 else
4251 if test "$linux_aio" = "yes" ; then
4252 feature_not_found "linux AIO" "Install libaio devel"
4253 fi
4254 linux_aio=no
4255 fi
4256fi
4257##########################################
4258# linux-io-uring probe
4259
4260if test "$linux_io_uring" != "no" ; then
4261 if $pkg_config liburing; then
4262 linux_io_uring_cflags=$($pkg_config --cflags liburing)
4263 linux_io_uring_libs=$($pkg_config --libs liburing)
4264 linux_io_uring=yes
4265
4266 # io_uring is used in libqemuutil.a where per-file -libs variables are not
4267 # seen by programs linking the archive. It's not ideal, but just add the
4268 # library dependency globally.
4269 LIBS="$linux_io_uring_libs $LIBS"
4270 else
4271 if test "$linux_io_uring" = "yes" ; then
4272 feature_not_found "linux io_uring" "Install liburing devel"
4273 fi
4274 linux_io_uring=no
4275 fi
4276fi
4277
4278##########################################
4279# TPM emulation is only on POSIX
4280
4281if test "$tpm" = ""; then
4282 if test "$mingw32" = "yes"; then
4283 tpm=no
4284 else
4285 tpm=yes
4286 fi
4287elif test "$tpm" = "yes"; then
4288 if test "$mingw32" = "yes" ; then
4289 error_exit "TPM emulation only available on POSIX systems"
4290 fi
4291fi
4292
4293##########################################
4294# attr probe
4295
4296if test "$attr" != "no" ; then
4297 cat > $TMPC <<EOF
4298#include <stdio.h>
4299#include <sys/types.h>
4300#ifdef CONFIG_LIBATTR
4301#include <attr/xattr.h>
4302#else
4303#include <sys/xattr.h>
4304#endif
4305int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4306EOF
4307 if compile_prog "" "" ; then
4308 attr=yes
4309 # Older distros have <attr/xattr.h>, and need -lattr:
4310 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4311 attr=yes
4312 LIBS="-lattr $LIBS"
4313 libattr=yes
4314 else
4315 if test "$attr" = "yes" ; then
4316 feature_not_found "ATTR" "Install libc6 or libattr devel"
4317 fi
4318 attr=no
4319 fi
4320fi
4321
4322##########################################
4323# iovec probe
4324cat > $TMPC <<EOF
4325#include <sys/types.h>
4326#include <sys/uio.h>
4327#include <unistd.h>
4328int main(void) { return sizeof(struct iovec); }
4329EOF
4330iovec=no
4331if compile_prog "" "" ; then
4332 iovec=yes
4333fi
4334
4335##########################################
4336# preadv probe
4337cat > $TMPC <<EOF
4338#include <sys/types.h>
4339#include <sys/uio.h>
4340#include <unistd.h>
4341int main(void) { return preadv(0, 0, 0, 0); }
4342EOF
4343preadv=no
4344if compile_prog "" "" ; then
4345 preadv=yes
4346fi
4347
4348##########################################
4349# fdt probe
4350# fdt support is mandatory for at least some target architectures,
4351# so insist on it if we're building those system emulators.
4352fdt_required=no
4353for target in $target_list; do
4354 case $target in
4355 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
4356 fdt_required=yes
4357 ;;
4358 esac
4359done
4360
4361if test "$fdt_required" = "yes"; then
4362 if test "$fdt" = "no"; then
4363 error_exit "fdt disabled but some requested targets require it." \
4364 "You can turn off fdt only if you also disable all the system emulation" \
4365 "targets which need it (by specifying a cut down --target-list)."
4366 fi
4367 fdt=yes
4368elif test "$fdt" != "yes" ; then
4369 fdt=no
4370fi
4371
4372# fdt is only required when building softmmu targets
4373if test -z "$fdt" -a "$softmmu" != "yes" ; then
4374 fdt="no"
4375fi
4376
4377if test "$fdt" != "no" ; then
4378 fdt_libs="-lfdt"
4379 # explicitly check for libfdt_env.h as it is missing in some stable installs
4380 # and test for required functions to make sure we are on a version >= 1.4.2
4381 cat > $TMPC << EOF
4382#include <libfdt.h>
4383#include <libfdt_env.h>
4384int main(void) { fdt_check_full(NULL, 0); return 0; }
4385EOF
4386 if compile_prog "" "$fdt_libs" ; then
4387 # system DTC is good - use it
4388 fdt=system
4389 else
4390 # have GIT checkout, so activate dtc submodule
4391 if test -e "${source_path}/.git" ; then
4392 git_submodules="${git_submodules} dtc"
4393 fi
4394 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4395 fdt=git
4396 mkdir -p dtc
4397 if [ "$pwd_is_source_path" != "y" ] ; then
4398 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4399 fi
4400 fdt_cflags="-I${source_path}/dtc/libfdt"
4401 fdt_ldflags="-L$PWD/dtc/libfdt"
4402 fdt_libs="$fdt_libs"
4403 elif test "$fdt" = "yes" ; then
4404 # Not a git build & no libfdt found, prompt for system install
4405 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4406 "Please install the DTC (libfdt) devel package"
4407 else
4408 # don't have and don't want
4409 fdt_libs=
4410 fdt=no
4411 fi
4412 fi
4413fi
4414
4415libs_softmmu="$libs_softmmu $fdt_libs"
4416
4417##########################################
4418# opengl probe (for sdl2, gtk, milkymist-tmu2)
4419
4420gbm="no"
4421if $pkg_config gbm; then
4422 gbm_cflags="$($pkg_config --cflags gbm)"
4423 gbm_libs="$($pkg_config --libs gbm)"
4424 gbm="yes"
4425fi
4426
4427if test "$opengl" != "no" ; then
4428 opengl_pkgs="epoxy gbm"
4429 if $pkg_config $opengl_pkgs; then
4430 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4431 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4432 opengl=yes
4433 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4434 gtk_gl="yes"
4435 fi
4436 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4437 else
4438 if test "$opengl" = "yes" ; then
4439 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4440 fi
4441 opengl_cflags=""
4442 opengl_libs=""
4443 opengl=no
4444 fi
4445fi
4446
4447if test "$opengl" = "yes"; then
4448 cat > $TMPC << EOF
4449#include <epoxy/egl.h>
4450#ifndef EGL_MESA_image_dma_buf_export
4451# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4452#endif
4453int main(void) { return 0; }
4454EOF
4455 if compile_prog "" "" ; then
4456 opengl_dmabuf=yes
4457 fi
4458fi
4459
4460if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4461 for target in $target_list; do
4462 case $target in
4463 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4464 need_x11=yes
4465 ;;
4466 esac
4467 done
4468fi
4469
4470##########################################
4471# libxml2 probe
4472if test "$libxml2" != "no" ; then
4473 if $pkg_config --exists libxml-2.0; then
4474 libxml2="yes"
4475 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4476 libxml2_libs=$($pkg_config --libs libxml-2.0)
4477 else
4478 if test "$libxml2" = "yes"; then
4479 feature_not_found "libxml2" "Install libxml2 devel"
4480 fi
4481 libxml2="no"
4482 fi
4483fi
4484
4485##########################################
4486# glusterfs probe
4487if test "$glusterfs" != "no" ; then
4488 if $pkg_config --atleast-version=3 glusterfs-api; then
4489 glusterfs="yes"
4490 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4491 glusterfs_libs=$($pkg_config --libs glusterfs-api)
4492 if $pkg_config --atleast-version=4 glusterfs-api; then
4493 glusterfs_xlator_opt="yes"
4494 fi
4495 if $pkg_config --atleast-version=5 glusterfs-api; then
4496 glusterfs_discard="yes"
4497 fi
4498 if $pkg_config --atleast-version=6 glusterfs-api; then
4499 glusterfs_fallocate="yes"
4500 glusterfs_zerofill="yes"
4501 fi
4502 cat > $TMPC << EOF
4503#include <glusterfs/api/glfs.h>
4504
4505int
4506main(void)
4507{
4508 /* new glfs_ftruncate() passes two additional args */
4509 return glfs_ftruncate(NULL, 0, NULL, NULL);
4510}
4511EOF
4512 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4513 glusterfs_ftruncate_has_stat="yes"
4514 fi
4515 cat > $TMPC << EOF
4516#include <glusterfs/api/glfs.h>
4517
4518/* new glfs_io_cbk() passes two additional glfs_stat structs */
4519static void
4520glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4521{}
4522
4523int
4524main(void)
4525{
4526 glfs_io_cbk iocb = &glusterfs_iocb;
4527 iocb(NULL, 0 , NULL, NULL, NULL);
4528 return 0;
4529}
4530EOF
4531 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4532 glusterfs_iocb_has_stat="yes"
4533 fi
4534 else
4535 if test "$glusterfs" = "yes" ; then
4536 feature_not_found "GlusterFS backend support" \
4537 "Install glusterfs-api devel >= 3"
4538 fi
4539 glusterfs="no"
4540 fi
4541fi
4542
4543# Check for inotify functions when we are building linux-user
4544# emulator. This is done because older glibc versions don't
4545# have syscall stubs for these implemented. In that case we
4546# don't provide them even if kernel supports them.
4547#
4548inotify=no
4549cat > $TMPC << EOF
4550#include <sys/inotify.h>
4551
4552int
4553main(void)
4554{
4555 /* try to start inotify */
4556 return inotify_init();
4557}
4558EOF
4559if compile_prog "" "" ; then
4560 inotify=yes
4561fi
4562
4563inotify1=no
4564cat > $TMPC << EOF
4565#include <sys/inotify.h>
4566
4567int
4568main(void)
4569{
4570 /* try to start inotify */
4571 return inotify_init1(0);
4572}
4573EOF
4574if compile_prog "" "" ; then
4575 inotify1=yes
4576fi
4577
4578# check if pipe2 is there
4579pipe2=no
4580cat > $TMPC << EOF
4581#include <unistd.h>
4582#include <fcntl.h>
4583
4584int main(void)
4585{
4586 int pipefd[2];
4587 return pipe2(pipefd, O_CLOEXEC);
4588}
4589EOF
4590if compile_prog "" "" ; then
4591 pipe2=yes
4592fi
4593
4594# check if accept4 is there
4595accept4=no
4596cat > $TMPC << EOF
4597#include <sys/socket.h>
4598#include <stddef.h>
4599
4600int main(void)
4601{
4602 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4603 return 0;
4604}
4605EOF
4606if compile_prog "" "" ; then
4607 accept4=yes
4608fi
4609
4610# check if tee/splice is there. vmsplice was added same time.
4611splice=no
4612cat > $TMPC << EOF
4613#include <unistd.h>
4614#include <fcntl.h>
4615#include <limits.h>
4616
4617int main(void)
4618{
4619 int len, fd = 0;
4620 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4621 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4622 return 0;
4623}
4624EOF
4625if compile_prog "" "" ; then
4626 splice=yes
4627fi
4628
4629##########################################
4630# libnuma probe
4631
4632if test "$numa" != "no" ; then
4633 cat > $TMPC << EOF
4634#include <numa.h>
4635int main(void) { return numa_available(); }
4636EOF
4637
4638 if compile_prog "" "-lnuma" ; then
4639 numa=yes
4640 libs_softmmu="-lnuma $libs_softmmu"
4641 else
4642 if test "$numa" = "yes" ; then
4643 feature_not_found "numa" "install numactl devel"
4644 fi
4645 numa=no
4646 fi
4647fi
4648
4649if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4650 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4651 exit 1
4652fi
4653
4654# Even if malloc_trim() is available, these non-libc memory allocators
4655# do not support it.
4656if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4657 if test "$malloc_trim" = "yes" ; then
4658 echo "Disabling malloc_trim with non-libc memory allocator"
4659 fi
4660 malloc_trim="no"
4661fi
4662
4663#######################################
4664# malloc_trim
4665
4666if test "$malloc_trim" != "no" ; then
4667 cat > $TMPC << EOF
4668#include <malloc.h>
4669int main(void) { malloc_trim(0); return 0; }
4670EOF
4671 if compile_prog "" "" ; then
4672 malloc_trim="yes"
4673 else
4674 malloc_trim="no"
4675 fi
4676fi
4677
4678##########################################
4679# tcmalloc probe
4680
4681if test "$tcmalloc" = "yes" ; then
4682 cat > $TMPC << EOF
4683#include <stdlib.h>
4684int main(void) {
4685 void *tmp = malloc(1);
4686 if (tmp != NULL) {
4687 return 0;
4688 }
4689 return 1;
4690}
4691EOF
4692
4693 if compile_prog "" "-ltcmalloc" ; then
4694 LIBS="-ltcmalloc $LIBS"
4695 else
4696 feature_not_found "tcmalloc" "install gperftools devel"
4697 fi
4698fi
4699
4700##########################################
4701# jemalloc probe
4702
4703if test "$jemalloc" = "yes" ; then
4704 cat > $TMPC << EOF
4705#include <stdlib.h>
4706int main(void) {
4707 void *tmp = malloc(1);
4708 if (tmp != NULL) {
4709 return 0;
4710 }
4711 return 1;
4712}
4713EOF
4714
4715 if compile_prog "" "-ljemalloc" ; then
4716 LIBS="-ljemalloc $LIBS"
4717 else
4718 feature_not_found "jemalloc" "install jemalloc devel"
4719 fi
4720fi
4721
4722##########################################
4723# signalfd probe
4724signalfd="no"
4725cat > $TMPC << EOF
4726#include <unistd.h>
4727#include <sys/syscall.h>
4728#include <signal.h>
4729int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4730EOF
4731
4732if compile_prog "" "" ; then
4733 signalfd=yes
4734fi
4735
4736# check if optreset global is declared by <getopt.h>
4737optreset="no"
4738cat > $TMPC << EOF
4739#include <getopt.h>
4740int main(void) { return optreset; }
4741EOF
4742
4743if compile_prog "" "" ; then
4744 optreset=yes
4745fi
4746
4747# check if eventfd is supported
4748eventfd=no
4749cat > $TMPC << EOF
4750#include <sys/eventfd.h>
4751
4752int main(void)
4753{
4754 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4755}
4756EOF
4757if compile_prog "" "" ; then
4758 eventfd=yes
4759fi
4760
4761# check if memfd is supported
4762memfd=no
4763cat > $TMPC << EOF
4764#include <sys/mman.h>
4765
4766int main(void)
4767{
4768 return memfd_create("foo", MFD_ALLOW_SEALING);
4769}
4770EOF
4771if compile_prog "" "" ; then
4772 memfd=yes
4773fi
4774
4775# check for usbfs
4776have_usbfs=no
4777if test "$linux_user" = "yes"; then
4778 cat > $TMPC << EOF
4779#include <linux/usbdevice_fs.h>
4780
4781#ifndef USBDEVFS_GET_CAPABILITIES
4782#error "USBDEVFS_GET_CAPABILITIES undefined"
4783#endif
4784
4785#ifndef USBDEVFS_DISCONNECT_CLAIM
4786#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4787#endif
4788
4789int main(void)
4790{
4791 return 0;
4792}
4793EOF
4794 if compile_prog "" ""; then
4795 have_usbfs=yes
4796 fi
4797fi
4798
4799# check for fallocate
4800fallocate=no
4801cat > $TMPC << EOF
4802#include <fcntl.h>
4803
4804int main(void)
4805{
4806 fallocate(0, 0, 0, 0);
4807 return 0;
4808}
4809EOF
4810if compile_prog "" "" ; then
4811 fallocate=yes
4812fi
4813
4814# check for fallocate hole punching
4815fallocate_punch_hole=no
4816cat > $TMPC << EOF
4817#include <fcntl.h>
4818#include <linux/falloc.h>
4819
4820int main(void)
4821{
4822 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4823 return 0;
4824}
4825EOF
4826if compile_prog "" "" ; then
4827 fallocate_punch_hole=yes
4828fi
4829
4830# check that fallocate supports range zeroing inside the file
4831fallocate_zero_range=no
4832cat > $TMPC << EOF
4833#include <fcntl.h>
4834#include <linux/falloc.h>
4835
4836int main(void)
4837{
4838 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4839 return 0;
4840}
4841EOF
4842if compile_prog "" "" ; then
4843 fallocate_zero_range=yes
4844fi
4845
4846# check for posix_fallocate
4847posix_fallocate=no
4848cat > $TMPC << EOF
4849#include <fcntl.h>
4850
4851int main(void)
4852{
4853 posix_fallocate(0, 0, 0);
4854 return 0;
4855}
4856EOF
4857if compile_prog "" "" ; then
4858 posix_fallocate=yes
4859fi
4860
4861# check for sync_file_range
4862sync_file_range=no
4863cat > $TMPC << EOF
4864#include <fcntl.h>
4865
4866int main(void)
4867{
4868 sync_file_range(0, 0, 0, 0);
4869 return 0;
4870}
4871EOF
4872if compile_prog "" "" ; then
4873 sync_file_range=yes
4874fi
4875
4876# check for linux/fiemap.h and FS_IOC_FIEMAP
4877fiemap=no
4878cat > $TMPC << EOF
4879#include <sys/ioctl.h>
4880#include <linux/fs.h>
4881#include <linux/fiemap.h>
4882
4883int main(void)
4884{
4885 ioctl(0, FS_IOC_FIEMAP, 0);
4886 return 0;
4887}
4888EOF
4889if compile_prog "" "" ; then
4890 fiemap=yes
4891fi
4892
4893# check for dup3
4894dup3=no
4895cat > $TMPC << EOF
4896#include <unistd.h>
4897
4898int main(void)
4899{
4900 dup3(0, 0, 0);
4901 return 0;
4902}
4903EOF
4904if compile_prog "" "" ; then
4905 dup3=yes
4906fi
4907
4908# check for ppoll support
4909ppoll=no
4910cat > $TMPC << EOF
4911#include <poll.h>
4912
4913int main(void)
4914{
4915 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4916 ppoll(&pfd, 1, 0, 0);
4917 return 0;
4918}
4919EOF
4920if compile_prog "" "" ; then
4921 ppoll=yes
4922fi
4923
4924# check for prctl(PR_SET_TIMERSLACK , ... ) support
4925prctl_pr_set_timerslack=no
4926cat > $TMPC << EOF
4927#include <sys/prctl.h>
4928
4929int main(void)
4930{
4931 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4932 return 0;
4933}
4934EOF
4935if compile_prog "" "" ; then
4936 prctl_pr_set_timerslack=yes
4937fi
4938
4939# check for epoll support
4940epoll=no
4941cat > $TMPC << EOF
4942#include <sys/epoll.h>
4943
4944int main(void)
4945{
4946 epoll_create(0);
4947 return 0;
4948}
4949EOF
4950if compile_prog "" "" ; then
4951 epoll=yes
4952fi
4953
4954# epoll_create1 is a later addition
4955# so we must check separately for its presence
4956epoll_create1=no
4957cat > $TMPC << EOF
4958#include <sys/epoll.h>
4959
4960int main(void)
4961{
4962 /* Note that we use epoll_create1 as a value, not as
4963 * a function being called. This is necessary so that on
4964 * old SPARC glibc versions where the function was present in
4965 * the library but not declared in the header file we will
4966 * fail the configure check. (Otherwise we will get a compiler
4967 * warning but not an error, and will proceed to fail the
4968 * qemu compile where we compile with -Werror.)
4969 */
4970 return (int)(uintptr_t)&epoll_create1;
4971}
4972EOF
4973if compile_prog "" "" ; then
4974 epoll_create1=yes
4975fi
4976
4977# check for sendfile support
4978sendfile=no
4979cat > $TMPC << EOF
4980#include <sys/sendfile.h>
4981
4982int main(void)
4983{
4984 return sendfile(0, 0, 0, 0);
4985}
4986EOF
4987if compile_prog "" "" ; then
4988 sendfile=yes
4989fi
4990
4991# check for timerfd support (glibc 2.8 and newer)
4992timerfd=no
4993cat > $TMPC << EOF
4994#include <sys/timerfd.h>
4995
4996int main(void)
4997{
4998 return(timerfd_create(CLOCK_REALTIME, 0));
4999}
5000EOF
5001if compile_prog "" "" ; then
5002 timerfd=yes
5003fi
5004
5005# check for setns and unshare support
5006setns=no
5007cat > $TMPC << EOF
5008#include <sched.h>
5009
5010int main(void)
5011{
5012 int ret;
5013 ret = setns(0, 0);
5014 ret = unshare(0);
5015 return ret;
5016}
5017EOF
5018if compile_prog "" "" ; then
5019 setns=yes
5020fi
5021
5022# clock_adjtime probe
5023clock_adjtime=no
5024cat > $TMPC <<EOF
5025#include <time.h>
5026
5027int main(void)
5028{
5029 return clock_adjtime(0, 0);
5030}
5031EOF
5032clock_adjtime=no
5033if compile_prog "" "" ; then
5034 clock_adjtime=yes
5035fi
5036
5037# syncfs probe
5038syncfs=no
5039cat > $TMPC <<EOF
5040#include <unistd.h>
5041
5042int main(void)
5043{
5044 return syncfs(0);
5045}
5046EOF
5047syncfs=no
5048if compile_prog "" "" ; then
5049 syncfs=yes
5050fi
5051
5052# check for kcov support (kernel must be 4.4+, compiled with certain options)
5053kcov=no
5054if check_include sys/kcov.h ; then
5055 kcov=yes
5056fi
5057
5058# If we're making warnings fatal, apply this to Sphinx runs as well
5059sphinx_werror=""
5060if test "$werror" = "yes"; then
5061 sphinx_werror="-W"
5062fi
5063
5064# Check we have a new enough version of sphinx-build
5065has_sphinx_build() {
5066 # This is a bit awkward but works: create a trivial document and
5067 # try to run it with our configuration file (which enforces a
5068 # version requirement). This will fail if either
5069 # sphinx-build doesn't exist at all or if it is too old.
5070 mkdir -p "$TMPDIR1/sphinx"
5071 touch "$TMPDIR1/sphinx/index.rst"
5072 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
5073 -b html "$TMPDIR1/sphinx" \
5074 "$TMPDIR1/sphinx/out" >> config.log 2>&1
5075}
5076
5077# Check if tools are available to build documentation.
5078if test "$docs" != "no" ; then
5079 if has_sphinx_build; then
5080 sphinx_ok=yes
5081 else
5082 sphinx_ok=no
5083 fi
5084 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
5085 docs=yes
5086 else
5087 if test "$docs" = "yes" ; then
5088 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
5089 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
5090 fi
5091 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
5092 fi
5093 docs=no
5094 fi
5095fi
5096
5097# Search for bswap_32 function
5098byteswap_h=no
5099cat > $TMPC << EOF
5100#include <byteswap.h>
5101int main(void) { return bswap_32(0); }
5102EOF
5103if compile_prog "" "" ; then
5104 byteswap_h=yes
5105fi
5106
5107# Search for bswap32 function
5108bswap_h=no
5109cat > $TMPC << EOF
5110#include <sys/endian.h>
5111#include <sys/types.h>
5112#include <machine/bswap.h>
5113int main(void) { return bswap32(0); }
5114EOF
5115if compile_prog "" "" ; then
5116 bswap_h=yes
5117fi
5118
5119##########################################
5120# Do we have libiscsi >= 1.9.0
5121if test "$libiscsi" != "no" ; then
5122 if $pkg_config --atleast-version=1.9.0 libiscsi; then
5123 libiscsi="yes"
5124 libiscsi_cflags=$($pkg_config --cflags libiscsi)
5125 libiscsi_libs=$($pkg_config --libs libiscsi)
5126 else
5127 if test "$libiscsi" = "yes" ; then
5128 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
5129 fi
5130 libiscsi="no"
5131 fi
5132fi
5133
5134##########################################
5135# Do we need libm
5136cat > $TMPC << EOF
5137#include <math.h>
5138int main(int argc, char **argv) { return isnan(sin((double)argc)); }
5139EOF
5140if compile_prog "" "" ; then
5141 :
5142elif compile_prog "" "-lm" ; then
5143 LIBS="-lm $LIBS"
5144 libs_qga="-lm $libs_qga"
5145else
5146 error_exit "libm check failed"
5147fi
5148
5149##########################################
5150# Do we need librt
5151# uClibc provides 2 versions of clock_gettime(), one with realtime
5152# support and one without. This means that the clock_gettime() don't
5153# need -lrt. We still need it for timer_create() so we check for this
5154# function in addition.
5155cat > $TMPC <<EOF
5156#include <signal.h>
5157#include <time.h>
5158int main(void) {
5159 timer_create(CLOCK_REALTIME, NULL, NULL);
5160 return clock_gettime(CLOCK_REALTIME, NULL);
5161}
5162EOF
5163
5164if compile_prog "" "" ; then
5165 :
5166# we need pthread for static linking. use previous pthread test result
5167elif compile_prog "" "$pthread_lib -lrt" ; then
5168 LIBS="$LIBS -lrt"
5169 libs_qga="$libs_qga -lrt"
5170fi
5171
5172# Check whether we need to link libutil for openpty()
5173cat > $TMPC << EOF
5174extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5175int main(void) { return openpty(0, 0, 0, 0, 0); }
5176EOF
5177
5178have_openpty="no"
5179if compile_prog "" "" ; then
5180 have_openpty="yes"
5181else
5182 if compile_prog "" "-lutil" ; then
5183 libs_softmmu="-lutil $libs_softmmu"
5184 libs_tools="-lutil $libs_tools"
5185 have_openpty="yes"
5186 fi
5187fi
5188
5189##########################################
5190# spice probe
5191if test "$spice" != "no" ; then
5192 cat > $TMPC << EOF
5193#include <spice.h>
5194int main(void) { spice_server_new(); return 0; }
5195EOF
5196 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5197 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
5198 if $pkg_config --atleast-version=0.12.5 spice-server && \
5199 $pkg_config --atleast-version=0.12.3 spice-protocol && \
5200 compile_prog "$spice_cflags" "$spice_libs" ; then
5201 spice="yes"
5202 libs_softmmu="$libs_softmmu $spice_libs"
5203 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
5204 spice_protocol_version=$($pkg_config --modversion spice-protocol)
5205 spice_server_version=$($pkg_config --modversion spice-server)
5206 else
5207 if test "$spice" = "yes" ; then
5208 feature_not_found "spice" \
5209 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
5210 fi
5211 spice="no"
5212 fi
5213fi
5214
5215# check for smartcard support
5216if test "$smartcard" != "no"; then
5217 if $pkg_config --atleast-version=2.5.1 libcacard; then
5218 libcacard_cflags=$($pkg_config --cflags libcacard)
5219 libcacard_libs=$($pkg_config --libs libcacard)
5220 smartcard="yes"
5221 else
5222 if test "$smartcard" = "yes"; then
5223 feature_not_found "smartcard" "Install libcacard devel"
5224 fi
5225 smartcard="no"
5226 fi
5227fi
5228
5229# check for libusb
5230if test "$libusb" != "no" ; then
5231 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
5232 libusb="yes"
5233 libusb_cflags=$($pkg_config --cflags libusb-1.0)
5234 libusb_libs=$($pkg_config --libs libusb-1.0)
5235 else
5236 if test "$libusb" = "yes"; then
5237 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
5238 fi
5239 libusb="no"
5240 fi
5241fi
5242
5243# check for usbredirparser for usb network redirection support
5244if test "$usb_redir" != "no" ; then
5245 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
5246 usb_redir="yes"
5247 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5248 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
5249 else
5250 if test "$usb_redir" = "yes"; then
5251 feature_not_found "usb-redir" "Install usbredir devel"
5252 fi
5253 usb_redir="no"
5254 fi
5255fi
5256
5257##########################################
5258# check if we have VSS SDK headers for win
5259
5260if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5261 test "$vss_win32_sdk" != "no" ; then
5262 case "$vss_win32_sdk" in
5263 "") vss_win32_include="-isystem $source_path" ;;
5264 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5265 # handle path with spaces. So we symlink the headers into ".sdk/vss".
5266 vss_win32_include="-isystem $source_path/.sdk/vss"
5267 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5268 ;;
5269 *) vss_win32_include="-isystem $vss_win32_sdk"
5270 esac
5271 cat > $TMPC << EOF
5272#define __MIDL_user_allocate_free_DEFINED__
5273#include <inc/win2003/vss.h>
5274int main(void) { return VSS_CTX_BACKUP; }
5275EOF
5276 if compile_prog "$vss_win32_include" "" ; then
5277 guest_agent_with_vss="yes"
5278 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
5279 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
5280 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
5281 else
5282 if test "$vss_win32_sdk" != "" ; then
5283 echo "ERROR: Please download and install Microsoft VSS SDK:"
5284 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5285 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5286 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
5287 echo "ERROR: The headers are extracted in the directory \`inc'."
5288 feature_not_found "VSS support"
5289 fi
5290 guest_agent_with_vss="no"
5291 fi
5292fi
5293
5294##########################################
5295# lookup Windows platform SDK (if not specified)
5296# The SDK is needed only to build .tlb (type library) file of guest agent
5297# VSS provider from the source. It is usually unnecessary because the
5298# pre-compiled .tlb file is included.
5299
5300if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5301 test "$guest_agent_with_vss" = "yes" ; then
5302 if test -z "$win_sdk"; then
5303 programfiles="$PROGRAMFILES"
5304 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5305 if test -n "$programfiles"; then
5306 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5307 else
5308 feature_not_found "Windows SDK"
5309 fi
5310 elif test "$win_sdk" = "no"; then
5311 win_sdk=""
5312 fi
5313fi
5314
5315##########################################
5316# check if mingw environment provides a recent ntddscsi.h
5317if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
5318 cat > $TMPC << EOF
5319#include <windows.h>
5320#include <ntddscsi.h>
5321int main(void) {
5322#if !defined(IOCTL_SCSI_GET_ADDRESS)
5323#error Missing required ioctl definitions
5324#endif
5325 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5326 return addr.Lun;
5327}
5328EOF
5329 if compile_prog "" "" ; then
5330 guest_agent_ntddscsi=yes
5331 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
5332 fi
5333fi
5334
5335##########################################
5336# virgl renderer probe
5337
5338if test "$virglrenderer" != "no" ; then
5339 cat > $TMPC << EOF
5340#include <virglrenderer.h>
5341int main(void) { virgl_renderer_poll(); return 0; }
5342EOF
5343 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5344 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
5345 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
5346 if $pkg_config virglrenderer >/dev/null 2>&1 && \
5347 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5348 virglrenderer="yes"
5349 else
5350 if test "$virglrenderer" = "yes" ; then
5351 feature_not_found "virglrenderer"
5352 fi
5353 virglrenderer="no"
5354 fi
5355fi
5356
5357##########################################
5358# capstone
5359
5360case "$capstone" in
5361 "" | yes)
5362 if $pkg_config capstone; then
5363 capstone=system
5364 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5365 capstone=git
5366 elif test -e "${source_path}/capstone/Makefile" ; then
5367 capstone=internal
5368 elif test -z "$capstone" ; then
5369 capstone=no
5370 else
5371 feature_not_found "capstone" "Install capstone devel or git submodule"
5372 fi
5373 ;;
5374
5375 system)
5376 if ! $pkg_config capstone; then
5377 feature_not_found "capstone" "Install capstone devel"
5378 fi
5379 ;;
5380esac
5381
5382case "$capstone" in
5383 git | internal)
5384 if test "$capstone" = git; then
5385 git_submodules="${git_submodules} capstone"
5386 fi
5387 mkdir -p capstone
5388 QEMU_CFLAGS="$QEMU_CFLAGS -I${source_path}/capstone/include"
5389 if test "$mingw32" = "yes"; then
5390 LIBCAPSTONE=capstone.lib
5391 else
5392 LIBCAPSTONE=libcapstone.a
5393 fi
5394 libs_cpu="-L$PWD/capstone -lcapstone $libs_cpu"
5395 ;;
5396
5397 system)
5398 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5399 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5400 ;;
5401
5402 no)
5403 ;;
5404 *)
5405 error_exit "Unknown state for capstone: $capstone"
5406 ;;
5407esac
5408
5409##########################################
5410# check if we have fdatasync
5411
5412fdatasync=no
5413cat > $TMPC << EOF
5414#include <unistd.h>
5415int main(void) {
5416#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5417return fdatasync(0);
5418#else
5419#error Not supported
5420#endif
5421}
5422EOF
5423if compile_prog "" "" ; then
5424 fdatasync=yes
5425fi
5426
5427##########################################
5428# check if we have madvise
5429
5430madvise=no
5431cat > $TMPC << EOF
5432#include <sys/types.h>
5433#include <sys/mman.h>
5434#include <stddef.h>
5435int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5436EOF
5437if compile_prog "" "" ; then
5438 madvise=yes
5439fi
5440
5441##########################################
5442# check if we have posix_madvise
5443
5444posix_madvise=no
5445cat > $TMPC << EOF
5446#include <sys/mman.h>
5447#include <stddef.h>
5448int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5449EOF
5450if compile_prog "" "" ; then
5451 posix_madvise=yes
5452fi
5453
5454##########################################
5455# check if we have posix_memalign()
5456
5457posix_memalign=no
5458cat > $TMPC << EOF
5459#include <stdlib.h>
5460int main(void) {
5461 void *p;
5462 return posix_memalign(&p, 8, 8);
5463}
5464EOF
5465if compile_prog "" "" ; then
5466 posix_memalign=yes
5467fi
5468
5469##########################################
5470# check if we have posix_syslog
5471
5472posix_syslog=no
5473cat > $TMPC << EOF
5474#include <syslog.h>
5475int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5476EOF
5477if compile_prog "" "" ; then
5478 posix_syslog=yes
5479fi
5480
5481##########################################
5482# check if we have sem_timedwait
5483
5484sem_timedwait=no
5485cat > $TMPC << EOF
5486#include <semaphore.h>
5487int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5488EOF
5489if compile_prog "" "" ; then
5490 sem_timedwait=yes
5491fi
5492
5493##########################################
5494# check if we have strchrnul
5495
5496strchrnul=no
5497cat > $TMPC << EOF
5498#include <string.h>
5499int main(void);
5500// Use a haystack that the compiler shouldn't be able to constant fold
5501char *haystack = (char*)&main;
5502int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5503EOF
5504if compile_prog "" "" ; then
5505 strchrnul=yes
5506fi
5507
5508#########################################
5509# check if we have st_atim
5510
5511st_atim=no
5512cat > $TMPC << EOF
5513#include <sys/stat.h>
5514#include <stddef.h>
5515int main(void) { return offsetof(struct stat, st_atim); }
5516EOF
5517if compile_prog "" "" ; then
5518 st_atim=yes
5519fi
5520
5521##########################################
5522# check if trace backend exists
5523
5524$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
5525if test "$?" -ne 0 ; then
5526 error_exit "invalid trace backends" \
5527 "Please choose supported trace backends."
5528fi
5529
5530##########################################
5531# For 'ust' backend, test if ust headers are present
5532if have_backend "ust"; then
5533 cat > $TMPC << EOF
5534#include <lttng/tracepoint.h>
5535int main(void) { return 0; }
5536EOF
5537 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5538 if $pkg_config lttng-ust --exists; then
5539 lttng_ust_libs=$($pkg_config --libs lttng-ust)
5540 else
5541 lttng_ust_libs="-llttng-ust -ldl"
5542 fi
5543 if $pkg_config liburcu-bp --exists; then
5544 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5545 else
5546 urcu_bp_libs="-lurcu-bp"
5547 fi
5548
5549 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5550 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
5551 else
5552 error_exit "Trace backend 'ust' missing lttng-ust header files"
5553 fi
5554fi
5555
5556##########################################
5557# For 'dtrace' backend, test if 'dtrace' command is present
5558if have_backend "dtrace"; then
5559 if ! has 'dtrace' ; then
5560 error_exit "dtrace command is not found in PATH $PATH"
5561 fi
5562 trace_backend_stap="no"
5563 if has 'stap' ; then
5564 trace_backend_stap="yes"
5565 fi
5566fi
5567
5568##########################################
5569# check and set a backend for coroutine
5570
5571# We prefer ucontext, but it's not always possible. The fallback
5572# is sigcontext. On Windows the only valid backend is the Windows
5573# specific one.
5574
5575ucontext_works=no
5576if test "$darwin" != "yes"; then
5577 cat > $TMPC << EOF
5578#include <ucontext.h>
5579#ifdef __stub_makecontext
5580#error Ignoring glibc stub makecontext which will always fail
5581#endif
5582int main(void) { makecontext(0, 0, 0); return 0; }
5583EOF
5584 if compile_prog "" "" ; then
5585 ucontext_works=yes
5586 fi
5587fi
5588
5589if test "$coroutine" = ""; then
5590 if test "$mingw32" = "yes"; then
5591 coroutine=win32
5592 elif test "$ucontext_works" = "yes"; then
5593 coroutine=ucontext
5594 else
5595 coroutine=sigaltstack
5596 fi
5597else
5598 case $coroutine in
5599 windows)
5600 if test "$mingw32" != "yes"; then
5601 error_exit "'windows' coroutine backend only valid for Windows"
5602 fi
5603 # Unfortunately the user visible backend name doesn't match the
5604 # coroutine-*.c filename for this case, so we have to adjust it here.
5605 coroutine=win32
5606 ;;
5607 ucontext)
5608 if test "$ucontext_works" != "yes"; then
5609 feature_not_found "ucontext"
5610 fi
5611 ;;
5612 sigaltstack)
5613 if test "$mingw32" = "yes"; then
5614 error_exit "only the 'windows' coroutine backend is valid for Windows"
5615 fi
5616 ;;
5617 *)
5618 error_exit "unknown coroutine backend $coroutine"
5619 ;;
5620 esac
5621fi
5622
5623if test "$coroutine_pool" = ""; then
5624 coroutine_pool=yes
5625fi
5626
5627if test "$debug_stack_usage" = "yes"; then
5628 if test "$coroutine_pool" = "yes"; then
5629 echo "WARN: disabling coroutine pool for stack usage debugging"
5630 coroutine_pool=no
5631 fi
5632fi
5633
5634##################################################
5635# SafeStack
5636
5637
5638if test "$safe_stack" = "yes"; then
5639cat > $TMPC << EOF
5640int main(int argc, char *argv[])
5641{
5642#if ! __has_feature(safe_stack)
5643#error SafeStack Disabled
5644#endif
5645 return 0;
5646}
5647EOF
5648 flag="-fsanitize=safe-stack"
5649 # Check that safe-stack is supported and enabled.
5650 if compile_prog "-Werror $flag" "$flag"; then
5651 # Flag needed both at compilation and at linking
5652 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5653 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5654 else
5655 error_exit "SafeStack not supported by your compiler"
5656 fi
5657 if test "$coroutine" != "ucontext"; then
5658 error_exit "SafeStack is only supported by the coroutine backend ucontext"
5659 fi
5660else
5661cat > $TMPC << EOF
5662int main(int argc, char *argv[])
5663{
5664#if defined(__has_feature)
5665#if __has_feature(safe_stack)
5666#error SafeStack Enabled
5667#endif
5668#endif
5669 return 0;
5670}
5671EOF
5672if test "$safe_stack" = "no"; then
5673 # Make sure that safe-stack is disabled
5674 if ! compile_prog "-Werror" ""; then
5675 # SafeStack was already enabled, try to explicitly remove the feature
5676 flag="-fno-sanitize=safe-stack"
5677 if ! compile_prog "-Werror $flag" "$flag"; then
5678 error_exit "Configure cannot disable SafeStack"
5679 fi
5680 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5681 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5682 fi
5683else # "$safe_stack" = ""
5684 # Set safe_stack to yes or no based on pre-existing flags
5685 if compile_prog "-Werror" ""; then
5686 safe_stack="no"
5687 else
5688 safe_stack="yes"
5689 if test "$coroutine" != "ucontext"; then
5690 error_exit "SafeStack is only supported by the coroutine backend ucontext"
5691 fi
5692 fi
5693fi
5694fi
5695
5696##########################################
5697# check if we have open_by_handle_at
5698
5699open_by_handle_at=no
5700cat > $TMPC << EOF
5701#include <fcntl.h>
5702#if !defined(AT_EMPTY_PATH)
5703# error missing definition
5704#else
5705int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5706#endif
5707EOF
5708if compile_prog "" "" ; then
5709 open_by_handle_at=yes
5710fi
5711
5712########################################
5713# check if we have linux/magic.h
5714
5715linux_magic_h=no
5716cat > $TMPC << EOF
5717#include <linux/magic.h>
5718int main(void) {
5719 return 0;
5720}
5721EOF
5722if compile_prog "" "" ; then
5723 linux_magic_h=yes
5724fi
5725
5726########################################
5727# check if we have valgrind/valgrind.h
5728
5729valgrind_h=no
5730cat > $TMPC << EOF
5731#include <valgrind/valgrind.h>
5732int main(void) {
5733 return 0;
5734}
5735EOF
5736if compile_prog "" "" ; then
5737 valgrind_h=yes
5738fi
5739
5740########################################
5741# check if environ is declared
5742
5743has_environ=no
5744cat > $TMPC << EOF
5745#include <unistd.h>
5746int main(void) {
5747 environ = 0;
5748 return 0;
5749}
5750EOF
5751if compile_prog "" "" ; then
5752 has_environ=yes
5753fi
5754
5755########################################
5756# check if cpuid.h is usable.
5757
5758cat > $TMPC << EOF
5759#include <cpuid.h>
5760int main(void) {
5761 unsigned a, b, c, d;
5762 int max = __get_cpuid_max(0, 0);
5763
5764 if (max >= 1) {
5765 __cpuid(1, a, b, c, d);
5766 }
5767
5768 if (max >= 7) {
5769 __cpuid_count(7, 0, a, b, c, d);
5770 }
5771
5772 return 0;
5773}
5774EOF
5775if compile_prog "" "" ; then
5776 cpuid_h=yes
5777fi
5778
5779##########################################
5780# avx2 optimization requirement check
5781#
5782# There is no point enabling this if cpuid.h is not usable,
5783# since we won't be able to select the new routines.
5784
5785if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5786 cat > $TMPC << EOF
5787#pragma GCC push_options
5788#pragma GCC target("avx2")
5789#include <cpuid.h>
5790#include <immintrin.h>
5791static int bar(void *a) {
5792 __m256i x = *(__m256i *)a;
5793 return _mm256_testz_si256(x, x);
5794}
5795int main(int argc, char *argv[]) { return bar(argv[0]); }
5796EOF
5797 if compile_object "" ; then
5798 avx2_opt="yes"
5799 else
5800 avx2_opt="no"
5801 fi
5802fi
5803
5804##########################################
5805# avx512f optimization requirement check
5806#
5807# There is no point enabling this if cpuid.h is not usable,
5808# since we won't be able to select the new routines.
5809# by default, it is turned off.
5810# if user explicitly want to enable it, check environment
5811
5812if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5813 cat > $TMPC << EOF
5814#pragma GCC push_options
5815#pragma GCC target("avx512f")
5816#include <cpuid.h>
5817#include <immintrin.h>
5818static int bar(void *a) {
5819 __m512i x = *(__m512i *)a;
5820 return _mm512_test_epi64_mask(x, x);
5821}
5822int main(int argc, char *argv[])
5823{
5824 return bar(argv[0]);
5825}
5826EOF
5827 if ! compile_object "" ; then
5828 avx512f_opt="no"
5829 fi
5830else
5831 avx512f_opt="no"
5832fi
5833
5834########################################
5835# check if __[u]int128_t is usable.
5836
5837int128=no
5838cat > $TMPC << EOF
5839__int128_t a;
5840__uint128_t b;
5841int main (void) {
5842 a = a + b;
5843 b = a * b;
5844 a = a * a;
5845 return 0;
5846}
5847EOF
5848if compile_prog "" "" ; then
5849 int128=yes
5850fi
5851
5852#########################################
5853# See if 128-bit atomic operations are supported.
5854
5855atomic128=no
5856if test "$int128" = "yes"; then
5857 cat > $TMPC << EOF
5858int main(void)
5859{
5860 unsigned __int128 x = 0, y = 0;
5861 y = __atomic_load_16(&x, 0);
5862 __atomic_store_16(&x, y, 0);
5863 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5864 return 0;
5865}
5866EOF
5867 if compile_prog "" "" ; then
5868 atomic128=yes
5869 fi
5870fi
5871
5872cmpxchg128=no
5873if test "$int128" = yes && test "$atomic128" = no; then
5874 cat > $TMPC << EOF
5875int main(void)
5876{
5877 unsigned __int128 x = 0, y = 0;
5878 __sync_val_compare_and_swap_16(&x, y, x);
5879 return 0;
5880}
5881EOF
5882 if compile_prog "" "" ; then
5883 cmpxchg128=yes
5884 fi
5885fi
5886
5887#########################################
5888# See if 64-bit atomic operations are supported.
5889# Note that without __atomic builtins, we can only
5890# assume atomic loads/stores max at pointer size.
5891
5892cat > $TMPC << EOF
5893#include <stdint.h>
5894int main(void)
5895{
5896 uint64_t x = 0, y = 0;
5897#ifdef __ATOMIC_RELAXED
5898 y = __atomic_load_8(&x, 0);
5899 __atomic_store_8(&x, y, 0);
5900 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5901 __atomic_exchange_8(&x, y, 0);
5902 __atomic_fetch_add_8(&x, y, 0);
5903#else
5904 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5905 __sync_lock_test_and_set(&x, y);
5906 __sync_val_compare_and_swap(&x, y, 0);
5907 __sync_fetch_and_add(&x, y);
5908#endif
5909 return 0;
5910}
5911EOF
5912if compile_prog "" "" ; then
5913 atomic64=yes
5914fi
5915
5916#########################################
5917# See if --dynamic-list is supported by the linker
5918ld_dynamic_list="no"
5919if test "$static" = "no" ; then
5920 cat > $TMPTXT <<EOF
5921{
5922 foo;
5923};
5924EOF
5925
5926 cat > $TMPC <<EOF
5927#include <stdio.h>
5928void foo(void);
5929
5930void foo(void)
5931{
5932 printf("foo\n");
5933}
5934
5935int main(void)
5936{
5937 foo();
5938 return 0;
5939}
5940EOF
5941
5942 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5943 ld_dynamic_list="yes"
5944 fi
5945fi
5946
5947#########################################
5948# See if -exported_symbols_list is supported by the linker
5949
5950ld_exported_symbols_list="no"
5951if test "$static" = "no" ; then
5952 cat > $TMPTXT <<EOF
5953 _foo
5954EOF
5955
5956 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5957 ld_exported_symbols_list="yes"
5958 fi
5959fi
5960
5961if test "$plugins" = "yes" &&
5962 test "$ld_dynamic_list" = "no" &&
5963 test "$ld_exported_symbols_list" = "no" ; then
5964 error_exit \
5965 "Plugin support requires dynamic linking and specifying a set of symbols " \
5966 "that are exported to plugins. Unfortunately your linker doesn't " \
5967 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5968 "for this purpose. You can't build with --static."
5969fi
5970
5971########################################
5972# See if __attribute__((alias)) is supported.
5973# This false for Xcode 9, but has been remedied for Xcode 10.
5974# Unfortunately, travis uses Xcode 9 by default.
5975
5976attralias=no
5977cat > $TMPC << EOF
5978int x = 1;
5979extern const int y __attribute__((alias("x")));
5980int main(void) { return 0; }
5981EOF
5982if compile_prog "" "" ; then
5983 attralias=yes
5984fi
5985
5986########################################
5987# check if getauxval is available.
5988
5989getauxval=no
5990cat > $TMPC << EOF
5991#include <sys/auxv.h>
5992int main(void) {
5993 return getauxval(AT_HWCAP) == 0;
5994}
5995EOF
5996if compile_prog "" "" ; then
5997 getauxval=yes
5998fi
5999
6000########################################
6001# check if ccache is interfering with
6002# semantic analysis of macros
6003
6004unset CCACHE_CPP2
6005ccache_cpp2=no
6006cat > $TMPC << EOF
6007static const int Z = 1;
6008#define fn() ({ Z; })
6009#define TAUT(X) ((X) == Z)
6010#define PAREN(X, Y) (X == Y)
6011#define ID(X) (X)
6012int main(int argc, char *argv[])
6013{
6014 int x = 0, y = 0;
6015 x = ID(x);
6016 x = fn();
6017 fn();
6018 if (PAREN(x, y)) return 0;
6019 if (TAUT(Z)) return 0;
6020 return 0;
6021}
6022EOF
6023
6024if ! compile_object "-Werror"; then
6025 ccache_cpp2=yes
6026fi
6027
6028#################################################
6029# clang does not support glibc + FORTIFY_SOURCE.
6030
6031if test "$fortify_source" != "no"; then
6032 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
6033 fortify_source="no";
6034 elif test -n "$cxx" && has $cxx &&
6035 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
6036 fortify_source="no";
6037 else
6038 fortify_source="yes"
6039 fi
6040fi
6041
6042###############################################
6043# Check if copy_file_range is provided by glibc
6044have_copy_file_range=no
6045cat > $TMPC << EOF
6046#include <unistd.h>
6047int main(void) {
6048 copy_file_range(0, NULL, 0, NULL, 0, 0);
6049 return 0;
6050}
6051EOF
6052if compile_prog "" "" ; then
6053 have_copy_file_range=yes
6054fi
6055
6056##########################################
6057# check if struct fsxattr is available via linux/fs.h
6058
6059have_fsxattr=no
6060cat > $TMPC << EOF
6061#include <linux/fs.h>
6062struct fsxattr foo;
6063int main(void) {
6064 return 0;
6065}
6066EOF
6067if compile_prog "" "" ; then
6068 have_fsxattr=yes
6069fi
6070
6071##########################################
6072# check for usable membarrier system call
6073if test "$membarrier" = "yes"; then
6074 have_membarrier=no
6075 if test "$mingw32" = "yes" ; then
6076 have_membarrier=yes
6077 elif test "$linux" = "yes" ; then
6078 cat > $TMPC << EOF
6079 #include <linux/membarrier.h>
6080 #include <sys/syscall.h>
6081 #include <unistd.h>
6082 #include <stdlib.h>
6083 int main(void) {
6084 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
6085 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
6086 exit(0);
6087 }
6088EOF
6089 if compile_prog "" "" ; then
6090 have_membarrier=yes
6091 fi
6092 fi
6093 if test "$have_membarrier" = "no"; then
6094 feature_not_found "membarrier" "membarrier system call not available"
6095 fi
6096else
6097 # Do not enable it by default even for Mingw32, because it doesn't
6098 # work on Wine.
6099 membarrier=no
6100fi
6101
6102##########################################
6103# check if rtnetlink.h exists and is useful
6104have_rtnetlink=no
6105cat > $TMPC << EOF
6106#include <linux/rtnetlink.h>
6107int main(void) {
6108 return IFLA_PROTO_DOWN;
6109}
6110EOF
6111if compile_prog "" "" ; then
6112 have_rtnetlink=yes
6113fi
6114
6115##########################################
6116# check for usable AF_VSOCK environment
6117have_af_vsock=no
6118cat > $TMPC << EOF
6119#include <errno.h>
6120#include <sys/types.h>
6121#include <sys/socket.h>
6122#if !defined(AF_VSOCK)
6123# error missing AF_VSOCK flag
6124#endif
6125#include <linux/vm_sockets.h>
6126int main(void) {
6127 int sock, ret;
6128 struct sockaddr_vm svm;
6129 socklen_t len = sizeof(svm);
6130 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
6131 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
6132 if ((ret == -1) && (errno == ENOTCONN)) {
6133 return 0;
6134 }
6135 return -1;
6136}
6137EOF
6138if compile_prog "" "" ; then
6139 have_af_vsock=yes
6140fi
6141
6142##########################################
6143# check for usable AF_ALG environment
6144have_afalg=no
6145cat > $TMPC << EOF
6146#include <errno.h>
6147#include <sys/types.h>
6148#include <sys/socket.h>
6149#include <linux/if_alg.h>
6150int main(void) {
6151 int sock;
6152 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
6153 return sock;
6154}
6155EOF
6156if compile_prog "" "" ; then
6157 have_afalg=yes
6158fi
6159if test "$crypto_afalg" = "yes"
6160then
6161 if test "$have_afalg" != "yes"
6162 then
6163 error_exit "AF_ALG requested but could not be detected"
6164 fi
6165fi
6166
6167
6168#################################################
6169# Check to see if we have the Hypervisor framework
6170if [ "$darwin" = "yes" ] ; then
6171 cat > $TMPC << EOF
6172#include <Hypervisor/hv.h>
6173int main() { return 0;}
6174EOF
6175 if ! compile_object ""; then
6176 hvf='no'
6177 else
6178 hvf='yes'
6179 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
6180 fi
6181fi
6182
6183#################################################
6184# Sparc implicitly links with --relax, which is
6185# incompatible with -r, so --no-relax should be
6186# given. It does no harm to give it on other
6187# platforms too.
6188
6189# Note: the prototype is needed since QEMU_CFLAGS
6190# contains -Wmissing-prototypes
6191cat > $TMPC << EOF
6192extern int foo(void);
6193int foo(void) { return 0; }
6194EOF
6195if ! compile_object ""; then
6196 error_exit "Failed to compile object file for LD_REL_FLAGS test"
6197fi
6198for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6199 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6200 LD_REL_FLAGS=$i
6201 break
6202 fi
6203done
6204if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6205 feature_not_found "modules" "Cannot find how to build relocatable objects"
6206fi
6207
6208##########################################
6209# check for sysmacros.h
6210
6211have_sysmacros=no
6212cat > $TMPC << EOF
6213#include <sys/sysmacros.h>
6214int main(void) {
6215 return makedev(0, 0);
6216}
6217EOF
6218if compile_prog "" "" ; then
6219 have_sysmacros=yes
6220fi
6221
6222##########################################
6223# check for _Static_assert()
6224
6225have_static_assert=no
6226cat > $TMPC << EOF
6227_Static_assert(1, "success");
6228int main(void) {
6229 return 0;
6230}
6231EOF
6232if compile_prog "" "" ; then
6233 have_static_assert=yes
6234fi
6235
6236##########################################
6237# check for utmpx.h, it is missing e.g. on OpenBSD
6238
6239have_utmpx=no
6240cat > $TMPC << EOF
6241#include <utmpx.h>
6242struct utmpx user_info;
6243int main(void) {
6244 return 0;
6245}
6246EOF
6247if compile_prog "" "" ; then
6248 have_utmpx=yes
6249fi
6250
6251##########################################
6252# check for getrandom()
6253
6254have_getrandom=no
6255cat > $TMPC << EOF
6256#include <sys/random.h>
6257int main(void) {
6258 return getrandom(0, 0, GRND_NONBLOCK);
6259}
6260EOF
6261if compile_prog "" "" ; then
6262 have_getrandom=yes
6263fi
6264
6265##########################################
6266# checks for sanitizers
6267
6268have_asan=no
6269have_ubsan=no
6270have_asan_iface_h=no
6271have_asan_iface_fiber=no
6272
6273if test "$sanitizers" = "yes" ; then
6274 write_c_skeleton
6275 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6276 have_asan=yes
6277 fi
6278
6279 # we could use a simple skeleton for flags checks, but this also
6280 # detect the static linking issue of ubsan, see also:
6281 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6282 cat > $TMPC << EOF
6283#include <stdlib.h>
6284int main(void) {
6285 void *tmp = malloc(10);
6286 if (tmp != NULL) {
6287 return *(int *)(tmp + 2);
6288 }
6289 return 1;
6290}
6291EOF
6292 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6293 have_ubsan=yes
6294 fi
6295
6296 if check_include "sanitizer/asan_interface.h" ; then
6297 have_asan_iface_h=yes
6298 fi
6299
6300 cat > $TMPC << EOF
6301#include <sanitizer/asan_interface.h>
6302int main(void) {
6303 __sanitizer_start_switch_fiber(0, 0, 0);
6304 return 0;
6305}
6306EOF
6307 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6308 have_asan_iface_fiber=yes
6309 fi
6310fi
6311
6312##########################################
6313# checks for fuzzer
6314if test "$fuzzing" = "yes" ; then
6315 write_c_fuzzer_skeleton
6316 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
6317 have_fuzzer=yes
6318 fi
6319fi
6320
6321# Thread sanitizer is, for now, much noisier than the other sanitizers;
6322# keep it separate until that is not the case.
6323if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
6324 error_exit "TSAN is not supported with other sanitiziers."
6325fi
6326have_tsan=no
6327have_tsan_iface_fiber=no
6328if test "$tsan" = "yes" ; then
6329 write_c_skeleton
6330 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6331 have_tsan=yes
6332 fi
6333 cat > $TMPC << EOF
6334#include <sanitizer/tsan_interface.h>
6335int main(void) {
6336 __tsan_create_fiber(0);
6337 return 0;
6338}
6339EOF
6340 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6341 have_tsan_iface_fiber=yes
6342 fi
6343fi
6344
6345##########################################
6346# check for libpmem
6347
6348if test "$libpmem" != "no"; then
6349 if $pkg_config --exists "libpmem"; then
6350 libpmem="yes"
6351 libpmem_libs=$($pkg_config --libs libpmem)
6352 libpmem_cflags=$($pkg_config --cflags libpmem)
6353 libs_softmmu="$libs_softmmu $libpmem_libs"
6354 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6355 else
6356 if test "$libpmem" = "yes" ; then
6357 feature_not_found "libpmem" "Install nvml or pmdk"
6358 fi
6359 libpmem="no"
6360 fi
6361fi
6362
6363##########################################
6364# check for libdaxctl
6365
6366if test "$libdaxctl" != "no"; then
6367 if $pkg_config --atleast-version=57 "libdaxctl"; then
6368 libdaxctl="yes"
6369 libdaxctl_libs=$($pkg_config --libs libdaxctl)
6370 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
6371 libs_softmmu="$libs_softmmu $libdaxctl_libs"
6372 QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags"
6373 else
6374 if test "$libdaxctl" = "yes" ; then
6375 feature_not_found "libdaxctl" "Install libdaxctl"
6376 fi
6377 libdaxctl="no"
6378 fi
6379fi
6380
6381##########################################
6382# check for slirp
6383
6384# slirp is only required when building softmmu targets
6385if test -z "$slirp" -a "$softmmu" != "yes" ; then
6386 slirp="no"
6387fi
6388
6389case "$slirp" in
6390 "" | yes)
6391 if $pkg_config slirp; then
6392 slirp=system
6393 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6394 slirp=git
6395 elif test -e "${source_path}/slirp/Makefile" ; then
6396 slirp=internal
6397 elif test -z "$slirp" ; then
6398 slirp=no
6399 else
6400 feature_not_found "slirp" "Install slirp devel or git submodule"
6401 fi
6402 ;;
6403
6404 system)
6405 if ! $pkg_config slirp; then
6406 feature_not_found "slirp" "Install slirp devel"
6407 fi
6408 ;;
6409esac
6410
6411case "$slirp" in
6412 git | internal)
6413 if test "$slirp" = git; then
6414 git_submodules="${git_submodules} slirp"
6415 fi
6416 mkdir -p slirp
6417 slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src"
6418 slirp_libs="-L$PWD/slirp -lslirp"
6419 if test "$mingw32" = "yes" ; then
6420 slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6421 fi
6422 ;;
6423
6424 system)
6425 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6426 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6427 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6428 ;;
6429
6430 no)
6431 ;;
6432 *)
6433 error_exit "Unknown state for slirp: $slirp"
6434 ;;
6435esac
6436
6437##########################################
6438# check for usable __NR_keyctl syscall
6439
6440if test "$linux" = "yes" ; then
6441
6442 have_keyring=no
6443 cat > $TMPC << EOF
6444#include <errno.h>
6445#include <asm/unistd.h>
6446#include <linux/keyctl.h>
6447#include <unistd.h>
6448int main(void) {
6449 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
6450}
6451EOF
6452 if compile_prog "" "" ; then
6453 have_keyring=yes
6454 fi
6455fi
6456if test "$secret_keyring" != "no"
6457then
6458 if test "$have_keyring" = "yes"
6459 then
6460 secret_keyring=yes
6461 else
6462 if test "$secret_keyring" = "yes"
6463 then
6464 error_exit "syscall __NR_keyctl requested, \
6465but not implemented on your system"
6466 else
6467 secret_keyring=no
6468 fi
6469 fi
6470fi
6471
6472##########################################
6473# check for usable keyutils.h
6474
6475if test "$linux" = "yes" ; then
6476
6477 have_keyutils=no
6478 cat > $TMPC << EOF
6479#include <errno.h>
6480#include <asm/unistd.h>
6481#include <unistd.h>
6482#include <sys/types.h>
6483#include <keyutils.h>
6484int main(void) {
6485 return request_key("user", NULL, NULL, 0);
6486}
6487EOF
6488 if compile_prog "" "-lkeyutils"; then
6489 have_keyutils=yes
6490 fi
6491fi
6492
6493
6494##########################################
6495# End of CC checks
6496# After here, no more $cc or $ld runs
6497
6498write_c_skeleton
6499
6500if test "$gcov" = "yes" ; then
6501 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS"
6502 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS"
6503elif test "$fortify_source" = "yes" ; then
6504 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
6505 debug=no
6506fi
6507if test "$debug" = "no"; then
6508 CFLAGS="-O2 $CFLAGS"
6509fi
6510if test "$debug_info" = "yes"; then
6511 CFLAGS="-g $CFLAGS"
6512 LDFLAGS="-g $LDFLAGS"
6513fi
6514
6515case "$ARCH" in
6516alpha)
6517 # Ensure there's only a single GP
6518 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
6519;;
6520esac
6521
6522if test "$gprof" = "yes" ; then
6523 QEMU_CFLAGS="-p $QEMU_CFLAGS"
6524 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
6525fi
6526
6527if test "$have_asan" = "yes"; then
6528 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6529 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
6530 if test "$have_asan_iface_h" = "no" ; then
6531 echo "ASAN build enabled, but ASAN header missing." \
6532 "Without code annotation, the report may be inferior."
6533 elif test "$have_asan_iface_fiber" = "no" ; then
6534 echo "ASAN build enabled, but ASAN header is too old." \
6535 "Without code annotation, the report may be inferior."
6536 fi
6537fi
6538if test "$have_tsan" = "yes" ; then
6539 if test "$have_tsan_iface_fiber" = "yes" ; then
6540 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
6541 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
6542 else
6543 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
6544 fi
6545elif test "$tsan" = "yes" ; then
6546 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
6547fi
6548if test "$have_ubsan" = "yes"; then
6549 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6550 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
6551fi
6552
6553##########################################
6554# Do we have libnfs
6555if test "$libnfs" != "no" ; then
6556 if $pkg_config --atleast-version=1.9.3 libnfs; then
6557 libnfs="yes"
6558 libnfs_libs=$($pkg_config --libs libnfs)
6559 else
6560 if test "$libnfs" = "yes" ; then
6561 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6562 fi
6563 libnfs="no"
6564 fi
6565fi
6566
6567##########################################
6568# Do we have libudev
6569if test "$libudev" != "no" ; then
6570 if $pkg_config libudev && test "$static" != "yes"; then
6571 libudev="yes"
6572 libudev_libs=$($pkg_config --libs libudev)
6573 else
6574 libudev="no"
6575 fi
6576fi
6577
6578# Now we've finished running tests it's OK to add -Werror to the compiler flags
6579if test "$werror" = "yes"; then
6580 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6581fi
6582
6583# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
6584if test "$solaris" = "no" && test "$tsan" = "no"; then
6585 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6586 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
6587 fi
6588fi
6589
6590# test if pod2man has --utf8 option
6591if pod2man --help | grep -q utf8; then
6592 POD2MAN="pod2man --utf8"
6593else
6594 POD2MAN="pod2man"
6595fi
6596
6597# Use ASLR, no-SEH and DEP if available
6598if test "$mingw32" = "yes" ; then
6599 for flag in --dynamicbase --no-seh --nxcompat; do
6600 if ld_has $flag ; then
6601 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
6602 fi
6603 done
6604fi
6605
6606# Disable OpenBSD W^X if available
6607if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6608 cat > $TMPC <<EOF
6609 int main(void) { return 0; }
6610EOF
6611 wx_ldflags="-Wl,-z,wxneeded"
6612 if compile_prog "" "$wx_ldflags"; then
6613 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6614 fi
6615fi
6616
6617qemu_confdir=$sysconfdir$confsuffix
6618qemu_moddir=$libdir$confsuffix
6619qemu_datadir=$datadir$confsuffix
6620qemu_localedir="$datadir/locale"
6621qemu_icondir="$datadir/icons"
6622qemu_desktopdir="$datadir/applications"
6623
6624# We can only support ivshmem if we have eventfd
6625if [ "$eventfd" = "yes" ]; then
6626 ivshmem=yes
6627fi
6628
6629tools=""
6630if test "$want_tools" = "yes" ; then
6631 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
6632 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6633 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools"
6634 fi
6635 if [ "$ivshmem" = "yes" ]; then
6636 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
6637 fi
6638 if [ "$curl" = "yes" ]; then
6639 tools="elf2dmp\$(EXESUF) $tools"
6640 fi
6641fi
6642if test "$softmmu" = yes ; then
6643 if test "$linux" = yes; then
6644 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
6645 virtfs=yes
6646 helpers="$helpers fsdev/virtfs-proxy-helper\$(EXESUF)"
6647 else
6648 if test "$virtfs" = yes; then
6649 error_exit "VirtFS requires libcap-ng devel and libattr devel"
6650 fi
6651 virtfs=no
6652 fi
6653 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6654 mpath=yes
6655 else
6656 if test "$mpath" = yes; then
6657 error_exit "Multipath requires libmpathpersist devel"
6658 fi
6659 mpath=no
6660 fi
6661 helpers="$helpers scsi/qemu-pr-helper\$(EXESUF)"
6662 else
6663 if test "$virtfs" = yes; then
6664 error_exit "VirtFS is supported only on Linux"
6665 fi
6666 virtfs=no
6667 if test "$mpath" = yes; then
6668 error_exit "Multipath is supported only on Linux"
6669 fi
6670 mpath=no
6671 fi
6672 if test "$xkbcommon" = "yes"; then
6673 tools="qemu-keymap\$(EXESUF) $tools"
6674 fi
6675fi
6676
6677# Probe for guest agent support/options
6678
6679if [ "$guest_agent" != "no" ]; then
6680 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6681 guest_agent=no
6682 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6683 tools="qemu-ga\$(EXESUF) $tools"
6684 guest_agent=yes
6685 elif [ "$guest_agent" != yes ]; then
6686 guest_agent=no
6687 else
6688 error_exit "Guest agent is not supported on this platform"
6689 fi
6690fi
6691
6692# Guest agent Window MSI package
6693
6694if test "$guest_agent" != yes; then
6695 if test "$guest_agent_msi" = yes; then
6696 error_exit "MSI guest agent package requires guest agent enabled"
6697 fi
6698 guest_agent_msi=no
6699elif test "$mingw32" != "yes"; then
6700 if test "$guest_agent_msi" = "yes"; then
6701 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6702 fi
6703 guest_agent_msi=no
6704elif ! has wixl; then
6705 if test "$guest_agent_msi" = "yes"; then
6706 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6707 fi
6708 guest_agent_msi=no
6709else
6710 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6711 # disabled explicitly
6712 if test "$guest_agent_msi" != "no"; then
6713 guest_agent_msi=yes
6714 fi
6715fi
6716
6717if test "$guest_agent_msi" = "yes"; then
6718 if test "$guest_agent_with_vss" = "yes"; then
6719 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6720 fi
6721
6722 if test "$QEMU_GA_MANUFACTURER" = ""; then
6723 QEMU_GA_MANUFACTURER=QEMU
6724 fi
6725
6726 if test "$QEMU_GA_DISTRO" = ""; then
6727 QEMU_GA_DISTRO=Linux
6728 fi
6729
6730 if test "$QEMU_GA_VERSION" = ""; then
6731 QEMU_GA_VERSION=$(cat $source_path/VERSION)
6732 fi
6733
6734 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6735
6736 case "$cpu" in
6737 x86_64)
6738 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6739 ;;
6740 i386)
6741 QEMU_GA_MSI_ARCH="-D Arch=32"
6742 ;;
6743 *)
6744 error_exit "CPU $cpu not supported for building installation package"
6745 ;;
6746 esac
6747fi
6748
6749# Mac OS X ships with a broken assembler
6750roms=
6751if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6752 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6753 test "$softmmu" = yes ; then
6754 # Different host OS linkers have different ideas about the name of the ELF
6755 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6756 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6757 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6758 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6759 ld_i386_emulation="$emu"
6760 roms="optionrom"
6761 break
6762 fi
6763 done
6764fi
6765
6766# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6767if test "$cpu" = "s390x" ; then
6768 write_c_skeleton
6769 if compile_prog "-march=z900" ""; then
6770 roms="$roms s390-ccw"
6771 # SLOF is required for building the s390-ccw firmware on s390x,
6772 # since it is using the libnet code from SLOF for network booting.
6773 if test -e "${source_path}/.git" ; then
6774 git_submodules="${git_submodules} roms/SLOF"
6775 fi
6776 fi
6777fi
6778
6779# Check that the C++ compiler exists and works with the C compiler.
6780# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6781if has $cxx; then
6782 cat > $TMPC <<EOF
6783int c_function(void);
6784int main(void) { return c_function(); }
6785EOF
6786
6787 compile_object
6788
6789 cat > $TMPCXX <<EOF
6790extern "C" {
6791 int c_function(void);
6792}
6793int c_function(void) { return 42; }
6794EOF
6795
6796 update_cxxflags
6797
6798 if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
6799 # C++ compiler $cxx works ok with C compiler $cc
6800 :
6801 else
6802 echo "C++ compiler $cxx does not work with C compiler $cc"
6803 echo "Disabling C++ specific optional code"
6804 cxx=
6805 fi
6806else
6807 echo "No C++ compiler available; disabling C++ specific optional code"
6808 cxx=
6809fi
6810
6811echo_version() {
6812 if test "$1" = "yes" ; then
6813 echo "($2)"
6814 fi
6815}
6816
6817# prepend pixman and ftd flags after all config tests are done
6818QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6819QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6820libs_softmmu="$pixman_libs $libs_softmmu"
6821
6822echo "Install prefix $prefix"
6823echo "BIOS directory $(eval echo $qemu_datadir)"
6824echo "firmware path $(eval echo $firmwarepath)"
6825echo "binary directory $(eval echo $bindir)"
6826echo "library directory $(eval echo $libdir)"
6827echo "module directory $(eval echo $qemu_moddir)"
6828echo "libexec directory $(eval echo $libexecdir)"
6829echo "include directory $(eval echo $includedir)"
6830echo "config directory $(eval echo $sysconfdir)"
6831if test "$mingw32" = "no" ; then
6832echo "local state directory $(eval echo $local_statedir)"
6833echo "Manual directory $(eval echo $mandir)"
6834echo "ELF interp prefix $interp_prefix"
6835else
6836echo "local state directory queried at runtime"
6837echo "Windows SDK $win_sdk"
6838fi
6839echo "Build directory $(pwd)"
6840echo "Source path $source_path"
6841echo "GIT binary $git"
6842echo "GIT submodules $git_submodules"
6843echo "C compiler $cc"
6844echo "Host C compiler $host_cc"
6845echo "C++ compiler $cxx"
6846echo "Objective-C compiler $objcc"
6847echo "ARFLAGS $ARFLAGS"
6848echo "CFLAGS $CFLAGS"
6849echo "QEMU_CFLAGS $QEMU_CFLAGS"
6850echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
6851echo "make $make"
6852echo "install $install"
6853echo "python $python ($python_version)"
6854if test "$docs" != "no"; then
6855 echo "sphinx-build $sphinx_build"
6856fi
6857echo "genisoimage $genisoimage"
6858echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6859if test "$slirp" != "no" ; then
6860 echo "smbd $smbd"
6861fi
6862echo "module support $modules"
6863echo "alt path mod load $module_upgrades"
6864echo "host CPU $cpu"
6865echo "host big endian $bigendian"
6866echo "target list $target_list"
6867echo "gprof enabled $gprof"
6868echo "sparse enabled $sparse"
6869echo "strip binaries $strip_opt"
6870echo "profiler $profiler"
6871echo "static build $static"
6872echo "safe stack $safe_stack"
6873if test "$darwin" = "yes" ; then
6874 echo "Cocoa support $cocoa"
6875fi
6876echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6877echo "SDL image support $sdl_image"
6878echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
6879echo "GTK GL support $gtk_gl"
6880echo "VTE support $vte $(echo_version $vte $vteversion)"
6881echo "TLS priority $tls_priority"
6882echo "GNUTLS support $gnutls"
6883echo "libgcrypt $gcrypt"
6884if test "$gcrypt" = "yes"
6885then
6886 echo " hmac $gcrypt_hmac"
6887 echo " XTS $gcrypt_xts"
6888fi
6889echo "nettle $nettle $(echo_version $nettle $nettle_version)"
6890if test "$nettle" = "yes"
6891then
6892 echo " XTS $nettle_xts"
6893fi
6894echo "libtasn1 $tasn1"
6895echo "PAM $auth_pam"
6896echo "iconv support $iconv"
6897echo "curses support $curses"
6898echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6899echo "curl support $curl"
6900echo "mingw32 support $mingw32"
6901echo "Audio drivers $audio_drv_list"
6902echo "Block whitelist (rw) $block_drv_rw_whitelist"
6903echo "Block whitelist (ro) $block_drv_ro_whitelist"
6904echo "VirtFS support $virtfs"
6905echo "Multipath support $mpath"
6906echo "VNC support $vnc"
6907if test "$vnc" = "yes" ; then
6908 echo "VNC SASL support $vnc_sasl"
6909 echo "VNC JPEG support $vnc_jpeg"
6910 echo "VNC PNG support $vnc_png"
6911fi
6912echo "xen support $xen"
6913if test "$xen" = "yes" ; then
6914 echo "xen ctrl version $xen_ctrl_version"
6915fi
6916echo "brlapi support $brlapi"
6917echo "Documentation $docs"
6918echo "PIE $pie"
6919echo "vde support $vde"
6920echo "netmap support $netmap"
6921echo "Linux AIO support $linux_aio"
6922echo "Linux io_uring support $linux_io_uring"
6923echo "ATTR/XATTR support $attr"
6924echo "Install blobs $blobs"
6925echo "KVM support $kvm"
6926echo "HAX support $hax"
6927echo "HVF support $hvf"
6928echo "WHPX support $whpx"
6929echo "TCG support $tcg"
6930if test "$tcg" = "yes" ; then
6931 echo "TCG debug enabled $debug_tcg"
6932 echo "TCG interpreter $tcg_interpreter"
6933fi
6934echo "malloc trim support $malloc_trim"
6935echo "RDMA support $rdma"
6936echo "PVRDMA support $pvrdma"
6937echo "fdt support $fdt"
6938echo "membarrier $membarrier"
6939echo "preadv support $preadv"
6940echo "fdatasync $fdatasync"
6941echo "madvise $madvise"
6942echo "posix_madvise $posix_madvise"
6943echo "posix_memalign $posix_memalign"
6944echo "libcap-ng support $cap_ng"
6945echo "vhost-net support $vhost_net"
6946echo "vhost-crypto support $vhost_crypto"
6947echo "vhost-scsi support $vhost_scsi"
6948echo "vhost-vsock support $vhost_vsock"
6949echo "vhost-user support $vhost_user"
6950echo "vhost-user-fs support $vhost_user_fs"
6951echo "vhost-vdpa support $vhost_vdpa"
6952echo "Trace backends $trace_backends"
6953if have_backend "simple"; then
6954echo "Trace output file $trace_file-<pid>"
6955fi
6956echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6957echo "rbd support $rbd"
6958echo "xfsctl support $xfs"
6959echo "smartcard support $smartcard"
6960echo "libusb $libusb"
6961echo "usb net redir $usb_redir"
6962echo "OpenGL support $opengl"
6963echo "OpenGL dmabufs $opengl_dmabuf"
6964echo "libiscsi support $libiscsi"
6965echo "libnfs support $libnfs"
6966echo "build guest agent $guest_agent"
6967echo "QGA VSS support $guest_agent_with_vss"
6968echo "QGA w32 disk info $guest_agent_ntddscsi"
6969echo "QGA MSI support $guest_agent_msi"
6970echo "seccomp support $seccomp"
6971echo "coroutine backend $coroutine"
6972echo "coroutine pool $coroutine_pool"
6973echo "debug stack usage $debug_stack_usage"
6974echo "mutex debugging $debug_mutex"
6975echo "crypto afalg $crypto_afalg"
6976echo "GlusterFS support $glusterfs"
6977echo "gcov $gcov_tool"
6978echo "gcov enabled $gcov"
6979echo "TPM support $tpm"
6980echo "libssh support $libssh"
6981echo "QOM debugging $qom_cast_debug"
6982echo "Live block migration $live_block_migration"
6983echo "lzo support $lzo"
6984echo "snappy support $snappy"
6985echo "bzip2 support $bzip2"
6986echo "lzfse support $lzfse"
6987echo "zstd support $zstd"
6988echo "NUMA host support $numa"
6989echo "libxml2 $libxml2"
6990echo "tcmalloc support $tcmalloc"
6991echo "jemalloc support $jemalloc"
6992echo "avx2 optimization $avx2_opt"
6993echo "avx512f optimization $avx512f_opt"
6994echo "replication support $replication"
6995echo "bochs support $bochs"
6996echo "cloop support $cloop"
6997echo "dmg support $dmg"
6998echo "qcow v1 support $qcow1"
6999echo "vdi support $vdi"
7000echo "vvfat support $vvfat"
7001echo "qed support $qed"
7002echo "parallels support $parallels"
7003echo "sheepdog support $sheepdog"
7004echo "capstone $capstone"
7005echo "libpmem support $libpmem"
7006echo "libdaxctl support $libdaxctl"
7007echo "libudev $libudev"
7008echo "default devices $default_devices"
7009echo "plugin support $plugins"
7010echo "fuzzing support $fuzzing"
7011echo "gdb $gdb_bin"
7012echo "rng-none $rng_none"
7013echo "Linux keyring $secret_keyring"
7014
7015if test "$supported_cpu" = "no"; then
7016 echo
7017 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
7018 echo
7019 echo "CPU host architecture $cpu support is not currently maintained."
7020 echo "The QEMU project intends to remove support for this host CPU in"
7021 echo "a future release if nobody volunteers to maintain it and to"
7022 echo "provide a build host for our continuous integration setup."
7023 echo "configure has succeeded and you can continue to build, but"
7024 echo "if you care about QEMU on this platform you should contact"
7025 echo "us upstream at qemu-devel@nongnu.org."
7026fi
7027
7028if test "$supported_os" = "no"; then
7029 echo
7030 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
7031 echo
7032 echo "Host OS $targetos support is not currently maintained."
7033 echo "The QEMU project intends to remove support for this host OS in"
7034 echo "a future release if nobody volunteers to maintain it and to"
7035 echo "provide a build host for our continuous integration setup."
7036 echo "configure has succeeded and you can continue to build, but"
7037 echo "if you care about QEMU on this platform you should contact"
7038 echo "us upstream at qemu-devel@nongnu.org."
7039fi
7040
7041config_host_mak="config-host.mak"
7042
7043echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
7044
7045echo "# Automatically generated by configure - do not modify" > $config_host_mak
7046echo >> $config_host_mak
7047
7048echo all: >> $config_host_mak
7049echo "prefix=$prefix" >> $config_host_mak
7050echo "bindir=$bindir" >> $config_host_mak
7051echo "libdir=$libdir" >> $config_host_mak
7052echo "libexecdir=$libexecdir" >> $config_host_mak
7053echo "includedir=$includedir" >> $config_host_mak
7054echo "mandir=$mandir" >> $config_host_mak
7055echo "sysconfdir=$sysconfdir" >> $config_host_mak
7056echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
7057echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
7058echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
7059echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
7060echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
7061if test "$mingw32" = "no" ; then
7062 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
7063fi
7064echo "qemu_helperdir=$libexecdir" >> $config_host_mak
7065echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
7066echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
7067echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
7068echo "libs_cpu=$libs_cpu" >> $config_host_mak
7069echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
7070echo "GIT=$git" >> $config_host_mak
7071echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
7072echo "GIT_UPDATE=$git_update" >> $config_host_mak
7073
7074echo "ARCH=$ARCH" >> $config_host_mak
7075
7076echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
7077echo "GLIB_LDFLAGS=$glib_ldflags" >> $config_host_mak
7078
7079if test "$default_devices" = "yes" ; then
7080 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
7081else
7082 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
7083fi
7084if test "$debug_tcg" = "yes" ; then
7085 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
7086fi
7087if test "$strip_opt" = "yes" ; then
7088 echo "STRIP=${strip}" >> $config_host_mak
7089fi
7090if test "$bigendian" = "yes" ; then
7091 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
7092fi
7093if test "$mingw32" = "yes" ; then
7094 echo "CONFIG_WIN32=y" >> $config_host_mak
7095 rc_version=$(cat $source_path/VERSION)
7096 version_major=${rc_version%%.*}
7097 rc_version=${rc_version#*.}
7098 version_minor=${rc_version%%.*}
7099 rc_version=${rc_version#*.}
7100 version_subminor=${rc_version%%.*}
7101 version_micro=0
7102 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
7103 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
7104 if test "$guest_agent_with_vss" = "yes" ; then
7105 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
7106 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
7107 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
7108 fi
7109 if test "$guest_agent_ntddscsi" = "yes" ; then
7110 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
7111 fi
7112 if test "$guest_agent_msi" = "yes"; then
7113 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
7114 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
7115 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
7116 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
7117 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
7118 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
7119 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
7120 fi
7121else
7122 echo "CONFIG_POSIX=y" >> $config_host_mak
7123fi
7124
7125if test "$linux" = "yes" ; then
7126 echo "CONFIG_LINUX=y" >> $config_host_mak
7127fi
7128
7129if test "$darwin" = "yes" ; then
7130 echo "CONFIG_DARWIN=y" >> $config_host_mak
7131fi
7132
7133if test "$solaris" = "yes" ; then
7134 echo "CONFIG_SOLARIS=y" >> $config_host_mak
7135fi
7136if test "$haiku" = "yes" ; then
7137 echo "CONFIG_HAIKU=y" >> $config_host_mak
7138fi
7139if test "$static" = "yes" ; then
7140 echo "CONFIG_STATIC=y" >> $config_host_mak
7141fi
7142if test "$profiler" = "yes" ; then
7143 echo "CONFIG_PROFILER=y" >> $config_host_mak
7144fi
7145if test "$want_tools" = "yes" ; then
7146 echo "CONFIG_TOOLS=y" >> $config_host_mak
7147fi
7148if test "$slirp" != "no"; then
7149 echo "CONFIG_SLIRP=y" >> $config_host_mak
7150 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
7151 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
7152 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
7153fi
7154if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
7155 echo "config-host.h: slirp/all" >> $config_host_mak
7156fi
7157if test "$vde" = "yes" ; then
7158 echo "CONFIG_VDE=y" >> $config_host_mak
7159 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
7160fi
7161if test "$netmap" = "yes" ; then
7162 echo "CONFIG_NETMAP=y" >> $config_host_mak
7163fi
7164if test "$l2tpv3" = "yes" ; then
7165 echo "CONFIG_L2TPV3=y" >> $config_host_mak
7166fi
7167if test "$gprof" = "yes" ; then
7168 echo "CONFIG_GPROF=y" >> $config_host_mak
7169fi
7170if test "$cap_ng" = "yes" ; then
7171 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
7172fi
7173echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
7174for drv in $audio_drv_list; do
7175 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
7176 case "$drv" in
7177 alsa | oss | pa | sdl)
7178 echo "$def=m" >> $config_host_mak ;;
7179 *)
7180 echo "$def=y" >> $config_host_mak ;;
7181 esac
7182done
7183echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
7184echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
7185echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
7186echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
7187echo "OSS_LIBS=$oss_libs" >> $config_host_mak
7188echo "JACK_LIBS=$jack_libs" >> $config_host_mak
7189if test "$audio_win_int" = "yes" ; then
7190 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
7191fi
7192echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
7193echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
7194if test "$vnc" = "yes" ; then
7195 echo "CONFIG_VNC=y" >> $config_host_mak
7196fi
7197if test "$vnc_sasl" = "yes" ; then
7198 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
7199fi
7200if test "$vnc_jpeg" = "yes" ; then
7201 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
7202fi
7203if test "$vnc_png" = "yes" ; then
7204 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
7205fi
7206if test "$xkbcommon" = "yes" ; then
7207 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
7208 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
7209fi
7210if test "$xfs" = "yes" ; then
7211 echo "CONFIG_XFS=y" >> $config_host_mak
7212fi
7213qemu_version=$(head $source_path/VERSION)
7214echo "VERSION=$qemu_version" >>$config_host_mak
7215echo "PKGVERSION=$pkgversion" >>$config_host_mak
7216echo "SRC_PATH=$source_path" >> $config_host_mak
7217echo "TARGET_DIRS=$target_list" >> $config_host_mak
7218if [ "$docs" = "yes" ] ; then
7219 echo "BUILD_DOCS=yes" >> $config_host_mak
7220fi
7221if test "$modules" = "yes"; then
7222 # $shacmd can generate a hash started with digit, which the compiler doesn't
7223 # like as an symbol. So prefix it with an underscore
7224 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
7225 echo "CONFIG_MODULES=y" >> $config_host_mak
7226fi
7227if test "$module_upgrades" = "yes"; then
7228 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
7229fi
7230if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
7231 echo "CONFIG_X11=y" >> $config_host_mak
7232 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
7233 echo "X11_LIBS=$x11_libs" >> $config_host_mak
7234fi
7235if test "$sdl" = "yes" ; then
7236 echo "CONFIG_SDL=m" >> $config_host_mak
7237 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
7238 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
7239 if test "$sdl_image" = "yes" ; then
7240 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
7241 fi
7242fi
7243if test "$cocoa" = "yes" ; then
7244 echo "CONFIG_COCOA=y" >> $config_host_mak
7245fi
7246if test "$iconv" = "yes" ; then
7247 echo "CONFIG_ICONV=y" >> $config_host_mak
7248 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7249 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7250fi
7251if test "$curses" = "yes" ; then
7252 echo "CONFIG_CURSES=m" >> $config_host_mak
7253 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
7254 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
7255fi
7256if test "$pipe2" = "yes" ; then
7257 echo "CONFIG_PIPE2=y" >> $config_host_mak
7258fi
7259if test "$accept4" = "yes" ; then
7260 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7261fi
7262if test "$splice" = "yes" ; then
7263 echo "CONFIG_SPLICE=y" >> $config_host_mak
7264fi
7265if test "$eventfd" = "yes" ; then
7266 echo "CONFIG_EVENTFD=y" >> $config_host_mak
7267fi
7268if test "$memfd" = "yes" ; then
7269 echo "CONFIG_MEMFD=y" >> $config_host_mak
7270fi
7271if test "$have_usbfs" = "yes" ; then
7272 echo "CONFIG_USBFS=y" >> $config_host_mak
7273fi
7274if test "$fallocate" = "yes" ; then
7275 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7276fi
7277if test "$fallocate_punch_hole" = "yes" ; then
7278 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7279fi
7280if test "$fallocate_zero_range" = "yes" ; then
7281 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7282fi
7283if test "$posix_fallocate" = "yes" ; then
7284 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7285fi
7286if test "$sync_file_range" = "yes" ; then
7287 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7288fi
7289if test "$fiemap" = "yes" ; then
7290 echo "CONFIG_FIEMAP=y" >> $config_host_mak
7291fi
7292if test "$dup3" = "yes" ; then
7293 echo "CONFIG_DUP3=y" >> $config_host_mak
7294fi
7295if test "$ppoll" = "yes" ; then
7296 echo "CONFIG_PPOLL=y" >> $config_host_mak
7297fi
7298if test "$prctl_pr_set_timerslack" = "yes" ; then
7299 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7300fi
7301if test "$epoll" = "yes" ; then
7302 echo "CONFIG_EPOLL=y" >> $config_host_mak
7303fi
7304if test "$epoll_create1" = "yes" ; then
7305 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7306fi
7307if test "$sendfile" = "yes" ; then
7308 echo "CONFIG_SENDFILE=y" >> $config_host_mak
7309fi
7310if test "$timerfd" = "yes" ; then
7311 echo "CONFIG_TIMERFD=y" >> $config_host_mak
7312fi
7313if test "$setns" = "yes" ; then
7314 echo "CONFIG_SETNS=y" >> $config_host_mak
7315fi
7316if test "$clock_adjtime" = "yes" ; then
7317 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7318fi
7319if test "$syncfs" = "yes" ; then
7320 echo "CONFIG_SYNCFS=y" >> $config_host_mak
7321fi
7322if test "$kcov" = "yes" ; then
7323 echo "CONFIG_KCOV=y" >> $config_host_mak
7324fi
7325if test "$inotify" = "yes" ; then
7326 echo "CONFIG_INOTIFY=y" >> $config_host_mak
7327fi
7328if test "$inotify1" = "yes" ; then
7329 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7330fi
7331if test "$sem_timedwait" = "yes" ; then
7332 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7333fi
7334if test "$strchrnul" = "yes" ; then
7335 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7336fi
7337if test "$st_atim" = "yes" ; then
7338 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7339fi
7340if test "$byteswap_h" = "yes" ; then
7341 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7342fi
7343if test "$bswap_h" = "yes" ; then
7344 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7345fi
7346if test "$curl" = "yes" ; then
7347 echo "CONFIG_CURL=m" >> $config_host_mak
7348 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
7349 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
7350fi
7351if test "$brlapi" = "yes" ; then
7352 echo "CONFIG_BRLAPI=y" >> $config_host_mak
7353 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
7354fi
7355if test "$gtk" = "yes" ; then
7356 echo "CONFIG_GTK=m" >> $config_host_mak
7357 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
7358 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
7359 if test "$gtk_gl" = "yes" ; then
7360 echo "CONFIG_GTK_GL=y" >> $config_host_mak
7361 fi
7362fi
7363if test "$gio" = "yes" ; then
7364 echo "CONFIG_GIO=y" >> $config_host_mak
7365 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7366 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
7367 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
7368fi
7369echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
7370if test "$gnutls" = "yes" ; then
7371 echo "CONFIG_GNUTLS=y" >> $config_host_mak
7372fi
7373if test "$gcrypt" = "yes" ; then
7374 echo "CONFIG_GCRYPT=y" >> $config_host_mak
7375 if test "$gcrypt_hmac" = "yes" ; then
7376 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7377 fi
7378fi
7379if test "$nettle" = "yes" ; then
7380 echo "CONFIG_NETTLE=y" >> $config_host_mak
7381 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
7382fi
7383if test "$qemu_private_xts" = "yes" ; then
7384 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7385fi
7386if test "$tasn1" = "yes" ; then
7387 echo "CONFIG_TASN1=y" >> $config_host_mak
7388fi
7389if test "$auth_pam" = "yes" ; then
7390 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7391fi
7392if test "$have_ifaddrs_h" = "yes" ; then
7393 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7394fi
7395if test "$have_drm_h" = "yes" ; then
7396 echo "HAVE_DRM_H=y" >> $config_host_mak
7397fi
7398if test "$have_broken_size_max" = "yes" ; then
7399 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7400fi
7401if test "$have_openpty" = "yes" ; then
7402 echo "HAVE_OPENPTY=y" >> $config_host_mak
7403fi
7404if test "$have_sys_signal_h" = "yes" ; then
7405 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
7406fi
7407
7408# Work around a system header bug with some kernel/XFS header
7409# versions where they both try to define 'struct fsxattr':
7410# xfs headers will not try to redefine structs from linux headers
7411# if this macro is set.
7412if test "$have_fsxattr" = "yes" ; then
7413 echo "HAVE_FSXATTR=y" >> $config_host_mak
7414fi
7415if test "$have_copy_file_range" = "yes" ; then
7416 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7417fi
7418if test "$vte" = "yes" ; then
7419 echo "CONFIG_VTE=y" >> $config_host_mak
7420 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
7421 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
7422fi
7423if test "$virglrenderer" = "yes" ; then
7424 echo "CONFIG_VIRGL=y" >> $config_host_mak
7425 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7426 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7427fi
7428if test "$xen" = "yes" ; then
7429 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
7430 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
7431fi
7432if test "$linux_aio" = "yes" ; then
7433 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7434fi
7435if test "$linux_io_uring" = "yes" ; then
7436 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7437 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7438 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7439fi
7440if test "$attr" = "yes" ; then
7441 echo "CONFIG_ATTR=y" >> $config_host_mak
7442fi
7443if test "$libattr" = "yes" ; then
7444 echo "CONFIG_LIBATTR=y" >> $config_host_mak
7445fi
7446if test "$virtfs" = "yes" ; then
7447 echo "CONFIG_VIRTFS=y" >> $config_host_mak
7448fi
7449if test "$mpath" = "yes" ; then
7450 echo "CONFIG_MPATH=y" >> $config_host_mak
7451 if test "$mpathpersist_new_api" = "yes"; then
7452 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7453 fi
7454fi
7455if test "$vhost_scsi" = "yes" ; then
7456 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7457fi
7458if test "$vhost_net" = "yes" ; then
7459 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7460fi
7461if test "$vhost_net_user" = "yes" ; then
7462 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
7463fi
7464if test "$vhost_net_vdpa" = "yes" ; then
7465 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
7466fi
7467if test "$vhost_crypto" = "yes" ; then
7468 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7469fi
7470if test "$vhost_vsock" = "yes" ; then
7471 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7472 if test "$vhost_user" = "yes" ; then
7473 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
7474 fi
7475fi
7476if test "$vhost_kernel" = "yes" ; then
7477 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7478fi
7479if test "$vhost_user" = "yes" ; then
7480 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7481fi
7482if test "$vhost_vdpa" = "yes" ; then
7483 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
7484fi
7485if test "$vhost_user_fs" = "yes" ; then
7486 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7487fi
7488if test "$blobs" = "yes" ; then
7489 echo "INSTALL_BLOBS=yes" >> $config_host_mak
7490fi
7491if test "$iovec" = "yes" ; then
7492 echo "CONFIG_IOVEC=y" >> $config_host_mak
7493fi
7494if test "$preadv" = "yes" ; then
7495 echo "CONFIG_PREADV=y" >> $config_host_mak
7496fi
7497if test "$fdt" != "no" ; then
7498 echo "CONFIG_FDT=y" >> $config_host_mak
7499fi
7500if test "$membarrier" = "yes" ; then
7501 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7502fi
7503if test "$signalfd" = "yes" ; then
7504 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7505fi
7506if test "$optreset" = "yes" ; then
7507 echo "HAVE_OPTRESET=y" >> $config_host_mak
7508fi
7509if test "$tcg" = "yes"; then
7510 echo "CONFIG_TCG=y" >> $config_host_mak
7511 if test "$tcg_interpreter" = "yes" ; then
7512 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7513 fi
7514fi
7515if test "$fdatasync" = "yes" ; then
7516 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7517fi
7518if test "$madvise" = "yes" ; then
7519 echo "CONFIG_MADVISE=y" >> $config_host_mak
7520fi
7521if test "$posix_madvise" = "yes" ; then
7522 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7523fi
7524if test "$posix_memalign" = "yes" ; then
7525 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7526fi
7527
7528if test "$spice" = "yes" ; then
7529 echo "CONFIG_SPICE=y" >> $config_host_mak
7530fi
7531
7532if test "$smartcard" = "yes" ; then
7533 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7534 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7535 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
7536fi
7537
7538if test "$libusb" = "yes" ; then
7539 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7540 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7541 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
7542fi
7543
7544if test "$usb_redir" = "yes" ; then
7545 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7546 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7547 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
7548fi
7549
7550if test "$opengl" = "yes" ; then
7551 echo "CONFIG_OPENGL=y" >> $config_host_mak
7552 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7553 if test "$opengl_dmabuf" = "yes" ; then
7554 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7555 fi
7556fi
7557
7558if test "$gbm" = "yes" ; then
7559 echo "CONFIG_GBM=y" >> $config_host_mak
7560 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7561 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7562fi
7563
7564
7565if test "$malloc_trim" = "yes" ; then
7566 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7567fi
7568
7569if test "$avx2_opt" = "yes" ; then
7570 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7571fi
7572
7573if test "$avx512f_opt" = "yes" ; then
7574 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7575fi
7576
7577if test "$lzo" = "yes" ; then
7578 echo "CONFIG_LZO=y" >> $config_host_mak
7579fi
7580
7581if test "$snappy" = "yes" ; then
7582 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7583fi
7584
7585if test "$bzip2" = "yes" ; then
7586 echo "CONFIG_BZIP2=y" >> $config_host_mak
7587 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7588fi
7589
7590if test "$lzfse" = "yes" ; then
7591 echo "CONFIG_LZFSE=y" >> $config_host_mak
7592 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7593fi
7594
7595if test "$zstd" = "yes" ; then
7596 echo "CONFIG_ZSTD=y" >> $config_host_mak
7597fi
7598
7599if test "$libiscsi" = "yes" ; then
7600 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
7601 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7602 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7603fi
7604
7605if test "$libnfs" = "yes" ; then
7606 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7607 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7608fi
7609
7610if test "$seccomp" = "yes"; then
7611 echo "CONFIG_SECCOMP=y" >> $config_host_mak
7612 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7613 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7614fi
7615
7616# XXX: suppress that
7617if [ "$bsd" = "yes" ] ; then
7618 echo "CONFIG_BSD=y" >> $config_host_mak
7619fi
7620
7621if test "$localtime_r" = "yes" ; then
7622 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7623fi
7624if test "$qom_cast_debug" = "yes" ; then
7625 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7626fi
7627if test "$rbd" = "yes" ; then
7628 echo "CONFIG_RBD=m" >> $config_host_mak
7629 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7630 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7631fi
7632
7633echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7634if test "$coroutine_pool" = "yes" ; then
7635 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7636else
7637 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7638fi
7639
7640if test "$debug_stack_usage" = "yes" ; then
7641 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7642fi
7643
7644if test "$crypto_afalg" = "yes" ; then
7645 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7646fi
7647
7648if test "$open_by_handle_at" = "yes" ; then
7649 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7650fi
7651
7652if test "$linux_magic_h" = "yes" ; then
7653 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7654fi
7655
7656if test "$valgrind_h" = "yes" ; then
7657 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7658fi
7659
7660if test "$have_asan_iface_fiber" = "yes" ; then
7661 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7662fi
7663
7664if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
7665 echo "CONFIG_TSAN=y" >> $config_host_mak
7666fi
7667
7668if test "$has_environ" = "yes" ; then
7669 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7670fi
7671
7672if test "$cpuid_h" = "yes" ; then
7673 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7674fi
7675
7676if test "$int128" = "yes" ; then
7677 echo "CONFIG_INT128=y" >> $config_host_mak
7678fi
7679
7680if test "$atomic128" = "yes" ; then
7681 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7682fi
7683
7684if test "$cmpxchg128" = "yes" ; then
7685 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7686fi
7687
7688if test "$atomic64" = "yes" ; then
7689 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7690fi
7691
7692if test "$attralias" = "yes" ; then
7693 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7694fi
7695
7696if test "$getauxval" = "yes" ; then
7697 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7698fi
7699
7700if test "$glusterfs" = "yes" ; then
7701 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7702 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7703 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7704fi
7705
7706if test "$glusterfs_xlator_opt" = "yes" ; then
7707 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7708fi
7709
7710if test "$glusterfs_discard" = "yes" ; then
7711 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7712fi
7713
7714if test "$glusterfs_fallocate" = "yes" ; then
7715 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7716fi
7717
7718if test "$glusterfs_zerofill" = "yes" ; then
7719 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7720fi
7721
7722if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7723 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7724fi
7725
7726if test "$glusterfs_iocb_has_stat" = "yes" ; then
7727 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7728fi
7729
7730if test "$libssh" = "yes" ; then
7731 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7732 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7733 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7734fi
7735
7736if test "$live_block_migration" = "yes" ; then
7737 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7738fi
7739
7740if test "$tpm" = "yes"; then
7741 echo 'CONFIG_TPM=y' >> $config_host_mak
7742fi
7743
7744echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7745if have_backend "nop"; then
7746 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7747fi
7748if have_backend "simple"; then
7749 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7750 # Set the appropriate trace file.
7751 trace_file="\"$trace_file-\" FMT_pid"
7752fi
7753if have_backend "log"; then
7754 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7755fi
7756if have_backend "ust"; then
7757 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7758fi
7759if have_backend "dtrace"; then
7760 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7761 if test "$trace_backend_stap" = "yes" ; then
7762 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7763 fi
7764fi
7765if have_backend "ftrace"; then
7766 if test "$linux" = "yes" ; then
7767 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7768 else
7769 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7770 fi
7771fi
7772if have_backend "syslog"; then
7773 if test "$posix_syslog" = "yes" ; then
7774 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7775 else
7776 feature_not_found "syslog(trace backend)" "syslog not available"
7777 fi
7778fi
7779echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7780
7781if test "$rdma" = "yes" ; then
7782 echo "CONFIG_RDMA=y" >> $config_host_mak
7783 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7784fi
7785
7786if test "$pvrdma" = "yes" ; then
7787 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7788fi
7789
7790if test "$have_rtnetlink" = "yes" ; then
7791 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7792fi
7793
7794if test "$libxml2" = "yes" ; then
7795 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7796 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7797 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7798fi
7799
7800if test "$replication" = "yes" ; then
7801 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7802fi
7803
7804if test "$have_af_vsock" = "yes" ; then
7805 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7806fi
7807
7808if test "$have_sysmacros" = "yes" ; then
7809 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7810fi
7811
7812if test "$have_static_assert" = "yes" ; then
7813 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7814fi
7815
7816if test "$have_utmpx" = "yes" ; then
7817 echo "HAVE_UTMPX=y" >> $config_host_mak
7818fi
7819if test "$have_getrandom" = "yes" ; then
7820 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7821fi
7822if test "$ivshmem" = "yes" ; then
7823 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7824fi
7825if test "$capstone" != "no" ; then
7826 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7827fi
7828if test "$debug_mutex" = "yes" ; then
7829 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7830fi
7831
7832# Hold two types of flag:
7833# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7834# a thread we have a handle to
7835# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7836# platform
7837if test "$pthread_setname_np_w_tid" = "yes" ; then
7838 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7839 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7840elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7841 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7842 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7843fi
7844
7845if test "$libpmem" = "yes" ; then
7846 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7847fi
7848
7849if test "$libdaxctl" = "yes" ; then
7850 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
7851fi
7852
7853if test "$bochs" = "yes" ; then
7854 echo "CONFIG_BOCHS=y" >> $config_host_mak
7855fi
7856if test "$cloop" = "yes" ; then
7857 echo "CONFIG_CLOOP=y" >> $config_host_mak
7858fi
7859if test "$dmg" = "yes" ; then
7860 echo "CONFIG_DMG=y" >> $config_host_mak
7861fi
7862if test "$qcow1" = "yes" ; then
7863 echo "CONFIG_QCOW1=y" >> $config_host_mak
7864fi
7865if test "$vdi" = "yes" ; then
7866 echo "CONFIG_VDI=y" >> $config_host_mak
7867fi
7868if test "$vvfat" = "yes" ; then
7869 echo "CONFIG_VVFAT=y" >> $config_host_mak
7870fi
7871if test "$qed" = "yes" ; then
7872 echo "CONFIG_QED=y" >> $config_host_mak
7873fi
7874if test "$parallels" = "yes" ; then
7875 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7876fi
7877if test "$sheepdog" = "yes" ; then
7878 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7879fi
7880if test "$pty_h" = "yes" ; then
7881 echo "HAVE_PTY_H=y" >> $config_host_mak
7882fi
7883if test "$have_mlockall" = "yes" ; then
7884 echo "HAVE_MLOCKALL=y" >> $config_host_mak
7885fi
7886if test "$fuzzing" = "yes" ; then
7887 if test "$have_fuzzer" = "yes"; then
7888 FUZZ_LDFLAGS=" -fsanitize=fuzzer"
7889 FUZZ_CFLAGS=" -fsanitize=fuzzer"
7890 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
7891 else
7892 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
7893 exit 1
7894 fi
7895fi
7896
7897if test "$plugins" = "yes" ; then
7898 echo "CONFIG_PLUGIN=y" >> $config_host_mak
7899 LIBS="-ldl $LIBS"
7900 # Copy the export object list to the build dir
7901 if test "$ld_dynamic_list" = "yes" ; then
7902 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7903 ld_symbols=qemu-plugins-ld.symbols
7904 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7905 elif test "$ld_exported_symbols_list" = "yes" ; then
7906 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7907 ld64_symbols=qemu-plugins-ld64.symbols
7908 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7909 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7910 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7911 else
7912 error_exit \
7913 "If \$plugins=yes, either \$ld_dynamic_list or " \
7914 "\$ld_exported_symbols_list should have been set to 'yes'."
7915 fi
7916fi
7917
7918if test -n "$gdb_bin" ; then
7919 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7920fi
7921
7922if test "$secret_keyring" = "yes" ; then
7923 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
7924 if test "$have_keyutils" = "yes" ; then
7925 echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak
7926 fi
7927fi
7928
7929if test "$tcg_interpreter" = "yes"; then
7930 QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES"
7931elif test "$ARCH" = "sparc64" ; then
7932 QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES"
7933elif test "$ARCH" = "s390x" ; then
7934 QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES"
7935elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7936 QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES"
7937elif test "$ARCH" = "ppc64" ; then
7938 QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES"
7939elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7940 QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES"
7941else
7942 QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES"
7943fi
7944
7945echo "HELPERS=$helpers" >> $config_host_mak
7946echo "TOOLS=$tools" >> $config_host_mak
7947echo "ROMS=$roms" >> $config_host_mak
7948echo "MAKE=$make" >> $config_host_mak
7949echo "INSTALL=$install" >> $config_host_mak
7950echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7951echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7952echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7953echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7954echo "PYTHON=$python" >> $config_host_mak
7955echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
7956echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak
7957echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
7958echo "CC=$cc" >> $config_host_mak
7959if $iasl -h > /dev/null 2>&1; then
7960 echo "IASL=$iasl" >> $config_host_mak
7961fi
7962echo "HOST_CC=$host_cc" >> $config_host_mak
7963echo "CXX=$cxx" >> $config_host_mak
7964echo "OBJCC=$objcc" >> $config_host_mak
7965echo "AR=$ar" >> $config_host_mak
7966echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7967echo "AS=$as" >> $config_host_mak
7968echo "CCAS=$ccas" >> $config_host_mak
7969echo "CPP=$cpp" >> $config_host_mak
7970echo "OBJCOPY=$objcopy" >> $config_host_mak
7971echo "LD=$ld" >> $config_host_mak
7972echo "RANLIB=$ranlib" >> $config_host_mak
7973echo "NM=$nm" >> $config_host_mak
7974echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7975echo "WINDRES=$windres" >> $config_host_mak
7976echo "CFLAGS=$CFLAGS" >> $config_host_mak
7977echo "CXXFLAGS=$CXXFLAGS" >> $config_host_mak
7978echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7979echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7980echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7981echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7982if test "$sparse" = "yes" ; then
7983 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
7984 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
7985 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
7986 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7987 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7988fi
7989echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7990echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7991echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7992echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7993echo "LIBS+=$LIBS" >> $config_host_mak
7994echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7995echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7996echo "EXESUF=$EXESUF" >> $config_host_mak
7997echo "DSOSUF=$DSOSUF" >> $config_host_mak
7998echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7999echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
8000echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
8001echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
8002echo "POD2MAN=$POD2MAN" >> $config_host_mak
8003if test "$gcov" = "yes" ; then
8004 echo "CONFIG_GCOV=y" >> $config_host_mak
8005 echo "GCOV=$gcov_tool" >> $config_host_mak
8006fi
8007
8008if test "$libudev" != "no"; then
8009 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
8010 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
8011fi
8012if test "$fuzzing" != "no"; then
8013 echo "CONFIG_FUZZ=y" >> $config_host_mak
8014 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
8015 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
8016fi
8017
8018if test "$edk2_blobs" = "yes" ; then
8019 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
8020fi
8021
8022if test "$rng_none" = "yes"; then
8023 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
8024fi
8025
8026# use included Linux headers
8027if test "$linux" = "yes" ; then
8028 mkdir -p linux-headers
8029 case "$cpu" in
8030 i386|x86_64|x32)
8031 linux_arch=x86
8032 ;;
8033 ppc|ppc64|ppc64le)
8034 linux_arch=powerpc
8035 ;;
8036 s390x)
8037 linux_arch=s390
8038 ;;
8039 aarch64)
8040 linux_arch=arm64
8041 ;;
8042 mips64)
8043 linux_arch=mips
8044 ;;
8045 *)
8046 # For most CPUs the kernel architecture name and QEMU CPU name match.
8047 linux_arch="$cpu"
8048 ;;
8049 esac
8050 # For non-KVM architectures we will not have asm headers
8051 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
8052 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
8053 fi
8054fi
8055
8056for target in $target_list; do
8057target_dir="$target"
8058config_target_mak=$target_dir/config-target.mak
8059target_name=$(echo $target | cut -d '-' -f 1)
8060target_aligned_only="no"
8061case "$target_name" in
8062 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
8063 target_aligned_only="yes"
8064 ;;
8065esac
8066target_bigendian="no"
8067case "$target_name" in
8068 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
8069 target_bigendian="yes"
8070 ;;
8071esac
8072target_softmmu="no"
8073target_user_only="no"
8074target_linux_user="no"
8075target_bsd_user="no"
8076case "$target" in
8077 ${target_name}-softmmu)
8078 target_softmmu="yes"
8079 ;;
8080 ${target_name}-linux-user)
8081 target_user_only="yes"
8082 target_linux_user="yes"
8083 ;;
8084 ${target_name}-bsd-user)
8085 target_user_only="yes"
8086 target_bsd_user="yes"
8087 ;;
8088 *)
8089 error_exit "Target '$target' not recognised"
8090 exit 1
8091 ;;
8092esac
8093
8094mkdir -p $target_dir
8095echo "# Automatically generated by configure - do not modify" > $config_target_mak
8096
8097bflt="no"
8098mttcg="no"
8099interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
8100gdb_xml_files=""
8101
8102TARGET_ARCH="$target_name"
8103TARGET_BASE_ARCH=""
8104TARGET_ABI_DIR=""
8105
8106case "$target_name" in
8107 i386)
8108 mttcg="yes"
8109 gdb_xml_files="i386-32bit.xml"
8110 TARGET_SYSTBL_ABI=i386
8111 ;;
8112 x86_64)
8113 TARGET_BASE_ARCH=i386
8114 TARGET_SYSTBL_ABI=common,64
8115 mttcg="yes"
8116 gdb_xml_files="i386-64bit.xml"
8117 ;;
8118 alpha)
8119 mttcg="yes"
8120 TARGET_SYSTBL_ABI=common
8121 ;;
8122 arm|armeb)
8123 TARGET_ARCH=arm
8124 TARGET_SYSTBL_ABI=common,oabi
8125 bflt="yes"
8126 mttcg="yes"
8127 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
8128 ;;
8129 aarch64|aarch64_be)
8130 TARGET_ARCH=aarch64
8131 TARGET_BASE_ARCH=arm
8132 bflt="yes"
8133 mttcg="yes"
8134 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
8135 ;;
8136 avr)
8137 gdb_xml_files="avr-cpu.xml"
8138 target_compiler=$cross_cc_avr
8139 ;;
8140 cris)
8141 ;;
8142 hppa)
8143 mttcg="yes"
8144 TARGET_SYSTBL_ABI=common,32
8145 ;;
8146 lm32)
8147 ;;
8148 m68k)
8149 bflt="yes"
8150 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
8151 TARGET_SYSTBL_ABI=common
8152 ;;
8153 microblaze|microblazeel)
8154 TARGET_ARCH=microblaze
8155 TARGET_SYSTBL_ABI=common
8156 bflt="yes"
8157 echo "TARGET_ABI32=y" >> $config_target_mak
8158 ;;
8159 mips|mipsel)
8160 mttcg="yes"
8161 TARGET_ARCH=mips
8162 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
8163 TARGET_SYSTBL_ABI=o32
8164 ;;
8165 mipsn32|mipsn32el)
8166 mttcg="yes"
8167 TARGET_ARCH=mips64
8168 TARGET_BASE_ARCH=mips
8169 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
8170 echo "TARGET_ABI32=y" >> $config_target_mak
8171 TARGET_SYSTBL_ABI=n32
8172 ;;
8173 mips64|mips64el)
8174 mttcg="no"
8175 TARGET_ARCH=mips64
8176 TARGET_BASE_ARCH=mips
8177 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
8178 TARGET_SYSTBL_ABI=n64
8179 ;;
8180 moxie)
8181 ;;
8182 nios2)
8183 ;;
8184 or1k)
8185 TARGET_ARCH=openrisc
8186 TARGET_BASE_ARCH=openrisc
8187 ;;
8188 ppc)
8189 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
8190 TARGET_SYSTBL_ABI=common,nospu,32
8191 ;;
8192 ppc64)
8193 TARGET_BASE_ARCH=ppc
8194 TARGET_ABI_DIR=ppc
8195 TARGET_SYSTBL_ABI=common,nospu,64
8196 mttcg=yes
8197 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8198 ;;
8199 ppc64le)
8200 TARGET_ARCH=ppc64
8201 TARGET_BASE_ARCH=ppc
8202 TARGET_ABI_DIR=ppc
8203 TARGET_SYSTBL_ABI=common,nospu,64
8204 mttcg=yes
8205 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8206 ;;
8207 ppc64abi32)
8208 TARGET_ARCH=ppc64
8209 TARGET_BASE_ARCH=ppc
8210 TARGET_ABI_DIR=ppc
8211 TARGET_SYSTBL_ABI=common,nospu,32
8212 echo "TARGET_ABI32=y" >> $config_target_mak
8213 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8214 ;;
8215 riscv32)
8216 TARGET_BASE_ARCH=riscv
8217 TARGET_ABI_DIR=riscv
8218 mttcg=yes
8219 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
8220 ;;
8221 riscv64)
8222 TARGET_BASE_ARCH=riscv
8223 TARGET_ABI_DIR=riscv
8224 mttcg=yes
8225 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
8226 ;;
8227 rx)
8228 TARGET_ARCH=rx
8229 bflt="yes"
8230 target_compiler=$cross_cc_rx
8231 gdb_xml_files="rx-core.xml"
8232 ;;
8233 sh4|sh4eb)
8234 TARGET_ARCH=sh4
8235 TARGET_SYSTBL_ABI=common
8236 bflt="yes"
8237 ;;
8238 sparc)
8239 TARGET_SYSTBL_ABI=common,32
8240 ;;
8241 sparc64)
8242 TARGET_BASE_ARCH=sparc
8243 TARGET_SYSTBL_ABI=common,64
8244 ;;
8245 sparc32plus)
8246 TARGET_ARCH=sparc64
8247 TARGET_BASE_ARCH=sparc
8248 TARGET_ABI_DIR=sparc
8249 TARGET_SYSTBL_ABI=common,32
8250 echo "TARGET_ABI32=y" >> $config_target_mak
8251 ;;
8252 s390x)
8253 TARGET_SYSTBL_ABI=common,64
8254 mttcg=yes
8255 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
8256 ;;
8257 tilegx)
8258 ;;
8259 tricore)
8260 ;;
8261 unicore32)
8262 ;;
8263 xtensa|xtensaeb)
8264 TARGET_ARCH=xtensa
8265 TARGET_SYSTBL_ABI=common
8266 bflt="yes"
8267 mttcg="yes"
8268 ;;
8269 *)
8270 error_exit "Unsupported target CPU"
8271 ;;
8272esac
8273# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
8274if [ "$TARGET_BASE_ARCH" = "" ]; then
8275 TARGET_BASE_ARCH=$TARGET_ARCH
8276fi
8277
8278symlink "$source_path/Makefile.target" "$target_dir/Makefile"
8279
8280upper() {
8281 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
8282}
8283
8284target_arch_name="$(upper $TARGET_ARCH)"
8285echo "TARGET_$target_arch_name=y" >> $config_target_mak
8286echo "TARGET_NAME=$target_name" >> $config_target_mak
8287echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
8288if [ "$TARGET_ABI_DIR" = "" ]; then
8289 TARGET_ABI_DIR=$TARGET_ARCH
8290fi
8291echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
8292if [ "$HOST_VARIANT_DIR" != "" ]; then
8293 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
8294fi
8295if [ "$TARGET_SYSTBL_ABI" != "" ]; then
8296 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
8297fi
8298
8299if supported_xen_target $target; then
8300 echo "CONFIG_XEN=y" >> $config_target_mak
8301 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
8302 if test "$xen_pci_passthrough" = yes; then
8303 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
8304 fi
8305else
8306 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
8307fi
8308if supported_kvm_target $target; then
8309 echo "CONFIG_KVM=y" >> $config_target_mak
8310 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
8311else
8312 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
8313fi
8314if supported_hax_target $target; then
8315 echo "CONFIG_HAX=y" >> $config_target_mak
8316fi
8317if supported_hvf_target $target; then
8318 echo "CONFIG_HVF=y" >> $config_target_mak
8319fi
8320if supported_whpx_target $target; then
8321 echo "CONFIG_WHPX=y" >> $config_target_mak
8322fi
8323if test "$target_aligned_only" = "yes" ; then
8324 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8325fi
8326if test "$target_bigendian" = "yes" ; then
8327 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
8328fi
8329if test "$target_softmmu" = "yes" ; then
8330 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
8331 if test "$mttcg" = "yes" ; then
8332 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8333 fi
8334fi
8335if test "$target_user_only" = "yes" ; then
8336 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
8337 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
8338fi
8339if test "$target_linux_user" = "yes" ; then
8340 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
8341fi
8342list=""
8343if test ! -z "$gdb_xml_files" ; then
8344 for x in $gdb_xml_files; do
8345 list="$list $source_path/gdb-xml/$x"
8346 done
8347 echo "TARGET_XML_FILES=$list" >> $config_target_mak
8348fi
8349
8350if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
8351 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
8352fi
8353if test "$target_bsd_user" = "yes" ; then
8354 echo "CONFIG_BSD_USER=y" >> $config_target_mak
8355fi
8356
8357
8358# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
8359
8360cflags=""
8361ldflags=""
8362
8363disas_config() {
8364 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8365 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8366}
8367
8368for i in $ARCH $TARGET_BASE_ARCH ; do
8369 case "$i" in
8370 alpha)
8371 disas_config "ALPHA"
8372 ;;
8373 aarch64)
8374 if test -n "${cxx}"; then
8375 disas_config "ARM_A64"
8376 fi
8377 ;;
8378 arm)
8379 disas_config "ARM"
8380 if test -n "${cxx}"; then
8381 disas_config "ARM_A64"
8382 fi
8383 ;;
8384 avr)
8385 disas_config "AVR"
8386 ;;
8387 cris)
8388 disas_config "CRIS"
8389 ;;
8390 hppa)
8391 disas_config "HPPA"
8392 ;;
8393 i386|x86_64|x32)
8394 disas_config "I386"
8395 ;;
8396 lm32)
8397 disas_config "LM32"
8398 ;;
8399 m68k)
8400 disas_config "M68K"
8401 ;;
8402 microblaze*)
8403 disas_config "MICROBLAZE"
8404 ;;
8405 mips*)
8406 disas_config "MIPS"
8407 if test -n "${cxx}"; then
8408 disas_config "NANOMIPS"
8409 fi
8410 ;;
8411 moxie*)
8412 disas_config "MOXIE"
8413 ;;
8414 nios2)
8415 disas_config "NIOS2"
8416 ;;
8417 or1k)
8418 disas_config "OPENRISC"
8419 ;;
8420 ppc*)
8421 disas_config "PPC"
8422 ;;
8423 riscv*)
8424 disas_config "RISCV"
8425 ;;
8426 rx)
8427 disas_config "RX"
8428 ;;
8429 s390*)
8430 disas_config "S390"
8431 ;;
8432 sh4)
8433 disas_config "SH4"
8434 ;;
8435 sparc*)
8436 disas_config "SPARC"
8437 ;;
8438 xtensa*)
8439 disas_config "XTENSA"
8440 ;;
8441 esac
8442done
8443if test "$tcg_interpreter" = "yes" ; then
8444 disas_config "TCI"
8445fi
8446
8447# Newer kernels on s390 check for an S390_PGSTE program header and
8448# enable the pgste page table extensions in that case. This makes
8449# the vm.allocate_pgste sysctl unnecessary. We enable this program
8450# header if
8451# - we build on s390x
8452# - we build the system emulation for s390x (qemu-system-s390x)
8453# - KVM is enabled
8454# - the linker supports --s390-pgste
8455if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8456 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
8457 if ld_has --s390-pgste ; then
8458 ldflags="-Wl,--s390-pgste $ldflags"
8459 fi
8460fi
8461
8462echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
8463echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
8464
8465done # for target in $targets
8466
8467echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8468echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8469
8470if [ "$fdt" = "git" ]; then
8471 echo "config-host.h: dtc/all" >> $config_host_mak
8472fi
8473if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
8474 echo "config-host.h: capstone/all" >> $config_host_mak
8475fi
8476if test -n "$LIBCAPSTONE"; then
8477 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8478fi
8479
8480if test "$numa" = "yes"; then
8481 echo "CONFIG_NUMA=y" >> $config_host_mak
8482fi
8483
8484if test "$ccache_cpp2" = "yes"; then
8485 echo "export CCACHE_CPP2=y" >> $config_host_mak
8486fi
8487
8488if test "$safe_stack" = "yes"; then
8489 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
8490fi
8491
8492# If we're using a separate build tree, set it up now.
8493# DIRS are directories which we simply mkdir in the build tree;
8494# LINKS are things to symlink back into the source tree
8495# (these can be both files and directories).
8496# Caution: do not add files or directories here using wildcards. This
8497# will result in problems later if a new file matching the wildcard is
8498# added to the source tree -- nothing will cause configure to be rerun
8499# so the build tree will be missing the link back to the new file, and
8500# tests might fail. Prefer to keep the relevant files in their own
8501# directory and symlink the directory instead.
8502DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8503DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
8504DIRS="$DIRS docs docs/interop fsdev scsi"
8505DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8506DIRS="$DIRS roms/seabios"
8507LINKS="Makefile"
8508LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8509LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
8510LINKS="$LINKS tests/plugin/Makefile"
8511LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
8512LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8513LINKS="$LINKS roms/seabios/Makefile"
8514LINKS="$LINKS pc-bios/qemu-icon.bmp"
8515LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
8516LINKS="$LINKS tests/acceptance tests/data"
8517LINKS="$LINKS tests/qemu-iotests/check"
8518LINKS="$LINKS python"
8519for bios_file in \
8520 $source_path/pc-bios/*.bin \
8521 $source_path/pc-bios/*.lid \
8522 $source_path/pc-bios/*.rom \
8523 $source_path/pc-bios/*.dtb \
8524 $source_path/pc-bios/*.img \
8525 $source_path/pc-bios/openbios-* \
8526 $source_path/pc-bios/u-boot.* \
8527 $source_path/pc-bios/edk2-*.fd.bz2 \
8528 $source_path/pc-bios/palcode-*
8529do
8530 LINKS="$LINKS pc-bios/$(basename $bios_file)"
8531done
8532mkdir -p $DIRS
8533for f in $LINKS ; do
8534 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
8535 symlink "$source_path/$f" "$f"
8536 fi
8537done
8538
8539(for i in $cross_cc_vars; do
8540 export $i
8541done
8542export target_list source_path use_containers
8543$source_path/tests/tcg/configure.sh)
8544
8545# temporary config to build submodules
8546for rom in seabios; do
8547 config_mak=roms/$rom/config.mak
8548 echo "# Automatically generated by configure - do not modify" > $config_mak
8549 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
8550 echo "AS=$as" >> $config_mak
8551 echo "CCAS=$ccas" >> $config_mak
8552 echo "CC=$cc" >> $config_mak
8553 echo "BCC=bcc" >> $config_mak
8554 echo "CPP=$cpp" >> $config_mak
8555 echo "OBJCOPY=objcopy" >> $config_mak
8556 echo "IASL=$iasl" >> $config_mak
8557 echo "LD=$ld" >> $config_mak
8558 echo "RANLIB=$ranlib" >> $config_mak
8559done
8560
8561# set up qemu-iotests in this build directory
8562iotests_common_env="tests/qemu-iotests/common.env"
8563
8564echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8565echo >> "$iotests_common_env"
8566echo "export PYTHON='$python'" >> "$iotests_common_env"
8567
8568# Save the configure command line for later reuse.
8569cat <<EOD >config.status
8570#!/bin/sh
8571# Generated by configure.
8572# Run this file to recreate the current configuration.
8573# Compiler output produced by configure, useful for debugging
8574# configure, is in config.log if it exists.
8575EOD
8576
8577preserve_env() {
8578 envname=$1
8579
8580 eval envval=\$$envname
8581
8582 if test -n "$envval"
8583 then
8584 echo "$envname='$envval'" >> config.status
8585 echo "export $envname" >> config.status
8586 else
8587 echo "unset $envname" >> config.status
8588 fi
8589}
8590
8591# Preserve various env variables that influence what
8592# features/build target configure will detect
8593preserve_env AR
8594preserve_env AS
8595preserve_env CC
8596preserve_env CPP
8597preserve_env CXX
8598preserve_env INSTALL
8599preserve_env LD
8600preserve_env LD_LIBRARY_PATH
8601preserve_env LIBTOOL
8602preserve_env MAKE
8603preserve_env NM
8604preserve_env OBJCOPY
8605preserve_env PATH
8606preserve_env PKG_CONFIG
8607preserve_env PKG_CONFIG_LIBDIR
8608preserve_env PKG_CONFIG_PATH
8609preserve_env PYTHON
8610preserve_env SDL2_CONFIG
8611preserve_env SMBD
8612preserve_env STRIP
8613preserve_env WINDRES
8614
8615printf "exec" >>config.status
8616printf " '%s'" "$0" "$@" >>config.status
8617echo ' "$@"' >>config.status
8618chmod +x config.status
8619
8620rm -r "$TMPDIR1"