]> git.proxmox.com Git - mirror_qemu.git/blame - configure
MAINTAINERS: update usb entries.
[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
dedad027
DB
14# make source path absolute
15source_path=$(cd "$(dirname -- "$0")"; pwd)
16
17if test "$PWD" = "$source_path"
18then
19 echo "Using './build' as the directory for build output"
20
21 MARKER=build/auto-created-by-configure
22
23 if test -e build
24 then
25 if test -f $MARKER
26 then
27 rm -rf build
28 else
29 echo "ERROR: ./build dir already exists and was not previously created by configure"
30 exit 1
31 fi
32 fi
33
34 mkdir build
35 touch $MARKER
36
37 cat > GNUmakefile <<'EOF'
38# This file is auto-generated by configure to support in-source tree
39# 'make' command invocation
40
41ifeq ($(MAKECMDGOALS),)
42recurse: all
43endif
44
45.NOTPARALLEL: %
46%: force
47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49 @if test "$(MAKECMDGOALS)" = "distclean" && \
50 test -e build/auto-created-by-configure ; \
51 then \
52 rm -rf build GNUmakefile ; \
53 fi
54force: ;
55.PHONY: force
56GNUmakefile: ;
57
58EOF
59 cd build
60 exec $source_path/configure "$@"
61fi
62
8cd05ab6
PM
63# Temporary directory used for files created while
64# configure runs. Since it is in the build directory
65# we can safely blow away any previous version of it
66# (and we need not jump through hoops to try to delete
67# it when configure exits.)
68TMPDIR1="config-temp"
69rm -rf "${TMPDIR1}"
70mkdir -p "${TMPDIR1}"
71if [ $? -ne 0 ]; then
72 echo "ERROR: failed to create temporary directory"
73 exit 1
7d13299d
FB
74fi
75
8cd05ab6
PM
76TMPB="qemu-conf"
77TMPC="${TMPDIR1}/${TMPB}.c"
66518bf6 78TMPO="${TMPDIR1}/${TMPB}.o"
9c83ffd8 79TMPCXX="${TMPDIR1}/${TMPB}.cxx"
8cd05ab6 80TMPE="${TMPDIR1}/${TMPB}.exe"
26fffe29 81TMPTXT="${TMPDIR1}/${TMPB}.txt"
7d13299d 82
da1d85e3 83rm -f config.log
9ac81bbb 84
b48e3611
PM
85# Print a helpful header at the top of config.log
86echo "# QEMU configure log $(date)" >> config.log
979ae168
PM
87printf "# Configured with:" >> config.log
88printf " '%s'" "$0" "$@" >> config.log
89echo >> config.log
b48e3611
PM
90echo "#" >> config.log
91
835af899
PB
92quote_sh() {
93 printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
94}
95
d880a3ba
PB
96print_error() {
97 (echo
76ad07a4
PM
98 echo "ERROR: $1"
99 while test -n "$2"; do
100 echo " $2"
101 shift
102 done
d880a3ba
PB
103 echo) >&2
104}
105
106error_exit() {
107 print_error "$@"
76ad07a4
PM
108 exit 1
109}
110
9c83ffd8
PM
111do_compiler() {
112 # Run the compiler, capturing its output to the log. First argument
113 # is compiler binary to execute.
630d86b7 114 compiler="$1"
9c83ffd8 115 shift
8bbe05d7
IJ
116 if test -n "$BASH_VERSION"; then eval '
117 echo >>config.log "
118funcs: ${FUNCNAME[*]}
119lines: ${BASH_LINENO[*]}"
120 '; fi
9c83ffd8
PM
121 echo $compiler "$@" >> config.log
122 $compiler "$@" >> config.log 2>&1 || return $?
8dc38a78
PM
123 # Test passed. If this is an --enable-werror build, rerun
124 # the test with -Werror and bail out if it fails. This
125 # makes warning-generating-errors in configure test code
126 # obvious to developers.
127 if test "$werror" != "yes"; then
128 return 0
129 fi
130 # Don't bother rerunning the compile if we were already using -Werror
131 case "$*" in
132 *-Werror*)
133 return 0
134 ;;
135 esac
9c83ffd8
PM
136 echo $compiler -Werror "$@" >> config.log
137 $compiler -Werror "$@" >> config.log 2>&1 && return $?
76ad07a4
PM
138 error_exit "configure test passed without -Werror but failed with -Werror." \
139 "This is probably a bug in the configure script. The failing command" \
140 "will be at the bottom of config.log." \
141 "You can run configure with --disable-werror to bypass this check."
8dc38a78
PM
142}
143
9c83ffd8
PM
144do_cc() {
145 do_compiler "$cc" "$@"
146}
147
148do_cxx() {
149 do_compiler "$cxx" "$@"
150}
151
00849b92
RH
152# Append $2 to the variable named $1, with space separation
153add_to() {
154 eval $1=\${$1:+\"\$$1 \"}\$2
155}
156
9c83ffd8
PM
157update_cxxflags() {
158 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
159 # options which some versions of GCC's C++ compiler complain about
160 # because they only make sense for C programs.
53422040 161 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
8a9d3d56 162 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/)
9c83ffd8
PM
163 for arg in $QEMU_CFLAGS; do
164 case $arg in
165 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
166 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
167 ;;
168 *)
169 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
170 ;;
171 esac
172 done
173}
174
52166aa0 175compile_object() {
fd0e6053 176 local_cflags="$1"
5770e8af 177 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
52166aa0
JQ
178}
179
180compile_prog() {
181 local_cflags="$1"
182 local_ldflags="$2"
5770e8af
PB
183 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
184 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
52166aa0
JQ
185}
186
11568d6d
PB
187# symbolically link $1 to $2. Portable version of "ln -sf".
188symlink() {
72b8b5a1 189 rm -rf "$2"
ec5b06d7 190 mkdir -p "$(dirname "$2")"
72b8b5a1 191 ln -s "$1" "$2"
11568d6d
PB
192}
193
0dba6195
LM
194# check whether a command is available to this shell (may be either an
195# executable or a builtin)
196has() {
197 type "$1" >/dev/null 2>&1
198}
199
0a01d76f 200version_ge () {
2df52b9b
AB
201 local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
202 local_ver2=$(echo "$2" | tr . ' ')
0a01d76f
MAL
203 while true; do
204 set x $local_ver1
205 local_first=${2-0}
c44a33e2
SG
206 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
207 shift ${2:+2}
0a01d76f
MAL
208 local_ver1=$*
209 set x $local_ver2
210 # the second argument finished, the first must be greater or equal
211 test $# = 1 && return 0
212 test $local_first -lt $2 && return 1
213 test $local_first -gt $2 && return 0
c44a33e2 214 shift ${2:+2}
0a01d76f
MAL
215 local_ver2=$*
216 done
217}
218
5b808275
LV
219have_backend () {
220 echo "$trace_backends" | grep "$1" >/dev/null
221}
222
3b6b7550
PB
223glob() {
224 eval test -z '"${1#'"$2"'}"'
225}
226
e9a3591f
CB
227ld_has() {
228 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
229}
230
4ace32e2
AO
231if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
232then
233 error_exit "main directory cannot contain spaces nor colons"
234fi
235
14211825 236# default parameters
2ff6b91e 237cpu=""
a31a8642 238iasl="iasl"
1e43adfc 239interp_prefix="/usr/gnemul/qemu-%M"
43ce4dfe 240static="no"
3812c0c4 241cross_compile="no"
7d13299d 242cross_prefix=""
0c58ac1c 243audio_drv_list=""
b64ec4e4
FZ
244block_drv_rw_whitelist=""
245block_drv_ro_whitelist=""
e5f05f8c 246block_drv_whitelist_tools="no"
e49d021e 247host_cc="cc"
d5631638 248audio_win_int=""
957f1f99 249libs_qga=""
5bc62e01 250debug_info="yes"
cdad781d 251lto="false"
63678e17 252stack_protector=""
1e4f6065 253safe_stack=""
afc3a8f9 254use_containers="yes"
f2385398 255gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
ac0df51d 256
92712822
DB
257if test -e "$source_path/.git"
258then
7d7dbf9d 259 git_submodules_action="update"
92712822 260else
7d7dbf9d 261 git_submodules_action="ignore"
92712822 262fi
2d652f24
PB
263
264git_submodules="ui/keycodemapdb"
cc84d63a 265git="git"
ac0df51d 266
afb63ebd
SW
267# Don't accept a target_list environment variable.
268unset target_list
447e133f 269unset target_list_exclude
377529c0
PB
270
271# Default value for a variable defining feature "foo".
272# * foo="no" feature will only be used if --enable-foo arg is given
273# * foo="" feature will be searched for, and if found, will be used
274# unless --disable-foo is given
275# * foo="yes" this value will only be set by --enable-foo flag.
276# feature will searched for,
277# if not found, configure exits with error
278#
279# Always add --enable-foo and --disable-foo command line args.
280# Distributions want to ensure that several features are compiled in, and it
281# is impossible without a --enable-foo that exits if a feature is not found.
282
c87ea116
AB
283default_feature=""
284# parse CC options second
285for opt do
286 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
287 case "$opt" in
288 --without-default-features)
289 default_feature="no"
290 ;;
291 esac
292done
293
8c6d4ff4 294brlapi="auto"
f9cd86fe 295curl="auto"
5285e593
YL
296iconv="auto"
297curses="auto"
e3667660 298docs="auto"
fbb4121d 299fdt="auto"
58952137 300netmap="no"
35be72ba
PB
301sdl="auto"
302sdl_image="auto"
422a5fd0 303coreaudio="auto"
cece116c 304virtiofsd="auto"
69202b40 305virtfs="auto"
5c53015a 306libudev="auto"
6ec0e15d 307mpath="auto"
3a6a1256 308vnc="auto"
deb62371 309sparse="auto"
c87ea116 310vde="$default_feature"
a0b93237
PB
311vnc_sasl="auto"
312vnc_jpeg="auto"
313vnc_png="auto"
4113f4cf 314xkbcommon="auto"
bcf0a7da 315xen=${default_feature:+disabled}
c87ea116 316xen_ctrl_version="$default_feature"
1badb709 317xen_pci_passthrough="auto"
c87ea116 318linux_aio="$default_feature"
53c22b68 319linux_io_uring="auto"
727c8bb8 320cap_ng="auto"
f7f2d651 321attr="auto"
c87ea116 322xfs="$default_feature"
1badb709 323tcg="enabled"
c87ea116 324membarrier="$default_feature"
0848f8ac 325vhost_kernel="$default_feature"
c87ea116
AB
326vhost_net="$default_feature"
327vhost_crypto="$default_feature"
328vhost_scsi="$default_feature"
329vhost_vsock="$default_feature"
d88618f7 330vhost_user="no"
e5e856c1 331vhost_user_blk_server="auto"
c87ea116 332vhost_user_fs="$default_feature"
0848f8ac 333vhost_vdpa="$default_feature"
46627f41 334bpf="auto"
3bd40ec7
PB
335kvm="auto"
336hax="auto"
337hvf="auto"
338whpx="auto"
74a414a1 339nvmm="auto"
c87ea116
AB
340rdma="$default_feature"
341pvrdma="$default_feature"
377529c0
PB
342gprof="no"
343debug_tcg="no"
377529c0 344debug="no"
247724cb 345sanitizers="no"
0aebab04 346tsan="no"
c87ea116 347fortify_source="$default_feature"
377529c0 348strip_opt="yes"
23a77b2d 349tcg_interpreter="false"
377529c0
PB
350bigendian="no"
351mingw32="no"
1d728c39 352gcov="no"
c7328271 353EXESUF=""
484e2cc7 354HOST_DSOSUF=".so"
17969268 355modules="no"
bd83c861 356module_upgrades="no"
377529c0 357prefix="/usr/local"
10ff82d1 358qemu_suffix="qemu"
4d34a86b 359slirp="auto"
377529c0
PB
360oss_lib=""
361bsd="no"
362linux="no"
363solaris="no"
364profiler="no"
b4e312e9 365cocoa="auto"
377529c0
PB
366softmmu="yes"
367linux_user="no"
377529c0 368bsd_user="no"
c8d5450b 369blobs="true"
377529c0 370pkgversion=""
40d6444e 371pie=""
3556c233 372qom_cast_debug="yes"
baf86d6b 373trace_backends="log"
377529c0 374trace_file="trace"
c87ea116 375spice="$default_feature"
58d3f3ff 376spice_protocol="auto"
fabd1e93 377rbd="auto"
5f364c57 378smartcard="auto"
0a40bcb7 379u2f="auto"
90540f32 380libusb="auto"
18f31e60 381usb_redir="auto"
c87ea116 382opengl="$default_feature"
5dd89908 383cpuid_h="no"
c87ea116 384avx2_opt="$default_feature"
8b18cdbf 385capstone="auto"
0c32a0ae 386lzo="auto"
241611ea 387snappy="auto"
29ba6116 388bzip2="auto"
ecea3696 389lzfse="auto"
b1def33d 390zstd="auto"
c87ea116 391guest_agent="$default_feature"
d9840e25 392guest_agent_with_vss="no"
50cbebb9 393guest_agent_ntddscsi="no"
b846ab7c 394guest_agent_msi="auto"
c87ea116 395vss_win32_sdk="$default_feature"
d9840e25 396win_sdk="no"
c87ea116 397want_tools="$default_feature"
9db405a3 398libiscsi="auto"
30045c05 399libnfs="auto"
519175a2 400coroutine=""
c87ea116 401coroutine_pool="$default_feature"
7d992e4d 402debug_stack_usage="no"
f0d92b56 403crypto_afalg="no"
9e62ba48
DB
404cfi="false"
405cfi_debug="false"
90835c2b 406seccomp="auto"
08821ca2 407glusterfs="auto"
1b695471 408gtk="auto"
a1c5e949 409tls_priority="NORMAL"
57612511
PB
410gnutls="auto"
411nettle="auto"
412gcrypt="auto"
05e391ae 413auth_pam="auto"
c23d7b4e 414vte="auto"
587d59d6 415virglrenderer="auto"
c87ea116
AB
416tpm="$default_feature"
417libssh="$default_feature"
418live_block_migration=${default_feature:-yes}
419numa="$default_feature"
2847b469 420tcmalloc="no"
7b01cb97 421jemalloc="no"
c87ea116
AB
422replication=${default_feature:-yes}
423bochs=${default_feature:-yes}
424cloop=${default_feature:-yes}
425dmg=${default_feature:-yes}
426qcow1=${default_feature:-yes}
427vdi=${default_feature:-yes}
428vvfat=${default_feature:-yes}
429qed=${default_feature:-yes}
430parallels=${default_feature:-yes}
c5b36c25 431libxml2="auto"
ba59fb77 432debug_mutex="no"
e36e8c70 433libpmem="auto"
7bc3ca7f 434default_devices="true"
ba4dd2aa 435plugins="$default_feature"
adc28027 436fuzzing="no"
b767d257 437rng_none="no"
c87ea116 438secret_keyring="$default_feature"
83ef1682 439libdaxctl="auto"
a5665051 440meson=""
48328880 441ninja=""
a5665051 442skip_meson=no
0e8e77d4 443gettext="auto"
a484a719 444fuse="auto"
df4ea709 445fuse_lseek="auto"
106ad1f9 446multiprocess="auto"
b8e0c493 447slirp_smbd="$default_feature"
377529c0 448
aa087962 449malloc_trim="auto"
20cf7b8e 450gio="$default_feature"
898be3e0 451
c87ea116 452# parse CC options second
ac0df51d 453for opt do
89138857 454 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
ac0df51d
AL
455 case "$opt" in
456 --cross-prefix=*) cross_prefix="$optarg"
3812c0c4 457 cross_compile="yes"
ac0df51d 458 ;;
3d8df640 459 --cc=*) CC="$optarg"
ac0df51d 460 ;;
83f73fce
TS
461 --cxx=*) CXX="$optarg"
462 ;;
2ff6b91e
JQ
463 --cpu=*) cpu="$optarg"
464 ;;
de385287 465 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
db5adeaa 466 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
e2a2ed06 467 ;;
11cde1c8 468 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
11cde1c8 469 ;;
db5adeaa 470 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
f9943cd5 471 EXTRA_LDFLAGS="$optarg"
e2a2ed06 472 ;;
5bc62e01
GH
473 --enable-debug-info) debug_info="yes"
474 ;;
475 --disable-debug-info) debug_info="no"
476 ;;
d75402b5
AB
477 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
478 ;;
d422b2bc
AB
479 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
480 eval "cross_cc_cflags_${cc_arch}=\$optarg"
2038f8c8 481 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
d422b2bc 482 ;;
d75402b5 483 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
2038f8c8 484 cc_archs="$cc_archs $cc_arch"
d75402b5 485 eval "cross_cc_${cc_arch}=\$optarg"
2038f8c8 486 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
d75402b5 487 ;;
ac0df51d
AL
488 esac
489done
ac0df51d
AL
490# OS specific
491# Using uname is really, really broken. Once we have the right set of checks
93148aa5 492# we can eliminate its usage altogether.
ac0df51d 493
e49d021e
PM
494# Preferred compiler:
495# ${CC} (if set)
496# ${cross_prefix}gcc (if cross-prefix specified)
497# system compiler
498if test -z "${CC}${cross_prefix}"; then
499 cc="$host_cc"
500else
501 cc="${CC-${cross_prefix}gcc}"
502fi
503
83f73fce
TS
504if test -z "${CXX}${cross_prefix}"; then
505 cxx="c++"
506else
507 cxx="${CXX-${cross_prefix}g++}"
508fi
509
b3198cc2 510ar="${AR-${cross_prefix}ar}"
cdbd727c 511as="${AS-${cross_prefix}as}"
5f6f0e27 512ccas="${CCAS-$cc}"
3dd46c78 513cpp="${CPP-$cc -E}"
b3198cc2
SY
514objcopy="${OBJCOPY-${cross_prefix}objcopy}"
515ld="${LD-${cross_prefix}ld}"
9f81aeb5 516ranlib="${RANLIB-${cross_prefix}ranlib}"
4852ee95 517nm="${NM-${cross_prefix}nm}"
b3198cc2
SY
518strip="${STRIP-${cross_prefix}strip}"
519windres="${WINDRES-${cross_prefix}windres}"
17884d7b
ST
520pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
521query_pkg_config() {
522 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
523}
524pkg_config=query_pkg_config
47c03744 525sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
ac0df51d 526
be17dc90 527# default flags for all hosts
2d31515b
PM
528# We use -fwrapv to tell the compiler that we require a C dialect where
529# left shift of signed integers is well defined and has the expected
530# 2s-complement style results. (Both clang and gcc agree that it
531# provides these semantics.)
086d5f75
PB
532QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
533QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
c95e3080 534QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
be17dc90 535QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
5770e8af
PB
536
537# Flags that are needed during configure but later taken care of by Meson
8a9d3d56 538CONFIGURE_CFLAGS="-std=gnu11 -Wall"
5770e8af 539CONFIGURE_LDFLAGS=
086d5f75 540
be17dc90 541
ac0df51d
AL
542check_define() {
543cat > $TMPC <<EOF
544#if !defined($1)
fd786e1a 545#error $1 not defined
ac0df51d
AL
546#endif
547int main(void) { return 0; }
548EOF
52166aa0 549 compile_object
ac0df51d
AL
550}
551
307119e7
GH
552check_include() {
553cat > $TMPC <<EOF
554#include <$1>
555int main(void) { return 0; }
556EOF
557 compile_object
558}
559
93b25869
JS
560write_c_skeleton() {
561 cat > $TMPC <<EOF
562int main(void) { return 0; }
563EOF
564}
565
adc28027
AB
566write_c_fuzzer_skeleton() {
567 cat > $TMPC <<EOF
568#include <stdint.h>
569#include <sys/types.h>
570int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
571int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
572EOF
573}
574
bbea4050
PM
575if check_define __linux__ ; then
576 targetos="Linux"
577elif check_define _WIN32 ; then
578 targetos='MINGW32'
579elif check_define __OpenBSD__ ; then
580 targetos='OpenBSD'
581elif check_define __sun__ ; then
582 targetos='SunOS'
583elif check_define __HAIKU__ ; then
584 targetos='Haiku'
951fedfc
PM
585elif check_define __FreeBSD__ ; then
586 targetos='FreeBSD'
587elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
588 targetos='GNU/kFreeBSD'
589elif check_define __DragonFly__ ; then
590 targetos='DragonFly'
591elif check_define __NetBSD__; then
592 targetos='NetBSD'
593elif check_define __APPLE__; then
594 targetos='Darwin'
bbea4050 595else
951fedfc
PM
596 # This is a fatal error, but don't report it yet, because we
597 # might be going to just print the --help text, or it might
598 # be the result of a missing compiler.
599 targetos='bogus'
bbea4050
PM
600fi
601
602# Some host OSes need non-standard checks for which CPU to use.
603# Note that these checks are broken for cross-compilation: if you're
604# cross-compiling to one of these OSes then you'll need to specify
605# the correct CPU with the --cpu option.
606case $targetos in
607Darwin)
5869f8dd 608 HOST_DSOSUF=".dylib"
bbea4050
PM
609 ;;
610SunOS)
89138857 611 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
bbea4050
PM
612 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
613 cpu="x86_64"
614 fi
615esac
616
2ff6b91e
JQ
617if test ! -z "$cpu" ; then
618 # command line argument
619 :
620elif check_define __i386__ ; then
ac0df51d
AL
621 cpu="i386"
622elif check_define __x86_64__ ; then
c72b26ec
RH
623 if check_define __ILP32__ ; then
624 cpu="x32"
625 else
626 cpu="x86_64"
627 fi
3aa9bd6c 628elif check_define __sparc__ ; then
3aa9bd6c
BS
629 if check_define __arch64__ ; then
630 cpu="sparc64"
631 else
632 cpu="sparc"
633 fi
fdf7ed96 634elif check_define _ARCH_PPC ; then
635 if check_define _ARCH_PPC64 ; then
f8378acc
RH
636 if check_define _LITTLE_ENDIAN ; then
637 cpu="ppc64le"
638 else
639 cpu="ppc64"
640 fi
fdf7ed96 641 else
642 cpu="ppc"
643 fi
afa05235
AJ
644elif check_define __mips__ ; then
645 cpu="mips"
d66ed0ea
AJ
646elif check_define __s390__ ; then
647 if check_define __s390x__ ; then
648 cpu="s390x"
649 else
650 cpu="s390"
651 fi
c4f80543
AF
652elif check_define __riscv ; then
653 if check_define _LP64 ; then
654 cpu="riscv64"
655 else
656 cpu="riscv32"
657 fi
21d89f84
PM
658elif check_define __arm__ ; then
659 cpu="arm"
1f080313
CF
660elif check_define __aarch64__ ; then
661 cpu="aarch64"
ac0df51d 662else
89138857 663 cpu=$(uname -m)
ac0df51d
AL
664fi
665
359bc95d
PM
666ARCH=
667# Normalise host CPU name and set ARCH.
668# Note that this case should only have supported host CPUs, not guests.
7d13299d 669case "$cpu" in
ee35e968 670 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
898be3e0 671 ;;
f8378acc
RH
672 ppc64le)
673 ARCH="ppc64"
f8378acc 674 ;;
7d13299d 675 i386|i486|i586|i686|i86pc|BePC)
97a847bc 676 cpu="i386"
7d13299d 677 ;;
aaa5fa14
AJ
678 x86_64|amd64)
679 cpu="x86_64"
680 ;;
21d89f84
PM
681 armv*b|armv*l|arm)
682 cpu="arm"
7d13299d 683 ;;
1f080313
CF
684 aarch64)
685 cpu="aarch64"
686 ;;
afa05235
AJ
687 mips*)
688 cpu="mips"
689 ;;
3142255c 690 sparc|sun4[cdmuv])
ae228531
FB
691 cpu="sparc"
692 ;;
7d13299d 693 *)
359bc95d
PM
694 # This will result in either an error or falling back to TCI later
695 ARCH=unknown
7d13299d
FB
696 ;;
697esac
359bc95d
PM
698if test -z "$ARCH"; then
699 ARCH="$cpu"
700fi
e2d52ad3 701
7d13299d 702# OS specific
0dbfc675 703
7d13299d 704case $targetos in
67b915a5 705MINGW32*)
0dbfc675 706 mingw32="yes"
3cec7cc2 707 audio_possible_drivers="dsound sdl"
307119e7
GH
708 if check_include dsound.h; then
709 audio_drv_list="dsound"
710 else
711 audio_drv_list=""
712 fi
898be3e0 713 supported_os="yes"
9b8e4298 714 plugins="no"
fb648e9c 715 pie="no"
67b915a5 716;;
5c40d2bd 717GNU/kFreeBSD)
a167ba50 718 bsd="yes"
6a485418 719 audio_drv_list="oss try-sdl"
0bac1111 720 audio_possible_drivers="oss sdl pa"
5c40d2bd 721;;
7d3505c5 722FreeBSD)
0dbfc675 723 bsd="yes"
0db4a067 724 make="${MAKE-gmake}"
6a485418 725 audio_drv_list="oss try-sdl"
0bac1111 726 audio_possible_drivers="oss sdl pa"
f01576f1 727 # needed for kinfo_getvmmap(3) in libutil.h
58952137 728 netmap="" # enable netmap autodetect
7d3505c5 729;;
c5e97233 730DragonFly)
0dbfc675 731 bsd="yes"
0db4a067 732 make="${MAKE-gmake}"
6a485418 733 audio_drv_list="oss try-sdl"
0bac1111 734 audio_possible_drivers="oss sdl pa"
c5e97233 735;;
7d3505c5 736NetBSD)
0dbfc675 737 bsd="yes"
0db4a067 738 make="${MAKE-gmake}"
6a485418 739 audio_drv_list="oss try-sdl"
0bac1111 740 audio_possible_drivers="oss sdl"
0dbfc675 741 oss_lib="-lossaudio"
7d3505c5
FB
742;;
743OpenBSD)
0dbfc675 744 bsd="yes"
0db4a067 745 make="${MAKE-gmake}"
f92c7168 746 audio_drv_list="try-sdl"
0bac1111 747 audio_possible_drivers="sdl"
7d3505c5 748;;
83fb7adf 749Darwin)
0dbfc675
JQ
750 bsd="yes"
751 darwin="yes"
422a5fd0 752 audio_drv_list="try-coreaudio try-sdl"
14382605 753 audio_possible_drivers="coreaudio sdl"
a0b7cf6b
PM
754 # Disable attempts to use ObjectiveC features in os/object.h since they
755 # won't work when we're compiling with gcc as a C compiler.
756 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
83fb7adf 757;;
ec530c81 758SunOS)
0dbfc675 759 solaris="yes"
0db4a067 760 make="${MAKE-gmake}"
e2d8830e 761 smbd="${SMBD-/usr/sfw/sbin/smbd}"
0dbfc675 762 if test -f /usr/include/sys/soundcard.h ; then
6a485418 763 audio_drv_list="oss try-sdl"
0dbfc675
JQ
764 fi
765 audio_possible_drivers="oss sdl"
d741429a
BS
766# needed for CMSG_ macros in sys/socket.h
767 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
768# needed for TIOCWIN* defines in termios.h
769 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
86b2bd93 770;;
179cf400
AF
771Haiku)
772 haiku="yes"
b8ee198d
RZ
773 pie="no"
774 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
179cf400 775;;
898be3e0 776Linux)
7183834a 777 audio_drv_list="try-pa oss"
0bac1111 778 audio_possible_drivers="oss alsa sdl pa"
0dbfc675
JQ
779 linux="yes"
780 linux_user="yes"
c87ea116 781 vhost_user=${default_feature:-yes}
898be3e0 782;;
7d13299d
FB
783esac
784
7d3505c5 785if [ "$bsd" = "yes" ] ; then
b1a550a0 786 if [ "$darwin" != "yes" ] ; then
08de3949 787 bsd_user="yes"
83fb7adf 788 fi
7d3505c5
FB
789fi
790
0db4a067 791: ${make=${MAKE-make}}
b6daf4d3 792
faf44142
DB
793# We prefer python 3.x. A bare 'python' is traditionally
794# python 2.x, but some distros have it as python 3.x, so
ddf90699 795# we check that too
faf44142 796python=
0a01d76f 797explicit_python=no
ddf90699 798for binary in "${PYTHON-python3}" python
faf44142
DB
799do
800 if has "$binary"
801 then
95c5f2de 802 python=$(command -v "$binary")
faf44142
DB
803 break
804 fi
805done
903458c8 806
903458c8 807
39d87c8c
AB
808# Check for ancillary tools used in testing
809genisoimage=
3df437c7 810for binary in genisoimage mkisofs
39d87c8c
AB
811do
812 if has $binary
813 then
814 genisoimage=$(command -v "$binary")
815 break
816 fi
817done
818
3c4a4d0d
PM
819# Default objcc to clang if available, otherwise use CC
820if has clang; then
821 objcc=clang
822else
823 objcc="$cc"
824fi
825
3457a3f8 826if test "$mingw32" = "yes" ; then
3457a3f8 827 EXESUF=".exe"
484e2cc7 828 HOST_DSOSUF=".dll"
78e9d4ad 829 # MinGW needs -mthreads for TLS and macro _MT.
5770e8af 830 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
93b25869 831 write_c_skeleton;
d17f305a 832 prefix="/qemu"
77433a5f 833 qemu_suffix=""
105fad6b 834 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
3457a3f8
JQ
835fi
836
487fefdb 837werror=""
85aa5189 838
7d13299d 839for opt do
89138857 840 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
7d13299d 841 case "$opt" in
2efc3265
FB
842 --help|-h) show_help=yes
843 ;;
99123e13
MF
844 --version|-V) exec cat $source_path/VERSION
845 ;;
b1a550a0 846 --prefix=*) prefix="$optarg"
7d13299d 847 ;;
b1a550a0 848 --interp-prefix=*) interp_prefix="$optarg"
32ce6337 849 ;;
ac0df51d 850 --cross-prefix=*)
7d13299d 851 ;;
ac0df51d 852 --cc=*)
7d13299d 853 ;;
b1a550a0 854 --host-cc=*) host_cc="$optarg"
83469015 855 ;;
83f73fce
TS
856 --cxx=*)
857 ;;
e007dbec
MT
858 --iasl=*) iasl="$optarg"
859 ;;
3c4a4d0d
PM
860 --objcc=*) objcc="$optarg"
861 ;;
b1a550a0 862 --make=*) make="$optarg"
7d13299d 863 ;;
b6daf4d3 864 --install=*)
6a882643 865 ;;
0a01d76f 866 --python=*) python="$optarg" ; explicit_python=yes
c886edfb 867 ;;
2eb054c2
PM
868 --sphinx-build=*) sphinx_build="$optarg"
869 ;;
a5665051
PB
870 --skip-meson) skip_meson=yes
871 ;;
872 --meson=*) meson="$optarg"
873 ;;
48328880
PB
874 --ninja=*) ninja="$optarg"
875 ;;
e2d8830e
BS
876 --smbd=*) smbd="$optarg"
877 ;;
e2a2ed06 878 --extra-cflags=*)
7d13299d 879 ;;
11cde1c8
BD
880 --extra-cxxflags=*)
881 ;;
e2a2ed06 882 --extra-ldflags=*)
7d13299d 883 ;;
5bc62e01
GH
884 --enable-debug-info)
885 ;;
886 --disable-debug-info)
887 ;;
d75402b5
AB
888 --cross-cc-*)
889 ;;
17969268
FZ
890 --enable-modules)
891 modules="yes"
3aa88b31
SH
892 ;;
893 --disable-modules)
894 modules="no"
17969268 895 ;;
bd83c861
CE
896 --disable-module-upgrades) module_upgrades="no"
897 ;;
898 --enable-module-upgrades) module_upgrades="yes"
899 ;;
2ff6b91e 900 --cpu=*)
7d13299d 901 ;;
b1a550a0 902 --target-list=*) target_list="$optarg"
447e133f
AB
903 if test "$target_list_exclude"; then
904 error_exit "Can't mix --target-list with --target-list-exclude"
905 fi
906 ;;
907 --target-list-exclude=*) target_list_exclude="$optarg"
908 if test "$target_list"; then
909 error_exit "Can't mix --target-list-exclude with --target-list"
910 fi
de83cd02 911 ;;
5b808275
LV
912 --enable-trace-backends=*) trace_backends="$optarg"
913 ;;
914 # XXX: backwards compatibility
915 --enable-trace-backend=*) trace_backends="$optarg"
94a420b1 916 ;;
74242e0f 917 --with-trace-file=*) trace_file="$optarg"
9410b56c 918 ;;
7bc3ca7f 919 --with-default-devices) default_devices="true"
f3494749 920 ;;
7bc3ca7f 921 --without-default-devices) default_devices="false"
f3494749 922 ;;
d1d5e9ee
AB
923 --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
924 ;;
925 --with-devices-*) device_arch=${opt#--with-devices-};
926 device_arch=${device_arch%%=*}
927 cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
928 if test -f "$cf"; then
929 device_archs="$device_archs $device_arch"
930 eval "devices_${device_arch}=\$optarg"
931 else
932 error_exit "File $cf does not exist"
933 fi
934 ;;
c87ea116
AB
935 --without-default-features) # processed above
936 ;;
7d13299d
FB
937 --enable-gprof) gprof="yes"
938 ;;
1d728c39
BS
939 --enable-gcov) gcov="yes"
940 ;;
79427693
LM
941 --static)
942 static="yes"
17884d7b 943 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
43ce4dfe 944 ;;
0b24e75f
PB
945 --mandir=*) mandir="$optarg"
946 ;;
947 --bindir=*) bindir="$optarg"
948 ;;
3aa5d2be
AL
949 --libdir=*) libdir="$optarg"
950 ;;
8bf188aa
MT
951 --libexecdir=*) libexecdir="$optarg"
952 ;;
0f94d6da
AL
953 --includedir=*) includedir="$optarg"
954 ;;
528ae5b8 955 --datadir=*) datadir="$optarg"
0b24e75f 956 ;;
77433a5f 957 --with-suffix=*) qemu_suffix="$optarg"
023d3d67 958 ;;
c6502638 959 --docdir=*) docdir="$optarg"
0b24e75f 960 ;;
fe0038be
PB
961 --localedir=*) localedir="$optarg"
962 ;;
ca2fb938 963 --sysconfdir=*) sysconfdir="$optarg"
07381cc1 964 ;;
785c23ae
LC
965 --localstatedir=*) local_statedir="$optarg"
966 ;;
3d5eecab
GH
967 --firmwarepath=*) firmwarepath="$optarg"
968 ;;
181ce1d0
OH
969 --host=*|--build=*|\
970 --disable-dependency-tracking|\
785c23ae 971 --sbindir=*|--sharedstatedir=*|\
fe0038be 972 --oldincludedir=*|--datarootdir=*|--infodir=*|\
023ddd74
MF
973 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
974 # These switches are silently ignored, for compatibility with
975 # autoconf-generated configure scripts. This allows QEMU's
976 # configure to be used by RPM and similar macros that set
977 # lots of directory switches by default.
978 ;;
35be72ba 979 --disable-sdl) sdl="disabled"
97a847bc 980 ;;
35be72ba 981 --enable-sdl) sdl="enabled"
c4198157 982 ;;
35be72ba 983 --disable-sdl-image) sdl_image="disabled"
a442fe2f 984 ;;
35be72ba 985 --enable-sdl-image) sdl_image="enabled"
a442fe2f 986 ;;
3556c233
PB
987 --disable-qom-cast-debug) qom_cast_debug="no"
988 ;;
989 --enable-qom-cast-debug) qom_cast_debug="yes"
990 ;;
69202b40 991 --disable-virtfs) virtfs="disabled"
983eef5a 992 ;;
69202b40 993 --enable-virtfs) virtfs="enabled"
983eef5a 994 ;;
5c53015a
PB
995 --disable-libudev) libudev="disabled"
996 ;;
997 --enable-libudev) libudev="enabled"
998 ;;
cece116c
MT
999 --disable-virtiofsd) virtiofsd="disabled"
1000 ;;
1001 --enable-virtiofsd) virtiofsd="enabled"
1002 ;;
6ec0e15d 1003 --disable-mpath) mpath="disabled"
fe8fc5ae 1004 ;;
6ec0e15d 1005 --enable-mpath) mpath="enabled"
fe8fc5ae 1006 ;;
a0b93237 1007 --disable-vnc) vnc="disabled"
821601ea 1008 ;;
a0b93237 1009 --enable-vnc) vnc="enabled"
821601ea 1010 ;;
0e8e77d4 1011 --disable-gettext) gettext="disabled"
e8f3bd71 1012 ;;
0e8e77d4 1013 --enable-gettext) gettext="enabled"
e8f3bd71 1014 ;;
2f6a1ab0
BS
1015 --oss-lib=*) oss_lib="$optarg"
1016 ;;
0c58ac1c 1017 --audio-drv-list=*) audio_drv_list="$optarg"
102a52e4 1018 ;;
89138857 1019 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
b64ec4e4 1020 ;;
89138857 1021 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
eb852011 1022 ;;
e5f05f8c
KW
1023 --enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="yes"
1024 ;;
1025 --disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="no"
1026 ;;
f8393946
AJ
1027 --enable-debug-tcg) debug_tcg="yes"
1028 ;;
1029 --disable-debug-tcg) debug_tcg="no"
1030 ;;
f3d08ee6
PB
1031 --enable-debug)
1032 # Enable debugging options that aren't excessively noisy
1033 debug_tcg="yes"
1fcc6d42 1034 debug_mutex="yes"
f3d08ee6
PB
1035 debug="yes"
1036 strip_opt="no"
b553a042 1037 fortify_source="no"
f3d08ee6 1038 ;;
247724cb
MAL
1039 --enable-sanitizers) sanitizers="yes"
1040 ;;
1041 --disable-sanitizers) sanitizers="no"
1042 ;;
0aebab04
LY
1043 --enable-tsan) tsan="yes"
1044 ;;
1045 --disable-tsan) tsan="no"
1046 ;;
deb62371 1047 --enable-sparse) sparse="enabled"
03b4fe7d 1048 ;;
deb62371 1049 --disable-sparse) sparse="disabled"
03b4fe7d 1050 ;;
1625af87
AL
1051 --disable-strip) strip_opt="no"
1052 ;;
a0b93237 1053 --disable-vnc-sasl) vnc_sasl="disabled"
2f9606b3 1054 ;;
a0b93237 1055 --enable-vnc-sasl) vnc_sasl="enabled"
ea784e3b 1056 ;;
a0b93237 1057 --disable-vnc-jpeg) vnc_jpeg="disabled"
2f6f5c7a 1058 ;;
a0b93237 1059 --enable-vnc-jpeg) vnc_jpeg="enabled"
2f6f5c7a 1060 ;;
a0b93237 1061 --disable-vnc-png) vnc_png="disabled"
efe556ad 1062 ;;
a0b93237 1063 --enable-vnc-png) vnc_png="enabled"
efe556ad 1064 ;;
4d34a86b 1065 --disable-slirp) slirp="disabled"
1d14ffa9 1066 ;;
fd6fc214
PB
1067 --enable-slirp) slirp="enabled"
1068 ;;
4d34a86b 1069 --enable-slirp=git) slirp="internal"
7c57bdd8 1070 ;;
675b9b53
MAL
1071 --enable-slirp=system) slirp="system"
1072 ;;
e0e6c8c0 1073 --disable-vde) vde="no"
8a16d273 1074 ;;
dfb278bd
JQ
1075 --enable-vde) vde="yes"
1076 ;;
58952137
VM
1077 --disable-netmap) netmap="no"
1078 ;;
1079 --enable-netmap) netmap="yes"
1080 ;;
1badb709 1081 --disable-xen) xen="disabled"
e37630ca 1082 ;;
1badb709 1083 --enable-xen) xen="enabled"
fc321b4b 1084 ;;
1badb709 1085 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
eb6fda0f 1086 ;;
1badb709 1087 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
eb6fda0f 1088 ;;
8c6d4ff4 1089 --disable-brlapi) brlapi="disabled"
2e4d9fb1 1090 ;;
8c6d4ff4 1091 --enable-brlapi) brlapi="enabled"
4ffcedb6 1092 ;;
1badb709 1093 --disable-kvm) kvm="disabled"
7ba1e619 1094 ;;
1badb709 1095 --enable-kvm) kvm="enabled"
b31a0277 1096 ;;
1badb709 1097 --disable-hax) hax="disabled"
180fb750 1098 ;;
1badb709 1099 --enable-hax) hax="enabled"
180fb750 1100 ;;
1badb709 1101 --disable-hvf) hvf="disabled"
c97d6d2c 1102 ;;
1badb709 1103 --enable-hvf) hvf="enabled"
c97d6d2c 1104 ;;
74a414a1
RZ
1105 --disable-nvmm) nvmm="disabled"
1106 ;;
1107 --enable-nvmm) nvmm="enabled"
1108 ;;
1badb709 1109 --disable-whpx) whpx="disabled"
d661d9a4 1110 ;;
1badb709 1111 --enable-whpx) whpx="enabled"
d661d9a4 1112 ;;
c6fbea47 1113 --disable-tcg-interpreter) tcg_interpreter="false"
9195b2c2 1114 ;;
c6fbea47 1115 --enable-tcg-interpreter) tcg_interpreter="true"
9195b2c2 1116 ;;
727c8bb8 1117 --disable-cap-ng) cap_ng="disabled"
47e98658 1118 ;;
727c8bb8 1119 --enable-cap-ng) cap_ng="enabled"
47e98658 1120 ;;
1badb709 1121 --disable-tcg) tcg="disabled"
d1a14257 1122 plugins="no"
b3f6ea7e 1123 ;;
1badb709 1124 --enable-tcg) tcg="enabled"
b3f6ea7e 1125 ;;
aa087962 1126 --disable-malloc-trim) malloc_trim="disabled"
5a22ab71 1127 ;;
aa087962 1128 --enable-malloc-trim) malloc_trim="enabled"
5a22ab71 1129 ;;
cd4ec0b4
GH
1130 --disable-spice) spice="no"
1131 ;;
58d3f3ff
GH
1132 --enable-spice)
1133 spice_protocol="yes"
1134 spice="yes"
1135 ;;
1136 --disable-spice-protocol)
1137 spice_protocol="no"
1138 spice="no"
1139 ;;
1140 --enable-spice-protocol) spice_protocol="yes"
cd4ec0b4 1141 ;;
9db405a3 1142 --disable-libiscsi) libiscsi="disabled"
c589b249 1143 ;;
9db405a3 1144 --enable-libiscsi) libiscsi="enabled"
c589b249 1145 ;;
30045c05 1146 --disable-libnfs) libnfs="disabled"
6542aa9c 1147 ;;
30045c05 1148 --enable-libnfs) libnfs="enabled"
6542aa9c 1149 ;;
05c2a3e7
FB
1150 --enable-profiler) profiler="yes"
1151 ;;
b4e312e9 1152 --disable-cocoa) cocoa="disabled"
14821030 1153 ;;
a23a6789 1154 --enable-cocoa) cocoa="enabled"
1d14ffa9 1155 ;;
cad25d69 1156 --disable-system) softmmu="no"
0a8e90f4 1157 ;;
cad25d69 1158 --enable-system) softmmu="yes"
0a8e90f4 1159 ;;
0953a80f
ZA
1160 --disable-user)
1161 linux_user="no" ;
1162 bsd_user="no" ;
0953a80f
ZA
1163 ;;
1164 --enable-user) ;;
831b7825 1165 --disable-linux-user) linux_user="no"
0a8e90f4 1166 ;;
831b7825
TS
1167 --enable-linux-user) linux_user="yes"
1168 ;;
84778508
BS
1169 --disable-bsd-user) bsd_user="no"
1170 ;;
1171 --enable-bsd-user) bsd_user="yes"
1172 ;;
40d6444e 1173 --enable-pie) pie="yes"
34005a00 1174 ;;
40d6444e 1175 --disable-pie) pie="no"
34005a00 1176 ;;
85aa5189
FB
1177 --enable-werror) werror="yes"
1178 ;;
1179 --disable-werror) werror="no"
1180 ;;
cdad781d
DB
1181 --enable-lto) lto="true"
1182 ;;
1183 --disable-lto) lto="false"
1184 ;;
63678e17
SN
1185 --enable-stack-protector) stack_protector="yes"
1186 ;;
1187 --disable-stack-protector) stack_protector="no"
1188 ;;
1e4f6065
DB
1189 --enable-safe-stack) safe_stack="yes"
1190 ;;
1191 --disable-safe-stack) safe_stack="no"
1192 ;;
9e62ba48
DB
1193 --enable-cfi)
1194 cfi="true";
1195 lto="true";
1196 ;;
1197 --disable-cfi) cfi="false"
1198 ;;
1199 --enable-cfi-debug) cfi_debug="true"
1200 ;;
1201 --disable-cfi-debug) cfi_debug="false"
1202 ;;
5285e593 1203 --disable-curses) curses="disabled"
4d3b6f6e 1204 ;;
5285e593 1205 --enable-curses) curses="enabled"
c584a6d0 1206 ;;
5285e593 1207 --disable-iconv) iconv="disabled"
e08bb301 1208 ;;
5285e593 1209 --enable-iconv) iconv="enabled"
e08bb301 1210 ;;
f9cd86fe 1211 --disable-curl) curl="disabled"
769ce76d 1212 ;;
f9cd86fe 1213 --enable-curl) curl="enabled"
788c8196 1214 ;;
fbb4121d 1215 --disable-fdt) fdt="disabled"
2df87df7 1216 ;;
fbb4121d
PB
1217 --enable-fdt) fdt="enabled"
1218 ;;
1219 --enable-fdt=git) fdt="internal"
1220 ;;
1221 --enable-fdt=system) fdt="system"
2df87df7 1222 ;;
5c6c3a6c
CH
1223 --disable-linux-aio) linux_aio="no"
1224 ;;
1225 --enable-linux-aio) linux_aio="yes"
1226 ;;
53c22b68 1227 --disable-linux-io-uring) linux_io_uring="disabled"
c10dd856 1228 ;;
53c22b68 1229 --enable-linux-io-uring) linux_io_uring="enabled"
c10dd856 1230 ;;
f7f2d651 1231 --disable-attr) attr="disabled"
758e8e38 1232 ;;
f7f2d651 1233 --enable-attr) attr="enabled"
758e8e38 1234 ;;
a40161cb
PB
1235 --disable-membarrier) membarrier="no"
1236 ;;
1237 --enable-membarrier) membarrier="yes"
1238 ;;
46627f41
AM
1239 --disable-bpf) bpf="disabled"
1240 ;;
1241 --enable-bpf) bpf="enabled"
1242 ;;
c8d5450b 1243 --disable-blobs) blobs="false"
77755340 1244 ;;
7e563bfb 1245 --with-pkgversion=*) pkgversion="$optarg"
4a19f1ec 1246 ;;
519175a2
AB
1247 --with-coroutine=*) coroutine="$optarg"
1248 ;;
70c60c08
SH
1249 --disable-coroutine-pool) coroutine_pool="no"
1250 ;;
1251 --enable-coroutine-pool) coroutine_pool="yes"
1252 ;;
7d992e4d
PL
1253 --enable-debug-stack-usage) debug_stack_usage="yes"
1254 ;;
f0d92b56
LM
1255 --enable-crypto-afalg) crypto_afalg="yes"
1256 ;;
1257 --disable-crypto-afalg) crypto_afalg="no"
1258 ;;
e3667660 1259 --disable-docs) docs="disabled"
70ec5dc0 1260 ;;
e3667660 1261 --enable-docs) docs="enabled"
83a3ab8b 1262 ;;
d5970055
MT
1263 --disable-vhost-net) vhost_net="no"
1264 ;;
1265 --enable-vhost-net) vhost_net="yes"
1266 ;;
042cea27
GA
1267 --disable-vhost-crypto) vhost_crypto="no"
1268 ;;
299e6f19 1269 --enable-vhost-crypto) vhost_crypto="yes"
042cea27 1270 ;;
5e9be92d
NB
1271 --disable-vhost-scsi) vhost_scsi="no"
1272 ;;
1273 --enable-vhost-scsi) vhost_scsi="yes"
1274 ;;
fc0b9b0e
SH
1275 --disable-vhost-vsock) vhost_vsock="no"
1276 ;;
1277 --enable-vhost-vsock) vhost_vsock="yes"
1278 ;;
e5e856c1 1279 --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
bc15e44c 1280 ;;
e5e856c1 1281 --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
bc15e44c 1282 ;;
98fc1ada
DDAG
1283 --disable-vhost-user-fs) vhost_user_fs="no"
1284 ;;
1285 --enable-vhost-user-fs) vhost_user_fs="yes"
1286 ;;
da076ffe 1287 --disable-opengl) opengl="no"
20ff075b 1288 ;;
da076ffe 1289 --enable-opengl) opengl="yes"
20ff075b 1290 ;;
fabd1e93 1291 --disable-rbd) rbd="disabled"
f27aaf4b 1292 ;;
fabd1e93 1293 --enable-rbd) rbd="enabled"
f27aaf4b 1294 ;;
8c84cf11
ST
1295 --disable-xfsctl) xfs="no"
1296 ;;
1297 --enable-xfsctl) xfs="yes"
1298 ;;
5f364c57 1299 --disable-smartcard) smartcard="disabled"
111a38b0 1300 ;;
5f364c57 1301 --enable-smartcard) smartcard="enabled"
111a38b0 1302 ;;
0a40bcb7
CB
1303 --disable-u2f) u2f="disabled"
1304 ;;
1305 --enable-u2f) u2f="enabled"
1306 ;;
90540f32 1307 --disable-libusb) libusb="disabled"
2b2325ff 1308 ;;
90540f32 1309 --enable-libusb) libusb="enabled"
2b2325ff 1310 ;;
18f31e60 1311 --disable-usb-redir) usb_redir="disabled"
69354a83 1312 ;;
18f31e60 1313 --enable-usb-redir) usb_redir="enabled"
69354a83 1314 ;;
1ffb3bbb 1315 --disable-zlib-test)
1ece9905 1316 ;;
0c32a0ae 1317 --disable-lzo) lzo="disabled"
b25c9dff 1318 ;;
0c32a0ae 1319 --enable-lzo) lzo="enabled"
607dacd0 1320 ;;
241611ea 1321 --disable-snappy) snappy="disabled"
b25c9dff 1322 ;;
241611ea 1323 --enable-snappy) snappy="enabled"
607dacd0 1324 ;;
29ba6116 1325 --disable-bzip2) bzip2="disabled"
6b383c08 1326 ;;
29ba6116 1327 --enable-bzip2) bzip2="enabled"
6b383c08 1328 ;;
ecea3696 1329 --enable-lzfse) lzfse="enabled"
83bc1f97 1330 ;;
ecea3696 1331 --disable-lzfse) lzfse="disabled"
83bc1f97 1332 ;;
b1def33d 1333 --disable-zstd) zstd="disabled"
3a678481 1334 ;;
b1def33d 1335 --enable-zstd) zstd="enabled"
3a678481 1336 ;;
d138cee9
MR
1337 --enable-guest-agent) guest_agent="yes"
1338 ;;
1339 --disable-guest-agent) guest_agent="no"
1340 ;;
b846ab7c 1341 --enable-guest-agent-msi) guest_agent_msi="enabled"
9dacf32d 1342 ;;
b846ab7c 1343 --disable-guest-agent-msi) guest_agent_msi="disabled"
9dacf32d 1344 ;;
d9840e25
TS
1345 --with-vss-sdk) vss_win32_sdk=""
1346 ;;
1347 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1348 ;;
1349 --without-vss-sdk) vss_win32_sdk="no"
1350 ;;
1351 --with-win-sdk) win_sdk=""
1352 ;;
1353 --with-win-sdk=*) win_sdk="$optarg"
1354 ;;
1355 --without-win-sdk) win_sdk="no"
1356 ;;
4b1c11fd
DB
1357 --enable-tools) want_tools="yes"
1358 ;;
1359 --disable-tools) want_tools="no"
1360 ;;
90835c2b 1361 --enable-seccomp) seccomp="enabled"
f794573e 1362 ;;
90835c2b 1363 --disable-seccomp) seccomp="disabled"
f794573e 1364 ;;
08821ca2 1365 --disable-glusterfs) glusterfs="disabled"
eb100396 1366 ;;
86583a07
LM
1367 --disable-avx2) avx2_opt="no"
1368 ;;
1369 --enable-avx2) avx2_opt="yes"
1370 ;;
6b8cd447
RH
1371 --disable-avx512f) avx512f_opt="no"
1372 ;;
1373 --enable-avx512f) avx512f_opt="yes"
1374 ;;
1375
08821ca2 1376 --enable-glusterfs) glusterfs="enabled"
eb100396 1377 ;;
52b53c04
FZ
1378 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1379 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
583f6e7b 1380 ;;
cb6414df
FZ
1381 --enable-vhdx|--disable-vhdx)
1382 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1383 ;;
315d3184
FZ
1384 --enable-uuid|--disable-uuid)
1385 echo "$0: $opt is obsolete, UUID support is always built" >&2
1386 ;;
1b695471 1387 --disable-gtk) gtk="disabled"
a4ccabcf 1388 ;;
1b695471 1389 --enable-gtk) gtk="enabled"
a4ccabcf 1390 ;;
a1c5e949
DB
1391 --tls-priority=*) tls_priority="$optarg"
1392 ;;
57612511 1393 --disable-gnutls) gnutls="disabled"
ddbb0d09 1394 ;;
57612511 1395 --enable-gnutls) gnutls="enabled"
ddbb0d09 1396 ;;
57612511 1397 --disable-nettle) nettle="disabled"
91bfcdb0 1398 ;;
57612511 1399 --enable-nettle) nettle="enabled"
91bfcdb0 1400 ;;
57612511 1401 --disable-gcrypt) gcrypt="disabled"
91bfcdb0 1402 ;;
57612511 1403 --enable-gcrypt) gcrypt="enabled"
91bfcdb0 1404 ;;
05e391ae 1405 --disable-auth-pam) auth_pam="disabled"
8953caf3 1406 ;;
05e391ae 1407 --enable-auth-pam) auth_pam="enabled"
8953caf3 1408 ;;
2da776db
MH
1409 --enable-rdma) rdma="yes"
1410 ;;
1411 --disable-rdma) rdma="no"
1412 ;;
21ab34c9
MA
1413 --enable-pvrdma) pvrdma="yes"
1414 ;;
1415 --disable-pvrdma) pvrdma="no"
1416 ;;
c23d7b4e 1417 --disable-vte) vte="disabled"
bbbf9bfb 1418 ;;
c23d7b4e 1419 --enable-vte) vte="enabled"
bbbf9bfb 1420 ;;
587d59d6 1421 --disable-virglrenderer) virglrenderer="disabled"
9d9e1521 1422 ;;
587d59d6 1423 --enable-virglrenderer) virglrenderer="enabled"
9d9e1521 1424 ;;
e91c793c
CR
1425 --disable-tpm) tpm="no"
1426 ;;
ab214c29
SB
1427 --enable-tpm) tpm="yes"
1428 ;;
b10d49d7 1429 --disable-libssh) libssh="no"
0a12ec87 1430 ;;
b10d49d7 1431 --enable-libssh) libssh="yes"
0a12ec87 1432 ;;
ed1701c6
DDAG
1433 --disable-live-block-migration) live_block_migration="no"
1434 ;;
1435 --enable-live-block-migration) live_block_migration="yes"
1436 ;;
a99d57bb
WG
1437 --disable-numa) numa="no"
1438 ;;
1439 --enable-numa) numa="yes"
1440 ;;
c5b36c25 1441 --disable-libxml2) libxml2="disabled"
ed279a06 1442 ;;
c5b36c25 1443 --enable-libxml2) libxml2="enabled"
ed279a06 1444 ;;
2847b469
FZ
1445 --disable-tcmalloc) tcmalloc="no"
1446 ;;
1447 --enable-tcmalloc) tcmalloc="yes"
1448 ;;
7b01cb97
AD
1449 --disable-jemalloc) jemalloc="no"
1450 ;;
1451 --enable-jemalloc) jemalloc="yes"
1452 ;;
a6b1d4c0
CX
1453 --disable-replication) replication="no"
1454 ;;
1455 --enable-replication) replication="yes"
1456 ;;
2f740136
JC
1457 --disable-bochs) bochs="no"
1458 ;;
1459 --enable-bochs) bochs="yes"
1460 ;;
1461 --disable-cloop) cloop="no"
1462 ;;
1463 --enable-cloop) cloop="yes"
1464 ;;
1465 --disable-dmg) dmg="no"
1466 ;;
1467 --enable-dmg) dmg="yes"
1468 ;;
1469 --disable-qcow1) qcow1="no"
1470 ;;
1471 --enable-qcow1) qcow1="yes"
1472 ;;
1473 --disable-vdi) vdi="no"
1474 ;;
1475 --enable-vdi) vdi="yes"
1476 ;;
1477 --disable-vvfat) vvfat="no"
1478 ;;
1479 --enable-vvfat) vvfat="yes"
1480 ;;
1481 --disable-qed) qed="no"
1482 ;;
1483 --enable-qed) qed="yes"
1484 ;;
1485 --disable-parallels) parallels="no"
1486 ;;
1487 --enable-parallels) parallels="yes"
1488 ;;
e6a74868
MAL
1489 --disable-vhost-user) vhost_user="no"
1490 ;;
299e6f19
PB
1491 --enable-vhost-user) vhost_user="yes"
1492 ;;
108a6481
CL
1493 --disable-vhost-vdpa) vhost_vdpa="no"
1494 ;;
1495 --enable-vhost-vdpa) vhost_vdpa="yes"
1496 ;;
299e6f19
PB
1497 --disable-vhost-kernel) vhost_kernel="no"
1498 ;;
1499 --enable-vhost-kernel) vhost_kernel="yes"
e6a74868 1500 ;;
8b18cdbf 1501 --disable-capstone) capstone="disabled"
8ca80760 1502 ;;
8b18cdbf 1503 --enable-capstone) capstone="enabled"
8ca80760 1504 ;;
8b18cdbf 1505 --enable-capstone=git) capstone="internal"
e219c499
RH
1506 ;;
1507 --enable-capstone=system) capstone="system"
1508 ;;
cc84d63a
DB
1509 --with-git=*) git="$optarg"
1510 ;;
7d7dbf9d
DS
1511 --enable-git-update)
1512 git_submodules_action="update"
1513 echo "--enable-git-update deprecated, use --with-git-submodules=update"
f62bbee5 1514 ;;
7d7dbf9d
DS
1515 --disable-git-update)
1516 git_submodules_action="validate"
1517 echo "--disable-git-update deprecated, use --with-git-submodules=validate"
1518 ;;
1519 --with-git-submodules=*)
1520 git_submodules_action="$optarg"
f62bbee5 1521 ;;
ba59fb77
PB
1522 --enable-debug-mutex) debug_mutex=yes
1523 ;;
1524 --disable-debug-mutex) debug_mutex=no
1525 ;;
5cd5d8a7 1526 --enable-libpmem) libpmem="enabled"
17824406 1527 ;;
5cd5d8a7 1528 --disable-libpmem) libpmem="disabled"
17824406 1529 ;;
4113f4cf 1530 --enable-xkbcommon) xkbcommon="enabled"
75411919 1531 ;;
4113f4cf 1532 --disable-xkbcommon) xkbcommon="disabled"
75411919 1533 ;;
9b8e4298
AB
1534 --enable-plugins) if test "$mingw32" = "yes"; then
1535 error_exit "TCG plugins not currently supported on Windows platforms"
1536 else
1537 plugins="yes"
1538 fi
40e8c6f4
AB
1539 ;;
1540 --disable-plugins) plugins="no"
1541 ;;
afc3a8f9
AB
1542 --enable-containers) use_containers="yes"
1543 ;;
1544 --disable-containers) use_containers="no"
1545 ;;
adc28027
AB
1546 --enable-fuzzing) fuzzing=yes
1547 ;;
1548 --disable-fuzzing) fuzzing=no
1549 ;;
f48e590a
AB
1550 --gdb=*) gdb_bin="$optarg"
1551 ;;
b767d257
MMG
1552 --enable-rng-none) rng_none=yes
1553 ;;
1554 --disable-rng-none) rng_none=no
1555 ;;
54e7aac0
AK
1556 --enable-keyring) secret_keyring="yes"
1557 ;;
1558 --disable-keyring) secret_keyring="no"
1559 ;;
12033e16 1560 --enable-libdaxctl) libdaxctl="enabled"
21b2eca6 1561 ;;
12033e16 1562 --disable-libdaxctl) libdaxctl="disabled"
21b2eca6 1563 ;;
a484a719
HR
1564 --enable-fuse) fuse="enabled"
1565 ;;
1566 --disable-fuse) fuse="disabled"
1567 ;;
df4ea709
HR
1568 --enable-fuse-lseek) fuse_lseek="enabled"
1569 ;;
1570 --disable-fuse-lseek) fuse_lseek="disabled"
1571 ;;
106ad1f9 1572 --enable-multiprocess) multiprocess="enabled"
3090de69 1573 ;;
106ad1f9 1574 --disable-multiprocess) multiprocess="disabled"
3090de69 1575 ;;
20cf7b8e
DP
1576 --enable-gio) gio=yes
1577 ;;
1578 --disable-gio) gio=no
1579 ;;
b8e0c493
JD
1580 --enable-slirp-smbd) slirp_smbd=yes
1581 ;;
1582 --disable-slirp-smbd) slirp_smbd=no
1583 ;;
2d2ad6d0
FZ
1584 *)
1585 echo "ERROR: unknown option $opt"
1586 echo "Try '$0 --help' for more information"
1587 exit 1
7f1559c6 1588 ;;
7d13299d
FB
1589 esac
1590done
1591
d1a14257
AB
1592# test for any invalid configuration combinations
1593if test "$plugins" = "yes" -a "$tcg" = "disabled"; then
1594 error_exit "Can't enable plugins on non-TCG builds"
1595fi
1596
7d7dbf9d
DS
1597case $git_submodules_action in
1598 update|validate)
1599 if test ! -e "$source_path/.git"; then
1600 echo "ERROR: cannot $git_submodules_action git submodules without .git"
1601 exit 1
1602 fi
1603 ;;
1604 ignore)
b80fd281
PB
1605 if ! test -f "$source_path/ui/keycodemapdb/README"
1606 then
1607 echo
1608 echo "ERROR: missing GIT submodules"
1609 echo
1610 if test -e "$source_path/.git"; then
1611 echo "--with-git-submodules=ignore specified but submodules were not"
1612 echo "checked out. Please initialize and update submodules."
1613 else
1614 echo "This is not a GIT checkout but module content appears to"
1615 echo "be missing. Do not use 'git archive' or GitHub download links"
1616 echo "to acquire QEMU source archives. Non-GIT builds are only"
1617 echo "supported with source archives linked from:"
1618 echo
1619 echo " https://www.qemu.org/download/#source"
1620 echo
1621 echo "Developers working with GIT can use scripts/archive-source.sh"
1622 echo "if they need to create valid source archives."
1623 fi
1624 echo
1625 exit 1
1626 fi
7d7dbf9d
DS
1627 ;;
1628 *)
1629 echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
1630 exit 1
1631 ;;
1632esac
1633
22a87800
MAL
1634libdir="${libdir:-$prefix/lib}"
1635libexecdir="${libexecdir:-$prefix/libexec}"
1636includedir="${includedir:-$prefix/include}"
1637
1638if test "$mingw32" = "yes" ; then
15588a62 1639 bindir="${bindir:-$prefix}"
22a87800 1640else
22a87800 1641 bindir="${bindir:-$prefix/bin}"
22a87800 1642fi
15588a62
JW
1643mandir="${mandir:-$prefix/share/man}"
1644datadir="${datadir:-$prefix/share}"
1645docdir="${docdir:-$prefix/share/doc}"
1646sysconfdir="${sysconfdir:-$prefix/etc}"
1647local_statedir="${local_statedir:-$prefix/var}"
16bf7a33
PB
1648firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1649localedir="${localedir:-$datadir/locale}"
22a87800 1650
40293e58 1651case "$cpu" in
e3608d66
RH
1652 ppc)
1653 CPU_CFLAGS="-m32"
db5adeaa 1654 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
e3608d66
RH
1655 ;;
1656 ppc64)
1657 CPU_CFLAGS="-m64"
db5adeaa 1658 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
e3608d66 1659 ;;
9b9c37c3 1660 sparc)
f1079bb8 1661 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
db5adeaa 1662 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
3142255c 1663 ;;
ed968ff1 1664 sparc64)
79f3b12f 1665 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
db5adeaa 1666 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
3142255c 1667 ;;
76d83bde 1668 s390)
061cdd81 1669 CPU_CFLAGS="-m31"
db5adeaa 1670 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
28d7cc49
RH
1671 ;;
1672 s390x)
061cdd81 1673 CPU_CFLAGS="-m64"
db5adeaa 1674 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
76d83bde 1675 ;;
40293e58 1676 i386)
79f3b12f 1677 CPU_CFLAGS="-m32"
db5adeaa 1678 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
40293e58
FB
1679 ;;
1680 x86_64)
7ebee43e
RH
1681 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1682 # If we truly care, we should simply detect this case at
1683 # runtime and generate the fallback to serial emulation.
1684 CPU_CFLAGS="-m64 -mcx16"
db5adeaa 1685 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
d2fbca94 1686 ;;
c72b26ec
RH
1687 x32)
1688 CPU_CFLAGS="-mx32"
db5adeaa 1689 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
c72b26ec 1690 ;;
30163d89 1691 # No special flags required for other host CPUs
3142255c
BS
1692esac
1693
b1aa4de1 1694eval "cross_cc_${cpu}=\$cc"
2038f8c8 1695cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
79f3b12f 1696QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
79f3b12f 1697
affc88cc
PM
1698# For user-mode emulation the host arch has to be one we explicitly
1699# support, even if we're using TCI.
1700if [ "$ARCH" = "unknown" ]; then
1701 bsd_user="no"
1702 linux_user="no"
1703fi
1704
60e0df25 1705default_target_list=""
43692239 1706deprecated_targets_list=ppc64abi32-linux-user
fdb75aef 1707deprecated_features=""
6e92f823
PM
1708mak_wilds=""
1709
1710if [ "$softmmu" = "yes" ]; then
812b31d3 1711 mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
60e0df25 1712fi
6e92f823 1713if [ "$linux_user" = "yes" ]; then
812b31d3 1714 mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
60e0df25 1715fi
6e92f823 1716if [ "$bsd_user" = "yes" ]; then
812b31d3 1717 mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
60e0df25
PM
1718fi
1719
3a5ae4a9
AB
1720# If the user doesn't explicitly specify a deprecated target we will
1721# skip it.
1722if test -z "$target_list"; then
1723 if test -z "$target_list_exclude"; then
1724 target_list_exclude="$deprecated_targets_list"
1725 else
1726 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1727 fi
2d838d9b
AB
1728fi
1729
2d838d9b
AB
1730for config in $mak_wilds; do
1731 target="$(basename "$config" .mak)"
98db9a06 1732 if echo "$target_list_exclude" | grep -vq "$target"; then
2d838d9b
AB
1733 default_target_list="${default_target_list} $target"
1734 fi
1735done
6e92f823 1736
c53eeaf7 1737# Enumerate public trace backends for --help output
64a6047d 1738trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
c53eeaf7 1739
af5db58e
PB
1740if test x"$show_help" = x"yes" ; then
1741cat << EOF
1742
1743Usage: configure [options]
1744Options: [defaults in brackets after descriptions]
1745
08fb77ed
SW
1746Standard options:
1747 --help print this message
1748 --prefix=PREFIX install in PREFIX [$prefix]
1749 --interp-prefix=PREFIX where to find shared libraries, etc.
1750 use %M for cpu name [$interp_prefix]
2deca810 1751 --target-list=LIST set target list (default: build all non-deprecated)
08fb77ed
SW
1752$(echo Available targets: $default_target_list | \
1753 fold -s -w 53 | sed -e 's/^/ /')
2deca810
AB
1754$(echo Deprecated targets: $deprecated_targets_list | \
1755 fold -s -w 53 | sed -e 's/^/ /')
447e133f 1756 --target-list-exclude=LIST exclude a set of targets from the default target-list
08fb77ed
SW
1757
1758Advanced options (experts only):
3812c0c4 1759 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
08fb77ed
SW
1760 --cc=CC use C compiler CC [$cc]
1761 --iasl=IASL use ACPI compiler IASL [$iasl]
1762 --host-cc=CC use C compiler CC [$host_cc] for code run at
1763 build time
1764 --cxx=CXX use C++ compiler CXX [$cxx]
1765 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1766 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
11cde1c8 1767 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
08fb77ed 1768 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
d75402b5 1769 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
d422b2bc 1770 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
08fb77ed 1771 --make=MAKE use specified make [$make]
08fb77ed 1772 --python=PYTHON use specified python [$python]
2eb054c2 1773 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
a5665051 1774 --meson=MESON use specified meson [$meson]
48328880 1775 --ninja=NINJA use specified ninja [$ninja]
08fb77ed 1776 --smbd=SMBD use specified smbd [$smbd]
db1b5f13 1777 --with-git=GIT use specified git [$git]
7d7dbf9d
DS
1778 --with-git-submodules=update update git submodules (default if .git dir exists)
1779 --with-git-submodules=validate fail if git submodules are not up to date
1780 --with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
08fb77ed
SW
1781 --static enable static build [$static]
1782 --mandir=PATH install man pages in PATH
10ff82d1 1783 --datadir=PATH install firmware in PATH/$qemu_suffix
fe0038be 1784 --localedir=PATH install translation in PATH/$qemu_suffix
10ff82d1 1785 --docdir=PATH install documentation in PATH/$qemu_suffix
08fb77ed
SW
1786 --bindir=PATH install binaries in PATH
1787 --libdir=PATH install libraries in PATH
db1b5f13 1788 --libexecdir=PATH install helper binaries in PATH
10ff82d1 1789 --sysconfdir=PATH install config in PATH/$qemu_suffix
08fb77ed 1790 --localstatedir=PATH install local state in PATH (set at runtime on win32)
3d5eecab 1791 --firmwarepath=PATH search PATH for firmware files
13336606 1792 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
ca8c0909 1793 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
db1b5f13 1794 --with-pkgversion=VERS use specified string as sub-version of the package
c035c8d6
PB
1795 --without-default-features default all --enable-* options to "disabled"
1796 --without-default-devices do not include any device that is not needed to
1797 start the emulator (only use if you are including
d1d5e9ee
AB
1798 desired devices in configs/devices/)
1799 --with-devices-ARCH=NAME override default configs/devices
08fb77ed 1800 --enable-debug enable common debug build options
247724cb 1801 --enable-sanitizers enable default sanitizers
0aebab04 1802 --enable-tsan enable thread sanitizer
08fb77ed
SW
1803 --disable-strip disable stripping binaries
1804 --disable-werror disable compilation abort on warning
63678e17 1805 --disable-stack-protector disable compiler-provided stack protection
08fb77ed
SW
1806 --audio-drv-list=LIST set audio drivers list:
1807 Available drivers: $audio_possible_drivers
1808 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1809 --block-drv-rw-whitelist=L
1810 set block driver read-write whitelist
e5f05f8c 1811 (by default affects only QEMU, not tools like qemu-img)
08fb77ed
SW
1812 --block-drv-ro-whitelist=L
1813 set block driver read-only whitelist
e5f05f8c
KW
1814 (by default affects only QEMU, not tools like qemu-img)
1815 --enable-block-drv-whitelist-in-tools
1816 use block whitelist also in tools instead of only QEMU
5b808275 1817 --enable-trace-backends=B Set trace backend
c53eeaf7 1818 Available backends: $trace_backend_list
08fb77ed
SW
1819 --with-trace-file=NAME Full PATH,NAME of file to store traces
1820 Default:trace-<pid>
c23f23b9 1821 --disable-slirp disable SLIRP userspace network connectivity
e9a16e38 1822 --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
5a22ab71 1823 --enable-malloc-trim enable libc malloc_trim() for memory optimization
c23f23b9
MT
1824 --oss-lib path to OSS library
1825 --cpu=CPU Build for host CPU [$cpu]
08fb77ed 1826 --with-coroutine=BACKEND coroutine backend. Supported options:
33c53c54 1827 ucontext, sigaltstack, windows
08fb77ed 1828 --enable-gcov enable test coverage analysis with gcov
c23f23b9
MT
1829 --disable-blobs disable installing provided firmware blobs
1830 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1831 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
a1c5e949 1832 --tls-priority default TLS protocol/cipher priority string
c12d66aa
LM
1833 --enable-gprof QEMU profiling with gprof
1834 --enable-profiler profiler support
c12d66aa
LM
1835 --enable-debug-stack-usage
1836 track the maximum stack usage of stacks created by qemu_alloc_stack
40e8c6f4
AB
1837 --enable-plugins
1838 enable plugins via shared library loading
afc3a8f9 1839 --disable-containers don't use containers for cross-building
f48e590a 1840 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
c23f23b9
MT
1841
1842Optional features, enabled with --enable-FEATURE and
c87ea116
AB
1843disabled with --disable-FEATURE, default is enabled if available
1844(unless built with --without-default-features):
c23f23b9
MT
1845
1846 system all system emulation targets
1847 user supported user emulation targets
1848 linux-user all linux usermode emulation targets
1849 bsd-user all BSD usermode emulation targets
c23f23b9
MT
1850 docs build documentation
1851 guest-agent build the QEMU Guest Agent
1852 guest-agent-msi build guest agent Windows MSI installation package
1853 pie Position Independent Executables
21e709aa 1854 modules modules support (non-Windows)
bd83c861 1855 module-upgrades try to load modules from alternate paths for upgrades
c23f23b9
MT
1856 debug-tcg TCG debugging (default is disabled)
1857 debug-info debugging information
cdad781d 1858 lto Enable Link-Time Optimization.
c23f23b9 1859 sparse sparse checker
1e4f6065
DB
1860 safe-stack SafeStack Stack Smash Protection. Depends on
1861 clang/llvm >= 3.7 and requires coroutine backend ucontext.
9e62ba48
DB
1862 cfi Enable Control-Flow Integrity for indirect function calls.
1863 In case of a cfi violation, QEMU is terminated with SIGILL
1864 Depends on lto and is incompatible with modules
1865 Automatically enables Link-Time Optimization (lto)
1866 cfi-debug In case of a cfi violation, a message containing the line that
1867 triggered the error is written to stderr. After the error,
1868 QEMU is still terminated with SIGILL
ddbb0d09 1869 gnutls GNUTLS cryptography support
91bfcdb0
DB
1870 nettle nettle cryptography support
1871 gcrypt libgcrypt cryptography support
8953caf3 1872 auth-pam PAM access control
c23f23b9 1873 sdl SDL UI
04c6e16f 1874 sdl-image SDL Image support for icons
c23f23b9 1875 gtk gtk UI
c23f23b9
MT
1876 vte vte support for the gtk UI
1877 curses curses UI
e08bb301 1878 iconv font glyph conversion support
c23f23b9 1879 vnc VNC UI support
c23f23b9
MT
1880 vnc-sasl SASL encryption for VNC server
1881 vnc-jpeg JPEG lossy compression for VNC server
1882 vnc-png PNG compression for VNC server
c23f23b9
MT
1883 cocoa Cocoa UI (Mac OS X only)
1884 virtfs VirtFS
cece116c 1885 virtiofsd build virtiofs daemon (virtiofsd)
5c53015a 1886 libudev Use libudev to enumerate host devices
fe8fc5ae 1887 mpath Multipath persistent reservation passthrough
c23f23b9 1888 xen xen backend driver support
70c292af 1889 xen-pci-passthrough PCI passthrough support for Xen
c23f23b9
MT
1890 brlapi BrlAPI (Braile)
1891 curl curl connectivity
a40161cb 1892 membarrier membarrier system call (for Linux 4.14+ or Windows)
c23f23b9 1893 fdt fdt device tree
c23f23b9 1894 kvm KVM acceleration support
b0cb0a66 1895 hax HAX acceleration support
c97d6d2c 1896 hvf Hypervisor.framework acceleration support
74a414a1 1897 nvmm NVMM acceleration support
d661d9a4 1898 whpx Windows Hypervisor Platform acceleration support
21ab34c9
MA
1899 rdma Enable RDMA-based migration
1900 pvrdma Enable PVRDMA support
c23f23b9
MT
1901 vde support for vde network
1902 netmap support for netmap network
1903 linux-aio Linux AIO support
c10dd856 1904 linux-io-uring Linux io_uring support
c23f23b9
MT
1905 cap-ng libcap-ng support
1906 attr attr and xattr support
299e6f19
PB
1907 vhost-net vhost-net kernel acceleration support
1908 vhost-vsock virtio sockets device support
1909 vhost-scsi vhost-scsi kernel target support
1910 vhost-crypto vhost-user-crypto backend support
1911 vhost-kernel vhost kernel backend support
1912 vhost-user vhost-user backend support
bc15e44c 1913 vhost-user-blk-server vhost-user-blk server support
108a6481 1914 vhost-vdpa vhost-vdpa kernel backend support
46627f41 1915 bpf BPF kernel support
c23f23b9 1916 spice spice
58d3f3ff 1917 spice-protocol spice-protocol
c23f23b9
MT
1918 rbd rados block device (rbd)
1919 libiscsi iscsi support
1920 libnfs nfs support
7b02f544 1921 smartcard smartcard support (libcacard)
0a40bcb7 1922 u2f U2F support (u2f-emu)
c23f23b9 1923 libusb libusb (for usb passthrough)
ed1701c6 1924 live-block-migration Block migration in the main migration stream
c23f23b9
MT
1925 usb-redir usb network redirection support
1926 lzo support of lzo compression library
1927 snappy support of snappy compression library
1928 bzip2 support of bzip2 compression library
1929 (for reading bzip2-compressed dmg images)
83bc1f97
JF
1930 lzfse support of lzfse compression library
1931 (for reading lzfse-compressed dmg images)
3a678481 1932 zstd support for zstd compression library
d298ac10 1933 (for migration compression and qcow2 cluster compression)
c23f23b9
MT
1934 seccomp seccomp support
1935 coroutine-pool coroutine freelist (better performance)
1936 glusterfs GlusterFS backend
c23f23b9 1937 tpm TPM support
b10d49d7 1938 libssh ssh block device support
c23f23b9 1939 numa libnuma support
ed279a06 1940 libxml2 for Parallels image format
c23f23b9 1941 tcmalloc tcmalloc support
7b01cb97 1942 jemalloc jemalloc support
86583a07 1943 avx2 AVX2 optimization support
6b8cd447 1944 avx512f AVX512F optimization support
a6b1d4c0 1945 replication replication support
c12d66aa
LM
1946 opengl opengl support
1947 virglrenderer virgl rendering support
1948 xfsctl xfsctl support
1949 qom-cast-debug cast debugging support
8de73fa8 1950 tools build qemu-io, qemu-nbd and qemu-img tools
2f740136
JC
1951 bochs bochs image format support
1952 cloop cloop image format support
1953 dmg dmg image format support
1954 qcow1 qcow v1 image format support
1955 vdi vdi image format support
1956 vvfat vvfat image format support
1957 qed qed image format support
1958 parallels parallels image format support
f0d92b56 1959 crypto-afalg Linux AF_ALG crypto backend driver
8ca80760 1960 capstone capstone disassembler support
ba59fb77 1961 debug-mutex mutex debugging support
17824406 1962 libpmem libpmem support
75411919 1963 xkbcommon xkbcommon support
b767d257 1964 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
21b2eca6 1965 libdaxctl libdaxctl support
a484a719 1966 fuse FUSE block device export
df4ea709 1967 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
106ad1f9 1968 multiprocess Out of process device emulation support
20cf7b8e 1969 gio libgio support
b8e0c493 1970 slirp-smbd use smbd (at path --smbd=*) in slirp networking
08fb77ed
SW
1971
1972NOTE: The object files are built at the place where configure is launched
af5db58e 1973EOF
2d2ad6d0 1974exit 0
af5db58e
PB
1975fi
1976
9c790242 1977# Remove old dependency files to make sure that they get properly regenerated
bb768f71 1978rm -f */config-devices.mak.d
9c790242 1979
faf44142
DB
1980if test -z "$python"
1981then
1982 error_exit "Python not found. Use --python=/path/to/python"
c53eeaf7 1983fi
8e2c76bd
RB
1984if ! has "$make"
1985then
1986 error_exit "GNU make ($make) not found"
1987fi
c53eeaf7
SH
1988
1989# Note that if the Python conditional here evaluates True we will exit
1990# with status 1 which is a shell 'false' value.
1b11f28d
TH
1991if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1992 error_exit "Cannot use '$python', Python >= 3.6 is required." \
c53eeaf7
SH
1993 "Use --python=/path/to/python to specify a supported Python."
1994fi
1995
755ee70f 1996# Preserve python version since some functionality is dependent on it
406ab2f3 1997python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
755ee70f 1998
c53eeaf7
SH
1999# Suppress writing compiled files
2000python="$python -B"
2001
0a01d76f 2002if test -z "$meson"; then
6ebd89cf 2003 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
0a01d76f 2004 meson=meson
7d7dbf9d 2005 elif test $git_submodules_action != 'ignore' ; then
0a01d76f
MAL
2006 meson=git
2007 elif test -e "${source_path}/meson/meson.py" ; then
2008 meson=internal
2009 else
2010 if test "$explicit_python" = yes; then
2011 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
2012 else
2013 error_exit "Meson not found. Use --meson=/path/to/meson"
2014 fi
2015 fi
2016else
2017 # Meson uses its own Python interpreter to invoke other Python scripts,
2018 # but the user wants to use the one they specified with --python.
2019 #
2020 # We do not want to override the distro Python interpreter (and sometimes
2021 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2022 # just require --meson=git|internal together with --python.
2023 if test "$explicit_python" = yes; then
2024 case "$meson" in
2025 git | internal) ;;
2026 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2027 esac
2028 fi
a5665051 2029fi
a5665051 2030
0a01d76f
MAL
2031if test "$meson" = git; then
2032 git_submodules="${git_submodules} meson"
a5665051 2033fi
0a01d76f
MAL
2034
2035case "$meson" in
2036 git | internal)
0a01d76f
MAL
2037 meson="$python ${source_path}/meson/meson.py"
2038 ;;
84ec0c24 2039 *) meson=$(command -v "$meson") ;;
0a01d76f
MAL
2040esac
2041
09e93326 2042# Probe for ninja
48328880
PB
2043
2044if test -z "$ninja"; then
2045 for c in ninja ninja-build samu; do
2046 if has $c; then
2047 ninja=$(command -v "$c")
2048 break
2049 fi
2050 done
09e93326
PB
2051 if test -z "$ninja"; then
2052 error_exit "Cannot find Ninja"
2053 fi
48328880 2054fi
a5665051 2055
9aae6e54
DHB
2056# Check that the C compiler works. Doing this here before testing
2057# the host CPU ensures that we had a valid CC to autodetect the
2058# $cpu var (and we should bail right here if that's not the case).
2059# It also allows the help message to be printed without a CC.
2060write_c_skeleton;
2061if compile_object ; then
2062 : C compiler works ok
2063else
2064 error_exit "\"$cc\" either does not exist or does not work"
2065fi
2066if ! compile_prog ; then
2067 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2068fi
2069
9c83ffd8
PM
2070# Consult white-list to determine whether to enable werror
2071# by default. Only enable by default for git builds
9c83ffd8 2072if test -z "$werror" ; then
7d7dbf9d 2073 if test "$git_submodules_action" != "ignore" && \
e633a5c6 2074 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
9c83ffd8
PM
2075 werror="yes"
2076 else
2077 werror="no"
2078 fi
2079fi
2080
975ff037 2081if test "$targetos" = "bogus"; then
fb59dabd
PM
2082 # Now that we know that we're not printing the help and that
2083 # the compiler works (so the results of the check_defines we used
2084 # to identify the OS are reliable), if we didn't recognize the
2085 # host OS we should stop now.
951fedfc 2086 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
fb59dabd
PM
2087fi
2088
efc6c070
TH
2089# Check whether the compiler matches our minimum requirements:
2090cat > $TMPC << EOF
2091#if defined(__clang_major__) && defined(__clang_minor__)
2092# ifdef __apple_build_version__
2a85a08c
DB
2093# if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
2094# error You need at least XCode Clang v10.0 to compile QEMU
efc6c070
TH
2095# endif
2096# else
2a85a08c
DB
2097# if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
2098# error You need at least Clang v6.0 to compile QEMU
efc6c070
TH
2099# endif
2100# endif
2101#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
56208a0d
DB
2102# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 5)
2103# error You need at least GCC v7.5.0 to compile QEMU
efc6c070
TH
2104# endif
2105#else
2106# error You either need GCC or Clang to compiler QEMU
2107#endif
2108int main (void) { return 0; }
2109EOF
2110if ! compile_prog "" "" ; then
2a85a08c 2111 error_exit "You need at least GCC v7.5 or Clang v6.0 (or XCode Clang v10.0)"
efc6c070
TH
2112fi
2113
00849b92
RH
2114# Accumulate -Wfoo and -Wno-bar separately.
2115# We will list all of the enable flags first, and the disable flags second.
2116# Note that we do not add -Werror, because that would enable it for all
2117# configure tests. If a configure test failed due to -Werror this would
2118# just silently disable some features, so it's too error prone.
2119
2120warn_flags=
2121add_to warn_flags -Wold-style-declaration
2122add_to warn_flags -Wold-style-definition
2123add_to warn_flags -Wtype-limits
2124add_to warn_flags -Wformat-security
2125add_to warn_flags -Wformat-y2k
2126add_to warn_flags -Winit-self
2127add_to warn_flags -Wignored-qualifiers
2128add_to warn_flags -Wempty-body
2129add_to warn_flags -Wnested-externs
2130add_to warn_flags -Wendif-labels
2131add_to warn_flags -Wexpansion-to-defined
0a2ebce9 2132add_to warn_flags -Wimplicit-fallthrough=2
00849b92
RH
2133
2134nowarn_flags=
2135add_to nowarn_flags -Wno-initializer-overrides
2136add_to nowarn_flags -Wno-missing-include-dirs
2137add_to nowarn_flags -Wno-shift-negative-value
2138add_to nowarn_flags -Wno-string-plus-int
2139add_to nowarn_flags -Wno-typedef-redefinition
aabab967 2140add_to nowarn_flags -Wno-tautological-type-limit-compare
bac8d222 2141add_to nowarn_flags -Wno-psabi
00849b92
RH
2142
2143gcc_flags="$warn_flags $nowarn_flags"
93b25869
JS
2144
2145cc_has_warning_flag() {
2146 write_c_skeleton;
2147
a1d29d6c
PM
2148 # Use the positive sense of the flag when testing for -Wno-wombat
2149 # support (gcc will happily accept the -Wno- form of unknown
2150 # warning options).
93b25869
JS
2151 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2152 compile_prog "-Werror $optflag" ""
2153}
2154
2155for flag in $gcc_flags; do
2156 if cc_has_warning_flag $flag ; then
2157 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
8d05095c
PB
2158 fi
2159done
2160
3b463a3f 2161if test "$stack_protector" != "no"; then
fccd35a0
RR
2162 cat > $TMPC << EOF
2163int main(int argc, char *argv[])
2164{
2165 char arr[64], *p = arr, *c = argv[0];
2166 while (*c) {
2167 *p++ = *c++;
2168 }
2169 return 0;
2170}
2171EOF
63678e17 2172 gcc_flags="-fstack-protector-strong -fstack-protector-all"
3b463a3f 2173 sp_on=0
63678e17 2174 for flag in $gcc_flags; do
590e5dd9
PM
2175 # We need to check both a compile and a link, since some compiler
2176 # setups fail only on a .c->.o compile and some only at link time
086d5f75 2177 if compile_object "-Werror $flag" &&
590e5dd9 2178 compile_prog "-Werror $flag" ""; then
63678e17 2179 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
db5adeaa 2180 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3b463a3f 2181 sp_on=1
63678e17
SN
2182 break
2183 fi
2184 done
3b463a3f
MR
2185 if test "$stack_protector" = yes; then
2186 if test $sp_on = 0; then
2187 error_exit "Stack protector not supported"
2188 fi
2189 fi
37746c5e
MAL
2190fi
2191
20bc94a2
PB
2192# Disable -Wmissing-braces on older compilers that warn even for
2193# the "universal" C zero initializer {0}.
2194cat > $TMPC << EOF
2195struct {
2196 int a[2];
2197} x = {0};
2198EOF
2199if compile_object "-Werror" "" ; then
2200 :
2201else
2202 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2203fi
2204
21e709aa
MAL
2205# Our module code doesn't support Windows
2206if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2207 error_exit "Modules are not available for Windows"
2208fi
2209
bd83c861
CE
2210# module_upgrades is only reasonable if modules are enabled
2211if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2212 error_exit "Can't enable module-upgrades as Modules are not enabled"
2213fi
2214
5f2453ac 2215# Static linking is not possible with plugins, modules or PIE
40d6444e 2216if test "$static" = "yes" ; then
aa0d1f44
PB
2217 if test "$modules" = "yes" ; then
2218 error_exit "static and modules are mutually incompatible"
2219 fi
5f2453ac
AB
2220 if test "$plugins" = "yes"; then
2221 error_exit "static and plugins are mutually incompatible"
ba4dd2aa
AB
2222 else
2223 plugins="no"
5f2453ac 2224 fi
40d6444e
AK
2225fi
2226
768b7855
EC
2227# Unconditional check for compiler __thread support
2228 cat > $TMPC << EOF
2229static __thread int tls_var;
2230int main(void) { return tls_var; }
2231EOF
2232
2233if ! compile_prog "-Werror" "" ; then
2234 error_exit "Your compiler does not support the __thread specifier for " \
2235 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2236fi
2237
b2634124 2238cat > $TMPC << EOF
21d4a791
AK
2239
2240#ifdef __linux__
2241# define THREAD __thread
2242#else
2243# define THREAD
2244#endif
21d4a791 2245static THREAD int tls_var;
21d4a791 2246int main(void) { return tls_var; }
40d6444e 2247EOF
412aeacd 2248
b2634124
RH
2249# Check we support --no-pie first; we will need this for building ROMs.
2250if compile_prog "-Werror -fno-pie" "-no-pie"; then
2251 CFLAGS_NOPIE="-fno-pie"
b2634124
RH
2252fi
2253
12781462 2254if test "$static" = "yes"; then
eca7a8e6 2255 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
5770e8af 2256 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
12781462
RH
2257 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2258 pie="yes"
2259 elif test "$pie" = "yes"; then
2260 error_exit "-static-pie not available due to missing toolchain support"
2261 else
2262 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2263 pie="no"
2264 fi
2265elif test "$pie" = "no"; then
5770e8af 2266 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
eca7a8e6 2267elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
5770e8af
PB
2268 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2269 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2c674109
RH
2270 pie="yes"
2271elif test "$pie" = "yes"; then
2272 error_exit "PIE not available due to missing toolchain support"
2273else
2274 echo "Disabling PIE due to missing toolchain support"
2275 pie="no"
40d6444e
AK
2276fi
2277
e6cbd751
RH
2278# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2279# The combination is known as "full relro", because .got.plt is read-only too.
2280if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2281 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2282fi
2283
09dada40
PB
2284##########################################
2285# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2286# use i686 as default anyway, but for those that don't, an explicit
2287# specification is necessary
2288
2289if test "$cpu" = "i386"; then
2290 cat > $TMPC << EOF
2291static int sfaa(int *ptr)
2292{
2293 return __sync_fetch_and_and(ptr, 0);
2294}
2295
2296int main(void)
2297{
2298 int val = 42;
1405b629 2299 val = __sync_val_compare_and_swap(&val, 0, 1);
09dada40
PB
2300 sfaa(&val);
2301 return val;
2302}
2303EOF
2304 if ! compile_prog "" "" ; then
2305 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2306 fi
2307fi
2308
2309#########################################
ec530c81 2310# Solaris specific configure tool chain decisions
09dada40 2311
ec530c81 2312if test "$solaris" = "yes" ; then
6792aa11
LM
2313 if has ar; then
2314 :
2315 else
ec530c81 2316 if test -f /usr/ccs/bin/ar ; then
76ad07a4
PM
2317 error_exit "No path includes ar" \
2318 "Add /usr/ccs/bin to your path and rerun configure"
ec530c81 2319 fi
76ad07a4 2320 error_exit "No path includes ar"
ec530c81 2321 fi
5fafdf24 2322fi
ec530c81 2323
56267b62
PMD
2324if test "$tcg" = "enabled"; then
2325 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
2326 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
2327fi
2328
afb63ebd 2329if test -z "${target_list+xxx}" ; then
fdb75aef 2330 default_targets=yes
d880a3ba 2331 for target in $default_target_list; do
fdb75aef 2332 target_list="$target_list $target"
d880a3ba
PB
2333 done
2334 target_list="${target_list# }"
121afa9e 2335else
fdb75aef 2336 default_targets=no
89138857 2337 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
d880a3ba
PB
2338 for target in $target_list; do
2339 # Check that we recognised the target name; this allows a more
2340 # friendly error message than if we let it fall through.
2341 case " $default_target_list " in
2342 *" $target "*)
2343 ;;
2344 *)
2345 error_exit "Unknown target name '$target'"
2346 ;;
2347 esac
d880a3ba 2348 done
121afa9e 2349fi
25b48338 2350
fdb75aef
PB
2351for target in $target_list; do
2352 # if a deprecated target is enabled we note it here
2353 if echo "$deprecated_targets_list" | grep -q "$target"; then
2354 add_to deprecated_features $target
2355 fi
2356done
2357
f55fe278
PB
2358# see if system emulation was really requested
2359case " $target_list " in
2360 *"-softmmu "*) softmmu=yes
2361 ;;
2362 *) softmmu=no
2363 ;;
2364esac
5327cf48 2365
249247c9
JQ
2366feature_not_found() {
2367 feature=$1
21684af0 2368 remedy=$2
249247c9 2369
76ad07a4 2370 error_exit "User requested feature $feature" \
21684af0
SS
2371 "configure was not able to find it." \
2372 "$remedy"
249247c9
JQ
2373}
2374
7d13299d
FB
2375# ---
2376# big/little endian test
2377cat > $TMPC << EOF
659eb157 2378#include <stdio.h>
61cc919f
MF
2379short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2380short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
659eb157
TH
2381int main(int argc, char *argv[])
2382{
2383 return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
7d13299d
FB
2384}
2385EOF
2386
659eb157
TH
2387if compile_prog ; then
2388 if strings -a $TMPE | grep -q BiGeNdIaN ; then
61cc919f 2389 bigendian="yes"
659eb157 2390 elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then
61cc919f
MF
2391 bigendian="no"
2392 else
2393 echo big/little test failed
659eb157 2394 exit 1
21d89f84 2395 fi
61cc919f
MF
2396else
2397 echo big/little test failed
659eb157 2398 exit 1
7d13299d
FB
2399fi
2400
e10ee3f5
PMD
2401##########################################
2402# system tools
2403if test -z "$want_tools"; then
2404 if test "$softmmu" = "no"; then
2405 want_tools=no
2406 else
2407 want_tools=yes
2408 fi
2409fi
2410
90520ee4
PMD
2411##########################################
2412# Disable features only meaningful for system-mode emulation
2413if test "$softmmu" = "no"; then
2414 audio_drv_list=""
2415fi
2416
015a33bd
GA
2417##########################################
2418# L2TPV3 probe
2419
2420cat > $TMPC <<EOF
2421#include <sys/socket.h>
bff6cb72 2422#include <linux/ip.h>
015a33bd
GA
2423int main(void) { return sizeof(struct mmsghdr); }
2424EOF
2425if compile_prog "" "" ; then
2426 l2tpv3=yes
2427else
2428 l2tpv3=no
2429fi
2430
195588cc
DC
2431cat > $TMPC <<EOF
2432#include <sys/mman.h>
2433int main(int argc, char *argv[]) {
2434 return mlockall(MCL_FUTURE);
2435}
2436EOF
2437if compile_prog "" "" ; then
2438 have_mlockall=yes
2439else
2440 have_mlockall=no
2441fi
2442
299e6f19
PB
2443#########################################
2444# vhost interdependencies and host support
2445
2446# vhost backends
d88618f7
SH
2447if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2448 error_exit "vhost-user is only available on Linux"
299e6f19 2449fi
108a6481
CL
2450test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2451if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2452 error_exit "vhost-vdpa is only available on Linux"
2453fi
299e6f19
PB
2454test "$vhost_kernel" = "" && vhost_kernel=$linux
2455if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2456 error_exit "vhost-kernel is only available on Linux"
2457fi
2458
2459# vhost-kernel devices
2460test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2461if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2462 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2463fi
2464test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2465if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2466 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2467fi
2468
2469# vhost-user backends
2470test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2471if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2472 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2473fi
2474test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2475if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2476 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2477fi
98fc1ada
DDAG
2478test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2479if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2480 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2481fi
108a6481
CL
2482#vhost-vdpa backends
2483test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2484if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2485 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2486fi
299e6f19 2487
40bc0ca9 2488# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
299e6f19
PB
2489if test "$vhost_net" = ""; then
2490 test "$vhost_net_user" = "yes" && vhost_net=yes
40bc0ca9 2491 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
299e6f19
PB
2492 test "$vhost_kernel" = "yes" && vhost_net=yes
2493fi
2494
779ab5e3
SW
2495##########################################
2496# pkg-config probe
2497
2498if ! has "$pkg_config_exe"; then
76ad07a4 2499 error_exit "pkg-config binary '$pkg_config_exe' not found"
779ab5e3
SW
2500fi
2501
b0a47e79
JQ
2502##########################################
2503# NPTL probe
2504
24cb36a6 2505if test "$linux_user" = "yes"; then
b0a47e79 2506 cat > $TMPC <<EOF
bd0c5661 2507#include <sched.h>
30813cea 2508#include <linux/futex.h>
182eacc0 2509int main(void) {
bd0c5661
PB
2510#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2511#error bork
2512#endif
182eacc0 2513 return 0;
bd0c5661
PB
2514}
2515EOF
24cb36a6 2516 if ! compile_object ; then
21684af0 2517 feature_not_found "nptl" "Install glibc and linux kernel headers."
b0a47e79 2518 fi
bd0c5661
PB
2519fi
2520
e37630ca
AL
2521##########################################
2522# xen probe
2523
1badb709 2524if test "$xen" != "disabled" ; then
c1cdd9d5
JG
2525 # Check whether Xen library path is specified via --extra-ldflags to avoid
2526 # overriding this setting with pkg-config output. If not, try pkg-config
2527 # to obtain all needed flags.
2528
2529 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2530 $pkg_config --exists xencontrol ; then
2531 xen_ctrl_version="$(printf '%d%02d%02d' \
2532 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
1badb709 2533 xen=enabled
5b6a8f43 2534 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
c1cdd9d5 2535 xen_pc="$xen_pc xenevtchn xendevicemodel"
58ea9a7a
AP
2536 if $pkg_config --exists xentoolcore; then
2537 xen_pc="$xen_pc xentoolcore"
2538 fi
582ea95f
MAL
2539 xen_cflags="$($pkg_config --cflags $xen_pc)"
2540 xen_libs="$($pkg_config --libs $xen_pc)"
c1cdd9d5 2541 else
d5b93ddf 2542
5b6a8f43 2543 xen_libs="-lxenstore -lxenctrl"
d9506cab 2544 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
50ced5b3 2545
c1cdd9d5
JG
2546 # First we test whether Xen headers and libraries are available.
2547 # If no, we are done and there is no Xen support.
2548 # If yes, more tests are run to detect the Xen version.
2549
2550 # Xen (any)
2551 cat > $TMPC <<EOF
e37630ca 2552#include <xenctrl.h>
50ced5b3
SW
2553int main(void) {
2554 return 0;
2555}
2556EOF
c1cdd9d5
JG
2557 if ! compile_prog "" "$xen_libs" ; then
2558 # Xen not found
1badb709 2559 if test "$xen" = "enabled" ; then
c1cdd9d5
JG
2560 feature_not_found "xen" "Install xen devel"
2561 fi
1badb709 2562 xen=disabled
50ced5b3 2563
c1cdd9d5
JG
2564 # Xen unstable
2565 elif
2566 cat > $TMPC <<EOF &&
2cbf8903
RL
2567#undef XC_WANT_COMPAT_DEVICEMODEL_API
2568#define __XEN_TOOLS__
2569#include <xendevicemodel.h>
d3c49ebb 2570#include <xenforeignmemory.h>
2cbf8903
RL
2571int main(void) {
2572 xendevicemodel_handle *xd;
d3c49ebb 2573 xenforeignmemory_handle *xfmem;
2cbf8903
RL
2574
2575 xd = xendevicemodel_open(0, 0);
2576 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2577
d3c49ebb
PD
2578 xfmem = xenforeignmemory_open(0, 0);
2579 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2580
2cbf8903
RL
2581 return 0;
2582}
2583EOF
2584 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2585 then
2586 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2587 xen_ctrl_version=41100
1badb709 2588 xen=enabled
2cbf8903
RL
2589 elif
2590 cat > $TMPC <<EOF &&
5ba3d756
ID
2591#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2592#include <xenforeignmemory.h>
58ea9a7a 2593#include <xentoolcore.h>
5ba3d756
ID
2594int main(void) {
2595 xenforeignmemory_handle *xfmem;
2596
2597 xfmem = xenforeignmemory_open(0, 0);
2598 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
58ea9a7a 2599 xentoolcore_restrict_all(0);
5ba3d756
ID
2600
2601 return 0;
2602}
2603EOF
58ea9a7a 2604 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2605 then
58ea9a7a 2606 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
5ba3d756 2607 xen_ctrl_version=41000
1badb709 2608 xen=enabled
5ba3d756
ID
2609 elif
2610 cat > $TMPC <<EOF &&
da8090cc
PD
2611#undef XC_WANT_COMPAT_DEVICEMODEL_API
2612#define __XEN_TOOLS__
2613#include <xendevicemodel.h>
2614int main(void) {
2615 xendevicemodel_handle *xd;
2616
2617 xd = xendevicemodel_open(0, 0);
2618 xendevicemodel_close(xd);
50ced5b3 2619
da8090cc
PD
2620 return 0;
2621}
2622EOF
c1cdd9d5
JG
2623 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2624 then
2625 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2626 xen_ctrl_version=40900
1badb709 2627 xen=enabled
c1cdd9d5
JG
2628 elif
2629 cat > $TMPC <<EOF &&
b6eb9b45
PS
2630/*
2631 * If we have stable libs the we don't want the libxc compat
2632 * layers, regardless of what CFLAGS we may have been given.
2633 *
2634 * Also, check if xengnttab_grant_copy_segment_t is defined and
2635 * grant copy operation is implemented.
2636 */
2637#undef XC_WANT_COMPAT_EVTCHN_API
2638#undef XC_WANT_COMPAT_GNTTAB_API
2639#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2640#include <xenctrl.h>
2641#include <xenstore.h>
2642#include <xenevtchn.h>
2643#include <xengnttab.h>
2644#include <xenforeignmemory.h>
2645#include <stdint.h>
2646#include <xen/hvm/hvm_info_table.h>
2647#if !defined(HVM_MAX_VCPUS)
2648# error HVM_MAX_VCPUS not defined
2649#endif
2650int main(void) {
2651 xc_interface *xc = NULL;
2652 xenforeignmemory_handle *xfmem;
2653 xenevtchn_handle *xe;
2654 xengnttab_handle *xg;
b6eb9b45
PS
2655 xengnttab_grant_copy_segment_t* seg = NULL;
2656
2657 xs_daemon_open();
2658
2659 xc = xc_interface_open(0, 0, 0);
2660 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2661 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2662 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2663 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
b6eb9b45
PS
2664
2665 xfmem = xenforeignmemory_open(0, 0);
2666 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2667
2668 xe = xenevtchn_open(0, 0);
2669 xenevtchn_fd(xe);
2670
2671 xg = xengnttab_open(0, 0);
2672 xengnttab_grant_copy(xg, 0, seg);
2673
2674 return 0;
2675}
2676EOF
c1cdd9d5
JG
2677 compile_prog "" "$xen_libs $xen_stable_libs"
2678 then
2679 xen_ctrl_version=40800
1badb709 2680 xen=enabled
c1cdd9d5
JG
2681 elif
2682 cat > $TMPC <<EOF &&
5eeb39c2
IC
2683/*
2684 * If we have stable libs the we don't want the libxc compat
2685 * layers, regardless of what CFLAGS we may have been given.
2686 */
2687#undef XC_WANT_COMPAT_EVTCHN_API
2688#undef XC_WANT_COMPAT_GNTTAB_API
2689#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2690#include <xenctrl.h>
2691#include <xenstore.h>
2692#include <xenevtchn.h>
2693#include <xengnttab.h>
2694#include <xenforeignmemory.h>
2695#include <stdint.h>
2696#include <xen/hvm/hvm_info_table.h>
2697#if !defined(HVM_MAX_VCPUS)
2698# error HVM_MAX_VCPUS not defined
2699#endif
2700int main(void) {
2701 xc_interface *xc = NULL;
2702 xenforeignmemory_handle *xfmem;
2703 xenevtchn_handle *xe;
2704 xengnttab_handle *xg;
5eeb39c2
IC
2705
2706 xs_daemon_open();
2707
2708 xc = xc_interface_open(0, 0, 0);
2709 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2710 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2711 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2712 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
5eeb39c2
IC
2713
2714 xfmem = xenforeignmemory_open(0, 0);
2715 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2716
2717 xe = xenevtchn_open(0, 0);
2718 xenevtchn_fd(xe);
2719
2720 xg = xengnttab_open(0, 0);
2721 xengnttab_map_grant_ref(xg, 0, 0, 0);
2722
2723 return 0;
2724}
2725EOF
c1cdd9d5
JG
2726 compile_prog "" "$xen_libs $xen_stable_libs"
2727 then
2728 xen_ctrl_version=40701
1badb709 2729 xen=enabled
c1cdd9d5
JG
2730
2731 # Xen 4.6
2732 elif
2733 cat > $TMPC <<EOF &&
cdadde39 2734#include <xenctrl.h>
e108a3c1 2735#include <xenstore.h>
d5b93ddf
AP
2736#include <stdint.h>
2737#include <xen/hvm/hvm_info_table.h>
2738#if !defined(HVM_MAX_VCPUS)
2739# error HVM_MAX_VCPUS not defined
2740#endif
d8b441a3
JB
2741int main(void) {
2742 xc_interface *xc;
2743 xs_daemon_open();
2744 xc = xc_interface_open(0, 0, 0);
2745 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2746 xc_gnttab_open(NULL, 0);
2747 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2748 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2749 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20a544c7 2750 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
d8b441a3
JB
2751 return 0;
2752}
2753EOF
c1cdd9d5
JG
2754 compile_prog "" "$xen_libs"
2755 then
2756 xen_ctrl_version=40600
1badb709 2757 xen=enabled
c1cdd9d5
JG
2758
2759 # Xen 4.5
2760 elif
2761 cat > $TMPC <<EOF &&
d8b441a3
JB
2762#include <xenctrl.h>
2763#include <xenstore.h>
2764#include <stdint.h>
2765#include <xen/hvm/hvm_info_table.h>
2766#if !defined(HVM_MAX_VCPUS)
2767# error HVM_MAX_VCPUS not defined
2768#endif
3996e85c
PD
2769int main(void) {
2770 xc_interface *xc;
2771 xs_daemon_open();
2772 xc = xc_interface_open(0, 0, 0);
2773 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2774 xc_gnttab_open(NULL, 0);
2775 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2776 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2777 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2778 return 0;
2779}
2780EOF
c1cdd9d5
JG
2781 compile_prog "" "$xen_libs"
2782 then
2783 xen_ctrl_version=40500
1badb709 2784 xen=enabled
3996e85c 2785
c1cdd9d5
JG
2786 elif
2787 cat > $TMPC <<EOF &&
3996e85c
PD
2788#include <xenctrl.h>
2789#include <xenstore.h>
2790#include <stdint.h>
2791#include <xen/hvm/hvm_info_table.h>
2792#if !defined(HVM_MAX_VCPUS)
2793# error HVM_MAX_VCPUS not defined
2794#endif
8688e065
SS
2795int main(void) {
2796 xc_interface *xc;
2797 xs_daemon_open();
2798 xc = xc_interface_open(0, 0, 0);
2799 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2800 xc_gnttab_open(NULL, 0);
2801 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2802 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2803 return 0;
2804}
2805EOF
c1cdd9d5
JG
2806 compile_prog "" "$xen_libs"
2807 then
2808 xen_ctrl_version=40200
1badb709 2809 xen=enabled
8688e065 2810
c1cdd9d5 2811 else
1badb709 2812 if test "$xen" = "enabled" ; then
c1cdd9d5
JG
2813 feature_not_found "xen (unsupported version)" \
2814 "Install a supported xen (xen 4.2 or newer)"
2815 fi
1badb709 2816 xen=disabled
fc321b4b 2817 fi
d5b93ddf 2818
1badb709 2819 if test "$xen" = enabled; then
c1cdd9d5 2820 if test $xen_ctrl_version -ge 40701 ; then
582ea95f 2821 xen_libs="$xen_libs $xen_stable_libs "
c1cdd9d5 2822 fi
5eeb39c2 2823 fi
d5b93ddf 2824 fi
e37630ca
AL
2825fi
2826
2da776db
MH
2827##########################################
2828# RDMA needs OpenFabrics libraries
2829if test "$rdma" != "no" ; then
2830 cat > $TMPC <<EOF
2831#include <rdma/rdma_cma.h>
2832int main(void) { return 0; }
2833EOF
ef6d4ccd 2834 rdma_libs="-lrdmacm -libverbs -libumad"
2da776db
MH
2835 if compile_prog "" "$rdma_libs" ; then
2836 rdma="yes"
2da776db
MH
2837 else
2838 if test "$rdma" = "yes" ; then
2839 error_exit \
ef6d4ccd 2840 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2da776db 2841 " Your options:" \
ef6d4ccd 2842 " (1) Fast: Install infiniband packages (devel) from your distro." \
2da776db
MH
2843 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2844 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2845 fi
2846 rdma="no"
2847 fi
2848fi
2849
21ab34c9
MA
2850##########################################
2851# PVRDMA detection
2852
2853cat > $TMPC <<EOF &&
2854#include <sys/mman.h>
2855
2856int
2857main(void)
2858{
2859 char buf = 0;
2860 void *addr = &buf;
2861 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2862
2863 return 0;
2864}
2865EOF
2866
2867if test "$rdma" = "yes" ; then
2868 case "$pvrdma" in
2869 "")
2870 if compile_prog "" ""; then
2871 pvrdma="yes"
2872 else
2873 pvrdma="no"
2874 fi
2875 ;;
2876 "yes")
2877 if ! compile_prog "" ""; then
2878 error_exit "PVRDMA is not supported since mremap is not implemented"
2879 fi
2880 pvrdma="yes"
2881 ;;
2882 "no")
2883 pvrdma="no"
2884 ;;
2885 esac
2886else
2887 if test "$pvrdma" = "yes" ; then
2888 error_exit "PVRDMA requires rdma suppport"
2889 fi
2890 pvrdma="no"
2891fi
95c6bff3 2892
ee108585
YS
2893# Let's see if enhanced reg_mr is supported
2894if test "$pvrdma" = "yes" ; then
2895
2896cat > $TMPC <<EOF &&
2897#include <infiniband/verbs.h>
2898
2899int
2900main(void)
2901{
2902 struct ibv_mr *mr;
2903 struct ibv_pd *pd = NULL;
2904 size_t length = 10;
2905 uint64_t iova = 0;
2906 int access = 0;
2907 void *addr = NULL;
2908
2909 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
2910
2911 ibv_dereg_mr(mr);
2912
2913 return 0;
2914}
2915EOF
2916 if ! compile_prog "" "-libverbs"; then
2917 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
2918 fi
2919fi
2920
ee682d27 2921##########################################
c1bb86cd 2922# xfsctl() probe, used for file-posix.c
dce512de
CH
2923if test "$xfs" != "no" ; then
2924 cat > $TMPC << EOF
ffc41d10 2925#include <stddef.h> /* NULL */
dce512de
CH
2926#include <xfs/xfs.h>
2927int main(void)
2928{
2929 xfsctl(NULL, 0, 0, NULL);
2930 return 0;
2931}
2932EOF
2933 if compile_prog "" "" ; then
2934 xfs="yes"
2935 else
2936 if test "$xfs" = "yes" ; then
e3a6e0da 2937 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
dce512de
CH
2938 fi
2939 xfs=no
2940 fi
2941fi
2942
8a16d273
TS
2943##########################################
2944# vde libraries probe
dfb278bd 2945if test "$vde" != "no" ; then
4baae0ac 2946 vde_libs="-lvdeplug"
8a16d273
TS
2947 cat > $TMPC << EOF
2948#include <libvdeplug.h>
4a7f0e06
PB
2949int main(void)
2950{
2951 struct vde_open_args a = {0, 0, 0};
fea08e08
PM
2952 char s[] = "";
2953 vde_open(s, s, &a);
4a7f0e06
PB
2954 return 0;
2955}
8a16d273 2956EOF
52166aa0 2957 if compile_prog "" "$vde_libs" ; then
4baae0ac 2958 vde=yes
dfb278bd
JQ
2959 else
2960 if test "$vde" = "yes" ; then
21684af0 2961 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
dfb278bd
JQ
2962 fi
2963 vde=no
4baae0ac 2964 fi
8a16d273
TS
2965fi
2966
58952137 2967##########################################
0a985b37
VM
2968# netmap support probe
2969# Apart from looking for netmap headers, we make sure that the host API version
2970# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2971# a minor/major version number. Minor new features will be marked with values up
2972# to 15, and if something happens that requires a change to the backend we will
2973# move above 15, submit the backend fixes and modify this two bounds.
58952137
VM
2974if test "$netmap" != "no" ; then
2975 cat > $TMPC << EOF
2976#include <inttypes.h>
2977#include <net/if.h>
2978#include <net/netmap.h>
2979#include <net/netmap_user.h>
0a985b37
VM
2980#if (NETMAP_API < 11) || (NETMAP_API > 15)
2981#error
2982#endif
58952137
VM
2983int main(void) { return 0; }
2984EOF
2985 if compile_prog "" "" ; then
2986 netmap=yes
2987 else
2988 if test "$netmap" = "yes" ; then
2989 feature_not_found "netmap"
2990 fi
2991 netmap=no
2992 fi
2993fi
2994
422a5fd0
JD
2995##########################################
2996# detect CoreAudio
2997if test "$coreaudio" != "no" ; then
2998 coreaudio_libs="-framework CoreAudio"
2999 cat > $TMPC << EOF
3000#include <CoreAudio/CoreAudio.h>
3001int main(void)
3002{
3003 return (int)AudioGetCurrentHostTime();
3004}
3005EOF
3006 if compile_prog "" "$coreaudio_libs" ; then
3007 coreaudio=yes
3008 else
3009 coreaudio=no
3010 fi
3011fi
3012
8f28f3fb 3013##########################################
c2de5c91 3014# Sound support libraries probe
8f28f3fb 3015
89138857 3016audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
c2de5c91 3017for drv in $audio_drv_list; do
3018 case $drv in
e42975a1 3019 alsa | try-alsa)
c80a867f
GH
3020 if $pkg_config alsa --exists; then
3021 alsa_libs=$($pkg_config alsa --libs)
478e943f
PB
3022 alsa_cflags=$($pkg_config alsa --cflags)
3023 alsa=yes
e42975a1
GH
3024 if test "$drv" = "try-alsa"; then
3025 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3026 fi
c80a867f 3027 else
e42975a1
GH
3028 if test "$drv" = "try-alsa"; then
3029 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3030 else
3031 error_exit "$drv check failed" \
3032 "Make sure to have the $drv libs and headers installed."
3033 fi
c80a867f 3034 fi
c2de5c91 3035 ;;
3036
e42975a1 3037 pa | try-pa)
c80a867f 3038 if $pkg_config libpulse --exists; then
478e943f 3039 libpulse=yes
c80a867f 3040 pulse_libs=$($pkg_config libpulse --libs)
478e943f 3041 pulse_cflags=$($pkg_config libpulse --cflags)
e42975a1
GH
3042 if test "$drv" = "try-pa"; then
3043 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3044 fi
c80a867f 3045 else
e42975a1
GH
3046 if test "$drv" = "try-pa"; then
3047 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3048 else
3049 error_exit "$drv check failed" \
3050 "Make sure to have the $drv libs and headers installed."
3051 fi
c80a867f 3052 fi
b8e59f18 3053 ;;
3054
373967b2
GH
3055 sdl)
3056 if test "$sdl" = "no"; then
3057 error_exit "sdl not found or disabled, can not use sdl audio driver"
3058 fi
3059 ;;
3060
e42975a1
GH
3061 try-sdl)
3062 if test "$sdl" = "no"; then
3063 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3064 else
3065 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3066 fi
3067 ;;
3068
422a5fd0
JD
3069 coreaudio | try-coreaudio)
3070 if test "$coreaudio" = "no"; then
3071 if test "$drv" = "try-coreaudio"; then
3072 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio//')
3073 else
3074 error_exit "$drv check failed" \
3075 "Make sure to have the $drv is available."
3076 fi
3077 else
b1149911 3078 coreaudio_libs="-framework CoreAudio"
422a5fd0
JD
3079 if test "$drv" = "try-coreaudio"; then
3080 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio/coreaudio/')
3081 fi
3082 fi
997e690a
JQ
3083 ;;
3084
a4bf6780 3085 dsound)
b1149911 3086 dsound_libs="-lole32 -ldxguid"
d5631638 3087 audio_win_int="yes"
a4bf6780
JQ
3088 ;;
3089
3090 oss)
b1149911 3091 oss_libs="$oss_lib"
a4bf6780
JQ
3092 ;;
3093
2e445703
GM
3094 jack | try-jack)
3095 if $pkg_config jack --exists; then
478e943f 3096 libjack=yes
2e445703
GM
3097 jack_libs=$($pkg_config jack --libs)
3098 if test "$drv" = "try-jack"; then
3099 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3100 fi
3101 else
3102 if test "$drv" = "try-jack"; then
3103 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3104 else
3105 error_exit "$drv check failed" \
3106 "Make sure to have the $drv libs and headers installed."
3107 fi
3108 fi
3109 ;;
3110
e4c63a6a 3111 *)
1c9b2a52 3112 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
76ad07a4
PM
3113 error_exit "Unknown driver '$drv' selected" \
3114 "Possible drivers are: $audio_possible_drivers"
e4c63a6a 3115 }
3116 ;;
c2de5c91 3117 esac
3118done
8f28f3fb 3119
ba4dd2aa
AB
3120##########################################
3121# plugin linker support probe
3122
3123if test "$plugins" != "no"; then
3124
3125 #########################################
3126 # See if --dynamic-list is supported by the linker
3127
3128 ld_dynamic_list="no"
3129 cat > $TMPTXT <<EOF
3130{
3131 foo;
3132};
3133EOF
3134
3135 cat > $TMPC <<EOF
3136#include <stdio.h>
3137void foo(void);
3138
3139void foo(void)
3140{
3141 printf("foo\n");
3142}
3143
3144int main(void)
3145{
3146 foo();
3147 return 0;
3148}
3149EOF
3150
3151 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
3152 ld_dynamic_list="yes"
3153 fi
3154
3155 #########################################
3156 # See if -exported_symbols_list is supported by the linker
3157
3158 ld_exported_symbols_list="no"
3159 cat > $TMPTXT <<EOF
3160 _foo
3161EOF
3162
3163 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
3164 ld_exported_symbols_list="yes"
3165 fi
3166
3167 if test "$ld_dynamic_list" = "no" &&
3168 test "$ld_exported_symbols_list" = "no" ; then
3169 if test "$plugins" = "yes"; then
3170 error_exit \
3171 "Plugin support requires dynamic linking and specifying a set of symbols " \
3172 "that are exported to plugins. Unfortunately your linker doesn't " \
3173 "support the flag (--dynamic-list or -exported_symbols_list) used " \
3174 "for this purpose."
3175 else
3176 plugins="no"
3177 fi
3178 else
3179 plugins="yes"
3180 fi
3181fi
3182
e18df141
AL
3183##########################################
3184# glib support probe
a52d28af 3185
b4c6036f 3186glib_req_ver=2.56
aa0d1f44
PB
3187glib_modules=gthread-2.0
3188if test "$modules" = yes; then
a88afc64 3189 glib_modules="$glib_modules gmodule-export-2.0"
aa0d1f44 3190fi
ba4dd2aa 3191if test "$plugins" = "yes"; then
54cb65d8
EC
3192 glib_modules="$glib_modules gmodule-2.0"
3193fi
e26110cf 3194
aa0d1f44 3195for i in $glib_modules; do
e26110cf 3196 if $pkg_config --atleast-version=$glib_req_ver $i; then
89138857
SW
3197 glib_cflags=$($pkg_config --cflags $i)
3198 glib_libs=$($pkg_config --libs $i)
e26110cf
FZ
3199 else
3200 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3201 fi
3202done
3203
215b0c2f
PB
3204# This workaround is required due to a bug in pkg-config file for glib as it
3205# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3206
3207if test "$static" = yes && test "$mingw32" = yes; then
3208 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3209fi
3210
20cf7b8e
DP
3211if ! test "$gio" = "no"; then
3212 pass=no
3213 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3214 gio_cflags=$($pkg_config --cflags gio-2.0)
3215 gio_libs=$($pkg_config --libs gio-2.0)
3216 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
5ecfb76c 3217 if ! has "$gdbus_codegen"; then
20cf7b8e
DP
3218 gdbus_codegen=
3219 fi
3220 # Check that the libraries actually work -- Ubuntu 18.04 ships
3221 # with pkg-config --static --libs data for gio-2.0 that is missing
3222 # -lblkid and will give a link error.
3223 cat > $TMPC <<EOF
13ceae66
PM
3224#include <gio/gio.h>
3225int main(void)
3226{
3227 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3228 return 0;
3229}
3230EOF
20cf7b8e
DP
3231 if compile_prog "$gio_cflags" "$gio_libs" ; then
3232 pass=yes
3233 else
3234 pass=no
3235 fi
3236
3237 if test "$pass" = "yes" &&
3238 $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3239 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3240 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3241 fi
76346b62 3242 fi
f876b765 3243
20cf7b8e
DP
3244 if test "$pass" = "no"; then
3245 if test "$gio" = "yes"; then
3246 feature_not_found "gio" "Install libgio >= 2.0"
3247 else
3248 gio=no
3249 fi
3250 else
3251 gio=yes
3252 fi
25a97a56
MAL
3253fi
3254
977a82ab
DB
3255# Sanity check that the current size_t matches the
3256# size that glib thinks it should be. This catches
3257# problems on multi-arch where people try to build
3258# 32-bit QEMU while pointing at 64-bit glib headers
3259cat > $TMPC <<EOF
3260#include <glib.h>
3261#include <unistd.h>
3262
3263#define QEMU_BUILD_BUG_ON(x) \
3264 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3265
3266int main(void) {
3267 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3268 return 0;
3269}
3270EOF
3271
215b0c2f 3272if ! compile_prog "$glib_cflags" "$glib_libs" ; then
977a82ab
DB
3273 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3274 "You probably need to set PKG_CONFIG_LIBDIR"\
3275 "to point to the right pkg-config files for your"\
3276 "build target"
3277fi
3278
9bda600b
EB
3279# Silence clang warnings triggered by glib < 2.57.2
3280cat > $TMPC << EOF
3281#include <glib.h>
3282typedef struct Foo {
3283 int i;
3284} Foo;
3285static void foo_free(Foo *f)
3286{
3287 g_free(f);
3288}
3289G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3290int main(void) { return 0; }
3291EOF
3292if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3293 if cc_has_warning_flag "-Wno-unused-function"; then
3294 glib_cflags="$glib_cflags -Wno-unused-function"
5770e8af 3295 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
9bda600b
EB
3296 fi
3297fi
3298
e26110cf
FZ
3299##########################################
3300# SHA command probe for modules
3301if test "$modules" = yes; then
3302 shacmd_probe="sha1sum sha1 shasum"
3303 for c in $shacmd_probe; do
8ccefb91 3304 if has $c; then
e26110cf
FZ
3305 shacmd="$c"
3306 break
3307 fi
3308 done
3309 if test "$shacmd" = ""; then
3310 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3311 fi
e18df141
AL
3312fi
3313
414f0dab 3314##########################################
e5d355d1 3315# pthread probe
4b29ec41 3316PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3c529d93 3317
4dd75c70 3318pthread=no
e5d355d1 3319cat > $TMPC << EOF
3c529d93 3320#include <pthread.h>
7a42bbe4
SW
3321static void *f(void *p) { return NULL; }
3322int main(void) {
3323 pthread_t thread;
3324 pthread_create(&thread, 0, f, 0);
3325 return 0;
3326}
414f0dab 3327EOF
bd00d539
AF
3328if compile_prog "" "" ; then
3329 pthread=yes
3330else
3331 for pthread_lib in $PTHREADLIBS_LIST; do
3332 if compile_prog "" "$pthread_lib" ; then
3333 pthread=yes
bd00d539
AF
3334 break
3335 fi
3336 done
3337fi
414f0dab 3338
e633a5c6 3339if test "$mingw32" != yes && test "$pthread" = no; then
76ad07a4
PM
3340 error_exit "pthread check failed" \
3341 "Make sure to have the pthread libs and headers installed."
e5d355d1
AL
3342fi
3343
479a5747
RB
3344# check for pthread_setname_np with thread id
3345pthread_setname_np_w_tid=no
5c312079
DDAG
3346cat > $TMPC << EOF
3347#include <pthread.h>
3348
3349static void *f(void *p) { return NULL; }
3350int main(void)
3351{
3352 pthread_t thread;
3353 pthread_create(&thread, 0, f, 0);
3354 pthread_setname_np(thread, "QEMU");
3355 return 0;
3356}
3357EOF
3358if compile_prog "" "$pthread_lib" ; then
479a5747
RB
3359 pthread_setname_np_w_tid=yes
3360fi
3361
3362# check for pthread_setname_np without thread id
3363pthread_setname_np_wo_tid=no
3364cat > $TMPC << EOF
3365#include <pthread.h>
3366
12a9b8d8 3367static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
479a5747
RB
3368int main(void)
3369{
3370 pthread_t thread;
3371 pthread_create(&thread, 0, f, 0);
3372 return 0;
3373}
3374EOF
3375if compile_prog "" "$pthread_lib" ; then
3376 pthread_setname_np_wo_tid=yes
5c312079
DDAG
3377fi
3378
0a12ec87 3379##########################################
b10d49d7
PT
3380# libssh probe
3381if test "$libssh" != "no" ; then
b4c10fc6 3382 if $pkg_config --exists "libssh >= 0.8.7"; then
b10d49d7
PT
3383 libssh_cflags=$($pkg_config libssh --cflags)
3384 libssh_libs=$($pkg_config libssh --libs)
3385 libssh=yes
0a12ec87 3386 else
b10d49d7
PT
3387 if test "$libssh" = "yes" ; then
3388 error_exit "libssh required for --enable-libssh"
0a12ec87 3389 fi
b10d49d7 3390 libssh=no
0a12ec87
RJ
3391 fi
3392fi
3393
5c6c3a6c
CH
3394##########################################
3395# linux-aio probe
5c6c3a6c
CH
3396
3397if test "$linux_aio" != "no" ; then
3398 cat > $TMPC <<EOF
3399#include <libaio.h>
3400#include <sys/eventfd.h>
832ce9c2 3401#include <stddef.h>
5c6c3a6c
CH
3402int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3403EOF
3404 if compile_prog "" "-laio" ; then
3405 linux_aio=yes
5c6c3a6c
CH
3406 else
3407 if test "$linux_aio" = "yes" ; then
21684af0 3408 feature_not_found "linux AIO" "Install libaio devel"
5c6c3a6c 3409 fi
3cfcae3c 3410 linux_aio=no
5c6c3a6c
CH
3411 fi
3412fi
3413
3b8acc11 3414##########################################
7aaa6a16 3415# TPM emulation is only on POSIX
3b8acc11 3416
7aaa6a16
PB
3417if test "$tpm" = ""; then
3418 if test "$mingw32" = "yes"; then
3419 tpm=no
3420 else
3421 tpm=yes
3422 fi
3423elif test "$tpm" = "yes"; then
3424 if test "$mingw32" = "yes" ; then
3425 error_exit "TPM emulation only available on POSIX systems"
3426 fi
3b8acc11
PB
3427fi
3428
bf9298b9
AL
3429##########################################
3430# iovec probe
3431cat > $TMPC <<EOF
db34f0b3 3432#include <sys/types.h>
bf9298b9 3433#include <sys/uio.h>
db34f0b3 3434#include <unistd.h>
f91f9bee 3435int main(void) { return sizeof(struct iovec); }
bf9298b9
AL
3436EOF
3437iovec=no
52166aa0 3438if compile_prog "" "" ; then
bf9298b9
AL
3439 iovec=yes
3440fi
3441
f652e6af
AJ
3442##########################################
3443# fdt probe
d599938a 3444
fbb4121d
PB
3445case "$fdt" in
3446 auto | enabled | internal)
3447 # Simpler to always update submodule, even if not needed.
2d652f24 3448 git_submodules="${git_submodules} dtc"
fbb4121d
PB
3449 ;;
3450esac
f652e6af 3451
20ff075b 3452##########################################
9d49bcf6 3453# opengl probe (for sdl2, gtk)
b1546f32 3454
d52c454a
MAL
3455gbm="no"
3456if $pkg_config gbm; then
3457 gbm_cflags="$($pkg_config --cflags gbm)"
3458 gbm_libs="$($pkg_config --libs gbm)"
3459 gbm="yes"
3460fi
3461
da076ffe 3462if test "$opengl" != "no" ; then
bc6a3565
AO
3463 epoxy=no
3464 if $pkg_config epoxy; then
3465 cat > $TMPC << EOF
3466#include <epoxy/egl.h>
3467int main(void) { return 0; }
3468EOF
3469 if compile_prog "" "" ; then
3470 epoxy=yes
3471 fi
3472 fi
3473
3474 if test "$epoxy" = "yes" ; then
3475 opengl_cflags="$($pkg_config --cflags epoxy)"
3476 opengl_libs="$($pkg_config --libs epoxy)"
da076ffe 3477 opengl=yes
20ff075b 3478 else
da076ffe 3479 if test "$opengl" = "yes" ; then
bc6a3565 3480 feature_not_found "opengl" "Please install epoxy with EGL"
20ff075b 3481 fi
f676c67e 3482 opengl_cflags=""
da076ffe
GH
3483 opengl_libs=""
3484 opengl=no
20ff075b
MW
3485 fi
3486fi
3487
a99d57bb
WG
3488##########################################
3489# libnuma probe
3490
3491if test "$numa" != "no" ; then
3492 cat > $TMPC << EOF
3493#include <numa.h>
3494int main(void) { return numa_available(); }
3495EOF
3496
3497 if compile_prog "" "-lnuma" ; then
3498 numa=yes
ab318051 3499 numa_libs="-lnuma"
a99d57bb
WG
3500 else
3501 if test "$numa" = "yes" ; then
3502 feature_not_found "numa" "install numactl devel"
3503 fi
3504 numa=no
3505 fi
3506fi
3507
aa087962 3508malloc=system
7b01cb97
AD
3509if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3510 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3511 exit 1
aa087962
PB
3512elif test "$tcmalloc" = "yes" ; then
3513 malloc=tcmalloc
3514elif test "$jemalloc" = "yes" ; then
3515 malloc=jemalloc
7b01cb97
AD
3516fi
3517
955727d2
CT
3518# check for usbfs
3519have_usbfs=no
3520if test "$linux_user" = "yes"; then
96566d09
TP
3521 cat > $TMPC << EOF
3522#include <linux/usbdevice_fs.h>
3523
3524#ifndef USBDEVFS_GET_CAPABILITIES
3525#error "USBDEVFS_GET_CAPABILITIES undefined"
3526#endif
3527
3528#ifndef USBDEVFS_DISCONNECT_CLAIM
3529#error "USBDEVFS_DISCONNECT_CLAIM undefined"
3530#endif
3531
3532int main(void)
3533{
3534 return 0;
3535}
3536EOF
3537 if compile_prog "" ""; then
955727d2
CT
3538 have_usbfs=yes
3539 fi
955727d2 3540fi
751bcc39 3541
de5071c5 3542##########################################
cd4ec0b4 3543# spice probe
58d3f3ff
GH
3544if test "$spice_protocol" != "no" ; then
3545 spice_protocol_cflags=$($pkg_config --cflags spice-protocol 2>/dev/null)
3546 if $pkg_config --atleast-version=0.12.3 spice-protocol; then
3547 spice_protocol="yes"
3548 else
3549 if test "$spice_protocol" = "yes" ; then
3550 feature_not_found "spice_protocol" \
3551 "Install spice-protocol(>=0.12.3) devel"
3552 fi
3553 spice_protocol="no"
3554 fi
3555fi
3556
cd4ec0b4
GH
3557if test "$spice" != "no" ; then
3558 cat > $TMPC << EOF
3559#include <spice.h>
3560int main(void) { spice_server_new(); return 0; }
3561EOF
710fc4f5
JD
3562 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3563 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
1b63665c 3564 if $pkg_config --atleast-version=0.12.5 spice-server && \
58d3f3ff 3565 test "$spice_protocol" = "yes" && \
cd4ec0b4
GH
3566 compile_prog "$spice_cflags" "$spice_libs" ; then
3567 spice="yes"
cd4ec0b4
GH
3568 else
3569 if test "$spice" = "yes" ; then
8efc9363 3570 feature_not_found "spice" \
58d3f3ff 3571 "Install spice-server(>=0.12.5) devel"
cd4ec0b4
GH
3572 fi
3573 spice="no"
3574 fi
3575fi
3576
d9840e25
TS
3577##########################################
3578# check if we have VSS SDK headers for win
3579
e633a5c6
EB
3580if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3581 test "$vss_win32_sdk" != "no" ; then
d9840e25 3582 case "$vss_win32_sdk" in
690604f6 3583 "") vss_win32_include="-isystem $source_path" ;;
d9840e25
TS
3584 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3585 # handle path with spaces. So we symlink the headers into ".sdk/vss".
690604f6 3586 vss_win32_include="-isystem $source_path/.sdk/vss"
d9840e25
TS
3587 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3588 ;;
690604f6 3589 *) vss_win32_include="-isystem $vss_win32_sdk"
d9840e25
TS
3590 esac
3591 cat > $TMPC << EOF
3592#define __MIDL_user_allocate_free_DEFINED__
3593#include <inc/win2003/vss.h>
3594int main(void) { return VSS_CTX_BACKUP; }
3595EOF
3596 if compile_prog "$vss_win32_include" "" ; then
3597 guest_agent_with_vss="yes"
3598 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
315d3184 3599 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
f33ca81f 3600 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
d9840e25
TS
3601 else
3602 if test "$vss_win32_sdk" != "" ; then
3603 echo "ERROR: Please download and install Microsoft VSS SDK:"
3604 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3605 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3606 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
3607 echo "ERROR: The headers are extracted in the directory \`inc'."
3608 feature_not_found "VSS support"
3609 fi
3610 guest_agent_with_vss="no"
3611 fi
3612fi
3613
3614##########################################
3615# lookup Windows platform SDK (if not specified)
3616# The SDK is needed only to build .tlb (type library) file of guest agent
3617# VSS provider from the source. It is usually unnecessary because the
3618# pre-compiled .tlb file is included.
3619
e633a5c6
EB
3620if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
3621 test "$guest_agent_with_vss" = "yes" ; then
d9840e25
TS
3622 if test -z "$win_sdk"; then
3623 programfiles="$PROGRAMFILES"
3624 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3625 if test -n "$programfiles"; then
3626 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3627 else
3628 feature_not_found "Windows SDK"
3629 fi
3630 elif test "$win_sdk" = "no"; then
3631 win_sdk=""
3632 fi
3633fi
3634
50cbebb9
MR
3635##########################################
3636# check if mingw environment provides a recent ntddscsi.h
e633a5c6 3637if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
50cbebb9
MR
3638 cat > $TMPC << EOF
3639#include <windows.h>
3640#include <ntddscsi.h>
3641int main(void) {
3642#if !defined(IOCTL_SCSI_GET_ADDRESS)
3643#error Missing required ioctl definitions
3644#endif
3645 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
3646 return addr.Lun;
3647}
3648EOF
3649 if compile_prog "" "" ; then
3650 guest_agent_ntddscsi=yes
996b9cdc 3651 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
50cbebb9
MR
3652 fi
3653fi
3654
8ca80760
RH
3655##########################################
3656# capstone
3657
e219c499 3658case "$capstone" in
8b18cdbf
RH
3659 auto | enabled | internal)
3660 # Simpler to always update submodule, even if not needed.
2d652f24 3661 git_submodules="${git_submodules} capstone"
e219c499
RH
3662 ;;
3663esac
8ca80760 3664
0a852417
PD
3665##########################################
3666# check if we have posix_syslog
3667
3668posix_syslog=no
3669cat > $TMPC << EOF
3670#include <syslog.h>
3671int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
3672EOF
3673if compile_prog "" "" ; then
3674 posix_syslog=yes
3675fi
3676
94a420b1
SH
3677##########################################
3678# check if trace backend exists
3679
5b808275 3680$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
94a420b1 3681if test "$?" -ne 0 ; then
5b808275
LV
3682 error_exit "invalid trace backends" \
3683 "Please choose supported trace backends."
94a420b1
SH
3684fi
3685
7e24e92a
SH
3686##########################################
3687# For 'ust' backend, test if ust headers are present
5b808275 3688if have_backend "ust"; then
bbe47ed2
PB
3689 if $pkg_config lttng-ust --exists; then
3690 lttng_ust_libs=$($pkg_config --libs lttng-ust)
7e24e92a 3691 else
bf15f63c 3692 error_exit "Trace backend 'ust' missing lttng-ust header files"
7e24e92a
SH
3693 fi
3694fi
b3d08c02
DB
3695
3696##########################################
3697# For 'dtrace' backend, test if 'dtrace' command is present
5b808275 3698if have_backend "dtrace"; then
b3d08c02 3699 if ! has 'dtrace' ; then
76ad07a4 3700 error_exit "dtrace command is not found in PATH $PATH"
b3d08c02 3701 fi
c276b17d
DB
3702 trace_backend_stap="no"
3703 if has 'stap' ; then
3704 trace_backend_stap="yes"
4b265c79
SH
3705
3706 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
3707 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
3708 # instead. QEMU --enable-modules depends on this because the SystemTap
3709 # semaphores are linked into the main binary and not the module's shared
3710 # object.
3711 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
c276b17d 3712 fi
b3d08c02
DB
3713fi
3714
023367e6 3715##########################################
519175a2 3716# check and set a backend for coroutine
d0e2fce5 3717
7c2acc70 3718# We prefer ucontext, but it's not always possible. The fallback
33c53c54
DB
3719# is sigcontext. On Windows the only valid backend is the Windows
3720# specific one.
7c2acc70
PM
3721
3722ucontext_works=no
3723if test "$darwin" != "yes"; then
3724 cat > $TMPC << EOF
d0e2fce5 3725#include <ucontext.h>
cdf84806
PM
3726#ifdef __stub_makecontext
3727#error Ignoring glibc stub makecontext which will always fail
3728#endif
75cafad7 3729int main(void) { makecontext(0, 0, 0); return 0; }
d0e2fce5 3730EOF
7c2acc70
PM
3731 if compile_prog "" "" ; then
3732 ucontext_works=yes
3733 fi
3734fi
3735
3736if test "$coroutine" = ""; then
3737 if test "$mingw32" = "yes"; then
3738 coroutine=win32
3739 elif test "$ucontext_works" = "yes"; then
3740 coroutine=ucontext
3741 else
3742 coroutine=sigaltstack
d0e2fce5 3743 fi
519175a2 3744else
7c2acc70
PM
3745 case $coroutine in
3746 windows)
3747 if test "$mingw32" != "yes"; then
3748 error_exit "'windows' coroutine backend only valid for Windows"
3749 fi
3750 # Unfortunately the user visible backend name doesn't match the
3751 # coroutine-*.c filename for this case, so we have to adjust it here.
3752 coroutine=win32
3753 ;;
3754 ucontext)
3755 if test "$ucontext_works" != "yes"; then
3756 feature_not_found "ucontext"
3757 fi
3758 ;;
33c53c54 3759 sigaltstack)
7c2acc70
PM
3760 if test "$mingw32" = "yes"; then
3761 error_exit "only the 'windows' coroutine backend is valid for Windows"
3762 fi
3763 ;;
3764 *)
3765 error_exit "unknown coroutine backend $coroutine"
3766 ;;
3767 esac
d0e2fce5
AK
3768fi
3769
70c60c08 3770if test "$coroutine_pool" = ""; then
33c53c54 3771 coroutine_pool=yes
70c60c08
SH
3772fi
3773
7d992e4d 3774if test "$debug_stack_usage" = "yes"; then
7d992e4d
PL
3775 if test "$coroutine_pool" = "yes"; then
3776 echo "WARN: disabling coroutine pool for stack usage debugging"
3777 coroutine_pool=no
3778 fi
3779fi
3780
1e4f6065
DB
3781##################################################
3782# SafeStack
3783
3784
3785if test "$safe_stack" = "yes"; then
3786cat > $TMPC << EOF
3787int main(int argc, char *argv[])
3788{
3789#if ! __has_feature(safe_stack)
3790#error SafeStack Disabled
3791#endif
3792 return 0;
3793}
3794EOF
3795 flag="-fsanitize=safe-stack"
3796 # Check that safe-stack is supported and enabled.
3797 if compile_prog "-Werror $flag" "$flag"; then
3798 # Flag needed both at compilation and at linking
3799 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3800 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3801 else
3802 error_exit "SafeStack not supported by your compiler"
3803 fi
3804 if test "$coroutine" != "ucontext"; then
3805 error_exit "SafeStack is only supported by the coroutine backend ucontext"
3806 fi
3807else
3808cat > $TMPC << EOF
3809int main(int argc, char *argv[])
3810{
3811#if defined(__has_feature)
3812#if __has_feature(safe_stack)
3813#error SafeStack Enabled
3814#endif
3815#endif
3816 return 0;
3817}
3818EOF
3819if test "$safe_stack" = "no"; then
3820 # Make sure that safe-stack is disabled
3821 if ! compile_prog "-Werror" ""; then
3822 # SafeStack was already enabled, try to explicitly remove the feature
3823 flag="-fno-sanitize=safe-stack"
3824 if ! compile_prog "-Werror $flag" "$flag"; then
3825 error_exit "Configure cannot disable SafeStack"
3826 fi
3827 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
3828 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
3829 fi
3830else # "$safe_stack" = ""
3831 # Set safe_stack to yes or no based on pre-existing flags
3832 if compile_prog "-Werror" ""; then
3833 safe_stack="no"
3834 else
3835 safe_stack="yes"
3836 if test "$coroutine" != "ucontext"; then
3837 error_exit "SafeStack is only supported by the coroutine backend ucontext"
3838 fi
3839 fi
3840fi
3841fi
7d992e4d 3842
76a347e1
RH
3843########################################
3844# check if cpuid.h is usable.
3845
76a347e1
RH
3846cat > $TMPC << EOF
3847#include <cpuid.h>
3848int main(void) {
774d566c
PM
3849 unsigned a, b, c, d;
3850 int max = __get_cpuid_max(0, 0);
3851
3852 if (max >= 1) {
3853 __cpuid(1, a, b, c, d);
3854 }
3855
3856 if (max >= 7) {
3857 __cpuid_count(7, 0, a, b, c, d);
3858 }
3859
3860 return 0;
76a347e1
RH
3861}
3862EOF
3863if compile_prog "" "" ; then
3864 cpuid_h=yes
3865fi
3866
5dd89908
RH
3867##########################################
3868# avx2 optimization requirement check
3869#
3870# There is no point enabling this if cpuid.h is not usable,
3871# since we won't be able to select the new routines.
3872
e633a5c6 3873if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5dd89908
RH
3874 cat > $TMPC << EOF
3875#pragma GCC push_options
3876#pragma GCC target("avx2")
3877#include <cpuid.h>
3878#include <immintrin.h>
3879static int bar(void *a) {
3880 __m256i x = *(__m256i *)a;
3881 return _mm256_testz_si256(x, x);
3882}
3883int main(int argc, char *argv[]) { return bar(argv[0]); }
3884EOF
5b945f23 3885 if compile_object "-Werror" ; then
5dd89908 3886 avx2_opt="yes"
86583a07
LM
3887 else
3888 avx2_opt="no"
5dd89908
RH
3889 fi
3890fi
3891
6b8cd447
RH
3892##########################################
3893# avx512f optimization requirement check
3894#
3895# There is no point enabling this if cpuid.h is not usable,
3896# since we won't be able to select the new routines.
3897# by default, it is turned off.
3898# if user explicitly want to enable it, check environment
3899
3900if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
3901 cat > $TMPC << EOF
3902#pragma GCC push_options
3903#pragma GCC target("avx512f")
3904#include <cpuid.h>
3905#include <immintrin.h>
3906static int bar(void *a) {
3907 __m512i x = *(__m512i *)a;
3908 return _mm512_test_epi64_mask(x, x);
3909}
3910int main(int argc, char *argv[])
3911{
3912 return bar(argv[0]);
3913}
3914EOF
5b945f23 3915 if ! compile_object "-Werror" ; then
6b8cd447
RH
3916 avx512f_opt="no"
3917 fi
3918else
3919 avx512f_opt="no"
3920fi
3921
f540166b
RH
3922########################################
3923# check if __[u]int128_t is usable.
3924
3925int128=no
3926cat > $TMPC << EOF
3927__int128_t a;
3928__uint128_t b;
3929int main (void) {
3930 a = a + b;
3931 b = a * b;
464e3671 3932 a = a * a;
f540166b
RH
3933 return 0;
3934}
3935EOF
3936if compile_prog "" "" ; then
3937 int128=yes
3938fi
76a347e1 3939
7ebee43e
RH
3940#########################################
3941# See if 128-bit atomic operations are supported.
3942
3943atomic128=no
3944if test "$int128" = "yes"; then
3945 cat > $TMPC << EOF
3946int main(void)
3947{
3948 unsigned __int128 x = 0, y = 0;
bceac547
TH
3949 y = __atomic_load(&x, 0);
3950 __atomic_store(&x, y, 0);
3951 __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
7ebee43e
RH
3952 return 0;
3953}
3954EOF
3955 if compile_prog "" "" ; then
3956 atomic128=yes
3957 fi
3958fi
3959
e6cd4bb5 3960cmpxchg128=no
e633a5c6 3961if test "$int128" = yes && test "$atomic128" = no; then
e6cd4bb5
RH
3962 cat > $TMPC << EOF
3963int main(void)
3964{
3965 unsigned __int128 x = 0, y = 0;
3966 __sync_val_compare_and_swap_16(&x, y, x);
3967 return 0;
3968}
3969EOF
3970 if compile_prog "" "" ; then
3971 cmpxchg128=yes
3972 fi
3973fi
3974
df79b996
RH
3975#########################################
3976# See if 64-bit atomic operations are supported.
3977# Note that without __atomic builtins, we can only
3978# assume atomic loads/stores max at pointer size.
3979
3980cat > $TMPC << EOF
3981#include <stdint.h>
3982int main(void)
3983{
3984 uint64_t x = 0, y = 0;
5fe40765
TH
3985 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
3986 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
3987 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
3988 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
3989 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
df79b996
RH
3990 return 0;
3991}
3992EOF
3993if compile_prog "" "" ; then
3994 atomic64=yes
3995fi
3996
1e6e9aca
RH
3997########################################
3998# check if getauxval is available.
3999
4000getauxval=no
4001cat > $TMPC << EOF
4002#include <sys/auxv.h>
4003int main(void) {
4004 return getauxval(AT_HWCAP) == 0;
4005}
4006EOF
4007if compile_prog "" "" ; then
4008 getauxval=yes
4009fi
4010
fd0e6053
JS
4011########################################
4012# check if ccache is interfering with
4013# semantic analysis of macros
4014
5e4dfd3d 4015unset CCACHE_CPP2
fd0e6053
JS
4016ccache_cpp2=no
4017cat > $TMPC << EOF
4018static const int Z = 1;
4019#define fn() ({ Z; })
4020#define TAUT(X) ((X) == Z)
4021#define PAREN(X, Y) (X == Y)
4022#define ID(X) (X)
4023int main(int argc, char *argv[])
4024{
4025 int x = 0, y = 0;
4026 x = ID(x);
4027 x = fn();
4028 fn();
4029 if (PAREN(x, y)) return 0;
4030 if (TAUT(Z)) return 0;
4031 return 0;
4032}
4033EOF
4034
4035if ! compile_object "-Werror"; then
4036 ccache_cpp2=yes
4037fi
4038
b553a042
JS
4039#################################################
4040# clang does not support glibc + FORTIFY_SOURCE.
4041
4042if test "$fortify_source" != "no"; then
4043 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4044 fortify_source="no";
e189091f 4045 elif test -n "$cxx" && has $cxx &&
cfcc7c14 4046 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
b553a042
JS
4047 fortify_source="no";
4048 else
4049 fortify_source="yes"
4050 fi
4051fi
4052
277abf15
JV
4053##########################################
4054# check if struct fsxattr is available via linux/fs.h
4055
4056have_fsxattr=no
4057cat > $TMPC << EOF
4058#include <linux/fs.h>
4059struct fsxattr foo;
4060int main(void) {
4061 return 0;
4062}
4063EOF
4064if compile_prog "" "" ; then
4065 have_fsxattr=yes
4066fi
4067
a40161cb
PB
4068##########################################
4069# check for usable membarrier system call
4070if test "$membarrier" = "yes"; then
4071 have_membarrier=no
4072 if test "$mingw32" = "yes" ; then
4073 have_membarrier=yes
4074 elif test "$linux" = "yes" ; then
4075 cat > $TMPC << EOF
4076 #include <linux/membarrier.h>
4077 #include <sys/syscall.h>
4078 #include <unistd.h>
4079 #include <stdlib.h>
4080 int main(void) {
4081 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
4082 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
4083 exit(0);
4084 }
4085EOF
4086 if compile_prog "" "" ; then
4087 have_membarrier=yes
4088 fi
4089 fi
4090 if test "$have_membarrier" = "no"; then
4091 feature_not_found "membarrier" "membarrier system call not available"
4092 fi
4093else
4094 # Do not enable it by default even for Mingw32, because it doesn't
4095 # work on Wine.
4096 membarrier=no
4097fi
4098
6a02c806
SH
4099##########################################
4100# check for usable AF_VSOCK environment
4101have_af_vsock=no
4102cat > $TMPC << EOF
4103#include <errno.h>
4104#include <sys/types.h>
4105#include <sys/socket.h>
4106#if !defined(AF_VSOCK)
4107# error missing AF_VSOCK flag
4108#endif
4109#include <linux/vm_sockets.h>
4110int main(void) {
4111 int sock, ret;
4112 struct sockaddr_vm svm;
4113 socklen_t len = sizeof(svm);
4114 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4115 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4116 if ((ret == -1) && (errno == ENOTCONN)) {
4117 return 0;
4118 }
4119 return -1;
4120}
4121EOF
4122if compile_prog "" "" ; then
4123 have_af_vsock=yes
4124fi
4125
f0d92b56
LM
4126##########################################
4127# check for usable AF_ALG environment
4f67366e 4128have_afalg=no
f0d92b56
LM
4129cat > $TMPC << EOF
4130#include <errno.h>
4131#include <sys/types.h>
4132#include <sys/socket.h>
4133#include <linux/if_alg.h>
4134int main(void) {
4135 int sock;
4136 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
4137 return sock;
4138}
4139EOF
4140if compile_prog "" "" ; then
4141 have_afalg=yes
4142fi
4143if test "$crypto_afalg" = "yes"
4144then
4145 if test "$have_afalg" != "yes"
4146 then
4147 error_exit "AF_ALG requested but could not be detected"
4148 fi
4149fi
4150
4151
247724cb
MAL
4152##########################################
4153# checks for sanitizers
4154
247724cb
MAL
4155have_asan=no
4156have_ubsan=no
d83414e1
MAL
4157have_asan_iface_h=no
4158have_asan_iface_fiber=no
247724cb
MAL
4159
4160if test "$sanitizers" = "yes" ; then
b9f44da2 4161 write_c_skeleton
247724cb
MAL
4162 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
4163 have_asan=yes
4164 fi
b9f44da2
MAL
4165
4166 # we could use a simple skeleton for flags checks, but this also
4167 # detect the static linking issue of ubsan, see also:
4168 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
4169 cat > $TMPC << EOF
4170#include <stdlib.h>
4171int main(void) {
4172 void *tmp = malloc(10);
f2dfe54c
LB
4173 if (tmp != NULL) {
4174 return *(int *)(tmp + 2);
4175 }
d1abf3fc 4176 return 1;
b9f44da2
MAL
4177}
4178EOF
247724cb
MAL
4179 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
4180 have_ubsan=yes
4181 fi
d83414e1
MAL
4182
4183 if check_include "sanitizer/asan_interface.h" ; then
4184 have_asan_iface_h=yes
4185 fi
4186
4187 cat > $TMPC << EOF
4188#include <sanitizer/asan_interface.h>
4189int main(void) {
4190 __sanitizer_start_switch_fiber(0, 0, 0);
4191 return 0;
4192}
4193EOF
4194 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
4195 have_asan_iface_fiber=yes
4196 fi
247724cb
MAL
4197fi
4198
adc28027
AB
4199##########################################
4200# checks for fuzzer
54c9e41d 4201if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
adc28027 4202 write_c_fuzzer_skeleton
dd016265 4203 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
64ed6f92
PB
4204 have_fuzzer=yes
4205 else
4206 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
4207 exit 1
adc28027
AB
4208 fi
4209fi
4210
0aebab04
LY
4211# Thread sanitizer is, for now, much noisier than the other sanitizers;
4212# keep it separate until that is not the case.
4213if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
4214 error_exit "TSAN is not supported with other sanitiziers."
4215fi
4216have_tsan=no
4217have_tsan_iface_fiber=no
4218if test "$tsan" = "yes" ; then
4219 write_c_skeleton
4220 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
4221 have_tsan=yes
4222 fi
4223 cat > $TMPC << EOF
4224#include <sanitizer/tsan_interface.h>
4225int main(void) {
4226 __tsan_create_fiber(0);
4227 return 0;
4228}
4229EOF
4230 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
4231 have_tsan_iface_fiber=yes
4232 fi
4233fi
4234
675b9b53
MAL
4235##########################################
4236# check for slirp
4237
4238case "$slirp" in
4d34a86b
PB
4239 auto | enabled | internal)
4240 # Simpler to always update submodule, even if not needed.
2d652f24 4241 git_submodules="${git_submodules} slirp"
675b9b53
MAL
4242 ;;
4243esac
4244
b8e0c493
JD
4245# Check for slirp smbd dupport
4246: ${smbd=${SMBD-/usr/sbin/smbd}}
4247if test "$slirp_smbd" != "no" ; then
4248 if test "$mingw32" = "yes" ; then
4249 if test "$slirp_smbd" = "yes" ; then
4250 error_exit "Host smbd not supported on this platform."
4251 fi
4252 slirp_smbd=no
4253 else
4254 slirp_smbd=yes
4255 fi
4256fi
4257
54e7aac0
AK
4258##########################################
4259# check for usable __NR_keyctl syscall
4260
4261if test "$linux" = "yes" ; then
4262
4263 have_keyring=no
4264 cat > $TMPC << EOF
4265#include <errno.h>
4266#include <asm/unistd.h>
4267#include <linux/keyctl.h>
4268#include <unistd.h>
4269int main(void) {
4270 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
4271}
4272EOF
4273 if compile_prog "" "" ; then
4274 have_keyring=yes
4275 fi
4276fi
4277if test "$secret_keyring" != "no"
4278then
b418d265 4279 if test "$have_keyring" = "yes"
54e7aac0
AK
4280 then
4281 secret_keyring=yes
4282 else
4283 if test "$secret_keyring" = "yes"
4284 then
4285 error_exit "syscall __NR_keyctl requested, \
4286but not implemented on your system"
4287 else
4288 secret_keyring=no
4289 fi
4290 fi
4291fi
4292
7e24e92a 4293##########################################
e86ecd4b
JQ
4294# End of CC checks
4295# After here, no more $cc or $ld runs
4296
d83414e1
MAL
4297write_c_skeleton
4298
1d728c39 4299if test "$gcov" = "yes" ; then
bf0e56a3 4300 :
b553a042 4301elif test "$fortify_source" = "yes" ; then
086d5f75
PB
4302 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
4303 debug=no
4304fi
086d5f75
PB
4305
4306case "$ARCH" in
4307alpha)
4308 # Ensure there's only a single GP
4309 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
4310;;
4311esac
4312
4313if test "$gprof" = "yes" ; then
4314 QEMU_CFLAGS="-p $QEMU_CFLAGS"
4315 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
4316fi
a316e378 4317
247724cb 4318if test "$have_asan" = "yes"; then
db5adeaa
PB
4319 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
4320 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
d83414e1
MAL
4321 if test "$have_asan_iface_h" = "no" ; then
4322 echo "ASAN build enabled, but ASAN header missing." \
4323 "Without code annotation, the report may be inferior."
4324 elif test "$have_asan_iface_fiber" = "no" ; then
4325 echo "ASAN build enabled, but ASAN header is too old." \
4326 "Without code annotation, the report may be inferior."
4327 fi
247724cb 4328fi
0aebab04
LY
4329if test "$have_tsan" = "yes" ; then
4330 if test "$have_tsan_iface_fiber" = "yes" ; then
4331 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
4332 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
4333 else
4334 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
4335 fi
4336elif test "$tsan" = "yes" ; then
4337 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
4338fi
247724cb 4339if test "$have_ubsan" = "yes"; then
db5adeaa
PB
4340 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
4341 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
247724cb
MAL
4342fi
4343
3efac6eb 4344##########################################
3efac6eb 4345
0aebab04
LY
4346# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
4347if test "$solaris" = "no" && test "$tsan" = "no"; then
e86ecd4b 4348 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
db5adeaa 4349 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
e86ecd4b
JQ
4350 fi
4351fi
4352
952afb71
BS
4353# Use ASLR, no-SEH and DEP if available
4354if test "$mingw32" = "yes" ; then
cb8baa77
MCA
4355 flags="--no-seh --nxcompat"
4356
4357 # Disable ASLR for debug builds to allow debugging with gdb
4358 if test "$debug" = "no" ; then
4359 flags="--dynamicbase $flags"
4360 fi
4361
4362 for flag in $flags; do
e9a3591f 4363 if ld_has $flag ; then
db5adeaa 4364 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
952afb71
BS
4365 fi
4366 done
4367fi
4368
9d6bc27b
MR
4369# Probe for guest agent support/options
4370
e8ef31a3 4371if [ "$guest_agent" != "no" ]; then
a5125905
LV
4372 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
4373 guest_agent=no
4374 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
e8ef31a3
MT
4375 guest_agent=yes
4376 elif [ "$guest_agent" != yes ]; then
4377 guest_agent=no
4378 else
4379 error_exit "Guest agent is not supported on this platform"
ca35f780 4380 fi
00c705fb 4381fi
ca35f780 4382
b846ab7c 4383# Guest agent Windows MSI package
9d6bc27b 4384
b846ab7c
PB
4385if test "$QEMU_GA_MANUFACTURER" = ""; then
4386 QEMU_GA_MANUFACTURER=QEMU
9d6bc27b 4387fi
b846ab7c
PB
4388if test "$QEMU_GA_DISTRO" = ""; then
4389 QEMU_GA_DISTRO=Linux
9d6bc27b 4390fi
b846ab7c
PB
4391if test "$QEMU_GA_VERSION" = ""; then
4392 QEMU_GA_VERSION=$(cat $source_path/VERSION)
4393fi
4394
4395QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
9d6bc27b 4396
ca35f780
PB
4397# Mac OS X ships with a broken assembler
4398roms=
e633a5c6
EB
4399if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
4400 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
7000a12e 4401 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
e57218b6 4402 # Different host OS linkers have different ideas about the name of the ELF
c65d5e4e
BS
4403 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
4404 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
4405 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
e57218b6
PM
4406 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4407 ld_i386_emulation="$emu"
4408 roms="optionrom"
4409 break
4410 fi
4411 done
ca35f780 4412fi
ca35f780 4413
2e33c3f8 4414# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
a5b2afd5 4415# or -march=z10 (which is the lowest architecture level that Clang supports)
9933c305 4416if test "$cpu" = "s390x" ; then
2e33c3f8 4417 write_c_skeleton
a5b2afd5
TH
4418 compile_prog "-march=z900" ""
4419 has_z900=$?
3af448b3 4420 if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then
a5b2afd5
TH
4421 if [ $has_z900 != 0 ]; then
4422 echo "WARNING: Your compiler does not support the z900!"
4423 echo " The s390-ccw bios will only work with guest CPUs >= z10."
4424 fi
2e33c3f8 4425 roms="$roms s390-ccw"
1ef6bfc2
PMD
4426 # SLOF is required for building the s390-ccw firmware on s390x,
4427 # since it is using the libnet code from SLOF for network booting.
2d652f24 4428 git_submodules="${git_submodules} roms/SLOF"
2e33c3f8 4429 fi
9933c305
CB
4430fi
4431
11cde1c8
BD
4432# Check that the C++ compiler exists and works with the C compiler.
4433# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
4434if has $cxx; then
4435 cat > $TMPC <<EOF
4436int c_function(void);
4437int main(void) { return c_function(); }
4438EOF
4439
4440 compile_object
4441
4442 cat > $TMPCXX <<EOF
4443extern "C" {
4444 int c_function(void);
4445}
4446int c_function(void) { return 42; }
4447EOF
4448
4449 update_cxxflags
4450
5770e8af 4451 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
11cde1c8
BD
4452 # C++ compiler $cxx works ok with C compiler $cc
4453 :
4454 else
4455 echo "C++ compiler $cxx does not work with C compiler $cc"
4456 echo "Disabling C++ specific optional code"
4457 cxx=
4458 fi
4459else
4460 echo "No C++ compiler available; disabling C++ specific optional code"
4461 cxx=
4462fi
4463
7d7dbf9d
DS
4464if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
4465 exit 1
5d91a2ed 4466fi
5d91a2ed 4467
98ec69ac 4468config_host_mak="config-host.mak"
98ec69ac 4469
98ec69ac 4470echo "# Automatically generated by configure - do not modify" > $config_host_mak
98ec69ac 4471echo >> $config_host_mak
98ec69ac 4472
e6c3b0f7 4473echo all: >> $config_host_mak
cc84d63a 4474echo "GIT=$git" >> $config_host_mak
aef45d51 4475echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
7d7dbf9d 4476echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
804edf29 4477
98ec69ac 4478echo "ARCH=$ARCH" >> $config_host_mak
727e5283 4479
f8393946 4480if test "$debug_tcg" = "yes" ; then
2358a494 4481 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
f8393946 4482fi
1625af87 4483if test "$strip_opt" = "yes" ; then
52ba784d 4484 echo "STRIP=${strip}" >> $config_host_mak
1625af87 4485fi
7d13299d 4486if test "$bigendian" = "yes" ; then
e2542fe2 4487 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
97a847bc 4488fi
67b915a5 4489if test "$mingw32" = "yes" ; then
98ec69ac 4490 echo "CONFIG_WIN32=y" >> $config_host_mak
d9840e25
TS
4491 if test "$guest_agent_with_vss" = "yes" ; then
4492 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
f33ca81f 4493 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
d9840e25
TS
4494 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4495 fi
50cbebb9 4496 if test "$guest_agent_ntddscsi" = "yes" ; then
76dc75ca 4497 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
50cbebb9 4498 fi
b846ab7c
PB
4499 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4500 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4501 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4502 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
210fa556 4503else
35f4df27 4504 echo "CONFIG_POSIX=y" >> $config_host_mak
dffcb71c
MM
4505fi
4506
4507if test "$linux" = "yes" ; then
4508 echo "CONFIG_LINUX=y" >> $config_host_mak
67b915a5 4509fi
128ab2ff 4510
83fb7adf 4511if test "$darwin" = "yes" ; then
98ec69ac 4512 echo "CONFIG_DARWIN=y" >> $config_host_mak
83fb7adf 4513fi
b29fe3ed 4514
ec530c81 4515if test "$solaris" = "yes" ; then
98ec69ac 4516 echo "CONFIG_SOLARIS=y" >> $config_host_mak
ec530c81 4517fi
179cf400
AF
4518if test "$haiku" = "yes" ; then
4519 echo "CONFIG_HAIKU=y" >> $config_host_mak
4520fi
97a847bc 4521if test "$static" = "yes" ; then
98ec69ac 4522 echo "CONFIG_STATIC=y" >> $config_host_mak
7d13299d 4523fi
1ba16968 4524if test "$profiler" = "yes" ; then
2358a494 4525 echo "CONFIG_PROFILER=y" >> $config_host_mak
05c2a3e7 4526fi
c932ce31
PB
4527if test "$want_tools" = "yes" ; then
4528 echo "CONFIG_TOOLS=y" >> $config_host_mak
4529fi
f15bff25
PB
4530if test "$guest_agent" = "yes" ; then
4531 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
4532fi
b8e0c493
JD
4533if test "$slirp_smbd" = "yes" ; then
4534 echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
4535 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4536fi
8a16d273 4537if test "$vde" = "yes" ; then
98ec69ac 4538 echo "CONFIG_VDE=y" >> $config_host_mak
e2ad6f16 4539 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
8a16d273 4540fi
58952137
VM
4541if test "$netmap" = "yes" ; then
4542 echo "CONFIG_NETMAP=y" >> $config_host_mak
4543fi
015a33bd
GA
4544if test "$l2tpv3" = "yes" ; then
4545 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4546fi
4cc600d2
PB
4547if test "$gprof" = "yes" ; then
4548 echo "CONFIG_GPROF=y" >> $config_host_mak
4549fi
2358a494 4550echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
0c58ac1c 4551for drv in $audio_drv_list; do
1ef1ec2a 4552 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
484e2cc7 4553 echo "$def=y" >> $config_host_mak
0c58ac1c 4554done
478e943f
PB
4555if test "$alsa" = "yes" ; then
4556 echo "CONFIG_ALSA=y" >> $config_host_mak
4557fi
b1149911 4558echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
478e943f
PB
4559echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
4560if test "$libpulse" = "yes" ; then
4561 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
4562fi
b1149911 4563echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
478e943f 4564echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
b1149911
FZ
4565echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
4566echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
4567echo "OSS_LIBS=$oss_libs" >> $config_host_mak
478e943f
PB
4568if test "$libjack" = "yes" ; then
4569 echo "CONFIG_LIBJACK=y" >> $config_host_mak
4570fi
2e445703 4571echo "JACK_LIBS=$jack_libs" >> $config_host_mak
d5631638 4572if test "$audio_win_int" = "yes" ; then
4573 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4574fi
b64ec4e4
FZ
4575echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4576echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
e5f05f8c
KW
4577if test "$block_drv_whitelist_tools" = "yes" ; then
4578 echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
4579fi
dce512de
CH
4580if test "$xfs" = "yes" ; then
4581 echo "CONFIG_XFS=y" >> $config_host_mak
4582fi
89138857 4583qemu_version=$(head $source_path/VERSION)
2358a494 4584echo "PKGVERSION=$pkgversion" >>$config_host_mak
98ec69ac 4585echo "SRC_PATH=$source_path" >> $config_host_mak
2b1f35b9 4586echo "TARGET_DIRS=$target_list" >> $config_host_mak
17969268 4587if test "$modules" = "yes"; then
e26110cf
FZ
4588 # $shacmd can generate a hash started with digit, which the compiler doesn't
4589 # like as an symbol. So prefix it with an underscore
89138857 4590 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
17969268
FZ
4591 echo "CONFIG_MODULES=y" >> $config_host_mak
4592fi
bd83c861
CE
4593if test "$module_upgrades" = "yes"; then
4594 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
4595fi
955727d2
CT
4596if test "$have_usbfs" = "yes" ; then
4597 echo "CONFIG_USBFS=y" >> $config_host_mak
4598fi
f876b765
MAL
4599if test "$gio" = "yes" ; then
4600 echo "CONFIG_GIO=y" >> $config_host_mak
4601 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
4602 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
5ecfb76c
PB
4603fi
4604if test "$gdbus_codegen" != "" ; then
25a97a56 4605 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
f876b765 4606fi
a1c5e949 4607echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
277abf15
JV
4608
4609# Work around a system header bug with some kernel/XFS header
4610# versions where they both try to define 'struct fsxattr':
4611# xfs headers will not try to redefine structs from linux headers
4612# if this macro is set.
4613if test "$have_fsxattr" = "yes" ; then
4614 echo "HAVE_FSXATTR=y" >> $config_host_mak
4615fi
1badb709 4616if test "$xen" = "enabled" ; then
6dbd588a 4617 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
d5b93ddf 4618 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
582ea95f
MAL
4619 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
4620 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
e37630ca 4621fi
5c6c3a6c
CH
4622if test "$linux_aio" = "yes" ; then
4623 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4624fi
5e9be92d
NB
4625if test "$vhost_scsi" = "yes" ; then
4626 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4627fi
af3bba76
PB
4628if test "$vhost_net" = "yes" ; then
4629 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
4630fi
4631if test "$vhost_net_user" = "yes" ; then
56f41de7 4632 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
03ce5744 4633fi
108a6481
CL
4634if test "$vhost_net_vdpa" = "yes" ; then
4635 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
4636fi
042cea27
GA
4637if test "$vhost_crypto" = "yes" ; then
4638 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
4639fi
fc0b9b0e
SH
4640if test "$vhost_vsock" = "yes" ; then
4641 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5fe97d88
SG
4642 if test "$vhost_user" = "yes" ; then
4643 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
4644 fi
fc0b9b0e 4645fi
299e6f19
PB
4646if test "$vhost_kernel" = "yes" ; then
4647 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
4648fi
e6a74868
MAL
4649if test "$vhost_user" = "yes" ; then
4650 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
4651fi
108a6481
CL
4652if test "$vhost_vdpa" = "yes" ; then
4653 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
4654fi
98fc1ada
DDAG
4655if test "$vhost_user_fs" = "yes" ; then
4656 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
4657fi
bf9298b9 4658if test "$iovec" = "yes" ; then
2358a494 4659 echo "CONFIG_IOVEC=y" >> $config_host_mak
bf9298b9 4660fi
a40161cb
PB
4661if test "$membarrier" = "yes" ; then
4662 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
4663fi
e5b46549
RH
4664if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
4665 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4666fi
58d3f3ff
GH
4667
4668if test "$spice_protocol" = "yes" ; then
4669 echo "CONFIG_SPICE_PROTOCOL=y" >> $config_host_mak
4670 echo "SPICE_PROTOCOL_CFLAGS=$spice_protocol_cflags" >> $config_host_mak
4671fi
cd4ec0b4
GH
4672if test "$spice" = "yes" ; then
4673 echo "CONFIG_SPICE=y" >> $config_host_mak
58d3f3ff 4674 echo "SPICE_CFLAGS=$spice_cflags $spice_protocol_cflags" >> $config_host_mak
2634733c 4675 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
cd4ec0b4 4676fi
36707144 4677
da076ffe
GH
4678if test "$opengl" = "yes" ; then
4679 echo "CONFIG_OPENGL=y" >> $config_host_mak
de2d3005 4680 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
da076ffe 4681 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
20ff075b
MW
4682fi
4683
d52c454a
MAL
4684if test "$gbm" = "yes" ; then
4685 echo "CONFIG_GBM=y" >> $config_host_mak
4686 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
4687 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
4688fi
4689
4690
99f2dbd3
LL
4691if test "$avx2_opt" = "yes" ; then
4692 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
4693fi
4694
6b8cd447
RH
4695if test "$avx512f_opt" = "yes" ; then
4696 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
4697fi
4698
83fb7adf 4699# XXX: suppress that
7d3505c5 4700if [ "$bsd" = "yes" ] ; then
2358a494 4701 echo "CONFIG_BSD=y" >> $config_host_mak
7d3505c5
FB
4702fi
4703
3556c233
PB
4704if test "$qom_cast_debug" = "yes" ; then
4705 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4706fi
d0e2fce5 4707
7c2acc70 4708echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
70c60c08
SH
4709if test "$coroutine_pool" = "yes" ; then
4710 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4711else
4712 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4713fi
20ff6c80 4714
7d992e4d
PL
4715if test "$debug_stack_usage" = "yes" ; then
4716 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
4717fi
4718
f0d92b56
LM
4719if test "$crypto_afalg" = "yes" ; then
4720 echo "CONFIG_AF_ALG=y" >> $config_host_mak
4721fi
4722
d83414e1
MAL
4723if test "$have_asan_iface_fiber" = "yes" ; then
4724 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
4725fi
4726
0aebab04
LY
4727if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
4728 echo "CONFIG_TSAN=y" >> $config_host_mak
4729fi
4730
76a347e1
RH
4731if test "$cpuid_h" = "yes" ; then
4732 echo "CONFIG_CPUID_H=y" >> $config_host_mak
4733fi
4734
f540166b
RH
4735if test "$int128" = "yes" ; then
4736 echo "CONFIG_INT128=y" >> $config_host_mak
4737fi
4738
7ebee43e
RH
4739if test "$atomic128" = "yes" ; then
4740 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
4741fi
4742
e6cd4bb5
RH
4743if test "$cmpxchg128" = "yes" ; then
4744 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
4745fi
4746
df79b996
RH
4747if test "$atomic64" = "yes" ; then
4748 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
4749fi
4750
1e6e9aca
RH
4751if test "$getauxval" = "yes" ; then
4752 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4753fi
4754
b10d49d7 4755if test "$libssh" = "yes" ; then
484e2cc7 4756 echo "CONFIG_LIBSSH=y" >> $config_host_mak
b10d49d7
PT
4757 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
4758 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
0a12ec87
RJ
4759fi
4760
ed1701c6
DDAG
4761if test "$live_block_migration" = "yes" ; then
4762 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
4763fi
4764
3b8acc11 4765if test "$tpm" = "yes"; then
3cae16db 4766 echo 'CONFIG_TPM=y' >> $config_host_mak
3b8acc11
PB
4767fi
4768
5b808275
LV
4769echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
4770if have_backend "nop"; then
6d8a764e 4771 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
22890ab5 4772fi
5b808275 4773if have_backend "simple"; then
6d8a764e
LV
4774 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
4775 # Set the appropriate trace file.
953ffe0f 4776 trace_file="\"$trace_file-\" FMT_pid"
9410b56c 4777fi
ed7f5f1d
PB
4778if have_backend "log"; then
4779 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6d8a764e 4780fi
5b808275 4781if have_backend "ust"; then
6d8a764e 4782 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
a81df1b6 4783 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6d8a764e 4784fi
5b808275 4785if have_backend "dtrace"; then
6d8a764e
LV
4786 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
4787 if test "$trace_backend_stap" = "yes" ; then
4788 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
4789 fi
c276b17d 4790fi
5b808275 4791if have_backend "ftrace"; then
781e9545
ET
4792 if test "$linux" = "yes" ; then
4793 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
781e9545 4794 else
21684af0 4795 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
781e9545
ET
4796 fi
4797fi
0a852417
PD
4798if have_backend "syslog"; then
4799 if test "$posix_syslog" = "yes" ; then
4800 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
4801 else
4802 feature_not_found "syslog(trace backend)" "syslog not available"
4803 fi
4804fi
9410b56c
PS
4805echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
4806
2da776db
MH
4807if test "$rdma" = "yes" ; then
4808 echo "CONFIG_RDMA=y" >> $config_host_mak
392fb643 4809 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
2da776db
MH
4810fi
4811
21ab34c9
MA
4812if test "$pvrdma" = "yes" ; then
4813 echo "CONFIG_PVRDMA=y" >> $config_host_mak
4814fi
4815
a6b1d4c0
CX
4816if test "$replication" = "yes" ; then
4817 echo "CONFIG_REPLICATION=y" >> $config_host_mak
4818fi
4819
6a02c806
SH
4820if test "$have_af_vsock" = "yes" ; then
4821 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
4822fi
4823
ba59fb77
PB
4824if test "$debug_mutex" = "yes" ; then
4825 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
4826fi
e0580342 4827
5c312079
DDAG
4828# Hold two types of flag:
4829# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
4830# a thread we have a handle to
479a5747 4831# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
5c312079 4832# platform
479a5747
RB
4833if test "$pthread_setname_np_w_tid" = "yes" ; then
4834 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
4835 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
4836elif test "$pthread_setname_np_wo_tid" = "yes" ; then
5c312079 4837 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
479a5747 4838 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
5c312079
DDAG
4839fi
4840
2f740136
JC
4841if test "$bochs" = "yes" ; then
4842 echo "CONFIG_BOCHS=y" >> $config_host_mak
4843fi
4844if test "$cloop" = "yes" ; then
4845 echo "CONFIG_CLOOP=y" >> $config_host_mak
4846fi
4847if test "$dmg" = "yes" ; then
4848 echo "CONFIG_DMG=y" >> $config_host_mak
4849fi
4850if test "$qcow1" = "yes" ; then
4851 echo "CONFIG_QCOW1=y" >> $config_host_mak
4852fi
4853if test "$vdi" = "yes" ; then
4854 echo "CONFIG_VDI=y" >> $config_host_mak
4855fi
4856if test "$vvfat" = "yes" ; then
4857 echo "CONFIG_VVFAT=y" >> $config_host_mak
4858fi
4859if test "$qed" = "yes" ; then
4860 echo "CONFIG_QED=y" >> $config_host_mak
4861fi
4862if test "$parallels" = "yes" ; then
4863 echo "CONFIG_PARALLELS=y" >> $config_host_mak
4864fi
195588cc
DC
4865if test "$have_mlockall" = "yes" ; then
4866 echo "HAVE_MLOCKALL=y" >> $config_host_mak
4867fi
adc28027 4868if test "$fuzzing" = "yes" ; then
54c9e41d
AB
4869 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
4870 # needed CFLAGS have already been provided
4871 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
efce01bc
AB
4872 # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
4873 # compiled code.
54c9e41d 4874 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
efce01bc
AB
4875 # To build non-fuzzer binaries with --enable-fuzzing, link everything with
4876 # fsanitize=fuzzer-no-link. Otherwise, the linker will be unable to bind
4877 # the fuzzer-related callbacks added by instrumentation.
4878 QEMU_LDFLAGS="$QEMU_LDFLAGS -fsanitize=fuzzer-no-link"
4879 # For the actual fuzzer binaries, we need to link against the libfuzzer
4880 # library. Provide the flags for doing this in FUZZ_EXE_LDFLAGS. The meson
4881 # rule for the fuzzer adds these to the link_args. They need to be
4882 # configurable, to support OSS-Fuzz
54c9e41d
AB
4883 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
4884 else
4885 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
4886 fi
adc28027 4887fi
2f740136 4888
40e8c6f4
AB
4889if test "$plugins" = "yes" ; then
4890 echo "CONFIG_PLUGIN=y" >> $config_host_mak
26fffe29
EC
4891 # Copy the export object list to the build dir
4892 if test "$ld_dynamic_list" = "yes" ; then
4893 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
4894 ld_symbols=qemu-plugins-ld.symbols
4895 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
4896 elif test "$ld_exported_symbols_list" = "yes" ; then
4897 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
4898 ld64_symbols=qemu-plugins-ld64.symbols
4899 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
4900 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
4901 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
4902 else
4903 error_exit \
4904 "If \$plugins=yes, either \$ld_dynamic_list or " \
4905 "\$ld_exported_symbols_list should have been set to 'yes'."
4906 fi
40e8c6f4
AB
4907fi
4908
b1863ccc
AB
4909if test -n "$gdb_bin"; then
4910 gdb_version=$($gdb_bin --version | head -n 1)
d6a66c81 4911 if version_ge ${gdb_version##* } 9.1; then
b1863ccc
AB
4912 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
4913 fi
f48e590a
AB
4914fi
4915
54e7aac0
AK
4916if test "$secret_keyring" = "yes" ; then
4917 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
4918fi
4919
98ec69ac 4920echo "ROMS=$roms" >> $config_host_mak
804edf29 4921echo "MAKE=$make" >> $config_host_mak
c886edfb 4922echo "PYTHON=$python" >> $config_host_mak
39d87c8c 4923echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
a5665051 4924echo "MESON=$meson" >> $config_host_mak
09e93326 4925echo "NINJA=$ninja" >> $config_host_mak
804edf29 4926echo "CC=$cc" >> $config_host_mak
433de74c 4927echo "HOST_CC=$host_cc" >> $config_host_mak
a31a8642 4928if $iasl -h > /dev/null 2>&1; then
859aef02 4929 echo "CONFIG_IASL=$iasl" >> $config_host_mak
a31a8642 4930fi
804edf29 4931echo "AR=$ar" >> $config_host_mak
cdbd727c 4932echo "AS=$as" >> $config_host_mak
5f6f0e27 4933echo "CCAS=$ccas" >> $config_host_mak
3dd46c78 4934echo "CPP=$cpp" >> $config_host_mak
804edf29
JQ
4935echo "OBJCOPY=$objcopy" >> $config_host_mak
4936echo "LD=$ld" >> $config_host_mak
46eef33b 4937echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
a558ee17 4938echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
11cde1c8 4939echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
a81df1b6
PB
4940echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4941echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
8a99e9a3 4942echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
e57218b6 4943echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
804edf29 4944echo "EXESUF=$EXESUF" >> $config_host_mak
484e2cc7 4945echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
f15bff25 4946echo "LIBS_QGA=$libs_qga" >> $config_host_mak
1d728c39
BS
4947if test "$gcov" = "yes" ; then
4948 echo "CONFIG_GCOV=y" >> $config_host_mak
1d728c39 4949fi
804edf29 4950
adc28027
AB
4951if test "$fuzzing" != "no"; then
4952 echo "CONFIG_FUZZ=y" >> $config_host_mak
adc28027 4953fi
54c9e41d 4954echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
3efac6eb 4955
b767d257
MMG
4956if test "$rng_none" = "yes"; then
4957 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
4958fi
4959
6efd7517
PM
4960# use included Linux headers
4961if test "$linux" = "yes" ; then
a307beb6 4962 mkdir -p linux-headers
6efd7517 4963 case "$cpu" in
c72b26ec 4964 i386|x86_64|x32)
08312a63 4965 linux_arch=x86
6efd7517 4966 ;;
f8378acc 4967 ppc|ppc64|ppc64le)
08312a63 4968 linux_arch=powerpc
6efd7517
PM
4969 ;;
4970 s390x)
08312a63
PM
4971 linux_arch=s390
4972 ;;
1f080313
CF
4973 aarch64)
4974 linux_arch=arm64
4975 ;;
222e7d11
SL
4976 mips64)
4977 linux_arch=mips
4978 ;;
08312a63
PM
4979 *)
4980 # For most CPUs the kernel architecture name and QEMU CPU name match.
4981 linux_arch="$cpu"
6efd7517
PM
4982 ;;
4983 esac
08312a63
PM
4984 # For non-KVM architectures we will not have asm headers
4985 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
4986 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
4987 fi
6efd7517
PM
4988fi
4989
1d14ffa9 4990for target in $target_list; do
fdb75aef
PB
4991 target_dir="$target"
4992 target_name=$(echo $target | cut -d '-' -f 1)
4993 mkdir -p $target_dir
4994 case $target in
4995 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
4996 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
4997 esac
4998done
7d13299d 4999
765686d6 5000echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
fdb75aef
PB
5001if test "$default_targets" = "yes"; then
5002 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
5003fi
a540f158 5004
a99d57bb
WG
5005if test "$numa" = "yes"; then
5006 echo "CONFIG_NUMA=y" >> $config_host_mak
ab318051 5007 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
a99d57bb
WG
5008fi
5009
fd0e6053
JS
5010if test "$ccache_cpp2" = "yes"; then
5011 echo "export CCACHE_CPP2=y" >> $config_host_mak
5012fi
5013
1e4f6065
DB
5014if test "$safe_stack" = "yes"; then
5015 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
5016fi
5017
e29e5c6e
PM
5018# If we're using a separate build tree, set it up now.
5019# DIRS are directories which we simply mkdir in the build tree;
5020# LINKS are things to symlink back into the source tree
5021# (these can be both files and directories).
5022# Caution: do not add files or directories here using wildcards. This
5023# will result in problems later if a new file matching the wildcard is
5024# added to the source tree -- nothing will cause configure to be rerun
5025# so the build tree will be missing the link back to the new file, and
5026# tests might fail. Prefer to keep the relevant files in their own
5027# directory and symlink the directory instead.
09db9b9d
GH
5028# UNLINK is used to remove symlinks from older development versions
5029# that might get into the way when doing "git update" without doing
5030# a "make distclean" in between.
9d49bcf6 5031DIRS="tests tests/tcg tests/qapi-schema tests/qtest/libqos"
1cf4323e 5032DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
b855f8d1 5033DIRS="$DIRS docs docs/interop fsdev scsi"
744a928c 5034DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8db2a4fd 5035DIRS="$DIRS roms/seabios"
c17a386b 5036DIRS="$DIRS contrib/plugins/"
2038f8c8 5037LINKS="Makefile"
3941996b 5038LINKS="$LINKS tests/tcg/Makefile.target"
ddcf607f 5039LINKS="$LINKS pc-bios/optionrom/Makefile"
e29e5c6e 5040LINKS="$LINKS pc-bios/s390-ccw/Makefile"
8db2a4fd 5041LINKS="$LINKS roms/seabios/Makefile"
e29e5c6e
PM
5042LINKS="$LINKS pc-bios/qemu-icon.bmp"
5043LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
39950353
PM
5044LINKS="$LINKS tests/acceptance tests/data"
5045LINKS="$LINKS tests/qemu-iotests/check"
8f8fd9ed 5046LINKS="$LINKS python"
c17a386b 5047LINKS="$LINKS contrib/plugins/Makefile "
09db9b9d 5048UNLINK="pc-bios/keymaps"
753d11f2
RH
5049for bios_file in \
5050 $source_path/pc-bios/*.bin \
3a631b8e 5051 $source_path/pc-bios/*.elf \
225a9ab8 5052 $source_path/pc-bios/*.lid \
753d11f2
RH
5053 $source_path/pc-bios/*.rom \
5054 $source_path/pc-bios/*.dtb \
e89e33e1 5055 $source_path/pc-bios/*.img \
753d11f2 5056 $source_path/pc-bios/openbios-* \
4e73c781 5057 $source_path/pc-bios/u-boot.* \
26ce90fd 5058 $source_path/pc-bios/edk2-*.fd.bz2 \
753d11f2
RH
5059 $source_path/pc-bios/palcode-*
5060do
e29e5c6e 5061 LINKS="$LINKS pc-bios/$(basename $bios_file)"
d1807a4f
PB
5062done
5063mkdir -p $DIRS
e29e5c6e 5064for f in $LINKS ; do
0f4d8894 5065 if [ -e "$source_path/$f" ]; then
f9245e10
PM
5066 symlink "$source_path/$f" "$f"
5067 fi
d1807a4f 5068done
09db9b9d
GH
5069for f in $UNLINK ; do
5070 if [ -L "$f" ]; then
5071 rm -f "$f"
5072 fi
5073done
1ad2134f 5074
2038f8c8
PB
5075(for i in $cross_cc_vars; do
5076 export $i
5077done
de6d7e6b 5078export target_list source_path use_containers ARCH
2038f8c8
PB
5079$source_path/tests/tcg/configure.sh)
5080
c34ebfdc 5081# temporary config to build submodules
8db2a4fd 5082for rom in seabios; do
c34ebfdc 5083 config_mak=roms/$rom/config.mak
37116c89 5084 echo "# Automatically generated by configure - do not modify" > $config_mak
c34ebfdc 5085 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
cdbd727c 5086 echo "AS=$as" >> $config_mak
5f6f0e27 5087 echo "CCAS=$ccas" >> $config_mak
c34ebfdc
AL
5088 echo "CC=$cc" >> $config_mak
5089 echo "BCC=bcc" >> $config_mak
3dd46c78 5090 echo "CPP=$cpp" >> $config_mak
c34ebfdc 5091 echo "OBJCOPY=objcopy" >> $config_mak
a31a8642 5092 echo "IASL=$iasl" >> $config_mak
c34ebfdc 5093 echo "LD=$ld" >> $config_mak
9f81aeb5 5094 echo "RANLIB=$ranlib" >> $config_mak
c34ebfdc
AL
5095done
5096
a5665051 5097if test "$skip_meson" = no; then
d77e90fa
PB
5098 cross="config-meson.cross.new"
5099 meson_quote() {
47b30835 5100 echo "'$(echo $* | sed "s/ /','/g")'"
d77e90fa
PB
5101 }
5102
5103 echo "# Automatically generated by configure - do not modify" > $cross
5104 echo "[properties]" >> $cross
d1d5e9ee
AB
5105
5106 # unroll any custom device configs
11bdcfcd
AB
5107 for a in $device_archs; do
5108 eval "c=\$devices_${a}"
5109 echo "${a}-softmmu = '$c'" >> $cross
5110 done
d1d5e9ee 5111
d77e90fa
PB
5112 test -z "$cxx" && echo "link_language = 'c'" >> $cross
5113 echo "[built-in options]" >> $cross
5114 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
5115 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
5116 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
5117 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
5118 echo "[binaries]" >> $cross
5119 echo "c = [$(meson_quote $cc)]" >> $cross
5120 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
5121 test -n "$objcc" && echo "objc = [$(meson_quote $objcc)]" >> $cross
5122 echo "ar = [$(meson_quote $ar)]" >> $cross
5123 echo "nm = [$(meson_quote $nm)]" >> $cross
5124 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
5125 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
5126 if has $sdl2_config; then
5127 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
5128 fi
5129 echo "strip = [$(meson_quote $strip)]" >> $cross
5130 echo "windres = [$(meson_quote $windres)]" >> $cross
5131 if test "$cross_compile" = "yes"; then
fc929892 5132 cross_arg="--cross-file config-meson.cross"
fc929892
MAL
5133 echo "[host_machine]" >> $cross
5134 if test "$mingw32" = "yes" ; then
5135 echo "system = 'windows'" >> $cross
fc929892 5136 fi
853b4baf
TH
5137 if test "$linux" = "yes" ; then
5138 echo "system = 'linux'" >> $cross
5139 fi
0ca321ea
JD
5140 if test "$darwin" = "yes" ; then
5141 echo "system = 'darwin'" >> $cross
5142 fi
fc929892 5143 case "$ARCH" in
f6bca9df 5144 i386)
fc929892
MAL
5145 echo "cpu_family = 'x86'" >> $cross
5146 ;;
f8bb7e1c 5147 x86_64|x32)
f6bca9df
JD
5148 echo "cpu_family = 'x86_64'" >> $cross
5149 ;;
fc929892
MAL
5150 ppc64le)
5151 echo "cpu_family = 'ppc64'" >> $cross
5152 ;;
5153 *)
5154 echo "cpu_family = '$ARCH'" >> $cross
5155 ;;
5156 esac
5157 echo "cpu = '$cpu'" >> $cross
5158 if test "$bigendian" = "yes" ; then
5159 echo "endian = 'big'" >> $cross
5160 else
5161 echo "endian = 'little'" >> $cross
5162 fi
d77e90fa 5163 else
fc929892 5164 cross_arg="--native-file config-meson.cross"
d77e90fa
PB
5165 fi
5166 mv $cross config-meson.cross
fc929892 5167
d77e90fa
PB
5168 rm -rf meson-private meson-info meson-logs
5169 unset staticpic
5170 if ! version_ge "$($meson --version)" 0.56.0; then
5171 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
5172 fi
5173 NINJA=$ninja $meson setup \
d17f305a
PB
5174 --prefix "$prefix" \
5175 --libdir "$libdir" \
5176 --libexecdir "$libexecdir" \
5177 --bindir "$bindir" \
5178 --includedir "$includedir" \
5179 --datadir "$datadir" \
5180 --mandir "$mandir" \
5181 --sysconfdir "$sysconfdir" \
16bf7a33 5182 --localedir "$localedir" \
d17f305a
PB
5183 --localstatedir "$local_statedir" \
5184 -Ddocdir="$docdir" \
16bf7a33 5185 -Dqemu_firmwarepath="$firmwarepath" \
73f3aa37 5186 -Dqemu_suffix="$qemu_suffix" \
a5665051
PB
5187 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
5188 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
5189 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
5190 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
da6d48b9 5191 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
a5cb7c5a 5192 ${staticpic:+-Db_staticpic=$staticpic} \
bf0e56a3 5193 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
9e62ba48 5194 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \
5f8937d6 5195 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
74a414a1 5196 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
5f8937d6 5197 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
1b695471 5198 -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
c23d7b4e 5199 -Dlibusb=$libusb -Dsmartcard=$smartcard -Dusb_redir=$usb_redir -Dvte=$vte \
5f8937d6 5200 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
cece116c 5201 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
8c6d4ff4 5202 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
9db405a3 5203 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
30045c05 5204 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
c5b36c25 5205 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse -Dlibxml2=$libxml2 \
53c22b68 5206 -Dlibdaxctl=$libdaxctl -Dlibpmem=$libpmem -Dlinux_io_uring=$linux_io_uring \
05e391ae 5207 -Dgnutls=$gnutls -Dnettle=$nettle -Dgcrypt=$gcrypt -Dauth_pam=$auth_pam \
727c8bb8 5208 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
587d59d6 5209 -Dattr=$attr -Ddefault_devices=$default_devices -Dvirglrenderer=$virglrenderer \
c8d5450b 5210 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
106ad1f9 5211 -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
46627f41 5212 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
332008e0 5213 $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
c6fbea47 5214 -Dtcg_interpreter=$tcg_interpreter \
fc929892 5215 $cross_arg \
a5665051
PB
5216 "$PWD" "$source_path"
5217
d77e90fa
PB
5218 if test "$?" -ne 0 ; then
5219 error_exit "meson setup failed"
5220 fi
699d3884
PB
5221else
5222 if test -f meson-private/cmd_line.txt; then
5223 # Adjust old command line options whose type was changed
5224 # Avoids having to use "setup --wipe" when Meson is upgraded
5225 perl -i -ne '
5226 s/^gettext = true$/gettext = auto/;
5227 s/^gettext = false$/gettext = disabled/;
5228 print;' meson-private/cmd_line.txt
5229 fi
a5665051
PB
5230fi
5231
2d838d9b
AB
5232if test -n "${deprecated_features}"; then
5233 echo "Warning, deprecated features enabled."
a476b216 5234 echo "Please see docs/about/deprecated.rst"
2d838d9b
AB
5235 echo " features: ${deprecated_features}"
5236fi
5237
e0447a83
TH
5238# Create list of config switches that should be poisoned in common code...
5239# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
54b0306e
TH
5240target_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
5241if test -n "$target_configs_h" ; then
5242 sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
5243 -e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
5244 $target_configs_h | sort -u > config-poison.h
5245else
5246 :> config-poison.h
5247fi
e0447a83 5248
dc655404
MT
5249# Save the configure command line for later reuse.
5250cat <<EOD >config.status
5251#!/bin/sh
5252# Generated by configure.
5253# Run this file to recreate the current configuration.
5254# Compiler output produced by configure, useful for debugging
5255# configure, is in config.log if it exists.
5256EOD
e811da7f
DB
5257
5258preserve_env() {
5259 envname=$1
5260
5261 eval envval=\$$envname
5262
5263 if test -n "$envval"
5264 then
5265 echo "$envname='$envval'" >> config.status
5266 echo "export $envname" >> config.status
5267 else
5268 echo "unset $envname" >> config.status
5269 fi
5270}
5271
5272# Preserve various env variables that influence what
5273# features/build target configure will detect
5274preserve_env AR
5275preserve_env AS
5276preserve_env CC
5277preserve_env CPP
5278preserve_env CXX
5279preserve_env INSTALL
5280preserve_env LD
5281preserve_env LD_LIBRARY_PATH
5282preserve_env LIBTOOL
5283preserve_env MAKE
5284preserve_env NM
5285preserve_env OBJCOPY
5286preserve_env PATH
5287preserve_env PKG_CONFIG
5288preserve_env PKG_CONFIG_LIBDIR
5289preserve_env PKG_CONFIG_PATH
5290preserve_env PYTHON
e811da7f
DB
5291preserve_env SDL2_CONFIG
5292preserve_env SMBD
5293preserve_env STRIP
5294preserve_env WINDRES
5295
dc655404 5296printf "exec" >>config.status
a5665051 5297for i in "$0" "$@"; do
835af899 5298 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
a5665051 5299done
cf7cc929 5300echo ' "$@"' >>config.status
dc655404
MT
5301chmod +x config.status
5302
8cd05ab6 5303rm -r "$TMPDIR1"