]> git.proxmox.com Git - mirror_qemu.git/blame - configure
apic: add function to apic that will be used by hvf
[mirror_qemu.git] / configure
CommitLineData
7d13299d
FB
1#!/bin/sh
2#
3ef693a0 3# qemu configure script (c) 2003 Fabrice Bellard
7d13299d 4#
8cd05ab6 5
99519e67
CH
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
5e4dfd3d
JS
11# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
8cd05ab6
PM
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
7d13299d
FB
25fi
26
8cd05ab6
PM
27TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
66518bf6 29TMPO="${TMPDIR1}/${TMPB}.o"
9c83ffd8 30TMPCXX="${TMPDIR1}/${TMPB}.cxx"
8cd05ab6 31TMPE="${TMPDIR1}/${TMPB}.exe"
6969ec6c 32TMPMO="${TMPDIR1}/${TMPB}.mo"
7d13299d 33
da1d85e3 34rm -f config.log
9ac81bbb 35
b48e3611
PM
36# Print a helpful header at the top of config.log
37echo "# QEMU configure log $(date)" >> config.log
979ae168
PM
38printf "# Configured with:" >> config.log
39printf " '%s'" "$0" "$@" >> config.log
40echo >> config.log
b48e3611
PM
41echo "#" >> config.log
42
d880a3ba
PB
43print_error() {
44 (echo
76ad07a4
PM
45 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
d880a3ba
PB
50 echo) >&2
51}
52
53error_exit() {
54 print_error "$@"
76ad07a4
PM
55 exit 1
56}
57
9c83ffd8
PM
58do_compiler() {
59 # Run the compiler, capturing its output to the log. First argument
60 # is compiler binary to execute.
61 local compiler="$1"
62 shift
63 echo $compiler "$@" >> config.log
64 $compiler "$@" >> config.log 2>&1 || return $?
8dc38a78
PM
65 # Test passed. If this is an --enable-werror build, rerun
66 # the test with -Werror and bail out if it fails. This
67 # makes warning-generating-errors in configure test code
68 # obvious to developers.
69 if test "$werror" != "yes"; then
70 return 0
71 fi
72 # Don't bother rerunning the compile if we were already using -Werror
73 case "$*" in
74 *-Werror*)
75 return 0
76 ;;
77 esac
9c83ffd8
PM
78 echo $compiler -Werror "$@" >> config.log
79 $compiler -Werror "$@" >> config.log 2>&1 && return $?
76ad07a4
PM
80 error_exit "configure test passed without -Werror but failed with -Werror." \
81 "This is probably a bug in the configure script. The failing command" \
82 "will be at the bottom of config.log." \
83 "You can run configure with --disable-werror to bypass this check."
8dc38a78
PM
84}
85
9c83ffd8
PM
86do_cc() {
87 do_compiler "$cc" "$@"
88}
89
90do_cxx() {
91 do_compiler "$cxx" "$@"
92}
93
94update_cxxflags() {
95 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
96 # options which some versions of GCC's C++ compiler complain about
97 # because they only make sense for C programs.
11cde1c8
BD
98 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
99
9c83ffd8
PM
100 for arg in $QEMU_CFLAGS; do
101 case $arg in
102 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
103 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
104 ;;
105 *)
106 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
107 ;;
108 esac
109 done
110}
111
52166aa0 112compile_object() {
fd0e6053
JS
113 local_cflags="$1"
114 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
52166aa0
JQ
115}
116
117compile_prog() {
118 local_cflags="$1"
119 local_ldflags="$2"
8dc38a78 120 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
52166aa0
JQ
121}
122
11568d6d
PB
123# symbolically link $1 to $2. Portable version of "ln -sf".
124symlink() {
72b8b5a1 125 rm -rf "$2"
ec5b06d7 126 mkdir -p "$(dirname "$2")"
72b8b5a1 127 ln -s "$1" "$2"
11568d6d
PB
128}
129
0dba6195
LM
130# check whether a command is available to this shell (may be either an
131# executable or a builtin)
132has() {
133 type "$1" >/dev/null 2>&1
134}
135
136# search for an executable in PATH
137path_of() {
138 local_command="$1"
139 local_ifs="$IFS"
140 local_dir=""
141
142 # pathname has a dir component?
143 if [ "${local_command#*/}" != "$local_command" ]; then
144 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
145 echo "$local_command"
146 return 0
147 fi
148 fi
149 if [ -z "$local_command" ]; then
150 return 1
151 fi
152
153 IFS=:
154 for local_dir in $PATH; do
155 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
156 echo "$local_dir/$local_command"
157 IFS="${local_ifs:-$(printf ' \t\n')}"
158 return 0
159 fi
160 done
161 # not found
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 1
164}
165
5b808275
LV
166have_backend () {
167 echo "$trace_backends" | grep "$1" >/dev/null
168}
169
3b6b7550
PB
170glob() {
171 eval test -z '"${1#'"$2"'}"'
172}
173
174supported_hax_target() {
175 test "$hax" = "yes" || return 1
176 glob "$1" "*-softmmu" || return 1
177 case "${1%-softmmu}" in
178 i386|x86_64)
179 return 0
180 ;;
181 esac
182 return 1
183}
184
185supported_kvm_target() {
186 test "$kvm" = "yes" || return 1
187 glob "$1" "*-softmmu" || return 1
188 case "${1%-softmmu}:$cpu" in
189 arm:arm | aarch64:aarch64 | \
190 i386:i386 | i386:x86_64 | i386:x32 | \
191 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
192 mips:mips | mipsel:mips | \
193 ppc:ppc | ppcemb:ppc | ppc64:ppc | \
194 ppc:ppc64 | ppcemb:ppc64 | ppc64:ppc64 | \
195 s390x:s390x)
196 return 0
197 ;;
198 esac
199 return 1
200}
201
202supported_xen_target() {
203 test "$xen" = "yes" || return 1
204 glob "$1" "*-softmmu" || return 1
b5ed2e11
PB
205 # Only i386 and x86_64 provide the xenpv machine.
206 case "${1%-softmmu}" in
207 i386|x86_64)
3b6b7550
PB
208 return 0
209 ;;
210 esac
211 return 1
212}
213
d880a3ba
PB
214supported_target() {
215 case "$1" in
216 *-softmmu)
217 ;;
218 *-linux-user)
219 if test "$linux" != "yes"; then
220 print_error "Target '$target' is only available on a Linux host"
221 return 1
222 fi
223 ;;
224 *-bsd-user)
225 if test "$bsd" != "yes"; then
226 print_error "Target '$target' is only available on a BSD host"
227 return 1
228 fi
229 ;;
230 *)
231 print_error "Invalid target name '$target'"
232 return 1
233 ;;
234 esac
b3f6ea7e
PB
235 test "$tcg" = "yes" && return 0
236 supported_kvm_target "$1" && return 0
237 supported_xen_target "$1" && return 0
238 supported_hax_target "$1" && return 0
239 print_error "TCG disabled, but hardware accelerator not available for '$target'"
240 return 1
d880a3ba
PB
241}
242
e9a3591f
CB
243
244ld_has() {
245 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
246}
247
7d13299d 248# default parameters
89138857 249source_path=$(dirname "$0")
2ff6b91e 250cpu=""
a31a8642 251iasl="iasl"
1e43adfc 252interp_prefix="/usr/gnemul/qemu-%M"
43ce4dfe 253static="no"
7d13299d 254cross_prefix=""
0c58ac1c 255audio_drv_list=""
b64ec4e4
FZ
256block_drv_rw_whitelist=""
257block_drv_ro_whitelist=""
e49d021e 258host_cc="cc"
73da375e 259libs_softmmu=""
3e2e0e6b 260libs_tools=""
67f86e8e 261audio_pt_int=""
d5631638 262audio_win_int=""
2b2e59e6 263cc_i386=i386-pc-linux-gnu-gcc
957f1f99 264libs_qga=""
5bc62e01 265debug_info="yes"
63678e17 266stack_protector=""
ac0df51d 267
92712822
DB
268if test -e "$source_path/.git"
269then
f62bbee5 270 git_update=yes
92712822
DB
271 git_submodules="ui/keycodemapdb"
272else
f62bbee5 273 git_update=no
92712822
DB
274 git_submodules=""
275fi
cc84d63a 276git="git"
ac0df51d 277
afb63ebd
SW
278# Don't accept a target_list environment variable.
279unset target_list
377529c0
PB
280
281# Default value for a variable defining feature "foo".
282# * foo="no" feature will only be used if --enable-foo arg is given
283# * foo="" feature will be searched for, and if found, will be used
284# unless --disable-foo is given
285# * foo="yes" this value will only be set by --enable-foo flag.
286# feature will searched for,
287# if not found, configure exits with error
288#
289# Always add --enable-foo and --disable-foo command line args.
290# Distributions want to ensure that several features are compiled in, and it
291# is impossible without a --enable-foo that exits if a feature is not found.
292
293bluez=""
294brlapi=""
295curl=""
296curses=""
297docs=""
298fdt=""
58952137 299netmap="no"
377529c0 300sdl=""
ee8466d0 301sdlabi=""
983eef5a 302virtfs=""
fe8fc5ae 303mpath=""
821601ea 304vnc="yes"
377529c0 305sparse="no"
377529c0 306vde=""
377529c0
PB
307vnc_sasl=""
308vnc_jpeg=""
309vnc_png=""
6a021536 310xkbcommon=""
377529c0 311xen=""
d5b93ddf 312xen_ctrl_version=""
64a7ad6f 313xen_pv_domain_build="no"
eb6fda0f 314xen_pci_passthrough=""
377529c0 315linux_aio=""
47e98658 316cap_ng=""
377529c0 317attr=""
4f26f2b6 318libattr=""
377529c0 319xfs=""
b3f6ea7e 320tcg="yes"
377529c0 321
d41a75a2 322vhost_net="no"
5e9be92d 323vhost_scsi="no"
fc0b9b0e 324vhost_vsock="no"
e6a74868 325vhost_user=""
d41a75a2 326kvm="no"
b0cb0a66 327hax="no"
2da776db 328rdma=""
377529c0
PB
329gprof="no"
330debug_tcg="no"
377529c0 331debug="no"
b553a042 332fortify_source=""
377529c0 333strip_opt="yes"
9195b2c2 334tcg_interpreter="no"
377529c0
PB
335bigendian="no"
336mingw32="no"
1d728c39
BS
337gcov="no"
338gcov_tool="gcov"
377529c0 339EXESUF=""
17969268
FZ
340DSOSUF=".so"
341LDFLAGS_SHARED="-shared"
342modules="no"
377529c0
PB
343prefix="/usr/local"
344mandir="\${prefix}/share/man"
528ae5b8 345datadir="\${prefix}/share"
3d5eecab 346firmwarepath="\${prefix}/share/qemu-firmware"
850da188 347qemu_docdir="\${prefix}/share/doc/qemu"
377529c0 348bindir="\${prefix}/bin"
3aa5d2be 349libdir="\${prefix}/lib"
8bf188aa 350libexecdir="\${prefix}/libexec"
0f94d6da 351includedir="\${prefix}/include"
377529c0 352sysconfdir="\${prefix}/etc"
785c23ae 353local_statedir="\${prefix}/var"
377529c0
PB
354confsuffix="/qemu"
355slirp="yes"
377529c0
PB
356oss_lib=""
357bsd="no"
358linux="no"
359solaris="no"
360profiler="no"
361cocoa="no"
362softmmu="yes"
363linux_user="no"
377529c0 364bsd_user="no"
377529c0
PB
365blobs="yes"
366pkgversion=""
40d6444e 367pie=""
3556c233 368qom_cast_debug="yes"
baf86d6b 369trace_backends="log"
377529c0
PB
370trace_file="trace"
371spice=""
372rbd=""
7b02f544 373smartcard=""
2b2325ff 374libusb=""
69354a83 375usb_redir=""
da076ffe 376opengl=""
014cb152 377opengl_dmabuf="no"
5dd89908 378cpuid_h="no"
99f2dbd3 379avx2_opt="no"
1ece9905 380zlib="yes"
8ca80760 381capstone=""
b25c9dff
SW
382lzo=""
383snappy=""
6b383c08 384bzip2=""
e8ef31a3 385guest_agent=""
d9840e25 386guest_agent_with_vss="no"
50cbebb9 387guest_agent_ntddscsi="no"
9dacf32d 388guest_agent_msi=""
d9840e25
TS
389vss_win32_sdk=""
390win_sdk="no"
4b1c11fd 391want_tools="yes"
c589b249 392libiscsi=""
6542aa9c 393libnfs=""
519175a2 394coroutine=""
70c60c08 395coroutine_pool=""
7d992e4d 396debug_stack_usage="no"
f0d92b56 397crypto_afalg="no"
f794573e 398seccomp=""
eb100396 399glusterfs=""
d85fa9eb 400glusterfs_xlator_opt="no"
0c14fb47 401glusterfs_discard="no"
df3a429a 402glusterfs_fallocate="no"
7c815372 403glusterfs_zerofill="no"
a4ccabcf 404gtk=""
9e04c683 405gtkabi=""
925a0400 406gtk_gl="no"
a1c5e949 407tls_priority="NORMAL"
ddbb0d09 408gnutls=""
b917da4c 409gnutls_rnd=""
91bfcdb0 410nettle=""
fff2f982 411nettle_kdf="no"
91bfcdb0 412gcrypt=""
1f923c70 413gcrypt_hmac="no"
37788f25 414gcrypt_kdf="no"
bbbf9bfb 415vte=""
9d9e1521 416virglrenderer=""
e91c793c 417tpm="yes"
0a12ec87 418libssh2=""
ed1701c6 419live_block_migration="yes"
a99d57bb 420numa=""
2847b469 421tcmalloc="no"
7b01cb97 422jemalloc="no"
a6b1d4c0 423replication="yes"
da92c3ff 424vxhs=""
377529c0 425
898be3e0
PM
426supported_cpu="no"
427supported_os="no"
fb59dabd 428bogus_os="no"
5a22ab71 429malloc_trim=""
898be3e0 430
ac0df51d
AL
431# parse CC options first
432for opt do
89138857 433 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
ac0df51d
AL
434 case "$opt" in
435 --cross-prefix=*) cross_prefix="$optarg"
436 ;;
3d8df640 437 --cc=*) CC="$optarg"
ac0df51d 438 ;;
83f73fce
TS
439 --cxx=*) CXX="$optarg"
440 ;;
ca4deeb1
PB
441 --source-path=*) source_path="$optarg"
442 ;;
2ff6b91e
JQ
443 --cpu=*) cpu="$optarg"
444 ;;
de385287 445 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
f9943cd5 446 EXTRA_CFLAGS="$optarg"
e2a2ed06 447 ;;
11cde1c8
BD
448 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
449 EXTRA_CXXFLAGS="$optarg"
450 ;;
a4969e90 451 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
f9943cd5 452 EXTRA_LDFLAGS="$optarg"
e2a2ed06 453 ;;
5bc62e01
GH
454 --enable-debug-info) debug_info="yes"
455 ;;
456 --disable-debug-info) debug_info="no"
457 ;;
ac0df51d
AL
458 esac
459done
ac0df51d
AL
460# OS specific
461# Using uname is really, really broken. Once we have the right set of checks
93148aa5 462# we can eliminate its usage altogether.
ac0df51d 463
e49d021e
PM
464# Preferred compiler:
465# ${CC} (if set)
466# ${cross_prefix}gcc (if cross-prefix specified)
467# system compiler
468if test -z "${CC}${cross_prefix}"; then
469 cc="$host_cc"
470else
471 cc="${CC-${cross_prefix}gcc}"
472fi
473
83f73fce
TS
474if test -z "${CXX}${cross_prefix}"; then
475 cxx="c++"
476else
477 cxx="${CXX-${cross_prefix}g++}"
478fi
479
b3198cc2 480ar="${AR-${cross_prefix}ar}"
cdbd727c 481as="${AS-${cross_prefix}as}"
5f6f0e27 482ccas="${CCAS-$cc}"
3dd46c78 483cpp="${CPP-$cc -E}"
b3198cc2
SY
484objcopy="${OBJCOPY-${cross_prefix}objcopy}"
485ld="${LD-${cross_prefix}ld}"
9f81aeb5 486ranlib="${RANLIB-${cross_prefix}ranlib}"
4852ee95 487nm="${NM-${cross_prefix}nm}"
b3198cc2
SY
488strip="${STRIP-${cross_prefix}strip}"
489windres="${WINDRES-${cross_prefix}windres}"
17884d7b
ST
490pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
491query_pkg_config() {
492 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
493}
494pkg_config=query_pkg_config
b3198cc2 495sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
47c03744 496sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
ac0df51d 497
45d285ab
PM
498# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
499ARFLAGS="${ARFLAGS-rv}"
500
be17dc90 501# default flags for all hosts
2d31515b
PM
502# We use -fwrapv to tell the compiler that we require a C dialect where
503# left shift of signed integers is well defined and has the expected
504# 2s-complement style results. (Both clang and gcc agree that it
505# provides these semantics.)
506QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
f9188227 507QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
c95e3080 508QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
be17dc90 509QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
244f1441 510QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include"
5bc62e01
GH
511if test "$debug_info" = "yes"; then
512 CFLAGS="-g $CFLAGS"
513 LDFLAGS="-g $LDFLAGS"
514fi
be17dc90 515
ca4deeb1 516# make source path absolute
89138857 517source_path=$(cd "$source_path"; pwd)
ca4deeb1 518
cab00a5a
MT
519# running configure in the source tree?
520# we know that's the case if configure is there.
521if test -f "./configure"; then
522 pwd_is_source_path="y"
523else
524 pwd_is_source_path="n"
525fi
526
ac0df51d
AL
527check_define() {
528cat > $TMPC <<EOF
529#if !defined($1)
fd786e1a 530#error $1 not defined
ac0df51d
AL
531#endif
532int main(void) { return 0; }
533EOF
52166aa0 534 compile_object
ac0df51d
AL
535}
536
307119e7
GH
537check_include() {
538cat > $TMPC <<EOF
539#include <$1>
540int main(void) { return 0; }
541EOF
542 compile_object
543}
544
93b25869
JS
545write_c_skeleton() {
546 cat > $TMPC <<EOF
547int main(void) { return 0; }
548EOF
549}
550
bbea4050
PM
551if check_define __linux__ ; then
552 targetos="Linux"
553elif check_define _WIN32 ; then
554 targetos='MINGW32'
555elif check_define __OpenBSD__ ; then
556 targetos='OpenBSD'
557elif check_define __sun__ ; then
558 targetos='SunOS'
559elif check_define __HAIKU__ ; then
560 targetos='Haiku'
951fedfc
PM
561elif check_define __FreeBSD__ ; then
562 targetos='FreeBSD'
563elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
564 targetos='GNU/kFreeBSD'
565elif check_define __DragonFly__ ; then
566 targetos='DragonFly'
567elif check_define __NetBSD__; then
568 targetos='NetBSD'
569elif check_define __APPLE__; then
570 targetos='Darwin'
bbea4050 571else
951fedfc
PM
572 # This is a fatal error, but don't report it yet, because we
573 # might be going to just print the --help text, or it might
574 # be the result of a missing compiler.
575 targetos='bogus'
576 bogus_os='yes'
bbea4050
PM
577fi
578
579# Some host OSes need non-standard checks for which CPU to use.
580# Note that these checks are broken for cross-compilation: if you're
581# cross-compiling to one of these OSes then you'll need to specify
582# the correct CPU with the --cpu option.
583case $targetos in
584Darwin)
585 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
586 # run 64-bit userspace code.
587 # If the user didn't specify a CPU explicitly and the kernel says this is
588 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
589 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
590 cpu="x86_64"
591 fi
592 ;;
593SunOS)
89138857 594 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
bbea4050
PM
595 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
596 cpu="x86_64"
597 fi
598esac
599
2ff6b91e
JQ
600if test ! -z "$cpu" ; then
601 # command line argument
602 :
603elif check_define __i386__ ; then
ac0df51d
AL
604 cpu="i386"
605elif check_define __x86_64__ ; then
c72b26ec
RH
606 if check_define __ILP32__ ; then
607 cpu="x32"
608 else
609 cpu="x86_64"
610 fi
3aa9bd6c 611elif check_define __sparc__ ; then
3aa9bd6c
BS
612 if check_define __arch64__ ; then
613 cpu="sparc64"
614 else
615 cpu="sparc"
616 fi
fdf7ed96 617elif check_define _ARCH_PPC ; then
618 if check_define _ARCH_PPC64 ; then
619 cpu="ppc64"
620 else
621 cpu="ppc"
622 fi
afa05235
AJ
623elif check_define __mips__ ; then
624 cpu="mips"
477ba620
AJ
625elif check_define __ia64__ ; then
626 cpu="ia64"
d66ed0ea
AJ
627elif check_define __s390__ ; then
628 if check_define __s390x__ ; then
629 cpu="s390x"
630 else
631 cpu="s390"
632 fi
21d89f84
PM
633elif check_define __arm__ ; then
634 cpu="arm"
1f080313
CF
635elif check_define __aarch64__ ; then
636 cpu="aarch64"
ac0df51d 637else
89138857 638 cpu=$(uname -m)
ac0df51d
AL
639fi
640
359bc95d
PM
641ARCH=
642# Normalise host CPU name and set ARCH.
643# Note that this case should only have supported host CPUs, not guests.
7d13299d 644case "$cpu" in
6499fd15 645 ppc|ppc64|s390|s390x|sparc64|x32)
898be3e0
PM
646 cpu="$cpu"
647 supported_cpu="yes"
648 ;;
7d13299d 649 i386|i486|i586|i686|i86pc|BePC)
97a847bc 650 cpu="i386"
898be3e0 651 supported_cpu="yes"
7d13299d 652 ;;
aaa5fa14
AJ
653 x86_64|amd64)
654 cpu="x86_64"
898be3e0 655 supported_cpu="yes"
aaa5fa14 656 ;;
21d89f84
PM
657 armv*b|armv*l|arm)
658 cpu="arm"
898be3e0 659 supported_cpu="yes"
7d13299d 660 ;;
1f080313
CF
661 aarch64)
662 cpu="aarch64"
898be3e0 663 supported_cpu="yes"
1f080313 664 ;;
afa05235
AJ
665 mips*)
666 cpu="mips"
898be3e0 667 supported_cpu="yes"
afa05235 668 ;;
3142255c 669 sparc|sun4[cdmuv])
ae228531 670 cpu="sparc"
6499fd15 671 supported_cpu="yes"
ae228531 672 ;;
7d13299d 673 *)
359bc95d
PM
674 # This will result in either an error or falling back to TCI later
675 ARCH=unknown
7d13299d
FB
676 ;;
677esac
359bc95d
PM
678if test -z "$ARCH"; then
679 ARCH="$cpu"
680fi
e2d52ad3 681
7d13299d 682# OS specific
0dbfc675 683
adfc3e91
SS
684# host *BSD for user mode
685HOST_VARIANT_DIR=""
686
7d13299d 687case $targetos in
67b915a5 688MINGW32*)
0dbfc675 689 mingw32="yes"
b0cb0a66 690 hax="yes"
3cec7cc2 691 audio_possible_drivers="dsound sdl"
307119e7
GH
692 if check_include dsound.h; then
693 audio_drv_list="dsound"
694 else
695 audio_drv_list=""
696 fi
898be3e0 697 supported_os="yes"
67b915a5 698;;
5c40d2bd 699GNU/kFreeBSD)
a167ba50 700 bsd="yes"
0dbfc675 701 audio_drv_list="oss"
0bac1111 702 audio_possible_drivers="oss sdl pa"
5c40d2bd 703;;
7d3505c5 704FreeBSD)
0dbfc675 705 bsd="yes"
0db4a067 706 make="${MAKE-gmake}"
0dbfc675 707 audio_drv_list="oss"
0bac1111 708 audio_possible_drivers="oss sdl pa"
f01576f1
JL
709 # needed for kinfo_getvmmap(3) in libutil.h
710 LIBS="-lutil $LIBS"
a7764f15
EM
711 # needed for kinfo_getproc
712 libs_qga="-lutil $libs_qga"
58952137 713 netmap="" # enable netmap autodetect
adfc3e91 714 HOST_VARIANT_DIR="freebsd"
898be3e0 715 supported_os="yes"
7d3505c5 716;;
c5e97233 717DragonFly)
0dbfc675 718 bsd="yes"
0db4a067 719 make="${MAKE-gmake}"
0dbfc675 720 audio_drv_list="oss"
0bac1111 721 audio_possible_drivers="oss sdl pa"
adfc3e91 722 HOST_VARIANT_DIR="dragonfly"
c5e97233 723;;
7d3505c5 724NetBSD)
0dbfc675 725 bsd="yes"
0db4a067 726 make="${MAKE-gmake}"
0dbfc675 727 audio_drv_list="oss"
0bac1111 728 audio_possible_drivers="oss sdl"
0dbfc675 729 oss_lib="-lossaudio"
adfc3e91 730 HOST_VARIANT_DIR="netbsd"
3c2bdbc1 731 supported_os="yes"
7d3505c5
FB
732;;
733OpenBSD)
0dbfc675 734 bsd="yes"
0db4a067 735 make="${MAKE-gmake}"
4f6ab397 736 audio_drv_list="sdl"
0bac1111 737 audio_possible_drivers="sdl"
adfc3e91 738 HOST_VARIANT_DIR="openbsd"
7d3505c5 739;;
83fb7adf 740Darwin)
0dbfc675
JQ
741 bsd="yes"
742 darwin="yes"
b0cb0a66 743 hax="yes"
17969268 744 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
0dbfc675 745 if [ "$cpu" = "x86_64" ] ; then
a558ee17 746 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
0c439cbf 747 LDFLAGS="-arch x86_64 $LDFLAGS"
0dbfc675 748 fi
0dbfc675
JQ
749 cocoa="yes"
750 audio_drv_list="coreaudio"
14382605 751 audio_possible_drivers="coreaudio sdl"
0dbfc675 752 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
7973f21c 753 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
a0b7cf6b
PM
754 # Disable attempts to use ObjectiveC features in os/object.h since they
755 # won't work when we're compiling with gcc as a C compiler.
756 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
adfc3e91 757 HOST_VARIANT_DIR="darwin"
898be3e0 758 supported_os="yes"
83fb7adf 759;;
ec530c81 760SunOS)
0dbfc675 761 solaris="yes"
0db4a067
PB
762 make="${MAKE-gmake}"
763 install="${INSTALL-ginstall}"
e2d8830e 764 smbd="${SMBD-/usr/sfw/sbin/smbd}"
0dbfc675
JQ
765 if test -f /usr/include/sys/soundcard.h ; then
766 audio_drv_list="oss"
767 fi
768 audio_possible_drivers="oss sdl"
d741429a
BS
769# needed for CMSG_ macros in sys/socket.h
770 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
771# needed for TIOCWIN* defines in termios.h
772 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
a558ee17 773 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
560d375f
AF
774 solarisnetlibs="-lsocket -lnsl -lresolv"
775 LIBS="$solarisnetlibs $LIBS"
776 libs_qga="$solarisnetlibs $libs_qga"
86b2bd93 777;;
179cf400
AF
778Haiku)
779 haiku="yes"
780 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
781 LIBS="-lposix_error_mapper -lnetwork $LIBS"
782;;
898be3e0 783Linux)
0dbfc675 784 audio_drv_list="oss"
0bac1111 785 audio_possible_drivers="oss alsa sdl pa"
0dbfc675
JQ
786 linux="yes"
787 linux_user="yes"
af2be207
JK
788 kvm="yes"
789 vhost_net="yes"
5e9be92d 790 vhost_scsi="yes"
fc0b9b0e 791 vhost_vsock="yes"
a585140d 792 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
898be3e0
PM
793 supported_os="yes"
794;;
7d13299d
FB
795esac
796
7d3505c5 797if [ "$bsd" = "yes" ] ; then
b1a550a0 798 if [ "$darwin" != "yes" ] ; then
08de3949 799 bsd_user="yes"
83fb7adf 800 fi
7d3505c5
FB
801fi
802
0db4a067
PB
803: ${make=${MAKE-make}}
804: ${install=${INSTALL-install}}
52510f8b 805: ${python=${PYTHON-python}}
e2d8830e 806: ${smbd=${SMBD-/usr/sbin/smbd}}
0db4a067 807
3c4a4d0d
PM
808# Default objcc to clang if available, otherwise use CC
809if has clang; then
810 objcc=clang
811else
812 objcc="$cc"
813fi
814
3457a3f8 815if test "$mingw32" = "yes" ; then
3457a3f8 816 EXESUF=".exe"
17969268 817 DSOSUF=".dll"
a558ee17 818 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
e94a7936
SW
819 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
820 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
78e9d4ad
SW
821 # MinGW needs -mthreads for TLS and macro _MT.
822 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
f7cf5d5b 823 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
93b25869 824 write_c_skeleton;
f7cf5d5b
SW
825 if compile_prog "" "-liberty" ; then
826 LIBS="-liberty $LIBS"
827 fi
c5ec15ea 828 prefix="c:/Program Files/QEMU"
683035de 829 mandir="\${prefix}"
528ae5b8 830 datadir="\${prefix}"
850da188 831 qemu_docdir="\${prefix}"
683035de
PB
832 bindir="\${prefix}"
833 sysconfdir="\${prefix}"
5a699bbb 834 local_statedir=
683035de 835 confsuffix=""
105fad6b 836 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
3457a3f8
JQ
837fi
838
487fefdb 839werror=""
85aa5189 840
7d13299d 841for opt do
89138857 842 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
7d13299d 843 case "$opt" in
2efc3265
FB
844 --help|-h) show_help=yes
845 ;;
99123e13
MF
846 --version|-V) exec cat $source_path/VERSION
847 ;;
b1a550a0 848 --prefix=*) prefix="$optarg"
7d13299d 849 ;;
b1a550a0 850 --interp-prefix=*) interp_prefix="$optarg"
32ce6337 851 ;;
ca4deeb1 852 --source-path=*)
7d13299d 853 ;;
ac0df51d 854 --cross-prefix=*)
7d13299d 855 ;;
ac0df51d 856 --cc=*)
7d13299d 857 ;;
b1a550a0 858 --host-cc=*) host_cc="$optarg"
83469015 859 ;;
83f73fce
TS
860 --cxx=*)
861 ;;
e007dbec
MT
862 --iasl=*) iasl="$optarg"
863 ;;
3c4a4d0d
PM
864 --objcc=*) objcc="$optarg"
865 ;;
b1a550a0 866 --make=*) make="$optarg"
7d13299d 867 ;;
6a882643
PB
868 --install=*) install="$optarg"
869 ;;
c886edfb
BS
870 --python=*) python="$optarg"
871 ;;
1d728c39
BS
872 --gcov=*) gcov_tool="$optarg"
873 ;;
e2d8830e
BS
874 --smbd=*) smbd="$optarg"
875 ;;
e2a2ed06 876 --extra-cflags=*)
7d13299d 877 ;;
11cde1c8
BD
878 --extra-cxxflags=*)
879 ;;
e2a2ed06 880 --extra-ldflags=*)
7d13299d 881 ;;
5bc62e01
GH
882 --enable-debug-info)
883 ;;
884 --disable-debug-info)
885 ;;
17969268
FZ
886 --enable-modules)
887 modules="yes"
3aa88b31
SH
888 ;;
889 --disable-modules)
890 modules="no"
17969268 891 ;;
2ff6b91e 892 --cpu=*)
7d13299d 893 ;;
b1a550a0 894 --target-list=*) target_list="$optarg"
de83cd02 895 ;;
5b808275
LV
896 --enable-trace-backends=*) trace_backends="$optarg"
897 ;;
898 # XXX: backwards compatibility
899 --enable-trace-backend=*) trace_backends="$optarg"
94a420b1 900 ;;
74242e0f 901 --with-trace-file=*) trace_file="$optarg"
9410b56c 902 ;;
7d13299d
FB
903 --enable-gprof) gprof="yes"
904 ;;
1d728c39
BS
905 --enable-gcov) gcov="yes"
906 ;;
79427693
LM
907 --static)
908 static="yes"
909 LDFLAGS="-static $LDFLAGS"
17884d7b 910 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
43ce4dfe 911 ;;
0b24e75f
PB
912 --mandir=*) mandir="$optarg"
913 ;;
914 --bindir=*) bindir="$optarg"
915 ;;
3aa5d2be
AL
916 --libdir=*) libdir="$optarg"
917 ;;
8bf188aa
MT
918 --libexecdir=*) libexecdir="$optarg"
919 ;;
0f94d6da
AL
920 --includedir=*) includedir="$optarg"
921 ;;
528ae5b8 922 --datadir=*) datadir="$optarg"
0b24e75f 923 ;;
023d3d67
EH
924 --with-confsuffix=*) confsuffix="$optarg"
925 ;;
850da188 926 --docdir=*) qemu_docdir="$optarg"
0b24e75f 927 ;;
ca2fb938 928 --sysconfdir=*) sysconfdir="$optarg"
07381cc1 929 ;;
785c23ae
LC
930 --localstatedir=*) local_statedir="$optarg"
931 ;;
3d5eecab
GH
932 --firmwarepath=*) firmwarepath="$optarg"
933 ;;
785c23ae 934 --sbindir=*|--sharedstatedir=*|\
023ddd74
MF
935 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
936 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
937 # These switches are silently ignored, for compatibility with
938 # autoconf-generated configure scripts. This allows QEMU's
939 # configure to be used by RPM and similar macros that set
940 # lots of directory switches by default.
941 ;;
97a847bc
FB
942 --disable-sdl) sdl="no"
943 ;;
c4198157
JQ
944 --enable-sdl) sdl="yes"
945 ;;
47c03744
DA
946 --with-sdlabi=*) sdlabi="$optarg"
947 ;;
3556c233
PB
948 --disable-qom-cast-debug) qom_cast_debug="no"
949 ;;
950 --enable-qom-cast-debug) qom_cast_debug="yes"
951 ;;
983eef5a
MI
952 --disable-virtfs) virtfs="no"
953 ;;
954 --enable-virtfs) virtfs="yes"
955 ;;
fe8fc5ae
PB
956 --disable-mpath) mpath="no"
957 ;;
958 --enable-mpath) mpath="yes"
959 ;;
821601ea
JS
960 --disable-vnc) vnc="no"
961 ;;
962 --enable-vnc) vnc="yes"
963 ;;
2f6a1ab0
BS
964 --oss-lib=*) oss_lib="$optarg"
965 ;;
0c58ac1c 966 --audio-drv-list=*) audio_drv_list="$optarg"
102a52e4 967 ;;
89138857 968 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
b64ec4e4 969 ;;
89138857 970 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
eb852011 971 ;;
f8393946
AJ
972 --enable-debug-tcg) debug_tcg="yes"
973 ;;
974 --disable-debug-tcg) debug_tcg="no"
975 ;;
f3d08ee6
PB
976 --enable-debug)
977 # Enable debugging options that aren't excessively noisy
978 debug_tcg="yes"
979 debug="yes"
980 strip_opt="no"
b553a042 981 fortify_source="no"
f3d08ee6 982 ;;
03b4fe7d
AL
983 --enable-sparse) sparse="yes"
984 ;;
985 --disable-sparse) sparse="no"
986 ;;
1625af87
AL
987 --disable-strip) strip_opt="no"
988 ;;
2f9606b3
AL
989 --disable-vnc-sasl) vnc_sasl="no"
990 ;;
ea784e3b
JQ
991 --enable-vnc-sasl) vnc_sasl="yes"
992 ;;
2f6f5c7a
CC
993 --disable-vnc-jpeg) vnc_jpeg="no"
994 ;;
995 --enable-vnc-jpeg) vnc_jpeg="yes"
996 ;;
efe556ad
CC
997 --disable-vnc-png) vnc_png="no"
998 ;;
999 --enable-vnc-png) vnc_png="yes"
1000 ;;
443f1376 1001 --disable-slirp) slirp="no"
1d14ffa9 1002 ;;
e0e6c8c0 1003 --disable-vde) vde="no"
8a16d273 1004 ;;
dfb278bd
JQ
1005 --enable-vde) vde="yes"
1006 ;;
58952137
VM
1007 --disable-netmap) netmap="no"
1008 ;;
1009 --enable-netmap) netmap="yes"
1010 ;;
e37630ca
AL
1011 --disable-xen) xen="no"
1012 ;;
fc321b4b
JQ
1013 --enable-xen) xen="yes"
1014 ;;
eb6fda0f
AP
1015 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1016 ;;
1017 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1018 ;;
64a7ad6f
IC
1019 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1020 ;;
1021 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1022 ;;
2e4d9fb1
AJ
1023 --disable-brlapi) brlapi="no"
1024 ;;
4ffcedb6
JQ
1025 --enable-brlapi) brlapi="yes"
1026 ;;
fb599c9a
AZ
1027 --disable-bluez) bluez="no"
1028 ;;
a20a6f46
JQ
1029 --enable-bluez) bluez="yes"
1030 ;;
7ba1e619
AL
1031 --disable-kvm) kvm="no"
1032 ;;
b31a0277
JQ
1033 --enable-kvm) kvm="yes"
1034 ;;
b0cb0a66 1035 --disable-hax) hax="no"
180fb750 1036 ;;
b0cb0a66 1037 --enable-hax) hax="yes"
180fb750 1038 ;;
9195b2c2
SW
1039 --disable-tcg-interpreter) tcg_interpreter="no"
1040 ;;
1041 --enable-tcg-interpreter) tcg_interpreter="yes"
1042 ;;
47e98658
CB
1043 --disable-cap-ng) cap_ng="no"
1044 ;;
1045 --enable-cap-ng) cap_ng="yes"
1046 ;;
b3f6ea7e
PB
1047 --disable-tcg) tcg="no"
1048 ;;
1049 --enable-tcg) tcg="yes"
1050 ;;
5a22ab71
YZ
1051 --disable-malloc-trim) malloc_trim="no"
1052 ;;
1053 --enable-malloc-trim) malloc_trim="yes"
1054 ;;
cd4ec0b4
GH
1055 --disable-spice) spice="no"
1056 ;;
1057 --enable-spice) spice="yes"
1058 ;;
c589b249
RS
1059 --disable-libiscsi) libiscsi="no"
1060 ;;
1061 --enable-libiscsi) libiscsi="yes"
1062 ;;
6542aa9c
PL
1063 --disable-libnfs) libnfs="no"
1064 ;;
1065 --enable-libnfs) libnfs="yes"
1066 ;;
05c2a3e7
FB
1067 --enable-profiler) profiler="yes"
1068 ;;
14821030
PB
1069 --disable-cocoa) cocoa="no"
1070 ;;
c2de5c91 1071 --enable-cocoa)
1072 cocoa="yes" ;
89138857 1073 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1d14ffa9 1074 ;;
cad25d69 1075 --disable-system) softmmu="no"
0a8e90f4 1076 ;;
cad25d69 1077 --enable-system) softmmu="yes"
0a8e90f4 1078 ;;
0953a80f
ZA
1079 --disable-user)
1080 linux_user="no" ;
1081 bsd_user="no" ;
0953a80f
ZA
1082 ;;
1083 --enable-user) ;;
831b7825 1084 --disable-linux-user) linux_user="no"
0a8e90f4 1085 ;;
831b7825
TS
1086 --enable-linux-user) linux_user="yes"
1087 ;;
84778508
BS
1088 --disable-bsd-user) bsd_user="no"
1089 ;;
1090 --enable-bsd-user) bsd_user="yes"
1091 ;;
40d6444e 1092 --enable-pie) pie="yes"
34005a00 1093 ;;
40d6444e 1094 --disable-pie) pie="no"
34005a00 1095 ;;
85aa5189
FB
1096 --enable-werror) werror="yes"
1097 ;;
1098 --disable-werror) werror="no"
1099 ;;
63678e17
SN
1100 --enable-stack-protector) stack_protector="yes"
1101 ;;
1102 --disable-stack-protector) stack_protector="no"
1103 ;;
4d3b6f6e
AZ
1104 --disable-curses) curses="no"
1105 ;;
c584a6d0
JQ
1106 --enable-curses) curses="yes"
1107 ;;
769ce76d
AG
1108 --disable-curl) curl="no"
1109 ;;
788c8196
JQ
1110 --enable-curl) curl="yes"
1111 ;;
2df87df7
JQ
1112 --disable-fdt) fdt="no"
1113 ;;
1114 --enable-fdt) fdt="yes"
1115 ;;
5c6c3a6c
CH
1116 --disable-linux-aio) linux_aio="no"
1117 ;;
1118 --enable-linux-aio) linux_aio="yes"
1119 ;;
758e8e38
VJ
1120 --disable-attr) attr="no"
1121 ;;
1122 --enable-attr) attr="yes"
1123 ;;
77755340
TS
1124 --disable-blobs) blobs="no"
1125 ;;
4a19f1ec
PB
1126 --with-pkgversion=*) pkgversion=" ($optarg)"
1127 ;;
519175a2
AB
1128 --with-coroutine=*) coroutine="$optarg"
1129 ;;
70c60c08
SH
1130 --disable-coroutine-pool) coroutine_pool="no"
1131 ;;
1132 --enable-coroutine-pool) coroutine_pool="yes"
1133 ;;
7d992e4d
PL
1134 --enable-debug-stack-usage) debug_stack_usage="yes"
1135 ;;
f0d92b56
LM
1136 --enable-crypto-afalg) crypto_afalg="yes"
1137 ;;
1138 --disable-crypto-afalg) crypto_afalg="no"
1139 ;;
a25dba17 1140 --disable-docs) docs="no"
70ec5dc0 1141 ;;
a25dba17 1142 --enable-docs) docs="yes"
83a3ab8b 1143 ;;
d5970055
MT
1144 --disable-vhost-net) vhost_net="no"
1145 ;;
1146 --enable-vhost-net) vhost_net="yes"
1147 ;;
5e9be92d
NB
1148 --disable-vhost-scsi) vhost_scsi="no"
1149 ;;
1150 --enable-vhost-scsi) vhost_scsi="yes"
1151 ;;
fc0b9b0e
SH
1152 --disable-vhost-vsock) vhost_vsock="no"
1153 ;;
1154 --enable-vhost-vsock) vhost_vsock="yes"
1155 ;;
da076ffe 1156 --disable-opengl) opengl="no"
20ff075b 1157 ;;
da076ffe 1158 --enable-opengl) opengl="yes"
20ff075b 1159 ;;
f27aaf4b
CB
1160 --disable-rbd) rbd="no"
1161 ;;
1162 --enable-rbd) rbd="yes"
1163 ;;
8c84cf11
ST
1164 --disable-xfsctl) xfs="no"
1165 ;;
1166 --enable-xfsctl) xfs="yes"
1167 ;;
7b02f544 1168 --disable-smartcard) smartcard="no"
111a38b0 1169 ;;
7b02f544 1170 --enable-smartcard) smartcard="yes"
111a38b0 1171 ;;
2b2325ff
GH
1172 --disable-libusb) libusb="no"
1173 ;;
1174 --enable-libusb) libusb="yes"
1175 ;;
69354a83
HG
1176 --disable-usb-redir) usb_redir="no"
1177 ;;
1178 --enable-usb-redir) usb_redir="yes"
1179 ;;
1ece9905
AL
1180 --disable-zlib-test) zlib="no"
1181 ;;
b25c9dff
SW
1182 --disable-lzo) lzo="no"
1183 ;;
607dacd0
QN
1184 --enable-lzo) lzo="yes"
1185 ;;
b25c9dff
SW
1186 --disable-snappy) snappy="no"
1187 ;;
607dacd0
QN
1188 --enable-snappy) snappy="yes"
1189 ;;
6b383c08
PW
1190 --disable-bzip2) bzip2="no"
1191 ;;
1192 --enable-bzip2) bzip2="yes"
1193 ;;
d138cee9
MR
1194 --enable-guest-agent) guest_agent="yes"
1195 ;;
1196 --disable-guest-agent) guest_agent="no"
1197 ;;
9dacf32d
YH
1198 --enable-guest-agent-msi) guest_agent_msi="yes"
1199 ;;
1200 --disable-guest-agent-msi) guest_agent_msi="no"
1201 ;;
d9840e25
TS
1202 --with-vss-sdk) vss_win32_sdk=""
1203 ;;
1204 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1205 ;;
1206 --without-vss-sdk) vss_win32_sdk="no"
1207 ;;
1208 --with-win-sdk) win_sdk=""
1209 ;;
1210 --with-win-sdk=*) win_sdk="$optarg"
1211 ;;
1212 --without-win-sdk) win_sdk="no"
1213 ;;
4b1c11fd
DB
1214 --enable-tools) want_tools="yes"
1215 ;;
1216 --disable-tools) want_tools="no"
1217 ;;
f794573e
EO
1218 --enable-seccomp) seccomp="yes"
1219 ;;
1220 --disable-seccomp) seccomp="no"
1221 ;;
eb100396
BR
1222 --disable-glusterfs) glusterfs="no"
1223 ;;
1224 --enable-glusterfs) glusterfs="yes"
1225 ;;
52b53c04
FZ
1226 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1227 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
583f6e7b 1228 ;;
cb6414df
FZ
1229 --enable-vhdx|--disable-vhdx)
1230 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1231 ;;
315d3184
FZ
1232 --enable-uuid|--disable-uuid)
1233 echo "$0: $opt is obsolete, UUID support is always built" >&2
1234 ;;
a4ccabcf
AL
1235 --disable-gtk) gtk="no"
1236 ;;
1237 --enable-gtk) gtk="yes"
1238 ;;
a1c5e949
DB
1239 --tls-priority=*) tls_priority="$optarg"
1240 ;;
ddbb0d09
DB
1241 --disable-gnutls) gnutls="no"
1242 ;;
1243 --enable-gnutls) gnutls="yes"
1244 ;;
91bfcdb0
DB
1245 --disable-nettle) nettle="no"
1246 ;;
1247 --enable-nettle) nettle="yes"
1248 ;;
1249 --disable-gcrypt) gcrypt="no"
1250 ;;
1251 --enable-gcrypt) gcrypt="yes"
1252 ;;
2da776db
MH
1253 --enable-rdma) rdma="yes"
1254 ;;
1255 --disable-rdma) rdma="no"
1256 ;;
528de90a
DB
1257 --with-gtkabi=*) gtkabi="$optarg"
1258 ;;
bbbf9bfb
SW
1259 --disable-vte) vte="no"
1260 ;;
1261 --enable-vte) vte="yes"
1262 ;;
9d9e1521
GH
1263 --disable-virglrenderer) virglrenderer="no"
1264 ;;
1265 --enable-virglrenderer) virglrenderer="yes"
1266 ;;
e91c793c
CR
1267 --disable-tpm) tpm="no"
1268 ;;
ab214c29
SB
1269 --enable-tpm) tpm="yes"
1270 ;;
0a12ec87
RJ
1271 --disable-libssh2) libssh2="no"
1272 ;;
1273 --enable-libssh2) libssh2="yes"
1274 ;;
ed1701c6
DDAG
1275 --disable-live-block-migration) live_block_migration="no"
1276 ;;
1277 --enable-live-block-migration) live_block_migration="yes"
1278 ;;
a99d57bb
WG
1279 --disable-numa) numa="no"
1280 ;;
1281 --enable-numa) numa="yes"
1282 ;;
2847b469
FZ
1283 --disable-tcmalloc) tcmalloc="no"
1284 ;;
1285 --enable-tcmalloc) tcmalloc="yes"
1286 ;;
7b01cb97
AD
1287 --disable-jemalloc) jemalloc="no"
1288 ;;
1289 --enable-jemalloc) jemalloc="yes"
1290 ;;
a6b1d4c0
CX
1291 --disable-replication) replication="no"
1292 ;;
1293 --enable-replication) replication="yes"
1294 ;;
da92c3ff
AM
1295 --disable-vxhs) vxhs="no"
1296 ;;
1297 --enable-vxhs) vxhs="yes"
1298 ;;
e6a74868
MAL
1299 --disable-vhost-user) vhost_user="no"
1300 ;;
1301 --enable-vhost-user)
1302 vhost_user="yes"
1303 if test "$mingw32" = "yes"; then
1304 error_exit "vhost-user isn't available on win32"
1305 fi
1306 ;;
8ca80760
RH
1307 --disable-capstone) capstone="no"
1308 ;;
1309 --enable-capstone) capstone="yes"
1310 ;;
e219c499
RH
1311 --enable-capstone=git) capstone="git"
1312 ;;
1313 --enable-capstone=system) capstone="system"
1314 ;;
cc84d63a
DB
1315 --with-git=*) git="$optarg"
1316 ;;
f62bbee5
DB
1317 --enable-git-update) git_update=yes
1318 ;;
1319 --disable-git-update) git_update=no
1320 ;;
2d2ad6d0
FZ
1321 *)
1322 echo "ERROR: unknown option $opt"
1323 echo "Try '$0 --help' for more information"
1324 exit 1
7f1559c6 1325 ;;
7d13299d
FB
1326 esac
1327done
1328
e6a74868
MAL
1329if test "$vhost_user" = ""; then
1330 if test "$mingw32" = "yes"; then
1331 vhost_user="no"
1332 else
1333 vhost_user="yes"
1334 fi
1335fi
1336
40293e58 1337case "$cpu" in
e3608d66
RH
1338 ppc)
1339 CPU_CFLAGS="-m32"
1340 LDFLAGS="-m32 $LDFLAGS"
1341 ;;
1342 ppc64)
1343 CPU_CFLAGS="-m64"
1344 LDFLAGS="-m64 $LDFLAGS"
1345 ;;
9b9c37c3 1346 sparc)
f1079bb8
RH
1347 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1348 LDFLAGS="-m32 -mv8plus $LDFLAGS"
3142255c 1349 ;;
ed968ff1 1350 sparc64)
79f3b12f 1351 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
f1079bb8 1352 LDFLAGS="-m64 $LDFLAGS"
3142255c 1353 ;;
76d83bde 1354 s390)
061cdd81 1355 CPU_CFLAGS="-m31"
28d7cc49
RH
1356 LDFLAGS="-m31 $LDFLAGS"
1357 ;;
1358 s390x)
061cdd81 1359 CPU_CFLAGS="-m64"
28d7cc49 1360 LDFLAGS="-m64 $LDFLAGS"
76d83bde 1361 ;;
40293e58 1362 i386)
79f3b12f 1363 CPU_CFLAGS="-m32"
0c439cbf 1364 LDFLAGS="-m32 $LDFLAGS"
2b2e59e6 1365 cc_i386='$(CC) -m32'
40293e58
FB
1366 ;;
1367 x86_64)
7ebee43e
RH
1368 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1369 # If we truly care, we should simply detect this case at
1370 # runtime and generate the fallback to serial emulation.
1371 CPU_CFLAGS="-m64 -mcx16"
0c439cbf 1372 LDFLAGS="-m64 $LDFLAGS"
2b2e59e6 1373 cc_i386='$(CC) -m32'
d2fbca94 1374 ;;
c72b26ec
RH
1375 x32)
1376 CPU_CFLAGS="-mx32"
1377 LDFLAGS="-mx32 $LDFLAGS"
1378 cc_i386='$(CC) -m32'
1379 ;;
30163d89 1380 # No special flags required for other host CPUs
3142255c
BS
1381esac
1382
79f3b12f
PC
1383QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1384EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1385
affc88cc
PM
1386# For user-mode emulation the host arch has to be one we explicitly
1387# support, even if we're using TCI.
1388if [ "$ARCH" = "unknown" ]; then
1389 bsd_user="no"
1390 linux_user="no"
1391fi
1392
60e0df25
PM
1393default_target_list=""
1394
6e92f823
PM
1395mak_wilds=""
1396
1397if [ "$softmmu" = "yes" ]; then
1398 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
60e0df25 1399fi
6e92f823
PM
1400if [ "$linux_user" = "yes" ]; then
1401 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
60e0df25 1402fi
6e92f823
PM
1403if [ "$bsd_user" = "yes" ]; then
1404 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
60e0df25
PM
1405fi
1406
6e92f823
PM
1407for config in $mak_wilds; do
1408 default_target_list="${default_target_list} $(basename "$config" .mak)"
1409done
1410
c53eeaf7 1411# Enumerate public trace backends for --help output
64a6047d 1412trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
c53eeaf7 1413
af5db58e
PB
1414if test x"$show_help" = x"yes" ; then
1415cat << EOF
1416
1417Usage: configure [options]
1418Options: [defaults in brackets after descriptions]
1419
08fb77ed
SW
1420Standard options:
1421 --help print this message
1422 --prefix=PREFIX install in PREFIX [$prefix]
1423 --interp-prefix=PREFIX where to find shared libraries, etc.
1424 use %M for cpu name [$interp_prefix]
1425 --target-list=LIST set target list (default: build everything)
1426$(echo Available targets: $default_target_list | \
1427 fold -s -w 53 | sed -e 's/^/ /')
1428
1429Advanced options (experts only):
1430 --source-path=PATH path of source code [$source_path]
1431 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1432 --cc=CC use C compiler CC [$cc]
1433 --iasl=IASL use ACPI compiler IASL [$iasl]
1434 --host-cc=CC use C compiler CC [$host_cc] for code run at
1435 build time
1436 --cxx=CXX use C++ compiler CXX [$cxx]
1437 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1438 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
11cde1c8 1439 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
08fb77ed
SW
1440 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1441 --make=MAKE use specified make [$make]
1442 --install=INSTALL use specified install [$install]
1443 --python=PYTHON use specified python [$python]
1444 --smbd=SMBD use specified smbd [$smbd]
1445 --static enable static build [$static]
1446 --mandir=PATH install man pages in PATH
1447 --datadir=PATH install firmware in PATH$confsuffix
1448 --docdir=PATH install documentation in PATH$confsuffix
1449 --bindir=PATH install binaries in PATH
1450 --libdir=PATH install libraries in PATH
1451 --sysconfdir=PATH install config in PATH$confsuffix
1452 --localstatedir=PATH install local state in PATH (set at runtime on win32)
3d5eecab 1453 --firmwarepath=PATH search PATH for firmware files
e26110cf 1454 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
08fb77ed 1455 --enable-debug enable common debug build options
08fb77ed
SW
1456 --disable-strip disable stripping binaries
1457 --disable-werror disable compilation abort on warning
63678e17 1458 --disable-stack-protector disable compiler-provided stack protection
08fb77ed
SW
1459 --audio-drv-list=LIST set audio drivers list:
1460 Available drivers: $audio_possible_drivers
1461 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1462 --block-drv-rw-whitelist=L
1463 set block driver read-write whitelist
1464 (affects only QEMU, not qemu-img)
1465 --block-drv-ro-whitelist=L
1466 set block driver read-only whitelist
1467 (affects only QEMU, not qemu-img)
5b808275 1468 --enable-trace-backends=B Set trace backend
c53eeaf7 1469 Available backends: $trace_backend_list
08fb77ed
SW
1470 --with-trace-file=NAME Full PATH,NAME of file to store traces
1471 Default:trace-<pid>
c23f23b9
MT
1472 --disable-slirp disable SLIRP userspace network connectivity
1473 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
5a22ab71 1474 --enable-malloc-trim enable libc malloc_trim() for memory optimization
c23f23b9
MT
1475 --oss-lib path to OSS library
1476 --cpu=CPU Build for host CPU [$cpu]
08fb77ed 1477 --with-coroutine=BACKEND coroutine backend. Supported options:
33c53c54 1478 ucontext, sigaltstack, windows
08fb77ed
SW
1479 --enable-gcov enable test coverage analysis with gcov
1480 --gcov=GCOV use specified gcov [$gcov_tool]
c23f23b9
MT
1481 --disable-blobs disable installing provided firmware blobs
1482 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1483 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
a1c5e949 1484 --tls-priority default TLS protocol/cipher priority string
c12d66aa
LM
1485 --enable-gprof QEMU profiling with gprof
1486 --enable-profiler profiler support
1487 --enable-xen-pv-domain-build
1488 xen pv domain builder
1489 --enable-debug-stack-usage
1490 track the maximum stack usage of stacks created by qemu_alloc_stack
c23f23b9
MT
1491
1492Optional features, enabled with --enable-FEATURE and
1493disabled with --disable-FEATURE, default is enabled if available:
1494
1495 system all system emulation targets
1496 user supported user emulation targets
1497 linux-user all linux usermode emulation targets
1498 bsd-user all BSD usermode emulation targets
c23f23b9
MT
1499 docs build documentation
1500 guest-agent build the QEMU Guest Agent
1501 guest-agent-msi build guest agent Windows MSI installation package
1502 pie Position Independent Executables
1503 modules modules support
1504 debug-tcg TCG debugging (default is disabled)
1505 debug-info debugging information
1506 sparse sparse checker
1507
ddbb0d09 1508 gnutls GNUTLS cryptography support
91bfcdb0
DB
1509 nettle nettle cryptography support
1510 gcrypt libgcrypt cryptography support
c23f23b9
MT
1511 sdl SDL UI
1512 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1513 gtk gtk UI
1514 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1515 vte vte support for the gtk UI
1516 curses curses UI
1517 vnc VNC UI support
c23f23b9
MT
1518 vnc-sasl SASL encryption for VNC server
1519 vnc-jpeg JPEG lossy compression for VNC server
1520 vnc-png PNG compression for VNC server
c23f23b9
MT
1521 cocoa Cocoa UI (Mac OS X only)
1522 virtfs VirtFS
fe8fc5ae 1523 mpath Multipath persistent reservation passthrough
c23f23b9
MT
1524 xen xen backend driver support
1525 xen-pci-passthrough
1526 brlapi BrlAPI (Braile)
1527 curl curl connectivity
1528 fdt fdt device tree
1529 bluez bluez stack connectivity
1530 kvm KVM acceleration support
b0cb0a66 1531 hax HAX acceleration support
c23f23b9 1532 rdma RDMA-based migration support
c23f23b9
MT
1533 vde support for vde network
1534 netmap support for netmap network
1535 linux-aio Linux AIO support
1536 cap-ng libcap-ng support
1537 attr attr and xattr support
1538 vhost-net vhost-net acceleration support
1539 spice spice
1540 rbd rados block device (rbd)
1541 libiscsi iscsi support
1542 libnfs nfs support
7b02f544 1543 smartcard smartcard support (libcacard)
c23f23b9 1544 libusb libusb (for usb passthrough)
ed1701c6 1545 live-block-migration Block migration in the main migration stream
c23f23b9
MT
1546 usb-redir usb network redirection support
1547 lzo support of lzo compression library
1548 snappy support of snappy compression library
1549 bzip2 support of bzip2 compression library
1550 (for reading bzip2-compressed dmg images)
1551 seccomp seccomp support
1552 coroutine-pool coroutine freelist (better performance)
1553 glusterfs GlusterFS backend
c23f23b9
MT
1554 tpm TPM support
1555 libssh2 ssh block device support
c23f23b9
MT
1556 numa libnuma support
1557 tcmalloc tcmalloc support
7b01cb97 1558 jemalloc jemalloc support
a6b1d4c0 1559 replication replication support
c12d66aa
LM
1560 vhost-vsock virtio sockets device support
1561 opengl opengl support
1562 virglrenderer virgl rendering support
1563 xfsctl xfsctl support
1564 qom-cast-debug cast debugging support
1565 tools build qemu-io, qemu-nbd and qemu-image tools
da92c3ff 1566 vxhs Veritas HyperScale vDisk backend support
f0d92b56 1567 crypto-afalg Linux AF_ALG crypto backend driver
e6a74868 1568 vhost-user vhost-user support
8ca80760 1569 capstone capstone disassembler support
08fb77ed
SW
1570
1571NOTE: The object files are built at the place where configure is launched
af5db58e 1572EOF
2d2ad6d0 1573exit 0
af5db58e
PB
1574fi
1575
c53eeaf7
SH
1576if ! has $python; then
1577 error_exit "Python not found. Use --python=/path/to/python"
1578fi
1579
1580# Note that if the Python conditional here evaluates True we will exit
1581# with status 1 which is a shell 'false' value.
1582if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1583 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1584 "Note that Python 3 or later is not yet supported." \
1585 "Use --python=/path/to/python to specify a supported Python."
1586fi
1587
1588# Suppress writing compiled files
1589python="$python -B"
1590
9aae6e54
DHB
1591# Check that the C compiler works. Doing this here before testing
1592# the host CPU ensures that we had a valid CC to autodetect the
1593# $cpu var (and we should bail right here if that's not the case).
1594# It also allows the help message to be printed without a CC.
1595write_c_skeleton;
1596if compile_object ; then
1597 : C compiler works ok
1598else
1599 error_exit "\"$cc\" either does not exist or does not work"
1600fi
1601if ! compile_prog ; then
1602 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1603fi
1604
359bc95d
PM
1605# Now we have handled --enable-tcg-interpreter and know we're not just
1606# printing the help message, bail out if the host CPU isn't supported.
1607if test "$ARCH" = "unknown"; then
1608 if test "$tcg_interpreter" = "yes" ; then
1609 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
359bc95d 1610 else
76ad07a4 1611 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
359bc95d
PM
1612 fi
1613fi
1614
9c83ffd8
PM
1615# Consult white-list to determine whether to enable werror
1616# by default. Only enable by default for git builds
9c83ffd8
PM
1617if test -z "$werror" ; then
1618 if test -d "$source_path/.git" -a \
e4650c81 1619 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
9c83ffd8
PM
1620 werror="yes"
1621 else
1622 werror="no"
1623 fi
1624fi
1625
fb59dabd
PM
1626if test "$bogus_os" = "yes"; then
1627 # Now that we know that we're not printing the help and that
1628 # the compiler works (so the results of the check_defines we used
1629 # to identify the OS are reliable), if we didn't recognize the
1630 # host OS we should stop now.
951fedfc 1631 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
fb59dabd
PM
1632fi
1633
8d05095c
PB
1634gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1635gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
ac7568bd 1636gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
435405ac 1637gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
b98fcfd8 1638gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
71429097 1639gcc_flags="-Wno-string-plus-int $gcc_flags"
6ca026cb
PM
1640# Note that we do not add -Werror to gcc_flags here, because that would
1641# enable it for all configure tests. If a configure test failed due
1642# to -Werror this would just silently disable some features,
1643# so it's too error prone.
93b25869
JS
1644
1645cc_has_warning_flag() {
1646 write_c_skeleton;
1647
a1d29d6c
PM
1648 # Use the positive sense of the flag when testing for -Wno-wombat
1649 # support (gcc will happily accept the -Wno- form of unknown
1650 # warning options).
93b25869
JS
1651 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1652 compile_prog "-Werror $optflag" ""
1653}
1654
1655for flag in $gcc_flags; do
1656 if cc_has_warning_flag $flag ; then
1657 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
8d05095c
PB
1658 fi
1659done
1660
3b463a3f 1661if test "$stack_protector" != "no"; then
fccd35a0
RR
1662 cat > $TMPC << EOF
1663int main(int argc, char *argv[])
1664{
1665 char arr[64], *p = arr, *c = argv[0];
1666 while (*c) {
1667 *p++ = *c++;
1668 }
1669 return 0;
1670}
1671EOF
63678e17 1672 gcc_flags="-fstack-protector-strong -fstack-protector-all"
3b463a3f 1673 sp_on=0
63678e17 1674 for flag in $gcc_flags; do
590e5dd9
PM
1675 # We need to check both a compile and a link, since some compiler
1676 # setups fail only on a .c->.o compile and some only at link time
1677 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1678 compile_prog "-Werror $flag" ""; then
63678e17 1679 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3b463a3f 1680 sp_on=1
63678e17
SN
1681 break
1682 fi
1683 done
3b463a3f
MR
1684 if test "$stack_protector" = yes; then
1685 if test $sp_on = 0; then
1686 error_exit "Stack protector not supported"
1687 fi
1688 fi
37746c5e
MAL
1689fi
1690
20bc94a2
PB
1691# Disable -Wmissing-braces on older compilers that warn even for
1692# the "universal" C zero initializer {0}.
1693cat > $TMPC << EOF
1694struct {
1695 int a[2];
1696} x = {0};
1697EOF
1698if compile_object "-Werror" "" ; then
1699 :
1700else
1701 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1702fi
1703
cbdd1999
PB
1704# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1705# large functions that use global variables. The bug is in all releases of
1706# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1707# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1708cat > $TMPC << EOF
1709#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1710int main(void) { return 0; }
1711#else
1712#error No bug in this compiler.
1713#endif
1714EOF
1715if compile_prog "-Werror -fno-gcse" "" ; then
1716 TRANSLATE_OPT_CFLAGS=-fno-gcse
1717fi
1718
40d6444e 1719if test "$static" = "yes" ; then
aa0d1f44
PB
1720 if test "$modules" = "yes" ; then
1721 error_exit "static and modules are mutually incompatible"
1722 fi
40d6444e 1723 if test "$pie" = "yes" ; then
76ad07a4 1724 error_exit "static and pie are mutually incompatible"
40d6444e
AK
1725 else
1726 pie="no"
1727 fi
1728fi
1729
768b7855
EC
1730# Unconditional check for compiler __thread support
1731 cat > $TMPC << EOF
1732static __thread int tls_var;
1733int main(void) { return tls_var; }
1734EOF
1735
1736if ! compile_prog "-Werror" "" ; then
1737 error_exit "Your compiler does not support the __thread specifier for " \
1738 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1739fi
1740
40d6444e
AK
1741if test "$pie" = ""; then
1742 case "$cpu-$targetos" in
c72b26ec 1743 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
40d6444e
AK
1744 ;;
1745 *)
1746 pie="no"
1747 ;;
1748 esac
1749fi
1750
1751if test "$pie" != "no" ; then
1752 cat > $TMPC << EOF
21d4a791
AK
1753
1754#ifdef __linux__
1755# define THREAD __thread
1756#else
1757# define THREAD
1758#endif
1759
1760static THREAD int tls_var;
1761
1762int main(void) { return tls_var; }
1763
40d6444e
AK
1764EOF
1765 if compile_prog "-fPIE -DPIE" "-pie"; then
1766 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1767 LDFLAGS="-pie $LDFLAGS"
1768 pie="yes"
1769 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1770 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1771 fi
1772 else
1773 if test "$pie" = "yes"; then
76ad07a4 1774 error_exit "PIE not available due to missing toolchain support"
40d6444e
AK
1775 else
1776 echo "Disabling PIE due to missing toolchain support"
1777 pie="no"
1778 fi
1779 fi
46eef33b 1780
e4a7b344 1781 if compile_prog "-Werror -fno-pie" "-nopie"; then
46eef33b
BS
1782 CFLAGS_NOPIE="-fno-pie"
1783 LDFLAGS_NOPIE="-nopie"
1784 fi
40d6444e
AK
1785fi
1786
09dada40
PB
1787##########################################
1788# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1789# use i686 as default anyway, but for those that don't, an explicit
1790# specification is necessary
1791
1792if test "$cpu" = "i386"; then
1793 cat > $TMPC << EOF
1794static int sfaa(int *ptr)
1795{
1796 return __sync_fetch_and_and(ptr, 0);
1797}
1798
1799int main(void)
1800{
1801 int val = 42;
1405b629 1802 val = __sync_val_compare_and_swap(&val, 0, 1);
09dada40
PB
1803 sfaa(&val);
1804 return val;
1805}
1806EOF
1807 if ! compile_prog "" "" ; then
1808 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1809 fi
1810fi
1811
1812#########################################
ec530c81 1813# Solaris specific configure tool chain decisions
09dada40 1814
ec530c81 1815if test "$solaris" = "yes" ; then
6792aa11
LM
1816 if has $install; then
1817 :
1818 else
76ad07a4
PM
1819 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1820 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1821 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
ec530c81 1822 fi
89138857 1823 if test "$(path_of $install)" = "/usr/sbin/install" ; then
76ad07a4
PM
1824 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1825 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1826 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
ec530c81 1827 fi
6792aa11
LM
1828 if has ar; then
1829 :
1830 else
ec530c81 1831 if test -f /usr/ccs/bin/ar ; then
76ad07a4
PM
1832 error_exit "No path includes ar" \
1833 "Add /usr/ccs/bin to your path and rerun configure"
ec530c81 1834 fi
76ad07a4 1835 error_exit "No path includes ar"
ec530c81 1836 fi
5fafdf24 1837fi
ec530c81 1838
afb63ebd 1839if test -z "${target_list+xxx}" ; then
d880a3ba
PB
1840 for target in $default_target_list; do
1841 supported_target $target 2>/dev/null && \
1842 target_list="$target_list $target"
1843 done
1844 target_list="${target_list# }"
121afa9e 1845else
89138857 1846 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
d880a3ba
PB
1847 for target in $target_list; do
1848 # Check that we recognised the target name; this allows a more
1849 # friendly error message than if we let it fall through.
1850 case " $default_target_list " in
1851 *" $target "*)
1852 ;;
1853 *)
1854 error_exit "Unknown target name '$target'"
1855 ;;
1856 esac
1857 supported_target $target || exit 1
1858 done
121afa9e 1859fi
25b48338 1860
f55fe278
PB
1861# see if system emulation was really requested
1862case " $target_list " in
1863 *"-softmmu "*) softmmu=yes
1864 ;;
1865 *) softmmu=no
1866 ;;
1867esac
5327cf48 1868
249247c9
JQ
1869feature_not_found() {
1870 feature=$1
21684af0 1871 remedy=$2
249247c9 1872
76ad07a4 1873 error_exit "User requested feature $feature" \
21684af0
SS
1874 "configure was not able to find it." \
1875 "$remedy"
249247c9
JQ
1876}
1877
7d13299d
FB
1878# ---
1879# big/little endian test
1880cat > $TMPC << EOF
61cc919f
MF
1881short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1882short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1883extern int foo(short *, short *);
1884int main(int argc, char *argv[]) {
1885 return foo(big_endian, little_endian);
7d13299d
FB
1886}
1887EOF
1888
61cc919f
MF
1889if compile_object ; then
1890 if grep -q BiGeNdIaN $TMPO ; then
1891 bigendian="yes"
1892 elif grep -q LiTtLeEnDiAn $TMPO ; then
1893 bigendian="no"
1894 else
1895 echo big/little test failed
21d89f84 1896 fi
61cc919f
MF
1897else
1898 echo big/little test failed
7d13299d
FB
1899fi
1900
a30878e7
PM
1901##########################################
1902# cocoa implies not SDL or GTK
1903# (the cocoa UI code currently assumes it is always the active UI
1904# and doesn't interact well with other UI frontend code)
1905if test "$cocoa" = "yes"; then
1906 if test "$sdl" = "yes"; then
1907 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1908 fi
1909 if test "$gtk" = "yes"; then
1910 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1911 fi
1912 gtk=no
1913 sdl=no
1914fi
1915
6b39b063
EB
1916# Some versions of Mac OS X incorrectly define SIZE_MAX
1917cat > $TMPC << EOF
1918#include <stdint.h>
1919#include <stdio.h>
1920int main(int argc, char *argv[]) {
1921 return printf("%zu", SIZE_MAX);
1922}
1923EOF
1924have_broken_size_max=no
1925if ! compile_object -Werror ; then
1926 have_broken_size_max=yes
1927fi
1928
015a33bd
GA
1929##########################################
1930# L2TPV3 probe
1931
1932cat > $TMPC <<EOF
1933#include <sys/socket.h>
bff6cb72 1934#include <linux/ip.h>
015a33bd
GA
1935int main(void) { return sizeof(struct mmsghdr); }
1936EOF
1937if compile_prog "" "" ; then
1938 l2tpv3=yes
1939else
1940 l2tpv3=no
1941fi
1942
4d9310f4
DB
1943##########################################
1944# MinGW / Mingw-w64 localtime_r/gmtime_r check
1945
1946if test "$mingw32" = "yes"; then
1947 # Some versions of MinGW / Mingw-w64 lack localtime_r
1948 # and gmtime_r entirely.
1949 #
1950 # Some versions of Mingw-w64 define a macro for
1951 # localtime_r/gmtime_r.
1952 #
1953 # Some versions of Mingw-w64 will define functions
1954 # for localtime_r/gmtime_r, but only if you have
1955 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1956 # though, unistd.h and pthread.h both define
1957 # that for you.
1958 #
1959 # So this #undef localtime_r and #include <unistd.h>
1960 # are not in fact redundant.
1961cat > $TMPC << EOF
1962#include <unistd.h>
1963#include <time.h>
1964#undef localtime_r
1965int main(void) { localtime_r(NULL, NULL); return 0; }
1966EOF
1967 if compile_prog "" "" ; then
1968 localtime_r="yes"
1969 else
1970 localtime_r="no"
1971 fi
1972fi
1973
779ab5e3
SW
1974##########################################
1975# pkg-config probe
1976
1977if ! has "$pkg_config_exe"; then
76ad07a4 1978 error_exit "pkg-config binary '$pkg_config_exe' not found"
779ab5e3
SW
1979fi
1980
b0a47e79
JQ
1981##########################################
1982# NPTL probe
1983
24cb36a6 1984if test "$linux_user" = "yes"; then
b0a47e79 1985 cat > $TMPC <<EOF
bd0c5661 1986#include <sched.h>
30813cea 1987#include <linux/futex.h>
182eacc0 1988int main(void) {
bd0c5661
PB
1989#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1990#error bork
1991#endif
182eacc0 1992 return 0;
bd0c5661
PB
1993}
1994EOF
24cb36a6 1995 if ! compile_object ; then
21684af0 1996 feature_not_found "nptl" "Install glibc and linux kernel headers."
b0a47e79 1997 fi
bd0c5661
PB
1998fi
1999
99f2dbd3 2000#########################################
ac62922e
AZ
2001# zlib check
2002
1ece9905
AL
2003if test "$zlib" != "no" ; then
2004 cat > $TMPC << EOF
ac62922e
AZ
2005#include <zlib.h>
2006int main(void) { zlibVersion(); return 0; }
2007EOF
1ece9905
AL
2008 if compile_prog "" "-lz" ; then
2009 :
2010 else
76ad07a4
PM
2011 error_exit "zlib check failed" \
2012 "Make sure to have the zlib libs and headers installed."
1ece9905 2013 fi
ac62922e 2014fi
eb0ecd5a 2015LIBS="$LIBS -lz"
ac62922e 2016
607dacd0
QN
2017##########################################
2018# lzo check
2019
2020if test "$lzo" != "no" ; then
2021 cat > $TMPC << EOF
2022#include <lzo/lzo1x.h>
2023int main(void) { lzo_version(); return 0; }
2024EOF
2025 if compile_prog "" "-llzo2" ; then
b25c9dff
SW
2026 libs_softmmu="$libs_softmmu -llzo2"
2027 lzo="yes"
607dacd0 2028 else
b25c9dff
SW
2029 if test "$lzo" = "yes"; then
2030 feature_not_found "liblzo2" "Install liblzo2 devel"
2031 fi
2032 lzo="no"
607dacd0 2033 fi
607dacd0
QN
2034fi
2035
2036##########################################
2037# snappy check
2038
2039if test "$snappy" != "no" ; then
2040 cat > $TMPC << EOF
2041#include <snappy-c.h>
2042int main(void) { snappy_max_compressed_length(4096); return 0; }
2043EOF
2044 if compile_prog "" "-lsnappy" ; then
b25c9dff
SW
2045 libs_softmmu="$libs_softmmu -lsnappy"
2046 snappy="yes"
607dacd0 2047 else
b25c9dff
SW
2048 if test "$snappy" = "yes"; then
2049 feature_not_found "libsnappy" "Install libsnappy devel"
2050 fi
2051 snappy="no"
607dacd0 2052 fi
607dacd0
QN
2053fi
2054
6b383c08
PW
2055##########################################
2056# bzip2 check
2057
2058if test "$bzip2" != "no" ; then
2059 cat > $TMPC << EOF
2060#include <bzlib.h>
2061int main(void) { BZ2_bzlibVersion(); return 0; }
2062EOF
2063 if compile_prog "" "-lbz2" ; then
2064 bzip2="yes"
2065 else
2066 if test "$bzip2" = "yes"; then
2067 feature_not_found "libbzip2" "Install libbzip2 devel"
2068 fi
2069 bzip2="no"
2070 fi
2071fi
2072
f794573e
EO
2073##########################################
2074# libseccomp check
2075
2076if test "$seccomp" != "no" ; then
693e5910
AJ
2077 case "$cpu" in
2078 i386|x86_64)
ba060c53 2079 libseccomp_minver="2.1.0"
693e5910 2080 ;;
5ce43972
JH
2081 mips)
2082 libseccomp_minver="2.2.0"
2083 ;;
693e5910
AJ
2084 arm|aarch64)
2085 libseccomp_minver="2.2.3"
2086 ;;
3aa35fcf 2087 ppc|ppc64|s390x)
3e684455
MS
2088 libseccomp_minver="2.3.0"
2089 ;;
693e5910
AJ
2090 *)
2091 libseccomp_minver=""
2092 ;;
2093 esac
2094
2095 if test "$libseccomp_minver" != "" &&
2096 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
c3883e1f
FZ
2097 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2098 seccomp_libs="$($pkg_config --libs libseccomp)"
693e5910 2099 seccomp="yes"
f794573e 2100 else
693e5910
AJ
2101 if test "$seccomp" = "yes" ; then
2102 if test "$libseccomp_minver" != "" ; then
2103 feature_not_found "libseccomp" \
2104 "Install libseccomp devel >= $libseccomp_minver"
2105 else
2106 feature_not_found "libseccomp" \
2107 "libseccomp is not supported for host cpu $cpu"
2108 fi
2109 fi
2110 seccomp="no"
f794573e
EO
2111 fi
2112fi
e37630ca
AL
2113##########################################
2114# xen probe
2115
fc321b4b 2116if test "$xen" != "no" ; then
c1cdd9d5
JG
2117 # Check whether Xen library path is specified via --extra-ldflags to avoid
2118 # overriding this setting with pkg-config output. If not, try pkg-config
2119 # to obtain all needed flags.
2120
2121 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2122 $pkg_config --exists xencontrol ; then
2123 xen_ctrl_version="$(printf '%d%02d%02d' \
2124 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2125 xen=yes
2126 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2127 xen_pc="$xen_pc xenevtchn xendevicemodel"
2128 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2129 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2130 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2131 else
d5b93ddf 2132
c1cdd9d5 2133 xen_libs="-lxenstore -lxenctrl -lxenguest"
d9506cab 2134 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
50ced5b3 2135
c1cdd9d5
JG
2136 # First we test whether Xen headers and libraries are available.
2137 # If no, we are done and there is no Xen support.
2138 # If yes, more tests are run to detect the Xen version.
2139
2140 # Xen (any)
2141 cat > $TMPC <<EOF
e37630ca 2142#include <xenctrl.h>
50ced5b3
SW
2143int main(void) {
2144 return 0;
2145}
2146EOF
c1cdd9d5
JG
2147 if ! compile_prog "" "$xen_libs" ; then
2148 # Xen not found
2149 if test "$xen" = "yes" ; then
2150 feature_not_found "xen" "Install xen devel"
2151 fi
2152 xen=no
50ced5b3 2153
c1cdd9d5
JG
2154 # Xen unstable
2155 elif
2156 cat > $TMPC <<EOF &&
5ba3d756
ID
2157#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2158#include <xenforeignmemory.h>
2159int main(void) {
2160 xenforeignmemory_handle *xfmem;
2161
2162 xfmem = xenforeignmemory_open(0, 0);
2163 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2164
2165 return 0;
2166}
2167EOF
2168 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2169 then
2170 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2171 xen_ctrl_version=41000
2172 xen=yes
2173 elif
2174 cat > $TMPC <<EOF &&
da8090cc
PD
2175#undef XC_WANT_COMPAT_DEVICEMODEL_API
2176#define __XEN_TOOLS__
2177#include <xendevicemodel.h>
2178int main(void) {
2179 xendevicemodel_handle *xd;
2180
2181 xd = xendevicemodel_open(0, 0);
2182 xendevicemodel_close(xd);
50ced5b3 2183
da8090cc
PD
2184 return 0;
2185}
2186EOF
c1cdd9d5
JG
2187 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2188 then
2189 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2190 xen_ctrl_version=40900
2191 xen=yes
2192 elif
2193 cat > $TMPC <<EOF &&
b6eb9b45
PS
2194/*
2195 * If we have stable libs the we don't want the libxc compat
2196 * layers, regardless of what CFLAGS we may have been given.
2197 *
2198 * Also, check if xengnttab_grant_copy_segment_t is defined and
2199 * grant copy operation is implemented.
2200 */
2201#undef XC_WANT_COMPAT_EVTCHN_API
2202#undef XC_WANT_COMPAT_GNTTAB_API
2203#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2204#include <xenctrl.h>
2205#include <xenstore.h>
2206#include <xenevtchn.h>
2207#include <xengnttab.h>
2208#include <xenforeignmemory.h>
2209#include <stdint.h>
2210#include <xen/hvm/hvm_info_table.h>
2211#if !defined(HVM_MAX_VCPUS)
2212# error HVM_MAX_VCPUS not defined
2213#endif
2214int main(void) {
2215 xc_interface *xc = NULL;
2216 xenforeignmemory_handle *xfmem;
2217 xenevtchn_handle *xe;
2218 xengnttab_handle *xg;
2219 xen_domain_handle_t handle;
2220 xengnttab_grant_copy_segment_t* seg = NULL;
2221
2222 xs_daemon_open();
2223
2224 xc = xc_interface_open(0, 0, 0);
2225 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2226 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2227 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2228 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2229 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2230
2231 xfmem = xenforeignmemory_open(0, 0);
2232 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2233
2234 xe = xenevtchn_open(0, 0);
2235 xenevtchn_fd(xe);
2236
2237 xg = xengnttab_open(0, 0);
2238 xengnttab_grant_copy(xg, 0, seg);
2239
2240 return 0;
2241}
2242EOF
c1cdd9d5
JG
2243 compile_prog "" "$xen_libs $xen_stable_libs"
2244 then
2245 xen_ctrl_version=40800
2246 xen=yes
2247 elif
2248 cat > $TMPC <<EOF &&
5eeb39c2
IC
2249/*
2250 * If we have stable libs the we don't want the libxc compat
2251 * layers, regardless of what CFLAGS we may have been given.
2252 */
2253#undef XC_WANT_COMPAT_EVTCHN_API
2254#undef XC_WANT_COMPAT_GNTTAB_API
2255#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2256#include <xenctrl.h>
2257#include <xenstore.h>
2258#include <xenevtchn.h>
2259#include <xengnttab.h>
2260#include <xenforeignmemory.h>
2261#include <stdint.h>
2262#include <xen/hvm/hvm_info_table.h>
2263#if !defined(HVM_MAX_VCPUS)
2264# error HVM_MAX_VCPUS not defined
2265#endif
2266int main(void) {
2267 xc_interface *xc = NULL;
2268 xenforeignmemory_handle *xfmem;
2269 xenevtchn_handle *xe;
2270 xengnttab_handle *xg;
2271 xen_domain_handle_t handle;
2272
2273 xs_daemon_open();
2274
2275 xc = xc_interface_open(0, 0, 0);
2276 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2277 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2278 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2279 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2280 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2281
2282 xfmem = xenforeignmemory_open(0, 0);
2283 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2284
2285 xe = xenevtchn_open(0, 0);
2286 xenevtchn_fd(xe);
2287
2288 xg = xengnttab_open(0, 0);
2289 xengnttab_map_grant_ref(xg, 0, 0, 0);
2290
2291 return 0;
2292}
2293EOF
c1cdd9d5
JG
2294 compile_prog "" "$xen_libs $xen_stable_libs"
2295 then
2296 xen_ctrl_version=40701
2297 xen=yes
2298 elif
2299 cat > $TMPC <<EOF &&
50ced5b3 2300#include <xenctrl.h>
cdadde39
RPM
2301#include <stdint.h>
2302int main(void) {
2303 xc_interface *xc = NULL;
2304 xen_domain_handle_t handle;
2305 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2306 return 0;
2307}
2308EOF
c1cdd9d5
JG
2309 compile_prog "" "$xen_libs"
2310 then
2311 xen_ctrl_version=40700
2312 xen=yes
2313
2314 # Xen 4.6
2315 elif
2316 cat > $TMPC <<EOF &&
cdadde39 2317#include <xenctrl.h>
e108a3c1 2318#include <xenstore.h>
d5b93ddf
AP
2319#include <stdint.h>
2320#include <xen/hvm/hvm_info_table.h>
2321#if !defined(HVM_MAX_VCPUS)
2322# error HVM_MAX_VCPUS not defined
2323#endif
d8b441a3
JB
2324int main(void) {
2325 xc_interface *xc;
2326 xs_daemon_open();
2327 xc = xc_interface_open(0, 0, 0);
2328 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2329 xc_gnttab_open(NULL, 0);
2330 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2331 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2332 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20a544c7 2333 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
d8b441a3
JB
2334 return 0;
2335}
2336EOF
c1cdd9d5
JG
2337 compile_prog "" "$xen_libs"
2338 then
2339 xen_ctrl_version=40600
2340 xen=yes
2341
2342 # Xen 4.5
2343 elif
2344 cat > $TMPC <<EOF &&
d8b441a3
JB
2345#include <xenctrl.h>
2346#include <xenstore.h>
2347#include <stdint.h>
2348#include <xen/hvm/hvm_info_table.h>
2349#if !defined(HVM_MAX_VCPUS)
2350# error HVM_MAX_VCPUS not defined
2351#endif
3996e85c
PD
2352int main(void) {
2353 xc_interface *xc;
2354 xs_daemon_open();
2355 xc = xc_interface_open(0, 0, 0);
2356 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2357 xc_gnttab_open(NULL, 0);
2358 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2359 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2360 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2361 return 0;
2362}
2363EOF
c1cdd9d5
JG
2364 compile_prog "" "$xen_libs"
2365 then
2366 xen_ctrl_version=40500
2367 xen=yes
3996e85c 2368
c1cdd9d5
JG
2369 elif
2370 cat > $TMPC <<EOF &&
3996e85c
PD
2371#include <xenctrl.h>
2372#include <xenstore.h>
2373#include <stdint.h>
2374#include <xen/hvm/hvm_info_table.h>
2375#if !defined(HVM_MAX_VCPUS)
2376# error HVM_MAX_VCPUS not defined
2377#endif
8688e065
SS
2378int main(void) {
2379 xc_interface *xc;
2380 xs_daemon_open();
2381 xc = xc_interface_open(0, 0, 0);
2382 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2383 xc_gnttab_open(NULL, 0);
2384 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2385 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2386 return 0;
2387}
2388EOF
c1cdd9d5
JG
2389 compile_prog "" "$xen_libs"
2390 then
2391 xen_ctrl_version=40200
2392 xen=yes
8688e065 2393
c1cdd9d5
JG
2394 else
2395 if test "$xen" = "yes" ; then
2396 feature_not_found "xen (unsupported version)" \
2397 "Install a supported xen (xen 4.2 or newer)"
2398 fi
2399 xen=no
fc321b4b 2400 fi
d5b93ddf 2401
c1cdd9d5
JG
2402 if test "$xen" = yes; then
2403 if test $xen_ctrl_version -ge 40701 ; then
2404 libs_softmmu="$xen_stable_libs $libs_softmmu"
2405 fi
2406 libs_softmmu="$xen_libs $libs_softmmu"
5eeb39c2 2407 fi
d5b93ddf 2408 fi
e37630ca
AL
2409fi
2410
eb6fda0f 2411if test "$xen_pci_passthrough" != "no"; then
edfb07ed 2412 if test "$xen" = "yes" && test "$linux" = "yes"; then
eb6fda0f
AP
2413 xen_pci_passthrough=yes
2414 else
2415 if test "$xen_pci_passthrough" = "yes"; then
76ad07a4
PM
2416 error_exit "User requested feature Xen PCI Passthrough" \
2417 " but this feature requires /sys from Linux"
eb6fda0f
AP
2418 fi
2419 xen_pci_passthrough=no
2420 fi
2421fi
2422
64a7ad6f
IC
2423if test "$xen_pv_domain_build" = "yes" &&
2424 test "$xen" != "yes"; then
2425 error_exit "User requested Xen PV domain builder support" \
2426 "which requires Xen support."
2427fi
2428
dfffc653
JQ
2429##########################################
2430# Sparse probe
2431if test "$sparse" != "no" ; then
0dba6195 2432 if has cgcc; then
dfffc653
JQ
2433 sparse=yes
2434 else
2435 if test "$sparse" = "yes" ; then
21684af0 2436 feature_not_found "sparse" "Install sparse binary"
dfffc653
JQ
2437 fi
2438 sparse=no
2439 fi
2440fi
2441
f676c67e
JW
2442##########################################
2443# X11 probe
2444x11_cflags=
2445x11_libs=-lX11
2446if $pkg_config --exists "x11"; then
89138857
SW
2447 x11_cflags=$($pkg_config --cflags x11)
2448 x11_libs=$($pkg_config --libs x11)
f676c67e
JW
2449fi
2450
a4ccabcf
AL
2451##########################################
2452# GTK probe
2453
9e04c683 2454if test "$gtkabi" = ""; then
5fe309ff
GH
2455 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2456 # Use 2.0 as a fallback if that is available.
2457 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
9e04c683 2458 gtkabi=3.0
5fe309ff 2459 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
9e04c683 2460 gtkabi=2.0
5fe309ff
GH
2461 else
2462 gtkabi=3.0
9e04c683
SW
2463 fi
2464fi
2465
a4ccabcf 2466if test "$gtk" != "no"; then
528de90a 2467 gtkpackage="gtk+-$gtkabi"
0a337ed0 2468 gtkx11package="gtk+-x11-$gtkabi"
528de90a
DB
2469 if test "$gtkabi" = "3.0" ; then
2470 gtkversion="3.0.0"
bbbf9bfb
SW
2471 else
2472 gtkversion="2.18.0"
2473 fi
2474 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
89138857
SW
2475 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2476 gtk_libs=$($pkg_config --libs $gtkpackage)
2477 gtk_version=$($pkg_config --modversion $gtkpackage)
0a337ed0 2478 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
f676c67e
JW
2479 gtk_cflags="$gtk_cflags $x11_cflags"
2480 gtk_libs="$gtk_libs $x11_libs"
0a337ed0 2481 fi
bbbf9bfb
SW
2482 libs_softmmu="$gtk_libs $libs_softmmu"
2483 gtk="yes"
2484 elif test "$gtk" = "yes"; then
5fe309ff 2485 feature_not_found "gtk" "Install gtk3-devel"
bbbf9bfb
SW
2486 else
2487 gtk="no"
2488 fi
2489fi
2490
ddbb0d09
DB
2491
2492##########################################
2493# GNUTLS probe
2494
37371299
PM
2495gnutls_works() {
2496 # Unfortunately some distros have bad pkg-config information for gnutls
2497 # such that it claims to exist but you get a compiler error if you try
2498 # to use the options returned by --libs. Specifically, Ubuntu for --static
2499 # builds doesn't work:
2500 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2501 #
2502 # So sanity check the cflags/libs before assuming gnutls can be used.
2503 if ! $pkg_config --exists "gnutls"; then
2504 return 1
2505 fi
2506
2507 write_c_skeleton
2508 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2509}
2510
62893b67 2511gnutls_gcrypt=no
ed754746 2512gnutls_nettle=no
ddbb0d09 2513if test "$gnutls" != "no"; then
37371299 2514 if gnutls_works; then
89138857
SW
2515 gnutls_cflags=$($pkg_config --cflags gnutls)
2516 gnutls_libs=$($pkg_config --libs gnutls)
ddbb0d09
DB
2517 libs_softmmu="$gnutls_libs $libs_softmmu"
2518 libs_tools="$gnutls_libs $libs_tools"
2519 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2520 gnutls="yes"
2521
b917da4c
DB
2522 # gnutls_rnd requires >= 2.11.0
2523 if $pkg_config --exists "gnutls >= 2.11.0"; then
2524 gnutls_rnd="yes"
2525 else
2526 gnutls_rnd="no"
2527 fi
2528
62893b67
DB
2529 if $pkg_config --exists 'gnutls >= 3.0'; then
2530 gnutls_gcrypt=no
ed754746 2531 gnutls_nettle=yes
62893b67 2532 elif $pkg_config --exists 'gnutls >= 2.12'; then
89138857 2533 case $($pkg_config --libs --static gnutls) in
ed754746
DB
2534 *gcrypt*)
2535 gnutls_gcrypt=yes
2536 gnutls_nettle=no
2537 ;;
2538 *nettle*)
2539 gnutls_gcrypt=no
2540 gnutls_nettle=yes
2541 ;;
2542 *)
2543 gnutls_gcrypt=yes
2544 gnutls_nettle=no
2545 ;;
62893b67
DB
2546 esac
2547 else
2548 gnutls_gcrypt=yes
ed754746 2549 gnutls_nettle=no
62893b67 2550 fi
ddbb0d09
DB
2551 elif test "$gnutls" = "yes"; then
2552 feature_not_found "gnutls" "Install gnutls devel"
2553 else
2554 gnutls="no"
b917da4c 2555 gnutls_rnd="no"
ddbb0d09
DB
2556 fi
2557else
b917da4c 2558 gnutls_rnd="no"
ddbb0d09
DB
2559fi
2560
91bfcdb0
DB
2561
2562# If user didn't give a --disable/enable-gcrypt flag,
2563# then mark as disabled if user requested nettle
2564# explicitly, or if gnutls links to nettle
2565if test -z "$gcrypt"
2566then
2567 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2568 then
2569 gcrypt="no"
2570 fi
2571fi
2572
2573# If user didn't give a --disable/enable-nettle flag,
2574# then mark as disabled if user requested gcrypt
2575# explicitly, or if gnutls links to gcrypt
2576if test -z "$nettle"
2577then
2578 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2579 then
2580 nettle="no"
2581 fi
2582fi
2583
2584has_libgcrypt_config() {
2585 if ! has "libgcrypt-config"
2586 then
2587 return 1
2588 fi
2589
2590 if test -n "$cross_prefix"
2591 then
89138857 2592 host=$(libgcrypt-config --host)
91bfcdb0
DB
2593 if test "$host-" != $cross_prefix
2594 then
2595 return 1
2596 fi
2597 fi
2598
2599 return 0
2600}
2601
2602if test "$gcrypt" != "no"; then
2603 if has_libgcrypt_config; then
89138857
SW
2604 gcrypt_cflags=$(libgcrypt-config --cflags)
2605 gcrypt_libs=$(libgcrypt-config --libs)
91bfcdb0
DB
2606 # Debian has remove -lgpg-error from libgcrypt-config
2607 # as it "spreads unnecessary dependencies" which in
2608 # turn breaks static builds...
2609 if test "$static" = "yes"
2610 then
2611 gcrypt_libs="$gcrypt_libs -lgpg-error"
2612 fi
62893b67
DB
2613 libs_softmmu="$gcrypt_libs $libs_softmmu"
2614 libs_tools="$gcrypt_libs $libs_tools"
2615 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
91bfcdb0
DB
2616 gcrypt="yes"
2617 if test -z "$nettle"; then
2618 nettle="no"
2619 fi
37788f25
DB
2620
2621 cat > $TMPC << EOF
2622#include <gcrypt.h>
2623int main(void) {
2624 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2625 GCRY_MD_SHA256,
2626 NULL, 0, 0, 0, NULL);
2627 return 0;
2628}
2629EOF
2630 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2631 gcrypt_kdf=yes
2632 fi
1f923c70
LM
2633
2634 cat > $TMPC << EOF
2635#include <gcrypt.h>
2636int main(void) {
2637 gcry_mac_hd_t handle;
2638 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2639 GCRY_MAC_FLAG_SECURE, NULL);
2640 return 0;
2641}
2642EOF
2643 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2644 gcrypt_hmac=yes
2645 fi
62893b67 2646 else
91bfcdb0
DB
2647 if test "$gcrypt" = "yes"; then
2648 feature_not_found "gcrypt" "Install gcrypt devel"
2649 else
2650 gcrypt="no"
2651 fi
62893b67
DB
2652 fi
2653fi
2654
ddbb0d09 2655
91bfcdb0 2656if test "$nettle" != "no"; then
ed754746 2657 if $pkg_config --exists "nettle"; then
89138857
SW
2658 nettle_cflags=$($pkg_config --cflags nettle)
2659 nettle_libs=$($pkg_config --libs nettle)
2660 nettle_version=$($pkg_config --modversion nettle)
ed754746
DB
2661 libs_softmmu="$nettle_libs $libs_softmmu"
2662 libs_tools="$nettle_libs $libs_tools"
2663 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
91bfcdb0 2664 nettle="yes"
fff2f982
DB
2665
2666 cat > $TMPC << EOF
9e87a691 2667#include <stddef.h>
fff2f982
DB
2668#include <nettle/pbkdf2.h>
2669int main(void) {
2670 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2671 return 0;
2672}
2673EOF
2674 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2675 nettle_kdf=yes
2676 fi
ed754746 2677 else
91bfcdb0
DB
2678 if test "$nettle" = "yes"; then
2679 feature_not_found "nettle" "Install nettle devel"
2680 else
2681 nettle="no"
2682 fi
ed754746
DB
2683 fi
2684fi
2685
91bfcdb0
DB
2686if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2687then
2688 error_exit "Only one of gcrypt & nettle can be enabled"
2689fi
2690
9a2fd434
DB
2691##########################################
2692# libtasn1 - only for the TLS creds/session test suite
2693
2694tasn1=yes
90246037
DB
2695tasn1_cflags=""
2696tasn1_libs=""
9a2fd434 2697if $pkg_config --exists "libtasn1"; then
89138857
SW
2698 tasn1_cflags=$($pkg_config --cflags libtasn1)
2699 tasn1_libs=$($pkg_config --libs libtasn1)
9a2fd434
DB
2700else
2701 tasn1=no
2702fi
2703
ed754746 2704
559607ea
DB
2705##########################################
2706# getifaddrs (for tests/test-io-channel-socket )
2707
2708have_ifaddrs_h=yes
2709if ! check_include "ifaddrs.h" ; then
2710 have_ifaddrs_h=no
2711fi
2712
bbbf9bfb
SW
2713##########################################
2714# VTE probe
2715
2716if test "$vte" != "no"; then
2717 if test "$gtkabi" = "3.0"; then
c6feff9e
CR
2718 vteminversion="0.32.0"
2719 if $pkg_config --exists "vte-2.91"; then
2720 vtepackage="vte-2.91"
2721 else
2722 vtepackage="vte-2.90"
2723 fi
528de90a 2724 else
528de90a 2725 vtepackage="vte"
c6feff9e 2726 vteminversion="0.24.0"
528de90a 2727 fi
c6feff9e 2728 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
89138857
SW
2729 vte_cflags=$($pkg_config --cflags $vtepackage)
2730 vte_libs=$($pkg_config --libs $vtepackage)
2731 vteversion=$($pkg_config --modversion $vtepackage)
bbbf9bfb
SW
2732 libs_softmmu="$vte_libs $libs_softmmu"
2733 vte="yes"
2734 elif test "$vte" = "yes"; then
9e04c683 2735 if test "$gtkabi" = "3.0"; then
c6feff9e 2736 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
9e04c683
SW
2737 else
2738 feature_not_found "vte" "Install libvte devel"
2739 fi
0d185e63 2740 else
bbbf9bfb 2741 vte="no"
a4ccabcf
AL
2742 fi
2743fi
2744
11d9f695
FB
2745##########################################
2746# SDL probe
2747
3ec87ffe
PB
2748# Look for sdl configuration program (pkg-config or sdl-config). Try
2749# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
47c03744 2750
ee8466d0 2751if test "$sdlabi" = ""; then
8f4ea9cd 2752 if $pkg_config --exists "sdl2"; then
ee8466d0 2753 sdlabi=2.0
8f4ea9cd 2754 elif $pkg_config --exists "sdl"; then
ee8466d0 2755 sdlabi=1.2
8f4ea9cd
GH
2756 else
2757 sdlabi=2.0
ee8466d0
CR
2758 fi
2759fi
2760
47c03744
DA
2761if test $sdlabi = "2.0"; then
2762 sdl_config=$sdl2_config
2763 sdlname=sdl2
2764 sdlconfigname=sdl2_config
e07047cf 2765elif test $sdlabi = "1.2"; then
47c03744
DA
2766 sdlname=sdl
2767 sdlconfigname=sdl_config
e07047cf
CR
2768else
2769 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
47c03744
DA
2770fi
2771
89138857 2772if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
47c03744 2773 sdl_config=$sdlconfigname
3ec87ffe
PB
2774fi
2775
47c03744
DA
2776if $pkg_config $sdlname --exists; then
2777 sdlconfig="$pkg_config $sdlname"
89138857 2778 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3ec87ffe
PB
2779elif has ${sdl_config}; then
2780 sdlconfig="$sdl_config"
89138857 2781 sdlversion=$($sdlconfig --version)
a0dfd8a4
LM
2782else
2783 if test "$sdl" = "yes" ; then
8f4ea9cd 2784 feature_not_found "sdl" "Install SDL2-devel"
a0dfd8a4
LM
2785 fi
2786 sdl=no
9316f803 2787fi
29e5bada 2788if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
3ec87ffe
PB
2789 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2790fi
11d9f695 2791
9316f803 2792sdl_too_old=no
c4198157 2793if test "$sdl" != "no" ; then
ac119f9d 2794 cat > $TMPC << EOF
11d9f695
FB
2795#include <SDL.h>
2796#undef main /* We don't want SDL to override our main() */
2797int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2798EOF
89138857 2799 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
74f42e18 2800 if test "$static" = "yes" ; then
5f37e6d4
TH
2801 if $pkg_config $sdlname --exists; then
2802 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2803 else
2804 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2805 fi
74f42e18 2806 else
89138857 2807 sdl_libs=$($sdlconfig --libs 2>/dev/null)
74f42e18 2808 fi
52166aa0 2809 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
89138857 2810 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
ac119f9d
JQ
2811 sdl_too_old=yes
2812 else
a30878e7 2813 sdl=yes
ac119f9d 2814 fi
cd01b4a3 2815
67c274d3 2816 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
ac119f9d 2817 if test "$sdl" = "yes" -a "$static" = "yes" ; then
67c274d3 2818 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
89138857
SW
2819 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2820 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
ac119f9d 2821 fi
52166aa0 2822 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
ac119f9d
JQ
2823 :
2824 else
2825 sdl=no
2826 fi
2827 fi # static link
c4198157
JQ
2828 else # sdl not found
2829 if test "$sdl" = "yes" ; then
21684af0 2830 feature_not_found "sdl" "Install SDL devel"
c4198157
JQ
2831 fi
2832 sdl=no
ac119f9d 2833 fi # sdl compile test
a68551bc 2834fi
11d9f695 2835
5368a422 2836if test "$sdl" = "yes" ; then
ac119f9d 2837 cat > $TMPC <<EOF
5368a422
AL
2838#include <SDL.h>
2839#if defined(SDL_VIDEO_DRIVER_X11)
2840#include <X11/XKBlib.h>
2841#else
2842#error No x11 support
2843#endif
2844int main(void) { return 0; }
2845EOF
f676c67e
JW
2846 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2847 sdl_cflags="$sdl_cflags $x11_cflags"
2848 sdl_libs="$sdl_libs $x11_libs"
ac119f9d 2849 fi
5368a422
AL
2850fi
2851
2da776db
MH
2852##########################################
2853# RDMA needs OpenFabrics libraries
2854if test "$rdma" != "no" ; then
2855 cat > $TMPC <<EOF
2856#include <rdma/rdma_cma.h>
2857int main(void) { return 0; }
2858EOF
2859 rdma_libs="-lrdmacm -libverbs"
2860 if compile_prog "" "$rdma_libs" ; then
2861 rdma="yes"
2da776db
MH
2862 else
2863 if test "$rdma" = "yes" ; then
2864 error_exit \
2865 " OpenFabrics librdmacm/libibverbs not present." \
2866 " Your options:" \
2867 " (1) Fast: Install infiniband packages from your distro." \
2868 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2869 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2870 fi
2871 rdma="no"
2872 fi
2873fi
2874
95c6bff3 2875
2f9606b3
AL
2876##########################################
2877# VNC SASL detection
821601ea 2878if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
ea784e3b 2879 cat > $TMPC <<EOF
2f9606b3
AL
2880#include <sasl/sasl.h>
2881#include <stdio.h>
2882int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2883EOF
ea784e3b
JQ
2884 # Assuming Cyrus-SASL installed in /usr prefix
2885 vnc_sasl_cflags=""
2886 vnc_sasl_libs="-lsasl2"
2887 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2888 vnc_sasl=yes
2889 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
ca273d58 2890 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
ea784e3b
JQ
2891 else
2892 if test "$vnc_sasl" = "yes" ; then
21684af0 2893 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2f9606b3 2894 fi
ea784e3b
JQ
2895 vnc_sasl=no
2896 fi
2f9606b3
AL
2897fi
2898
2f6f5c7a
CC
2899##########################################
2900# VNC JPEG detection
821601ea 2901if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2f6f5c7a
CC
2902cat > $TMPC <<EOF
2903#include <stdio.h>
2904#include <jpeglib.h>
2905int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2906EOF
2907 vnc_jpeg_cflags=""
2908 vnc_jpeg_libs="-ljpeg"
2909 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2910 vnc_jpeg=yes
2911 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
ca273d58 2912 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2f6f5c7a
CC
2913 else
2914 if test "$vnc_jpeg" = "yes" ; then
21684af0 2915 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2f6f5c7a
CC
2916 fi
2917 vnc_jpeg=no
2918 fi
2919fi
2920
efe556ad
CC
2921##########################################
2922# VNC PNG detection
821601ea 2923if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
efe556ad
CC
2924cat > $TMPC <<EOF
2925//#include <stdio.h>
2926#include <png.h>
832ce9c2 2927#include <stddef.h>
efe556ad
CC
2928int main(void) {
2929 png_structp png_ptr;
2930 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
7edc3fed 2931 return png_ptr != 0;
efe556ad
CC
2932}
2933EOF
65d5d3f9 2934 if $pkg_config libpng --exists; then
89138857
SW
2935 vnc_png_cflags=$($pkg_config libpng --cflags)
2936 vnc_png_libs=$($pkg_config libpng --libs)
9af8025e 2937 else
efe556ad
CC
2938 vnc_png_cflags=""
2939 vnc_png_libs="-lpng"
9af8025e 2940 fi
efe556ad
CC
2941 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2942 vnc_png=yes
2943 libs_softmmu="$vnc_png_libs $libs_softmmu"
9af8025e 2944 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
efe556ad
CC
2945 else
2946 if test "$vnc_png" = "yes" ; then
21684af0 2947 feature_not_found "vnc-png" "Install libpng devel"
efe556ad
CC
2948 fi
2949 vnc_png=no
2950 fi
2951fi
2952
6a021536
GH
2953##########################################
2954# xkbcommon probe
2955if test "$xkbcommon" != "no" ; then
2956 if $pkg_config xkbcommon --exists; then
2957 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
2958 xkbcommon_libs=$($pkg_config xkbcommon --libs)
2959 xkbcommon=yes
2960 else
2961 if test "$xkbcommon" = "yes" ; then
2962 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
2963 fi
2964 xkbcommon=no
2965 fi
2966fi
2967
76655d6d
AL
2968##########################################
2969# fnmatch() probe, used for ACL routines
2970fnmatch="no"
2971cat > $TMPC << EOF
2972#include <fnmatch.h>
2973int main(void)
2974{
2975 fnmatch("foo", "foo", 0);
2976 return 0;
2977}
2978EOF
52166aa0 2979if compile_prog "" "" ; then
76655d6d
AL
2980 fnmatch="yes"
2981fi
2982
ee682d27 2983##########################################
c1bb86cd 2984# xfsctl() probe, used for file-posix.c
dce512de
CH
2985if test "$xfs" != "no" ; then
2986 cat > $TMPC << EOF
ffc41d10 2987#include <stddef.h> /* NULL */
dce512de
CH
2988#include <xfs/xfs.h>
2989int main(void)
2990{
2991 xfsctl(NULL, 0, 0, NULL);
2992 return 0;
2993}
2994EOF
2995 if compile_prog "" "" ; then
2996 xfs="yes"
2997 else
2998 if test "$xfs" = "yes" ; then
21684af0 2999 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
dce512de
CH
3000 fi
3001 xfs=no
3002 fi
3003fi
3004
8a16d273
TS
3005##########################################
3006# vde libraries probe
dfb278bd 3007if test "$vde" != "no" ; then
4baae0ac 3008 vde_libs="-lvdeplug"
8a16d273
TS
3009 cat > $TMPC << EOF
3010#include <libvdeplug.h>
4a7f0e06
PB
3011int main(void)
3012{
3013 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
3014 char s[] = "";
3015 vde_open(s, s, &a);
4a7f0e06
PB
3016 return 0;
3017}
8a16d273 3018EOF
52166aa0 3019 if compile_prog "" "$vde_libs" ; then
4baae0ac 3020 vde=yes
dfb278bd
JQ
3021 else
3022 if test "$vde" = "yes" ; then
21684af0 3023 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
3024 fi
3025 vde=no
4baae0ac 3026 fi
8a16d273
TS
3027fi
3028
58952137 3029##########################################
0a985b37
VM
3030# netmap support probe
3031# Apart from looking for netmap headers, we make sure that the host API version
3032# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3033# a minor/major version number. Minor new features will be marked with values up
3034# to 15, and if something happens that requires a change to the backend we will
3035# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
3036if test "$netmap" != "no" ; then
3037 cat > $TMPC << EOF
3038#include <inttypes.h>
3039#include <net/if.h>
3040#include <net/netmap.h>
3041#include <net/netmap_user.h>
0a985b37
VM
3042#if (NETMAP_API < 11) || (NETMAP_API > 15)
3043#error
3044#endif
58952137
VM
3045int main(void) { return 0; }
3046EOF
3047 if compile_prog "" "" ; then
3048 netmap=yes
3049 else
3050 if test "$netmap" = "yes" ; then
3051 feature_not_found "netmap"
3052 fi
3053 netmap=no
3054 fi
3055fi
3056
47e98658
CB
3057##########################################
3058# libcap-ng library probe
3059if test "$cap_ng" != "no" ; then
3060 cap_libs="-lcap-ng"
3061 cat > $TMPC << EOF
3062#include <cap-ng.h>
3063int main(void)
3064{
3065 capng_capability_to_name(CAPNG_EFFECTIVE);
3066 return 0;
3067}
3068EOF
3069 if compile_prog "" "$cap_libs" ; then
3070 cap_ng=yes
3071 libs_tools="$cap_libs $libs_tools"
3072 else
3073 if test "$cap_ng" = "yes" ; then
21684af0 3074 feature_not_found "cap_ng" "Install libcap-ng devel"
47e98658
CB
3075 fi
3076 cap_ng=no
3077 fi
3078fi
3079
8f28f3fb 3080##########################################
c2de5c91 3081# Sound support libraries probe
8f28f3fb 3082
c2de5c91 3083audio_drv_probe()
3084{
3085 drv=$1
3086 hdr=$2
3087 lib=$3
3088 exp=$4
3089 cfl=$5
3090 cat > $TMPC << EOF
3091#include <$hdr>
3092int main(void) { $exp }
8f28f3fb 3093EOF
52166aa0 3094 if compile_prog "$cfl" "$lib" ; then
c2de5c91 3095 :
3096 else
76ad07a4
PM
3097 error_exit "$drv check failed" \
3098 "Make sure to have the $drv libs and headers installed."
c2de5c91 3099 fi
3100}
3101
89138857 3102audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
c2de5c91 3103for drv in $audio_drv_list; do
3104 case $drv in
3105 alsa)
3106 audio_drv_probe $drv alsa/asoundlib.h -lasound \
e35bcb0c 3107 "return snd_pcm_close((snd_pcm_t *)0);"
b1149911 3108 alsa_libs="-lasound"
c2de5c91 3109 ;;
3110
b8e59f18 3111 pa)
e58ff62d
PK
3112 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3113 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
b1149911 3114 pulse_libs="-lpulse"
67f86e8e 3115 audio_pt_int="yes"
b8e59f18 3116 ;;
3117
373967b2
GH
3118 sdl)
3119 if test "$sdl" = "no"; then
3120 error_exit "sdl not found or disabled, can not use sdl audio driver"
3121 fi
3122 ;;
3123
997e690a 3124 coreaudio)
b1149911 3125 coreaudio_libs="-framework CoreAudio"
997e690a
JQ
3126 ;;
3127
a4bf6780 3128 dsound)
b1149911 3129 dsound_libs="-lole32 -ldxguid"
d5631638 3130 audio_win_int="yes"
a4bf6780
JQ
3131 ;;
3132
3133 oss)
b1149911 3134 oss_libs="$oss_lib"
a4bf6780
JQ
3135 ;;
3136
373967b2
GH
3137 wav)
3138 # XXX: Probes for CoreAudio, DirectSound
2f6a1ab0
BS
3139 ;;
3140
e4c63a6a 3141 *)
1c9b2a52 3142 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
3143 error_exit "Unknown driver '$drv' selected" \
3144 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 3145 }
3146 ;;
c2de5c91 3147 esac
3148done
8f28f3fb 3149
2e4d9fb1
AJ
3150##########################################
3151# BrlAPI probe
3152
4ffcedb6 3153if test "$brlapi" != "no" ; then
eb82284f
JQ
3154 brlapi_libs="-lbrlapi"
3155 cat > $TMPC << EOF
2e4d9fb1 3156#include <brlapi.h>
832ce9c2 3157#include <stddef.h>
2e4d9fb1
AJ
3158int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3159EOF
52166aa0 3160 if compile_prog "" "$brlapi_libs" ; then
eb82284f 3161 brlapi=yes
4ffcedb6
JQ
3162 else
3163 if test "$brlapi" = "yes" ; then
21684af0 3164 feature_not_found "brlapi" "Install brlapi devel"
4ffcedb6
JQ
3165 fi
3166 brlapi=no
eb82284f
JQ
3167 fi
3168fi
2e4d9fb1 3169
4d3b6f6e
AZ
3170##########################################
3171# curses probe
a3605bf6
MT
3172if test "$curses" != "no" ; then
3173 if test "$mingw32" = "yes" ; then
8ddc5bf9
ST
3174 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3175 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
a3605bf6 3176 else
7c703002 3177 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
8ddc5bf9 3178 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
a3605bf6 3179 fi
c584a6d0 3180 curses_found=no
4d3b6f6e 3181 cat > $TMPC << EOF
8ddc5bf9 3182#include <locale.h>
4d3b6f6e 3183#include <curses.h>
8ddc5bf9 3184#include <wchar.h>
ef9a2524 3185int main(void) {
8ddc5bf9
ST
3186 wchar_t wch = L'w';
3187 setlocale(LC_ALL, "");
ef9a2524 3188 resize_term(0, 0);
8ddc5bf9
ST
3189 addwstr(L"wide chars\n");
3190 addnwstr(&wch, 1);
7c703002 3191 add_wch(WACS_DEGREE);
271f37ab 3192 return 0;
ef9a2524 3193}
4d3b6f6e 3194EOF
ecbe251f 3195 IFS=:
8ddc5bf9 3196 for curses_inc in $curses_inc_list; do
b01a4fd3
PM
3197 # Make sure we get the wide character prototypes
3198 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
7c703002 3199 IFS=:
8ddc5bf9
ST
3200 for curses_lib in $curses_lib_list; do
3201 unset IFS
3202 if compile_prog "$curses_inc" "$curses_lib" ; then
3203 curses_found=yes
3204 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3205 libs_softmmu="$curses_lib $libs_softmmu"
3206 break
3207 fi
3208 done
7c703002
ST
3209 if test "$curses_found" = yes ; then
3210 break
3211 fi
4f78ef9a 3212 done
ecbe251f 3213 unset IFS
c584a6d0
JQ
3214 if test "$curses_found" = "yes" ; then
3215 curses=yes
3216 else
3217 if test "$curses" = "yes" ; then
21684af0 3218 feature_not_found "curses" "Install ncurses devel"
c584a6d0
JQ
3219 fi
3220 curses=no
3221 fi
4f78ef9a 3222fi
4d3b6f6e 3223
769ce76d
AG
3224##########################################
3225# curl probe
788c8196 3226if test "$curl" != "no" ; then
65d5d3f9 3227 if $pkg_config libcurl --exists; then
a3605bf6
MT
3228 curlconfig="$pkg_config libcurl"
3229 else
3230 curlconfig=curl-config
3231 fi
769ce76d
AG
3232 cat > $TMPC << EOF
3233#include <curl/curl.h>
0b862ced 3234int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
769ce76d 3235EOF
89138857
SW
3236 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3237 curl_libs=$($curlconfig --libs 2>/dev/null)
b1d5a277 3238 if compile_prog "$curl_cflags" "$curl_libs" ; then
769ce76d 3239 curl=yes
788c8196
JQ
3240 else
3241 if test "$curl" = "yes" ; then
21684af0 3242 feature_not_found "curl" "Install libcurl devel"
788c8196
JQ
3243 fi
3244 curl=no
769ce76d
AG
3245 fi
3246fi # test "$curl"
3247
fb599c9a
AZ
3248##########################################
3249# bluez support probe
a20a6f46 3250if test "$bluez" != "no" ; then
e820e3f4
AZ
3251 cat > $TMPC << EOF
3252#include <bluetooth/bluetooth.h>
3253int main(void) { return bt_error(0); }
3254EOF
89138857
SW
3255 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3256 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
52166aa0 3257 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
a20a6f46 3258 bluez=yes
e482d56a 3259 libs_softmmu="$bluez_libs $libs_softmmu"
e820e3f4 3260 else
a20a6f46 3261 if test "$bluez" = "yes" ; then
21684af0 3262 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
a20a6f46 3263 fi
e820e3f4
AZ
3264 bluez="no"
3265 fi
fb599c9a
AZ
3266fi
3267
e18df141
AL
3268##########################################
3269# glib support probe
a52d28af 3270
ad04d8cb
PM
3271if test "$mingw32" = yes; then
3272 glib_req_ver=2.30
3273else
3274 glib_req_ver=2.22
3275fi
aa0d1f44
PB
3276glib_modules=gthread-2.0
3277if test "$modules" = yes; then
3278 glib_modules="$glib_modules gmodule-2.0"
3279fi
e26110cf 3280
4eaf7202
SJ
3281# This workaround is required due to a bug in pkg-config file for glib as it
3282# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3283
3284if test "$static" = yes -a "$mingw32" = yes; then
3285 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3286fi
3287
aa0d1f44 3288for i in $glib_modules; do
e26110cf 3289 if $pkg_config --atleast-version=$glib_req_ver $i; then
89138857
SW
3290 glib_cflags=$($pkg_config --cflags $i)
3291 glib_libs=$($pkg_config --libs $i)
4a058899 3292 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
e26110cf
FZ
3293 LIBS="$glib_libs $LIBS"
3294 libs_qga="$glib_libs $libs_qga"
3295 else
3296 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3297 fi
3298done
3299
977a82ab
DB
3300# Sanity check that the current size_t matches the
3301# size that glib thinks it should be. This catches
3302# problems on multi-arch where people try to build
3303# 32-bit QEMU while pointing at 64-bit glib headers
3304cat > $TMPC <<EOF
3305#include <glib.h>
3306#include <unistd.h>
3307
3308#define QEMU_BUILD_BUG_ON(x) \
3309 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3310
3311int main(void) {
3312 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3313 return 0;
3314}
3315EOF
3316
5919e032 3317if ! compile_prog "$CFLAGS" "$LIBS" ; then
977a82ab
DB
3318 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3319 "You probably need to set PKG_CONFIG_LIBDIR"\
3320 "to point to the right pkg-config files for your"\
3321 "build target"
3322fi
3323
9d41401b
MT
3324# g_test_trap_subprocess added in 2.38. Used by some tests.
3325glib_subprocess=yes
a049223a 3326if ! $pkg_config --atleast-version=2.38 glib-2.0; then
9d41401b
MT
3327 glib_subprocess=no
3328fi
3329
bbbf2e04
JS
3330# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3331cat > $TMPC << EOF
3332#include <glib.h>
3333int main(void) { return 0; }
3334EOF
3335if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3336 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3337 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3338 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3339 fi
3340fi
3341
e26110cf
FZ
3342##########################################
3343# SHA command probe for modules
3344if test "$modules" = yes; then
3345 shacmd_probe="sha1sum sha1 shasum"
3346 for c in $shacmd_probe; do
8ccefb91 3347 if has $c; then
e26110cf
FZ
3348 shacmd="$c"
3349 break
3350 fi
3351 done
3352 if test "$shacmd" = ""; then
3353 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3354 fi
e18df141
AL
3355fi
3356
e2134eb9
GH
3357##########################################
3358# pixman support probe
3359
35c4e86c 3360if test "$want_tools" = "no" -a "$softmmu" = "no"; then
74880fe2
RS
3361 pixman_cflags=
3362 pixman_libs=
35c4e86c 3363elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
89138857
SW
3364 pixman_cflags=$($pkg_config --cflags pixman-1)
3365 pixman_libs=$($pkg_config --libs pixman-1)
e2134eb9 3366else
c12b6d70
GH
3367 error_exit "pixman >= 0.21.8 not present." \
3368 "Please install the pixman devel package."
e2134eb9 3369fi
e2134eb9 3370
fe8fc5ae
PB
3371##########################################
3372# libmpathpersist probe
3373
3374if test "$mpath" != "no" ; then
3375 cat > $TMPC <<EOF
3376#include <libudev.h>
3377#include <mpath_persist.h>
3378unsigned mpath_mx_alloc_len = 1024;
3379int logsink;
b3f1c8c4
PB
3380static struct config *multipath_conf;
3381extern struct udev *udev;
3382extern struct config *get_multipath_config(void);
3383extern void put_multipath_config(struct config *conf);
3384struct udev *udev;
3385struct config *get_multipath_config(void) { return multipath_conf; }
3386void put_multipath_config(struct config *conf) { }
3387
fe8fc5ae 3388int main(void) {
b3f1c8c4
PB
3389 udev = udev_new();
3390 multipath_conf = mpath_lib_init();
fe8fc5ae
PB
3391 return 0;
3392}
3393EOF
3394 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3395 mpathpersist=yes
3396 else
3397 mpathpersist=no
3398 fi
3399else
3400 mpathpersist=no
3401fi
3402
17bff52b
MK
3403##########################################
3404# libcap probe
3405
3406if test "$cap" != "no" ; then
3407 cat > $TMPC <<EOF
3408#include <stdio.h>
3409#include <sys/capability.h>
cc939743 3410int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
17bff52b
MK
3411EOF
3412 if compile_prog "" "-lcap" ; then
3413 cap=yes
3414 else
3415 cap=no
3416 fi
3417fi
3418
414f0dab 3419##########################################
e5d355d1 3420# pthread probe
4b29ec41 3421PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 3422
4dd75c70 3423pthread=no
e5d355d1 3424cat > $TMPC << EOF
3c529d93 3425#include <pthread.h>
7a42bbe4
SW
3426static void *f(void *p) { return NULL; }
3427int main(void) {
3428 pthread_t thread;
3429 pthread_create(&thread, 0, f, 0);
3430 return 0;
3431}
414f0dab 3432EOF
bd00d539
AF
3433if compile_prog "" "" ; then
3434 pthread=yes
3435else
3436 for pthread_lib in $PTHREADLIBS_LIST; do
3437 if compile_prog "" "$pthread_lib" ; then
3438 pthread=yes
e3c56761
PP
3439 found=no
3440 for lib_entry in $LIBS; do
3441 if test "$lib_entry" = "$pthread_lib"; then
3442 found=yes
3443 break
3444 fi
3445 done
3446 if test "$found" = "no"; then
3447 LIBS="$pthread_lib $LIBS"
3448 fi
409437e1 3449 PTHREAD_LIB="$pthread_lib"
bd00d539
AF
3450 break
3451 fi
3452 done
3453fi
414f0dab 3454
4617e593 3455if test "$mingw32" != yes -a "$pthread" = no; then
76ad07a4
PM
3456 error_exit "pthread check failed" \
3457 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3458fi
3459
5c312079
DDAG
3460# check for pthread_setname_np
3461pthread_setname_np=no
3462cat > $TMPC << EOF
3463#include <pthread.h>
3464
3465static void *f(void *p) { return NULL; }
3466int main(void)
3467{
3468 pthread_t thread;
3469 pthread_create(&thread, 0, f, 0);
3470 pthread_setname_np(thread, "QEMU");
3471 return 0;
3472}
3473EOF
3474if compile_prog "" "$pthread_lib" ; then
3475 pthread_setname_np=yes
3476fi
3477
f27aaf4b
CB
3478##########################################
3479# rbd probe
3480if test "$rbd" != "no" ; then
3481 cat > $TMPC <<EOF
3482#include <stdio.h>
ad32e9c0 3483#include <rbd/librbd.h>
f27aaf4b 3484int main(void) {
ad32e9c0
JD
3485 rados_t cluster;
3486 rados_create(&cluster, NULL);
f27aaf4b
CB
3487 return 0;
3488}
3489EOF
ad32e9c0
JD
3490 rbd_libs="-lrbd -lrados"
3491 if compile_prog "" "$rbd_libs" ; then
3492 rbd=yes
f27aaf4b
CB
3493 else
3494 if test "$rbd" = "yes" ; then
21684af0 3495 feature_not_found "rados block device" "Install librbd/ceph devel"
f27aaf4b
CB
3496 fi
3497 rbd=no
3498 fi
f27aaf4b
CB
3499fi
3500
0a12ec87
RJ
3501##########################################
3502# libssh2 probe
4fc16838 3503min_libssh2_version=1.2.8
0a12ec87 3504if test "$libssh2" != "no" ; then
65d5d3f9 3505 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
89138857
SW
3506 libssh2_cflags=$($pkg_config libssh2 --cflags)
3507 libssh2_libs=$($pkg_config libssh2 --libs)
0a12ec87 3508 libssh2=yes
0a12ec87
RJ
3509 else
3510 if test "$libssh2" = "yes" ; then
4fc16838 3511 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
0a12ec87
RJ
3512 fi
3513 libssh2=no
3514 fi
3515fi
3516
9a2d462e
RJ
3517##########################################
3518# libssh2_sftp_fsync probe
3519
3520if test "$libssh2" = "yes"; then
3521 cat > $TMPC <<EOF
3522#include <stdio.h>
3523#include <libssh2.h>
3524#include <libssh2_sftp.h>
3525int main(void) {
3526 LIBSSH2_SESSION *session;
3527 LIBSSH2_SFTP *sftp;
3528 LIBSSH2_SFTP_HANDLE *sftp_handle;
3529 session = libssh2_session_init ();
3530 sftp = libssh2_sftp_init (session);
3531 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3532 libssh2_sftp_fsync (sftp_handle);
3533 return 0;
3534}
3535EOF
3536 # libssh2_cflags/libssh2_libs defined in previous test.
3537 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3538 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3539 fi
3540fi
3541
5c6c3a6c
CH
3542##########################################
3543# linux-aio probe
5c6c3a6c
CH
3544
3545if test "$linux_aio" != "no" ; then
3546 cat > $TMPC <<EOF
3547#include <libaio.h>
3548#include <sys/eventfd.h>
832ce9c2 3549#include <stddef.h>
5c6c3a6c
CH
3550int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3551EOF
3552 if compile_prog "" "-laio" ; then
3553 linux_aio=yes
5c6c3a6c
CH
3554 else
3555 if test "$linux_aio" = "yes" ; then
21684af0 3556 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3557 fi
3cfcae3c 3558 linux_aio=no
5c6c3a6c
CH
3559 fi
3560fi
3561
3b8acc11
PB
3562##########################################
3563# TPM passthrough is only on x86 Linux
3564
3565if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3566 tpm_passthrough=$tpm
3567else
3568 tpm_passthrough=no
3569fi
3570
f4ede81e
AV
3571# TPM emulator is for all posix systems
3572if test "$mingw32" != "yes"; then
3573 tpm_emulator=$tpm
3574else
3575 tpm_emulator=no
3576fi
758e8e38
VJ
3577##########################################
3578# attr probe
3579
3580if test "$attr" != "no" ; then
3581 cat > $TMPC <<EOF
3582#include <stdio.h>
3583#include <sys/types.h>
f2338fb4
PB
3584#ifdef CONFIG_LIBATTR
3585#include <attr/xattr.h>
3586#else
4f26f2b6 3587#include <sys/xattr.h>
f2338fb4 3588#endif
758e8e38
VJ
3589int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3590EOF
4f26f2b6
AK
3591 if compile_prog "" "" ; then
3592 attr=yes
3593 # Older distros have <attr/xattr.h>, and need -lattr:
f2338fb4 3594 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
758e8e38
VJ
3595 attr=yes
3596 LIBS="-lattr $LIBS"
4f26f2b6 3597 libattr=yes
758e8e38
VJ
3598 else
3599 if test "$attr" = "yes" ; then
21684af0 3600 feature_not_found "ATTR" "Install libc6 or libattr devel"
758e8e38
VJ
3601 fi
3602 attr=no
3603 fi
3604fi
3605
bf9298b9
AL
3606##########################################
3607# iovec probe
3608cat > $TMPC <<EOF
db34f0b3 3609#include <sys/types.h>
bf9298b9 3610#include <sys/uio.h>
db34f0b3 3611#include <unistd.h>
f91f9bee 3612int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3613EOF
3614iovec=no
52166aa0 3615if compile_prog "" "" ; then
bf9298b9
AL
3616 iovec=yes
3617fi
3618
ceb42de8
AL
3619##########################################
3620# preadv probe
3621cat > $TMPC <<EOF
3622#include <sys/types.h>
3623#include <sys/uio.h>
3624#include <unistd.h>
c075a723 3625int main(void) { return preadv(0, 0, 0, 0); }
ceb42de8
AL
3626EOF
3627preadv=no
52166aa0 3628if compile_prog "" "" ; then
ceb42de8
AL
3629 preadv=yes
3630fi
3631
f652e6af
AJ
3632##########################################
3633# fdt probe
e169e1e1
PM
3634# fdt support is mandatory for at least some target architectures,
3635# so insist on it if we're building those system emulators.
3636fdt_required=no
3637for target in $target_list; do
3638 case $target in
df1d8a1f 3639 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
e169e1e1
PM
3640 fdt_required=yes
3641 ;;
3642 esac
3643done
3644
3645if test "$fdt_required" = "yes"; then
3646 if test "$fdt" = "no"; then
3647 error_exit "fdt disabled but some requested targets require it." \
3648 "You can turn off fdt only if you also disable all the system emulation" \
3649 "targets which need it (by specifying a cut down --target-list)."
3650 fi
3651 fdt=yes
3652fi
3653
2df87df7 3654if test "$fdt" != "no" ; then
b41af4ba 3655 fdt_libs="-lfdt"
96ce6545 3656 # explicitly check for libfdt_env.h as it is missing in some stable installs
6e85fce0 3657 # and test for required functions to make sure we are on a version >= 1.4.2
b41af4ba 3658 cat > $TMPC << EOF
31ce0adb 3659#include <libfdt.h>
96ce6545 3660#include <libfdt_env.h>
6e85fce0 3661int main(void) { fdt_first_subnode(0, 0); return 0; }
f652e6af 3662EOF
52166aa0 3663 if compile_prog "" "$fdt_libs" ; then
a540f158 3664 # system DTC is good - use it
f652e6af 3665 fdt=yes
a540f158 3666 else
aef45d51
DB
3667 # have GIT checkout, so activate dtc submodule
3668 if test -e "${source_path}/.git" ; then
3669 git_submodules="${git_submodules} dtc"
3670 fi
3671 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3672 fdt=yes
3673 dtc_internal="yes"
3674 mkdir -p dtc
3675 if [ "$pwd_is_source_path" != "y" ] ; then
3676 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3677 symlink "$source_path/dtc/scripts" "dtc/scripts"
3678 fi
3679 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3680 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3681 elif test "$fdt" = "yes" ; then
3682 # Not a git build & no libfdt found, prompt for system install
3683 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3684 "Please install the DTC (libfdt) devel package"
3685 else
3686 # don't have and don't want
3687 fdt_libs=
3688 fdt=no
3689 fi
f652e6af
AJ
3690 fi
3691fi
3692
a540f158
PC
3693libs_softmmu="$libs_softmmu $fdt_libs"
3694
20ff075b 3695##########################################
fb719563 3696# opengl probe (for sdl2, gtk, milkymist-tmu2)
b1546f32 3697
da076ffe 3698if test "$opengl" != "no" ; then
014cb152 3699 opengl_pkgs="epoxy libdrm gbm"
fb719563 3700 if $pkg_config $opengl_pkgs x11; then
f676c67e
JW
3701 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3702 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
da076ffe 3703 opengl=yes
925a0400
GH
3704 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3705 gtk_gl="yes"
3706 fi
cc720a5d 3707 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
20ff075b 3708 else
da076ffe 3709 if test "$opengl" = "yes" ; then
dcf30025 3710 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
20ff075b 3711 fi
f676c67e 3712 opengl_cflags=""
da076ffe
GH
3713 opengl_libs=""
3714 opengl=no
20ff075b
MW
3715 fi
3716fi
3717
014cb152
GH
3718if test "$opengl" = "yes"; then
3719 cat > $TMPC << EOF
3720#include <epoxy/egl.h>
3721#ifndef EGL_MESA_image_dma_buf_export
3722# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3723#endif
3724int main(void) { return 0; }
3725EOF
3726 if compile_prog "" "" ; then
3727 opengl_dmabuf=yes
3728 fi
3729fi
c9a12e75 3730
c9a12e75 3731
eb100396
BR
3732##########################################
3733# glusterfs probe
3734if test "$glusterfs" != "no" ; then
65d5d3f9 3735 if $pkg_config --atleast-version=3 glusterfs-api; then
e01bee08 3736 glusterfs="yes"
89138857
SW
3737 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3738 glusterfs_libs=$($pkg_config --libs glusterfs-api)
d85fa9eb
JC
3739 if $pkg_config --atleast-version=4 glusterfs-api; then
3740 glusterfs_xlator_opt="yes"
3741 fi
65d5d3f9 3742 if $pkg_config --atleast-version=5 glusterfs-api; then
0c14fb47
BR
3743 glusterfs_discard="yes"
3744 fi
7c815372 3745 if $pkg_config --atleast-version=6 glusterfs-api; then
df3a429a 3746 glusterfs_fallocate="yes"
7c815372
BR
3747 glusterfs_zerofill="yes"
3748 fi
eb100396
BR
3749 else
3750 if test "$glusterfs" = "yes" ; then
8efc9363
HT
3751 feature_not_found "GlusterFS backend support" \
3752 "Install glusterfs-api devel >= 3"
eb100396 3753 fi
e01bee08 3754 glusterfs="no"
eb100396
BR
3755 fi
3756fi
3757
39386ac7 3758# Check for inotify functions when we are building linux-user
3b3f24ad
AJ
3759# emulator. This is done because older glibc versions don't
3760# have syscall stubs for these implemented. In that case we
3761# don't provide them even if kernel supports them.
3762#
3763inotify=no
67ba57f6 3764cat > $TMPC << EOF
3b3f24ad
AJ
3765#include <sys/inotify.h>
3766
3767int
3768main(void)
3769{
3770 /* try to start inotify */
8690e420 3771 return inotify_init();
3b3f24ad
AJ
3772}
3773EOF
52166aa0 3774if compile_prog "" "" ; then
67ba57f6 3775 inotify=yes
3b3f24ad
AJ
3776fi
3777
c05c7a73
RV
3778inotify1=no
3779cat > $TMPC << EOF
3780#include <sys/inotify.h>
3781
3782int
3783main(void)
3784{
3785 /* try to start inotify */
3786 return inotify_init1(0);
3787}
3788EOF
3789if compile_prog "" "" ; then
3790 inotify1=yes
3791fi
3792
099d6b0f
RV
3793# check if pipe2 is there
3794pipe2=no
3795cat > $TMPC << EOF
099d6b0f
RV
3796#include <unistd.h>
3797#include <fcntl.h>
3798
3799int main(void)
3800{
3801 int pipefd[2];
9bca8162 3802 return pipe2(pipefd, O_CLOEXEC);
099d6b0f
RV
3803}
3804EOF
52166aa0 3805if compile_prog "" "" ; then
099d6b0f
RV
3806 pipe2=yes
3807fi
3808
40ff6d7e
KW
3809# check if accept4 is there
3810accept4=no
3811cat > $TMPC << EOF
40ff6d7e
KW
3812#include <sys/socket.h>
3813#include <stddef.h>
3814
3815int main(void)
3816{
3817 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3818 return 0;
3819}
3820EOF
3821if compile_prog "" "" ; then
3822 accept4=yes
3823fi
3824
3ce34dfb
VS
3825# check if tee/splice is there. vmsplice was added same time.
3826splice=no
3827cat > $TMPC << EOF
3ce34dfb
VS
3828#include <unistd.h>
3829#include <fcntl.h>
3830#include <limits.h>
3831
3832int main(void)
3833{
66ea0f22 3834 int len, fd = 0;
3ce34dfb
VS
3835 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3836 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3837 return 0;
3838}
3839EOF
52166aa0 3840if compile_prog "" "" ; then
3ce34dfb
VS
3841 splice=yes
3842fi
3843
a99d57bb
WG
3844##########################################
3845# libnuma probe
3846
3847if test "$numa" != "no" ; then
3848 cat > $TMPC << EOF
3849#include <numa.h>
3850int main(void) { return numa_available(); }
3851EOF
3852
3853 if compile_prog "" "-lnuma" ; then
3854 numa=yes
3855 libs_softmmu="-lnuma $libs_softmmu"
3856 else
3857 if test "$numa" = "yes" ; then
3858 feature_not_found "numa" "install numactl devel"
3859 fi
3860 numa=no
3861 fi
3862fi
3863
7b01cb97
AD
3864if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3865 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3866 exit 1
3867fi
3868
5a22ab71
YZ
3869# Even if malloc_trim() is available, these non-libc memory allocators
3870# do not support it.
3871if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
3872 if test "$malloc_trim" = "yes" ; then
3873 echo "Disabling malloc_trim with non-libc memory allocator"
3874 fi
3875 malloc_trim="no"
3876fi
3877
3878#######################################
3879# malloc_trim
3880
3881if test "$malloc_trim" != "no" ; then
3882 cat > $TMPC << EOF
3883#include <malloc.h>
3884int main(void) { malloc_trim(0); return 0; }
3885EOF
3886 if compile_prog "" "" ; then
3887 malloc_trim="yes"
3888 else
3889 malloc_trim="no"
3890 fi
3891fi
3892
2847b469
FZ
3893##########################################
3894# tcmalloc probe
3895
3896if test "$tcmalloc" = "yes" ; then
3897 cat > $TMPC << EOF
3898#include <stdlib.h>
3899int main(void) { malloc(1); return 0; }
3900EOF
3901
3902 if compile_prog "" "-ltcmalloc" ; then
3903 LIBS="-ltcmalloc $LIBS"
3904 else
3905 feature_not_found "tcmalloc" "install gperftools devel"
3906 fi
3907fi
3908
7b01cb97
AD
3909##########################################
3910# jemalloc probe
3911
3912if test "$jemalloc" = "yes" ; then
3913 cat > $TMPC << EOF
3914#include <stdlib.h>
3915int main(void) { malloc(1); return 0; }
3916EOF
3917
3918 if compile_prog "" "-ljemalloc" ; then
3919 LIBS="-ljemalloc $LIBS"
3920 else
3921 feature_not_found "jemalloc" "install jemalloc devel"
3922 fi
3923fi
3924
dcc38d1c
MT
3925##########################################
3926# signalfd probe
3927signalfd="no"
3928cat > $TMPC << EOF
dcc38d1c
MT
3929#include <unistd.h>
3930#include <sys/syscall.h>
3931#include <signal.h>
3932int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3933EOF
3934
3935if compile_prog "" "" ; then
3936 signalfd=yes
3937fi
3938
c2882b96
RV
3939# check if eventfd is supported
3940eventfd=no
3941cat > $TMPC << EOF
3942#include <sys/eventfd.h>
3943
3944int main(void)
3945{
55cc7f3e 3946 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
c2882b96
RV
3947}
3948EOF
3949if compile_prog "" "" ; then
3950 eventfd=yes
3951fi
3952
751bcc39
MAL
3953# check if memfd is supported
3954memfd=no
3955cat > $TMPC << EOF
75e5b70e 3956#include <sys/mman.h>
751bcc39
MAL
3957
3958int main(void)
3959{
3960 return memfd_create("foo", MFD_ALLOW_SEALING);
3961}
3962EOF
3963if compile_prog "" "" ; then
3964 memfd=yes
3965fi
3966
3967
3968
d0927938
UH
3969# check for fallocate
3970fallocate=no
3971cat > $TMPC << EOF
3972#include <fcntl.h>
3973
3974int main(void)
3975{
3976 fallocate(0, 0, 0, 0);
3977 return 0;
3978}
3979EOF
8fb03151 3980if compile_prog "" "" ; then
d0927938
UH
3981 fallocate=yes
3982fi
3983
3d4fa43e
KK
3984# check for fallocate hole punching
3985fallocate_punch_hole=no
3986cat > $TMPC << EOF
3987#include <fcntl.h>
3988#include <linux/falloc.h>
3989
3990int main(void)
3991{
3992 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3993 return 0;
3994}
3995EOF
3996if compile_prog "" "" ; then
3997 fallocate_punch_hole=yes
3998fi
3999
b953f075
DL
4000# check that fallocate supports range zeroing inside the file
4001fallocate_zero_range=no
4002cat > $TMPC << EOF
4003#include <fcntl.h>
4004#include <linux/falloc.h>
4005
4006int main(void)
4007{
4008 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4009 return 0;
4010}
4011EOF
4012if compile_prog "" "" ; then
4013 fallocate_zero_range=yes
4014fi
4015
ed911435
KW
4016# check for posix_fallocate
4017posix_fallocate=no
4018cat > $TMPC << EOF
4019#include <fcntl.h>
4020
4021int main(void)
4022{
4023 posix_fallocate(0, 0, 0);
4024 return 0;
4025}
4026EOF
4027if compile_prog "" "" ; then
4028 posix_fallocate=yes
4029fi
4030
c727f47d
PM
4031# check for sync_file_range
4032sync_file_range=no
4033cat > $TMPC << EOF
4034#include <fcntl.h>
4035
4036int main(void)
4037{
4038 sync_file_range(0, 0, 0, 0);
4039 return 0;
4040}
4041EOF
8fb03151 4042if compile_prog "" "" ; then
c727f47d
PM
4043 sync_file_range=yes
4044fi
4045
dace20dc
PM
4046# check for linux/fiemap.h and FS_IOC_FIEMAP
4047fiemap=no
4048cat > $TMPC << EOF
4049#include <sys/ioctl.h>
4050#include <linux/fs.h>
4051#include <linux/fiemap.h>
4052
4053int main(void)
4054{
4055 ioctl(0, FS_IOC_FIEMAP, 0);
4056 return 0;
4057}
4058EOF
8fb03151 4059if compile_prog "" "" ; then
dace20dc
PM
4060 fiemap=yes
4061fi
4062
d0927938
UH
4063# check for dup3
4064dup3=no
4065cat > $TMPC << EOF
4066#include <unistd.h>
4067
4068int main(void)
4069{
4070 dup3(0, 0, 0);
4071 return 0;
4072}
4073EOF
78f5d726 4074if compile_prog "" "" ; then
d0927938
UH
4075 dup3=yes
4076fi
4077
4e0c6529
AB
4078# check for ppoll support
4079ppoll=no
4080cat > $TMPC << EOF
4081#include <poll.h>
4082
4083int main(void)
4084{
4085 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4086 ppoll(&pfd, 1, 0, 0);
4087 return 0;
4088}
4089EOF
4090if compile_prog "" "" ; then
4091 ppoll=yes
4092fi
4093
cd758dd0
AB
4094# check for prctl(PR_SET_TIMERSLACK , ... ) support
4095prctl_pr_set_timerslack=no
4096cat > $TMPC << EOF
4097#include <sys/prctl.h>
4098
4099int main(void)
4100{
4101 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4102 return 0;
4103}
4104EOF
4105if compile_prog "" "" ; then
4106 prctl_pr_set_timerslack=yes
4107fi
4108
3b6edd16
PM
4109# check for epoll support
4110epoll=no
4111cat > $TMPC << EOF
4112#include <sys/epoll.h>
4113
4114int main(void)
4115{
4116 epoll_create(0);
4117 return 0;
4118}
4119EOF
8fb03151 4120if compile_prog "" "" ; then
3b6edd16
PM
4121 epoll=yes
4122fi
4123
227f0214
PM
4124# epoll_create1 is a later addition
4125# so we must check separately for its presence
3b6edd16
PM
4126epoll_create1=no
4127cat > $TMPC << EOF
4128#include <sys/epoll.h>
4129
4130int main(void)
4131{
19e83f6b
PM
4132 /* Note that we use epoll_create1 as a value, not as
4133 * a function being called. This is necessary so that on
4134 * old SPARC glibc versions where the function was present in
4135 * the library but not declared in the header file we will
4136 * fail the configure check. (Otherwise we will get a compiler
4137 * warning but not an error, and will proceed to fail the
4138 * qemu compile where we compile with -Werror.)
4139 */
c075a723 4140 return (int)(uintptr_t)&epoll_create1;
3b6edd16
PM
4141}
4142EOF
8fb03151 4143if compile_prog "" "" ; then
3b6edd16
PM
4144 epoll_create1=yes
4145fi
4146
a8fd1aba
PM
4147# check for sendfile support
4148sendfile=no
4149cat > $TMPC << EOF
4150#include <sys/sendfile.h>
4151
4152int main(void)
4153{
4154 return sendfile(0, 0, 0, 0);
4155}
4156EOF
4157if compile_prog "" "" ; then
4158 sendfile=yes
4159fi
4160
51834341
RV
4161# check for timerfd support (glibc 2.8 and newer)
4162timerfd=no
4163cat > $TMPC << EOF
4164#include <sys/timerfd.h>
4165
4166int main(void)
4167{
4168 return(timerfd_create(CLOCK_REALTIME, 0));
4169}
4170EOF
4171if compile_prog "" "" ; then
4172 timerfd=yes
4173fi
4174
9af5c906
RV
4175# check for setns and unshare support
4176setns=no
4177cat > $TMPC << EOF
4178#include <sched.h>
4179
4180int main(void)
4181{
4182 int ret;
4183 ret = setns(0, 0);
4184 ret = unshare(0);
4185 return ret;
4186}
4187EOF
4188if compile_prog "" "" ; then
4189 setns=yes
4190fi
4191
38860a03
AM
4192# clock_adjtime probe
4193clock_adjtime=no
4194cat > $TMPC <<EOF
4195#include <time.h>
4196
4197int main(void)
4198{
4199 return clock_adjtime(0, 0);
4200}
4201EOF
4202clock_adjtime=no
4203if compile_prog "" "" ; then
4204 clock_adjtime=yes
4205fi
4206
5a03cd00
AM
4207# syncfs probe
4208syncfs=no
4209cat > $TMPC <<EOF
4210#include <unistd.h>
4211
4212int main(void)
4213{
4214 return syncfs(0);
4215}
4216EOF
4217syncfs=no
4218if compile_prog "" "" ; then
4219 syncfs=yes
4220fi
4221
cc8ae6de 4222# Check if tools are available to build documentation.
a25dba17 4223if test "$docs" != "no" ; then
01668d98 4224 if has makeinfo && has pod2man; then
a25dba17 4225 docs=yes
83a3ab8b 4226 else
a25dba17 4227 if test "$docs" = "yes" ; then
21684af0 4228 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
83a3ab8b 4229 fi
a25dba17 4230 docs=no
83a3ab8b 4231 fi
cc8ae6de
PB
4232fi
4233
f514f41c 4234# Search for bswap_32 function
6ae9a1f4
JQ
4235byteswap_h=no
4236cat > $TMPC << EOF
4237#include <byteswap.h>
4238int main(void) { return bswap_32(0); }
4239EOF
52166aa0 4240if compile_prog "" "" ; then
6ae9a1f4
JQ
4241 byteswap_h=yes
4242fi
4243
75f13596 4244# Search for bswap32 function
6ae9a1f4
JQ
4245bswap_h=no
4246cat > $TMPC << EOF
4247#include <sys/endian.h>
4248#include <sys/types.h>
4249#include <machine/bswap.h>
4250int main(void) { return bswap32(0); }
4251EOF
52166aa0 4252if compile_prog "" "" ; then
6ae9a1f4
JQ
4253 bswap_h=yes
4254fi
4255
c589b249 4256##########################################
e49ab19f 4257# Do we have libiscsi >= 1.9.0
c589b249 4258if test "$libiscsi" != "no" ; then
e49ab19f 4259 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3c33ea96 4260 libiscsi="yes"
ca871ec8
SW
4261 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4262 libiscsi_libs=$($pkg_config --libs libiscsi)
c589b249
RS
4263 else
4264 if test "$libiscsi" = "yes" ; then
e49ab19f 4265 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
c589b249
RS
4266 fi
4267 libiscsi="no"
4268 fi
4269fi
4270
8bacde8d
NC
4271##########################################
4272# Do we need libm
4273cat > $TMPC << EOF
4274#include <math.h>
f80ea986 4275int main(int argc, char **argv) { return isnan(sin((double)argc)); }
8bacde8d
NC
4276EOF
4277if compile_prog "" "" ; then
4278 :
4279elif compile_prog "" "-lm" ; then
4280 LIBS="-lm $LIBS"
4281 libs_qga="-lm $libs_qga"
4282else
76ad07a4 4283 error_exit "libm check failed"
8bacde8d
NC
4284fi
4285
da93a1fd
AL
4286##########################################
4287# Do we need librt
8bacde8d
NC
4288# uClibc provides 2 versions of clock_gettime(), one with realtime
4289# support and one without. This means that the clock_gettime() don't
4290# need -lrt. We still need it for timer_create() so we check for this
4291# function in addition.
da93a1fd
AL
4292cat > $TMPC <<EOF
4293#include <signal.h>
4294#include <time.h>
8bacde8d
NC
4295int main(void) {
4296 timer_create(CLOCK_REALTIME, NULL, NULL);
4297 return clock_gettime(CLOCK_REALTIME, NULL);
4298}
da93a1fd
AL
4299EOF
4300
52166aa0 4301if compile_prog "" "" ; then
07ffa4bd 4302 :
8bacde8d 4303# we need pthread for static linking. use previous pthread test result
18e588b1
RL
4304elif compile_prog "" "$pthread_lib -lrt" ; then
4305 LIBS="$LIBS -lrt"
4306 libs_qga="$libs_qga -lrt"
da93a1fd
AL
4307fi
4308
31ff504d 4309if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
78723752 4310 "$haiku" != "yes" ; then
6362a53f
JQ
4311 libs_softmmu="-lutil $libs_softmmu"
4312fi
4313
de5071c5 4314##########################################
cd4ec0b4
GH
4315# spice probe
4316if test "$spice" != "no" ; then
4317 cat > $TMPC << EOF
4318#include <spice.h>
4319int main(void) { spice_server_new(); return 0; }
4320EOF
710fc4f5
JD
4321 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4322 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
65d5d3f9
SW
4323 if $pkg_config --atleast-version=0.12.0 spice-server && \
4324 $pkg_config --atleast-version=0.12.3 spice-protocol && \
cd4ec0b4
GH
4325 compile_prog "$spice_cflags" "$spice_libs" ; then
4326 spice="yes"
4327 libs_softmmu="$libs_softmmu $spice_libs"
4328 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
2e0e3c39
AL
4329 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4330 spice_server_version=$($pkg_config --modversion spice-server)
cd4ec0b4
GH
4331 else
4332 if test "$spice" = "yes" ; then
8efc9363
HT
4333 feature_not_found "spice" \
4334 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
cd4ec0b4
GH
4335 fi
4336 spice="no"
4337 fi
4338fi
4339
7b02f544 4340# check for smartcard support
7b02f544
MAL
4341if test "$smartcard" != "no"; then
4342 if $pkg_config libcacard; then
4343 libcacard_cflags=$($pkg_config --cflags libcacard)
4344 libcacard_libs=$($pkg_config --libs libcacard)
7b02f544 4345 smartcard="yes"
afd347ab 4346 else
7b02f544
MAL
4347 if test "$smartcard" = "yes"; then
4348 feature_not_found "smartcard" "Install libcacard devel"
111a38b0 4349 fi
7b02f544 4350 smartcard="no"
111a38b0
RR
4351 fi
4352fi
111a38b0 4353
2b2325ff
GH
4354# check for libusb
4355if test "$libusb" != "no" ; then
65d5d3f9 4356 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
2b2325ff 4357 libusb="yes"
ca871ec8
SW
4358 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4359 libusb_libs=$($pkg_config --libs libusb-1.0)
2b2325ff
GH
4360 else
4361 if test "$libusb" = "yes"; then
8efc9363 4362 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
2b2325ff
GH
4363 fi
4364 libusb="no"
4365 fi
4366fi
4367
69354a83
HG
4368# check for usbredirparser for usb network redirection support
4369if test "$usb_redir" != "no" ; then
65d5d3f9 4370 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
69354a83 4371 usb_redir="yes"
ca871ec8
SW
4372 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4373 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
69354a83
HG
4374 else
4375 if test "$usb_redir" = "yes"; then
21684af0 4376 feature_not_found "usb-redir" "Install usbredir devel"
69354a83
HG
4377 fi
4378 usb_redir="no"
4379 fi
4380fi
4381
d9840e25
TS
4382##########################################
4383# check if we have VSS SDK headers for win
4384
4385if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4386 case "$vss_win32_sdk" in
690604f6 4387 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
4388 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4389 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 4390 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
4391 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4392 ;;
690604f6 4393 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
4394 esac
4395 cat > $TMPC << EOF
4396#define __MIDL_user_allocate_free_DEFINED__
4397#include <inc/win2003/vss.h>
4398int main(void) { return VSS_CTX_BACKUP; }
4399EOF
4400 if compile_prog "$vss_win32_include" "" ; then
4401 guest_agent_with_vss="yes"
4402 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 4403 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 4404 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
4405 else
4406 if test "$vss_win32_sdk" != "" ; then
4407 echo "ERROR: Please download and install Microsoft VSS SDK:"
4408 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4409 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4410 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4411 echo "ERROR: The headers are extracted in the directory \`inc'."
4412 feature_not_found "VSS support"
4413 fi
4414 guest_agent_with_vss="no"
4415 fi
4416fi
4417
4418##########################################
4419# lookup Windows platform SDK (if not specified)
4420# The SDK is needed only to build .tlb (type library) file of guest agent
4421# VSS provider from the source. It is usually unnecessary because the
4422# pre-compiled .tlb file is included.
4423
4424if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4425 if test -z "$win_sdk"; then
4426 programfiles="$PROGRAMFILES"
4427 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4428 if test -n "$programfiles"; then
4429 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4430 else
4431 feature_not_found "Windows SDK"
4432 fi
4433 elif test "$win_sdk" = "no"; then
4434 win_sdk=""
4435 fi
4436fi
4437
50cbebb9
MR
4438##########################################
4439# check if mingw environment provides a recent ntddscsi.h
4440if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4441 cat > $TMPC << EOF
4442#include <windows.h>
4443#include <ntddscsi.h>
4444int main(void) {
4445#if !defined(IOCTL_SCSI_GET_ADDRESS)
4446#error Missing required ioctl definitions
4447#endif
4448 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4449 return addr.Lun;
4450}
4451EOF
4452 if compile_prog "" "" ; then
4453 guest_agent_ntddscsi=yes
c54e1eb4 4454 libs_qga="-lsetupapi $libs_qga"
50cbebb9
MR
4455 fi
4456fi
4457
9d9e1521
GH
4458##########################################
4459# virgl renderer probe
4460
4461if test "$virglrenderer" != "no" ; then
4462 cat > $TMPC << EOF
4463#include <virglrenderer.h>
4464int main(void) { virgl_renderer_poll(); return 0; }
4465EOF
4466 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4467 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4468 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4469 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4470 virglrenderer="yes"
4471 else
4472 if test "$virglrenderer" = "yes" ; then
4473 feature_not_found "virglrenderer"
4474 fi
4475 virglrenderer="no"
4476 fi
4477fi
4478
8ca80760
RH
4479##########################################
4480# capstone
4481
e219c499
RH
4482case "$capstone" in
4483 "" | yes)
4484 if $pkg_config capstone; then
4485 capstone=system
4486 elif test -e "${source_path}/.git" ; then
4487 capstone=git
4488 elif test -e "${source_path}/capstone/Makefile" ; then
4489 capstone=internal
4490 elif test -z "$capstone" ; then
4491 capstone=no
4492 else
4493 feature_not_found "capstone" "Install capstone devel or git submodule"
4494 fi
4495 ;;
4496
4497 system)
4498 if ! $pkg_config capstone; then
4499 feature_not_found "capstone" "Install capstone devel"
4500 fi
4501 ;;
4502esac
4503
4504case "$capstone" in
4505 git | internal)
4506 if test "$capstone" = git; then
4507 git_submodules="${git_submodules} capstone"
4508 fi
4509 mkdir -p capstone
4510 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4511 if test "$mingw32" = "yes"; then
4512 LIBCAPSTONE=capstone.lib
4513 else
4514 LIBCAPSTONE=libcapstone.a
4515 fi
4516 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4517 ;;
4518
4519 system)
8ca80760
RH
4520 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4521 LIBS="$($pkg_config --libs capstone) $LIBS"
e219c499
RH
4522 ;;
4523
4524 no)
4525 ;;
4526 *)
4527 error_exit "Unknown state for capstone: $capstone"
4528 ;;
4529esac
8ca80760 4530
5f6b9e8f
BS
4531##########################################
4532# check if we have fdatasync
4533
4534fdatasync=no
4535cat > $TMPC << EOF
4536#include <unistd.h>
d1722a27
AR
4537int main(void) {
4538#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4539return fdatasync(0);
4540#else
e172fe11 4541#error Not supported
d1722a27
AR
4542#endif
4543}
5f6b9e8f
BS
4544EOF
4545if compile_prog "" "" ; then
4546 fdatasync=yes
4547fi
4548
e78815a5
AF
4549##########################################
4550# check if we have madvise
4551
4552madvise=no
4553cat > $TMPC << EOF
4554#include <sys/types.h>
4555#include <sys/mman.h>
832ce9c2 4556#include <stddef.h>
e78815a5
AF
4557int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4558EOF
4559if compile_prog "" "" ; then
4560 madvise=yes
4561fi
4562
4563##########################################
4564# check if we have posix_madvise
4565
4566posix_madvise=no
4567cat > $TMPC << EOF
4568#include <sys/mman.h>
832ce9c2 4569#include <stddef.h>
e78815a5
AF
4570int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4571EOF
4572if compile_prog "" "" ; then
4573 posix_madvise=yes
4574fi
4575
0a852417
PD
4576##########################################
4577# check if we have posix_syslog
4578
4579posix_syslog=no
4580cat > $TMPC << EOF
4581#include <syslog.h>
4582int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4583EOF
4584if compile_prog "" "" ; then
4585 posix_syslog=yes
4586fi
4587
401bc051
PM
4588##########################################
4589# check if we have sem_timedwait
4590
4591sem_timedwait=no
4592cat > $TMPC << EOF
4593#include <semaphore.h>
4594int main(void) { return sem_timedwait(0, 0); }
4595EOF
4596if compile_prog "" "" ; then
4597 sem_timedwait=yes
4598fi
4599
94a420b1
SH
4600##########################################
4601# check if trace backend exists
4602
5b808275 4603$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 4604if test "$?" -ne 0 ; then
5b808275
LV
4605 error_exit "invalid trace backends" \
4606 "Please choose supported trace backends."
94a420b1
SH
4607fi
4608
7e24e92a
SH
4609##########################################
4610# For 'ust' backend, test if ust headers are present
5b808275 4611if have_backend "ust"; then
7e24e92a 4612 cat > $TMPC << EOF
bf15f63c 4613#include <lttng/tracepoint.h>
7e24e92a
SH
4614int main(void) { return 0; }
4615EOF
c79ed23d 4616 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
bf15f63c 4617 if $pkg_config lttng-ust --exists; then
89138857 4618 lttng_ust_libs=$($pkg_config --libs lttng-ust)
bf15f63c 4619 else
c79ed23d 4620 lttng_ust_libs="-llttng-ust -ldl"
bf15f63c
MG
4621 fi
4622 if $pkg_config liburcu-bp --exists; then
89138857 4623 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
bf15f63c
MG
4624 else
4625 urcu_bp_libs="-lurcu-bp"
4626 fi
4627
4628 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4629 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
7e24e92a 4630 else
bf15f63c 4631 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
4632 fi
4633fi
b3d08c02
DB
4634
4635##########################################
4636# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 4637if have_backend "dtrace"; then
b3d08c02 4638 if ! has 'dtrace' ; then
76ad07a4 4639 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 4640 fi
c276b17d
DB
4641 trace_backend_stap="no"
4642 if has 'stap' ; then
4643 trace_backend_stap="yes"
4644 fi
b3d08c02
DB
4645fi
4646
023367e6 4647##########################################
519175a2 4648# check and set a backend for coroutine
d0e2fce5 4649
7c2acc70 4650# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
4651# is sigcontext. On Windows the only valid backend is the Windows
4652# specific one.
7c2acc70
PM
4653
4654ucontext_works=no
4655if test "$darwin" != "yes"; then
4656 cat > $TMPC << EOF
d0e2fce5 4657#include <ucontext.h>
cdf84806
PM
4658#ifdef __stub_makecontext
4659#error Ignoring glibc stub makecontext which will always fail
4660#endif
75cafad7 4661int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 4662EOF
7c2acc70
PM
4663 if compile_prog "" "" ; then
4664 ucontext_works=yes
4665 fi
4666fi
4667
4668if test "$coroutine" = ""; then
4669 if test "$mingw32" = "yes"; then
4670 coroutine=win32
4671 elif test "$ucontext_works" = "yes"; then
4672 coroutine=ucontext
4673 else
4674 coroutine=sigaltstack
d0e2fce5 4675 fi
519175a2 4676else
7c2acc70
PM
4677 case $coroutine in
4678 windows)
4679 if test "$mingw32" != "yes"; then
4680 error_exit "'windows' coroutine backend only valid for Windows"
4681 fi
4682 # Unfortunately the user visible backend name doesn't match the
4683 # coroutine-*.c filename for this case, so we have to adjust it here.
4684 coroutine=win32
4685 ;;
4686 ucontext)
4687 if test "$ucontext_works" != "yes"; then
4688 feature_not_found "ucontext"
4689 fi
4690 ;;
33c53c54 4691 sigaltstack)
7c2acc70
PM
4692 if test "$mingw32" = "yes"; then
4693 error_exit "only the 'windows' coroutine backend is valid for Windows"
4694 fi
4695 ;;
4696 *)
4697 error_exit "unknown coroutine backend $coroutine"
4698 ;;
4699 esac
d0e2fce5
AK
4700fi
4701
70c60c08 4702if test "$coroutine_pool" = ""; then
33c53c54 4703 coroutine_pool=yes
70c60c08
SH
4704fi
4705
7d992e4d
PL
4706if test "$debug_stack_usage" = "yes"; then
4707 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4708 error_exit "stack usage debugging is not supported for $cpu"
4709 fi
4710 if test "$coroutine_pool" = "yes"; then
4711 echo "WARN: disabling coroutine pool for stack usage debugging"
4712 coroutine_pool=no
4713 fi
4714fi
4715
4716
d2042378
AK
4717##########################################
4718# check if we have open_by_handle_at
4719
4e1797f9 4720open_by_handle_at=no
d2042378
AK
4721cat > $TMPC << EOF
4722#include <fcntl.h>
acc55ba8
SW
4723#if !defined(AT_EMPTY_PATH)
4724# error missing definition
4725#else
75cafad7 4726int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
acc55ba8 4727#endif
d2042378
AK
4728EOF
4729if compile_prog "" "" ; then
4730 open_by_handle_at=yes
4731fi
4732
e06a765e
HPB
4733########################################
4734# check if we have linux/magic.h
4735
4736linux_magic_h=no
4737cat > $TMPC << EOF
4738#include <linux/magic.h>
4739int main(void) {
75cafad7 4740 return 0;
e06a765e
HPB
4741}
4742EOF
4743if compile_prog "" "" ; then
4744 linux_magic_h=yes
4745fi
4746
06d71fa1 4747########################################
c95e3080
KW
4748# check whether we can disable warning option with a pragma (this is needed
4749# to silence warnings in the headers of some versions of external libraries).
4750# This test has to be compiled with -Werror as otherwise an unknown pragma is
4751# only a warning.
4752#
4753# If we can't selectively disable warning in the code, disable -Werror so that
4754# the build doesn't fail anyway.
4755
06d71fa1
PM
4756pragma_disable_unused_but_set=no
4757cat > $TMPC << EOF
e6f53fd5 4758#pragma GCC diagnostic push
06d71fa1 4759#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
c95e3080 4760#pragma GCC diagnostic ignored "-Wstrict-prototypes"
e6f53fd5 4761#pragma GCC diagnostic pop
c95e3080 4762
06d71fa1
PM
4763int main(void) {
4764 return 0;
4765}
4766EOF
4767if compile_prog "-Werror" "" ; then
cc6e3ca9 4768 pragma_diagnostic_available=yes
c95e3080
KW
4769else
4770 werror=no
06d71fa1
PM
4771fi
4772
3f4349dc 4773########################################
541be927 4774# check if we have valgrind/valgrind.h
3f4349dc
KW
4775
4776valgrind_h=no
4777cat > $TMPC << EOF
4778#include <valgrind/valgrind.h>
3f4349dc 4779int main(void) {
3f4349dc
KW
4780 return 0;
4781}
4782EOF
4783if compile_prog "" "" ; then
4784 valgrind_h=yes
4785fi
4786
8ab1bf12
LC
4787########################################
4788# check if environ is declared
4789
4790has_environ=no
4791cat > $TMPC << EOF
4792#include <unistd.h>
4793int main(void) {
c075a723 4794 environ = 0;
8ab1bf12
LC
4795 return 0;
4796}
4797EOF
4798if compile_prog "" "" ; then
4799 has_environ=yes
4800fi
4801
76a347e1
RH
4802########################################
4803# check if cpuid.h is usable.
4804
76a347e1
RH
4805cat > $TMPC << EOF
4806#include <cpuid.h>
4807int main(void) {
774d566c
PM
4808 unsigned a, b, c, d;
4809 int max = __get_cpuid_max(0, 0);
4810
4811 if (max >= 1) {
4812 __cpuid(1, a, b, c, d);
4813 }
4814
4815 if (max >= 7) {
4816 __cpuid_count(7, 0, a, b, c, d);
4817 }
4818
4819 return 0;
76a347e1
RH
4820}
4821EOF
4822if compile_prog "" "" ; then
4823 cpuid_h=yes
4824fi
4825
5dd89908
RH
4826##########################################
4827# avx2 optimization requirement check
4828#
4829# There is no point enabling this if cpuid.h is not usable,
4830# since we won't be able to select the new routines.
4831
4832if test $cpuid_h = yes; then
4833 cat > $TMPC << EOF
4834#pragma GCC push_options
4835#pragma GCC target("avx2")
4836#include <cpuid.h>
4837#include <immintrin.h>
4838static int bar(void *a) {
4839 __m256i x = *(__m256i *)a;
4840 return _mm256_testz_si256(x, x);
4841}
4842int main(int argc, char *argv[]) { return bar(argv[0]); }
4843EOF
4844 if compile_object "" ; then
4845 avx2_opt="yes"
4846 fi
4847fi
4848
f540166b
RH
4849########################################
4850# check if __[u]int128_t is usable.
4851
4852int128=no
4853cat > $TMPC << EOF
a00f66ab
SW
4854#if defined(__clang_major__) && defined(__clang_minor__)
4855# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4856# error __int128_t does not work in CLANG before 3.2
4857# endif
4858#endif
f540166b
RH
4859__int128_t a;
4860__uint128_t b;
4861int main (void) {
4862 a = a + b;
4863 b = a * b;
464e3671 4864 a = a * a;
f540166b
RH
4865 return 0;
4866}
4867EOF
4868if compile_prog "" "" ; then
4869 int128=yes
4870fi
76a347e1 4871
7ebee43e
RH
4872#########################################
4873# See if 128-bit atomic operations are supported.
4874
4875atomic128=no
4876if test "$int128" = "yes"; then
4877 cat > $TMPC << EOF
4878int main(void)
4879{
4880 unsigned __int128 x = 0, y = 0;
4881 y = __atomic_load_16(&x, 0);
4882 __atomic_store_16(&x, y, 0);
4883 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4884 return 0;
4885}
4886EOF
4887 if compile_prog "" "" ; then
4888 atomic128=yes
4889 fi
4890fi
4891
df79b996
RH
4892#########################################
4893# See if 64-bit atomic operations are supported.
4894# Note that without __atomic builtins, we can only
4895# assume atomic loads/stores max at pointer size.
4896
4897cat > $TMPC << EOF
4898#include <stdint.h>
4899int main(void)
4900{
4901 uint64_t x = 0, y = 0;
4902#ifdef __ATOMIC_RELAXED
4903 y = __atomic_load_8(&x, 0);
4904 __atomic_store_8(&x, y, 0);
4905 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4906 __atomic_exchange_8(&x, y, 0);
4907 __atomic_fetch_add_8(&x, y, 0);
4908#else
4909 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4910 __sync_lock_test_and_set(&x, y);
4911 __sync_val_compare_and_swap(&x, y, 0);
4912 __sync_fetch_and_add(&x, y);
4913#endif
4914 return 0;
4915}
4916EOF
4917if compile_prog "" "" ; then
4918 atomic64=yes
4919fi
4920
1e6e9aca
RH
4921########################################
4922# check if getauxval is available.
4923
4924getauxval=no
4925cat > $TMPC << EOF
4926#include <sys/auxv.h>
4927int main(void) {
4928 return getauxval(AT_HWCAP) == 0;
4929}
4930EOF
4931if compile_prog "" "" ; then
4932 getauxval=yes
4933fi
4934
fd0e6053
JS
4935########################################
4936# check if ccache is interfering with
4937# semantic analysis of macros
4938
5e4dfd3d 4939unset CCACHE_CPP2
fd0e6053
JS
4940ccache_cpp2=no
4941cat > $TMPC << EOF
4942static const int Z = 1;
4943#define fn() ({ Z; })
4944#define TAUT(X) ((X) == Z)
4945#define PAREN(X, Y) (X == Y)
4946#define ID(X) (X)
4947int main(int argc, char *argv[])
4948{
4949 int x = 0, y = 0;
4950 x = ID(x);
4951 x = fn();
4952 fn();
4953 if (PAREN(x, y)) return 0;
4954 if (TAUT(Z)) return 0;
4955 return 0;
4956}
4957EOF
4958
4959if ! compile_object "-Werror"; then
4960 ccache_cpp2=yes
4961fi
4962
b553a042
JS
4963#################################################
4964# clang does not support glibc + FORTIFY_SOURCE.
4965
4966if test "$fortify_source" != "no"; then
4967 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4968 fortify_source="no";
e189091f 4969 elif test -n "$cxx" && has $cxx &&
cfcc7c14 4970 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
4971 fortify_source="no";
4972 else
4973 fortify_source="yes"
4974 fi
4975fi
4976
277abf15
JV
4977##########################################
4978# check if struct fsxattr is available via linux/fs.h
4979
4980have_fsxattr=no
4981cat > $TMPC << EOF
4982#include <linux/fs.h>
4983struct fsxattr foo;
4984int main(void) {
4985 return 0;
4986}
4987EOF
4988if compile_prog "" "" ; then
4989 have_fsxattr=yes
4990fi
4991
b66e10e4
PM
4992##########################################
4993# check if rtnetlink.h exists and is useful
575b22b1
LV
4994have_rtnetlink=no
4995cat > $TMPC << EOF
4996#include <linux/rtnetlink.h>
4997int main(void) {
4998 return IFLA_PROTO_DOWN;
4999}
5000EOF
5001if compile_prog "" "" ; then
5002 have_rtnetlink=yes
5003fi
5004
6a02c806
SH
5005##########################################
5006# check for usable AF_VSOCK environment
5007have_af_vsock=no
5008cat > $TMPC << EOF
5009#include <errno.h>
5010#include <sys/types.h>
5011#include <sys/socket.h>
5012#if !defined(AF_VSOCK)
5013# error missing AF_VSOCK flag
5014#endif
5015#include <linux/vm_sockets.h>
5016int main(void) {
5017 int sock, ret;
5018 struct sockaddr_vm svm;
5019 socklen_t len = sizeof(svm);
5020 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5021 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5022 if ((ret == -1) && (errno == ENOTCONN)) {
5023 return 0;
5024 }
5025 return -1;
5026}
5027EOF
5028if compile_prog "" "" ; then
5029 have_af_vsock=yes
5030fi
5031
f0d92b56
LM
5032##########################################
5033# check for usable AF_ALG environment
5034hava_afalg=no
5035cat > $TMPC << EOF
5036#include <errno.h>
5037#include <sys/types.h>
5038#include <sys/socket.h>
5039#include <linux/if_alg.h>
5040int main(void) {
5041 int sock;
5042 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5043 return sock;
5044}
5045EOF
5046if compile_prog "" "" ; then
5047 have_afalg=yes
5048fi
5049if test "$crypto_afalg" = "yes"
5050then
5051 if test "$have_afalg" != "yes"
5052 then
5053 error_exit "AF_ALG requested but could not be detected"
5054 fi
5055fi
5056
5057
6969ec6c
JC
5058#################################################
5059# Sparc implicitly links with --relax, which is
5060# incompatible with -r, so --no-relax should be
5061# given. It does no harm to give it on other
5062# platforms too.
5063
5064# Note: the prototype is needed since QEMU_CFLAGS
5065# contains -Wmissing-prototypes
5066cat > $TMPC << EOF
5067extern int foo(void);
5068int foo(void) { return 0; }
5069EOF
5070if ! compile_object ""; then
5071 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5072fi
7ecf44a5
PB
5073for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5074 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5075 LD_REL_FLAGS=$i
5076 break
5077 fi
5078done
5079if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5080 feature_not_found "modules" "Cannot find how to build relocatable objects"
6969ec6c
JC
5081fi
5082
4d04351f
CC
5083##########################################
5084# check for sysmacros.h
5085
5086have_sysmacros=no
5087cat > $TMPC << EOF
5088#include <sys/sysmacros.h>
5089int main(void) {
5090 return makedev(0, 0);
5091}
5092EOF
5093if compile_prog "" "" ; then
5094 have_sysmacros=yes
5095fi
5096
da92c3ff
AM
5097##########################################
5098# Veritas HyperScale block driver VxHS
5099# Check if libvxhs is installed
5100
5101if test "$vxhs" != "no" ; then
5102 cat > $TMPC <<EOF
5103#include <stdint.h>
5104#include <qnio/qnio_api.h>
5105
5106void *vxhs_callback;
5107
5108int main(void) {
5109 iio_init(QNIO_VERSION, vxhs_callback);
5110 return 0;
5111}
5112EOF
5113 vxhs_libs="-lvxhs -lssl"
5114 if compile_prog "" "$vxhs_libs" ; then
5115 vxhs=yes
5116 else
5117 if test "$vxhs" = "yes" ; then
5118 feature_not_found "vxhs block device" "Install libvxhs See github"
5119 fi
5120 vxhs=no
5121 fi
5122fi
5123
49e00a18
AG
5124##########################################
5125# check for _Static_assert()
5126
5127have_static_assert=no
5128cat > $TMPC << EOF
5129_Static_assert(1, "success");
5130int main(void) {
5131 return 0;
5132}
5133EOF
5134if compile_prog "" "" ; then
5135 have_static_assert=yes
5136fi
5137
e674605f
TG
5138##########################################
5139# check for utmpx.h, it is missing e.g. on OpenBSD
5140
5141have_utmpx=no
5142cat > $TMPC << EOF
5143#include <utmpx.h>
5144struct utmpx user_info;
5145int main(void) {
5146 return 0;
5147}
5148EOF
5149if compile_prog "" "" ; then
5150 have_utmpx=yes
5151fi
5152
7e24e92a 5153##########################################
e86ecd4b
JQ
5154# End of CC checks
5155# After here, no more $cc or $ld runs
5156
1d728c39
BS
5157if test "$gcov" = "yes" ; then
5158 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5159 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
b553a042 5160elif test "$fortify_source" = "yes" ; then
e600cdf3 5161 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
ce278618
PM
5162elif test "$debug" = "no"; then
5163 CFLAGS="-O2 $CFLAGS"
e86ecd4b 5164fi
a316e378 5165
6542aa9c
PL
5166##########################################
5167# Do we have libnfs
5168if test "$libnfs" != "no" ; then
b7d769c9 5169 if $pkg_config --atleast-version=1.9.3 libnfs; then
6542aa9c
PL
5170 libnfs="yes"
5171 libnfs_libs=$($pkg_config --libs libnfs)
6542aa9c
PL
5172 else
5173 if test "$libnfs" = "yes" ; then
8efc9363 5174 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6542aa9c
PL
5175 fi
5176 libnfs="no"
5177 fi
5178fi
1d728c39 5179
6ca026cb
PM
5180# Now we've finished running tests it's OK to add -Werror to the compiler flags
5181if test "$werror" = "yes"; then
5182 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5183fi
5184
e86ecd4b
JQ
5185if test "$solaris" = "no" ; then
5186 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1156c669 5187 LDFLAGS="-Wl,--warn-common $LDFLAGS"
e86ecd4b
JQ
5188 fi
5189fi
5190
94dd53c5
GH
5191# test if pod2man has --utf8 option
5192if pod2man --help | grep -q utf8; then
5193 POD2MAN="pod2man --utf8"
5194else
5195 POD2MAN="pod2man"
5196fi
5197
952afb71
BS
5198# Use ASLR, no-SEH and DEP if available
5199if test "$mingw32" = "yes" ; then
5200 for flag in --dynamicbase --no-seh --nxcompat; do
e9a3591f 5201 if ld_has $flag ; then
952afb71
BS
5202 LDFLAGS="-Wl,$flag $LDFLAGS"
5203 fi
5204 done
5205fi
5206
10ea68b3 5207qemu_confdir=$sysconfdir$confsuffix
e26110cf 5208qemu_moddir=$libdir$confsuffix
528ae5b8 5209qemu_datadir=$datadir$confsuffix
834574ea 5210qemu_localedir="$datadir/locale"
e7b45cc4 5211
e0580342
KR
5212# We can only support ivshmem if we have eventfd
5213if [ "$eventfd" = "yes" ]; then
5214 ivshmem=yes
5215fi
5216
4b1c11fd
DB
5217tools=""
5218if test "$want_tools" = "yes" ; then
ca35f780 5219 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4b1c11fd
DB
5220 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5221 tools="qemu-nbd\$(EXESUF) $tools"
b1449edb
KR
5222 fi
5223 if [ "$ivshmem" = "yes" ]; then
a75eb03b 5224 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4b1c11fd
DB
5225 fi
5226fi
5227if test "$softmmu" = yes ; then
b855f8d1
PB
5228 if test "$linux" = yes; then
5229 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
aabfd88d
AF
5230 virtfs=yes
5231 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5232 else
5233 if test "$virtfs" = yes; then
b855f8d1 5234 error_exit "VirtFS requires libcap devel and libattr devel"
983eef5a 5235 fi
17500370 5236 virtfs=no
aabfd88d 5237 fi
fe8fc5ae
PB
5238 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5239 mpath=yes
5240 else
5241 if test "$mpath" = yes; then
5242 error_exit "Multipath requires libmpathpersist devel"
5243 fi
5244 mpath=no
5245 fi
b855f8d1
PB
5246 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5247 else
5248 if test "$virtfs" = yes; then
5249 error_exit "VirtFS is supported only on Linux"
5250 fi
5251 virtfs=no
fe8fc5ae
PB
5252 if test "$mpath" = yes; then
5253 error_exit "Multipath is supported only on Linux"
5254 fi
5255 mpath=no
17bff52b 5256 fi
ff69fd8c
LV
5257 if test "$xkbcommon" = "yes"; then
5258 tools="qemu-keymap\$(EXESUF) $tools"
5259 fi
6a021536 5260fi
9d6bc27b
MR
5261
5262# Probe for guest agent support/options
5263
e8ef31a3 5264if [ "$guest_agent" != "no" ]; then
b39297ae 5265 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
fafcaf1d 5266 tools="qemu-ga $tools"
e8ef31a3
MT
5267 guest_agent=yes
5268 elif [ "$guest_agent" != yes ]; then
5269 guest_agent=no
5270 else
5271 error_exit "Guest agent is not supported on this platform"
ca35f780 5272 fi
00c705fb 5273fi
ca35f780 5274
9d6bc27b
MR
5275# Guest agent Window MSI package
5276
5277if test "$guest_agent" != yes; then
5278 if test "$guest_agent_msi" = yes; then
5279 error_exit "MSI guest agent package requires guest agent enabled"
5280 fi
5281 guest_agent_msi=no
5282elif test "$mingw32" != "yes"; then
5283 if test "$guest_agent_msi" = "yes"; then
5284 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5285 fi
5286 guest_agent_msi=no
5287elif ! has wixl; then
5288 if test "$guest_agent_msi" = "yes"; then
5289 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5290 fi
5291 guest_agent_msi=no
1a34904e
MR
5292else
5293 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5294 # disabled explicitly
5295 if test "$guest_agent_msi" != "no"; then
5296 guest_agent_msi=yes
5297 fi
9d6bc27b
MR
5298fi
5299
1a34904e 5300if test "$guest_agent_msi" = "yes"; then
9d6bc27b
MR
5301 if test "$guest_agent_with_vss" = "yes"; then
5302 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5303 fi
5304
5305 if test "$QEMU_GA_MANUFACTURER" = ""; then
5306 QEMU_GA_MANUFACTURER=QEMU
5307 fi
5308
5309 if test "$QEMU_GA_DISTRO" = ""; then
5310 QEMU_GA_DISTRO=Linux
5311 fi
5312
5313 if test "$QEMU_GA_VERSION" = ""; then
89138857 5314 QEMU_GA_VERSION=$(cat $source_path/VERSION)
9d6bc27b
MR
5315 fi
5316
89138857 5317 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b
MR
5318
5319 case "$cpu" in
5320 x86_64)
5321 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5322 ;;
5323 i386)
5324 QEMU_GA_MSI_ARCH="-D Arch=32"
5325 ;;
5326 *)
5327 error_exit "CPU $cpu not supported for building installation package"
5328 ;;
5329 esac
5330fi
5331
ca35f780
PB
5332# Mac OS X ships with a broken assembler
5333roms=
5334if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5335 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5336 "$softmmu" = yes ; then
e57218b6 5337 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
5338 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5339 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5340 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
5341 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5342 ld_i386_emulation="$emu"
5343 roms="optionrom"
5344 break
5345 fi
5346 done
ca35f780 5347fi
d0384d1d 5348if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
39ac8455
DG
5349 roms="$roms spapr-rtas"
5350fi
ca35f780 5351
9933c305
CB
5352if test "$cpu" = "s390x" ; then
5353 roms="$roms s390-ccw"
5354fi
5355
964c6fa1 5356# Probe for the need for relocating the user-only binary.
92fe2ba8 5357if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
964c6fa1
RH
5358 textseg_addr=
5359 case "$cpu" in
479eb121
RH
5360 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5361 # ??? Rationale for choosing this address
964c6fa1
RH
5362 textseg_addr=0x60000000
5363 ;;
5364 mips)
479eb121
RH
5365 # A 256M aligned address, high in the address space, with enough
5366 # room for the code_gen_buffer above it before the stack.
5367 textseg_addr=0x60000000
964c6fa1
RH
5368 ;;
5369 esac
5370 if [ -n "$textseg_addr" ]; then
5371 cat > $TMPC <<EOF
5372 int main(void) { return 0; }
5373EOF
5374 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5375 if ! compile_prog "" "$textseg_ldflags"; then
5376 # In case ld does not support -Ttext-segment, edit the default linker
5377 # script via sed to set the .text start addr. This is needed on FreeBSD
5378 # at least.
92fe2ba8
PM
5379 if ! $ld --verbose >/dev/null 2>&1; then
5380 error_exit \
5381 "We need to link the QEMU user mode binaries at a" \
5382 "specific text address. Unfortunately your linker" \
5383 "doesn't support either the -Ttext-segment option or" \
5384 "printing the default linker script with --verbose." \
5385 "If you don't want the user mode binaries, pass the" \
5386 "--disable-user option to configure."
5387 fi
5388
964c6fa1
RH
5389 $ld --verbose | sed \
5390 -e '1,/==================================================/d' \
5391 -e '/==================================================/,$d' \
5392 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5393 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5394 textseg_ldflags="-Wl,-T../config-host.ld"
5395 fi
5396 fi
5397fi
5398
11cde1c8
BD
5399# Check that the C++ compiler exists and works with the C compiler.
5400# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5401if has $cxx; then
5402 cat > $TMPC <<EOF
5403int c_function(void);
5404int main(void) { return c_function(); }
5405EOF
5406
5407 compile_object
5408
5409 cat > $TMPCXX <<EOF
5410extern "C" {
5411 int c_function(void);
5412}
5413int c_function(void) { return 42; }
5414EOF
5415
5416 update_cxxflags
5417
5418 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5419 # C++ compiler $cxx works ok with C compiler $cc
5420 :
5421 else
5422 echo "C++ compiler $cxx does not work with C compiler $cc"
5423 echo "Disabling C++ specific optional code"
5424 cxx=
5425 fi
5426else
5427 echo "No C++ compiler available; disabling C++ specific optional code"
5428 cxx=
5429fi
5430
02d34f62
CR
5431echo_version() {
5432 if test "$1" = "yes" ; then
5433 echo "($2)"
5434 fi
5435}
5436
50e12060
JK
5437# prepend pixman and ftd flags after all config tests are done
5438QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5439libs_softmmu="$pixman_libs $libs_softmmu"
5ca9388a 5440
43ce4dfe 5441echo "Install prefix $prefix"
89138857 5442echo "BIOS directory $(eval echo $qemu_datadir)"
3d5eecab 5443echo "firmware path $(eval echo $firmwarepath)"
89138857
SW
5444echo "binary directory $(eval echo $bindir)"
5445echo "library directory $(eval echo $libdir)"
5446echo "module directory $(eval echo $qemu_moddir)"
5447echo "libexec directory $(eval echo $libexecdir)"
5448echo "include directory $(eval echo $includedir)"
5449echo "config directory $(eval echo $sysconfdir)"
11d9f695 5450if test "$mingw32" = "no" ; then
89138857
SW
5451echo "local state directory $(eval echo $local_statedir)"
5452echo "Manual directory $(eval echo $mandir)"
43ce4dfe 5453echo "ELF interp prefix $interp_prefix"
5a699bbb
LE
5454else
5455echo "local state directory queried at runtime"
d9840e25 5456echo "Windows SDK $win_sdk"
11d9f695 5457fi
5a67135a 5458echo "Source path $source_path"
cc84d63a 5459echo "GIT binary $git"
aef45d51 5460echo "GIT submodules $git_submodules"
43ce4dfe 5461echo "C compiler $cc"
83469015 5462echo "Host C compiler $host_cc"
83f73fce 5463echo "C++ compiler $cxx"
3c4a4d0d 5464echo "Objective-C compiler $objcc"
45d285ab 5465echo "ARFLAGS $ARFLAGS"
0c439cbf 5466echo "CFLAGS $CFLAGS"
a558ee17 5467echo "QEMU_CFLAGS $QEMU_CFLAGS"
0c439cbf 5468echo "LDFLAGS $LDFLAGS"
43ce4dfe 5469echo "make $make"
6a882643 5470echo "install $install"
c886edfb 5471echo "python $python"
e2d8830e
BS
5472if test "$slirp" = "yes" ; then
5473 echo "smbd $smbd"
5474fi
17969268 5475echo "module support $modules"
43ce4dfe 5476echo "host CPU $cpu"
de83cd02 5477echo "host big endian $bigendian"
97a847bc 5478echo "target list $target_list"
43ce4dfe 5479echo "gprof enabled $gprof"
03b4fe7d 5480echo "sparse enabled $sparse"
1625af87 5481echo "strip binaries $strip_opt"
05c2a3e7 5482echo "profiler $profiler"
43ce4dfe 5483echo "static build $static"
5b0753e0
FB
5484if test "$darwin" = "yes" ; then
5485 echo "Cocoa support $cocoa"
5486fi
89138857
SW
5487echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5488echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
925a0400 5489echo "GTK GL support $gtk_gl"
89138857 5490echo "VTE support $vte $(echo_version $vte $vteversion)"
a1c5e949 5491echo "TLS priority $tls_priority"
ddbb0d09 5492echo "GNUTLS support $gnutls"
b917da4c 5493echo "GNUTLS rnd $gnutls_rnd"
91bfcdb0 5494echo "libgcrypt $gcrypt"
37788f25 5495echo "libgcrypt kdf $gcrypt_kdf"
89138857 5496echo "nettle $nettle $(echo_version $nettle $nettle_version)"
fff2f982 5497echo "nettle kdf $nettle_kdf"
9a2fd434 5498echo "libtasn1 $tasn1"
4d3b6f6e 5499echo "curses support $curses"
9d9e1521 5500echo "virgl support $virglrenderer"
769ce76d 5501echo "curl support $curl"
67b915a5 5502echo "mingw32 support $mingw32"
0c58ac1c 5503echo "Audio drivers $audio_drv_list"
b64ec4e4
FZ
5504echo "Block whitelist (rw) $block_drv_rw_whitelist"
5505echo "Block whitelist (ro) $block_drv_ro_whitelist"
983eef5a 5506echo "VirtFS support $virtfs"
fe8fc5ae 5507echo "Multipath support $mpath"
821601ea
JS
5508echo "VNC support $vnc"
5509if test "$vnc" = "yes" ; then
821601ea
JS
5510 echo "VNC SASL support $vnc_sasl"
5511 echo "VNC JPEG support $vnc_jpeg"
5512 echo "VNC PNG support $vnc_png"
821601ea 5513fi
3142255c
BS
5514if test -n "$sparc_cpu"; then
5515 echo "Target Sparc Arch $sparc_cpu"
5516fi
e37630ca 5517echo "xen support $xen"
3996e85c
PD
5518if test "$xen" = "yes" ; then
5519 echo "xen ctrl version $xen_ctrl_version"
64a7ad6f 5520 echo "pv dom build $xen_pv_domain_build"
3996e85c 5521fi
2e4d9fb1 5522echo "brlapi support $brlapi"
a20a6f46 5523echo "bluez support $bluez"
a25dba17 5524echo "Documentation $docs"
40d6444e 5525echo "PIE $pie"
8a16d273 5526echo "vde support $vde"
58952137 5527echo "netmap support $netmap"
5c6c3a6c 5528echo "Linux AIO support $linux_aio"
758e8e38 5529echo "ATTR/XATTR support $attr"
77755340 5530echo "Install blobs $blobs"
b31a0277 5531echo "KVM support $kvm"
b0cb0a66 5532echo "HAX support $hax"
b3f6ea7e
PB
5533echo "TCG support $tcg"
5534if test "$tcg" = "yes" ; then
5535 echo "TCG debug enabled $debug_tcg"
5536 echo "TCG interpreter $tcg_interpreter"
5537fi
5a22ab71 5538echo "malloc trim support $malloc_trim"
2da776db 5539echo "RDMA support $rdma"
f652e6af 5540echo "fdt support $fdt"
ceb42de8 5541echo "preadv support $preadv"
5f6b9e8f 5542echo "fdatasync $fdatasync"
e78815a5
AF
5543echo "madvise $madvise"
5544echo "posix_madvise $posix_madvise"
47e98658 5545echo "libcap-ng support $cap_ng"
d5970055 5546echo "vhost-net support $vhost_net"
5e9be92d 5547echo "vhost-scsi support $vhost_scsi"
fc0b9b0e 5548echo "vhost-vsock support $vhost_vsock"
e6a74868 5549echo "vhost-user support $vhost_user"
5b808275 5550echo "Trace backends $trace_backends"
713572a7 5551if have_backend "simple"; then
9410b56c 5552echo "Trace output file $trace_file-<pid>"
e00e36fb 5553fi
89138857 5554echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
f27aaf4b 5555echo "rbd support $rbd"
dce512de 5556echo "xfsctl support $xfs"
7b02f544 5557echo "smartcard support $smartcard"
2b2325ff 5558echo "libusb $libusb"
69354a83 5559echo "usb net redir $usb_redir"
da076ffe 5560echo "OpenGL support $opengl"
014cb152 5561echo "OpenGL dmabufs $opengl_dmabuf"
c589b249 5562echo "libiscsi support $libiscsi"
6542aa9c 5563echo "libnfs support $libnfs"
d138cee9 5564echo "build guest agent $guest_agent"
d9840e25 5565echo "QGA VSS support $guest_agent_with_vss"
50cbebb9 5566echo "QGA w32 disk info $guest_agent_ntddscsi"
4c875d89 5567echo "QGA MSI support $guest_agent_msi"
f794573e 5568echo "seccomp support $seccomp"
7c2acc70 5569echo "coroutine backend $coroutine"
70c60c08 5570echo "coroutine pool $coroutine_pool"
7d992e4d 5571echo "debug stack usage $debug_stack_usage"
f0d92b56 5572echo "crypto afalg $crypto_afalg"
eb100396 5573echo "GlusterFS support $glusterfs"
1d728c39
BS
5574echo "gcov $gcov_tool"
5575echo "gcov enabled $gcov"
ab214c29 5576echo "TPM support $tpm"
0a12ec87 5577echo "libssh2 support $libssh2"
3b8acc11 5578echo "TPM passthrough $tpm_passthrough"
f4ede81e 5579echo "TPM emulator $tpm_emulator"
3556c233 5580echo "QOM debugging $qom_cast_debug"
ed1701c6 5581echo "Live block migration $live_block_migration"
607dacd0
QN
5582echo "lzo support $lzo"
5583echo "snappy support $snappy"
6b383c08 5584echo "bzip2 support $bzip2"
a99d57bb 5585echo "NUMA host support $numa"
2847b469 5586echo "tcmalloc support $tcmalloc"
7b01cb97 5587echo "jemalloc support $jemalloc"
99f2dbd3 5588echo "avx2 optimization $avx2_opt"
a6b1d4c0 5589echo "replication support $replication"
da92c3ff 5590echo "VxHS block device $vxhs"
8ca80760 5591echo "capstone $capstone"
67b915a5 5592
1ba16968 5593if test "$sdl_too_old" = "yes"; then
24b55b96 5594echo "-> Your SDL version is too old - please upgrade to have SDL support"
7c1f25b4 5595fi
7d13299d 5596
898be3e0
PM
5597if test "$supported_cpu" = "no"; then
5598 echo
5599 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5600 echo
5601 echo "CPU host architecture $cpu support is not currently maintained."
5602 echo "The QEMU project intends to remove support for this host CPU in"
5603 echo "a future release if nobody volunteers to maintain it and to"
5604 echo "provide a build host for our continuous integration setup."
5605 echo "configure has succeeded and you can continue to build, but"
5606 echo "if you care about QEMU on this platform you should contact"
5607 echo "us upstream at qemu-devel@nongnu.org."
5608fi
5609
5610if test "$supported_os" = "no"; then
5611 echo
5612 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5613 echo
c50126aa
PM
5614 echo "Host OS $targetos support is not currently maintained."
5615 echo "The QEMU project intends to remove support for this host OS in"
898be3e0
PM
5616 echo "a future release if nobody volunteers to maintain it and to"
5617 echo "provide a build host for our continuous integration setup."
5618 echo "configure has succeeded and you can continue to build, but"
5619 echo "if you care about QEMU on this platform you should contact"
5620 echo "us upstream at qemu-devel@nongnu.org."
5621fi
5622
98ec69ac 5623config_host_mak="config-host.mak"
98ec69ac 5624
dbd99ae3
SW
5625echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5626
98ec69ac 5627echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 5628echo >> $config_host_mak
98ec69ac 5629
e6c3b0f7 5630echo all: >> $config_host_mak
99d7cc75
PB
5631echo "prefix=$prefix" >> $config_host_mak
5632echo "bindir=$bindir" >> $config_host_mak
3aa5d2be 5633echo "libdir=$libdir" >> $config_host_mak
8bf188aa 5634echo "libexecdir=$libexecdir" >> $config_host_mak
0f94d6da 5635echo "includedir=$includedir" >> $config_host_mak
99d7cc75 5636echo "mandir=$mandir" >> $config_host_mak
99d7cc75 5637echo "sysconfdir=$sysconfdir" >> $config_host_mak
22d07038 5638echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
9afa52ce 5639echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
3d5eecab 5640echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
9afa52ce 5641echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
e26110cf 5642echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5a699bbb
LE
5643if test "$mingw32" = "no" ; then
5644 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5645fi
f354b1a1 5646echo "qemu_helperdir=$libexecdir" >> $config_host_mak
f9943cd5 5647echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
11cde1c8 5648echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
f9943cd5 5649echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
834574ea 5650echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
f544a488 5651echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
cc84d63a 5652echo "GIT=$git" >> $config_host_mak
aef45d51 5653echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
f62bbee5 5654echo "GIT_UPDATE=$git_update" >> $config_host_mak
804edf29 5655
98ec69ac 5656echo "ARCH=$ARCH" >> $config_host_mak
727e5283 5657
f8393946 5658if test "$debug_tcg" = "yes" ; then
2358a494 5659 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 5660fi
1625af87 5661if test "$strip_opt" = "yes" ; then
52ba784d 5662 echo "STRIP=${strip}" >> $config_host_mak
1625af87 5663fi
7d13299d 5664if test "$bigendian" = "yes" ; then
e2542fe2 5665 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 5666fi
67b915a5 5667if test "$mingw32" = "yes" ; then
98ec69ac 5668 echo "CONFIG_WIN32=y" >> $config_host_mak
89138857 5669 rc_version=$(cat $source_path/VERSION)
9fe6de94
BS
5670 version_major=${rc_version%%.*}
5671 rc_version=${rc_version#*.}
5672 version_minor=${rc_version%%.*}
5673 rc_version=${rc_version#*.}
5674 version_subminor=${rc_version%%.*}
5675 version_micro=0
5676 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5677 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
d9840e25
TS
5678 if test "$guest_agent_with_vss" = "yes" ; then
5679 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 5680 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
5681 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5682 fi
50cbebb9
MR
5683 if test "$guest_agent_ntddscsi" = "yes" ; then
5684 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5685 fi
1a34904e 5686 if test "$guest_agent_msi" = "yes"; then
9dacf32d
YH
5687 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5688 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5689 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5690 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5691 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5692 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5693 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5694 fi
210fa556 5695else
35f4df27 5696 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
5697fi
5698
5699if test "$linux" = "yes" ; then
5700 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 5701fi
128ab2ff 5702
83fb7adf 5703if test "$darwin" = "yes" ; then
98ec69ac 5704 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 5705fi
b29fe3ed 5706
ec530c81 5707if test "$solaris" = "yes" ; then
98ec69ac 5708 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 5709fi
179cf400
AF
5710if test "$haiku" = "yes" ; then
5711 echo "CONFIG_HAIKU=y" >> $config_host_mak
5712fi
97a847bc 5713if test "$static" = "yes" ; then
98ec69ac 5714 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 5715fi
1ba16968 5716if test "$profiler" = "yes" ; then
2358a494 5717 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 5718fi
c20709aa 5719if test "$slirp" = "yes" ; then
98ec69ac 5720 echo "CONFIG_SLIRP=y" >> $config_host_mak
e2d8830e 5721 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
c20709aa 5722fi
8a16d273 5723if test "$vde" = "yes" ; then
98ec69ac 5724 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 5725 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 5726fi
58952137
VM
5727if test "$netmap" = "yes" ; then
5728 echo "CONFIG_NETMAP=y" >> $config_host_mak
5729fi
015a33bd
GA
5730if test "$l2tpv3" = "yes" ; then
5731 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5732fi
47e98658
CB
5733if test "$cap_ng" = "yes" ; then
5734 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5735fi
2358a494 5736echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 5737for drv in $audio_drv_list; do
89138857 5738 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
98ec69ac 5739 echo "$def=y" >> $config_host_mak
0c58ac1c 5740done
b1149911
FZ
5741echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5742echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5743echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5744echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5745echo "OSS_LIBS=$oss_libs" >> $config_host_mak
67f86e8e
JQ
5746if test "$audio_pt_int" = "yes" ; then
5747 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5748fi
d5631638 5749if test "$audio_win_int" = "yes" ; then
5750 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5751fi
b64ec4e4
FZ
5752echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5753echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
821601ea
JS
5754if test "$vnc" = "yes" ; then
5755 echo "CONFIG_VNC=y" >> $config_host_mak
5756fi
2f9606b3 5757if test "$vnc_sasl" = "yes" ; then
98ec69ac 5758 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
2f9606b3 5759fi
821601ea 5760if test "$vnc_jpeg" = "yes" ; then
2f6f5c7a 5761 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
2f6f5c7a 5762fi
821601ea 5763if test "$vnc_png" = "yes" ; then
efe556ad 5764 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
efe556ad 5765fi
6a021536
GH
5766if test "$xkbcommon" = "yes" ; then
5767 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
5768 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
5769fi
76655d6d 5770if test "$fnmatch" = "yes" ; then
2358a494 5771 echo "CONFIG_FNMATCH=y" >> $config_host_mak
76655d6d 5772fi
dce512de
CH
5773if test "$xfs" = "yes" ; then
5774 echo "CONFIG_XFS=y" >> $config_host_mak
5775fi
89138857 5776qemu_version=$(head $source_path/VERSION)
98ec69ac 5777echo "VERSION=$qemu_version" >>$config_host_mak
2358a494 5778echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 5779echo "SRC_PATH=$source_path" >> $config_host_mak
98ec69ac 5780echo "TARGET_DIRS=$target_list" >> $config_host_mak
a25dba17 5781if [ "$docs" = "yes" ] ; then
98ec69ac 5782 echo "BUILD_DOCS=yes" >> $config_host_mak
cc8ae6de 5783fi
17969268 5784if test "$modules" = "yes"; then
e26110cf
FZ
5785 # $shacmd can generate a hash started with digit, which the compiler doesn't
5786 # like as an symbol. So prefix it with an underscore
89138857 5787 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
5788 echo "CONFIG_MODULES=y" >> $config_host_mak
5789fi
1ac88f28 5790if test "$sdl" = "yes" ; then
98ec69ac 5791 echo "CONFIG_SDL=y" >> $config_host_mak
a3f4d63d 5792 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
1ac88f28 5793 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
8ecc89f6 5794 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
49ecc3fa
FB
5795fi
5796if test "$cocoa" = "yes" ; then
98ec69ac 5797 echo "CONFIG_COCOA=y" >> $config_host_mak
4d3b6f6e
AZ
5798fi
5799if test "$curses" = "yes" ; then
98ec69ac 5800 echo "CONFIG_CURSES=y" >> $config_host_mak
49ecc3fa 5801fi
099d6b0f 5802if test "$pipe2" = "yes" ; then
2358a494 5803 echo "CONFIG_PIPE2=y" >> $config_host_mak
099d6b0f 5804fi
40ff6d7e
KW
5805if test "$accept4" = "yes" ; then
5806 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5807fi
3ce34dfb 5808if test "$splice" = "yes" ; then
2358a494 5809 echo "CONFIG_SPLICE=y" >> $config_host_mak
3ce34dfb 5810fi
c2882b96
RV
5811if test "$eventfd" = "yes" ; then
5812 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5813fi
751bcc39
MAL
5814if test "$memfd" = "yes" ; then
5815 echo "CONFIG_MEMFD=y" >> $config_host_mak
5816fi
d0927938
UH
5817if test "$fallocate" = "yes" ; then
5818 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5819fi
3d4fa43e
KK
5820if test "$fallocate_punch_hole" = "yes" ; then
5821 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5822fi
b953f075
DL
5823if test "$fallocate_zero_range" = "yes" ; then
5824 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5825fi
ed911435
KW
5826if test "$posix_fallocate" = "yes" ; then
5827 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5828fi
c727f47d
PM
5829if test "$sync_file_range" = "yes" ; then
5830 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5831fi
dace20dc
PM
5832if test "$fiemap" = "yes" ; then
5833 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5834fi
d0927938
UH
5835if test "$dup3" = "yes" ; then
5836 echo "CONFIG_DUP3=y" >> $config_host_mak
5837fi
4e0c6529
AB
5838if test "$ppoll" = "yes" ; then
5839 echo "CONFIG_PPOLL=y" >> $config_host_mak
5840fi
cd758dd0
AB
5841if test "$prctl_pr_set_timerslack" = "yes" ; then
5842 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5843fi
3b6edd16
PM
5844if test "$epoll" = "yes" ; then
5845 echo "CONFIG_EPOLL=y" >> $config_host_mak
5846fi
5847if test "$epoll_create1" = "yes" ; then
5848 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5849fi
a8fd1aba
PM
5850if test "$sendfile" = "yes" ; then
5851 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5852fi
51834341
RV
5853if test "$timerfd" = "yes" ; then
5854 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5855fi
9af5c906
RV
5856if test "$setns" = "yes" ; then
5857 echo "CONFIG_SETNS=y" >> $config_host_mak
5858fi
38860a03
AM
5859if test "$clock_adjtime" = "yes" ; then
5860 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5861fi
5a03cd00
AM
5862if test "$syncfs" = "yes" ; then
5863 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5864fi
3b3f24ad 5865if test "$inotify" = "yes" ; then
2358a494 5866 echo "CONFIG_INOTIFY=y" >> $config_host_mak
3b3f24ad 5867fi
c05c7a73
RV
5868if test "$inotify1" = "yes" ; then
5869 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5870fi
401bc051
PM
5871if test "$sem_timedwait" = "yes" ; then
5872 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5873fi
6ae9a1f4
JQ
5874if test "$byteswap_h" = "yes" ; then
5875 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5876fi
5877if test "$bswap_h" = "yes" ; then
5878 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5879fi
769ce76d 5880if test "$curl" = "yes" ; then
d3399d7c 5881 echo "CONFIG_CURL=m" >> $config_host_mak
b1d5a277 5882 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6ebc91e5 5883 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
769ce76d 5884fi
2e4d9fb1 5885if test "$brlapi" = "yes" ; then
98ec69ac 5886 echo "CONFIG_BRLAPI=y" >> $config_host_mak
8eca2889 5887 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
2e4d9fb1 5888fi
fb599c9a 5889if test "$bluez" = "yes" ; then
98ec69ac 5890 echo "CONFIG_BLUEZ=y" >> $config_host_mak
ef7635ec 5891 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
fb599c9a 5892fi
d46f7c9e 5893if test "$glib_subprocess" = "yes" ; then
9d41401b
MT
5894 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5895fi
a4ccabcf
AL
5896if test "$gtk" = "yes" ; then
5897 echo "CONFIG_GTK=y" >> $config_host_mak
a3f4d63d 5898 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
a4ccabcf 5899 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
014cb152 5900 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
925a0400
GH
5901 if test "$gtk_gl" = "yes" ; then
5902 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5903 fi
bbbf9bfb 5904fi
a1c5e949 5905echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
ddbb0d09
DB
5906if test "$gnutls" = "yes" ; then
5907 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5908fi
b917da4c
DB
5909if test "$gnutls_rnd" = "yes" ; then
5910 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5911fi
91bfcdb0
DB
5912if test "$gcrypt" = "yes" ; then
5913 echo "CONFIG_GCRYPT=y" >> $config_host_mak
1f923c70
LM
5914 if test "$gcrypt_hmac" = "yes" ; then
5915 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5916 fi
37788f25
DB
5917 if test "$gcrypt_kdf" = "yes" ; then
5918 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5919 fi
62893b67 5920fi
91bfcdb0
DB
5921if test "$nettle" = "yes" ; then
5922 echo "CONFIG_NETTLE=y" >> $config_host_mak
becaeb72 5923 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
fff2f982
DB
5924 if test "$nettle_kdf" = "yes" ; then
5925 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5926 fi
ed754746 5927fi
9a2fd434
DB
5928if test "$tasn1" = "yes" ; then
5929 echo "CONFIG_TASN1=y" >> $config_host_mak
5930fi
559607ea
DB
5931if test "$have_ifaddrs_h" = "yes" ; then
5932 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5933fi
6b39b063
EB
5934if test "$have_broken_size_max" = "yes" ; then
5935 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5936fi
277abf15
JV
5937
5938# Work around a system header bug with some kernel/XFS header
5939# versions where they both try to define 'struct fsxattr':
5940# xfs headers will not try to redefine structs from linux headers
5941# if this macro is set.
5942if test "$have_fsxattr" = "yes" ; then
5943 echo "HAVE_FSXATTR=y" >> $config_host_mak
5944fi
bbbf9bfb
SW
5945if test "$vte" = "yes" ; then
5946 echo "CONFIG_VTE=y" >> $config_host_mak
a4ccabcf
AL
5947 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5948fi
9d9e1521
GH
5949if test "$virglrenderer" = "yes" ; then
5950 echo "CONFIG_VIRGL=y" >> $config_host_mak
5951 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5952 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5953fi
e37630ca 5954if test "$xen" = "yes" ; then
6dbd588a 5955 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 5956 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
64a7ad6f
IC
5957 if test "$xen_pv_domain_build" = "yes" ; then
5958 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5959 fi
e37630ca 5960fi
5c6c3a6c
CH
5961if test "$linux_aio" = "yes" ; then
5962 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5963fi
758e8e38
VJ
5964if test "$attr" = "yes" ; then
5965 echo "CONFIG_ATTR=y" >> $config_host_mak
5966fi
4f26f2b6
AK
5967if test "$libattr" = "yes" ; then
5968 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5969fi
983eef5a
MI
5970if test "$virtfs" = "yes" ; then
5971 echo "CONFIG_VIRTFS=y" >> $config_host_mak
758e8e38 5972fi
fe8fc5ae
PB
5973if test "$mpath" = "yes" ; then
5974 echo "CONFIG_MPATH=y" >> $config_host_mak
5975fi
5e9be92d
NB
5976if test "$vhost_scsi" = "yes" ; then
5977 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5978fi
e6a74868 5979if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
03ce5744
NN
5980 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5981fi
fc0b9b0e
SH
5982if test "$vhost_vsock" = "yes" ; then
5983 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5984fi
e6a74868
MAL
5985if test "$vhost_user" = "yes" ; then
5986 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5987fi
77755340 5988if test "$blobs" = "yes" ; then
98ec69ac 5989 echo "INSTALL_BLOBS=yes" >> $config_host_mak
77755340 5990fi
bf9298b9 5991if test "$iovec" = "yes" ; then
2358a494 5992 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 5993fi
ceb42de8 5994if test "$preadv" = "yes" ; then
2358a494 5995 echo "CONFIG_PREADV=y" >> $config_host_mak
ceb42de8 5996fi
f652e6af 5997if test "$fdt" = "yes" ; then
3f0855b1 5998 echo "CONFIG_FDT=y" >> $config_host_mak
f652e6af 5999fi
dcc38d1c
MT
6000if test "$signalfd" = "yes" ; then
6001 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6002fi
b3f6ea7e
PB
6003if test "$tcg" = "yes"; then
6004 echo "CONFIG_TCG=y" >> $config_host_mak
6005 if test "$tcg_interpreter" = "yes" ; then
6006 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6007 fi
9195b2c2 6008fi
5f6b9e8f
BS
6009if test "$fdatasync" = "yes" ; then
6010 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6011fi
e78815a5
AF
6012if test "$madvise" = "yes" ; then
6013 echo "CONFIG_MADVISE=y" >> $config_host_mak
6014fi
6015if test "$posix_madvise" = "yes" ; then
6016 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6017fi
97a847bc 6018
cd4ec0b4
GH
6019if test "$spice" = "yes" ; then
6020 echo "CONFIG_SPICE=y" >> $config_host_mak
6021fi
36707144 6022
7b02f544
MAL
6023if test "$smartcard" = "yes" ; then
6024 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7b62bf5a
FZ
6025 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6026 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
111a38b0
RR
6027fi
6028
2b2325ff
GH
6029if test "$libusb" = "yes" ; then
6030 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
b878b652
FZ
6031 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6032 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
2b2325ff
GH
6033fi
6034
69354a83
HG
6035if test "$usb_redir" = "yes" ; then
6036 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
cc7923fc
FZ
6037 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6038 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
69354a83
HG
6039fi
6040
da076ffe
GH
6041if test "$opengl" = "yes" ; then
6042 echo "CONFIG_OPENGL=y" >> $config_host_mak
6043 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
014cb152
GH
6044 if test "$opengl_dmabuf" = "yes" ; then
6045 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6046 fi
20ff075b
MW
6047fi
6048
5a22ab71
YZ
6049if test "$malloc_trim" = "yes" ; then
6050 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6051fi
6052
99f2dbd3
LL
6053if test "$avx2_opt" = "yes" ; then
6054 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6055fi
6056
607dacd0
QN
6057if test "$lzo" = "yes" ; then
6058 echo "CONFIG_LZO=y" >> $config_host_mak
6059fi
6060
6061if test "$snappy" = "yes" ; then
6062 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6063fi
6064
6b383c08
PW
6065if test "$bzip2" = "yes" ; then
6066 echo "CONFIG_BZIP2=y" >> $config_host_mak
6067 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6068fi
6069
c589b249 6070if test "$libiscsi" = "yes" ; then
d3399d7c 6071 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6ebc91e5
FZ
6072 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6073 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
c589b249
RS
6074fi
6075
6542aa9c 6076if test "$libnfs" = "yes" ; then
4be4879f
CL
6077 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6078 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6542aa9c
PL
6079fi
6080
f794573e
EO
6081if test "$seccomp" = "yes"; then
6082 echo "CONFIG_SECCOMP=y" >> $config_host_mak
c3883e1f
FZ
6083 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6084 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
f794573e
EO
6085fi
6086
83fb7adf 6087# XXX: suppress that
7d3505c5 6088if [ "$bsd" = "yes" ] ; then
2358a494 6089 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
6090fi
6091
4d9310f4
DB
6092if test "$localtime_r" = "yes" ; then
6093 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6094fi
3556c233
PB
6095if test "$qom_cast_debug" = "yes" ; then
6096 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6097fi
f27aaf4b 6098if test "$rbd" = "yes" ; then
d3399d7c 6099 echo "CONFIG_RBD=m" >> $config_host_mak
6ebc91e5
FZ
6100 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6101 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
d0e2fce5
AK
6102fi
6103
7c2acc70 6104echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
6105if test "$coroutine_pool" = "yes" ; then
6106 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6107else
6108 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6109fi
20ff6c80 6110
7d992e4d
PL
6111if test "$debug_stack_usage" = "yes" ; then
6112 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6113fi
6114
f0d92b56
LM
6115if test "$crypto_afalg" = "yes" ; then
6116 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6117fi
6118
d2042378
AK
6119if test "$open_by_handle_at" = "yes" ; then
6120 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6121fi
6122
e06a765e
HPB
6123if test "$linux_magic_h" = "yes" ; then
6124 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
8ab1bf12
LC
6125fi
6126
cc6e3ca9
GH
6127if test "$pragma_diagnostic_available" = "yes" ; then
6128 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
06d71fa1
PM
6129fi
6130
3f4349dc
KW
6131if test "$valgrind_h" = "yes" ; then
6132 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6133fi
6134
8ab1bf12
LC
6135if test "$has_environ" = "yes" ; then
6136 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
e06a765e
HPB
6137fi
6138
76a347e1
RH
6139if test "$cpuid_h" = "yes" ; then
6140 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6141fi
6142
f540166b
RH
6143if test "$int128" = "yes" ; then
6144 echo "CONFIG_INT128=y" >> $config_host_mak
6145fi
6146
7ebee43e
RH
6147if test "$atomic128" = "yes" ; then
6148 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6149fi
6150
df79b996
RH
6151if test "$atomic64" = "yes" ; then
6152 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6153fi
6154
1e6e9aca
RH
6155if test "$getauxval" = "yes" ; then
6156 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6157fi
6158
eb100396 6159if test "$glusterfs" = "yes" ; then
d3399d7c 6160 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6ebc91e5
FZ
6161 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6162 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
0c14fb47
BR
6163fi
6164
d85fa9eb
JC
6165if test "$glusterfs_xlator_opt" = "yes" ; then
6166 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6167fi
6168
0c14fb47
BR
6169if test "$glusterfs_discard" = "yes" ; then
6170 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
eb100396 6171fi
e06a765e 6172
df3a429a
NV
6173if test "$glusterfs_fallocate" = "yes" ; then
6174 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6175fi
6176
7c815372
BR
6177if test "$glusterfs_zerofill" = "yes" ; then
6178 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6179fi
6180
0a12ec87 6181if test "$libssh2" = "yes" ; then
d3399d7c 6182 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6ebc91e5
FZ
6183 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6184 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
0a12ec87
RJ
6185fi
6186
ed1701c6
DDAG
6187if test "$live_block_migration" = "yes" ; then
6188 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6189fi
6190
3b8acc11
PB
6191if test "$tpm" = "yes"; then
6192 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
f4ede81e 6193 # TPM passthrough support?
3b8acc11
PB
6194 if test "$tpm_passthrough" = "yes"; then
6195 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6196 fi
f4ede81e
AV
6197 # TPM emulator support?
6198 if test "$tpm_emulator" = "yes"; then
6199 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6200 fi
3b8acc11
PB
6201fi
6202
5b808275
LV
6203echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6204if have_backend "nop"; then
6d8a764e 6205 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 6206fi
5b808275 6207if have_backend "simple"; then
6d8a764e
LV
6208 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6209 # Set the appropriate trace file.
953ffe0f 6210 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 6211fi
ed7f5f1d
PB
6212if have_backend "log"; then
6213 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 6214fi
5b808275 6215if have_backend "ust"; then
6d8a764e
LV
6216 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6217fi
5b808275 6218if have_backend "dtrace"; then
6d8a764e
LV
6219 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6220 if test "$trace_backend_stap" = "yes" ; then
6221 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6222 fi
c276b17d 6223fi
5b808275 6224if have_backend "ftrace"; then
781e9545
ET
6225 if test "$linux" = "yes" ; then
6226 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 6227 else
21684af0 6228 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
6229 fi
6230fi
0a852417
PD
6231if have_backend "syslog"; then
6232 if test "$posix_syslog" = "yes" ; then
6233 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6234 else
6235 feature_not_found "syslog(trace backend)" "syslog not available"
6236 fi
6237fi
9410b56c
PS
6238echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6239
2da776db
MH
6240if test "$rdma" = "yes" ; then
6241 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 6242 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
6243fi
6244
575b22b1
LV
6245if test "$have_rtnetlink" = "yes" ; then
6246 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6247fi
6248
a6b1d4c0
CX
6249if test "$replication" = "yes" ; then
6250 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6251fi
6252
6a02c806
SH
6253if test "$have_af_vsock" = "yes" ; then
6254 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6255fi
6256
4d04351f
CC
6257if test "$have_sysmacros" = "yes" ; then
6258 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6259fi
6260
49e00a18
AG
6261if test "$have_static_assert" = "yes" ; then
6262 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6263fi
6264
e674605f
TG
6265if test "$have_utmpx" = "yes" ; then
6266 echo "HAVE_UTMPX=y" >> $config_host_mak
6267fi
6268
e0580342
KR
6269if test "$ivshmem" = "yes" ; then
6270 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
8ca80760 6271fi
e219c499 6272if test "$capstone" != "no" ; then
8ca80760 6273 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
e0580342
KR
6274fi
6275
5c312079
DDAG
6276# Hold two types of flag:
6277# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6278# a thread we have a handle to
6279# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6280# platform
6281if test "$pthread_setname_np" = "yes" ; then
6282 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6283 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6284fi
6285
da92c3ff
AM
6286if test "$vxhs" = "yes" ; then
6287 echo "CONFIG_VXHS=y" >> $config_host_mak
6288 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6289fi
6290
5b5e3037
PB
6291if test "$tcg_interpreter" = "yes"; then
6292 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6293elif test "$ARCH" = "sparc64" ; then
6294 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6295elif test "$ARCH" = "s390x" ; then
6296 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
c72b26ec 6297elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5b5e3037 6298 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
40d964b5
RH
6299elif test "$ARCH" = "ppc64" ; then
6300 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5b5e3037
PB
6301else
6302 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6303fi
6304QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6305
98ec69ac 6306echo "TOOLS=$tools" >> $config_host_mak
98ec69ac 6307echo "ROMS=$roms" >> $config_host_mak
804edf29
JQ
6308echo "MAKE=$make" >> $config_host_mak
6309echo "INSTALL=$install" >> $config_host_mak
1901cb14
BS
6310echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6311echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
e999ee44
MT
6312echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6313echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
c886edfb 6314echo "PYTHON=$python" >> $config_host_mak
804edf29 6315echo "CC=$cc" >> $config_host_mak
a31a8642
MT
6316if $iasl -h > /dev/null 2>&1; then
6317 echo "IASL=$iasl" >> $config_host_mak
6318fi
2b2e59e6 6319echo "CC_I386=$cc_i386" >> $config_host_mak
804edf29 6320echo "HOST_CC=$host_cc" >> $config_host_mak
83f73fce 6321echo "CXX=$cxx" >> $config_host_mak
3c4a4d0d 6322echo "OBJCC=$objcc" >> $config_host_mak
804edf29 6323echo "AR=$ar" >> $config_host_mak
45d285ab 6324echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
cdbd727c 6325echo "AS=$as" >> $config_host_mak
5f6f0e27 6326echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 6327echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
6328echo "OBJCOPY=$objcopy" >> $config_host_mak
6329echo "LD=$ld" >> $config_host_mak
9f81aeb5 6330echo "RANLIB=$ranlib" >> $config_host_mak
4852ee95 6331echo "NM=$nm" >> $config_host_mak
9fe6de94 6332echo "WINDRES=$windres" >> $config_host_mak
e2a2ed06 6333echo "CFLAGS=$CFLAGS" >> $config_host_mak
46eef33b 6334echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 6335echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 6336echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
f9728943 6337echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
e39f0062
PB
6338if test "$sparse" = "yes" ; then
6339 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
80fd48df 6340 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
2944d742 6341 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
e39f0062
PB
6342 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6343 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6344fi
42da6041
GH
6345if test "$cross_prefix" != ""; then
6346 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6347else
6348 echo "AUTOCONF_HOST := " >> $config_host_mak
6349fi
e2a2ed06 6350echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
46eef33b 6351echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6969ec6c 6352echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
e57218b6 6353echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
73da375e 6354echo "LIBS+=$LIBS" >> $config_host_mak
3e2e0e6b 6355echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
409437e1 6356echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
804edf29 6357echo "EXESUF=$EXESUF" >> $config_host_mak
17969268
FZ
6358echo "DSOSUF=$DSOSUF" >> $config_host_mak
6359echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
957f1f99 6360echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
90246037
DB
6361echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6362echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
94dd53c5 6363echo "POD2MAN=$POD2MAN" >> $config_host_mak
cbdd1999 6364echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
1d728c39
BS
6365if test "$gcov" = "yes" ; then
6366 echo "CONFIG_GCOV=y" >> $config_host_mak
6367 echo "GCOV=$gcov_tool" >> $config_host_mak
6368fi
804edf29 6369
6efd7517
PM
6370# use included Linux headers
6371if test "$linux" = "yes" ; then
a307beb6 6372 mkdir -p linux-headers
6efd7517 6373 case "$cpu" in
c72b26ec 6374 i386|x86_64|x32)
08312a63 6375 linux_arch=x86
6efd7517
PM
6376 ;;
6377 ppcemb|ppc|ppc64)
08312a63 6378 linux_arch=powerpc
6efd7517
PM
6379 ;;
6380 s390x)
08312a63
PM
6381 linux_arch=s390
6382 ;;
1f080313
CF
6383 aarch64)
6384 linux_arch=arm64
6385 ;;
222e7d11
SL
6386 mips64)
6387 linux_arch=mips
6388 ;;
08312a63
PM
6389 *)
6390 # For most CPUs the kernel architecture name and QEMU CPU name match.
6391 linux_arch="$cpu"
6efd7517
PM
6392 ;;
6393 esac
08312a63
PM
6394 # For non-KVM architectures we will not have asm headers
6395 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6396 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6397 fi
6efd7517
PM
6398fi
6399
1d14ffa9 6400for target in $target_list; do
97a847bc 6401target_dir="$target"
25be210f 6402config_target_mak=$target_dir/config-target.mak
89138857 6403target_name=$(echo $target | cut -d '-' -f 1)
97a847bc 6404target_bigendian="no"
1f3d3c8f 6405
c1799a84 6406case "$target_name" in
4a09d0bb 6407 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
ea2d6a39
JQ
6408 target_bigendian=yes
6409 ;;
6410esac
97a847bc 6411target_softmmu="no"
997344f3 6412target_user_only="no"
831b7825 6413target_linux_user="no"
84778508 6414target_bsd_user="no"
9e407a85 6415case "$target" in
c1799a84 6416 ${target_name}-softmmu)
9e407a85
PB
6417 target_softmmu="yes"
6418 ;;
c1799a84 6419 ${target_name}-linux-user)
9e407a85
PB
6420 target_user_only="yes"
6421 target_linux_user="yes"
6422 ;;
c1799a84 6423 ${target_name}-bsd-user)
84778508
BS
6424 target_user_only="yes"
6425 target_bsd_user="yes"
6426 ;;
9e407a85 6427 *)
76ad07a4 6428 error_exit "Target '$target' not recognised"
9e407a85
PB
6429 exit 1
6430 ;;
6431esac
831b7825 6432
97a847bc 6433mkdir -p $target_dir
25be210f 6434echo "# Automatically generated by configure - do not modify" > $config_target_mak
de83cd02 6435
e5fe0c52 6436bflt="no"
ca759f9e 6437mttcg="no"
89138857 6438interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
56aebc89 6439gdb_xml_files=""
7ba1e619 6440
c1799a84 6441TARGET_ARCH="$target_name"
6acff7da 6442TARGET_BASE_ARCH=""
e6e91b9c 6443TARGET_ABI_DIR=""
e73aae67 6444
c1799a84 6445case "$target_name" in
2408a527 6446 i386)
b8158192 6447 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
2408a527
AJ
6448 ;;
6449 x86_64)
6acff7da 6450 TARGET_BASE_ARCH=i386
b8158192 6451 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
2408a527
AJ
6452 ;;
6453 alpha)
5ee4f3c2 6454 mttcg="yes"
2408a527
AJ
6455 ;;
6456 arm|armeb)
b498c8a0 6457 TARGET_ARCH=arm
2408a527 6458 bflt="yes"
ca759f9e 6459 mttcg="yes"
56aebc89 6460 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
2408a527 6461 ;;
6a49fa95
AG
6462 aarch64)
6463 TARGET_BASE_ARCH=arm
6464 bflt="yes"
ca759f9e 6465 mttcg="yes"
8f95ce2e 6466 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6a49fa95 6467 ;;
2408a527 6468 cris)
2408a527 6469 ;;
61766fe9
RH
6470 hppa)
6471 ;;
613a22c9 6472 lm32)
613a22c9 6473 ;;
2408a527 6474 m68k)
2408a527 6475 bflt="yes"
5a4526b2 6476 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
2408a527 6477 ;;
877fdc12
EI
6478 microblaze|microblazeel)
6479 TARGET_ARCH=microblaze
72b675ca 6480 bflt="yes"
72b675ca 6481 ;;
0adcffb1 6482 mips|mipsel)
b498c8a0 6483 TARGET_ARCH=mips
25be210f 6484 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
2408a527
AJ
6485 ;;
6486 mipsn32|mipsn32el)
597e2cec 6487 TARGET_ARCH=mips64
6acff7da 6488 TARGET_BASE_ARCH=mips
25be210f 6489 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
597e2cec 6490 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527
AJ
6491 ;;
6492 mips64|mips64el)
b498c8a0 6493 TARGET_ARCH=mips64
6acff7da 6494 TARGET_BASE_ARCH=mips
25be210f 6495 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
2408a527 6496 ;;
d15a9c23
AG
6497 moxie)
6498 ;;
e671711c
MV
6499 nios2)
6500 ;;
4a09d0bb 6501 or1k)
e67db06e
JL
6502 TARGET_ARCH=openrisc
6503 TARGET_BASE_ARCH=openrisc
e67db06e 6504 ;;
2408a527 6505 ppc)
c8b3532d 6506 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
6507 ;;
6508 ppcemb)
6acff7da 6509 TARGET_BASE_ARCH=ppc
e6e91b9c 6510 TARGET_ABI_DIR=ppc
c8b3532d 6511 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
2408a527
AJ
6512 ;;
6513 ppc64)
6acff7da 6514 TARGET_BASE_ARCH=ppc
e6e91b9c 6515 TARGET_ABI_DIR=ppc
f0b0685d 6516 mttcg=yes
1438eff3 6517 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527 6518 ;;
9c35126c
DK
6519 ppc64le)
6520 TARGET_ARCH=ppc64
6521 TARGET_BASE_ARCH=ppc
6522 TARGET_ABI_DIR=ppc
f0b0685d 6523 mttcg=yes
1438eff3 6524 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
9c35126c 6525 ;;
2408a527 6526 ppc64abi32)
b498c8a0 6527 TARGET_ARCH=ppc64
6acff7da 6528 TARGET_BASE_ARCH=ppc
e6e91b9c 6529 TARGET_ABI_DIR=ppc
25be210f 6530 echo "TARGET_ABI32=y" >> $config_target_mak
1438eff3 6531 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
2408a527
AJ
6532 ;;
6533 sh4|sh4eb)
b498c8a0 6534 TARGET_ARCH=sh4
2408a527
AJ
6535 bflt="yes"
6536 ;;
6537 sparc)
2408a527
AJ
6538 ;;
6539 sparc64)
6acff7da 6540 TARGET_BASE_ARCH=sparc
2408a527
AJ
6541 ;;
6542 sparc32plus)
b498c8a0 6543 TARGET_ARCH=sparc64
6acff7da 6544 TARGET_BASE_ARCH=sparc
e6e91b9c 6545 TARGET_ABI_DIR=sparc
25be210f 6546 echo "TARGET_ABI32=y" >> $config_target_mak
2408a527 6547 ;;
24e804ec 6548 s390x)
86158a2a 6549 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
24e804ec 6550 ;;
444e06b1
CG
6551 tilegx)
6552 ;;
5ecaa4ed
PC
6553 tricore)
6554 ;;
d2fbca94 6555 unicore32)
d2fbca94 6556 ;;
cfa550c6
MF
6557 xtensa|xtensaeb)
6558 TARGET_ARCH=xtensa
cfa550c6 6559 ;;
2408a527 6560 *)
76ad07a4 6561 error_exit "Unsupported target CPU"
2408a527
AJ
6562 ;;
6563esac
5e8861a0
PB
6564# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6565if [ "$TARGET_BASE_ARCH" = "" ]; then
6566 TARGET_BASE_ARCH=$TARGET_ARCH
6567fi
6568
5e8861a0
PB
6569symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6570
99afc91d
DB
6571upper() {
6572 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6573}
6574
89138857 6575target_arch_name="$(upper $TARGET_ARCH)"
25be210f 6576echo "TARGET_$target_arch_name=y" >> $config_target_mak
c1799a84 6577echo "TARGET_NAME=$target_name" >> $config_target_mak
25be210f 6578echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
e6e91b9c
JQ
6579if [ "$TARGET_ABI_DIR" = "" ]; then
6580 TARGET_ABI_DIR=$TARGET_ARCH
6581fi
25be210f 6582echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
adfc3e91
SS
6583if [ "$HOST_VARIANT_DIR" != "" ]; then
6584 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6585fi
3b6b7550
PB
6586
6587if supported_xen_target $target; then
6588 echo "CONFIG_XEN=y" >> $config_target_mak
6589 if test "$xen_pci_passthrough" = yes; then
eb6fda0f 6590 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
1b0c87fc 6591 fi
3b6b7550
PB
6592fi
6593if supported_kvm_target $target; then
6594 echo "CONFIG_KVM=y" >> $config_target_mak
6595 if test "$vhost_net" = "yes" ; then
d5970055 6596 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
e6a74868
MAL
6597 if test "$vhost_user" = "yes" ; then
6598 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6599 fi
c59249f9 6600 fi
3b6b7550
PB
6601fi
6602if supported_hax_target $target; then
6603 echo "CONFIG_HAX=y" >> $config_target_mak
b0cb0a66 6604fi
de83cd02 6605if test "$target_bigendian" = "yes" ; then
25be210f 6606 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
de83cd02 6607fi
97a847bc 6608if test "$target_softmmu" = "yes" ; then
25be210f 6609 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
ca759f9e
AB
6610 if test "$mttcg" = "yes" ; then
6611 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6612 fi
43ce4dfe 6613fi
997344f3 6614if test "$target_user_only" = "yes" ; then
25be210f 6615 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
a2c80be9 6616 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
997344f3 6617fi
831b7825 6618if test "$target_linux_user" = "yes" ; then
25be210f 6619 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
831b7825 6620fi
56aebc89
PB
6621list=""
6622if test ! -z "$gdb_xml_files" ; then
6623 for x in $gdb_xml_files; do
6624 list="$list $source_path/gdb-xml/$x"
6625 done
3d0f1517 6626 echo "TARGET_XML_FILES=$list" >> $config_target_mak
56aebc89 6627fi
97a847bc 6628
e5fe0c52 6629if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
25be210f 6630 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
e5fe0c52 6631fi
84778508 6632if test "$target_bsd_user" = "yes" ; then
25be210f 6633 echo "CONFIG_BSD_USER=y" >> $config_target_mak
84778508 6634fi
5b0753e0 6635
4afddb55 6636# generate QEMU_CFLAGS/LDFLAGS for targets
fa282484 6637
4afddb55 6638cflags=""
fa282484 6639ldflags=""
9b8e111f 6640
c765fcac
PC
6641disas_config() {
6642 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6643 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6644}
6645
64656024
JQ
6646for i in $ARCH $TARGET_BASE_ARCH ; do
6647 case "$i" in
6648 alpha)
c765fcac 6649 disas_config "ALPHA"
64656024 6650 ;;
82295d8a
RH
6651 aarch64)
6652 if test -n "${cxx}"; then
c765fcac 6653 disas_config "ARM_A64"
82295d8a
RH
6654 fi
6655 ;;
64656024 6656 arm)
c765fcac 6657 disas_config "ARM"
999b53ec 6658 if test -n "${cxx}"; then
c765fcac 6659 disas_config "ARM_A64"
999b53ec 6660 fi
64656024
JQ
6661 ;;
6662 cris)
c765fcac 6663 disas_config "CRIS"
64656024 6664 ;;
429b31a2
RH
6665 hppa)
6666 disas_config "HPPA"
6667 ;;
c72b26ec 6668 i386|x86_64|x32)
c765fcac 6669 disas_config "I386"
64656024 6670 ;;
79368f49 6671 lm32)
c765fcac 6672 disas_config "LM32"
79368f49 6673 ;;
64656024 6674 m68k)
c765fcac 6675 disas_config "M68K"
64656024 6676 ;;
877fdc12 6677 microblaze*)
c765fcac 6678 disas_config "MICROBLAZE"
64656024
JQ
6679 ;;
6680 mips*)
c765fcac 6681 disas_config "MIPS"
64656024 6682 ;;
d15a9c23 6683 moxie*)
c765fcac 6684 disas_config "MOXIE"
d15a9c23 6685 ;;
e671711c
MV
6686 nios2)
6687 disas_config "NIOS2"
6688 ;;
4a09d0bb 6689 or1k)
c765fcac 6690 disas_config "OPENRISC"
e67db06e 6691 ;;
64656024 6692 ppc*)
c765fcac 6693 disas_config "PPC"
64656024 6694 ;;
24e804ec 6695 s390*)
c765fcac 6696 disas_config "S390"
64656024
JQ
6697 ;;
6698 sh4)
c765fcac 6699 disas_config "SH4"
64656024
JQ
6700 ;;
6701 sparc*)
c765fcac 6702 disas_config "SPARC"
64656024 6703 ;;
cfa550c6 6704 xtensa*)
c765fcac 6705 disas_config "XTENSA"
cfa550c6 6706 ;;
64656024
JQ
6707 esac
6708done
9195b2c2 6709if test "$tcg_interpreter" = "yes" ; then
c765fcac 6710 disas_config "TCI"
9195b2c2 6711fi
64656024 6712
6ee7126f
JQ
6713case "$ARCH" in
6714alpha)
6715 # Ensure there's only a single GP
6716 cflags="-msmall-data $cflags"
6717;;
6718esac
6719
d02c1db3 6720if test "$gprof" = "yes" ; then
25be210f 6721 echo "TARGET_GPROF=yes" >> $config_target_mak
d02c1db3
JQ
6722 if test "$target_linux_user" = "yes" ; then
6723 cflags="-p $cflags"
6724 ldflags="-p $ldflags"
6725 fi
6726 if test "$target_softmmu" = "yes" ; then
6727 ldflags="-p $ldflags"
25be210f 6728 echo "GPROF_CFLAGS=-p" >> $config_target_mak
d02c1db3
JQ
6729 fi
6730fi
6731
9b8e111f 6732if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
964c6fa1 6733 ldflags="$ldflags $textseg_ldflags"
fa282484 6734fi
fa282484 6735
e9a3591f
CB
6736# Newer kernels on s390 check for an S390_PGSTE program header and
6737# enable the pgste page table extensions in that case. This makes
6738# the vm.allocate_pgste sysctl unnecessary. We enable this program
6739# header if
6740# - we build on s390x
6741# - we build the system emulation for s390x (qemu-system-s390x)
6742# - KVM is enabled
6743# - the linker supports --s390-pgste
6744if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6745 if ld_has --s390-pgste ; then
6746 ldflags="-Wl,--s390-pgste $ldflags"
6747 fi
6748fi
6749
25be210f
JQ
6750echo "LDFLAGS+=$ldflags" >> $config_target_mak
6751echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
fa282484 6752
97a847bc 6753done # for target in $targets
7d13299d 6754
a540f158
PC
6755if [ "$dtc_internal" = "yes" ]; then
6756 echo "config-host.h: subdir-dtc" >> $config_host_mak
6757fi
e219c499
RH
6758if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
6759 echo "config-host.h: subdir-capstone" >> $config_host_mak
6760fi
6761if test -n "$LIBCAPSTONE"; then
6762 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
6763fi
a540f158 6764
a99d57bb
WG
6765if test "$numa" = "yes"; then
6766 echo "CONFIG_NUMA=y" >> $config_host_mak
6767fi
6768
fd0e6053
JS
6769if test "$ccache_cpp2" = "yes"; then
6770 echo "export CCACHE_CPP2=y" >> $config_host_mak
6771fi
6772
d1807a4f 6773# build tree in object directory in case the source is not in the current directory
b1fb9a63 6774DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
b855f8d1 6775DIRS="$DIRS docs docs/interop fsdev scsi"
9933c305 6776DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
d1807a4f 6777DIRS="$DIRS roms/seabios roms/vgabios"
2dee8d54 6778DIRS="$DIRS qapi-generated"
c09015dd
AL
6779FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6780FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
aaa2ebc5 6781FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
d1807a4f 6782FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
446b9165 6783FILES="$FILES pc-bios/spapr-rtas/Makefile"
9933c305 6784FILES="$FILES pc-bios/s390-ccw/Makefile"
d1807a4f 6785FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
4652b792 6786FILES="$FILES pc-bios/qemu-icon.bmp"
3a586d2f 6787FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
753d11f2
RH
6788for bios_file in \
6789 $source_path/pc-bios/*.bin \
225a9ab8 6790 $source_path/pc-bios/*.lid \
5acc2ec0 6791 $source_path/pc-bios/*.aml \
753d11f2
RH
6792 $source_path/pc-bios/*.rom \
6793 $source_path/pc-bios/*.dtb \
e89e33e1 6794 $source_path/pc-bios/*.img \
753d11f2 6795 $source_path/pc-bios/openbios-* \
4e73c781 6796 $source_path/pc-bios/u-boot.* \
753d11f2
RH
6797 $source_path/pc-bios/palcode-*
6798do
89138857 6799 FILES="$FILES pc-bios/$(basename $bios_file)"
d1807a4f 6800done
89138857 6801for test_file in $(find $source_path/tests/acpi-test-data -type f)
c2304b52 6802do
89138857 6803 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
c2304b52 6804done
d1807a4f
PB
6805mkdir -p $DIRS
6806for f in $FILES ; do
cab00a5a 6807 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
f9245e10
PM
6808 symlink "$source_path/$f" "$f"
6809 fi
d1807a4f 6810done
1ad2134f 6811
c34ebfdc 6812# temporary config to build submodules
2d9f27d2 6813for rom in seabios vgabios ; do
c34ebfdc 6814 config_mak=roms/$rom/config.mak
37116c89 6815 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 6816 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 6817 echo "AS=$as" >> $config_mak
5f6f0e27 6818 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
6819 echo "CC=$cc" >> $config_mak
6820 echo "BCC=bcc" >> $config_mak
3dd46c78 6821 echo "CPP=$cpp" >> $config_mak
c34ebfdc 6822 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 6823 echo "IASL=$iasl" >> $config_mak
c34ebfdc 6824 echo "LD=$ld" >> $config_mak
9f81aeb5 6825 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
6826done
6827
fe31017f
MAL
6828# set up tests data directory
6829if [ ! -e tests/data ]; then
6830 symlink "$source_path/tests/data" tests/data
6831fi
6832
76c7560a
HR
6833# set up qemu-iotests in this build directory
6834iotests_common_env="tests/qemu-iotests/common.env"
6835iotests_check="tests/qemu-iotests/check"
6836
6837echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6838echo >> "$iotests_common_env"
6839echo "export PYTHON='$python'" >> "$iotests_common_env"
6840
6841if [ ! -e "$iotests_check" ]; then
6842 symlink "$source_path/$iotests_check" "$iotests_check"
6843fi
6844
dc655404
MT
6845# Save the configure command line for later reuse.
6846cat <<EOD >config.status
6847#!/bin/sh
6848# Generated by configure.
6849# Run this file to recreate the current configuration.
6850# Compiler output produced by configure, useful for debugging
6851# configure, is in config.log if it exists.
6852EOD
6853printf "exec" >>config.status
6854printf " '%s'" "$0" "$@" >>config.status
cf7cc929 6855echo ' "$@"' >>config.status
dc655404
MT
6856chmod +x config.status
6857
8cd05ab6 6858rm -r "$TMPDIR1"