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