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