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