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