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