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