]> git.proxmox.com Git - mirror_qemu.git/blame - configure
configure: check $CC available before verifying host CPU
[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 ;;
785c23ae 933 --sbindir=*|--sharedstatedir=*|\
023ddd74
MF
934 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
935 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
936 # These switches are silently ignored, for compatibility with
937 # autoconf-generated configure scripts. This allows QEMU's
938 # configure to be used by RPM and similar macros that set
939 # lots of directory switches by default.
940 ;;
97a847bc
FB
941 --disable-sdl) sdl="no"
942 ;;
c4198157
JQ
943 --enable-sdl) sdl="yes"
944 ;;
47c03744
DA
945 --with-sdlabi=*) sdlabi="$optarg"
946 ;;
3556c233
PB
947 --disable-qom-cast-debug) qom_cast_debug="no"
948 ;;
949 --enable-qom-cast-debug) qom_cast_debug="yes"
950 ;;
983eef5a
MI
951 --disable-virtfs) virtfs="no"
952 ;;
953 --enable-virtfs) virtfs="yes"
954 ;;
fe8fc5ae
PB
955 --disable-mpath) mpath="no"
956 ;;
957 --enable-mpath) mpath="yes"
958 ;;
821601ea
JS
959 --disable-vnc) vnc="no"
960 ;;
961 --enable-vnc) vnc="yes"
962 ;;
2f6a1ab0
BS
963 --oss-lib=*) oss_lib="$optarg"
964 ;;
0c58ac1c 965 --audio-drv-list=*) audio_drv_list="$optarg"
102a52e4 966 ;;
89138857 967 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
b64ec4e4 968 ;;
89138857 969 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
eb852011 970 ;;
f8393946
AJ
971 --enable-debug-tcg) debug_tcg="yes"
972 ;;
973 --disable-debug-tcg) debug_tcg="no"
974 ;;
f3d08ee6
PB
975 --enable-debug)
976 # Enable debugging options that aren't excessively noisy
977 debug_tcg="yes"
978 debug="yes"
979 strip_opt="no"
b553a042 980 fortify_source="no"
f3d08ee6 981 ;;
03b4fe7d
AL
982 --enable-sparse) sparse="yes"
983 ;;
984 --disable-sparse) sparse="no"
985 ;;
1625af87
AL
986 --disable-strip) strip_opt="no"
987 ;;
2f9606b3
AL
988 --disable-vnc-sasl) vnc_sasl="no"
989 ;;
ea784e3b
JQ
990 --enable-vnc-sasl) vnc_sasl="yes"
991 ;;
2f6f5c7a
CC
992 --disable-vnc-jpeg) vnc_jpeg="no"
993 ;;
994 --enable-vnc-jpeg) vnc_jpeg="yes"
995 ;;
efe556ad
CC
996 --disable-vnc-png) vnc_png="no"
997 ;;
998 --enable-vnc-png) vnc_png="yes"
999 ;;
443f1376 1000 --disable-slirp) slirp="no"
1d14ffa9 1001 ;;
e0e6c8c0 1002 --disable-vde) vde="no"
8a16d273 1003 ;;
dfb278bd
JQ
1004 --enable-vde) vde="yes"
1005 ;;
58952137
VM
1006 --disable-netmap) netmap="no"
1007 ;;
1008 --enable-netmap) netmap="yes"
1009 ;;
e37630ca
AL
1010 --disable-xen) xen="no"
1011 ;;
fc321b4b
JQ
1012 --enable-xen) xen="yes"
1013 ;;
eb6fda0f
AP
1014 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1015 ;;
1016 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1017 ;;
64a7ad6f
IC
1018 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1019 ;;
1020 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1021 ;;
2e4d9fb1
AJ
1022 --disable-brlapi) brlapi="no"
1023 ;;
4ffcedb6
JQ
1024 --enable-brlapi) brlapi="yes"
1025 ;;
fb599c9a
AZ
1026 --disable-bluez) bluez="no"
1027 ;;
a20a6f46
JQ
1028 --enable-bluez) bluez="yes"
1029 ;;
7ba1e619
AL
1030 --disable-kvm) kvm="no"
1031 ;;
b31a0277
JQ
1032 --enable-kvm) kvm="yes"
1033 ;;
b0cb0a66 1034 --disable-hax) hax="no"
180fb750 1035 ;;
b0cb0a66 1036 --enable-hax) hax="yes"
180fb750 1037 ;;
9195b2c2
SW
1038 --disable-tcg-interpreter) tcg_interpreter="no"
1039 ;;
1040 --enable-tcg-interpreter) tcg_interpreter="yes"
1041 ;;
47e98658
CB
1042 --disable-cap-ng) cap_ng="no"
1043 ;;
1044 --enable-cap-ng) cap_ng="yes"
1045 ;;
b3f6ea7e
PB
1046 --disable-tcg) tcg="no"
1047 ;;
1048 --enable-tcg) tcg="yes"
1049 ;;
cd4ec0b4
GH
1050 --disable-spice) spice="no"
1051 ;;
1052 --enable-spice) spice="yes"
1053 ;;
c589b249
RS
1054 --disable-libiscsi) libiscsi="no"
1055 ;;
1056 --enable-libiscsi) libiscsi="yes"
1057 ;;
6542aa9c
PL
1058 --disable-libnfs) libnfs="no"
1059 ;;
1060 --enable-libnfs) libnfs="yes"
1061 ;;
05c2a3e7
FB
1062 --enable-profiler) profiler="yes"
1063 ;;
14821030
PB
1064 --disable-cocoa) cocoa="no"
1065 ;;
c2de5c91 1066 --enable-cocoa)
1067 cocoa="yes" ;
89138857 1068 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1d14ffa9 1069 ;;
cad25d69 1070 --disable-system) softmmu="no"
0a8e90f4 1071 ;;
cad25d69 1072 --enable-system) softmmu="yes"
0a8e90f4 1073 ;;
0953a80f
ZA
1074 --disable-user)
1075 linux_user="no" ;
1076 bsd_user="no" ;
0953a80f
ZA
1077 ;;
1078 --enable-user) ;;
831b7825 1079 --disable-linux-user) linux_user="no"
0a8e90f4 1080 ;;
831b7825
TS
1081 --enable-linux-user) linux_user="yes"
1082 ;;
84778508
BS
1083 --disable-bsd-user) bsd_user="no"
1084 ;;
1085 --enable-bsd-user) bsd_user="yes"
1086 ;;
40d6444e 1087 --enable-pie) pie="yes"
34005a00 1088 ;;
40d6444e 1089 --disable-pie) pie="no"
34005a00 1090 ;;
85aa5189
FB
1091 --enable-werror) werror="yes"
1092 ;;
1093 --disable-werror) werror="no"
1094 ;;
63678e17
SN
1095 --enable-stack-protector) stack_protector="yes"
1096 ;;
1097 --disable-stack-protector) stack_protector="no"
1098 ;;
4d3b6f6e
AZ
1099 --disable-curses) curses="no"
1100 ;;
c584a6d0
JQ
1101 --enable-curses) curses="yes"
1102 ;;
769ce76d
AG
1103 --disable-curl) curl="no"
1104 ;;
788c8196
JQ
1105 --enable-curl) curl="yes"
1106 ;;
2df87df7
JQ
1107 --disable-fdt) fdt="no"
1108 ;;
1109 --enable-fdt) fdt="yes"
1110 ;;
5c6c3a6c
CH
1111 --disable-linux-aio) linux_aio="no"
1112 ;;
1113 --enable-linux-aio) linux_aio="yes"
1114 ;;
758e8e38
VJ
1115 --disable-attr) attr="no"
1116 ;;
1117 --enable-attr) attr="yes"
1118 ;;
77755340
TS
1119 --disable-blobs) blobs="no"
1120 ;;
4a19f1ec
PB
1121 --with-pkgversion=*) pkgversion=" ($optarg)"
1122 ;;
519175a2
AB
1123 --with-coroutine=*) coroutine="$optarg"
1124 ;;
70c60c08
SH
1125 --disable-coroutine-pool) coroutine_pool="no"
1126 ;;
1127 --enable-coroutine-pool) coroutine_pool="yes"
1128 ;;
7d992e4d
PL
1129 --enable-debug-stack-usage) debug_stack_usage="yes"
1130 ;;
f0d92b56
LM
1131 --enable-crypto-afalg) crypto_afalg="yes"
1132 ;;
1133 --disable-crypto-afalg) crypto_afalg="no"
1134 ;;
a25dba17 1135 --disable-docs) docs="no"
70ec5dc0 1136 ;;
a25dba17 1137 --enable-docs) docs="yes"
83a3ab8b 1138 ;;
d5970055
MT
1139 --disable-vhost-net) vhost_net="no"
1140 ;;
1141 --enable-vhost-net) vhost_net="yes"
1142 ;;
5e9be92d
NB
1143 --disable-vhost-scsi) vhost_scsi="no"
1144 ;;
1145 --enable-vhost-scsi) vhost_scsi="yes"
1146 ;;
fc0b9b0e
SH
1147 --disable-vhost-vsock) vhost_vsock="no"
1148 ;;
1149 --enable-vhost-vsock) vhost_vsock="yes"
1150 ;;
da076ffe 1151 --disable-opengl) opengl="no"
20ff075b 1152 ;;
da076ffe 1153 --enable-opengl) opengl="yes"
20ff075b 1154 ;;
f27aaf4b
CB
1155 --disable-rbd) rbd="no"
1156 ;;
1157 --enable-rbd) rbd="yes"
1158 ;;
8c84cf11
ST
1159 --disable-xfsctl) xfs="no"
1160 ;;
1161 --enable-xfsctl) xfs="yes"
1162 ;;
7b02f544 1163 --disable-smartcard) smartcard="no"
111a38b0 1164 ;;
7b02f544 1165 --enable-smartcard) smartcard="yes"
111a38b0 1166 ;;
2b2325ff
GH
1167 --disable-libusb) libusb="no"
1168 ;;
1169 --enable-libusb) libusb="yes"
1170 ;;
69354a83
HG
1171 --disable-usb-redir) usb_redir="no"
1172 ;;
1173 --enable-usb-redir) usb_redir="yes"
1174 ;;
1ece9905
AL
1175 --disable-zlib-test) zlib="no"
1176 ;;
b25c9dff
SW
1177 --disable-lzo) lzo="no"
1178 ;;
607dacd0
QN
1179 --enable-lzo) lzo="yes"
1180 ;;
b25c9dff
SW
1181 --disable-snappy) snappy="no"
1182 ;;
607dacd0
QN
1183 --enable-snappy) snappy="yes"
1184 ;;
6b383c08
PW
1185 --disable-bzip2) bzip2="no"
1186 ;;
1187 --enable-bzip2) bzip2="yes"
1188 ;;
d138cee9
MR
1189 --enable-guest-agent) guest_agent="yes"
1190 ;;
1191 --disable-guest-agent) guest_agent="no"
1192 ;;
9dacf32d
YH
1193 --enable-guest-agent-msi) guest_agent_msi="yes"
1194 ;;
1195 --disable-guest-agent-msi) guest_agent_msi="no"
1196 ;;
d9840e25
TS
1197 --with-vss-sdk) vss_win32_sdk=""
1198 ;;
1199 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1200 ;;
1201 --without-vss-sdk) vss_win32_sdk="no"
1202 ;;
1203 --with-win-sdk) win_sdk=""
1204 ;;
1205 --with-win-sdk=*) win_sdk="$optarg"
1206 ;;
1207 --without-win-sdk) win_sdk="no"
1208 ;;
4b1c11fd
DB
1209 --enable-tools) want_tools="yes"
1210 ;;
1211 --disable-tools) want_tools="no"
1212 ;;
f794573e
EO
1213 --enable-seccomp) seccomp="yes"
1214 ;;
1215 --disable-seccomp) seccomp="no"
1216 ;;
eb100396
BR
1217 --disable-glusterfs) glusterfs="no"
1218 ;;
1219 --enable-glusterfs) glusterfs="yes"
1220 ;;
52b53c04
FZ
1221 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1222 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
583f6e7b 1223 ;;
cb6414df
FZ
1224 --enable-vhdx|--disable-vhdx)
1225 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1226 ;;
315d3184
FZ
1227 --enable-uuid|--disable-uuid)
1228 echo "$0: $opt is obsolete, UUID support is always built" >&2
1229 ;;
a4ccabcf
AL
1230 --disable-gtk) gtk="no"
1231 ;;
1232 --enable-gtk) gtk="yes"
1233 ;;
a1c5e949
DB
1234 --tls-priority=*) tls_priority="$optarg"
1235 ;;
ddbb0d09
DB
1236 --disable-gnutls) gnutls="no"
1237 ;;
1238 --enable-gnutls) gnutls="yes"
1239 ;;
91bfcdb0
DB
1240 --disable-nettle) nettle="no"
1241 ;;
1242 --enable-nettle) nettle="yes"
1243 ;;
1244 --disable-gcrypt) gcrypt="no"
1245 ;;
1246 --enable-gcrypt) gcrypt="yes"
1247 ;;
2da776db
MH
1248 --enable-rdma) rdma="yes"
1249 ;;
1250 --disable-rdma) rdma="no"
1251 ;;
528de90a
DB
1252 --with-gtkabi=*) gtkabi="$optarg"
1253 ;;
bbbf9bfb
SW
1254 --disable-vte) vte="no"
1255 ;;
1256 --enable-vte) vte="yes"
1257 ;;
9d9e1521
GH
1258 --disable-virglrenderer) virglrenderer="no"
1259 ;;
1260 --enable-virglrenderer) virglrenderer="yes"
1261 ;;
e91c793c
CR
1262 --disable-tpm) tpm="no"
1263 ;;
ab214c29
SB
1264 --enable-tpm) tpm="yes"
1265 ;;
0a12ec87
RJ
1266 --disable-libssh2) libssh2="no"
1267 ;;
1268 --enable-libssh2) libssh2="yes"
1269 ;;
ed1701c6
DDAG
1270 --disable-live-block-migration) live_block_migration="no"
1271 ;;
1272 --enable-live-block-migration) live_block_migration="yes"
1273 ;;
a99d57bb
WG
1274 --disable-numa) numa="no"
1275 ;;
1276 --enable-numa) numa="yes"
1277 ;;
2847b469
FZ
1278 --disable-tcmalloc) tcmalloc="no"
1279 ;;
1280 --enable-tcmalloc) tcmalloc="yes"
1281 ;;
7b01cb97
AD
1282 --disable-jemalloc) jemalloc="no"
1283 ;;
1284 --enable-jemalloc) jemalloc="yes"
1285 ;;
a6b1d4c0
CX
1286 --disable-replication) replication="no"
1287 ;;
1288 --enable-replication) replication="yes"
1289 ;;
da92c3ff
AM
1290 --disable-vxhs) vxhs="no"
1291 ;;
1292 --enable-vxhs) vxhs="yes"
1293 ;;
e6a74868
MAL
1294 --disable-vhost-user) vhost_user="no"
1295 ;;
1296 --enable-vhost-user)
1297 vhost_user="yes"
1298 if test "$mingw32" = "yes"; then
1299 error_exit "vhost-user isn't available on win32"
1300 fi
1301 ;;
8ca80760
RH
1302 --disable-capstone) capstone="no"
1303 ;;
1304 --enable-capstone) capstone="yes"
1305 ;;
e219c499
RH
1306 --enable-capstone=git) capstone="git"
1307 ;;
1308 --enable-capstone=system) capstone="system"
1309 ;;
cc84d63a
DB
1310 --with-git=*) git="$optarg"
1311 ;;
f62bbee5
DB
1312 --enable-git-update) git_update=yes
1313 ;;
1314 --disable-git-update) git_update=no
1315 ;;
2d2ad6d0
FZ
1316 *)
1317 echo "ERROR: unknown option $opt"
1318 echo "Try '$0 --help' for more information"
1319 exit 1
7f1559c6 1320 ;;
7d13299d
FB
1321 esac
1322done
1323
e6a74868
MAL
1324if test "$vhost_user" = ""; then
1325 if test "$mingw32" = "yes"; then
1326 vhost_user="no"
1327 else
1328 vhost_user="yes"
1329 fi
1330fi
1331
40293e58 1332case "$cpu" in
e3608d66
RH
1333 ppc)
1334 CPU_CFLAGS="-m32"
1335 LDFLAGS="-m32 $LDFLAGS"
1336 ;;
1337 ppc64)
1338 CPU_CFLAGS="-m64"
1339 LDFLAGS="-m64 $LDFLAGS"
1340 ;;
9b9c37c3 1341 sparc)
f1079bb8
RH
1342 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1343 LDFLAGS="-m32 -mv8plus $LDFLAGS"
3142255c 1344 ;;
ed968ff1 1345 sparc64)
79f3b12f 1346 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
f1079bb8 1347 LDFLAGS="-m64 $LDFLAGS"
3142255c 1348 ;;
76d83bde 1349 s390)
061cdd81 1350 CPU_CFLAGS="-m31"
28d7cc49
RH
1351 LDFLAGS="-m31 $LDFLAGS"
1352 ;;
1353 s390x)
061cdd81 1354 CPU_CFLAGS="-m64"
28d7cc49 1355 LDFLAGS="-m64 $LDFLAGS"
76d83bde 1356 ;;
40293e58 1357 i386)
79f3b12f 1358 CPU_CFLAGS="-m32"
0c439cbf 1359 LDFLAGS="-m32 $LDFLAGS"
2b2e59e6 1360 cc_i386='$(CC) -m32'
40293e58
FB
1361 ;;
1362 x86_64)
7ebee43e
RH
1363 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1364 # If we truly care, we should simply detect this case at
1365 # runtime and generate the fallback to serial emulation.
1366 CPU_CFLAGS="-m64 -mcx16"
0c439cbf 1367 LDFLAGS="-m64 $LDFLAGS"
2b2e59e6 1368 cc_i386='$(CC) -m32'
d2fbca94 1369 ;;
c72b26ec
RH
1370 x32)
1371 CPU_CFLAGS="-mx32"
1372 LDFLAGS="-mx32 $LDFLAGS"
1373 cc_i386='$(CC) -m32'
1374 ;;
30163d89 1375 # No special flags required for other host CPUs
3142255c
BS
1376esac
1377
79f3b12f
PC
1378QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1379EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1380
affc88cc
PM
1381# For user-mode emulation the host arch has to be one we explicitly
1382# support, even if we're using TCI.
1383if [ "$ARCH" = "unknown" ]; then
1384 bsd_user="no"
1385 linux_user="no"
1386fi
1387
60e0df25
PM
1388default_target_list=""
1389
6e92f823
PM
1390mak_wilds=""
1391
1392if [ "$softmmu" = "yes" ]; then
1393 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
60e0df25 1394fi
6e92f823
PM
1395if [ "$linux_user" = "yes" ]; then
1396 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
60e0df25 1397fi
6e92f823
PM
1398if [ "$bsd_user" = "yes" ]; then
1399 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
60e0df25
PM
1400fi
1401
6e92f823
PM
1402for config in $mak_wilds; do
1403 default_target_list="${default_target_list} $(basename "$config" .mak)"
1404done
1405
c53eeaf7 1406# Enumerate public trace backends for --help output
64a6047d 1407trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
c53eeaf7 1408
af5db58e
PB
1409if test x"$show_help" = x"yes" ; then
1410cat << EOF
1411
1412Usage: configure [options]
1413Options: [defaults in brackets after descriptions]
1414
08fb77ed
SW
1415Standard options:
1416 --help print this message
1417 --prefix=PREFIX install in PREFIX [$prefix]
1418 --interp-prefix=PREFIX where to find shared libraries, etc.
1419 use %M for cpu name [$interp_prefix]
1420 --target-list=LIST set target list (default: build everything)
1421$(echo Available targets: $default_target_list | \
1422 fold -s -w 53 | sed -e 's/^/ /')
1423
1424Advanced options (experts only):
1425 --source-path=PATH path of source code [$source_path]
1426 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1427 --cc=CC use C compiler CC [$cc]
1428 --iasl=IASL use ACPI compiler IASL [$iasl]
1429 --host-cc=CC use C compiler CC [$host_cc] for code run at
1430 build time
1431 --cxx=CXX use C++ compiler CXX [$cxx]
1432 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1433 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
11cde1c8 1434 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
08fb77ed
SW
1435 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1436 --make=MAKE use specified make [$make]
1437 --install=INSTALL use specified install [$install]
1438 --python=PYTHON use specified python [$python]
1439 --smbd=SMBD use specified smbd [$smbd]
1440 --static enable static build [$static]
1441 --mandir=PATH install man pages in PATH
1442 --datadir=PATH install firmware in PATH$confsuffix
1443 --docdir=PATH install documentation in PATH$confsuffix
1444 --bindir=PATH install binaries in PATH
1445 --libdir=PATH install libraries in PATH
1446 --sysconfdir=PATH install config in PATH$confsuffix
1447 --localstatedir=PATH install local state in PATH (set at runtime on win32)
3d5eecab 1448 --firmwarepath=PATH search PATH for firmware files
e26110cf 1449 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
08fb77ed 1450 --enable-debug enable common debug build options
08fb77ed
SW
1451 --disable-strip disable stripping binaries
1452 --disable-werror disable compilation abort on warning
63678e17 1453 --disable-stack-protector disable compiler-provided stack protection
08fb77ed
SW
1454 --audio-drv-list=LIST set audio drivers list:
1455 Available drivers: $audio_possible_drivers
1456 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1457 --block-drv-rw-whitelist=L
1458 set block driver read-write whitelist
1459 (affects only QEMU, not qemu-img)
1460 --block-drv-ro-whitelist=L
1461 set block driver read-only whitelist
1462 (affects only QEMU, not qemu-img)
5b808275 1463 --enable-trace-backends=B Set trace backend
c53eeaf7 1464 Available backends: $trace_backend_list
08fb77ed
SW
1465 --with-trace-file=NAME Full PATH,NAME of file to store traces
1466 Default:trace-<pid>
c23f23b9
MT
1467 --disable-slirp disable SLIRP userspace network connectivity
1468 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1469 --oss-lib path to OSS library
1470 --cpu=CPU Build for host CPU [$cpu]
08fb77ed 1471 --with-coroutine=BACKEND coroutine backend. Supported options:
33c53c54 1472 ucontext, sigaltstack, windows
08fb77ed
SW
1473 --enable-gcov enable test coverage analysis with gcov
1474 --gcov=GCOV use specified gcov [$gcov_tool]
c23f23b9
MT
1475 --disable-blobs disable installing provided firmware blobs
1476 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1477 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
a1c5e949 1478 --tls-priority default TLS protocol/cipher priority string
c12d66aa
LM
1479 --enable-gprof QEMU profiling with gprof
1480 --enable-profiler profiler support
1481 --enable-xen-pv-domain-build
1482 xen pv domain builder
1483 --enable-debug-stack-usage
1484 track the maximum stack usage of stacks created by qemu_alloc_stack
c23f23b9
MT
1485
1486Optional features, enabled with --enable-FEATURE and
1487disabled with --disable-FEATURE, default is enabled if available:
1488
1489 system all system emulation targets
1490 user supported user emulation targets
1491 linux-user all linux usermode emulation targets
1492 bsd-user all BSD usermode emulation targets
c23f23b9
MT
1493 docs build documentation
1494 guest-agent build the QEMU Guest Agent
1495 guest-agent-msi build guest agent Windows MSI installation package
1496 pie Position Independent Executables
1497 modules modules support
1498 debug-tcg TCG debugging (default is disabled)
1499 debug-info debugging information
1500 sparse sparse checker
1501
ddbb0d09 1502 gnutls GNUTLS cryptography support
91bfcdb0
DB
1503 nettle nettle cryptography support
1504 gcrypt libgcrypt cryptography support
c23f23b9
MT
1505 sdl SDL UI
1506 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1507 gtk gtk UI
1508 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1509 vte vte support for the gtk UI
1510 curses curses UI
1511 vnc VNC UI support
c23f23b9
MT
1512 vnc-sasl SASL encryption for VNC server
1513 vnc-jpeg JPEG lossy compression for VNC server
1514 vnc-png PNG compression for VNC server
c23f23b9
MT
1515 cocoa Cocoa UI (Mac OS X only)
1516 virtfs VirtFS
fe8fc5ae 1517 mpath Multipath persistent reservation passthrough
c23f23b9
MT
1518 xen xen backend driver support
1519 xen-pci-passthrough
1520 brlapi BrlAPI (Braile)
1521 curl curl connectivity
1522 fdt fdt device tree
1523 bluez bluez stack connectivity
1524 kvm KVM acceleration support
b0cb0a66 1525 hax HAX acceleration support
c23f23b9 1526 rdma RDMA-based migration support
c23f23b9
MT
1527 vde support for vde network
1528 netmap support for netmap network
1529 linux-aio Linux AIO support
1530 cap-ng libcap-ng support
1531 attr attr and xattr support
1532 vhost-net vhost-net acceleration support
1533 spice spice
1534 rbd rados block device (rbd)
1535 libiscsi iscsi support
1536 libnfs nfs support
7b02f544 1537 smartcard smartcard support (libcacard)
c23f23b9 1538 libusb libusb (for usb passthrough)
ed1701c6 1539 live-block-migration Block migration in the main migration stream
c23f23b9
MT
1540 usb-redir usb network redirection support
1541 lzo support of lzo compression library
1542 snappy support of snappy compression library
1543 bzip2 support of bzip2 compression library
1544 (for reading bzip2-compressed dmg images)
1545 seccomp seccomp support
1546 coroutine-pool coroutine freelist (better performance)
1547 glusterfs GlusterFS backend
c23f23b9
MT
1548 tpm TPM support
1549 libssh2 ssh block device support
c23f23b9
MT
1550 numa libnuma support
1551 tcmalloc tcmalloc support
7b01cb97 1552 jemalloc jemalloc support
a6b1d4c0 1553 replication replication support
c12d66aa
LM
1554 vhost-vsock virtio sockets device support
1555 opengl opengl support
1556 virglrenderer virgl rendering support
1557 xfsctl xfsctl support
1558 qom-cast-debug cast debugging support
1559 tools build qemu-io, qemu-nbd and qemu-image tools
da92c3ff 1560 vxhs Veritas HyperScale vDisk backend support
f0d92b56 1561 crypto-afalg Linux AF_ALG crypto backend driver
e6a74868 1562 vhost-user vhost-user support
8ca80760 1563 capstone capstone disassembler support
08fb77ed
SW
1564
1565NOTE: The object files are built at the place where configure is launched
af5db58e 1566EOF
2d2ad6d0 1567exit 0
af5db58e
PB
1568fi
1569
c53eeaf7
SH
1570if ! has $python; then
1571 error_exit "Python not found. Use --python=/path/to/python"
1572fi
1573
1574# Note that if the Python conditional here evaluates True we will exit
1575# with status 1 which is a shell 'false' value.
1576if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1577 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1578 "Note that Python 3 or later is not yet supported." \
1579 "Use --python=/path/to/python to specify a supported Python."
1580fi
1581
1582# Suppress writing compiled files
1583python="$python -B"
1584
9aae6e54
DHB
1585# Check that the C compiler works. Doing this here before testing
1586# the host CPU ensures that we had a valid CC to autodetect the
1587# $cpu var (and we should bail right here if that's not the case).
1588# It also allows the help message to be printed without a CC.
1589write_c_skeleton;
1590if compile_object ; then
1591 : C compiler works ok
1592else
1593 error_exit "\"$cc\" either does not exist or does not work"
1594fi
1595if ! compile_prog ; then
1596 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1597fi
1598
359bc95d
PM
1599# Now we have handled --enable-tcg-interpreter and know we're not just
1600# printing the help message, bail out if the host CPU isn't supported.
1601if test "$ARCH" = "unknown"; then
1602 if test "$tcg_interpreter" = "yes" ; then
1603 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
359bc95d 1604 else
76ad07a4 1605 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
359bc95d
PM
1606 fi
1607fi
1608
9c83ffd8
PM
1609# Consult white-list to determine whether to enable werror
1610# by default. Only enable by default for git builds
9c83ffd8
PM
1611if test -z "$werror" ; then
1612 if test -d "$source_path/.git" -a \
e4650c81 1613 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
9c83ffd8
PM
1614 werror="yes"
1615 else
1616 werror="no"
1617 fi
1618fi
1619
fb59dabd
PM
1620if test "$bogus_os" = "yes"; then
1621 # Now that we know that we're not printing the help and that
1622 # the compiler works (so the results of the check_defines we used
1623 # to identify the OS are reliable), if we didn't recognize the
1624 # host OS we should stop now.
951fedfc 1625 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
fb59dabd
PM
1626fi
1627
8d05095c
PB
1628gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1629gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
ac7568bd 1630gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
435405ac 1631gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
b98fcfd8 1632gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
71429097 1633gcc_flags="-Wno-string-plus-int $gcc_flags"
6ca026cb
PM
1634# Note that we do not add -Werror to gcc_flags here, because that would
1635# enable it for all configure tests. If a configure test failed due
1636# to -Werror this would just silently disable some features,
1637# so it's too error prone.
93b25869
JS
1638
1639cc_has_warning_flag() {
1640 write_c_skeleton;
1641
a1d29d6c
PM
1642 # Use the positive sense of the flag when testing for -Wno-wombat
1643 # support (gcc will happily accept the -Wno- form of unknown
1644 # warning options).
93b25869
JS
1645 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1646 compile_prog "-Werror $optflag" ""
1647}
1648
1649for flag in $gcc_flags; do
1650 if cc_has_warning_flag $flag ; then
1651 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
8d05095c
PB
1652 fi
1653done
1654
3b463a3f 1655if test "$stack_protector" != "no"; then
fccd35a0
RR
1656 cat > $TMPC << EOF
1657int main(int argc, char *argv[])
1658{
1659 char arr[64], *p = arr, *c = argv[0];
1660 while (*c) {
1661 *p++ = *c++;
1662 }
1663 return 0;
1664}
1665EOF
63678e17 1666 gcc_flags="-fstack-protector-strong -fstack-protector-all"
3b463a3f 1667 sp_on=0
63678e17 1668 for flag in $gcc_flags; do
590e5dd9
PM
1669 # We need to check both a compile and a link, since some compiler
1670 # setups fail only on a .c->.o compile and some only at link time
1671 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1672 compile_prog "-Werror $flag" ""; then
63678e17 1673 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3b463a3f 1674 sp_on=1
63678e17
SN
1675 break
1676 fi
1677 done
3b463a3f
MR
1678 if test "$stack_protector" = yes; then
1679 if test $sp_on = 0; then
1680 error_exit "Stack protector not supported"
1681 fi
1682 fi
37746c5e
MAL
1683fi
1684
20bc94a2
PB
1685# Disable -Wmissing-braces on older compilers that warn even for
1686# the "universal" C zero initializer {0}.
1687cat > $TMPC << EOF
1688struct {
1689 int a[2];
1690} x = {0};
1691EOF
1692if compile_object "-Werror" "" ; then
1693 :
1694else
1695 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1696fi
1697
cbdd1999
PB
1698# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1699# large functions that use global variables. The bug is in all releases of
1700# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1701# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1702cat > $TMPC << EOF
1703#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1704int main(void) { return 0; }
1705#else
1706#error No bug in this compiler.
1707#endif
1708EOF
1709if compile_prog "-Werror -fno-gcse" "" ; then
1710 TRANSLATE_OPT_CFLAGS=-fno-gcse
1711fi
1712
40d6444e 1713if test "$static" = "yes" ; then
aa0d1f44
PB
1714 if test "$modules" = "yes" ; then
1715 error_exit "static and modules are mutually incompatible"
1716 fi
40d6444e 1717 if test "$pie" = "yes" ; then
76ad07a4 1718 error_exit "static and pie are mutually incompatible"
40d6444e
AK
1719 else
1720 pie="no"
1721 fi
1722fi
1723
768b7855
EC
1724# Unconditional check for compiler __thread support
1725 cat > $TMPC << EOF
1726static __thread int tls_var;
1727int main(void) { return tls_var; }
1728EOF
1729
1730if ! compile_prog "-Werror" "" ; then
1731 error_exit "Your compiler does not support the __thread specifier for " \
1732 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1733fi
1734
40d6444e
AK
1735if test "$pie" = ""; then
1736 case "$cpu-$targetos" in
c72b26ec 1737 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
40d6444e
AK
1738 ;;
1739 *)
1740 pie="no"
1741 ;;
1742 esac
1743fi
1744
1745if test "$pie" != "no" ; then
1746 cat > $TMPC << EOF
21d4a791
AK
1747
1748#ifdef __linux__
1749# define THREAD __thread
1750#else
1751# define THREAD
1752#endif
1753
1754static THREAD int tls_var;
1755
1756int main(void) { return tls_var; }
1757
40d6444e
AK
1758EOF
1759 if compile_prog "-fPIE -DPIE" "-pie"; then
1760 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1761 LDFLAGS="-pie $LDFLAGS"
1762 pie="yes"
1763 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1764 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1765 fi
1766 else
1767 if test "$pie" = "yes"; then
76ad07a4 1768 error_exit "PIE not available due to missing toolchain support"
40d6444e
AK
1769 else
1770 echo "Disabling PIE due to missing toolchain support"
1771 pie="no"
1772 fi
1773 fi
46eef33b 1774
e4a7b344 1775 if compile_prog "-Werror -fno-pie" "-nopie"; then
46eef33b
BS
1776 CFLAGS_NOPIE="-fno-pie"
1777 LDFLAGS_NOPIE="-nopie"
1778 fi
40d6444e
AK
1779fi
1780
09dada40
PB
1781##########################################
1782# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1783# use i686 as default anyway, but for those that don't, an explicit
1784# specification is necessary
1785
1786if test "$cpu" = "i386"; then
1787 cat > $TMPC << EOF
1788static int sfaa(int *ptr)
1789{
1790 return __sync_fetch_and_and(ptr, 0);
1791}
1792
1793int main(void)
1794{
1795 int val = 42;
1405b629 1796 val = __sync_val_compare_and_swap(&val, 0, 1);
09dada40
PB
1797 sfaa(&val);
1798 return val;
1799}
1800EOF
1801 if ! compile_prog "" "" ; then
1802 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1803 fi
1804fi
1805
1806#########################################
ec530c81 1807# Solaris specific configure tool chain decisions
09dada40 1808
ec530c81 1809if test "$solaris" = "yes" ; then
6792aa11
LM
1810 if has $install; then
1811 :
1812 else
76ad07a4
PM
1813 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1814 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1815 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
ec530c81 1816 fi
89138857 1817 if test "$(path_of $install)" = "/usr/sbin/install" ; then
76ad07a4
PM
1818 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1819 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1820 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
ec530c81 1821 fi
6792aa11
LM
1822 if has ar; then
1823 :
1824 else
ec530c81 1825 if test -f /usr/ccs/bin/ar ; then
76ad07a4
PM
1826 error_exit "No path includes ar" \
1827 "Add /usr/ccs/bin to your path and rerun configure"
ec530c81 1828 fi
76ad07a4 1829 error_exit "No path includes ar"
ec530c81 1830 fi
5fafdf24 1831fi
ec530c81 1832
afb63ebd 1833if test -z "${target_list+xxx}" ; then
d880a3ba
PB
1834 for target in $default_target_list; do
1835 supported_target $target 2>/dev/null && \
1836 target_list="$target_list $target"
1837 done
1838 target_list="${target_list# }"
121afa9e 1839else
89138857 1840 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
d880a3ba
PB
1841 for target in $target_list; do
1842 # Check that we recognised the target name; this allows a more
1843 # friendly error message than if we let it fall through.
1844 case " $default_target_list " in
1845 *" $target "*)
1846 ;;
1847 *)
1848 error_exit "Unknown target name '$target'"
1849 ;;
1850 esac
1851 supported_target $target || exit 1
1852 done
121afa9e 1853fi
25b48338 1854
f55fe278
PB
1855# see if system emulation was really requested
1856case " $target_list " in
1857 *"-softmmu "*) softmmu=yes
1858 ;;
1859 *) softmmu=no
1860 ;;
1861esac
5327cf48 1862
249247c9
JQ
1863feature_not_found() {
1864 feature=$1
21684af0 1865 remedy=$2
249247c9 1866
76ad07a4 1867 error_exit "User requested feature $feature" \
21684af0
SS
1868 "configure was not able to find it." \
1869 "$remedy"
249247c9
JQ
1870}
1871
7d13299d
FB
1872# ---
1873# big/little endian test
1874cat > $TMPC << EOF
61cc919f
MF
1875short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1876short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1877extern int foo(short *, short *);
1878int main(int argc, char *argv[]) {
1879 return foo(big_endian, little_endian);
7d13299d
FB
1880}
1881EOF
1882
61cc919f
MF
1883if compile_object ; then
1884 if grep -q BiGeNdIaN $TMPO ; then
1885 bigendian="yes"
1886 elif grep -q LiTtLeEnDiAn $TMPO ; then
1887 bigendian="no"
1888 else
1889 echo big/little test failed
21d89f84 1890 fi
61cc919f
MF
1891else
1892 echo big/little test failed
7d13299d
FB
1893fi
1894
a30878e7
PM
1895##########################################
1896# cocoa implies not SDL or GTK
1897# (the cocoa UI code currently assumes it is always the active UI
1898# and doesn't interact well with other UI frontend code)
1899if test "$cocoa" = "yes"; then
1900 if test "$sdl" = "yes"; then
1901 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1902 fi
1903 if test "$gtk" = "yes"; then
1904 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1905 fi
1906 gtk=no
1907 sdl=no
1908fi
1909
6b39b063
EB
1910# Some versions of Mac OS X incorrectly define SIZE_MAX
1911cat > $TMPC << EOF
1912#include <stdint.h>
1913#include <stdio.h>
1914int main(int argc, char *argv[]) {
1915 return printf("%zu", SIZE_MAX);
1916}
1917EOF
1918have_broken_size_max=no
1919if ! compile_object -Werror ; then
1920 have_broken_size_max=yes
1921fi
1922
015a33bd
GA
1923##########################################
1924# L2TPV3 probe
1925
1926cat > $TMPC <<EOF
1927#include <sys/socket.h>
bff6cb72 1928#include <linux/ip.h>
015a33bd
GA
1929int main(void) { return sizeof(struct mmsghdr); }
1930EOF
1931if compile_prog "" "" ; then
1932 l2tpv3=yes
1933else
1934 l2tpv3=no
1935fi
1936
4d9310f4
DB
1937##########################################
1938# MinGW / Mingw-w64 localtime_r/gmtime_r check
1939
1940if test "$mingw32" = "yes"; then
1941 # Some versions of MinGW / Mingw-w64 lack localtime_r
1942 # and gmtime_r entirely.
1943 #
1944 # Some versions of Mingw-w64 define a macro for
1945 # localtime_r/gmtime_r.
1946 #
1947 # Some versions of Mingw-w64 will define functions
1948 # for localtime_r/gmtime_r, but only if you have
1949 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1950 # though, unistd.h and pthread.h both define
1951 # that for you.
1952 #
1953 # So this #undef localtime_r and #include <unistd.h>
1954 # are not in fact redundant.
1955cat > $TMPC << EOF
1956#include <unistd.h>
1957#include <time.h>
1958#undef localtime_r
1959int main(void) { localtime_r(NULL, NULL); return 0; }
1960EOF
1961 if compile_prog "" "" ; then
1962 localtime_r="yes"
1963 else
1964 localtime_r="no"
1965 fi
1966fi
1967
779ab5e3
SW
1968##########################################
1969# pkg-config probe
1970
1971if ! has "$pkg_config_exe"; then
76ad07a4 1972 error_exit "pkg-config binary '$pkg_config_exe' not found"
779ab5e3
SW
1973fi
1974
b0a47e79
JQ
1975##########################################
1976# NPTL probe
1977
24cb36a6 1978if test "$linux_user" = "yes"; then
b0a47e79 1979 cat > $TMPC <<EOF
bd0c5661 1980#include <sched.h>
30813cea 1981#include <linux/futex.h>
182eacc0 1982int main(void) {
bd0c5661
PB
1983#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1984#error bork
1985#endif
182eacc0 1986 return 0;
bd0c5661
PB
1987}
1988EOF
24cb36a6 1989 if ! compile_object ; then
21684af0 1990 feature_not_found "nptl" "Install glibc and linux kernel headers."
b0a47e79 1991 fi
bd0c5661
PB
1992fi
1993
99f2dbd3 1994#########################################
ac62922e
AZ
1995# zlib check
1996
1ece9905
AL
1997if test "$zlib" != "no" ; then
1998 cat > $TMPC << EOF
ac62922e
AZ
1999#include <zlib.h>
2000int main(void) { zlibVersion(); return 0; }
2001EOF
1ece9905
AL
2002 if compile_prog "" "-lz" ; then
2003 :
2004 else
76ad07a4
PM
2005 error_exit "zlib check failed" \
2006 "Make sure to have the zlib libs and headers installed."
1ece9905 2007 fi
ac62922e 2008fi
eb0ecd5a 2009LIBS="$LIBS -lz"
ac62922e 2010
607dacd0
QN
2011##########################################
2012# lzo check
2013
2014if test "$lzo" != "no" ; then
2015 cat > $TMPC << EOF
2016#include <lzo/lzo1x.h>
2017int main(void) { lzo_version(); return 0; }
2018EOF
2019 if compile_prog "" "-llzo2" ; then
b25c9dff
SW
2020 libs_softmmu="$libs_softmmu -llzo2"
2021 lzo="yes"
607dacd0 2022 else
b25c9dff
SW
2023 if test "$lzo" = "yes"; then
2024 feature_not_found "liblzo2" "Install liblzo2 devel"
2025 fi
2026 lzo="no"
607dacd0 2027 fi
607dacd0
QN
2028fi
2029
2030##########################################
2031# snappy check
2032
2033if test "$snappy" != "no" ; then
2034 cat > $TMPC << EOF
2035#include <snappy-c.h>
2036int main(void) { snappy_max_compressed_length(4096); return 0; }
2037EOF
2038 if compile_prog "" "-lsnappy" ; then
b25c9dff
SW
2039 libs_softmmu="$libs_softmmu -lsnappy"
2040 snappy="yes"
607dacd0 2041 else
b25c9dff
SW
2042 if test "$snappy" = "yes"; then
2043 feature_not_found "libsnappy" "Install libsnappy devel"
2044 fi
2045 snappy="no"
607dacd0 2046 fi
607dacd0
QN
2047fi
2048
6b383c08
PW
2049##########################################
2050# bzip2 check
2051
2052if test "$bzip2" != "no" ; then
2053 cat > $TMPC << EOF
2054#include <bzlib.h>
2055int main(void) { BZ2_bzlibVersion(); return 0; }
2056EOF
2057 if compile_prog "" "-lbz2" ; then
2058 bzip2="yes"
2059 else
2060 if test "$bzip2" = "yes"; then
2061 feature_not_found "libbzip2" "Install libbzip2 devel"
2062 fi
2063 bzip2="no"
2064 fi
2065fi
2066
f794573e
EO
2067##########################################
2068# libseccomp check
2069
2070if test "$seccomp" != "no" ; then
693e5910
AJ
2071 case "$cpu" in
2072 i386|x86_64)
ba060c53 2073 libseccomp_minver="2.1.0"
693e5910 2074 ;;
5ce43972
JH
2075 mips)
2076 libseccomp_minver="2.2.0"
2077 ;;
693e5910
AJ
2078 arm|aarch64)
2079 libseccomp_minver="2.2.3"
2080 ;;
3aa35fcf 2081 ppc|ppc64|s390x)
3e684455
MS
2082 libseccomp_minver="2.3.0"
2083 ;;
693e5910
AJ
2084 *)
2085 libseccomp_minver=""
2086 ;;
2087 esac
2088
2089 if test "$libseccomp_minver" != "" &&
2090 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
c3883e1f
FZ
2091 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2092 seccomp_libs="$($pkg_config --libs libseccomp)"
693e5910 2093 seccomp="yes"
f794573e 2094 else
693e5910
AJ
2095 if test "$seccomp" = "yes" ; then
2096 if test "$libseccomp_minver" != "" ; then
2097 feature_not_found "libseccomp" \
2098 "Install libseccomp devel >= $libseccomp_minver"
2099 else
2100 feature_not_found "libseccomp" \
2101 "libseccomp is not supported for host cpu $cpu"
2102 fi
2103 fi
2104 seccomp="no"
f794573e
EO
2105 fi
2106fi
e37630ca
AL
2107##########################################
2108# xen probe
2109
fc321b4b 2110if test "$xen" != "no" ; then
c1cdd9d5
JG
2111 # Check whether Xen library path is specified via --extra-ldflags to avoid
2112 # overriding this setting with pkg-config output. If not, try pkg-config
2113 # to obtain all needed flags.
2114
2115 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2116 $pkg_config --exists xencontrol ; then
2117 xen_ctrl_version="$(printf '%d%02d%02d' \
2118 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2119 xen=yes
2120 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2121 xen_pc="$xen_pc xenevtchn xendevicemodel"
2122 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2123 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2124 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2125 else
d5b93ddf 2126
c1cdd9d5 2127 xen_libs="-lxenstore -lxenctrl -lxenguest"
d9506cab 2128 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
50ced5b3 2129
c1cdd9d5
JG
2130 # First we test whether Xen headers and libraries are available.
2131 # If no, we are done and there is no Xen support.
2132 # If yes, more tests are run to detect the Xen version.
2133
2134 # Xen (any)
2135 cat > $TMPC <<EOF
e37630ca 2136#include <xenctrl.h>
50ced5b3
SW
2137int main(void) {
2138 return 0;
2139}
2140EOF
c1cdd9d5
JG
2141 if ! compile_prog "" "$xen_libs" ; then
2142 # Xen not found
2143 if test "$xen" = "yes" ; then
2144 feature_not_found "xen" "Install xen devel"
2145 fi
2146 xen=no
50ced5b3 2147
c1cdd9d5
JG
2148 # Xen unstable
2149 elif
2150 cat > $TMPC <<EOF &&
5ba3d756
ID
2151#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2152#include <xenforeignmemory.h>
2153int main(void) {
2154 xenforeignmemory_handle *xfmem;
2155
2156 xfmem = xenforeignmemory_open(0, 0);
2157 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2158
2159 return 0;
2160}
2161EOF
2162 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2163 then
2164 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2165 xen_ctrl_version=41000
2166 xen=yes
2167 elif
2168 cat > $TMPC <<EOF &&
da8090cc
PD
2169#undef XC_WANT_COMPAT_DEVICEMODEL_API
2170#define __XEN_TOOLS__
2171#include <xendevicemodel.h>
2172int main(void) {
2173 xendevicemodel_handle *xd;
2174
2175 xd = xendevicemodel_open(0, 0);
2176 xendevicemodel_close(xd);
50ced5b3 2177
da8090cc
PD
2178 return 0;
2179}
2180EOF
c1cdd9d5
JG
2181 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2182 then
2183 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2184 xen_ctrl_version=40900
2185 xen=yes
2186 elif
2187 cat > $TMPC <<EOF &&
b6eb9b45
PS
2188/*
2189 * If we have stable libs the we don't want the libxc compat
2190 * layers, regardless of what CFLAGS we may have been given.
2191 *
2192 * Also, check if xengnttab_grant_copy_segment_t is defined and
2193 * grant copy operation is implemented.
2194 */
2195#undef XC_WANT_COMPAT_EVTCHN_API
2196#undef XC_WANT_COMPAT_GNTTAB_API
2197#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2198#include <xenctrl.h>
2199#include <xenstore.h>
2200#include <xenevtchn.h>
2201#include <xengnttab.h>
2202#include <xenforeignmemory.h>
2203#include <stdint.h>
2204#include <xen/hvm/hvm_info_table.h>
2205#if !defined(HVM_MAX_VCPUS)
2206# error HVM_MAX_VCPUS not defined
2207#endif
2208int main(void) {
2209 xc_interface *xc = NULL;
2210 xenforeignmemory_handle *xfmem;
2211 xenevtchn_handle *xe;
2212 xengnttab_handle *xg;
2213 xen_domain_handle_t handle;
2214 xengnttab_grant_copy_segment_t* seg = NULL;
2215
2216 xs_daemon_open();
2217
2218 xc = xc_interface_open(0, 0, 0);
2219 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2220 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2221 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2222 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2223 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2224
2225 xfmem = xenforeignmemory_open(0, 0);
2226 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2227
2228 xe = xenevtchn_open(0, 0);
2229 xenevtchn_fd(xe);
2230
2231 xg = xengnttab_open(0, 0);
2232 xengnttab_grant_copy(xg, 0, seg);
2233
2234 return 0;
2235}
2236EOF
c1cdd9d5
JG
2237 compile_prog "" "$xen_libs $xen_stable_libs"
2238 then
2239 xen_ctrl_version=40800
2240 xen=yes
2241 elif
2242 cat > $TMPC <<EOF &&
5eeb39c2
IC
2243/*
2244 * If we have stable libs the we don't want the libxc compat
2245 * layers, regardless of what CFLAGS we may have been given.
2246 */
2247#undef XC_WANT_COMPAT_EVTCHN_API
2248#undef XC_WANT_COMPAT_GNTTAB_API
2249#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2250#include <xenctrl.h>
2251#include <xenstore.h>
2252#include <xenevtchn.h>
2253#include <xengnttab.h>
2254#include <xenforeignmemory.h>
2255#include <stdint.h>
2256#include <xen/hvm/hvm_info_table.h>
2257#if !defined(HVM_MAX_VCPUS)
2258# error HVM_MAX_VCPUS not defined
2259#endif
2260int main(void) {
2261 xc_interface *xc = NULL;
2262 xenforeignmemory_handle *xfmem;
2263 xenevtchn_handle *xe;
2264 xengnttab_handle *xg;
2265 xen_domain_handle_t handle;
2266
2267 xs_daemon_open();
2268
2269 xc = xc_interface_open(0, 0, 0);
2270 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2271 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2272 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2273 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2274 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2275
2276 xfmem = xenforeignmemory_open(0, 0);
2277 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2278
2279 xe = xenevtchn_open(0, 0);
2280 xenevtchn_fd(xe);
2281
2282 xg = xengnttab_open(0, 0);
2283 xengnttab_map_grant_ref(xg, 0, 0, 0);
2284
2285 return 0;
2286}
2287EOF
c1cdd9d5
JG
2288 compile_prog "" "$xen_libs $xen_stable_libs"
2289 then
2290 xen_ctrl_version=40701
2291 xen=yes
2292 elif
2293 cat > $TMPC <<EOF &&
50ced5b3 2294#include <xenctrl.h>
cdadde39
RPM
2295#include <stdint.h>
2296int main(void) {
2297 xc_interface *xc = NULL;
2298 xen_domain_handle_t handle;
2299 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2300 return 0;
2301}
2302EOF
c1cdd9d5
JG
2303 compile_prog "" "$xen_libs"
2304 then
2305 xen_ctrl_version=40700
2306 xen=yes
2307
2308 # Xen 4.6
2309 elif
2310 cat > $TMPC <<EOF &&
cdadde39 2311#include <xenctrl.h>
e108a3c1 2312#include <xenstore.h>
d5b93ddf
AP
2313#include <stdint.h>
2314#include <xen/hvm/hvm_info_table.h>
2315#if !defined(HVM_MAX_VCPUS)
2316# error HVM_MAX_VCPUS not defined
2317#endif
d8b441a3
JB
2318int main(void) {
2319 xc_interface *xc;
2320 xs_daemon_open();
2321 xc = xc_interface_open(0, 0, 0);
2322 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2323 xc_gnttab_open(NULL, 0);
2324 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2325 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2326 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20a544c7 2327 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
d8b441a3
JB
2328 return 0;
2329}
2330EOF
c1cdd9d5
JG
2331 compile_prog "" "$xen_libs"
2332 then
2333 xen_ctrl_version=40600
2334 xen=yes
2335
2336 # Xen 4.5
2337 elif
2338 cat > $TMPC <<EOF &&
d8b441a3
JB
2339#include <xenctrl.h>
2340#include <xenstore.h>
2341#include <stdint.h>
2342#include <xen/hvm/hvm_info_table.h>
2343#if !defined(HVM_MAX_VCPUS)
2344# error HVM_MAX_VCPUS not defined
2345#endif
3996e85c
PD
2346int main(void) {
2347 xc_interface *xc;
2348 xs_daemon_open();
2349 xc = xc_interface_open(0, 0, 0);
2350 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2351 xc_gnttab_open(NULL, 0);
2352 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2353 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2354 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2355 return 0;
2356}
2357EOF
c1cdd9d5
JG
2358 compile_prog "" "$xen_libs"
2359 then
2360 xen_ctrl_version=40500
2361 xen=yes
3996e85c 2362
c1cdd9d5
JG
2363 elif
2364 cat > $TMPC <<EOF &&
3996e85c
PD
2365#include <xenctrl.h>
2366#include <xenstore.h>
2367#include <stdint.h>
2368#include <xen/hvm/hvm_info_table.h>
2369#if !defined(HVM_MAX_VCPUS)
2370# error HVM_MAX_VCPUS not defined
2371#endif
8688e065
SS
2372int main(void) {
2373 xc_interface *xc;
2374 xs_daemon_open();
2375 xc = xc_interface_open(0, 0, 0);
2376 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2377 xc_gnttab_open(NULL, 0);
2378 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2379 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2380 return 0;
2381}
2382EOF
c1cdd9d5
JG
2383 compile_prog "" "$xen_libs"
2384 then
2385 xen_ctrl_version=40200
2386 xen=yes
8688e065 2387
c1cdd9d5
JG
2388 else
2389 if test "$xen" = "yes" ; then
2390 feature_not_found "xen (unsupported version)" \
2391 "Install a supported xen (xen 4.2 or newer)"
2392 fi
2393 xen=no
fc321b4b 2394 fi
d5b93ddf 2395
c1cdd9d5
JG
2396 if test "$xen" = yes; then
2397 if test $xen_ctrl_version -ge 40701 ; then
2398 libs_softmmu="$xen_stable_libs $libs_softmmu"
2399 fi
2400 libs_softmmu="$xen_libs $libs_softmmu"
5eeb39c2 2401 fi
d5b93ddf 2402 fi
e37630ca
AL
2403fi
2404
eb6fda0f 2405if test "$xen_pci_passthrough" != "no"; then
edfb07ed 2406 if test "$xen" = "yes" && test "$linux" = "yes"; then
eb6fda0f
AP
2407 xen_pci_passthrough=yes
2408 else
2409 if test "$xen_pci_passthrough" = "yes"; then
76ad07a4
PM
2410 error_exit "User requested feature Xen PCI Passthrough" \
2411 " but this feature requires /sys from Linux"
eb6fda0f
AP
2412 fi
2413 xen_pci_passthrough=no
2414 fi
2415fi
2416
64a7ad6f
IC
2417if test "$xen_pv_domain_build" = "yes" &&
2418 test "$xen" != "yes"; then
2419 error_exit "User requested Xen PV domain builder support" \
2420 "which requires Xen support."
2421fi
2422
dfffc653
JQ
2423##########################################
2424# Sparse probe
2425if test "$sparse" != "no" ; then
0dba6195 2426 if has cgcc; then
dfffc653
JQ
2427 sparse=yes
2428 else
2429 if test "$sparse" = "yes" ; then
21684af0 2430 feature_not_found "sparse" "Install sparse binary"
dfffc653
JQ
2431 fi
2432 sparse=no
2433 fi
2434fi
2435
f676c67e
JW
2436##########################################
2437# X11 probe
2438x11_cflags=
2439x11_libs=-lX11
2440if $pkg_config --exists "x11"; then
89138857
SW
2441 x11_cflags=$($pkg_config --cflags x11)
2442 x11_libs=$($pkg_config --libs x11)
f676c67e
JW
2443fi
2444
a4ccabcf
AL
2445##########################################
2446# GTK probe
2447
9e04c683 2448if test "$gtkabi" = ""; then
5fe309ff
GH
2449 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2450 # Use 2.0 as a fallback if that is available.
2451 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
9e04c683 2452 gtkabi=3.0
5fe309ff 2453 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
9e04c683 2454 gtkabi=2.0
5fe309ff
GH
2455 else
2456 gtkabi=3.0
9e04c683
SW
2457 fi
2458fi
2459
a4ccabcf 2460if test "$gtk" != "no"; then
528de90a 2461 gtkpackage="gtk+-$gtkabi"
0a337ed0 2462 gtkx11package="gtk+-x11-$gtkabi"
528de90a
DB
2463 if test "$gtkabi" = "3.0" ; then
2464 gtkversion="3.0.0"
bbbf9bfb
SW
2465 else
2466 gtkversion="2.18.0"
2467 fi
2468 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
89138857
SW
2469 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2470 gtk_libs=$($pkg_config --libs $gtkpackage)
2471 gtk_version=$($pkg_config --modversion $gtkpackage)
0a337ed0 2472 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
f676c67e
JW
2473 gtk_cflags="$gtk_cflags $x11_cflags"
2474 gtk_libs="$gtk_libs $x11_libs"
0a337ed0 2475 fi
bbbf9bfb
SW
2476 libs_softmmu="$gtk_libs $libs_softmmu"
2477 gtk="yes"
2478 elif test "$gtk" = "yes"; then
5fe309ff 2479 feature_not_found "gtk" "Install gtk3-devel"
bbbf9bfb
SW
2480 else
2481 gtk="no"
2482 fi
2483fi
2484
ddbb0d09
DB
2485
2486##########################################
2487# GNUTLS probe
2488
37371299
PM
2489gnutls_works() {
2490 # Unfortunately some distros have bad pkg-config information for gnutls
2491 # such that it claims to exist but you get a compiler error if you try
2492 # to use the options returned by --libs. Specifically, Ubuntu for --static
2493 # builds doesn't work:
2494 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2495 #
2496 # So sanity check the cflags/libs before assuming gnutls can be used.
2497 if ! $pkg_config --exists "gnutls"; then
2498 return 1
2499 fi
2500
2501 write_c_skeleton
2502 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2503}
2504
62893b67 2505gnutls_gcrypt=no
ed754746 2506gnutls_nettle=no
ddbb0d09 2507if test "$gnutls" != "no"; then
37371299 2508 if gnutls_works; then
89138857
SW
2509 gnutls_cflags=$($pkg_config --cflags gnutls)
2510 gnutls_libs=$($pkg_config --libs gnutls)
ddbb0d09
DB
2511 libs_softmmu="$gnutls_libs $libs_softmmu"
2512 libs_tools="$gnutls_libs $libs_tools"
2513 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2514 gnutls="yes"
2515
b917da4c
DB
2516 # gnutls_rnd requires >= 2.11.0
2517 if $pkg_config --exists "gnutls >= 2.11.0"; then
2518 gnutls_rnd="yes"
2519 else
2520 gnutls_rnd="no"
2521 fi
2522
62893b67
DB
2523 if $pkg_config --exists 'gnutls >= 3.0'; then
2524 gnutls_gcrypt=no
ed754746 2525 gnutls_nettle=yes
62893b67 2526 elif $pkg_config --exists 'gnutls >= 2.12'; then
89138857 2527 case $($pkg_config --libs --static gnutls) in
ed754746
DB
2528 *gcrypt*)
2529 gnutls_gcrypt=yes
2530 gnutls_nettle=no
2531 ;;
2532 *nettle*)
2533 gnutls_gcrypt=no
2534 gnutls_nettle=yes
2535 ;;
2536 *)
2537 gnutls_gcrypt=yes
2538 gnutls_nettle=no
2539 ;;
62893b67
DB
2540 esac
2541 else
2542 gnutls_gcrypt=yes
ed754746 2543 gnutls_nettle=no
62893b67 2544 fi
ddbb0d09
DB
2545 elif test "$gnutls" = "yes"; then
2546 feature_not_found "gnutls" "Install gnutls devel"
2547 else
2548 gnutls="no"
b917da4c 2549 gnutls_rnd="no"
ddbb0d09
DB
2550 fi
2551else
b917da4c 2552 gnutls_rnd="no"
ddbb0d09
DB
2553fi
2554
91bfcdb0
DB
2555
2556# If user didn't give a --disable/enable-gcrypt flag,
2557# then mark as disabled if user requested nettle
2558# explicitly, or if gnutls links to nettle
2559if test -z "$gcrypt"
2560then
2561 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2562 then
2563 gcrypt="no"
2564 fi
2565fi
2566
2567# If user didn't give a --disable/enable-nettle flag,
2568# then mark as disabled if user requested gcrypt
2569# explicitly, or if gnutls links to gcrypt
2570if test -z "$nettle"
2571then
2572 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2573 then
2574 nettle="no"
2575 fi
2576fi
2577
2578has_libgcrypt_config() {
2579 if ! has "libgcrypt-config"
2580 then
2581 return 1
2582 fi
2583
2584 if test -n "$cross_prefix"
2585 then
89138857 2586 host=$(libgcrypt-config --host)
91bfcdb0
DB
2587 if test "$host-" != $cross_prefix
2588 then
2589 return 1
2590 fi
2591 fi
2592
2593 return 0
2594}
2595
2596if test "$gcrypt" != "no"; then
2597 if has_libgcrypt_config; then
89138857
SW
2598 gcrypt_cflags=$(libgcrypt-config --cflags)
2599 gcrypt_libs=$(libgcrypt-config --libs)
91bfcdb0
DB
2600 # Debian has remove -lgpg-error from libgcrypt-config
2601 # as it "spreads unnecessary dependencies" which in
2602 # turn breaks static builds...
2603 if test "$static" = "yes"
2604 then
2605 gcrypt_libs="$gcrypt_libs -lgpg-error"
2606 fi
62893b67
DB
2607 libs_softmmu="$gcrypt_libs $libs_softmmu"
2608 libs_tools="$gcrypt_libs $libs_tools"
2609 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
91bfcdb0
DB
2610 gcrypt="yes"
2611 if test -z "$nettle"; then
2612 nettle="no"
2613 fi
37788f25
DB
2614
2615 cat > $TMPC << EOF
2616#include <gcrypt.h>
2617int main(void) {
2618 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2619 GCRY_MD_SHA256,
2620 NULL, 0, 0, 0, NULL);
2621 return 0;
2622}
2623EOF
2624 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2625 gcrypt_kdf=yes
2626 fi
1f923c70
LM
2627
2628 cat > $TMPC << EOF
2629#include <gcrypt.h>
2630int main(void) {
2631 gcry_mac_hd_t handle;
2632 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2633 GCRY_MAC_FLAG_SECURE, NULL);
2634 return 0;
2635}
2636EOF
2637 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2638 gcrypt_hmac=yes
2639 fi
62893b67 2640 else
91bfcdb0
DB
2641 if test "$gcrypt" = "yes"; then
2642 feature_not_found "gcrypt" "Install gcrypt devel"
2643 else
2644 gcrypt="no"
2645 fi
62893b67
DB
2646 fi
2647fi
2648
ddbb0d09 2649
91bfcdb0 2650if test "$nettle" != "no"; then
ed754746 2651 if $pkg_config --exists "nettle"; then
89138857
SW
2652 nettle_cflags=$($pkg_config --cflags nettle)
2653 nettle_libs=$($pkg_config --libs nettle)
2654 nettle_version=$($pkg_config --modversion nettle)
ed754746
DB
2655 libs_softmmu="$nettle_libs $libs_softmmu"
2656 libs_tools="$nettle_libs $libs_tools"
2657 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
91bfcdb0 2658 nettle="yes"
fff2f982
DB
2659
2660 cat > $TMPC << EOF
9e87a691 2661#include <stddef.h>
fff2f982
DB
2662#include <nettle/pbkdf2.h>
2663int main(void) {
2664 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2665 return 0;
2666}
2667EOF
2668 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2669 nettle_kdf=yes
2670 fi
ed754746 2671 else
91bfcdb0
DB
2672 if test "$nettle" = "yes"; then
2673 feature_not_found "nettle" "Install nettle devel"
2674 else
2675 nettle="no"
2676 fi
ed754746
DB
2677 fi
2678fi
2679
91bfcdb0
DB
2680if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2681then
2682 error_exit "Only one of gcrypt & nettle can be enabled"
2683fi
2684
9a2fd434
DB
2685##########################################
2686# libtasn1 - only for the TLS creds/session test suite
2687
2688tasn1=yes
90246037
DB
2689tasn1_cflags=""
2690tasn1_libs=""
9a2fd434 2691if $pkg_config --exists "libtasn1"; then
89138857
SW
2692 tasn1_cflags=$($pkg_config --cflags libtasn1)
2693 tasn1_libs=$($pkg_config --libs libtasn1)
9a2fd434
DB
2694else
2695 tasn1=no
2696fi
2697
ed754746 2698
559607ea
DB
2699##########################################
2700# getifaddrs (for tests/test-io-channel-socket )
2701
2702have_ifaddrs_h=yes
2703if ! check_include "ifaddrs.h" ; then
2704 have_ifaddrs_h=no
2705fi
2706
bbbf9bfb
SW
2707##########################################
2708# VTE probe
2709
2710if test "$vte" != "no"; then
2711 if test "$gtkabi" = "3.0"; then
c6feff9e
CR
2712 vteminversion="0.32.0"
2713 if $pkg_config --exists "vte-2.91"; then
2714 vtepackage="vte-2.91"
2715 else
2716 vtepackage="vte-2.90"
2717 fi
528de90a 2718 else
528de90a 2719 vtepackage="vte"
c6feff9e 2720 vteminversion="0.24.0"
528de90a 2721 fi
c6feff9e 2722 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
89138857
SW
2723 vte_cflags=$($pkg_config --cflags $vtepackage)
2724 vte_libs=$($pkg_config --libs $vtepackage)
2725 vteversion=$($pkg_config --modversion $vtepackage)
bbbf9bfb
SW
2726 libs_softmmu="$vte_libs $libs_softmmu"
2727 vte="yes"
2728 elif test "$vte" = "yes"; then
9e04c683 2729 if test "$gtkabi" = "3.0"; then
c6feff9e 2730 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
9e04c683
SW
2731 else
2732 feature_not_found "vte" "Install libvte devel"
2733 fi
0d185e63 2734 else
bbbf9bfb 2735 vte="no"
a4ccabcf
AL
2736 fi
2737fi
2738
11d9f695
FB
2739##########################################
2740# SDL probe
2741
3ec87ffe
PB
2742# Look for sdl configuration program (pkg-config or sdl-config). Try
2743# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
47c03744 2744
ee8466d0 2745if test "$sdlabi" = ""; then
8f4ea9cd 2746 if $pkg_config --exists "sdl2"; then
ee8466d0 2747 sdlabi=2.0
8f4ea9cd 2748 elif $pkg_config --exists "sdl"; then
ee8466d0 2749 sdlabi=1.2
8f4ea9cd
GH
2750 else
2751 sdlabi=2.0
ee8466d0
CR
2752 fi
2753fi
2754
47c03744
DA
2755if test $sdlabi = "2.0"; then
2756 sdl_config=$sdl2_config
2757 sdlname=sdl2
2758 sdlconfigname=sdl2_config
e07047cf 2759elif test $sdlabi = "1.2"; then
47c03744
DA
2760 sdlname=sdl
2761 sdlconfigname=sdl_config
e07047cf
CR
2762else
2763 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
47c03744
DA
2764fi
2765
89138857 2766if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
47c03744 2767 sdl_config=$sdlconfigname
3ec87ffe
PB
2768fi
2769
47c03744
DA
2770if $pkg_config $sdlname --exists; then
2771 sdlconfig="$pkg_config $sdlname"
89138857 2772 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3ec87ffe
PB
2773elif has ${sdl_config}; then
2774 sdlconfig="$sdl_config"
89138857 2775 sdlversion=$($sdlconfig --version)
a0dfd8a4
LM
2776else
2777 if test "$sdl" = "yes" ; then
8f4ea9cd 2778 feature_not_found "sdl" "Install SDL2-devel"
a0dfd8a4
LM
2779 fi
2780 sdl=no
9316f803 2781fi
29e5bada 2782if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
3ec87ffe
PB
2783 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2784fi
11d9f695 2785
9316f803 2786sdl_too_old=no
c4198157 2787if test "$sdl" != "no" ; then
ac119f9d 2788 cat > $TMPC << EOF
11d9f695
FB
2789#include <SDL.h>
2790#undef main /* We don't want SDL to override our main() */
2791int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2792EOF
89138857 2793 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
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
3926#include <sys/memfd.h>
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"