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