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