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