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