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