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