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