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