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