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