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