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