xref: /openbmc/qemu/configure (revision 708eab42dc75304473f23ea1ead06d579dcb7566)
1 7d13299dSbellard#!/bin/sh
2 7d13299dSbellard#
3 3ef693a0Sbellard# qemu configure script (c) 2003 Fabrice Bellard
4 7d13299dSbellard#
5 8cd05ab6SPeter Maydell
6 99519e67SCornelia Huck# Unset some variables known to interfere with behavior of common tools,
7 99519e67SCornelia Huck# just as autoconf does.
8 99519e67SCornelia HuckCLICOLOR_FORCE= GREP_OPTIONS=
9 99519e67SCornelia Huckunset CLICOLOR_FORCE GREP_OPTIONS
10 99519e67SCornelia Huck
11 5e4dfd3dSJohn Snow# Don't allow CCACHE, if present, to use cached results of compile tests!
12 5e4dfd3dSJohn Snowexport CCACHE_RECACHE=yes
13 5e4dfd3dSJohn Snow
14 dedad027SDaniel P. Berrangé# make source path absolute
15 dedad027SDaniel P. Berrangésource_path=$(cd "$(dirname -- "$0")"; pwd)
16 dedad027SDaniel P. Berrangé
17 dedad027SDaniel P. Berrangéif test "$PWD" = "$source_path"
18 dedad027SDaniel P. Berrangéthen
19 dedad027SDaniel P. Berrangé    echo "Using './build' as the directory for build output"
20 dedad027SDaniel P. Berrangé
21 dedad027SDaniel P. Berrangé    MARKER=build/auto-created-by-configure
22 dedad027SDaniel P. Berrangé
23 dedad027SDaniel P. Berrangé    if test -e build
24 dedad027SDaniel P. Berrangé    then
25 dedad027SDaniel P. Berrangé        if test -f $MARKER
26 dedad027SDaniel P. Berrangé        then
27 dedad027SDaniel P. Berrangé           rm -rf build
28 dedad027SDaniel P. Berrangé        else
29 dedad027SDaniel P. Berrangé            echo "ERROR: ./build dir already exists and was not previously created by configure"
30 dedad027SDaniel P. Berrangé            exit 1
31 dedad027SDaniel P. Berrangé        fi
32 dedad027SDaniel P. Berrangé    fi
33 dedad027SDaniel P. Berrangé
34 dedad027SDaniel P. Berrangé    mkdir build
35 dedad027SDaniel P. Berrangé    touch $MARKER
36 dedad027SDaniel P. Berrangé
37 dedad027SDaniel P. Berrangé    cat > GNUmakefile <<'EOF'
38 dedad027SDaniel P. Berrangé# This file is auto-generated by configure to support in-source tree
39 dedad027SDaniel P. Berrangé# 'make' command invocation
40 dedad027SDaniel P. Berrangé
41 dedad027SDaniel P. Berrangéifeq ($(MAKECMDGOALS),)
42 dedad027SDaniel P. Berrangérecurse: all
43 dedad027SDaniel P. Berrangéendif
44 dedad027SDaniel P. Berrangé
45 dedad027SDaniel P. Berrangé.NOTPARALLEL: %
46 dedad027SDaniel P. Berrangé%: force
47 dedad027SDaniel P. Berrangé	@echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48 dedad027SDaniel P. Berrangé	@$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49 dedad027SDaniel P. Berrangé	@if test "$(MAKECMDGOALS)" = "distclean" && \
50 dedad027SDaniel P. Berrangé	    test -e build/auto-created-by-configure ; \
51 dedad027SDaniel P. Berrangé	then \
52 dedad027SDaniel P. Berrangé	    rm -rf build GNUmakefile ; \
53 dedad027SDaniel P. Berrangé	fi
54 dedad027SDaniel P. Berrangéforce: ;
55 dedad027SDaniel P. Berrangé.PHONY: force
56 dedad027SDaniel P. BerrangéGNUmakefile: ;
57 dedad027SDaniel P. Berrangé
58 dedad027SDaniel P. BerrangéEOF
59 dedad027SDaniel P. Berrangé    cd build
60 dedad027SDaniel P. Berrangé    exec $source_path/configure "$@"
61 dedad027SDaniel P. Berrangéfi
62 dedad027SDaniel P. Berrangé
63 8cd05ab6SPeter Maydell# Temporary directory used for files created while
64 8cd05ab6SPeter Maydell# configure runs. Since it is in the build directory
65 8cd05ab6SPeter Maydell# we can safely blow away any previous version of it
66 8cd05ab6SPeter Maydell# (and we need not jump through hoops to try to delete
67 8cd05ab6SPeter Maydell# it when configure exits.)
68 8cd05ab6SPeter MaydellTMPDIR1="config-temp"
69 8cd05ab6SPeter Maydellrm -rf "${TMPDIR1}"
70 8cd05ab6SPeter Maydellmkdir -p "${TMPDIR1}"
71 8cd05ab6SPeter Maydellif [ $? -ne 0 ]; then
72 8cd05ab6SPeter Maydell    echo "ERROR: failed to create temporary directory"
73 8cd05ab6SPeter Maydell    exit 1
74 7d13299dSbellardfi
75 7d13299dSbellard
76 8cd05ab6SPeter MaydellTMPB="qemu-conf"
77 8cd05ab6SPeter MaydellTMPC="${TMPDIR1}/${TMPB}.c"
78 66518bf6SDon SlutzTMPO="${TMPDIR1}/${TMPB}.o"
79 9c83ffd8SPeter MaydellTMPCXX="${TMPDIR1}/${TMPB}.cxx"
80 8cd05ab6SPeter MaydellTMPE="${TMPDIR1}/${TMPB}.exe"
81 6969ec6cSJames ClarkeTMPMO="${TMPDIR1}/${TMPB}.mo"
82 26fffe29SEmilio G. CotaTMPTXT="${TMPDIR1}/${TMPB}.txt"
83 7d13299dSbellard
84 da1d85e3SGerd Hoffmannrm -f config.log
85 9ac81bbbSmalc
86 b48e3611SPeter Maydell# Print a helpful header at the top of config.log
87 b48e3611SPeter Maydellecho "# QEMU configure log $(date)" >> config.log
88 979ae168SPeter Maydellprintf "# Configured with:" >> config.log
89 979ae168SPeter Maydellprintf " '%s'" "$0" "$@" >> config.log
90 979ae168SPeter Maydellecho >> config.log
91 b48e3611SPeter Maydellecho "#" >> config.log
92 b48e3611SPeter Maydell
93 d880a3baSPaolo Bonziniprint_error() {
94 d880a3baSPaolo Bonzini    (echo
95 76ad07a4SPeter Maydell    echo "ERROR: $1"
96 76ad07a4SPeter Maydell    while test -n "$2"; do
97 76ad07a4SPeter Maydell        echo "       $2"
98 76ad07a4SPeter Maydell        shift
99 76ad07a4SPeter Maydell    done
100 d880a3baSPaolo Bonzini    echo) >&2
101 d880a3baSPaolo Bonzini}
102 d880a3baSPaolo Bonzini
103 d880a3baSPaolo Bonzinierror_exit() {
104 d880a3baSPaolo Bonzini    print_error "$@"
105 76ad07a4SPeter Maydell    exit 1
106 76ad07a4SPeter Maydell}
107 76ad07a4SPeter Maydell
108 9c83ffd8SPeter Maydelldo_compiler() {
109 9c83ffd8SPeter Maydell    # Run the compiler, capturing its output to the log. First argument
110 9c83ffd8SPeter Maydell    # is compiler binary to execute.
111 9c83ffd8SPeter Maydell    local compiler="$1"
112 9c83ffd8SPeter Maydell    shift
113 8bbe05d7SIan Jackson    if test -n "$BASH_VERSION"; then eval '
114 8bbe05d7SIan Jackson        echo >>config.log "
115 8bbe05d7SIan Jacksonfuncs: ${FUNCNAME[*]}
116 8bbe05d7SIan Jacksonlines: ${BASH_LINENO[*]}"
117 8bbe05d7SIan Jackson    '; fi
118 9c83ffd8SPeter Maydell    echo $compiler "$@" >> config.log
119 9c83ffd8SPeter Maydell    $compiler "$@" >> config.log 2>&1 || return $?
120 8dc38a78SPeter Maydell    # Test passed. If this is an --enable-werror build, rerun
121 8dc38a78SPeter Maydell    # the test with -Werror and bail out if it fails. This
122 8dc38a78SPeter Maydell    # makes warning-generating-errors in configure test code
123 8dc38a78SPeter Maydell    # obvious to developers.
124 8dc38a78SPeter Maydell    if test "$werror" != "yes"; then
125 8dc38a78SPeter Maydell        return 0
126 8dc38a78SPeter Maydell    fi
127 8dc38a78SPeter Maydell    # Don't bother rerunning the compile if we were already using -Werror
128 8dc38a78SPeter Maydell    case "$*" in
129 8dc38a78SPeter Maydell        *-Werror*)
130 8dc38a78SPeter Maydell           return 0
131 8dc38a78SPeter Maydell        ;;
132 8dc38a78SPeter Maydell    esac
133 9c83ffd8SPeter Maydell    echo $compiler -Werror "$@" >> config.log
134 9c83ffd8SPeter Maydell    $compiler -Werror "$@" >> config.log 2>&1 && return $?
135 76ad07a4SPeter Maydell    error_exit "configure test passed without -Werror but failed with -Werror." \
136 76ad07a4SPeter Maydell        "This is probably a bug in the configure script. The failing command" \
137 76ad07a4SPeter Maydell        "will be at the bottom of config.log." \
138 76ad07a4SPeter Maydell        "You can run configure with --disable-werror to bypass this check."
139 8dc38a78SPeter Maydell}
140 8dc38a78SPeter Maydell
141 9c83ffd8SPeter Maydelldo_cc() {
142 9c83ffd8SPeter Maydell    do_compiler "$cc" "$@"
143 9c83ffd8SPeter Maydell}
144 9c83ffd8SPeter Maydell
145 9c83ffd8SPeter Maydelldo_cxx() {
146 9c83ffd8SPeter Maydell    do_compiler "$cxx" "$@"
147 9c83ffd8SPeter Maydell}
148 9c83ffd8SPeter Maydell
149 00849b92SRichard Henderson# Append $2 to the variable named $1, with space separation
150 00849b92SRichard Hendersonadd_to() {
151 00849b92SRichard Henderson    eval $1=\${$1:+\"\$$1 \"}\$2
152 00849b92SRichard Henderson}
153 00849b92SRichard Henderson
154 9c83ffd8SPeter Maydellupdate_cxxflags() {
155 9c83ffd8SPeter Maydell    # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
156 9c83ffd8SPeter Maydell    # options which some versions of GCC's C++ compiler complain about
157 9c83ffd8SPeter Maydell    # because they only make sense for C programs.
158 53422040SPaolo Bonzini    QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
159 086d5f75SPaolo Bonzini    CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
160 9c83ffd8SPeter Maydell    for arg in $QEMU_CFLAGS; do
161 9c83ffd8SPeter Maydell        case $arg in
162 9c83ffd8SPeter Maydell            -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
163 9c83ffd8SPeter Maydell            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
164 9c83ffd8SPeter Maydell                ;;
165 9c83ffd8SPeter Maydell            *)
166 9c83ffd8SPeter Maydell                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
167 9c83ffd8SPeter Maydell                ;;
168 9c83ffd8SPeter Maydell        esac
169 9c83ffd8SPeter Maydell    done
170 9c83ffd8SPeter Maydell}
171 9c83ffd8SPeter Maydell
172 52166aa0SJuan Quintelacompile_object() {
173 fd0e6053SJohn Snow  local_cflags="$1"
174 086d5f75SPaolo Bonzini  do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
175 52166aa0SJuan Quintela}
176 52166aa0SJuan Quintela
177 52166aa0SJuan Quintelacompile_prog() {
178 52166aa0SJuan Quintela  local_cflags="$1"
179 52166aa0SJuan Quintela  local_ldflags="$2"
180 086d5f75SPaolo Bonzini  do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags
181 52166aa0SJuan Quintela}
182 52166aa0SJuan Quintela
183 11568d6dSPaolo Bonzini# symbolically link $1 to $2.  Portable version of "ln -sf".
184 11568d6dSPaolo Bonzinisymlink() {
185 72b8b5a1SStefan Weil  rm -rf "$2"
186 ec5b06d7SAnthony Liguori  mkdir -p "$(dirname "$2")"
187 72b8b5a1SStefan Weil  ln -s "$1" "$2"
188 11568d6dSPaolo Bonzini}
189 11568d6dSPaolo Bonzini
190 0dba6195SLoïc Minier# check whether a command is available to this shell (may be either an
191 0dba6195SLoïc Minier# executable or a builtin)
192 0dba6195SLoïc Minierhas() {
193 0dba6195SLoïc Minier    type "$1" >/dev/null 2>&1
194 0dba6195SLoïc Minier}
195 0dba6195SLoïc Minier
196 0dba6195SLoïc Minier# search for an executable in PATH
197 0dba6195SLoïc Minierpath_of() {
198 0dba6195SLoïc Minier    local_command="$1"
199 0dba6195SLoïc Minier    local_ifs="$IFS"
200 0dba6195SLoïc Minier    local_dir=""
201 0dba6195SLoïc Minier
202 0dba6195SLoïc Minier    # pathname has a dir component?
203 0dba6195SLoïc Minier    if [ "${local_command#*/}" != "$local_command" ]; then
204 0dba6195SLoïc Minier        if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
205 0dba6195SLoïc Minier            echo "$local_command"
206 0dba6195SLoïc Minier            return 0
207 0dba6195SLoïc Minier        fi
208 0dba6195SLoïc Minier    fi
209 0dba6195SLoïc Minier    if [ -z "$local_command" ]; then
210 0dba6195SLoïc Minier        return 1
211 0dba6195SLoïc Minier    fi
212 0dba6195SLoïc Minier
213 0dba6195SLoïc Minier    IFS=:
214 0dba6195SLoïc Minier    for local_dir in $PATH; do
215 0dba6195SLoïc Minier        if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
216 0dba6195SLoïc Minier            echo "$local_dir/$local_command"
217 0dba6195SLoïc Minier            IFS="${local_ifs:-$(printf ' \t\n')}"
218 0dba6195SLoïc Minier            return 0
219 0dba6195SLoïc Minier        fi
220 0dba6195SLoïc Minier    done
221 0dba6195SLoïc Minier    # not found
222 0dba6195SLoïc Minier    IFS="${local_ifs:-$(printf ' \t\n')}"
223 0dba6195SLoïc Minier    return 1
224 0dba6195SLoïc Minier}
225 0dba6195SLoïc Minier
226 0a01d76fSMarc-André Lureauversion_ge () {
227 0a01d76fSMarc-André Lureau    local_ver1=`echo $1 | tr . ' '`
228 0a01d76fSMarc-André Lureau    local_ver2=`echo $2 | tr . ' '`
229 0a01d76fSMarc-André Lureau    while true; do
230 0a01d76fSMarc-André Lureau        set x $local_ver1
231 0a01d76fSMarc-André Lureau        local_first=${2-0}
232 0a01d76fSMarc-André Lureau        # shift 2 does nothing if there are less than 2 arguments
233 0a01d76fSMarc-André Lureau        shift; shift
234 0a01d76fSMarc-André Lureau        local_ver1=$*
235 0a01d76fSMarc-André Lureau        set x $local_ver2
236 0a01d76fSMarc-André Lureau        # the second argument finished, the first must be greater or equal
237 0a01d76fSMarc-André Lureau        test $# = 1 && return 0
238 0a01d76fSMarc-André Lureau        test $local_first -lt $2 && return 1
239 0a01d76fSMarc-André Lureau        test $local_first -gt $2 && return 0
240 0a01d76fSMarc-André Lureau        shift; shift
241 0a01d76fSMarc-André Lureau        local_ver2=$*
242 0a01d76fSMarc-André Lureau    done
243 0a01d76fSMarc-André Lureau}
244 0a01d76fSMarc-André Lureau
245 5b808275SLluís Vilanovahave_backend () {
246 5b808275SLluís Vilanova    echo "$trace_backends" | grep "$1" >/dev/null
247 5b808275SLluís Vilanova}
248 5b808275SLluís Vilanova
249 3b6b7550SPaolo Bonziniglob() {
250 3b6b7550SPaolo Bonzini    eval test -z '"${1#'"$2"'}"'
251 3b6b7550SPaolo Bonzini}
252 3b6b7550SPaolo Bonzini
253 3b6b7550SPaolo Bonzinisupported_hax_target() {
254 3b6b7550SPaolo Bonzini    test "$hax" = "yes" || return 1
255 3b6b7550SPaolo Bonzini    glob "$1" "*-softmmu" || return 1
256 3b6b7550SPaolo Bonzini    case "${1%-softmmu}" in
257 3b6b7550SPaolo Bonzini        i386|x86_64)
258 3b6b7550SPaolo Bonzini            return 0
259 3b6b7550SPaolo Bonzini        ;;
260 3b6b7550SPaolo Bonzini    esac
261 3b6b7550SPaolo Bonzini    return 1
262 3b6b7550SPaolo Bonzini}
263 3b6b7550SPaolo Bonzini
264 3b6b7550SPaolo Bonzinisupported_kvm_target() {
265 3b6b7550SPaolo Bonzini    test "$kvm" = "yes" || return 1
266 3b6b7550SPaolo Bonzini    glob "$1" "*-softmmu" || return 1
267 3b6b7550SPaolo Bonzini    case "${1%-softmmu}:$cpu" in
268 3b6b7550SPaolo Bonzini        arm:arm | aarch64:aarch64 | \
269 3b6b7550SPaolo Bonzini        i386:i386 | i386:x86_64 | i386:x32 | \
270 3b6b7550SPaolo Bonzini        x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
271 aa2953fdSHuacai Chen        mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
272 f8378accSRichard Henderson        ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
273 3b6b7550SPaolo Bonzini        s390x:s390x)
274 3b6b7550SPaolo Bonzini            return 0
275 3b6b7550SPaolo Bonzini        ;;
276 3b6b7550SPaolo Bonzini    esac
277 3b6b7550SPaolo Bonzini    return 1
278 3b6b7550SPaolo Bonzini}
279 3b6b7550SPaolo Bonzini
280 3b6b7550SPaolo Bonzinisupported_xen_target() {
281 3b6b7550SPaolo Bonzini    test "$xen" = "yes" || return 1
282 3b6b7550SPaolo Bonzini    glob "$1" "*-softmmu" || return 1
283 b5ed2e11SPaolo Bonzini    # Only i386 and x86_64 provide the xenpv machine.
284 b5ed2e11SPaolo Bonzini    case "${1%-softmmu}" in
285 b5ed2e11SPaolo Bonzini        i386|x86_64)
286 3b6b7550SPaolo Bonzini            return 0
287 3b6b7550SPaolo Bonzini        ;;
288 3b6b7550SPaolo Bonzini    esac
289 3b6b7550SPaolo Bonzini    return 1
290 3b6b7550SPaolo Bonzini}
291 3b6b7550SPaolo Bonzini
292 c97d6d2cSSergio Andres Gomez Del Realsupported_hvf_target() {
293 c97d6d2cSSergio Andres Gomez Del Real    test "$hvf" = "yes" || return 1
294 c97d6d2cSSergio Andres Gomez Del Real    glob "$1" "*-softmmu" || return 1
295 c97d6d2cSSergio Andres Gomez Del Real    case "${1%-softmmu}" in
296 c97d6d2cSSergio Andres Gomez Del Real        x86_64)
297 c97d6d2cSSergio Andres Gomez Del Real            return 0
298 c97d6d2cSSergio Andres Gomez Del Real        ;;
299 c97d6d2cSSergio Andres Gomez Del Real    esac
300 c97d6d2cSSergio Andres Gomez Del Real    return 1
301 c97d6d2cSSergio Andres Gomez Del Real}
302 c97d6d2cSSergio Andres Gomez Del Real
303 d661d9a4SJustin Terry (VM)supported_whpx_target() {
304 d661d9a4SJustin Terry (VM)    test "$whpx" = "yes" || return 1
305 d661d9a4SJustin Terry (VM)    glob "$1" "*-softmmu" || return 1
306 d661d9a4SJustin Terry (VM)    case "${1%-softmmu}" in
307 d661d9a4SJustin Terry (VM)        i386|x86_64)
308 d661d9a4SJustin Terry (VM)            return 0
309 d661d9a4SJustin Terry (VM)        ;;
310 d661d9a4SJustin Terry (VM)    esac
311 d661d9a4SJustin Terry (VM)    return 1
312 d661d9a4SJustin Terry (VM)}
313 d661d9a4SJustin Terry (VM)
314 d880a3baSPaolo Bonzinisupported_target() {
315 d880a3baSPaolo Bonzini    case "$1" in
316 d880a3baSPaolo Bonzini        *-softmmu)
317 d880a3baSPaolo Bonzini            ;;
318 d880a3baSPaolo Bonzini        *-linux-user)
319 d880a3baSPaolo Bonzini            if test "$linux" != "yes"; then
320 d880a3baSPaolo Bonzini                print_error "Target '$target' is only available on a Linux host"
321 d880a3baSPaolo Bonzini                return 1
322 d880a3baSPaolo Bonzini            fi
323 d880a3baSPaolo Bonzini            ;;
324 d880a3baSPaolo Bonzini        *-bsd-user)
325 d880a3baSPaolo Bonzini            if test "$bsd" != "yes"; then
326 d880a3baSPaolo Bonzini                print_error "Target '$target' is only available on a BSD host"
327 d880a3baSPaolo Bonzini                return 1
328 d880a3baSPaolo Bonzini            fi
329 d880a3baSPaolo Bonzini            ;;
330 d880a3baSPaolo Bonzini        *)
331 d880a3baSPaolo Bonzini            print_error "Invalid target name '$target'"
332 d880a3baSPaolo Bonzini            return 1
333 d880a3baSPaolo Bonzini            ;;
334 d880a3baSPaolo Bonzini    esac
335 b3f6ea7eSPaolo Bonzini    test "$tcg" = "yes" && return 0
336 b3f6ea7eSPaolo Bonzini    supported_kvm_target "$1" && return 0
337 b3f6ea7eSPaolo Bonzini    supported_xen_target "$1" && return 0
338 b3f6ea7eSPaolo Bonzini    supported_hax_target "$1" && return 0
339 c97d6d2cSSergio Andres Gomez Del Real    supported_hvf_target "$1" && return 0
340 d661d9a4SJustin Terry (VM)    supported_whpx_target "$1" && return 0
341 b3f6ea7eSPaolo Bonzini    print_error "TCG disabled, but hardware accelerator not available for '$target'"
342 b3f6ea7eSPaolo Bonzini    return 1
343 d880a3baSPaolo Bonzini}
344 d880a3baSPaolo Bonzini
345 e9a3591fSChristian Borntraeger
346 e9a3591fSChristian Borntraegerld_has() {
347 e9a3591fSChristian Borntraeger    $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
348 e9a3591fSChristian Borntraeger}
349 e9a3591fSChristian Borntraeger
350 4ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
351 4ace32e2SAntonio Ospitethen
352 4ace32e2SAntonio Ospite  error_exit "main directory cannot contain spaces nor colons"
353 4ace32e2SAntonio Ospitefi
354 4ace32e2SAntonio Ospite
355 14211825SAntonio Ospite# default parameters
356 2ff6b91eSJuan Quintelacpu=""
357 a31a8642SMichael S. Tsirkiniasl="iasl"
358 1e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M"
359 43ce4dfeSbellardstatic="no"
360 7d13299dSbellardcross_prefix=""
361 0c58ac1cSmalcaudio_drv_list=""
362 b64ec4e4SFam Zhengblock_drv_rw_whitelist=""
363 b64ec4e4SFam Zhengblock_drv_ro_whitelist=""
364 e49d021eSPeter Maydellhost_cc="cc"
365 02f9135bSDaniel P. Berrangélibs_cpu=""
366 73da375eSJuan Quintelalibs_softmmu=""
367 3e2e0e6bSJuan Quintelalibs_tools=""
368 d5631638Smalcaudio_win_int=""
369 957f1f99SMichael Rothlibs_qga=""
370 5bc62e01SGerd Hoffmanndebug_info="yes"
371 63678e17SSteven Noonanstack_protector=""
372 1e4f6065SDaniele Buonosafe_stack=""
373 afc3a8f9SAlex Bennéeuse_containers="yes"
374 f2385398SAlex Bennéegdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
375 ac0df51dSaliguori
376 92712822SDaniel P. Berrangeif test -e "$source_path/.git"
377 92712822SDaniel P. Berrangethen
378 f62bbee5SDaniel P. Berrange    git_update=yes
379 92712822SDaniel P. Berrange    git_submodules="ui/keycodemapdb"
380 3ac1f813SEmilio G. Cota    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
381 3ac1f813SEmilio G. Cota    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
382 92712822SDaniel P. Berrangeelse
383 f62bbee5SDaniel P. Berrange    git_update=no
384 aef45d51SDaniel P. Berrange    git_submodules=""
385 5c0ef67aSDaniel P. Berrangé
386 5c0ef67aSDaniel P. Berrangé    if ! test -f "$source_path/ui/keycodemapdb/README"
387 5c0ef67aSDaniel P. Berrangé    then
388 5c0ef67aSDaniel P. Berrangé        echo
389 5c0ef67aSDaniel P. Berrangé        echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
390 5c0ef67aSDaniel P. Berrangé        echo
391 5c0ef67aSDaniel P. Berrangé        echo "This is not a GIT checkout but module content appears to"
392 5c0ef67aSDaniel P. Berrangé        echo "be missing. Do not use 'git archive' or GitHub download links"
393 5c0ef67aSDaniel P. Berrangé        echo "to acquire QEMU source archives. Non-GIT builds are only"
394 5c0ef67aSDaniel P. Berrangé        echo "supported with source archives linked from:"
395 5c0ef67aSDaniel P. Berrangé        echo
396 a3e3b521SPeter Maydell        echo "  https://www.qemu.org/download/#source"
397 5c0ef67aSDaniel P. Berrangé        echo
398 5c0ef67aSDaniel P. Berrangé        echo "Developers working with GIT can use scripts/archive-source.sh"
399 5c0ef67aSDaniel P. Berrangé        echo "if they need to create valid source archives."
400 5c0ef67aSDaniel P. Berrangé        echo
401 5c0ef67aSDaniel P. Berrangé        exit 1
402 5c0ef67aSDaniel P. Berrangé    fi
403 92712822SDaniel P. Berrangefi
404 cc84d63aSDaniel P. Berrangegit="git"
405 ac0df51dSaliguori
406 afb63ebdSStefan Weil# Don't accept a target_list environment variable.
407 afb63ebdSStefan Weilunset target_list
408 447e133fSAlex Bennéeunset target_list_exclude
409 377529c0SPaolo Bonzini
410 377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
411 377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
412 377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
413 377529c0SPaolo Bonzini#              unless --disable-foo is given
414 377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
415 377529c0SPaolo Bonzini#              feature will searched for,
416 377529c0SPaolo Bonzini#              if not found, configure exits with error
417 377529c0SPaolo Bonzini#
418 377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
419 377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
420 377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
421 377529c0SPaolo Bonzini
422 377529c0SPaolo Bonzinibrlapi=""
423 377529c0SPaolo Bonzinicurl=""
424 377529c0SPaolo Bonzinicurses=""
425 377529c0SPaolo Bonzinidocs=""
426 377529c0SPaolo Bonzinifdt=""
427 58952137SVincenzo Maffionenetmap="no"
428 377529c0SPaolo Bonzinisdl=""
429 a442fe2fSDaniel P. Berrangésdl_image=""
430 983eef5aSMeador Ingevirtfs=""
431 fe8fc5aeSPaolo Bonzinimpath=""
432 821601eaSJes Sorensenvnc="yes"
433 377529c0SPaolo Bonzinisparse="no"
434 377529c0SPaolo Bonzinivde=""
435 377529c0SPaolo Bonzinivnc_sasl=""
436 377529c0SPaolo Bonzinivnc_jpeg=""
437 377529c0SPaolo Bonzinivnc_png=""
438 6a021536SGerd Hoffmannxkbcommon=""
439 377529c0SPaolo Bonzinixen=""
440 d5b93ddfSAnthony PERARDxen_ctrl_version=""
441 eb6fda0fSAnthony PERARDxen_pci_passthrough=""
442 377529c0SPaolo Bonzinilinux_aio=""
443 c10dd856SAarushi Mehtalinux_io_uring=""
444 47e98658SCorey Bryantcap_ng=""
445 377529c0SPaolo Bonziniattr=""
446 4f26f2b6SAvi Kivitylibattr=""
447 377529c0SPaolo Bonzinixfs=""
448 b3f6ea7eSPaolo Bonzinitcg="yes"
449 a40161cbSPaolo Bonzinimembarrier=""
450 299e6f19SPaolo Bonzinivhost_net=""
451 299e6f19SPaolo Bonzinivhost_crypto=""
452 299e6f19SPaolo Bonzinivhost_scsi=""
453 299e6f19SPaolo Bonzinivhost_vsock=""
454 e6a74868SMarc-André Lureauvhost_user=""
455 98fc1adaSDr. David Alan Gilbertvhost_user_fs=""
456 d41a75a2SBradkvm="no"
457 b0cb0a66SVincent Palatinhax="no"
458 c97d6d2cSSergio Andres Gomez Del Realhvf="no"
459 d661d9a4SJustin Terry (VM)whpx="no"
460 2da776dbSMichael R. Hinesrdma=""
461 21ab34c9SMarcel Apfelbaumpvrdma=""
462 377529c0SPaolo Bonzinigprof="no"
463 377529c0SPaolo Bonzinidebug_tcg="no"
464 377529c0SPaolo Bonzinidebug="no"
465 247724cbSMarc-André Lureausanitizers="no"
466 0aebab04SLingfeng Yangtsan="no"
467 b553a042SJohn Snowfortify_source=""
468 377529c0SPaolo Bonzinistrip_opt="yes"
469 9195b2c2SStefan Weiltcg_interpreter="no"
470 377529c0SPaolo Bonzinibigendian="no"
471 377529c0SPaolo Bonzinimingw32="no"
472 1d728c39SBlue Swirlgcov="no"
473 377529c0SPaolo BonziniEXESUF=""
474 17969268SFam ZhengDSOSUF=".so"
475 17969268SFam ZhengLDFLAGS_SHARED="-shared"
476 17969268SFam Zhengmodules="no"
477 bd83c861SChristian Ehrhardtmodule_upgrades="no"
478 377529c0SPaolo Bonziniprefix="/usr/local"
479 3d5eecabSGerd Hoffmannfirmwarepath="\${prefix}/share/qemu-firmware"
480 377529c0SPaolo Bonziniconfsuffix="/qemu"
481 675b9b53SMarc-André Lureauslirp=""
482 377529c0SPaolo Bonzinioss_lib=""
483 377529c0SPaolo Bonzinibsd="no"
484 377529c0SPaolo Bonzinilinux="no"
485 377529c0SPaolo Bonzinisolaris="no"
486 377529c0SPaolo Bonziniprofiler="no"
487 377529c0SPaolo Bonzinicocoa="no"
488 377529c0SPaolo Bonzinisoftmmu="yes"
489 377529c0SPaolo Bonzinilinux_user="no"
490 377529c0SPaolo Bonzinibsd_user="no"
491 377529c0SPaolo Bonziniblobs="yes"
492 05dfa22bSPhilippe Mathieu-Daudéedk2_blobs="no"
493 377529c0SPaolo Bonzinipkgversion=""
494 40d6444eSAvi Kivitypie=""
495 3556c233SPaolo Bonziniqom_cast_debug="yes"
496 baf86d6bSPaolo Bonzinitrace_backends="log"
497 377529c0SPaolo Bonzinitrace_file="trace"
498 377529c0SPaolo Bonzinispice=""
499 377529c0SPaolo Bonzinirbd=""
500 7b02f544SMarc-André Lureausmartcard=""
501 2b2325ffSGerd Hoffmannlibusb=""
502 69354a83SHans de Goedeusb_redir=""
503 da076ffeSGerd Hoffmannopengl=""
504 014cb152SGerd Hoffmannopengl_dmabuf="no"
505 5dd89908SRichard Hendersoncpuid_h="no"
506 86583a07SLiam Merwickavx2_opt=""
507 1ece9905SAlon Levyzlib="yes"
508 8ca80760SRichard Hendersoncapstone=""
509 b25c9dffSStefan Weillzo=""
510 b25c9dffSStefan Weilsnappy=""
511 6b383c08SPeter Wubzip2=""
512 83bc1f97SJulio Faraccolzfse=""
513 3a678481SJuan Quintelazstd=""
514 e8ef31a3SMichael Tokarevguest_agent=""
515 d9840e25STomoki Sekiyamaguest_agent_with_vss="no"
516 50cbebb9SMichael Rothguest_agent_ntddscsi="no"
517 9dacf32dSYossi Hindinguest_agent_msi=""
518 d9840e25STomoki Sekiyamavss_win32_sdk=""
519 d9840e25STomoki Sekiyamawin_sdk="no"
520 e10ee3f5SPhilippe Mathieu-Daudéwant_tools=""
521 c589b249SRonnie Sahlberglibiscsi=""
522 6542aa9cSPeter Lievenlibnfs=""
523 519175a2SAlex Barcelocoroutine=""
524 70c60c08SStefan Hajnoczicoroutine_pool=""
525 7d992e4dSPeter Lievendebug_stack_usage="no"
526 f0d92b56SLongpeng(Mike)crypto_afalg="no"
527 f794573eSEduardo Otuboseccomp=""
528 eb100396SBharata B Raoglusterfs=""
529 d85fa9ebSJeff Codyglusterfs_xlator_opt="no"
530 0c14fb47SBharata B Raoglusterfs_discard="no"
531 df3a429aSNiels de Vosglusterfs_fallocate="no"
532 7c815372SBharata B Raoglusterfs_zerofill="no"
533 e014dbe7SPrasanna Kumar Kaleverglusterfs_ftruncate_has_stat="no"
534 0e3b891fSNiels de Vosglusterfs_iocb_has_stat="no"
535 a4ccabcfSAnthony Liguorigtk=""
536 925a0400SGerd Hoffmanngtk_gl="no"
537 a1c5e949SDaniel P. Berrangetls_priority="NORMAL"
538 ddbb0d09SDaniel P. Berrangegnutls=""
539 91bfcdb0SDaniel P. Berrangenettle=""
540 dc2207afSDaniel P. Berrangénettle_xts="no"
541 91bfcdb0SDaniel P. Berrangegcrypt=""
542 1f923c70SLongpeng(Mike)gcrypt_hmac="no"
543 e0576942SDaniel P. Berrangégcrypt_xts="no"
544 e0576942SDaniel P. Berrangéqemu_private_xts="yes"
545 8953caf3SDaniel P. Berrangeauth_pam=""
546 bbbf9bfbSStefan Weilvte=""
547 9d9e1521SGerd Hoffmannvirglrenderer=""
548 7aaa6a16SPaolo Bonzinitpm=""
549 b10d49d7SPino Toscanolibssh=""
550 ed1701c6SDr. David Alan Gilbertlive_block_migration="yes"
551 a99d57bbSWanlong Gaonuma=""
552 2847b469SFam Zhengtcmalloc="no"
553 7b01cb97SAlexandre Derumierjemalloc="no"
554 a6b1d4c0SChanglong Xiereplication="yes"
555 2f740136SJeff Codybochs="yes"
556 2f740136SJeff Codycloop="yes"
557 2f740136SJeff Codydmg="yes"
558 2f740136SJeff Codyqcow1="yes"
559 2f740136SJeff Codyvdi="yes"
560 2f740136SJeff Codyvvfat="yes"
561 2f740136SJeff Codyqed="yes"
562 2f740136SJeff Codyparallels="yes"
563 2f740136SJeff Codysheepdog="yes"
564 ed279a06SKlim Kireevlibxml2=""
565 ba59fb77SPaolo Bonzinidebug_mutex="no"
566 17824406SJunyan Helibpmem=""
567 f3494749SPaolo Bonzinidefault_devices="yes"
568 40e8c6f4SAlex Bennéeplugins="no"
569 adc28027SAlexander Bulekovfuzzing="no"
570 b767d257SMarek Marczykowski-Góreckirng_none="no"
571 54e7aac0SAlexey Krasikovsecret_keyring=""
572 21b2eca6SJingqi Liulibdaxctl=""
573 a5665051SPaolo Bonzinimeson=""
574 a5665051SPaolo Bonziniskip_meson=no
575 377529c0SPaolo Bonzini
576 fb59dabdSPeter Maydellbogus_os="no"
577 5a22ab71SYang Zhongmalloc_trim=""
578 898be3e0SPeter Maydell
579 ac0df51dSaliguori# parse CC options first
580 ac0df51dSaliguorifor opt do
581 89138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
582 ac0df51dSaliguori  case "$opt" in
583 ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
584 ac0df51dSaliguori  ;;
585 3d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
586 ac0df51dSaliguori  ;;
587 83f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
588 83f73fceSTomoki Sekiyama  ;;
589 2ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
590 2ff6b91eSJuan Quintela  ;;
591 de385287SAlex Bennée  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
592 db5adeaaSPaolo Bonzini                    QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
593 e2a2ed06SJuan Quintela  ;;
594 11cde1c8SBruno Dominguez  --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
595 11cde1c8SBruno Dominguez  ;;
596 db5adeaaSPaolo Bonzini  --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
597 f9943cd5SGerd Hoffmann                     EXTRA_LDFLAGS="$optarg"
598 e2a2ed06SJuan Quintela  ;;
599 5bc62e01SGerd Hoffmann  --enable-debug-info) debug_info="yes"
600 5bc62e01SGerd Hoffmann  ;;
601 5bc62e01SGerd Hoffmann  --disable-debug-info) debug_info="no"
602 5bc62e01SGerd Hoffmann  ;;
603 d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
604 d75402b5SAlex Bennée  ;;
605 d422b2bcSAlex Bennée  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
606 d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
607 2038f8c8SPaolo Bonzini                      cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
608 d422b2bcSAlex Bennée  ;;
609 d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
610 2038f8c8SPaolo Bonzini                cc_archs="$cc_archs $cc_arch"
611 d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
612 2038f8c8SPaolo Bonzini                cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
613 d75402b5SAlex Bennée  ;;
614 ac0df51dSaliguori  esac
615 ac0df51dSaliguoridone
616 ac0df51dSaliguori# OS specific
617 ac0df51dSaliguori# Using uname is really, really broken.  Once we have the right set of checks
618 93148aa5SStefan Weil# we can eliminate its usage altogether.
619 ac0df51dSaliguori
620 e49d021eSPeter Maydell# Preferred compiler:
621 e49d021eSPeter Maydell#  ${CC} (if set)
622 e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
623 e49d021eSPeter Maydell#  system compiler
624 e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
625 e49d021eSPeter Maydell  cc="$host_cc"
626 e49d021eSPeter Maydellelse
627 b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
628 e49d021eSPeter Maydellfi
629 e49d021eSPeter Maydell
630 83f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
631 83f73fceSTomoki Sekiyama  cxx="c++"
632 83f73fceSTomoki Sekiyamaelse
633 83f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
634 83f73fceSTomoki Sekiyamafi
635 83f73fceSTomoki Sekiyama
636 b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
637 cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
638 5f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
639 3dd46c78SBlue Swirlcpp="${CPP-$cc -E}"
640 b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
641 b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
642 9f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
643 4852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
644 b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
645 b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
646 17884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
647 17884d7bSSergei Trofimovichquery_pkg_config() {
648 17884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
649 17884d7bSSergei Trofimovich}
650 17884d7bSSergei Trofimovichpkg_config=query_pkg_config
651 47c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
652 ac0df51dSaliguori
653 45d285abSPeter Maydell# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
654 45d285abSPeter MaydellARFLAGS="${ARFLAGS-rv}"
655 45d285abSPeter Maydell
656 be17dc90SMichael S. Tsirkin# default flags for all hosts
657 2d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where
658 2d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected
659 2d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it
660 2d31515bSPeter Maydell# provides these semantics.)
661 086d5f75SPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
662 086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
663 c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
664 be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
665 25211446SPaolo BonziniQEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
666 25211446SPaolo BonziniQEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
667 086d5f75SPaolo BonziniCFLAGS="-std=gnu99 -Wall"
668 086d5f75SPaolo Bonzini
669 be17dc90SMichael S. Tsirkin
670 cab00a5aSMichael S. Tsirkin# running configure in the source tree?
671 cab00a5aSMichael S. Tsirkin# we know that's the case if configure is there.
672 cab00a5aSMichael S. Tsirkinif test -f "./configure"; then
673 cab00a5aSMichael S. Tsirkin    pwd_is_source_path="y"
674 cab00a5aSMichael S. Tsirkinelse
675 cab00a5aSMichael S. Tsirkin    pwd_is_source_path="n"
676 cab00a5aSMichael S. Tsirkinfi
677 cab00a5aSMichael S. Tsirkin
678 ac0df51dSaliguoricheck_define() {
679 ac0df51dSaliguoricat > $TMPC <<EOF
680 ac0df51dSaliguori#if !defined($1)
681 fd786e1aSPeter Maydell#error $1 not defined
682 ac0df51dSaliguori#endif
683 ac0df51dSaliguoriint main(void) { return 0; }
684 ac0df51dSaliguoriEOF
685 52166aa0SJuan Quintela  compile_object
686 ac0df51dSaliguori}
687 ac0df51dSaliguori
688 307119e7SGerd Hoffmanncheck_include() {
689 307119e7SGerd Hoffmanncat > $TMPC <<EOF
690 307119e7SGerd Hoffmann#include <$1>
691 307119e7SGerd Hoffmannint main(void) { return 0; }
692 307119e7SGerd HoffmannEOF
693 307119e7SGerd Hoffmann  compile_object
694 307119e7SGerd Hoffmann}
695 307119e7SGerd Hoffmann
696 93b25869SJohn Snowwrite_c_skeleton() {
697 93b25869SJohn Snow    cat > $TMPC <<EOF
698 93b25869SJohn Snowint main(void) { return 0; }
699 93b25869SJohn SnowEOF
700 93b25869SJohn Snow}
701 93b25869SJohn Snow
702 adc28027SAlexander Bulekovwrite_c_fuzzer_skeleton() {
703 adc28027SAlexander Bulekov    cat > $TMPC <<EOF
704 adc28027SAlexander Bulekov#include <stdint.h>
705 adc28027SAlexander Bulekov#include <sys/types.h>
706 adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
707 adc28027SAlexander Bulekovint LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
708 adc28027SAlexander BulekovEOF
709 adc28027SAlexander Bulekov}
710 adc28027SAlexander Bulekov
711 bbea4050SPeter Maydellif check_define __linux__ ; then
712 bbea4050SPeter Maydell  targetos="Linux"
713 bbea4050SPeter Maydellelif check_define _WIN32 ; then
714 bbea4050SPeter Maydell  targetos='MINGW32'
715 bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
716 bbea4050SPeter Maydell  targetos='OpenBSD'
717 bbea4050SPeter Maydellelif check_define __sun__ ; then
718 bbea4050SPeter Maydell  targetos='SunOS'
719 bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
720 bbea4050SPeter Maydell  targetos='Haiku'
721 951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
722 951fedfcSPeter Maydell  targetos='FreeBSD'
723 951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
724 951fedfcSPeter Maydell  targetos='GNU/kFreeBSD'
725 951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
726 951fedfcSPeter Maydell  targetos='DragonFly'
727 951fedfcSPeter Maydellelif check_define __NetBSD__; then
728 951fedfcSPeter Maydell  targetos='NetBSD'
729 951fedfcSPeter Maydellelif check_define __APPLE__; then
730 951fedfcSPeter Maydell  targetos='Darwin'
731 bbea4050SPeter Maydellelse
732 951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
733 951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
734 951fedfcSPeter Maydell  # be the result of a missing compiler.
735 951fedfcSPeter Maydell  targetos='bogus'
736 951fedfcSPeter Maydell  bogus_os='yes'
737 bbea4050SPeter Maydellfi
738 bbea4050SPeter Maydell
739 bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use.
740 bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're
741 bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify
742 bbea4050SPeter Maydell# the correct CPU with the --cpu option.
743 bbea4050SPeter Maydellcase $targetos in
744 bbea4050SPeter MaydellDarwin)
745 bbea4050SPeter Maydell  # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
746 bbea4050SPeter Maydell  # run 64-bit userspace code.
747 bbea4050SPeter Maydell  # If the user didn't specify a CPU explicitly and the kernel says this is
748 bbea4050SPeter Maydell  # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
749 bbea4050SPeter Maydell  if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
750 bbea4050SPeter Maydell    cpu="x86_64"
751 bbea4050SPeter Maydell  fi
752 bbea4050SPeter Maydell  ;;
753 bbea4050SPeter MaydellSunOS)
754 89138857SStefan Weil  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
755 bbea4050SPeter Maydell  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
756 bbea4050SPeter Maydell    cpu="x86_64"
757 bbea4050SPeter Maydell  fi
758 bbea4050SPeter Maydellesac
759 bbea4050SPeter Maydell
760 2ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
761 2ff6b91eSJuan Quintela  # command line argument
762 2ff6b91eSJuan Quintela  :
763 2ff6b91eSJuan Quintelaelif check_define __i386__ ; then
764 ac0df51dSaliguori  cpu="i386"
765 ac0df51dSaliguorielif check_define __x86_64__ ; then
766 c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
767 c72b26ecSRichard Henderson    cpu="x32"
768 c72b26ecSRichard Henderson  else
769 ac0df51dSaliguori    cpu="x86_64"
770 c72b26ecSRichard Henderson  fi
771 3aa9bd6cSblueswir1elif check_define __sparc__ ; then
772 3aa9bd6cSblueswir1  if check_define __arch64__ ; then
773 3aa9bd6cSblueswir1    cpu="sparc64"
774 3aa9bd6cSblueswir1  else
775 3aa9bd6cSblueswir1    cpu="sparc"
776 3aa9bd6cSblueswir1  fi
777 fdf7ed96Smalcelif check_define _ARCH_PPC ; then
778 fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
779 f8378accSRichard Henderson    if check_define _LITTLE_ENDIAN ; then
780 f8378accSRichard Henderson      cpu="ppc64le"
781 f8378accSRichard Henderson    else
782 fdf7ed96Smalc      cpu="ppc64"
783 f8378accSRichard Henderson    fi
784 ac0df51dSaliguori  else
785 fdf7ed96Smalc    cpu="ppc"
786 fdf7ed96Smalc  fi
787 afa05235SAurelien Jarnoelif check_define __mips__ ; then
788 afa05235SAurelien Jarno  cpu="mips"
789 d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
790 d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
791 d66ed0eaSAurelien Jarno    cpu="s390x"
792 d66ed0eaSAurelien Jarno  else
793 d66ed0eaSAurelien Jarno    cpu="s390"
794 d66ed0eaSAurelien Jarno  fi
795 c4f80543SAlistair Franciselif check_define __riscv ; then
796 c4f80543SAlistair Francis  if check_define _LP64 ; then
797 c4f80543SAlistair Francis    cpu="riscv64"
798 c4f80543SAlistair Francis  else
799 c4f80543SAlistair Francis    cpu="riscv32"
800 c4f80543SAlistair Francis  fi
801 21d89f84SPeter Maydellelif check_define __arm__ ; then
802 21d89f84SPeter Maydell  cpu="arm"
803 1f080313SClaudio Fontanaelif check_define __aarch64__ ; then
804 1f080313SClaudio Fontana  cpu="aarch64"
805 fdf7ed96Smalcelse
806 89138857SStefan Weil  cpu=$(uname -m)
807 ac0df51dSaliguorifi
808 ac0df51dSaliguori
809 359bc95dSPeter MaydellARCH=
810 359bc95dSPeter Maydell# Normalise host CPU name and set ARCH.
811 359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
812 7d13299dSbellardcase "$cpu" in
813 ee35e968SThomas Huth  ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
814 898be3e0SPeter Maydell  ;;
815 f8378accSRichard Henderson  ppc64le)
816 f8378accSRichard Henderson    ARCH="ppc64"
817 f8378accSRichard Henderson  ;;
818 7d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
819 97a847bcSbellard    cpu="i386"
820 7d13299dSbellard  ;;
821 aaa5fa14Saurel32  x86_64|amd64)
822 aaa5fa14Saurel32    cpu="x86_64"
823 aaa5fa14Saurel32  ;;
824 21d89f84SPeter Maydell  armv*b|armv*l|arm)
825 21d89f84SPeter Maydell    cpu="arm"
826 7d13299dSbellard  ;;
827 1f080313SClaudio Fontana  aarch64)
828 1f080313SClaudio Fontana    cpu="aarch64"
829 1f080313SClaudio Fontana  ;;
830 afa05235SAurelien Jarno  mips*)
831 afa05235SAurelien Jarno    cpu="mips"
832 afa05235SAurelien Jarno  ;;
833 3142255cSblueswir1  sparc|sun4[cdmuv])
834 ae228531Sbellard    cpu="sparc"
835 ae228531Sbellard  ;;
836 7d13299dSbellard  *)
837 359bc95dSPeter Maydell    # This will result in either an error or falling back to TCI later
838 359bc95dSPeter Maydell    ARCH=unknown
839 7d13299dSbellard  ;;
840 7d13299dSbellardesac
841 359bc95dSPeter Maydellif test -z "$ARCH"; then
842 359bc95dSPeter Maydell  ARCH="$cpu"
843 359bc95dSPeter Maydellfi
844 e2d52ad3SJuan Quintela
845 7d13299dSbellard# OS specific
846 0dbfc675SJuan Quintela
847 adfc3e91SStacey Son# host *BSD for user mode
848 adfc3e91SStacey SonHOST_VARIANT_DIR=""
849 adfc3e91SStacey Son
850 7d13299dSbellardcase $targetos in
851 67b915a5SbellardMINGW32*)
852 67b915a5Sbellard  mingw32="yes"
853 b0cb0a66SVincent Palatin  hax="yes"
854 299e6f19SPaolo Bonzini  vhost_user="no"
855 3cec7cc2SKővágó, Zoltán  audio_possible_drivers="dsound sdl"
856 307119e7SGerd Hoffmann  if check_include dsound.h; then
857 3cec7cc2SKővágó, Zoltán    audio_drv_list="dsound"
858 307119e7SGerd Hoffmann  else
859 307119e7SGerd Hoffmann    audio_drv_list=""
860 307119e7SGerd Hoffmann  fi
861 898be3e0SPeter Maydell  supported_os="yes"
862 67b915a5Sbellard;;
863 5c40d2bdSthsGNU/kFreeBSD)
864 a167ba50SAurelien Jarno  bsd="yes"
865 6a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
866 0bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
867 5c40d2bdSths;;
868 7d3505c5SbellardFreeBSD)
869 7d3505c5Sbellard  bsd="yes"
870 0db4a067SPaolo Bonzini  make="${MAKE-gmake}"
871 6a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
872 0bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
873 f01576f1SJuergen Lock  # needed for kinfo_getvmmap(3) in libutil.h
874 f01576f1SJuergen Lock  LIBS="-lutil $LIBS"
875 58952137SVincenzo Maffione  netmap=""  # enable netmap autodetect
876 adfc3e91SStacey Son  HOST_VARIANT_DIR="freebsd"
877 7d3505c5Sbellard;;
878 c5e97233Sblueswir1DragonFly)
879 c5e97233Sblueswir1  bsd="yes"
880 0db4a067SPaolo Bonzini  make="${MAKE-gmake}"
881 6a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
882 0bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
883 adfc3e91SStacey Son  HOST_VARIANT_DIR="dragonfly"
884 c5e97233Sblueswir1;;
885 7d3505c5SbellardNetBSD)
886 7d3505c5Sbellard  bsd="yes"
887 604a5b99SKamil Rytarowski  hax="yes"
888 0db4a067SPaolo Bonzini  make="${MAKE-gmake}"
889 6a485418SGerd Hoffmann  audio_drv_list="oss try-sdl"
890 0bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl"
891 8ef92a88Sblueswir1  oss_lib="-lossaudio"
892 adfc3e91SStacey Son  HOST_VARIANT_DIR="netbsd"
893 7d3505c5Sbellard;;
894 7d3505c5SbellardOpenBSD)
895 7d3505c5Sbellard  bsd="yes"
896 0db4a067SPaolo Bonzini  make="${MAKE-gmake}"
897 f92c7168SGerd Hoffmann  audio_drv_list="try-sdl"
898 0bac1111SKővágó, Zoltán  audio_possible_drivers="sdl"
899 adfc3e91SStacey Son  HOST_VARIANT_DIR="openbsd"
900 7d3505c5Sbellard;;
901 83fb7adfSbellardDarwin)
902 83fb7adfSbellard  bsd="yes"
903 83fb7adfSbellard  darwin="yes"
904 b0cb0a66SVincent Palatin  hax="yes"
905 c97d6d2cSSergio Andres Gomez Del Real  hvf="yes"
906 17969268SFam Zheng  LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
907 1b0f9cc2Saliguori  if [ "$cpu" = "x86_64" ] ; then
908 a558ee17SJuan Quintela    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
909 db5adeaaSPaolo Bonzini    QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
910 1b0f9cc2Saliguori  fi
911 fd677642Sths  cocoa="yes"
912 6a485418SGerd Hoffmann  audio_drv_list="coreaudio try-sdl"
913 14382605SKővágó, Zoltán  audio_possible_drivers="coreaudio sdl"
914 db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
915 7973f21cSJuan Quintela  libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
916 a0b7cf6bSPeter Maydell  # Disable attempts to use ObjectiveC features in os/object.h since they
917 a0b7cf6bSPeter Maydell  # won't work when we're compiling with gcc as a C compiler.
918 a0b7cf6bSPeter Maydell  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
919 adfc3e91SStacey Son  HOST_VARIANT_DIR="darwin"
920 83fb7adfSbellard;;
921 ec530c81SbellardSunOS)
922 ec530c81Sbellard  solaris="yes"
923 0db4a067SPaolo Bonzini  make="${MAKE-gmake}"
924 0db4a067SPaolo Bonzini  install="${INSTALL-ginstall}"
925 e2d8830eSBrad  smbd="${SMBD-/usr/sfw/sbin/smbd}"
926 6b4d2ba1Sths  if test -f /usr/include/sys/soundcard.h ; then
927 6a485418SGerd Hoffmann    audio_drv_list="oss try-sdl"
928 6b4d2ba1Sths  fi
929 c2de5c91Smalc  audio_possible_drivers="oss sdl"
930 d741429aSBlue Swirl# needed for CMSG_ macros in sys/socket.h
931 d741429aSBlue Swirl  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
932 d741429aSBlue Swirl# needed for TIOCWIN* defines in termios.h
933 d741429aSBlue Swirl  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
934 560d375fSAndreas Färber  solarisnetlibs="-lsocket -lnsl -lresolv"
935 560d375fSAndreas Färber  LIBS="$solarisnetlibs $LIBS"
936 ec530c81Sbellard;;
937 179cf400SAndreas FärberHaiku)
938 179cf400SAndreas Färber  haiku="yes"
939 fc433430SDavid CARLIER  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
940 fc433430SDavid CARLIER  LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS"
941 179cf400SAndreas Färber;;
942 898be3e0SPeter MaydellLinux)
943 7183834aSGerd Hoffmann  audio_drv_list="try-pa oss"
944 0bac1111SKővágó, Zoltán  audio_possible_drivers="oss alsa sdl pa"
945 5327cf48Sbellard  linux="yes"
946 831b7825Sths  linux_user="yes"
947 af2be207SJan Kiszka  kvm="yes"
948 25211446SPaolo Bonzini  QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
949 3efac6ebSTomáš Golembiovský  libudev="yes"
950 898be3e0SPeter Maydell;;
951 7d13299dSbellardesac
952 7d13299dSbellard
953 7d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
954 b1a550a0Spbrook  if [ "$darwin" != "yes" ] ; then
955 84778508Sblueswir1    bsd_user="yes"
956 7d3505c5Sbellard  fi
957 08de3949SAndreas Färberfi
958 7d3505c5Sbellard
959 0db4a067SPaolo Bonzini: ${make=${MAKE-make}}
960 0db4a067SPaolo Bonzini: ${install=${INSTALL-install}}
961 faf44142SDaniel P. Berrangé# We prefer python 3.x. A bare 'python' is traditionally
962 faf44142SDaniel P. Berrangé# python 2.x, but some distros have it as python 3.x, so
963 ddf90699SEduardo Habkost# we check that too
964 faf44142SDaniel P. Berrangépython=
965 0a01d76fSMarc-André Lureauexplicit_python=no
966 ddf90699SEduardo Habkostfor binary in "${PYTHON-python3}" python
967 faf44142SDaniel P. Berrangédo
968 faf44142SDaniel P. Berrangé    if has "$binary"
969 faf44142SDaniel P. Berrangé    then
970 95c5f2deSPaolo Bonzini        python=$(command -v "$binary")
971 faf44142SDaniel P. Berrangé        break
972 faf44142SDaniel P. Berrangé    fi
973 faf44142SDaniel P. Berrangédone
974 903458c8SMarkus Armbruster
975 903458c8SMarkus Armbrustersphinx_build=
976 903458c8SMarkus Armbrusterfor binary in sphinx-build-3 sphinx-build
977 903458c8SMarkus Armbrusterdo
978 903458c8SMarkus Armbruster    if has "$binary"
979 903458c8SMarkus Armbruster    then
980 903458c8SMarkus Armbruster        sphinx_build=$(command -v "$binary")
981 903458c8SMarkus Armbruster        break
982 903458c8SMarkus Armbruster    fi
983 903458c8SMarkus Armbrusterdone
984 903458c8SMarkus Armbruster
985 39d87c8cSAlex Bennée# Check for ancillary tools used in testing
986 39d87c8cSAlex Bennéegenisoimage=
987 3df437c7SAlex Bennéefor binary in genisoimage mkisofs
988 39d87c8cSAlex Bennéedo
989 39d87c8cSAlex Bennée    if has $binary
990 39d87c8cSAlex Bennée    then
991 39d87c8cSAlex Bennée        genisoimage=$(command -v "$binary")
992 39d87c8cSAlex Bennée        break
993 39d87c8cSAlex Bennée    fi
994 39d87c8cSAlex Bennéedone
995 39d87c8cSAlex Bennée
996 e2d8830eSBrad: ${smbd=${SMBD-/usr/sbin/smbd}}
997 0db4a067SPaolo Bonzini
998 3c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
999 3c4a4d0dSPeter Maydellif has clang; then
1000 3c4a4d0dSPeter Maydell  objcc=clang
1001 3c4a4d0dSPeter Maydellelse
1002 3c4a4d0dSPeter Maydell  objcc="$cc"
1003 3c4a4d0dSPeter Maydellfi
1004 3c4a4d0dSPeter Maydell
1005 3457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
1006 3457a3f8SJuan Quintela  EXESUF=".exe"
1007 17969268SFam Zheng  DSOSUF=".dll"
1008 78e9d4adSStefan Weil  # MinGW needs -mthreads for TLS and macro _MT.
1009 086d5f75SPaolo Bonzini  CFLAGS="-mthreads $CFLAGS"
1010 b965e8c5SPaolo Bonzini  LIBS="-lwinmm -lws2_32 $LIBS"
1011 93b25869SJohn Snow  write_c_skeleton;
1012 f7cf5d5bSStefan Weil  if compile_prog "" "-liberty" ; then
1013 f7cf5d5bSStefan Weil    LIBS="-liberty $LIBS"
1014 f7cf5d5bSStefan Weil  fi
1015 c5ec15eaSStefan Weil  prefix="c:/Program Files/QEMU"
1016 683035deSPaolo Bonzini  confsuffix=""
1017 105fad6bSBishara AbuHattoum  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
1018 3457a3f8SJuan Quintelafi
1019 3457a3f8SJuan Quintela
1020 487fefdbSAnthony Liguoriwerror=""
1021 85aa5189Sbellard
1022 7d13299dSbellardfor opt do
1023 89138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
1024 7d13299dSbellard  case "$opt" in
1025 2efc3265Sbellard  --help|-h) show_help=yes
1026 2efc3265Sbellard  ;;
1027 99123e13SMike Frysinger  --version|-V) exec cat $source_path/VERSION
1028 99123e13SMike Frysinger  ;;
1029 b1a550a0Spbrook  --prefix=*) prefix="$optarg"
1030 7d13299dSbellard  ;;
1031 b1a550a0Spbrook  --interp-prefix=*) interp_prefix="$optarg"
1032 32ce6337Sbellard  ;;
1033 ac0df51dSaliguori  --cross-prefix=*)
1034 7d13299dSbellard  ;;
1035 ac0df51dSaliguori  --cc=*)
1036 7d13299dSbellard  ;;
1037 b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
1038 83469015Sbellard  ;;
1039 83f73fceSTomoki Sekiyama  --cxx=*)
1040 83f73fceSTomoki Sekiyama  ;;
1041 e007dbecSMichael S. Tsirkin  --iasl=*) iasl="$optarg"
1042 e007dbecSMichael S. Tsirkin  ;;
1043 3c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
1044 3c4a4d0dSPeter Maydell  ;;
1045 b1a550a0Spbrook  --make=*) make="$optarg"
1046 7d13299dSbellard  ;;
1047 6a882643Spbrook  --install=*) install="$optarg"
1048 6a882643Spbrook  ;;
1049 0a01d76fSMarc-André Lureau  --python=*) python="$optarg" ; explicit_python=yes
1050 c886edfbSBlue Swirl  ;;
1051 2eb054c2SPeter Maydell  --sphinx-build=*) sphinx_build="$optarg"
1052 2eb054c2SPeter Maydell  ;;
1053 a5665051SPaolo Bonzini  --skip-meson) skip_meson=yes
1054 a5665051SPaolo Bonzini  ;;
1055 a5665051SPaolo Bonzini  --meson=*) meson="$optarg"
1056 a5665051SPaolo Bonzini  ;;
1057 e2d8830eSBrad  --smbd=*) smbd="$optarg"
1058 e2d8830eSBrad  ;;
1059 e2a2ed06SJuan Quintela  --extra-cflags=*)
1060 7d13299dSbellard  ;;
1061 11cde1c8SBruno Dominguez  --extra-cxxflags=*)
1062 11cde1c8SBruno Dominguez  ;;
1063 e2a2ed06SJuan Quintela  --extra-ldflags=*)
1064 7d13299dSbellard  ;;
1065 5bc62e01SGerd Hoffmann  --enable-debug-info)
1066 5bc62e01SGerd Hoffmann  ;;
1067 5bc62e01SGerd Hoffmann  --disable-debug-info)
1068 5bc62e01SGerd Hoffmann  ;;
1069 d75402b5SAlex Bennée  --cross-cc-*)
1070 d75402b5SAlex Bennée  ;;
1071 17969268SFam Zheng  --enable-modules)
1072 17969268SFam Zheng      modules="yes"
1073 17969268SFam Zheng  ;;
1074 3aa88b31SStefan Hajnoczi  --disable-modules)
1075 3aa88b31SStefan Hajnoczi      modules="no"
1076 3aa88b31SStefan Hajnoczi  ;;
1077 bd83c861SChristian Ehrhardt  --disable-module-upgrades) module_upgrades="no"
1078 bd83c861SChristian Ehrhardt  ;;
1079 bd83c861SChristian Ehrhardt  --enable-module-upgrades) module_upgrades="yes"
1080 bd83c861SChristian Ehrhardt  ;;
1081 2ff6b91eSJuan Quintela  --cpu=*)
1082 7d13299dSbellard  ;;
1083 b1a550a0Spbrook  --target-list=*) target_list="$optarg"
1084 447e133fSAlex Bennée                   if test "$target_list_exclude"; then
1085 447e133fSAlex Bennée                       error_exit "Can't mix --target-list with --target-list-exclude"
1086 447e133fSAlex Bennée                   fi
1087 447e133fSAlex Bennée  ;;
1088 447e133fSAlex Bennée  --target-list-exclude=*) target_list_exclude="$optarg"
1089 447e133fSAlex Bennée                   if test "$target_list"; then
1090 447e133fSAlex Bennée                       error_exit "Can't mix --target-list-exclude with --target-list"
1091 447e133fSAlex Bennée                   fi
1092 de83cd02Sbellard  ;;
1093 5b808275SLluís Vilanova  --enable-trace-backends=*) trace_backends="$optarg"
1094 5b808275SLluís Vilanova  ;;
1095 5b808275SLluís Vilanova  # XXX: backwards compatibility
1096 5b808275SLluís Vilanova  --enable-trace-backend=*) trace_backends="$optarg"
1097 94a420b1SStefan Hajnoczi  ;;
1098 74242e0fSPaolo Bonzini  --with-trace-file=*) trace_file="$optarg"
1099 9410b56cSPrerna Saxena  ;;
1100 f3494749SPaolo Bonzini  --with-default-devices) default_devices="yes"
1101 f3494749SPaolo Bonzini  ;;
1102 f3494749SPaolo Bonzini  --without-default-devices) default_devices="no"
1103 f3494749SPaolo Bonzini  ;;
1104 7d13299dSbellard  --enable-gprof) gprof="yes"
1105 7d13299dSbellard  ;;
1106 1d728c39SBlue Swirl  --enable-gcov) gcov="yes"
1107 1d728c39SBlue Swirl  ;;
1108 79427693SLoïc Minier  --static)
1109 79427693SLoïc Minier    static="yes"
1110 17884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1111 43ce4dfeSbellard  ;;
1112 0b24e75fSPaolo Bonzini  --mandir=*) mandir="$optarg"
1113 0b24e75fSPaolo Bonzini  ;;
1114 0b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
1115 0b24e75fSPaolo Bonzini  ;;
1116 3aa5d2beSAlon Levy  --libdir=*) libdir="$optarg"
1117 3aa5d2beSAlon Levy  ;;
1118 8bf188aaSMichael Tokarev  --libexecdir=*) libexecdir="$optarg"
1119 8bf188aaSMichael Tokarev  ;;
1120 0f94d6daSAlon Levy  --includedir=*) includedir="$optarg"
1121 0f94d6daSAlon Levy  ;;
1122 528ae5b8SEduardo Habkost  --datadir=*) datadir="$optarg"
1123 0b24e75fSPaolo Bonzini  ;;
1124 023d3d67SEduardo Habkost  --with-confsuffix=*) confsuffix="$optarg"
1125 023d3d67SEduardo Habkost  ;;
1126 850da188SEduardo Habkost  --docdir=*) qemu_docdir="$optarg"
1127 0b24e75fSPaolo Bonzini  ;;
1128 ca2fb938SAndre Przywara  --sysconfdir=*) sysconfdir="$optarg"
1129 07381cc1SAnthony Liguori  ;;
1130 785c23aeSLuiz Capitulino  --localstatedir=*) local_statedir="$optarg"
1131 785c23aeSLuiz Capitulino  ;;
1132 3d5eecabSGerd Hoffmann  --firmwarepath=*) firmwarepath="$optarg"
1133 3d5eecabSGerd Hoffmann  ;;
1134 181ce1d0SOlaf Hering  --host=*|--build=*|\
1135 181ce1d0SOlaf Hering  --disable-dependency-tracking|\
1136 785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
1137 023ddd74SMax Filippov  --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1138 023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1139 023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
1140 023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
1141 023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
1142 023ddd74SMax Filippov    # lots of directory switches by default.
1143 023ddd74SMax Filippov  ;;
1144 97a847bcSbellard  --disable-sdl) sdl="no"
1145 97a847bcSbellard  ;;
1146 c4198157SJuan Quintela  --enable-sdl) sdl="yes"
1147 c4198157SJuan Quintela  ;;
1148 a442fe2fSDaniel P. Berrangé  --disable-sdl-image) sdl_image="no"
1149 a442fe2fSDaniel P. Berrangé  ;;
1150 a442fe2fSDaniel P. Berrangé  --enable-sdl-image) sdl_image="yes"
1151 a442fe2fSDaniel P. Berrangé  ;;
1152 3556c233SPaolo Bonzini  --disable-qom-cast-debug) qom_cast_debug="no"
1153 3556c233SPaolo Bonzini  ;;
1154 3556c233SPaolo Bonzini  --enable-qom-cast-debug) qom_cast_debug="yes"
1155 3556c233SPaolo Bonzini  ;;
1156 983eef5aSMeador Inge  --disable-virtfs) virtfs="no"
1157 983eef5aSMeador Inge  ;;
1158 983eef5aSMeador Inge  --enable-virtfs) virtfs="yes"
1159 983eef5aSMeador Inge  ;;
1160 fe8fc5aeSPaolo Bonzini  --disable-mpath) mpath="no"
1161 fe8fc5aeSPaolo Bonzini  ;;
1162 fe8fc5aeSPaolo Bonzini  --enable-mpath) mpath="yes"
1163 fe8fc5aeSPaolo Bonzini  ;;
1164 821601eaSJes Sorensen  --disable-vnc) vnc="no"
1165 821601eaSJes Sorensen  ;;
1166 821601eaSJes Sorensen  --enable-vnc) vnc="yes"
1167 821601eaSJes Sorensen  ;;
1168 2f6a1ab0Sblueswir1  --oss-lib=*) oss_lib="$optarg"
1169 2f6a1ab0Sblueswir1  ;;
1170 0c58ac1cSmalc  --audio-drv-list=*) audio_drv_list="$optarg"
1171 0c58ac1cSmalc  ;;
1172 89138857SStefan Weil  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1173 b64ec4e4SFam Zheng  ;;
1174 89138857SStefan Weil  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1175 eb852011SMarkus Armbruster  ;;
1176 f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
1177 f8393946Saurel32  ;;
1178 f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
1179 f8393946Saurel32  ;;
1180 f3d08ee6SPaul Brook  --enable-debug)
1181 f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
1182 f3d08ee6SPaul Brook      debug_tcg="yes"
1183 1fcc6d42SPeter Xu      debug_mutex="yes"
1184 f3d08ee6SPaul Brook      debug="yes"
1185 f3d08ee6SPaul Brook      strip_opt="no"
1186 b553a042SJohn Snow      fortify_source="no"
1187 f3d08ee6SPaul Brook  ;;
1188 247724cbSMarc-André Lureau  --enable-sanitizers) sanitizers="yes"
1189 247724cbSMarc-André Lureau  ;;
1190 247724cbSMarc-André Lureau  --disable-sanitizers) sanitizers="no"
1191 247724cbSMarc-André Lureau  ;;
1192 0aebab04SLingfeng Yang  --enable-tsan) tsan="yes"
1193 0aebab04SLingfeng Yang  ;;
1194 0aebab04SLingfeng Yang  --disable-tsan) tsan="no"
1195 0aebab04SLingfeng Yang  ;;
1196 03b4fe7dSaliguori  --enable-sparse) sparse="yes"
1197 03b4fe7dSaliguori  ;;
1198 03b4fe7dSaliguori  --disable-sparse) sparse="no"
1199 03b4fe7dSaliguori  ;;
1200 1625af87Saliguori  --disable-strip) strip_opt="no"
1201 1625af87Saliguori  ;;
1202 2f9606b3Saliguori  --disable-vnc-sasl) vnc_sasl="no"
1203 2f9606b3Saliguori  ;;
1204 ea784e3bSJuan Quintela  --enable-vnc-sasl) vnc_sasl="yes"
1205 ea784e3bSJuan Quintela  ;;
1206 2f6f5c7aSCorentin Chary  --disable-vnc-jpeg) vnc_jpeg="no"
1207 2f6f5c7aSCorentin Chary  ;;
1208 2f6f5c7aSCorentin Chary  --enable-vnc-jpeg) vnc_jpeg="yes"
1209 2f6f5c7aSCorentin Chary  ;;
1210 efe556adSCorentin Chary  --disable-vnc-png) vnc_png="no"
1211 efe556adSCorentin Chary  ;;
1212 efe556adSCorentin Chary  --enable-vnc-png) vnc_png="yes"
1213 efe556adSCorentin Chary  ;;
1214 443f1376Sbellard  --disable-slirp) slirp="no"
1215 c20709aaSbellard  ;;
1216 7c57bdd8SMarc-André Lureau  --enable-slirp=git) slirp="git"
1217 7c57bdd8SMarc-André Lureau  ;;
1218 675b9b53SMarc-André Lureau  --enable-slirp=system) slirp="system"
1219 675b9b53SMarc-André Lureau  ;;
1220 e0e6c8c0Saliguori  --disable-vde) vde="no"
1221 8a16d273Sths  ;;
1222 dfb278bdSJuan Quintela  --enable-vde) vde="yes"
1223 dfb278bdSJuan Quintela  ;;
1224 58952137SVincenzo Maffione  --disable-netmap) netmap="no"
1225 58952137SVincenzo Maffione  ;;
1226 58952137SVincenzo Maffione  --enable-netmap) netmap="yes"
1227 58952137SVincenzo Maffione  ;;
1228 e37630caSaliguori  --disable-xen) xen="no"
1229 e37630caSaliguori  ;;
1230 fc321b4bSJuan Quintela  --enable-xen) xen="yes"
1231 fc321b4bSJuan Quintela  ;;
1232 eb6fda0fSAnthony PERARD  --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1233 eb6fda0fSAnthony PERARD  ;;
1234 eb6fda0fSAnthony PERARD  --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1235 eb6fda0fSAnthony PERARD  ;;
1236 2e4d9fb1Saurel32  --disable-brlapi) brlapi="no"
1237 2e4d9fb1Saurel32  ;;
1238 4ffcedb6SJuan Quintela  --enable-brlapi) brlapi="yes"
1239 4ffcedb6SJuan Quintela  ;;
1240 7ba1e619Saliguori  --disable-kvm) kvm="no"
1241 7ba1e619Saliguori  ;;
1242 b31a0277SJuan Quintela  --enable-kvm) kvm="yes"
1243 b31a0277SJuan Quintela  ;;
1244 b0cb0a66SVincent Palatin  --disable-hax) hax="no"
1245 180fb750Szhanghailiang  ;;
1246 b0cb0a66SVincent Palatin  --enable-hax) hax="yes"
1247 180fb750Szhanghailiang  ;;
1248 c97d6d2cSSergio Andres Gomez Del Real  --disable-hvf) hvf="no"
1249 c97d6d2cSSergio Andres Gomez Del Real  ;;
1250 c97d6d2cSSergio Andres Gomez Del Real  --enable-hvf) hvf="yes"
1251 c97d6d2cSSergio Andres Gomez Del Real  ;;
1252 d661d9a4SJustin Terry (VM)  --disable-whpx) whpx="no"
1253 d661d9a4SJustin Terry (VM)  ;;
1254 d661d9a4SJustin Terry (VM)  --enable-whpx) whpx="yes"
1255 d661d9a4SJustin Terry (VM)  ;;
1256 9195b2c2SStefan Weil  --disable-tcg-interpreter) tcg_interpreter="no"
1257 9195b2c2SStefan Weil  ;;
1258 9195b2c2SStefan Weil  --enable-tcg-interpreter) tcg_interpreter="yes"
1259 9195b2c2SStefan Weil  ;;
1260 47e98658SCorey Bryant  --disable-cap-ng)  cap_ng="no"
1261 47e98658SCorey Bryant  ;;
1262 47e98658SCorey Bryant  --enable-cap-ng) cap_ng="yes"
1263 47e98658SCorey Bryant  ;;
1264 b3f6ea7eSPaolo Bonzini  --disable-tcg) tcg="no"
1265 b3f6ea7eSPaolo Bonzini  ;;
1266 b3f6ea7eSPaolo Bonzini  --enable-tcg) tcg="yes"
1267 b3f6ea7eSPaolo Bonzini  ;;
1268 5a22ab71SYang Zhong  --disable-malloc-trim) malloc_trim="no"
1269 5a22ab71SYang Zhong  ;;
1270 5a22ab71SYang Zhong  --enable-malloc-trim) malloc_trim="yes"
1271 5a22ab71SYang Zhong  ;;
1272 cd4ec0b4SGerd Hoffmann  --disable-spice) spice="no"
1273 cd4ec0b4SGerd Hoffmann  ;;
1274 cd4ec0b4SGerd Hoffmann  --enable-spice) spice="yes"
1275 cd4ec0b4SGerd Hoffmann  ;;
1276 c589b249SRonnie Sahlberg  --disable-libiscsi) libiscsi="no"
1277 c589b249SRonnie Sahlberg  ;;
1278 c589b249SRonnie Sahlberg  --enable-libiscsi) libiscsi="yes"
1279 c589b249SRonnie Sahlberg  ;;
1280 6542aa9cSPeter Lieven  --disable-libnfs) libnfs="no"
1281 6542aa9cSPeter Lieven  ;;
1282 6542aa9cSPeter Lieven  --enable-libnfs) libnfs="yes"
1283 6542aa9cSPeter Lieven  ;;
1284 05c2a3e7Sbellard  --enable-profiler) profiler="yes"
1285 05c2a3e7Sbellard  ;;
1286 14821030SPavel Borzenkov  --disable-cocoa) cocoa="no"
1287 14821030SPavel Borzenkov  ;;
1288 c2de5c91Smalc  --enable-cocoa)
1289 c2de5c91Smalc      cocoa="yes" ;
1290 89138857SStefan Weil      audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1291 5b0753e0Sbellard  ;;
1292 cad25d69Spbrook  --disable-system) softmmu="no"
1293 0a8e90f4Spbrook  ;;
1294 cad25d69Spbrook  --enable-system) softmmu="yes"
1295 0a8e90f4Spbrook  ;;
1296 0953a80fSZachary Amsden  --disable-user)
1297 0953a80fSZachary Amsden      linux_user="no" ;
1298 0953a80fSZachary Amsden      bsd_user="no" ;
1299 0953a80fSZachary Amsden  ;;
1300 0953a80fSZachary Amsden  --enable-user) ;;
1301 831b7825Sths  --disable-linux-user) linux_user="no"
1302 0a8e90f4Spbrook  ;;
1303 831b7825Sths  --enable-linux-user) linux_user="yes"
1304 831b7825Sths  ;;
1305 84778508Sblueswir1  --disable-bsd-user) bsd_user="no"
1306 84778508Sblueswir1  ;;
1307 84778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
1308 84778508Sblueswir1  ;;
1309 40d6444eSAvi Kivity  --enable-pie) pie="yes"
1310 34005a00SKirill A. Shutemov  ;;
1311 40d6444eSAvi Kivity  --disable-pie) pie="no"
1312 34005a00SKirill A. Shutemov  ;;
1313 85aa5189Sbellard  --enable-werror) werror="yes"
1314 85aa5189Sbellard  ;;
1315 85aa5189Sbellard  --disable-werror) werror="no"
1316 85aa5189Sbellard  ;;
1317 63678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
1318 63678e17SSteven Noonan  ;;
1319 63678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
1320 63678e17SSteven Noonan  ;;
1321 1e4f6065SDaniele Buono  --enable-safe-stack) safe_stack="yes"
1322 1e4f6065SDaniele Buono  ;;
1323 1e4f6065SDaniele Buono  --disable-safe-stack) safe_stack="no"
1324 1e4f6065SDaniele Buono  ;;
1325 4d3b6f6eSbalrog  --disable-curses) curses="no"
1326 4d3b6f6eSbalrog  ;;
1327 c584a6d0SJuan Quintela  --enable-curses) curses="yes"
1328 c584a6d0SJuan Quintela  ;;
1329 e08bb301SSamuel Thibault  --disable-iconv) iconv="no"
1330 e08bb301SSamuel Thibault  ;;
1331 e08bb301SSamuel Thibault  --enable-iconv) iconv="yes"
1332 e08bb301SSamuel Thibault  ;;
1333 769ce76dSAlexander Graf  --disable-curl) curl="no"
1334 769ce76dSAlexander Graf  ;;
1335 788c8196SJuan Quintela  --enable-curl) curl="yes"
1336 788c8196SJuan Quintela  ;;
1337 2df87df7SJuan Quintela  --disable-fdt) fdt="no"
1338 2df87df7SJuan Quintela  ;;
1339 2df87df7SJuan Quintela  --enable-fdt) fdt="yes"
1340 2df87df7SJuan Quintela  ;;
1341 5c6c3a6cSChristoph Hellwig  --disable-linux-aio) linux_aio="no"
1342 5c6c3a6cSChristoph Hellwig  ;;
1343 5c6c3a6cSChristoph Hellwig  --enable-linux-aio) linux_aio="yes"
1344 5c6c3a6cSChristoph Hellwig  ;;
1345 c10dd856SAarushi Mehta  --disable-linux-io-uring) linux_io_uring="no"
1346 c10dd856SAarushi Mehta  ;;
1347 c10dd856SAarushi Mehta  --enable-linux-io-uring) linux_io_uring="yes"
1348 c10dd856SAarushi Mehta  ;;
1349 758e8e38SVenkateswararao Jujjuri (JV)  --disable-attr) attr="no"
1350 758e8e38SVenkateswararao Jujjuri (JV)  ;;
1351 758e8e38SVenkateswararao Jujjuri (JV)  --enable-attr) attr="yes"
1352 758e8e38SVenkateswararao Jujjuri (JV)  ;;
1353 a40161cbSPaolo Bonzini  --disable-membarrier) membarrier="no"
1354 a40161cbSPaolo Bonzini  ;;
1355 a40161cbSPaolo Bonzini  --enable-membarrier) membarrier="yes"
1356 a40161cbSPaolo Bonzini  ;;
1357 77755340Sths  --disable-blobs) blobs="no"
1358 77755340Sths  ;;
1359 7e563bfbSThomas Huth  --with-pkgversion=*) pkgversion="$optarg"
1360 4a19f1ecSpbrook  ;;
1361 519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
1362 519175a2SAlex Barcelo  ;;
1363 70c60c08SStefan Hajnoczi  --disable-coroutine-pool) coroutine_pool="no"
1364 70c60c08SStefan Hajnoczi  ;;
1365 70c60c08SStefan Hajnoczi  --enable-coroutine-pool) coroutine_pool="yes"
1366 70c60c08SStefan Hajnoczi  ;;
1367 7d992e4dSPeter Lieven  --enable-debug-stack-usage) debug_stack_usage="yes"
1368 7d992e4dSPeter Lieven  ;;
1369 f0d92b56SLongpeng(Mike)  --enable-crypto-afalg) crypto_afalg="yes"
1370 f0d92b56SLongpeng(Mike)  ;;
1371 f0d92b56SLongpeng(Mike)  --disable-crypto-afalg) crypto_afalg="no"
1372 f0d92b56SLongpeng(Mike)  ;;
1373 a25dba17SJuan Quintela  --disable-docs) docs="no"
1374 70ec5dc0SAnthony Liguori  ;;
1375 a25dba17SJuan Quintela  --enable-docs) docs="yes"
1376 83a3ab8bSJuan Quintela  ;;
1377 d5970055SMichael S. Tsirkin  --disable-vhost-net) vhost_net="no"
1378 d5970055SMichael S. Tsirkin  ;;
1379 d5970055SMichael S. Tsirkin  --enable-vhost-net) vhost_net="yes"
1380 d5970055SMichael S. Tsirkin  ;;
1381 042cea27SGonglei  --disable-vhost-crypto) vhost_crypto="no"
1382 042cea27SGonglei  ;;
1383 299e6f19SPaolo Bonzini  --enable-vhost-crypto) vhost_crypto="yes"
1384 042cea27SGonglei  ;;
1385 5e9be92dSNicholas Bellinger  --disable-vhost-scsi) vhost_scsi="no"
1386 5e9be92dSNicholas Bellinger  ;;
1387 5e9be92dSNicholas Bellinger  --enable-vhost-scsi) vhost_scsi="yes"
1388 5e9be92dSNicholas Bellinger  ;;
1389 fc0b9b0eSStefan Hajnoczi  --disable-vhost-vsock) vhost_vsock="no"
1390 fc0b9b0eSStefan Hajnoczi  ;;
1391 fc0b9b0eSStefan Hajnoczi  --enable-vhost-vsock) vhost_vsock="yes"
1392 fc0b9b0eSStefan Hajnoczi  ;;
1393 98fc1adaSDr. David Alan Gilbert  --disable-vhost-user-fs) vhost_user_fs="no"
1394 98fc1adaSDr. David Alan Gilbert  ;;
1395 98fc1adaSDr. David Alan Gilbert  --enable-vhost-user-fs) vhost_user_fs="yes"
1396 98fc1adaSDr. David Alan Gilbert  ;;
1397 da076ffeSGerd Hoffmann  --disable-opengl) opengl="no"
1398 20ff075bSMichael Walle  ;;
1399 da076ffeSGerd Hoffmann  --enable-opengl) opengl="yes"
1400 20ff075bSMichael Walle  ;;
1401 f27aaf4bSChristian Brunner  --disable-rbd) rbd="no"
1402 f27aaf4bSChristian Brunner  ;;
1403 f27aaf4bSChristian Brunner  --enable-rbd) rbd="yes"
1404 f27aaf4bSChristian Brunner  ;;
1405 8c84cf11SSergei Trofimovich  --disable-xfsctl) xfs="no"
1406 8c84cf11SSergei Trofimovich  ;;
1407 8c84cf11SSergei Trofimovich  --enable-xfsctl) xfs="yes"
1408 8c84cf11SSergei Trofimovich  ;;
1409 7b02f544SMarc-André Lureau  --disable-smartcard) smartcard="no"
1410 111a38b0SRobert Relyea  ;;
1411 7b02f544SMarc-André Lureau  --enable-smartcard) smartcard="yes"
1412 111a38b0SRobert Relyea  ;;
1413 2b2325ffSGerd Hoffmann  --disable-libusb) libusb="no"
1414 2b2325ffSGerd Hoffmann  ;;
1415 2b2325ffSGerd Hoffmann  --enable-libusb) libusb="yes"
1416 2b2325ffSGerd Hoffmann  ;;
1417 69354a83SHans de Goede  --disable-usb-redir) usb_redir="no"
1418 69354a83SHans de Goede  ;;
1419 69354a83SHans de Goede  --enable-usb-redir) usb_redir="yes"
1420 69354a83SHans de Goede  ;;
1421 1ece9905SAlon Levy  --disable-zlib-test) zlib="no"
1422 1ece9905SAlon Levy  ;;
1423 b25c9dffSStefan Weil  --disable-lzo) lzo="no"
1424 b25c9dffSStefan Weil  ;;
1425 607dacd0Sqiaonuohan  --enable-lzo) lzo="yes"
1426 607dacd0Sqiaonuohan  ;;
1427 b25c9dffSStefan Weil  --disable-snappy) snappy="no"
1428 b25c9dffSStefan Weil  ;;
1429 607dacd0Sqiaonuohan  --enable-snappy) snappy="yes"
1430 607dacd0Sqiaonuohan  ;;
1431 6b383c08SPeter Wu  --disable-bzip2) bzip2="no"
1432 6b383c08SPeter Wu  ;;
1433 6b383c08SPeter Wu  --enable-bzip2) bzip2="yes"
1434 6b383c08SPeter Wu  ;;
1435 83bc1f97SJulio Faracco  --enable-lzfse) lzfse="yes"
1436 83bc1f97SJulio Faracco  ;;
1437 83bc1f97SJulio Faracco  --disable-lzfse) lzfse="no"
1438 83bc1f97SJulio Faracco  ;;
1439 3a678481SJuan Quintela  --disable-zstd) zstd="no"
1440 3a678481SJuan Quintela  ;;
1441 3a678481SJuan Quintela  --enable-zstd) zstd="yes"
1442 3a678481SJuan Quintela  ;;
1443 d138cee9SMichael Roth  --enable-guest-agent) guest_agent="yes"
1444 d138cee9SMichael Roth  ;;
1445 d138cee9SMichael Roth  --disable-guest-agent) guest_agent="no"
1446 d138cee9SMichael Roth  ;;
1447 9dacf32dSYossi Hindin  --enable-guest-agent-msi) guest_agent_msi="yes"
1448 9dacf32dSYossi Hindin  ;;
1449 9dacf32dSYossi Hindin  --disable-guest-agent-msi) guest_agent_msi="no"
1450 9dacf32dSYossi Hindin  ;;
1451 d9840e25STomoki Sekiyama  --with-vss-sdk) vss_win32_sdk=""
1452 d9840e25STomoki Sekiyama  ;;
1453 d9840e25STomoki Sekiyama  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1454 d9840e25STomoki Sekiyama  ;;
1455 d9840e25STomoki Sekiyama  --without-vss-sdk) vss_win32_sdk="no"
1456 d9840e25STomoki Sekiyama  ;;
1457 d9840e25STomoki Sekiyama  --with-win-sdk) win_sdk=""
1458 d9840e25STomoki Sekiyama  ;;
1459 d9840e25STomoki Sekiyama  --with-win-sdk=*) win_sdk="$optarg"
1460 d9840e25STomoki Sekiyama  ;;
1461 d9840e25STomoki Sekiyama  --without-win-sdk) win_sdk="no"
1462 d9840e25STomoki Sekiyama  ;;
1463 4b1c11fdSDaniel P. Berrange  --enable-tools) want_tools="yes"
1464 4b1c11fdSDaniel P. Berrange  ;;
1465 4b1c11fdSDaniel P. Berrange  --disable-tools) want_tools="no"
1466 4b1c11fdSDaniel P. Berrange  ;;
1467 f794573eSEduardo Otubo  --enable-seccomp) seccomp="yes"
1468 f794573eSEduardo Otubo  ;;
1469 f794573eSEduardo Otubo  --disable-seccomp) seccomp="no"
1470 f794573eSEduardo Otubo  ;;
1471 eb100396SBharata B Rao  --disable-glusterfs) glusterfs="no"
1472 eb100396SBharata B Rao  ;;
1473 86583a07SLiam Merwick  --disable-avx2) avx2_opt="no"
1474 86583a07SLiam Merwick  ;;
1475 86583a07SLiam Merwick  --enable-avx2) avx2_opt="yes"
1476 86583a07SLiam Merwick  ;;
1477 6b8cd447SRobert Hoo  --disable-avx512f) avx512f_opt="no"
1478 6b8cd447SRobert Hoo  ;;
1479 6b8cd447SRobert Hoo  --enable-avx512f) avx512f_opt="yes"
1480 6b8cd447SRobert Hoo  ;;
1481 6b8cd447SRobert Hoo
1482 eb100396SBharata B Rao  --enable-glusterfs) glusterfs="yes"
1483 eb100396SBharata B Rao  ;;
1484 52b53c04SFam Zheng  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1485 52b53c04SFam Zheng      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1486 583f6e7bSStefan Hajnoczi  ;;
1487 cb6414dfSFam Zheng  --enable-vhdx|--disable-vhdx)
1488 cb6414dfSFam Zheng      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1489 cb6414dfSFam Zheng  ;;
1490 315d3184SFam Zheng  --enable-uuid|--disable-uuid)
1491 315d3184SFam Zheng      echo "$0: $opt is obsolete, UUID support is always built" >&2
1492 315d3184SFam Zheng  ;;
1493 a4ccabcfSAnthony Liguori  --disable-gtk) gtk="no"
1494 a4ccabcfSAnthony Liguori  ;;
1495 a4ccabcfSAnthony Liguori  --enable-gtk) gtk="yes"
1496 a4ccabcfSAnthony Liguori  ;;
1497 a1c5e949SDaniel P. Berrange  --tls-priority=*) tls_priority="$optarg"
1498 a1c5e949SDaniel P. Berrange  ;;
1499 ddbb0d09SDaniel P. Berrange  --disable-gnutls) gnutls="no"
1500 ddbb0d09SDaniel P. Berrange  ;;
1501 ddbb0d09SDaniel P. Berrange  --enable-gnutls) gnutls="yes"
1502 ddbb0d09SDaniel P. Berrange  ;;
1503 91bfcdb0SDaniel P. Berrange  --disable-nettle) nettle="no"
1504 91bfcdb0SDaniel P. Berrange  ;;
1505 91bfcdb0SDaniel P. Berrange  --enable-nettle) nettle="yes"
1506 91bfcdb0SDaniel P. Berrange  ;;
1507 91bfcdb0SDaniel P. Berrange  --disable-gcrypt) gcrypt="no"
1508 91bfcdb0SDaniel P. Berrange  ;;
1509 91bfcdb0SDaniel P. Berrange  --enable-gcrypt) gcrypt="yes"
1510 91bfcdb0SDaniel P. Berrange  ;;
1511 8953caf3SDaniel P. Berrange  --disable-auth-pam) auth_pam="no"
1512 8953caf3SDaniel P. Berrange  ;;
1513 8953caf3SDaniel P. Berrange  --enable-auth-pam) auth_pam="yes"
1514 8953caf3SDaniel P. Berrange  ;;
1515 2da776dbSMichael R. Hines  --enable-rdma) rdma="yes"
1516 2da776dbSMichael R. Hines  ;;
1517 2da776dbSMichael R. Hines  --disable-rdma) rdma="no"
1518 2da776dbSMichael R. Hines  ;;
1519 21ab34c9SMarcel Apfelbaum  --enable-pvrdma) pvrdma="yes"
1520 21ab34c9SMarcel Apfelbaum  ;;
1521 21ab34c9SMarcel Apfelbaum  --disable-pvrdma) pvrdma="no"
1522 21ab34c9SMarcel Apfelbaum  ;;
1523 bbbf9bfbSStefan Weil  --disable-vte) vte="no"
1524 bbbf9bfbSStefan Weil  ;;
1525 bbbf9bfbSStefan Weil  --enable-vte) vte="yes"
1526 bbbf9bfbSStefan Weil  ;;
1527 9d9e1521SGerd Hoffmann  --disable-virglrenderer) virglrenderer="no"
1528 9d9e1521SGerd Hoffmann  ;;
1529 9d9e1521SGerd Hoffmann  --enable-virglrenderer) virglrenderer="yes"
1530 9d9e1521SGerd Hoffmann  ;;
1531 e91c793cSCole Robinson  --disable-tpm) tpm="no"
1532 e91c793cSCole Robinson  ;;
1533 ab214c29SStefan Berger  --enable-tpm) tpm="yes"
1534 ab214c29SStefan Berger  ;;
1535 b10d49d7SPino Toscano  --disable-libssh) libssh="no"
1536 0a12ec87SRichard W.M. Jones  ;;
1537 b10d49d7SPino Toscano  --enable-libssh) libssh="yes"
1538 0a12ec87SRichard W.M. Jones  ;;
1539 ed1701c6SDr. David Alan Gilbert  --disable-live-block-migration) live_block_migration="no"
1540 ed1701c6SDr. David Alan Gilbert  ;;
1541 ed1701c6SDr. David Alan Gilbert  --enable-live-block-migration) live_block_migration="yes"
1542 ed1701c6SDr. David Alan Gilbert  ;;
1543 a99d57bbSWanlong Gao  --disable-numa) numa="no"
1544 a99d57bbSWanlong Gao  ;;
1545 a99d57bbSWanlong Gao  --enable-numa) numa="yes"
1546 a99d57bbSWanlong Gao  ;;
1547 ed279a06SKlim Kireev  --disable-libxml2) libxml2="no"
1548 ed279a06SKlim Kireev  ;;
1549 ed279a06SKlim Kireev  --enable-libxml2) libxml2="yes"
1550 ed279a06SKlim Kireev  ;;
1551 2847b469SFam Zheng  --disable-tcmalloc) tcmalloc="no"
1552 2847b469SFam Zheng  ;;
1553 2847b469SFam Zheng  --enable-tcmalloc) tcmalloc="yes"
1554 2847b469SFam Zheng  ;;
1555 7b01cb97SAlexandre Derumier  --disable-jemalloc) jemalloc="no"
1556 7b01cb97SAlexandre Derumier  ;;
1557 7b01cb97SAlexandre Derumier  --enable-jemalloc) jemalloc="yes"
1558 7b01cb97SAlexandre Derumier  ;;
1559 a6b1d4c0SChanglong Xie  --disable-replication) replication="no"
1560 a6b1d4c0SChanglong Xie  ;;
1561 a6b1d4c0SChanglong Xie  --enable-replication) replication="yes"
1562 a6b1d4c0SChanglong Xie  ;;
1563 2f740136SJeff Cody  --disable-bochs) bochs="no"
1564 2f740136SJeff Cody  ;;
1565 2f740136SJeff Cody  --enable-bochs) bochs="yes"
1566 2f740136SJeff Cody  ;;
1567 2f740136SJeff Cody  --disable-cloop) cloop="no"
1568 2f740136SJeff Cody  ;;
1569 2f740136SJeff Cody  --enable-cloop) cloop="yes"
1570 2f740136SJeff Cody  ;;
1571 2f740136SJeff Cody  --disable-dmg) dmg="no"
1572 2f740136SJeff Cody  ;;
1573 2f740136SJeff Cody  --enable-dmg) dmg="yes"
1574 2f740136SJeff Cody  ;;
1575 2f740136SJeff Cody  --disable-qcow1) qcow1="no"
1576 2f740136SJeff Cody  ;;
1577 2f740136SJeff Cody  --enable-qcow1) qcow1="yes"
1578 2f740136SJeff Cody  ;;
1579 2f740136SJeff Cody  --disable-vdi) vdi="no"
1580 2f740136SJeff Cody  ;;
1581 2f740136SJeff Cody  --enable-vdi) vdi="yes"
1582 2f740136SJeff Cody  ;;
1583 2f740136SJeff Cody  --disable-vvfat) vvfat="no"
1584 2f740136SJeff Cody  ;;
1585 2f740136SJeff Cody  --enable-vvfat) vvfat="yes"
1586 2f740136SJeff Cody  ;;
1587 2f740136SJeff Cody  --disable-qed) qed="no"
1588 2f740136SJeff Cody  ;;
1589 2f740136SJeff Cody  --enable-qed) qed="yes"
1590 2f740136SJeff Cody  ;;
1591 2f740136SJeff Cody  --disable-parallels) parallels="no"
1592 2f740136SJeff Cody  ;;
1593 2f740136SJeff Cody  --enable-parallels) parallels="yes"
1594 2f740136SJeff Cody  ;;
1595 2f740136SJeff Cody  --disable-sheepdog) sheepdog="no"
1596 2f740136SJeff Cody  ;;
1597 2f740136SJeff Cody  --enable-sheepdog) sheepdog="yes"
1598 2f740136SJeff Cody  ;;
1599 e6a74868SMarc-André Lureau  --disable-vhost-user) vhost_user="no"
1600 e6a74868SMarc-André Lureau  ;;
1601 299e6f19SPaolo Bonzini  --enable-vhost-user) vhost_user="yes"
1602 299e6f19SPaolo Bonzini  ;;
1603 108a6481SCindy Lu  --disable-vhost-vdpa) vhost_vdpa="no"
1604 108a6481SCindy Lu  ;;
1605 108a6481SCindy Lu  --enable-vhost-vdpa) vhost_vdpa="yes"
1606 108a6481SCindy Lu  ;;
1607 299e6f19SPaolo Bonzini  --disable-vhost-kernel) vhost_kernel="no"
1608 299e6f19SPaolo Bonzini  ;;
1609 299e6f19SPaolo Bonzini  --enable-vhost-kernel) vhost_kernel="yes"
1610 e6a74868SMarc-André Lureau  ;;
1611 8ca80760SRichard Henderson  --disable-capstone) capstone="no"
1612 8ca80760SRichard Henderson  ;;
1613 8ca80760SRichard Henderson  --enable-capstone) capstone="yes"
1614 8ca80760SRichard Henderson  ;;
1615 e219c499SRichard Henderson  --enable-capstone=git) capstone="git"
1616 e219c499SRichard Henderson  ;;
1617 e219c499SRichard Henderson  --enable-capstone=system) capstone="system"
1618 e219c499SRichard Henderson  ;;
1619 cc84d63aSDaniel P. Berrange  --with-git=*) git="$optarg"
1620 cc84d63aSDaniel P. Berrange  ;;
1621 f62bbee5SDaniel P. Berrange  --enable-git-update) git_update=yes
1622 f62bbee5SDaniel P. Berrange  ;;
1623 f62bbee5SDaniel P. Berrange  --disable-git-update) git_update=no
1624 f62bbee5SDaniel P. Berrange  ;;
1625 ba59fb77SPaolo Bonzini  --enable-debug-mutex) debug_mutex=yes
1626 ba59fb77SPaolo Bonzini  ;;
1627 ba59fb77SPaolo Bonzini  --disable-debug-mutex) debug_mutex=no
1628 ba59fb77SPaolo Bonzini  ;;
1629 17824406SJunyan He  --enable-libpmem) libpmem=yes
1630 17824406SJunyan He  ;;
1631 17824406SJunyan He  --disable-libpmem) libpmem=no
1632 17824406SJunyan He  ;;
1633 75411919SJames Le Cuirot  --enable-xkbcommon) xkbcommon=yes
1634 75411919SJames Le Cuirot  ;;
1635 75411919SJames Le Cuirot  --disable-xkbcommon) xkbcommon=no
1636 75411919SJames Le Cuirot  ;;
1637 40e8c6f4SAlex Bennée  --enable-plugins) plugins="yes"
1638 40e8c6f4SAlex Bennée  ;;
1639 40e8c6f4SAlex Bennée  --disable-plugins) plugins="no"
1640 40e8c6f4SAlex Bennée  ;;
1641 afc3a8f9SAlex Bennée  --enable-containers) use_containers="yes"
1642 afc3a8f9SAlex Bennée  ;;
1643 afc3a8f9SAlex Bennée  --disable-containers) use_containers="no"
1644 afc3a8f9SAlex Bennée  ;;
1645 adc28027SAlexander Bulekov  --enable-fuzzing) fuzzing=yes
1646 adc28027SAlexander Bulekov  ;;
1647 adc28027SAlexander Bulekov  --disable-fuzzing) fuzzing=no
1648 adc28027SAlexander Bulekov  ;;
1649 f48e590aSAlex Bennée  --gdb=*) gdb_bin="$optarg"
1650 f48e590aSAlex Bennée  ;;
1651 b767d257SMarek Marczykowski-Górecki  --enable-rng-none) rng_none=yes
1652 b767d257SMarek Marczykowski-Górecki  ;;
1653 b767d257SMarek Marczykowski-Górecki  --disable-rng-none) rng_none=no
1654 b767d257SMarek Marczykowski-Górecki  ;;
1655 54e7aac0SAlexey Krasikov  --enable-keyring) secret_keyring="yes"
1656 54e7aac0SAlexey Krasikov  ;;
1657 54e7aac0SAlexey Krasikov  --disable-keyring) secret_keyring="no"
1658 54e7aac0SAlexey Krasikov  ;;
1659 21b2eca6SJingqi Liu  --enable-libdaxctl) libdaxctl=yes
1660 21b2eca6SJingqi Liu  ;;
1661 21b2eca6SJingqi Liu  --disable-libdaxctl) libdaxctl=no
1662 21b2eca6SJingqi Liu  ;;
1663 2d2ad6d0SFam Zheng  *)
1664 2d2ad6d0SFam Zheng      echo "ERROR: unknown option $opt"
1665 2d2ad6d0SFam Zheng      echo "Try '$0 --help' for more information"
1666 2d2ad6d0SFam Zheng      exit 1
1667 7f1559c6Sbalrog  ;;
1668 7d13299dSbellard  esac
1669 7d13299dSbellarddone
1670 7d13299dSbellard
1671 22a87800SMarc-André Lureaulibdir="${libdir:-$prefix/lib}"
1672 22a87800SMarc-André Lureaulibexecdir="${libexecdir:-$prefix/libexec}"
1673 22a87800SMarc-André Lureauincludedir="${includedir:-$prefix/include}"
1674 22a87800SMarc-André Lureau
1675 22a87800SMarc-André Lureauif test "$mingw32" = "yes" ; then
1676 22a87800SMarc-André Lureau    mandir="$prefix"
1677 22a87800SMarc-André Lureau    datadir="$prefix"
1678 22a87800SMarc-André Lureau    qemu_docdir="$prefix"
1679 22a87800SMarc-André Lureau    bindir="$prefix"
1680 22a87800SMarc-André Lureau    sysconfdir="$prefix"
1681 22a87800SMarc-André Lureau    local_statedir=
1682 22a87800SMarc-André Lureauelse
1683 22a87800SMarc-André Lureau    mandir="${mandir:-$prefix/share/man}"
1684 22a87800SMarc-André Lureau    datadir="${datadir:-$prefix/share}"
1685 22a87800SMarc-André Lureau    qemu_docdir="${qemu_docdir:-$prefix/share/doc/qemu}"
1686 22a87800SMarc-André Lureau    bindir="${bindir:-$prefix/bin}"
1687 22a87800SMarc-André Lureau    sysconfdir="${sysconfdir:-$prefix/etc}"
1688 22a87800SMarc-André Lureau    local_statedir="${local_statedir:-$prefix/var}"
1689 22a87800SMarc-André Lureaufi
1690 22a87800SMarc-André Lureau
1691 40293e58Sbellardcase "$cpu" in
1692 e3608d66SRichard Henderson    ppc)
1693 e3608d66SRichard Henderson           CPU_CFLAGS="-m32"
1694 db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1695 e3608d66SRichard Henderson           ;;
1696 e3608d66SRichard Henderson    ppc64)
1697 e3608d66SRichard Henderson           CPU_CFLAGS="-m64"
1698 db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1699 e3608d66SRichard Henderson           ;;
1700 9b9c37c3SRichard Henderson    sparc)
1701 f1079bb8SRichard Henderson           CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1702 db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1703 3142255cSblueswir1           ;;
1704 ed968ff1SJuan Quintela    sparc64)
1705 79f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1706 db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1707 3142255cSblueswir1           ;;
1708 76d83bdeSths    s390)
1709 061cdd81SRichard Henderson           CPU_CFLAGS="-m31"
1710 db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1711 28d7cc49SRichard Henderson           ;;
1712 28d7cc49SRichard Henderson    s390x)
1713 061cdd81SRichard Henderson           CPU_CFLAGS="-m64"
1714 db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1715 76d83bdeSths           ;;
1716 40293e58Sbellard    i386)
1717 79f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m32"
1718 db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1719 40293e58Sbellard           ;;
1720 40293e58Sbellard    x86_64)
1721 7ebee43eSRichard Henderson           # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1722 7ebee43eSRichard Henderson           # If we truly care, we should simply detect this case at
1723 7ebee43eSRichard Henderson           # runtime and generate the fallback to serial emulation.
1724 7ebee43eSRichard Henderson           CPU_CFLAGS="-m64 -mcx16"
1725 db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1726 379f6698SPaul Brook           ;;
1727 c72b26ecSRichard Henderson    x32)
1728 c72b26ecSRichard Henderson           CPU_CFLAGS="-mx32"
1729 db5adeaaSPaolo Bonzini           QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1730 c72b26ecSRichard Henderson           ;;
1731 30163d89SPeter Maydell    # No special flags required for other host CPUs
1732 3142255cSblueswir1esac
1733 3142255cSblueswir1
1734 2038f8c8SPaolo Bonzinieval "cross_cc_${cpu}=\$host_cc"
1735 2038f8c8SPaolo Bonzinicross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1736 79f3b12fSPeter CrosthwaiteQEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1737 79f3b12fSPeter Crosthwaite
1738 affc88ccSPeter Maydell# For user-mode emulation the host arch has to be one we explicitly
1739 affc88ccSPeter Maydell# support, even if we're using TCI.
1740 affc88ccSPeter Maydellif [ "$ARCH" = "unknown" ]; then
1741 affc88ccSPeter Maydell  bsd_user="no"
1742 affc88ccSPeter Maydell  linux_user="no"
1743 affc88ccSPeter Maydellfi
1744 affc88ccSPeter Maydell
1745 1cf295beSPhilippe Mathieu-Daudéif [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1746 1cf295beSPhilippe Mathieu-Daudé  tcg="no"
1747 1cf295beSPhilippe Mathieu-Daudéfi
1748 1cf295beSPhilippe Mathieu-Daudé
1749 60e0df25SPeter Maydelldefault_target_list=""
1750 60e0df25SPeter Maydell
1751 6e92f823SPeter Maydellmak_wilds=""
1752 6e92f823SPeter Maydell
1753 60e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
1754 6e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1755 60e0df25SPeter Maydellfi
1756 60e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
1757 6e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1758 60e0df25SPeter Maydellfi
1759 60e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
1760 6e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1761 60e0df25SPeter Maydellfi
1762 60e0df25SPeter Maydell
1763 447e133fSAlex Bennéeif test -z "$target_list_exclude"; then
1764 6e92f823SPeter Maydell    for config in $mak_wilds; do
1765 6e92f823SPeter Maydell        default_target_list="${default_target_list} $(basename "$config" .mak)"
1766 6e92f823SPeter Maydell    done
1767 447e133fSAlex Bennéeelse
1768 447e133fSAlex Bennée    exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1769 447e133fSAlex Bennée    for config in $mak_wilds; do
1770 447e133fSAlex Bennée        target="$(basename "$config" .mak)"
1771 447e133fSAlex Bennée        exclude="no"
1772 447e133fSAlex Bennée        for excl in $exclude_list; do
1773 447e133fSAlex Bennée            if test "$excl" = "$target"; then
1774 447e133fSAlex Bennée                exclude="yes"
1775 447e133fSAlex Bennée                break;
1776 447e133fSAlex Bennée            fi
1777 447e133fSAlex Bennée        done
1778 447e133fSAlex Bennée        if test "$exclude" = "no"; then
1779 447e133fSAlex Bennée            default_target_list="${default_target_list} $target"
1780 447e133fSAlex Bennée        fi
1781 447e133fSAlex Bennée    done
1782 447e133fSAlex Bennéefi
1783 6e92f823SPeter Maydell
1784 c53eeaf7SStefan Hajnoczi# Enumerate public trace backends for --help output
1785 64a6047dSGreg Kurztrace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1786 c53eeaf7SStefan Hajnoczi
1787 af5db58eSpbrookif test x"$show_help" = x"yes" ; then
1788 af5db58eSpbrookcat << EOF
1789 af5db58eSpbrook
1790 af5db58eSpbrookUsage: configure [options]
1791 af5db58eSpbrookOptions: [defaults in brackets after descriptions]
1792 af5db58eSpbrook
1793 08fb77edSStefan WeilStandard options:
1794 08fb77edSStefan Weil  --help                   print this message
1795 08fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
1796 08fb77edSStefan Weil  --interp-prefix=PREFIX   where to find shared libraries, etc.
1797 08fb77edSStefan Weil                           use %M for cpu name [$interp_prefix]
1798 08fb77edSStefan Weil  --target-list=LIST       set target list (default: build everything)
1799 08fb77edSStefan Weil$(echo Available targets: $default_target_list | \
1800 08fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
1801 447e133fSAlex Bennée  --target-list-exclude=LIST exclude a set of targets from the default target-list
1802 08fb77edSStefan Weil
1803 08fb77edSStefan WeilAdvanced options (experts only):
1804 08fb77edSStefan Weil  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
1805 08fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
1806 08fb77edSStefan Weil  --iasl=IASL              use ACPI compiler IASL [$iasl]
1807 08fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
1808 08fb77edSStefan Weil                           build time
1809 08fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
1810 08fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1811 08fb77edSStefan Weil  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
1812 11cde1c8SBruno Dominguez  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1813 08fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1814 d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1815 d422b2bcSAlex Bennée  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
1816 08fb77edSStefan Weil  --make=MAKE              use specified make [$make]
1817 08fb77edSStefan Weil  --install=INSTALL        use specified install [$install]
1818 08fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
1819 2eb054c2SPeter Maydell  --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1820 a5665051SPaolo Bonzini  --meson=MESON            use specified meson [$meson]
1821 08fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
1822 db1b5f13SThomas Huth  --with-git=GIT           use specified git [$git]
1823 08fb77edSStefan Weil  --static                 enable static build [$static]
1824 08fb77edSStefan Weil  --mandir=PATH            install man pages in PATH
1825 08fb77edSStefan Weil  --datadir=PATH           install firmware in PATH$confsuffix
1826 08fb77edSStefan Weil  --docdir=PATH            install documentation in PATH$confsuffix
1827 08fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
1828 08fb77edSStefan Weil  --libdir=PATH            install libraries in PATH
1829 db1b5f13SThomas Huth  --libexecdir=PATH        install helper binaries in PATH
1830 08fb77edSStefan Weil  --sysconfdir=PATH        install config in PATH$confsuffix
1831 08fb77edSStefan Weil  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1832 3d5eecabSGerd Hoffmann  --firmwarepath=PATH      search PATH for firmware files
1833 13336606SRobert Foley  --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1834 e26110cfSFam Zheng  --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1835 db1b5f13SThomas Huth  --with-pkgversion=VERS   use specified string as sub-version of the package
1836 08fb77edSStefan Weil  --enable-debug           enable common debug build options
1837 247724cbSMarc-André Lureau  --enable-sanitizers      enable default sanitizers
1838 0aebab04SLingfeng Yang  --enable-tsan            enable thread sanitizer
1839 08fb77edSStefan Weil  --disable-strip          disable stripping binaries
1840 08fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
1841 63678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
1842 08fb77edSStefan Weil  --audio-drv-list=LIST    set audio drivers list:
1843 08fb77edSStefan Weil                           Available drivers: $audio_possible_drivers
1844 08fb77edSStefan Weil  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
1845 08fb77edSStefan Weil  --block-drv-rw-whitelist=L
1846 08fb77edSStefan Weil                           set block driver read-write whitelist
1847 08fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
1848 08fb77edSStefan Weil  --block-drv-ro-whitelist=L
1849 08fb77edSStefan Weil                           set block driver read-only whitelist
1850 08fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
1851 5b808275SLluís Vilanova  --enable-trace-backends=B Set trace backend
1852 c53eeaf7SStefan Hajnoczi                           Available backends: $trace_backend_list
1853 08fb77edSStefan Weil  --with-trace-file=NAME   Full PATH,NAME of file to store traces
1854 08fb77edSStefan Weil                           Default:trace-<pid>
1855 c23f23b9SMichael Tokarev  --disable-slirp          disable SLIRP userspace network connectivity
1856 c23f23b9SMichael Tokarev  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1857 5a22ab71SYang Zhong  --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1858 c23f23b9SMichael Tokarev  --oss-lib                path to OSS library
1859 c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
1860 08fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
1861 33c53c54SDaniel P. Berrange                           ucontext, sigaltstack, windows
1862 08fb77edSStefan Weil  --enable-gcov            enable test coverage analysis with gcov
1863 c23f23b9SMichael Tokarev  --disable-blobs          disable installing provided firmware blobs
1864 c23f23b9SMichael Tokarev  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1865 c23f23b9SMichael Tokarev  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1866 a1c5e949SDaniel P. Berrange  --tls-priority           default TLS protocol/cipher priority string
1867 c12d66aaSLin Ma  --enable-gprof           QEMU profiling with gprof
1868 c12d66aaSLin Ma  --enable-profiler        profiler support
1869 c12d66aaSLin Ma  --enable-debug-stack-usage
1870 c12d66aaSLin Ma                           track the maximum stack usage of stacks created by qemu_alloc_stack
1871 40e8c6f4SAlex Bennée  --enable-plugins
1872 40e8c6f4SAlex Bennée                           enable plugins via shared library loading
1873 afc3a8f9SAlex Bennée  --disable-containers     don't use containers for cross-building
1874 f48e590aSAlex Bennée  --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
1875 c23f23b9SMichael Tokarev
1876 c23f23b9SMichael TokarevOptional features, enabled with --enable-FEATURE and
1877 c23f23b9SMichael Tokarevdisabled with --disable-FEATURE, default is enabled if available:
1878 c23f23b9SMichael Tokarev
1879 c23f23b9SMichael Tokarev  system          all system emulation targets
1880 c23f23b9SMichael Tokarev  user            supported user emulation targets
1881 c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1882 c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1883 c23f23b9SMichael Tokarev  docs            build documentation
1884 c23f23b9SMichael Tokarev  guest-agent     build the QEMU Guest Agent
1885 c23f23b9SMichael Tokarev  guest-agent-msi build guest agent Windows MSI installation package
1886 c23f23b9SMichael Tokarev  pie             Position Independent Executables
1887 21e709aaSMarc-André Lureau  modules         modules support (non-Windows)
1888 bd83c861SChristian Ehrhardt  module-upgrades try to load modules from alternate paths for upgrades
1889 c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1890 c23f23b9SMichael Tokarev  debug-info      debugging information
1891 c23f23b9SMichael Tokarev  sparse          sparse checker
1892 1e4f6065SDaniele Buono  safe-stack      SafeStack Stack Smash Protection. Depends on
1893 1e4f6065SDaniele Buono                  clang/llvm >= 3.7 and requires coroutine backend ucontext.
1894 c23f23b9SMichael Tokarev
1895 ddbb0d09SDaniel P. Berrange  gnutls          GNUTLS cryptography support
1896 91bfcdb0SDaniel P. Berrange  nettle          nettle cryptography support
1897 91bfcdb0SDaniel P. Berrange  gcrypt          libgcrypt cryptography support
1898 8953caf3SDaniel P. Berrange  auth-pam        PAM access control
1899 c23f23b9SMichael Tokarev  sdl             SDL UI
1900 04c6e16fSMarkus Armbruster  sdl-image       SDL Image support for icons
1901 c23f23b9SMichael Tokarev  gtk             gtk UI
1902 c23f23b9SMichael Tokarev  vte             vte support for the gtk UI
1903 c23f23b9SMichael Tokarev  curses          curses UI
1904 e08bb301SSamuel Thibault  iconv           font glyph conversion support
1905 c23f23b9SMichael Tokarev  vnc             VNC UI support
1906 c23f23b9SMichael Tokarev  vnc-sasl        SASL encryption for VNC server
1907 c23f23b9SMichael Tokarev  vnc-jpeg        JPEG lossy compression for VNC server
1908 c23f23b9SMichael Tokarev  vnc-png         PNG compression for VNC server
1909 c23f23b9SMichael Tokarev  cocoa           Cocoa UI (Mac OS X only)
1910 c23f23b9SMichael Tokarev  virtfs          VirtFS
1911 fe8fc5aeSPaolo Bonzini  mpath           Multipath persistent reservation passthrough
1912 c23f23b9SMichael Tokarev  xen             xen backend driver support
1913 70c292afSAnthony PERARD  xen-pci-passthrough    PCI passthrough support for Xen
1914 c23f23b9SMichael Tokarev  brlapi          BrlAPI (Braile)
1915 c23f23b9SMichael Tokarev  curl            curl connectivity
1916 a40161cbSPaolo Bonzini  membarrier      membarrier system call (for Linux 4.14+ or Windows)
1917 c23f23b9SMichael Tokarev  fdt             fdt device tree
1918 c23f23b9SMichael Tokarev  kvm             KVM acceleration support
1919 b0cb0a66SVincent Palatin  hax             HAX acceleration support
1920 c97d6d2cSSergio Andres Gomez Del Real  hvf             Hypervisor.framework acceleration support
1921 d661d9a4SJustin Terry (VM)  whpx            Windows Hypervisor Platform acceleration support
1922 21ab34c9SMarcel Apfelbaum  rdma            Enable RDMA-based migration
1923 21ab34c9SMarcel Apfelbaum  pvrdma          Enable PVRDMA support
1924 c23f23b9SMichael Tokarev  vde             support for vde network
1925 c23f23b9SMichael Tokarev  netmap          support for netmap network
1926 c23f23b9SMichael Tokarev  linux-aio       Linux AIO support
1927 c10dd856SAarushi Mehta  linux-io-uring  Linux io_uring support
1928 c23f23b9SMichael Tokarev  cap-ng          libcap-ng support
1929 c23f23b9SMichael Tokarev  attr            attr and xattr support
1930 299e6f19SPaolo Bonzini  vhost-net       vhost-net kernel acceleration support
1931 299e6f19SPaolo Bonzini  vhost-vsock     virtio sockets device support
1932 299e6f19SPaolo Bonzini  vhost-scsi      vhost-scsi kernel target support
1933 299e6f19SPaolo Bonzini  vhost-crypto    vhost-user-crypto backend support
1934 299e6f19SPaolo Bonzini  vhost-kernel    vhost kernel backend support
1935 299e6f19SPaolo Bonzini  vhost-user      vhost-user backend support
1936 108a6481SCindy Lu  vhost-vdpa      vhost-vdpa kernel backend support
1937 c23f23b9SMichael Tokarev  spice           spice
1938 c23f23b9SMichael Tokarev  rbd             rados block device (rbd)
1939 c23f23b9SMichael Tokarev  libiscsi        iscsi support
1940 c23f23b9SMichael Tokarev  libnfs          nfs support
1941 7b02f544SMarc-André Lureau  smartcard       smartcard support (libcacard)
1942 c23f23b9SMichael Tokarev  libusb          libusb (for usb passthrough)
1943 ed1701c6SDr. David Alan Gilbert  live-block-migration   Block migration in the main migration stream
1944 c23f23b9SMichael Tokarev  usb-redir       usb network redirection support
1945 c23f23b9SMichael Tokarev  lzo             support of lzo compression library
1946 c23f23b9SMichael Tokarev  snappy          support of snappy compression library
1947 c23f23b9SMichael Tokarev  bzip2           support of bzip2 compression library
1948 c23f23b9SMichael Tokarev                  (for reading bzip2-compressed dmg images)
1949 83bc1f97SJulio Faracco  lzfse           support of lzfse compression library
1950 83bc1f97SJulio Faracco                  (for reading lzfse-compressed dmg images)
1951 3a678481SJuan Quintela  zstd            support for zstd compression library
1952 d298ac10SDenis Plotnikov                  (for migration compression and qcow2 cluster compression)
1953 c23f23b9SMichael Tokarev  seccomp         seccomp support
1954 c23f23b9SMichael Tokarev  coroutine-pool  coroutine freelist (better performance)
1955 c23f23b9SMichael Tokarev  glusterfs       GlusterFS backend
1956 c23f23b9SMichael Tokarev  tpm             TPM support
1957 b10d49d7SPino Toscano  libssh          ssh block device support
1958 c23f23b9SMichael Tokarev  numa            libnuma support
1959 ed279a06SKlim Kireev  libxml2         for Parallels image format
1960 c23f23b9SMichael Tokarev  tcmalloc        tcmalloc support
1961 7b01cb97SAlexandre Derumier  jemalloc        jemalloc support
1962 86583a07SLiam Merwick  avx2            AVX2 optimization support
1963 6b8cd447SRobert Hoo  avx512f         AVX512F optimization support
1964 a6b1d4c0SChanglong Xie  replication     replication support
1965 c12d66aaSLin Ma  opengl          opengl support
1966 c12d66aaSLin Ma  virglrenderer   virgl rendering support
1967 c12d66aaSLin Ma  xfsctl          xfsctl support
1968 c12d66aaSLin Ma  qom-cast-debug  cast debugging support
1969 8de73fa8SCleber Rosa  tools           build qemu-io, qemu-nbd and qemu-img tools
1970 2f740136SJeff Cody  bochs           bochs image format support
1971 2f740136SJeff Cody  cloop           cloop image format support
1972 2f740136SJeff Cody  dmg             dmg image format support
1973 2f740136SJeff Cody  qcow1           qcow v1 image format support
1974 2f740136SJeff Cody  vdi             vdi image format support
1975 2f740136SJeff Cody  vvfat           vvfat image format support
1976 2f740136SJeff Cody  qed             qed image format support
1977 2f740136SJeff Cody  parallels       parallels image format support
1978 2f740136SJeff Cody  sheepdog        sheepdog block driver support
1979 f0d92b56SLongpeng(Mike)  crypto-afalg    Linux AF_ALG crypto backend driver
1980 8ca80760SRichard Henderson  capstone        capstone disassembler support
1981 ba59fb77SPaolo Bonzini  debug-mutex     mutex debugging support
1982 17824406SJunyan He  libpmem         libpmem support
1983 75411919SJames Le Cuirot  xkbcommon       xkbcommon support
1984 b767d257SMarek Marczykowski-Górecki  rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
1985 21b2eca6SJingqi Liu  libdaxctl       libdaxctl support
1986 08fb77edSStefan Weil
1987 08fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1988 af5db58eSpbrookEOF
1989 2d2ad6d0SFam Zhengexit 0
1990 af5db58eSpbrookfi
1991 af5db58eSpbrook
1992 9c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated
1993 bb768f71SThomas Huthrm -f */config-devices.mak.d
1994 9c790242SThomas Huth
1995 4d6a835dSLaurent Vivier# Remove syscall_nr.h to be sure they will be regenerated in the build
1996 4d6a835dSLaurent Vivier# directory, not in the source directory
1997 bb0cdc03SLaurent Vivierfor arch in alpha hppa m68k xtensa sh4 microblaze arm ppc s390x sparc sparc64 \
1998 686a0fe4SLaurent Vivier    i386 x86_64 mips mips64 ; do
1999 4d6a835dSLaurent Vivier    # remove the file if it has been generated in the source directory
2000 4d6a835dSLaurent Vivier    rm -f "${source_path}/linux-user/${arch}/syscall_nr.h"
2001 4d6a835dSLaurent Vivier    # remove the dependency files
2002 91e5998fSLaurent Vivier    for target in ${arch}*-linux-user ; do
2003 91e5998fSLaurent Vivier        test -d "${target}" && find "${target}" -type f -name "*.d" \
2004 4d6a835dSLaurent Vivier             -exec grep -q "${source_path}/linux-user/${arch}/syscall_nr.h" {} \; \
2005 91e5998fSLaurent Vivier             -print | while read file ; do rm "${file}" "${file%.d}.o" ; done
2006 91e5998fSLaurent Vivier    done
2007 4d6a835dSLaurent Vivierdone
2008 4d6a835dSLaurent Vivier
2009 faf44142SDaniel P. Berrangéif test -z "$python"
2010 faf44142SDaniel P. Berrangéthen
2011 c53eeaf7SStefan Hajnoczi    error_exit "Python not found. Use --python=/path/to/python"
2012 c53eeaf7SStefan Hajnoczifi
2013 c53eeaf7SStefan Hajnoczi
2014 c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit
2015 c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value.
2016 ddf90699SEduardo Habkostif ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
2017 ddf90699SEduardo Habkost  error_exit "Cannot use '$python', Python >= 3.5 is required." \
2018 c53eeaf7SStefan Hajnoczi      "Use --python=/path/to/python to specify a supported Python."
2019 c53eeaf7SStefan Hajnoczifi
2020 c53eeaf7SStefan Hajnoczi
2021 755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it
2022 406ab2f3SCleber Rosapython_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
2023 755ee70fSCleber Rosa
2024 c53eeaf7SStefan Hajnoczi# Suppress writing compiled files
2025 c53eeaf7SStefan Hajnoczipython="$python -B"
2026 c53eeaf7SStefan Hajnoczi
2027 0a01d76fSMarc-André Lureauif test -z "$meson"; then
2028 0a01d76fSMarc-André Lureau    if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.0; then
2029 0a01d76fSMarc-André Lureau        meson=meson
2030 0a01d76fSMarc-André Lureau    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
2031 0a01d76fSMarc-André Lureau        meson=git
2032 0a01d76fSMarc-André Lureau    elif test -e "${source_path}/meson/meson.py" ; then
2033 0a01d76fSMarc-André Lureau        meson=internal
2034 0a01d76fSMarc-André Lureau    else
2035 0a01d76fSMarc-André Lureau        if test "$explicit_python" = yes; then
2036 0a01d76fSMarc-André Lureau            error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
2037 0a01d76fSMarc-André Lureau        else
2038 a5665051SPaolo Bonzini            error_exit "Meson not found.  Use --meson=/path/to/meson"
2039 a5665051SPaolo Bonzini        fi
2040 0a01d76fSMarc-André Lureau    fi
2041 0a01d76fSMarc-André Lureauelse
2042 0a01d76fSMarc-André Lureau    # Meson uses its own Python interpreter to invoke other Python scripts,
2043 0a01d76fSMarc-André Lureau    # but the user wants to use the one they specified with --python.
2044 0a01d76fSMarc-André Lureau    #
2045 0a01d76fSMarc-André Lureau    # We do not want to override the distro Python interpreter (and sometimes
2046 0a01d76fSMarc-André Lureau    # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2047 0a01d76fSMarc-André Lureau    # just require --meson=git|internal together with --python.
2048 0a01d76fSMarc-André Lureau    if test "$explicit_python" = yes; then
2049 0a01d76fSMarc-André Lureau        case "$meson" in
2050 0a01d76fSMarc-André Lureau            git | internal) ;;
2051 0a01d76fSMarc-André Lureau            *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2052 0a01d76fSMarc-André Lureau        esac
2053 0a01d76fSMarc-André Lureau    fi
2054 0a01d76fSMarc-André Lureaufi
2055 a5665051SPaolo Bonzini
2056 0a01d76fSMarc-André Lureauif test "$meson" = git; then
2057 0a01d76fSMarc-André Lureau    git_submodules="${git_submodules} meson"
2058 0a01d76fSMarc-André Lureaufi
2059 0a01d76fSMarc-André Lureauif test "$git_update" = yes; then
2060 0a01d76fSMarc-André Lureau    (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
2061 0a01d76fSMarc-André Lureaufi
2062 0a01d76fSMarc-André Lureau
2063 0a01d76fSMarc-André Lureaucase "$meson" in
2064 0a01d76fSMarc-André Lureau    git | internal)
2065 a5665051SPaolo Bonzini        if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then
2066 a5665051SPaolo Bonzini            error_exit "Python setuptools not found"
2067 a5665051SPaolo Bonzini        fi
2068 0a01d76fSMarc-André Lureau        meson="$python ${source_path}/meson/meson.py"
2069 0a01d76fSMarc-André Lureau        ;;
2070 0a01d76fSMarc-André Lureau    *) meson=$(command -v meson) ;;
2071 0a01d76fSMarc-André Lureauesac
2072 0a01d76fSMarc-André Lureau
2073 a5665051SPaolo Bonzini
2074 9aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing
2075 9aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the
2076 9aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case).
2077 9aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC.
2078 9aae6e54SDaniel Henrique Barbozawrite_c_skeleton;
2079 9aae6e54SDaniel Henrique Barbozaif compile_object ; then
2080 9aae6e54SDaniel Henrique Barboza  : C compiler works ok
2081 9aae6e54SDaniel Henrique Barbozaelse
2082 9aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" either does not exist or does not work"
2083 9aae6e54SDaniel Henrique Barbozafi
2084 9aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then
2085 9aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2086 9aae6e54SDaniel Henrique Barbozafi
2087 9aae6e54SDaniel Henrique Barboza
2088 359bc95dSPeter Maydell# Now we have handled --enable-tcg-interpreter and know we're not just
2089 359bc95dSPeter Maydell# printing the help message, bail out if the host CPU isn't supported.
2090 359bc95dSPeter Maydellif test "$ARCH" = "unknown"; then
2091 359bc95dSPeter Maydell    if test "$tcg_interpreter" = "yes" ; then
2092 359bc95dSPeter Maydell        echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2093 359bc95dSPeter Maydell    else
2094 76ad07a4SPeter Maydell        error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2095 359bc95dSPeter Maydell    fi
2096 359bc95dSPeter Maydellfi
2097 359bc95dSPeter Maydell
2098 9c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
2099 9c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
2100 9c83ffd8SPeter Maydellif test -z "$werror" ; then
2101 fd73745dSAlexey Kardashevskiy    if test -e "$source_path/.git" && \
2102 e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2103 9c83ffd8SPeter Maydell        werror="yes"
2104 9c83ffd8SPeter Maydell    else
2105 9c83ffd8SPeter Maydell        werror="no"
2106 9c83ffd8SPeter Maydell    fi
2107 9c83ffd8SPeter Maydellfi
2108 9c83ffd8SPeter Maydell
2109 fb59dabdSPeter Maydellif test "$bogus_os" = "yes"; then
2110 fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
2111 fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
2112 fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
2113 fb59dabdSPeter Maydell    # host OS we should stop now.
2114 951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2115 fb59dabdSPeter Maydellfi
2116 fb59dabdSPeter Maydell
2117 efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements:
2118 efc6c070SThomas Huthcat > $TMPC << EOF
2119 efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__)
2120 efc6c070SThomas Huth# ifdef __apple_build_version__
2121 efc6c070SThomas Huth#  if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2122 efc6c070SThomas Huth#   error You need at least XCode Clang v5.1 to compile QEMU
2123 efc6c070SThomas Huth#  endif
2124 efc6c070SThomas Huth# else
2125 efc6c070SThomas Huth#  if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2126 efc6c070SThomas Huth#   error You need at least Clang v3.4 to compile QEMU
2127 efc6c070SThomas Huth#  endif
2128 efc6c070SThomas Huth# endif
2129 efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2130 efc6c070SThomas Huth# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2131 efc6c070SThomas Huth#  error You need at least GCC v4.8 to compile QEMU
2132 efc6c070SThomas Huth# endif
2133 efc6c070SThomas Huth#else
2134 efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU
2135 efc6c070SThomas Huth#endif
2136 efc6c070SThomas Huthint main (void) { return 0; }
2137 efc6c070SThomas HuthEOF
2138 efc6c070SThomas Huthif ! compile_prog "" "" ; then
2139 efc6c070SThomas Huth    error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2140 efc6c070SThomas Huthfi
2141 efc6c070SThomas Huth
2142 00849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately.
2143 00849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second.
2144 00849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all
2145 00849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would
2146 00849b92SRichard Henderson# just silently disable some features, so it's too error prone.
2147 00849b92SRichard Henderson
2148 00849b92SRichard Hendersonwarn_flags=
2149 00849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration
2150 00849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition
2151 00849b92SRichard Hendersonadd_to warn_flags -Wtype-limits
2152 00849b92SRichard Hendersonadd_to warn_flags -Wformat-security
2153 00849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k
2154 00849b92SRichard Hendersonadd_to warn_flags -Winit-self
2155 00849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers
2156 00849b92SRichard Hendersonadd_to warn_flags -Wempty-body
2157 00849b92SRichard Hendersonadd_to warn_flags -Wnested-externs
2158 00849b92SRichard Hendersonadd_to warn_flags -Wendif-labels
2159 00849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined
2160 00849b92SRichard Henderson
2161 00849b92SRichard Hendersonnowarn_flags=
2162 00849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides
2163 00849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs
2164 00849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value
2165 00849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int
2166 00849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition
2167 aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare
2168 bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi
2169 00849b92SRichard Henderson
2170 00849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags"
2171 93b25869SJohn Snow
2172 93b25869SJohn Snowcc_has_warning_flag() {
2173 93b25869SJohn Snow    write_c_skeleton;
2174 93b25869SJohn Snow
2175 a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
2176 a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
2177 a1d29d6cSPeter Maydell    # warning options).
2178 93b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2179 93b25869SJohn Snow    compile_prog "-Werror $optflag" ""
2180 93b25869SJohn Snow}
2181 93b25869SJohn Snow
2182 93b25869SJohn Snowfor flag in $gcc_flags; do
2183 93b25869SJohn Snow    if cc_has_warning_flag $flag ; then
2184 8d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2185 8d05095cSPaolo Bonzini    fi
2186 8d05095cSPaolo Bonzinidone
2187 8d05095cSPaolo Bonzini
2188 63678e17SSteven Noonanif test "$stack_protector" != "no"; then
2189 fccd35a0SRodrigo Rebello  cat > $TMPC << EOF
2190 fccd35a0SRodrigo Rebelloint main(int argc, char *argv[])
2191 fccd35a0SRodrigo Rebello{
2192 fccd35a0SRodrigo Rebello    char arr[64], *p = arr, *c = argv[0];
2193 fccd35a0SRodrigo Rebello    while (*c) {
2194 fccd35a0SRodrigo Rebello        *p++ = *c++;
2195 fccd35a0SRodrigo Rebello    }
2196 fccd35a0SRodrigo Rebello    return 0;
2197 fccd35a0SRodrigo Rebello}
2198 fccd35a0SRodrigo RebelloEOF
2199 63678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
2200 3b463a3fSMiroslav Rezanina  sp_on=0
2201 63678e17SSteven Noonan  for flag in $gcc_flags; do
2202 590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
2203 590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
2204 086d5f75SPaolo Bonzini    if compile_object "-Werror $flag" &&
2205 590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
2206 63678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2207 db5adeaaSPaolo Bonzini      QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2208 3b463a3fSMiroslav Rezanina      sp_on=1
2209 63678e17SSteven Noonan      break
2210 63678e17SSteven Noonan    fi
2211 63678e17SSteven Noonan  done
2212 3b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
2213 3b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
2214 3b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
2215 3b463a3fSMiroslav Rezanina    fi
2216 3b463a3fSMiroslav Rezanina  fi
2217 37746c5eSMarc-André Lureaufi
2218 37746c5eSMarc-André Lureau
2219 20bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for
2220 20bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}.
2221 20bc94a2SPaolo Bonzinicat > $TMPC << EOF
2222 20bc94a2SPaolo Bonzinistruct {
2223 20bc94a2SPaolo Bonzini  int a[2];
2224 20bc94a2SPaolo Bonzini} x = {0};
2225 20bc94a2SPaolo BonziniEOF
2226 20bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then
2227 20bc94a2SPaolo Bonzini  :
2228 20bc94a2SPaolo Bonzinielse
2229 20bc94a2SPaolo Bonzini  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2230 20bc94a2SPaolo Bonzinifi
2231 20bc94a2SPaolo Bonzini
2232 21e709aaSMarc-André Lureau# Our module code doesn't support Windows
2233 21e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2234 21e709aaSMarc-André Lureau  error_exit "Modules are not available for Windows"
2235 21e709aaSMarc-André Lureaufi
2236 21e709aaSMarc-André Lureau
2237 bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled
2238 bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2239 bd83c861SChristian Ehrhardt  error_exit "Can't enable module-upgrades as Modules are not enabled"
2240 bd83c861SChristian Ehrhardtfi
2241 bd83c861SChristian Ehrhardt
2242 d376e9deSThomas Huth# Static linking is not possible with modules or PIE
2243 40d6444eSAvi Kivityif test "$static" = "yes" ; then
2244 aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
2245 aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
2246 aa0d1f44SPaolo Bonzini  fi
2247 40d6444eSAvi Kivityfi
2248 40d6444eSAvi Kivity
2249 768b7855SEmilio G. Cota# Unconditional check for compiler __thread support
2250 768b7855SEmilio G. Cota  cat > $TMPC << EOF
2251 768b7855SEmilio G. Cotastatic __thread int tls_var;
2252 768b7855SEmilio G. Cotaint main(void) { return tls_var; }
2253 768b7855SEmilio G. CotaEOF
2254 768b7855SEmilio G. Cota
2255 768b7855SEmilio G. Cotaif ! compile_prog "-Werror" "" ; then
2256 768b7855SEmilio G. Cota    error_exit "Your compiler does not support the __thread specifier for " \
2257 768b7855SEmilio G. Cota	"Thread-Local Storage (TLS). Please upgrade to a version that does."
2258 768b7855SEmilio G. Cotafi
2259 768b7855SEmilio G. Cota
2260 40d6444eSAvi Kivitycat > $TMPC << EOF
2261 21d4a791SAvi Kivity
2262 21d4a791SAvi Kivity#ifdef __linux__
2263 21d4a791SAvi Kivity#  define THREAD __thread
2264 21d4a791SAvi Kivity#else
2265 21d4a791SAvi Kivity#  define THREAD
2266 21d4a791SAvi Kivity#endif
2267 21d4a791SAvi Kivitystatic THREAD int tls_var;
2268 21d4a791SAvi Kivityint main(void) { return tls_var; }
2269 40d6444eSAvi KivityEOF
2270 b2634124SRichard Henderson
2271 b2634124SRichard Henderson# Check we support --no-pie first; we will need this for building ROMs.
2272 412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then
2273 412aeacdSAlex Bennée  CFLAGS_NOPIE="-fno-pie"
2274 b2634124SRichard Henderson  LDFLAGS_NOPIE="-no-pie"
2275 412aeacdSAlex Bennéefi
2276 412aeacdSAlex Bennée
2277 12781462SRichard Hendersonif test "$static" = "yes"; then
2278 eca7a8e6SRichard Henderson  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2279 086d5f75SPaolo Bonzini    CFLAGS="-fPIE -DPIE $CFLAGS"
2280 12781462SRichard Henderson    QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2281 12781462SRichard Henderson    pie="yes"
2282 12781462SRichard Henderson  elif test "$pie" = "yes"; then
2283 12781462SRichard Henderson    error_exit "-static-pie not available due to missing toolchain support"
2284 12781462SRichard Henderson  else
2285 12781462SRichard Henderson    QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2286 12781462SRichard Henderson    pie="no"
2287 12781462SRichard Henderson  fi
2288 12781462SRichard Hendersonelif test "$pie" = "no"; then
2289 086d5f75SPaolo Bonzini  CFLAGS="$CFLAGS_NOPIE $CFLAGS"
2290 086d5f75SPaolo Bonzini  LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
2291 eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2292 086d5f75SPaolo Bonzini  CFLAGS="-fPIE -DPIE $CFLAGS"
2293 086d5f75SPaolo Bonzini  LDFLAGS="-pie $LDFLAGS"
2294 40d6444eSAvi Kivity  pie="yes"
2295 2c674109SRichard Hendersonelif test "$pie" = "yes"; then
2296 76ad07a4SPeter Maydell  error_exit "PIE not available due to missing toolchain support"
2297 40d6444eSAvi Kivityelse
2298 40d6444eSAvi Kivity  echo "Disabling PIE due to missing toolchain support"
2299 40d6444eSAvi Kivity  pie="no"
2300 40d6444eSAvi Kivityfi
2301 40d6444eSAvi Kivity
2302 e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2303 e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too.
2304 e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2305 e6cbd751SRichard Henderson  QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2306 e6cbd751SRichard Hendersonfi
2307 e6cbd751SRichard Henderson
2308 09dada40SPaolo Bonzini##########################################
2309 09dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
2310 09dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
2311 09dada40SPaolo Bonzini# specification is necessary
2312 09dada40SPaolo Bonzini
2313 09dada40SPaolo Bonziniif test "$cpu" = "i386"; then
2314 09dada40SPaolo Bonzini  cat > $TMPC << EOF
2315 09dada40SPaolo Bonzinistatic int sfaa(int *ptr)
2316 09dada40SPaolo Bonzini{
2317 09dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
2318 09dada40SPaolo Bonzini}
2319 09dada40SPaolo Bonzini
2320 09dada40SPaolo Bonziniint main(void)
2321 09dada40SPaolo Bonzini{
2322 09dada40SPaolo Bonzini  int val = 42;
2323 1405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
2324 09dada40SPaolo Bonzini  sfaa(&val);
2325 09dada40SPaolo Bonzini  return val;
2326 09dada40SPaolo Bonzini}
2327 09dada40SPaolo BonziniEOF
2328 09dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
2329 09dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2330 09dada40SPaolo Bonzini  fi
2331 09dada40SPaolo Bonzinifi
2332 09dada40SPaolo Bonzini
2333 09dada40SPaolo Bonzini#########################################
2334 ec530c81Sbellard# Solaris specific configure tool chain decisions
2335 09dada40SPaolo Bonzini
2336 ec530c81Sbellardif test "$solaris" = "yes" ; then
2337 6792aa11SLoïc Minier  if has $install; then
2338 6792aa11SLoïc Minier    :
2339 6792aa11SLoïc Minier  else
2340 76ad07a4SPeter Maydell    error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2341 76ad07a4SPeter Maydell        "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2342 76ad07a4SPeter Maydell        "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2343 ec530c81Sbellard  fi
2344 89138857SStefan Weil  if test "$(path_of $install)" = "/usr/sbin/install" ; then
2345 76ad07a4SPeter Maydell    error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2346 76ad07a4SPeter Maydell        "try ginstall from the GNU fileutils available from www.blastwave.org" \
2347 76ad07a4SPeter Maydell        "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2348 ec530c81Sbellard  fi
2349 6792aa11SLoïc Minier  if has ar; then
2350 6792aa11SLoïc Minier    :
2351 6792aa11SLoïc Minier  else
2352 ec530c81Sbellard    if test -f /usr/ccs/bin/ar ; then
2353 76ad07a4SPeter Maydell      error_exit "No path includes ar" \
2354 76ad07a4SPeter Maydell          "Add /usr/ccs/bin to your path and rerun configure"
2355 ec530c81Sbellard    fi
2356 76ad07a4SPeter Maydell    error_exit "No path includes ar"
2357 ec530c81Sbellard  fi
2358 ec530c81Sbellardfi
2359 ec530c81Sbellard
2360 afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
2361 d880a3baSPaolo Bonzini    for target in $default_target_list; do
2362 d880a3baSPaolo Bonzini        supported_target $target 2>/dev/null && \
2363 d880a3baSPaolo Bonzini            target_list="$target_list $target"
2364 d880a3baSPaolo Bonzini    done
2365 d880a3baSPaolo Bonzini    target_list="${target_list# }"
2366 121afa9eSAnthony Liguorielse
2367 89138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2368 d880a3baSPaolo Bonzini    for target in $target_list; do
2369 25b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
2370 25b48338SPeter Maydell        # friendly error message than if we let it fall through.
2371 25b48338SPeter Maydell        case " $default_target_list " in
2372 25b48338SPeter Maydell            *" $target "*)
2373 25b48338SPeter Maydell                ;;
2374 25b48338SPeter Maydell            *)
2375 25b48338SPeter Maydell                error_exit "Unknown target name '$target'"
2376 25b48338SPeter Maydell                ;;
2377 25b48338SPeter Maydell        esac
2378 d880a3baSPaolo Bonzini        supported_target $target || exit 1
2379 25b48338SPeter Maydell    done
2380 d880a3baSPaolo Bonzinifi
2381 25b48338SPeter Maydell
2382 f55fe278SPaolo Bonzini# see if system emulation was really requested
2383 f55fe278SPaolo Bonzinicase " $target_list " in
2384 f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
2385 f55fe278SPaolo Bonzini  ;;
2386 f55fe278SPaolo Bonzini  *) softmmu=no
2387 f55fe278SPaolo Bonzini  ;;
2388 f55fe278SPaolo Bonziniesac
2389 5327cf48Sbellard
2390 05dfa22bSPhilippe Mathieu-Daudéfor target in $target_list; do
2391 05dfa22bSPhilippe Mathieu-Daudé  case "$target" in
2392 05dfa22bSPhilippe Mathieu-Daudé    arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2393 05dfa22bSPhilippe Mathieu-Daudé      edk2_blobs="yes"
2394 05dfa22bSPhilippe Mathieu-Daudé      ;;
2395 05dfa22bSPhilippe Mathieu-Daudé  esac
2396 05dfa22bSPhilippe Mathieu-Daudédone
2397 623ef637SPhilippe Mathieu-Daudé# The EDK2 binaries are compressed with bzip2
2398 623ef637SPhilippe Mathieu-Daudéif test "$edk2_blobs" = "yes" && ! has bzip2; then
2399 623ef637SPhilippe Mathieu-Daudé  error_exit "The bzip2 program is required for building QEMU"
2400 623ef637SPhilippe Mathieu-Daudéfi
2401 05dfa22bSPhilippe Mathieu-Daudé
2402 249247c9SJuan Quintelafeature_not_found() {
2403 249247c9SJuan Quintela  feature=$1
2404 21684af0SStewart Smith  remedy=$2
2405 249247c9SJuan Quintela
2406 76ad07a4SPeter Maydell  error_exit "User requested feature $feature" \
2407 21684af0SStewart Smith      "configure was not able to find it." \
2408 21684af0SStewart Smith      "$remedy"
2409 249247c9SJuan Quintela}
2410 249247c9SJuan Quintela
2411 7d13299dSbellard# ---
2412 7d13299dSbellard# big/little endian test
2413 7d13299dSbellardcat > $TMPC << EOF
2414 61cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2415 61cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2416 61cc919fSMike Frysingerextern int foo(short *, short *);
2417 61cc919fSMike Frysingerint main(int argc, char *argv[]) {
2418 61cc919fSMike Frysinger    return foo(big_endian, little_endian);
2419 7d13299dSbellard}
2420 7d13299dSbellardEOF
2421 7d13299dSbellard
2422 61cc919fSMike Frysingerif compile_object ; then
2423 12f15c91SAlice Frosi    if strings -a $TMPO | grep -q BiGeNdIaN ; then
2424 61cc919fSMike Frysinger        bigendian="yes"
2425 12f15c91SAlice Frosi    elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2426 61cc919fSMike Frysinger        bigendian="no"
2427 7d13299dSbellard    else
2428 7d13299dSbellard        echo big/little test failed
2429 7d13299dSbellard    fi
2430 7d13299dSbellardelse
2431 61cc919fSMike Frysinger    echo big/little test failed
2432 7d13299dSbellardfi
2433 7d13299dSbellard
2434 b0a47e79SJuan Quintela##########################################
2435 e10ee3f5SPhilippe Mathieu-Daudé# system tools
2436 e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then
2437 e10ee3f5SPhilippe Mathieu-Daudé    if test "$softmmu" = "no"; then
2438 e10ee3f5SPhilippe Mathieu-Daudé        want_tools=no
2439 e10ee3f5SPhilippe Mathieu-Daudé    else
2440 e10ee3f5SPhilippe Mathieu-Daudé        want_tools=yes
2441 e10ee3f5SPhilippe Mathieu-Daudé    fi
2442 e10ee3f5SPhilippe Mathieu-Daudéfi
2443 e10ee3f5SPhilippe Mathieu-Daudé
2444 e10ee3f5SPhilippe Mathieu-Daudé##########################################
2445 a30878e7SPeter Maydell# cocoa implies not SDL or GTK
2446 a30878e7SPeter Maydell# (the cocoa UI code currently assumes it is always the active UI
2447 a30878e7SPeter Maydell# and doesn't interact well with other UI frontend code)
2448 a30878e7SPeter Maydellif test "$cocoa" = "yes"; then
2449 a30878e7SPeter Maydell    if test "$sdl" = "yes"; then
2450 a30878e7SPeter Maydell        error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2451 a30878e7SPeter Maydell    fi
2452 a30878e7SPeter Maydell    if test "$gtk" = "yes"; then
2453 a30878e7SPeter Maydell        error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2454 a30878e7SPeter Maydell    fi
2455 a30878e7SPeter Maydell    gtk=no
2456 a30878e7SPeter Maydell    sdl=no
2457 a30878e7SPeter Maydellfi
2458 a30878e7SPeter Maydell
2459 6b39b063SEric Blake# Some versions of Mac OS X incorrectly define SIZE_MAX
2460 6b39b063SEric Blakecat > $TMPC << EOF
2461 6b39b063SEric Blake#include <stdint.h>
2462 6b39b063SEric Blake#include <stdio.h>
2463 6b39b063SEric Blakeint main(int argc, char *argv[]) {
2464 6b39b063SEric Blake    return printf("%zu", SIZE_MAX);
2465 6b39b063SEric Blake}
2466 6b39b063SEric BlakeEOF
2467 6b39b063SEric Blakehave_broken_size_max=no
2468 6b39b063SEric Blakeif ! compile_object -Werror ; then
2469 6b39b063SEric Blake    have_broken_size_max=yes
2470 6b39b063SEric Blakefi
2471 6b39b063SEric Blake
2472 a30878e7SPeter Maydell##########################################
2473 015a33bdSGonglei# L2TPV3 probe
2474 015a33bdSGonglei
2475 015a33bdSGongleicat > $TMPC <<EOF
2476 015a33bdSGonglei#include <sys/socket.h>
2477 bff6cb72SMichael Tokarev#include <linux/ip.h>
2478 015a33bdSGongleiint main(void) { return sizeof(struct mmsghdr); }
2479 015a33bdSGongleiEOF
2480 015a33bdSGongleiif compile_prog "" "" ; then
2481 015a33bdSGonglei  l2tpv3=yes
2482 015a33bdSGongleielse
2483 015a33bdSGonglei  l2tpv3=no
2484 015a33bdSGongleifi
2485 015a33bdSGonglei
2486 c9c8b88fSDavid CARLIERif check_include "pty.h" ; then
2487 c9c8b88fSDavid CARLIER  pty_h=yes
2488 c9c8b88fSDavid CARLIERelse
2489 c9c8b88fSDavid CARLIER  pty_h=no
2490 c9c8b88fSDavid CARLIERfi
2491 c9c8b88fSDavid CARLIER
2492 195588ccSDavid CARLIERcat > $TMPC <<EOF
2493 195588ccSDavid CARLIER#include <sys/mman.h>
2494 195588ccSDavid CARLIERint main(int argc, char *argv[]) {
2495 195588ccSDavid CARLIER    return mlockall(MCL_FUTURE);
2496 195588ccSDavid CARLIER}
2497 195588ccSDavid CARLIEREOF
2498 195588ccSDavid CARLIERif compile_prog "" "" ; then
2499 195588ccSDavid CARLIER  have_mlockall=yes
2500 195588ccSDavid CARLIERelse
2501 195588ccSDavid CARLIER  have_mlockall=no
2502 195588ccSDavid CARLIERfi
2503 195588ccSDavid CARLIER
2504 299e6f19SPaolo Bonzini#########################################
2505 299e6f19SPaolo Bonzini# vhost interdependencies and host support
2506 299e6f19SPaolo Bonzini
2507 299e6f19SPaolo Bonzini# vhost backends
2508 299e6f19SPaolo Bonzinitest "$vhost_user" = "" && vhost_user=yes
2509 299e6f19SPaolo Bonziniif test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2510 299e6f19SPaolo Bonzini  error_exit "vhost-user isn't available on win32"
2511 299e6f19SPaolo Bonzinifi
2512 108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux
2513 108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2514 108a6481SCindy Lu  error_exit "vhost-vdpa is only available on Linux"
2515 108a6481SCindy Lufi
2516 299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux
2517 299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2518 299e6f19SPaolo Bonzini  error_exit "vhost-kernel is only available on Linux"
2519 299e6f19SPaolo Bonzinifi
2520 299e6f19SPaolo Bonzini
2521 299e6f19SPaolo Bonzini# vhost-kernel devices
2522 299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2523 299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2524 299e6f19SPaolo Bonzini  error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2525 299e6f19SPaolo Bonzinifi
2526 299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2527 299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2528 299e6f19SPaolo Bonzini  error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2529 299e6f19SPaolo Bonzinifi
2530 299e6f19SPaolo Bonzini
2531 299e6f19SPaolo Bonzini# vhost-user backends
2532 299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2533 299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2534 299e6f19SPaolo Bonzini  error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2535 299e6f19SPaolo Bonzinifi
2536 299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2537 299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2538 299e6f19SPaolo Bonzini  error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2539 299e6f19SPaolo Bonzinifi
2540 98fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2541 98fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2542 98fc1adaSDr. David Alan Gilbert  error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2543 98fc1adaSDr. David Alan Gilbertfi
2544 108a6481SCindy Lu#vhost-vdpa backends
2545 108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2546 108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2547 108a6481SCindy Lu  error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2548 108a6481SCindy Lufi
2549 299e6f19SPaolo Bonzini
2550 299e6f19SPaolo Bonzini# OR the vhost-kernel and vhost-user values for simplicity
2551 299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then
2552 299e6f19SPaolo Bonzini  test "$vhost_net_user" = "yes" && vhost_net=yes
2553 299e6f19SPaolo Bonzini  test "$vhost_kernel" = "yes" && vhost_net=yes
2554 299e6f19SPaolo Bonzinifi
2555 299e6f19SPaolo Bonzini
2556 015a33bdSGonglei##########################################
2557 4d9310f4SDaniel P. Berrange# MinGW / Mingw-w64 localtime_r/gmtime_r check
2558 4d9310f4SDaniel P. Berrange
2559 4d9310f4SDaniel P. Berrangeif test "$mingw32" = "yes"; then
2560 4d9310f4SDaniel P. Berrange    # Some versions of MinGW / Mingw-w64 lack localtime_r
2561 4d9310f4SDaniel P. Berrange    # and gmtime_r entirely.
2562 4d9310f4SDaniel P. Berrange    #
2563 4d9310f4SDaniel P. Berrange    # Some versions of Mingw-w64 define a macro for
2564 4d9310f4SDaniel P. Berrange    # localtime_r/gmtime_r.
2565 4d9310f4SDaniel P. Berrange    #
2566 4d9310f4SDaniel P. Berrange    # Some versions of Mingw-w64 will define functions
2567 4d9310f4SDaniel P. Berrange    # for localtime_r/gmtime_r, but only if you have
2568 4d9310f4SDaniel P. Berrange    # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2569 4d9310f4SDaniel P. Berrange    # though, unistd.h and pthread.h both define
2570 4d9310f4SDaniel P. Berrange    # that for you.
2571 4d9310f4SDaniel P. Berrange    #
2572 4d9310f4SDaniel P. Berrange    # So this #undef localtime_r and #include <unistd.h>
2573 4d9310f4SDaniel P. Berrange    # are not in fact redundant.
2574 4d9310f4SDaniel P. Berrangecat > $TMPC << EOF
2575 4d9310f4SDaniel P. Berrange#include <unistd.h>
2576 4d9310f4SDaniel P. Berrange#include <time.h>
2577 4d9310f4SDaniel P. Berrange#undef localtime_r
2578 4d9310f4SDaniel P. Berrangeint main(void) { localtime_r(NULL, NULL); return 0; }
2579 4d9310f4SDaniel P. BerrangeEOF
2580 4d9310f4SDaniel P. Berrange    if compile_prog "" "" ; then
2581 4d9310f4SDaniel P. Berrange        localtime_r="yes"
2582 4d9310f4SDaniel P. Berrange    else
2583 4d9310f4SDaniel P. Berrange        localtime_r="no"
2584 4d9310f4SDaniel P. Berrange    fi
2585 4d9310f4SDaniel P. Berrangefi
2586 4d9310f4SDaniel P. Berrange
2587 4d9310f4SDaniel P. Berrange##########################################
2588 779ab5e3SStefan Weil# pkg-config probe
2589 779ab5e3SStefan Weil
2590 779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
2591 76ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
2592 779ab5e3SStefan Weilfi
2593 779ab5e3SStefan Weil
2594 779ab5e3SStefan Weil##########################################
2595 b0a47e79SJuan Quintela# NPTL probe
2596 b0a47e79SJuan Quintela
2597 24cb36a6SPeter Maydellif test "$linux_user" = "yes"; then
2598 bd0c5661Spbrook  cat > $TMPC <<EOF
2599 bd0c5661Spbrook#include <sched.h>
2600 30813ceaSpbrook#include <linux/futex.h>
2601 182eacc0SStefan Weilint main(void) {
2602 bd0c5661Spbrook#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2603 bd0c5661Spbrook#error bork
2604 bd0c5661Spbrook#endif
2605 182eacc0SStefan Weil  return 0;
2606 bd0c5661Spbrook}
2607 bd0c5661SpbrookEOF
2608 24cb36a6SPeter Maydell  if ! compile_object ; then
2609 21684af0SStewart Smith    feature_not_found "nptl" "Install glibc and linux kernel headers."
2610 b0a47e79SJuan Quintela  fi
2611 bd0c5661Spbrookfi
2612 bd0c5661Spbrook
2613 ac62922eSbalrog##########################################
2614 607dacd0Sqiaonuohan# lzo check
2615 607dacd0Sqiaonuohan
2616 607dacd0Sqiaonuohanif test "$lzo" != "no" ; then
2617 607dacd0Sqiaonuohan    cat > $TMPC << EOF
2618 607dacd0Sqiaonuohan#include <lzo/lzo1x.h>
2619 607dacd0Sqiaonuohanint main(void) { lzo_version(); return 0; }
2620 607dacd0SqiaonuohanEOF
2621 607dacd0Sqiaonuohan    if compile_prog "" "-llzo2" ; then
2622 607dacd0Sqiaonuohan        libs_softmmu="$libs_softmmu -llzo2"
2623 *708eab42SMarc-André Lureau        lzo_libs="-llzo2"
2624 b25c9dffSStefan Weil        lzo="yes"
2625 b25c9dffSStefan Weil    else
2626 b25c9dffSStefan Weil        if test "$lzo" = "yes"; then
2627 b25c9dffSStefan Weil            feature_not_found "liblzo2" "Install liblzo2 devel"
2628 b25c9dffSStefan Weil        fi
2629 b25c9dffSStefan Weil        lzo="no"
2630 b25c9dffSStefan Weil    fi
2631 607dacd0Sqiaonuohanfi
2632 607dacd0Sqiaonuohan
2633 607dacd0Sqiaonuohan##########################################
2634 607dacd0Sqiaonuohan# snappy check
2635 607dacd0Sqiaonuohan
2636 607dacd0Sqiaonuohanif test "$snappy" != "no" ; then
2637 607dacd0Sqiaonuohan    cat > $TMPC << EOF
2638 607dacd0Sqiaonuohan#include <snappy-c.h>
2639 607dacd0Sqiaonuohanint main(void) { snappy_max_compressed_length(4096); return 0; }
2640 607dacd0SqiaonuohanEOF
2641 607dacd0Sqiaonuohan    if compile_prog "" "-lsnappy" ; then
2642 607dacd0Sqiaonuohan        libs_softmmu="$libs_softmmu -lsnappy"
2643 *708eab42SMarc-André Lureau        snappy_libs='-lsnappy'
2644 b25c9dffSStefan Weil        snappy="yes"
2645 b25c9dffSStefan Weil    else
2646 b25c9dffSStefan Weil        if test "$snappy" = "yes"; then
2647 b25c9dffSStefan Weil            feature_not_found "libsnappy" "Install libsnappy devel"
2648 b25c9dffSStefan Weil        fi
2649 b25c9dffSStefan Weil        snappy="no"
2650 b25c9dffSStefan Weil    fi
2651 607dacd0Sqiaonuohanfi
2652 607dacd0Sqiaonuohan
2653 607dacd0Sqiaonuohan##########################################
2654 6b383c08SPeter Wu# bzip2 check
2655 6b383c08SPeter Wu
2656 6b383c08SPeter Wuif test "$bzip2" != "no" ; then
2657 6b383c08SPeter Wu    cat > $TMPC << EOF
2658 6b383c08SPeter Wu#include <bzlib.h>
2659 6b383c08SPeter Wuint main(void) { BZ2_bzlibVersion(); return 0; }
2660 6b383c08SPeter WuEOF
2661 6b383c08SPeter Wu    if compile_prog "" "-lbz2" ; then
2662 6b383c08SPeter Wu        bzip2="yes"
2663 6b383c08SPeter Wu    else
2664 6b383c08SPeter Wu        if test "$bzip2" = "yes"; then
2665 6b383c08SPeter Wu            feature_not_found "libbzip2" "Install libbzip2 devel"
2666 6b383c08SPeter Wu        fi
2667 6b383c08SPeter Wu        bzip2="no"
2668 6b383c08SPeter Wu    fi
2669 6b383c08SPeter Wufi
2670 6b383c08SPeter Wu
2671 6b383c08SPeter Wu##########################################
2672 83bc1f97SJulio Faracco# lzfse check
2673 83bc1f97SJulio Faracco
2674 83bc1f97SJulio Faraccoif test "$lzfse" != "no" ; then
2675 83bc1f97SJulio Faracco    cat > $TMPC << EOF
2676 83bc1f97SJulio Faracco#include <lzfse.h>
2677 83bc1f97SJulio Faraccoint main(void) { lzfse_decode_scratch_size(); return 0; }
2678 83bc1f97SJulio FaraccoEOF
2679 83bc1f97SJulio Faracco    if compile_prog "" "-llzfse" ; then
2680 83bc1f97SJulio Faracco        lzfse="yes"
2681 83bc1f97SJulio Faracco    else
2682 83bc1f97SJulio Faracco        if test "$lzfse" = "yes"; then
2683 83bc1f97SJulio Faracco            feature_not_found "lzfse" "Install lzfse devel"
2684 83bc1f97SJulio Faracco        fi
2685 83bc1f97SJulio Faracco        lzfse="no"
2686 83bc1f97SJulio Faracco    fi
2687 83bc1f97SJulio Faraccofi
2688 83bc1f97SJulio Faracco
2689 83bc1f97SJulio Faracco##########################################
2690 3a678481SJuan Quintela# zstd check
2691 3a678481SJuan Quintela
2692 3a678481SJuan Quintelaif test "$zstd" != "no" ; then
2693 297254c7SJuan Quintela    libzstd_minver="1.4.0"
2694 297254c7SJuan Quintela    if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2695 3a678481SJuan Quintela        zstd_cflags="$($pkg_config --cflags libzstd)"
2696 3a678481SJuan Quintela        zstd_libs="$($pkg_config --libs libzstd)"
2697 3a678481SJuan Quintela        zstd="yes"
2698 3a678481SJuan Quintela    else
2699 3a678481SJuan Quintela        if test "$zstd" = "yes" ; then
2700 3a678481SJuan Quintela            feature_not_found "libzstd" "Install libzstd devel"
2701 3a678481SJuan Quintela        fi
2702 3a678481SJuan Quintela        zstd="no"
2703 3a678481SJuan Quintela    fi
2704 3a678481SJuan Quintelafi
2705 3a678481SJuan Quintela
2706 3a678481SJuan Quintela##########################################
2707 f794573eSEduardo Otubo# libseccomp check
2708 f794573eSEduardo Otubo
2709 f794573eSEduardo Otuboif test "$seccomp" != "no" ; then
2710 3e684455SMichael Strosaker    libseccomp_minver="2.3.0"
2711 25ed0eccSHelge Deller    if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2712 c3883e1fSFam Zheng        seccomp_cflags="$($pkg_config --cflags libseccomp)"
2713 c3883e1fSFam Zheng        seccomp_libs="$($pkg_config --libs libseccomp)"
2714 f794573eSEduardo Otubo        seccomp="yes"
2715 f794573eSEduardo Otubo    else
2716 f794573eSEduardo Otubo        if test "$seccomp" = "yes" ; then
2717 693e5910SAndrew Jones            feature_not_found "libseccomp" \
2718 693e5910SAndrew Jones                 "Install libseccomp devel >= $libseccomp_minver"
2719 896848f0SEduardo Otubo        fi
2720 e84d5956SYann E. MORIN        seccomp="no"
2721 f794573eSEduardo Otubo    fi
2722 f794573eSEduardo Otubofi
2723 f794573eSEduardo Otubo##########################################
2724 e37630caSaliguori# xen probe
2725 e37630caSaliguori
2726 fc321b4bSJuan Quintelaif test "$xen" != "no" ; then
2727 c1cdd9d5SJuergen Gross  # Check whether Xen library path is specified via --extra-ldflags to avoid
2728 c1cdd9d5SJuergen Gross  # overriding this setting with pkg-config output. If not, try pkg-config
2729 c1cdd9d5SJuergen Gross  # to obtain all needed flags.
2730 c1cdd9d5SJuergen Gross
2731 c1cdd9d5SJuergen Gross  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2732 c1cdd9d5SJuergen Gross     $pkg_config --exists xencontrol ; then
2733 c1cdd9d5SJuergen Gross    xen_ctrl_version="$(printf '%d%02d%02d' \
2734 c1cdd9d5SJuergen Gross      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2735 c1cdd9d5SJuergen Gross    xen=yes
2736 c1cdd9d5SJuergen Gross    xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2737 c1cdd9d5SJuergen Gross    xen_pc="$xen_pc xenevtchn xendevicemodel"
2738 58ea9a7aSAnthony PERARD    if $pkg_config --exists xentoolcore; then
2739 58ea9a7aSAnthony PERARD      xen_pc="$xen_pc xentoolcore"
2740 58ea9a7aSAnthony PERARD    fi
2741 c1cdd9d5SJuergen Gross    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2742 c1cdd9d5SJuergen Gross    libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2743 c1cdd9d5SJuergen Gross  else
2744 c1cdd9d5SJuergen Gross
2745 b2266beeSJuan Quintela    xen_libs="-lxenstore -lxenctrl -lxenguest"
2746 d9506cabSAnthony PERARD    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2747 d5b93ddfSAnthony PERARD
2748 50ced5b3SStefan Weil    # First we test whether Xen headers and libraries are available.
2749 50ced5b3SStefan Weil    # If no, we are done and there is no Xen support.
2750 50ced5b3SStefan Weil    # If yes, more tests are run to detect the Xen version.
2751 50ced5b3SStefan Weil
2752 50ced5b3SStefan Weil    # Xen (any)
2753 50ced5b3SStefan Weil    cat > $TMPC <<EOF
2754 50ced5b3SStefan Weil#include <xenctrl.h>
2755 50ced5b3SStefan Weilint main(void) {
2756 50ced5b3SStefan Weil  return 0;
2757 50ced5b3SStefan Weil}
2758 50ced5b3SStefan WeilEOF
2759 50ced5b3SStefan Weil    if ! compile_prog "" "$xen_libs" ; then
2760 50ced5b3SStefan Weil      # Xen not found
2761 50ced5b3SStefan Weil      if test "$xen" = "yes" ; then
2762 21684af0SStewart Smith        feature_not_found "xen" "Install xen devel"
2763 50ced5b3SStefan Weil      fi
2764 50ced5b3SStefan Weil      xen=no
2765 50ced5b3SStefan Weil
2766 d5b93ddfSAnthony PERARD    # Xen unstable
2767 69deef08SPeter Maydell    elif
2768 69deef08SPeter Maydell        cat > $TMPC <<EOF &&
2769 2cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API
2770 2cbf8903SRoss Lagerwall#define __XEN_TOOLS__
2771 2cbf8903SRoss Lagerwall#include <xendevicemodel.h>
2772 d3c49ebbSPaul Durrant#include <xenforeignmemory.h>
2773 2cbf8903SRoss Lagerwallint main(void) {
2774 2cbf8903SRoss Lagerwall  xendevicemodel_handle *xd;
2775 d3c49ebbSPaul Durrant  xenforeignmemory_handle *xfmem;
2776 2cbf8903SRoss Lagerwall
2777 2cbf8903SRoss Lagerwall  xd = xendevicemodel_open(0, 0);
2778 2cbf8903SRoss Lagerwall  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2779 2cbf8903SRoss Lagerwall
2780 d3c49ebbSPaul Durrant  xfmem = xenforeignmemory_open(0, 0);
2781 d3c49ebbSPaul Durrant  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2782 d3c49ebbSPaul Durrant
2783 2cbf8903SRoss Lagerwall  return 0;
2784 2cbf8903SRoss Lagerwall}
2785 2cbf8903SRoss LagerwallEOF
2786 2cbf8903SRoss Lagerwall        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2787 2cbf8903SRoss Lagerwall      then
2788 2cbf8903SRoss Lagerwall      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2789 2cbf8903SRoss Lagerwall      xen_ctrl_version=41100
2790 2cbf8903SRoss Lagerwall      xen=yes
2791 2cbf8903SRoss Lagerwall    elif
2792 2cbf8903SRoss Lagerwall        cat > $TMPC <<EOF &&
2793 5ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2794 5ba3d756SIgor Druzhinin#include <xenforeignmemory.h>
2795 58ea9a7aSAnthony PERARD#include <xentoolcore.h>
2796 5ba3d756SIgor Druzhininint main(void) {
2797 5ba3d756SIgor Druzhinin  xenforeignmemory_handle *xfmem;
2798 5ba3d756SIgor Druzhinin
2799 5ba3d756SIgor Druzhinin  xfmem = xenforeignmemory_open(0, 0);
2800 5ba3d756SIgor Druzhinin  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2801 58ea9a7aSAnthony PERARD  xentoolcore_restrict_all(0);
2802 5ba3d756SIgor Druzhinin
2803 5ba3d756SIgor Druzhinin  return 0;
2804 5ba3d756SIgor Druzhinin}
2805 5ba3d756SIgor DruzhininEOF
2806 58ea9a7aSAnthony PERARD        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2807 5ba3d756SIgor Druzhinin      then
2808 58ea9a7aSAnthony PERARD      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2809 5ba3d756SIgor Druzhinin      xen_ctrl_version=41000
2810 5ba3d756SIgor Druzhinin      xen=yes
2811 5ba3d756SIgor Druzhinin    elif
2812 5ba3d756SIgor Druzhinin        cat > $TMPC <<EOF &&
2813 da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API
2814 da8090ccSPaul Durrant#define __XEN_TOOLS__
2815 da8090ccSPaul Durrant#include <xendevicemodel.h>
2816 da8090ccSPaul Durrantint main(void) {
2817 da8090ccSPaul Durrant  xendevicemodel_handle *xd;
2818 da8090ccSPaul Durrant
2819 da8090ccSPaul Durrant  xd = xendevicemodel_open(0, 0);
2820 da8090ccSPaul Durrant  xendevicemodel_close(xd);
2821 da8090ccSPaul Durrant
2822 da8090ccSPaul Durrant  return 0;
2823 da8090ccSPaul Durrant}
2824 da8090ccSPaul DurrantEOF
2825 da8090ccSPaul Durrant        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2826 da8090ccSPaul Durrant      then
2827 da8090ccSPaul Durrant      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2828 f1167ee6SJuergen Gross      xen_ctrl_version=40900
2829 da8090ccSPaul Durrant      xen=yes
2830 da8090ccSPaul Durrant    elif
2831 da8090ccSPaul Durrant        cat > $TMPC <<EOF &&
2832 5eeb39c2SIan Campbell/*
2833 5eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat
2834 5eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given.
2835 b6eb9b45SPaulina Szubarczyk *
2836 b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and
2837 b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented.
2838 b6eb9b45SPaulina Szubarczyk */
2839 b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API
2840 b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API
2841 b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2842 b6eb9b45SPaulina Szubarczyk#include <xenctrl.h>
2843 b6eb9b45SPaulina Szubarczyk#include <xenstore.h>
2844 b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h>
2845 b6eb9b45SPaulina Szubarczyk#include <xengnttab.h>
2846 b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h>
2847 b6eb9b45SPaulina Szubarczyk#include <stdint.h>
2848 b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h>
2849 b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS)
2850 b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined
2851 b6eb9b45SPaulina Szubarczyk#endif
2852 b6eb9b45SPaulina Szubarczykint main(void) {
2853 b6eb9b45SPaulina Szubarczyk  xc_interface *xc = NULL;
2854 b6eb9b45SPaulina Szubarczyk  xenforeignmemory_handle *xfmem;
2855 b6eb9b45SPaulina Szubarczyk  xenevtchn_handle *xe;
2856 b6eb9b45SPaulina Szubarczyk  xengnttab_handle *xg;
2857 b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy_segment_t* seg = NULL;
2858 b6eb9b45SPaulina Szubarczyk
2859 b6eb9b45SPaulina Szubarczyk  xs_daemon_open();
2860 b6eb9b45SPaulina Szubarczyk
2861 b6eb9b45SPaulina Szubarczyk  xc = xc_interface_open(0, 0, 0);
2862 b6eb9b45SPaulina Szubarczyk  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2863 b6eb9b45SPaulina Szubarczyk  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2864 b6eb9b45SPaulina Szubarczyk  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2865 b6eb9b45SPaulina Szubarczyk  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2866 b6eb9b45SPaulina Szubarczyk
2867 b6eb9b45SPaulina Szubarczyk  xfmem = xenforeignmemory_open(0, 0);
2868 b6eb9b45SPaulina Szubarczyk  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2869 b6eb9b45SPaulina Szubarczyk
2870 b6eb9b45SPaulina Szubarczyk  xe = xenevtchn_open(0, 0);
2871 b6eb9b45SPaulina Szubarczyk  xenevtchn_fd(xe);
2872 b6eb9b45SPaulina Szubarczyk
2873 b6eb9b45SPaulina Szubarczyk  xg = xengnttab_open(0, 0);
2874 b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy(xg, 0, seg);
2875 b6eb9b45SPaulina Szubarczyk
2876 b6eb9b45SPaulina Szubarczyk  return 0;
2877 b6eb9b45SPaulina Szubarczyk}
2878 b6eb9b45SPaulina SzubarczykEOF
2879 b6eb9b45SPaulina Szubarczyk        compile_prog "" "$xen_libs $xen_stable_libs"
2880 b6eb9b45SPaulina Szubarczyk      then
2881 f1167ee6SJuergen Gross      xen_ctrl_version=40800
2882 b6eb9b45SPaulina Szubarczyk      xen=yes
2883 b6eb9b45SPaulina Szubarczyk    elif
2884 b6eb9b45SPaulina Szubarczyk        cat > $TMPC <<EOF &&
2885 b6eb9b45SPaulina Szubarczyk/*
2886 b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat
2887 b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given.
2888 5eeb39c2SIan Campbell */
2889 5eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API
2890 5eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API
2891 5eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2892 5eeb39c2SIan Campbell#include <xenctrl.h>
2893 5eeb39c2SIan Campbell#include <xenstore.h>
2894 5eeb39c2SIan Campbell#include <xenevtchn.h>
2895 5eeb39c2SIan Campbell#include <xengnttab.h>
2896 5eeb39c2SIan Campbell#include <xenforeignmemory.h>
2897 5eeb39c2SIan Campbell#include <stdint.h>
2898 5eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h>
2899 5eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS)
2900 5eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined
2901 5eeb39c2SIan Campbell#endif
2902 5eeb39c2SIan Campbellint main(void) {
2903 5eeb39c2SIan Campbell  xc_interface *xc = NULL;
2904 5eeb39c2SIan Campbell  xenforeignmemory_handle *xfmem;
2905 5eeb39c2SIan Campbell  xenevtchn_handle *xe;
2906 5eeb39c2SIan Campbell  xengnttab_handle *xg;
2907 5eeb39c2SIan Campbell
2908 5eeb39c2SIan Campbell  xs_daemon_open();
2909 5eeb39c2SIan Campbell
2910 5eeb39c2SIan Campbell  xc = xc_interface_open(0, 0, 0);
2911 5eeb39c2SIan Campbell  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2912 5eeb39c2SIan Campbell  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2913 5eeb39c2SIan Campbell  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2914 5eeb39c2SIan Campbell  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2915 5eeb39c2SIan Campbell
2916 5eeb39c2SIan Campbell  xfmem = xenforeignmemory_open(0, 0);
2917 5eeb39c2SIan Campbell  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2918 5eeb39c2SIan Campbell
2919 5eeb39c2SIan Campbell  xe = xenevtchn_open(0, 0);
2920 5eeb39c2SIan Campbell  xenevtchn_fd(xe);
2921 5eeb39c2SIan Campbell
2922 5eeb39c2SIan Campbell  xg = xengnttab_open(0, 0);
2923 5eeb39c2SIan Campbell  xengnttab_map_grant_ref(xg, 0, 0, 0);
2924 5eeb39c2SIan Campbell
2925 5eeb39c2SIan Campbell  return 0;
2926 5eeb39c2SIan Campbell}
2927 5eeb39c2SIan CampbellEOF
2928 5eeb39c2SIan Campbell        compile_prog "" "$xen_libs $xen_stable_libs"
2929 5eeb39c2SIan Campbell      then
2930 f1167ee6SJuergen Gross      xen_ctrl_version=40701
2931 5eeb39c2SIan Campbell      xen=yes
2932 cdadde39SRoger Pau Monne
2933 cdadde39SRoger Pau Monne    # Xen 4.6
2934 cdadde39SRoger Pau Monne    elif
2935 cdadde39SRoger Pau Monne        cat > $TMPC <<EOF &&
2936 cdadde39SRoger Pau Monne#include <xenctrl.h>
2937 e108a3c1SAnthony PERARD#include <xenstore.h>
2938 d5b93ddfSAnthony PERARD#include <stdint.h>
2939 d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
2940 d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
2941 d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
2942 d5b93ddfSAnthony PERARD#endif
2943 d5b93ddfSAnthony PERARDint main(void) {
2944 d5b93ddfSAnthony PERARD  xc_interface *xc;
2945 d5b93ddfSAnthony PERARD  xs_daemon_open();
2946 d5b93ddfSAnthony PERARD  xc = xc_interface_open(0, 0, 0);
2947 d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2948 d5b93ddfSAnthony PERARD  xc_gnttab_open(NULL, 0);
2949 b87de24eSAnthony PERARD  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2950 8688e065SStefano Stabellini  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2951 d8b441a3SJan Beulich  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2952 20a544c7SKonrad Rzeszutek Wilk  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2953 d8b441a3SJan Beulich  return 0;
2954 d8b441a3SJan Beulich}
2955 d8b441a3SJan BeulichEOF
2956 d8b441a3SJan Beulich        compile_prog "" "$xen_libs"
2957 d8b441a3SJan Beulich      then
2958 f1167ee6SJuergen Gross      xen_ctrl_version=40600
2959 d8b441a3SJan Beulich      xen=yes
2960 d8b441a3SJan Beulich
2961 d8b441a3SJan Beulich    # Xen 4.5
2962 d8b441a3SJan Beulich    elif
2963 d8b441a3SJan Beulich        cat > $TMPC <<EOF &&
2964 d8b441a3SJan Beulich#include <xenctrl.h>
2965 d8b441a3SJan Beulich#include <xenstore.h>
2966 d8b441a3SJan Beulich#include <stdint.h>
2967 d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h>
2968 d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS)
2969 d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined
2970 d8b441a3SJan Beulich#endif
2971 d8b441a3SJan Beulichint main(void) {
2972 d8b441a3SJan Beulich  xc_interface *xc;
2973 d8b441a3SJan Beulich  xs_daemon_open();
2974 d8b441a3SJan Beulich  xc = xc_interface_open(0, 0, 0);
2975 d8b441a3SJan Beulich  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2976 d8b441a3SJan Beulich  xc_gnttab_open(NULL, 0);
2977 d8b441a3SJan Beulich  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2978 d8b441a3SJan Beulich  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2979 3996e85cSPaul Durrant  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2980 3996e85cSPaul Durrant  return 0;
2981 3996e85cSPaul Durrant}
2982 3996e85cSPaul DurrantEOF
2983 3996e85cSPaul Durrant        compile_prog "" "$xen_libs"
2984 3996e85cSPaul Durrant      then
2985 f1167ee6SJuergen Gross      xen_ctrl_version=40500
2986 3996e85cSPaul Durrant      xen=yes
2987 3996e85cSPaul Durrant
2988 3996e85cSPaul Durrant    elif
2989 3996e85cSPaul Durrant        cat > $TMPC <<EOF &&
2990 3996e85cSPaul Durrant#include <xenctrl.h>
2991 3996e85cSPaul Durrant#include <xenstore.h>
2992 3996e85cSPaul Durrant#include <stdint.h>
2993 3996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h>
2994 3996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS)
2995 3996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined
2996 3996e85cSPaul Durrant#endif
2997 3996e85cSPaul Durrantint main(void) {
2998 3996e85cSPaul Durrant  xc_interface *xc;
2999 3996e85cSPaul Durrant  xs_daemon_open();
3000 3996e85cSPaul Durrant  xc = xc_interface_open(0, 0, 0);
3001 3996e85cSPaul Durrant  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
3002 3996e85cSPaul Durrant  xc_gnttab_open(NULL, 0);
3003 3996e85cSPaul Durrant  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
3004 3996e85cSPaul Durrant  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
3005 8688e065SStefano Stabellini  return 0;
3006 8688e065SStefano Stabellini}
3007 8688e065SStefano StabelliniEOF
3008 8688e065SStefano Stabellini        compile_prog "" "$xen_libs"
3009 69deef08SPeter Maydell      then
3010 f1167ee6SJuergen Gross      xen_ctrl_version=40200
3011 8688e065SStefano Stabellini      xen=yes
3012 8688e065SStefano Stabellini
3013 e37630caSaliguori    else
3014 fc321b4bSJuan Quintela      if test "$xen" = "yes" ; then
3015 edfb07edSIan Campbell        feature_not_found "xen (unsupported version)" \
3016 edfb07edSIan Campbell                          "Install a supported xen (xen 4.2 or newer)"
3017 fc321b4bSJuan Quintela      fi
3018 fc321b4bSJuan Quintela      xen=no
3019 e37630caSaliguori    fi
3020 d5b93ddfSAnthony PERARD
3021 d5b93ddfSAnthony PERARD    if test "$xen" = yes; then
3022 f1167ee6SJuergen Gross      if test $xen_ctrl_version -ge 40701  ; then
3023 5eeb39c2SIan Campbell        libs_softmmu="$xen_stable_libs $libs_softmmu"
3024 5eeb39c2SIan Campbell      fi
3025 d5b93ddfSAnthony PERARD      libs_softmmu="$xen_libs $libs_softmmu"
3026 d5b93ddfSAnthony PERARD    fi
3027 e37630caSaliguori  fi
3028 c1cdd9d5SJuergen Grossfi
3029 e37630caSaliguori
3030 eb6fda0fSAnthony PERARDif test "$xen_pci_passthrough" != "no"; then
3031 edfb07edSIan Campbell  if test "$xen" = "yes" && test "$linux" = "yes"; then
3032 eb6fda0fSAnthony PERARD    xen_pci_passthrough=yes
3033 eb6fda0fSAnthony PERARD  else
3034 eb6fda0fSAnthony PERARD    if test "$xen_pci_passthrough" = "yes"; then
3035 76ad07a4SPeter Maydell      error_exit "User requested feature Xen PCI Passthrough" \
3036 76ad07a4SPeter Maydell          " but this feature requires /sys from Linux"
3037 eb6fda0fSAnthony PERARD    fi
3038 eb6fda0fSAnthony PERARD    xen_pci_passthrough=no
3039 eb6fda0fSAnthony PERARD  fi
3040 eb6fda0fSAnthony PERARDfi
3041 eb6fda0fSAnthony PERARD
3042 e37630caSaliguori##########################################
3043 d661d9a4SJustin Terry (VM)# Windows Hypervisor Platform accelerator (WHPX) check
3044 d661d9a4SJustin Terry (VM)if test "$whpx" != "no" ; then
3045 327fccb2SLucian Petrut    if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
3046 d661d9a4SJustin Terry (VM)        whpx="yes"
3047 d661d9a4SJustin Terry (VM)    else
3048 d661d9a4SJustin Terry (VM)        if test "$whpx" = "yes"; then
3049 53537bb1SJustin Terry (VM) via Qemu-devel            feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
3050 d661d9a4SJustin Terry (VM)        fi
3051 d661d9a4SJustin Terry (VM)        whpx="no"
3052 d661d9a4SJustin Terry (VM)    fi
3053 d661d9a4SJustin Terry (VM)fi
3054 d661d9a4SJustin Terry (VM)
3055 d661d9a4SJustin Terry (VM)##########################################
3056 dfffc653SJuan Quintela# Sparse probe
3057 dfffc653SJuan Quintelaif test "$sparse" != "no" ; then
3058 968b4db3SPaolo Bonzini  if has sparse; then
3059 dfffc653SJuan Quintela    sparse=yes
3060 dfffc653SJuan Quintela  else
3061 dfffc653SJuan Quintela    if test "$sparse" = "yes" ; then
3062 21684af0SStewart Smith      feature_not_found "sparse" "Install sparse binary"
3063 dfffc653SJuan Quintela    fi
3064 dfffc653SJuan Quintela    sparse=no
3065 dfffc653SJuan Quintela  fi
3066 dfffc653SJuan Quintelafi
3067 dfffc653SJuan Quintela
3068 dfffc653SJuan Quintela##########################################
3069 f676c67eSJeremy White# X11 probe
3070 f676c67eSJeremy Whiteif $pkg_config --exists "x11"; then
3071 8781595bSGerd Hoffmann    have_x11=yes
3072 89138857SStefan Weil    x11_cflags=$($pkg_config --cflags x11)
3073 89138857SStefan Weil    x11_libs=$($pkg_config --libs x11)
3074 f676c67eSJeremy Whitefi
3075 f676c67eSJeremy White
3076 f676c67eSJeremy White##########################################
3077 a4ccabcfSAnthony Liguori# GTK probe
3078 a4ccabcfSAnthony Liguori
3079 5a464e6cSPeter Xuif test "$gtk" != "no"; then
3080 89d85cdeSDaniel P. Berrangé    gtkpackage="gtk+-3.0"
3081 89d85cdeSDaniel P. Berrangé    gtkx11package="gtk+-x11-3.0"
3082 7b23d121SVolker Rümelin    gtkversion="3.22.0"
3083 bbbf9bfbSStefan Weil    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
3084 89138857SStefan Weil        gtk_cflags=$($pkg_config --cflags $gtkpackage)
3085 89138857SStefan Weil        gtk_libs=$($pkg_config --libs $gtkpackage)
3086 89138857SStefan Weil        gtk_version=$($pkg_config --modversion $gtkpackage)
3087 0a337ed0SGerd Hoffmann        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
3088 8781595bSGerd Hoffmann            need_x11=yes
3089 f676c67eSJeremy White            gtk_cflags="$gtk_cflags $x11_cflags"
3090 f676c67eSJeremy White            gtk_libs="$gtk_libs $x11_libs"
3091 0a337ed0SGerd Hoffmann        fi
3092 bbbf9bfbSStefan Weil        gtk="yes"
3093 bbbf9bfbSStefan Weil    elif test "$gtk" = "yes"; then
3094 5fe309ffSGerd Hoffmann        feature_not_found "gtk" "Install gtk3-devel"
3095 bbbf9bfbSStefan Weil    else
3096 bbbf9bfbSStefan Weil        gtk="no"
3097 bbbf9bfbSStefan Weil    fi
3098 bbbf9bfbSStefan Weilfi
3099 bbbf9bfbSStefan Weil
3100 ddbb0d09SDaniel P. Berrange
3101 ddbb0d09SDaniel P. Berrange##########################################
3102 ddbb0d09SDaniel P. Berrange# GNUTLS probe
3103 ddbb0d09SDaniel P. Berrange
3104 ddbb0d09SDaniel P. Berrangeif test "$gnutls" != "no"; then
3105 a73e82efSRichard Henderson    pass="no"
3106 a0722409SDaniel P. Berrangé    if $pkg_config --exists "gnutls >= 3.1.18"; then
3107 89138857SStefan Weil        gnutls_cflags=$($pkg_config --cflags gnutls)
3108 89138857SStefan Weil        gnutls_libs=$($pkg_config --libs gnutls)
3109 a73e82efSRichard Henderson        # Packaging for the static libraries is not always correct.
3110 a73e82efSRichard Henderson        # At least ubuntu 18.04 ships only shared libraries.
3111 a73e82efSRichard Henderson        write_c_skeleton
3112 a73e82efSRichard Henderson        if compile_prog "" "$gnutls_libs" ; then
3113 243dc2cfSRichard Henderson            LIBS="$gnutls_libs $LIBS"
3114 ddbb0d09SDaniel P. Berrange            QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
3115 a73e82efSRichard Henderson            pass="yes"
3116 a73e82efSRichard Henderson        fi
3117 a73e82efSRichard Henderson    fi
3118 a73e82efSRichard Henderson    if test "$pass" = "no" && test "$gnutls" = "yes"; then
3119 a0722409SDaniel P. Berrangé	feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
3120 ddbb0d09SDaniel P. Berrange    else
3121 a73e82efSRichard Henderson        gnutls="$pass"
3122 ddbb0d09SDaniel P. Berrange    fi
3123 ddbb0d09SDaniel P. Berrangefi
3124 ddbb0d09SDaniel P. Berrange
3125 91bfcdb0SDaniel P. Berrange
3126 91bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-gcrypt flag,
3127 91bfcdb0SDaniel P. Berrange# then mark as disabled if user requested nettle
3128 a0722409SDaniel P. Berrangé# explicitly
3129 91bfcdb0SDaniel P. Berrangeif test -z "$gcrypt"
3130 91bfcdb0SDaniel P. Berrangethen
3131 a0722409SDaniel P. Berrangé    if test "$nettle" = "yes"
3132 91bfcdb0SDaniel P. Berrange    then
3133 91bfcdb0SDaniel P. Berrange        gcrypt="no"
3134 91bfcdb0SDaniel P. Berrange    fi
3135 91bfcdb0SDaniel P. Berrangefi
3136 91bfcdb0SDaniel P. Berrange
3137 91bfcdb0SDaniel P. Berrange# If user didn't give a --disable/enable-nettle flag,
3138 91bfcdb0SDaniel P. Berrange# then mark as disabled if user requested gcrypt
3139 a0722409SDaniel P. Berrangé# explicitly
3140 91bfcdb0SDaniel P. Berrangeif test -z "$nettle"
3141 91bfcdb0SDaniel P. Berrangethen
3142 a0722409SDaniel P. Berrangé    if test "$gcrypt" = "yes"
3143 91bfcdb0SDaniel P. Berrange    then
3144 91bfcdb0SDaniel P. Berrange        nettle="no"
3145 91bfcdb0SDaniel P. Berrange    fi
3146 91bfcdb0SDaniel P. Berrangefi
3147 91bfcdb0SDaniel P. Berrange
3148 dea7a64eSDaniel P. Berrangéhas_libgcrypt() {
3149 91bfcdb0SDaniel P. Berrange    if ! has "libgcrypt-config"
3150 91bfcdb0SDaniel P. Berrange    then
3151 91bfcdb0SDaniel P. Berrange	return 1
3152 91bfcdb0SDaniel P. Berrange    fi
3153 91bfcdb0SDaniel P. Berrange
3154 91bfcdb0SDaniel P. Berrange    if test -n "$cross_prefix"
3155 91bfcdb0SDaniel P. Berrange    then
3156 89138857SStefan Weil	host=$(libgcrypt-config --host)
3157 91bfcdb0SDaniel P. Berrange	if test "$host-" != $cross_prefix
3158 91bfcdb0SDaniel P. Berrange	then
3159 91bfcdb0SDaniel P. Berrange	    return 1
3160 91bfcdb0SDaniel P. Berrange	fi
3161 91bfcdb0SDaniel P. Berrange    fi
3162 91bfcdb0SDaniel P. Berrange
3163 dea7a64eSDaniel P. Berrangé    maj=`libgcrypt-config --version | awk -F . '{print $1}'`
3164 dea7a64eSDaniel P. Berrangé    min=`libgcrypt-config --version | awk -F . '{print $2}'`
3165 dea7a64eSDaniel P. Berrangé
3166 dea7a64eSDaniel P. Berrangé    if test $maj != 1 || test $min -lt 5
3167 dea7a64eSDaniel P. Berrangé    then
3168 dea7a64eSDaniel P. Berrangé       return 1
3169 dea7a64eSDaniel P. Berrangé    fi
3170 dea7a64eSDaniel P. Berrangé
3171 91bfcdb0SDaniel P. Berrange    return 0
3172 91bfcdb0SDaniel P. Berrange}
3173 91bfcdb0SDaniel P. Berrange
3174 a0722409SDaniel P. Berrangé
3175 a0722409SDaniel P. Berrangéif test "$nettle" != "no"; then
3176 a73e82efSRichard Henderson    pass="no"
3177 64dd2f3bSDaniel P. Berrangé    if $pkg_config --exists "nettle >= 2.7.1"; then
3178 a0722409SDaniel P. Berrangé        nettle_cflags=$($pkg_config --cflags nettle)
3179 a0722409SDaniel P. Berrangé        nettle_libs=$($pkg_config --libs nettle)
3180 a0722409SDaniel P. Berrangé        nettle_version=$($pkg_config --modversion nettle)
3181 a73e82efSRichard Henderson        # Link test to make sure the given libraries work (e.g for static).
3182 a73e82efSRichard Henderson        write_c_skeleton
3183 a73e82efSRichard Henderson        if compile_prog "" "$nettle_libs" ; then
3184 243dc2cfSRichard Henderson            LIBS="$nettle_libs $LIBS"
3185 a0722409SDaniel P. Berrangé            QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3186 a0722409SDaniel P. Berrangé            if test -z "$gcrypt"; then
3187 a0722409SDaniel P. Berrangé               gcrypt="no"
3188 a0722409SDaniel P. Berrangé            fi
3189 a73e82efSRichard Henderson            pass="yes"
3190 a73e82efSRichard Henderson        fi
3191 a73e82efSRichard Henderson    fi
3192 dc2207afSDaniel P. Berrangé    if test "$pass" = "yes"
3193 dc2207afSDaniel P. Berrangé    then
3194 dc2207afSDaniel P. Berrangé        cat > $TMPC << EOF
3195 dc2207afSDaniel P. Berrangé#include <nettle/xts.h>
3196 dc2207afSDaniel P. Berrangéint main(void) {
3197 dc2207afSDaniel P. Berrangé  return 0;
3198 dc2207afSDaniel P. Berrangé}
3199 dc2207afSDaniel P. BerrangéEOF
3200 dc2207afSDaniel P. Berrangé        if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3201 dc2207afSDaniel P. Berrangé            nettle_xts=yes
3202 dc2207afSDaniel P. Berrangé            qemu_private_xts=no
3203 dc2207afSDaniel P. Berrangé        fi
3204 dc2207afSDaniel P. Berrangé    fi
3205 a73e82efSRichard Henderson    if test "$pass" = "no" && test "$nettle" = "yes"; then
3206 64dd2f3bSDaniel P. Berrangé        feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3207 a0722409SDaniel P. Berrangé    else
3208 a73e82efSRichard Henderson        nettle="$pass"
3209 a0722409SDaniel P. Berrangé    fi
3210 a0722409SDaniel P. Berrangéfi
3211 a0722409SDaniel P. Berrangé
3212 91bfcdb0SDaniel P. Berrangeif test "$gcrypt" != "no"; then
3213 a73e82efSRichard Henderson    pass="no"
3214 dea7a64eSDaniel P. Berrangé    if has_libgcrypt; then
3215 89138857SStefan Weil        gcrypt_cflags=$(libgcrypt-config --cflags)
3216 89138857SStefan Weil        gcrypt_libs=$(libgcrypt-config --libs)
3217 a73e82efSRichard Henderson        # Debian has removed -lgpg-error from libgcrypt-config
3218 91bfcdb0SDaniel P. Berrange        # as it "spreads unnecessary dependencies" which in
3219 91bfcdb0SDaniel P. Berrange        # turn breaks static builds...
3220 91bfcdb0SDaniel P. Berrange        if test "$static" = "yes"
3221 91bfcdb0SDaniel P. Berrange        then
3222 91bfcdb0SDaniel P. Berrange            gcrypt_libs="$gcrypt_libs -lgpg-error"
3223 91bfcdb0SDaniel P. Berrange        fi
3224 1f923c70SLongpeng(Mike)
3225 a73e82efSRichard Henderson        # Link test to make sure the given libraries work (e.g for static).
3226 a73e82efSRichard Henderson        write_c_skeleton
3227 a73e82efSRichard Henderson        if compile_prog "" "$gcrypt_libs" ; then
3228 243dc2cfSRichard Henderson            LIBS="$gcrypt_libs $LIBS"
3229 37788f25SDaniel P. Berrange            QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3230 a73e82efSRichard Henderson            pass="yes"
3231 a73e82efSRichard Henderson        fi
3232 a73e82efSRichard Henderson    fi
3233 a73e82efSRichard Henderson    if test "$pass" = "yes"; then
3234 37788f25SDaniel P. Berrange        gcrypt="yes"
3235 1f923c70SLongpeng(Mike)        cat > $TMPC << EOF
3236 1f923c70SLongpeng(Mike)#include <gcrypt.h>
3237 1f923c70SLongpeng(Mike)int main(void) {
3238 1f923c70SLongpeng(Mike)  gcry_mac_hd_t handle;
3239 1f923c70SLongpeng(Mike)  gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3240 1f923c70SLongpeng(Mike)                GCRY_MAC_FLAG_SECURE, NULL);
3241 1f923c70SLongpeng(Mike)  return 0;
3242 1f923c70SLongpeng(Mike)}
3243 1f923c70SLongpeng(Mike)EOF
3244 1f923c70SLongpeng(Mike)        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3245 1f923c70SLongpeng(Mike)            gcrypt_hmac=yes
3246 1f923c70SLongpeng(Mike)        fi
3247 e0576942SDaniel P. Berrangé        cat > $TMPC << EOF
3248 e0576942SDaniel P. Berrangé#include <gcrypt.h>
3249 e0576942SDaniel P. Berrangéint main(void) {
3250 e0576942SDaniel P. Berrangé  gcry_cipher_hd_t handle;
3251 e0576942SDaniel P. Berrangé  gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3252 e0576942SDaniel P. Berrangé  return 0;
3253 e0576942SDaniel P. Berrangé}
3254 e0576942SDaniel P. BerrangéEOF
3255 e0576942SDaniel P. Berrangé        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3256 e0576942SDaniel P. Berrangé            gcrypt_xts=yes
3257 e0576942SDaniel P. Berrangé            qemu_private_xts=no
3258 e0576942SDaniel P. Berrangé        fi
3259 a73e82efSRichard Henderson    elif test "$gcrypt" = "yes"; then
3260 dea7a64eSDaniel P. Berrangé        feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3261 91bfcdb0SDaniel P. Berrange    else
3262 91bfcdb0SDaniel P. Berrange        gcrypt="no"
3263 91bfcdb0SDaniel P. Berrange    fi
3264 62893b67SDaniel P. Berrangefi
3265 62893b67SDaniel P. Berrange
3266 ddbb0d09SDaniel P. Berrange
3267 91bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" && test "$nettle" = "yes"
3268 91bfcdb0SDaniel P. Berrangethen
3269 91bfcdb0SDaniel P. Berrange    error_exit "Only one of gcrypt & nettle can be enabled"
3270 91bfcdb0SDaniel P. Berrangefi
3271 ed754746SDaniel P. Berrange
3272 9a2fd434SDaniel P. Berrange##########################################
3273 9a2fd434SDaniel P. Berrange# libtasn1 - only for the TLS creds/session test suite
3274 9a2fd434SDaniel P. Berrange
3275 9a2fd434SDaniel P. Berrangetasn1=yes
3276 90246037SDaniel P. Berrangetasn1_cflags=""
3277 90246037SDaniel P. Berrangetasn1_libs=""
3278 9a2fd434SDaniel P. Berrangeif $pkg_config --exists "libtasn1"; then
3279 89138857SStefan Weil    tasn1_cflags=$($pkg_config --cflags libtasn1)
3280 89138857SStefan Weil    tasn1_libs=$($pkg_config --libs libtasn1)
3281 9a2fd434SDaniel P. Berrangeelse
3282 9a2fd434SDaniel P. Berrange    tasn1=no
3283 9a2fd434SDaniel P. Berrangefi
3284 9a2fd434SDaniel P. Berrange
3285 ed754746SDaniel P. Berrange
3286 bbbf9bfbSStefan Weil##########################################
3287 8953caf3SDaniel P. Berrange# PAM probe
3288 8953caf3SDaniel P. Berrange
3289 8953caf3SDaniel P. Berrangeif test "$auth_pam" != "no"; then
3290 8953caf3SDaniel P. Berrange    cat > $TMPC <<EOF
3291 8953caf3SDaniel P. Berrange#include <security/pam_appl.h>
3292 8953caf3SDaniel P. Berrange#include <stdio.h>
3293 8953caf3SDaniel P. Berrangeint main(void) {
3294 8953caf3SDaniel P. Berrange   const char *service_name = "qemu";
3295 8953caf3SDaniel P. Berrange   const char *user = "frank";
3296 9c9642d0SDr. David Alan Gilbert   const struct pam_conv pam_conv = { 0 };
3297 8953caf3SDaniel P. Berrange   pam_handle_t *pamh = NULL;
3298 9c9642d0SDr. David Alan Gilbert   pam_start(service_name, user, &pam_conv, &pamh);
3299 8953caf3SDaniel P. Berrange   return 0;
3300 8953caf3SDaniel P. Berrange}
3301 8953caf3SDaniel P. BerrangeEOF
3302 8953caf3SDaniel P. Berrange    if compile_prog "" "-lpam" ; then
3303 8953caf3SDaniel P. Berrange        auth_pam=yes
3304 8953caf3SDaniel P. Berrange    else
3305 8953caf3SDaniel P. Berrange        if test "$auth_pam" = "yes"; then
3306 8953caf3SDaniel P. Berrange            feature_not_found "PAM" "Install PAM development package"
3307 8953caf3SDaniel P. Berrange        else
3308 8953caf3SDaniel P. Berrange            auth_pam=no
3309 8953caf3SDaniel P. Berrange        fi
3310 8953caf3SDaniel P. Berrange    fi
3311 8953caf3SDaniel P. Berrangefi
3312 8953caf3SDaniel P. Berrange
3313 8953caf3SDaniel P. Berrange##########################################
3314 559607eaSDaniel P. Berrange# getifaddrs (for tests/test-io-channel-socket )
3315 559607eaSDaniel P. Berrange
3316 559607eaSDaniel P. Berrangehave_ifaddrs_h=yes
3317 559607eaSDaniel P. Berrangeif ! check_include "ifaddrs.h" ; then
3318 559607eaSDaniel P. Berrange  have_ifaddrs_h=no
3319 559607eaSDaniel P. Berrangefi
3320 559607eaSDaniel P. Berrange
3321 e865b97fSChen Gang#########################################
3322 e865b97fSChen Gang# libdrm check
3323 e865b97fSChen Ganghave_drm_h=no
3324 e865b97fSChen Gangif check_include "libdrm/drm.h" ; then
3325 e865b97fSChen Gang    have_drm_h=yes
3326 e865b97fSChen Gangfi
3327 e865b97fSChen Gang
3328 2a4b472cSDavid CARLIER#########################################
3329 2a4b472cSDavid CARLIER# sys/signal.h check
3330 2a4b472cSDavid CARLIERhave_sys_signal_h=no
3331 2a4b472cSDavid CARLIERif check_include "sys/signal.h" ; then
3332 2a4b472cSDavid CARLIER  have_sys_signal_h=yes
3333 2a4b472cSDavid CARLIERfi
3334 2a4b472cSDavid CARLIER
3335 559607eaSDaniel P. Berrange##########################################
3336 bbbf9bfbSStefan Weil# VTE probe
3337 bbbf9bfbSStefan Weil
3338 bbbf9bfbSStefan Weilif test "$vte" != "no"; then
3339 c6feff9eSCole Robinson    vteminversion="0.32.0"
3340 c6feff9eSCole Robinson    if $pkg_config --exists "vte-2.91"; then
3341 c6feff9eSCole Robinson      vtepackage="vte-2.91"
3342 c6feff9eSCole Robinson    else
3343 528de90aSDaniel P. Berrange      vtepackage="vte-2.90"
3344 c6feff9eSCole Robinson    fi
3345 c6feff9eSCole Robinson    if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3346 89138857SStefan Weil        vte_cflags=$($pkg_config --cflags $vtepackage)
3347 89138857SStefan Weil        vte_libs=$($pkg_config --libs $vtepackage)
3348 89138857SStefan Weil        vteversion=$($pkg_config --modversion $vtepackage)
3349 bbbf9bfbSStefan Weil        vte="yes"
3350 bbbf9bfbSStefan Weil    elif test "$vte" = "yes"; then
3351 c6feff9eSCole Robinson        feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3352 9e04c683SStefan Weil    else
3353 bbbf9bfbSStefan Weil        vte="no"
3354 a4ccabcfSAnthony Liguori    fi
3355 a4ccabcfSAnthony Liguorifi
3356 a4ccabcfSAnthony Liguori
3357 a4ccabcfSAnthony Liguori##########################################
3358 11d9f695Sbellard# SDL probe
3359 11d9f695Sbellard
3360 aee8a619SCarlo Marcelo Arenas Belón# Look for sdl configuration program (pkg-config or sdl2-config).  Try
3361 aee8a619SCarlo Marcelo Arenas Belón# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
3362 47c03744SDave Airlie
3363 c6093a05SPeter Xusdl_probe ()
3364 c6093a05SPeter Xu{
3365 0015ca5cSDaniel P. Berrangé  if $pkg_config sdl2 --exists; then
3366 0015ca5cSDaniel P. Berrangé    sdlconfig="$pkg_config sdl2"
3367 89138857SStefan Weil    sdlversion=$($sdlconfig --modversion 2>/dev/null)
3368 aee8a619SCarlo Marcelo Arenas Belón  elif has "$sdl2_config"; then
3369 0015ca5cSDaniel P. Berrangé    sdlconfig="$sdl2_config"
3370 89138857SStefan Weil    sdlversion=$($sdlconfig --version)
3371 a0dfd8a4SLoïc Minier  else
3372 a0dfd8a4SLoïc Minier    if test "$sdl" = "yes" ; then
3373 8f4ea9cdSGerd Hoffmann      feature_not_found "sdl" "Install SDL2-devel"
3374 a0dfd8a4SLoïc Minier    fi
3375 a0dfd8a4SLoïc Minier    sdl=no
3376 c6093a05SPeter Xu    # no need to do the rest
3377 c6093a05SPeter Xu    return
3378 9316f803SPaolo Bonzini  fi
3379 aee8a619SCarlo Marcelo Arenas Belón  if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3380 3ec87ffeSPaolo Bonzini    echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3381 3ec87ffeSPaolo Bonzini  fi
3382 11d9f695Sbellard
3383 11d9f695Sbellard  cat > $TMPC << EOF
3384 11d9f695Sbellard#include <SDL.h>
3385 11d9f695Sbellard#undef main /* We don't want SDL to override our main() */
3386 11d9f695Sbellardint main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3387 11d9f695SbellardEOF
3388 89138857SStefan Weil  sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3389 2ca5c430SGerd Hoffmann  sdl_cflags="$sdl_cflags -Wno-undef"  # workaround 2.0.8 bug
3390 74f42e18STeLeMan  if test "$static" = "yes" ; then
3391 0015ca5cSDaniel P. Berrangé    if $pkg_config sdl2 --exists; then
3392 0015ca5cSDaniel P. Berrangé      sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3393 5f37e6d4SThomas Huth    else
3394 89138857SStefan Weil      sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3395 5f37e6d4SThomas Huth    fi
3396 74f42e18STeLeMan  else
3397 89138857SStefan Weil    sdl_libs=$($sdlconfig --libs 2>/dev/null)
3398 74f42e18STeLeMan  fi
3399 52166aa0SJuan Quintela  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3400 11d9f695Sbellard    sdl=yes
3401 7c1f25b4Sbellard
3402 67c274d3SPaolo Bonzini    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3403 e633a5c6SEric Blake    if test "$sdl" = "yes" && test "$static" = "yes" ; then
3404 67c274d3SPaolo Bonzini      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3405 89138857SStefan Weil         sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3406 89138857SStefan Weil         sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3407 11d9f695Sbellard      fi
3408 52166aa0SJuan Quintela      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3409 1ac88f28SJuan Quintela	:
3410 1ac88f28SJuan Quintela      else
3411 1ac88f28SJuan Quintela        sdl=no
3412 7c1f25b4Sbellard      fi
3413 7c1f25b4Sbellard    fi # static link
3414 c4198157SJuan Quintela  else # sdl not found
3415 c4198157SJuan Quintela    if test "$sdl" = "yes" ; then
3416 0015ca5cSDaniel P. Berrangé      feature_not_found "sdl" "Install SDL2 devel"
3417 c4198157SJuan Quintela    fi
3418 c4198157SJuan Quintela    sdl=no
3419 7c1f25b4Sbellard  fi # sdl compile test
3420 c6093a05SPeter Xu}
3421 c6093a05SPeter Xu
3422 a442fe2fSDaniel P. Berrangésdl_image_probe ()
3423 a442fe2fSDaniel P. Berrangé{
3424 a442fe2fSDaniel P. Berrangé    if test "$sdl_image" != "no" ; then
3425 a442fe2fSDaniel P. Berrangé        if $pkg_config SDL2_image --exists; then
3426 a442fe2fSDaniel P. Berrangé            if test "$static" = "yes"; then
3427 a442fe2fSDaniel P. Berrangé                sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3428 a442fe2fSDaniel P. Berrangé            else
3429 a442fe2fSDaniel P. Berrangé                sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3430 a442fe2fSDaniel P. Berrangé            fi
3431 a442fe2fSDaniel P. Berrangé            sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3432 a442fe2fSDaniel P. Berrangé            sdl_image=yes
3433 a442fe2fSDaniel P. Berrangé
3434 a442fe2fSDaniel P. Berrangé            sdl_cflags="$sdl_cflags $sdl_image_cflags"
3435 a442fe2fSDaniel P. Berrangé            sdl_libs="$sdl_libs $sdl_image_libs"
3436 a442fe2fSDaniel P. Berrangé        else
3437 a442fe2fSDaniel P. Berrangé            if test "$sdl_image" = "yes" ; then
3438 a442fe2fSDaniel P. Berrangé                feature_not_found "sdl_image" "Install SDL Image devel"
3439 a442fe2fSDaniel P. Berrangé            else
3440 a442fe2fSDaniel P. Berrangé                sdl_image=no
3441 a442fe2fSDaniel P. Berrangé            fi
3442 a442fe2fSDaniel P. Berrangé        fi
3443 a442fe2fSDaniel P. Berrangé    fi
3444 a442fe2fSDaniel P. Berrangé}
3445 a442fe2fSDaniel P. Berrangé
3446 c6093a05SPeter Xuif test "$sdl" != "no" ; then
3447 c6093a05SPeter Xu  sdl_probe
3448 fd677642Sthsfi
3449 11d9f695Sbellard
3450 5368a422Saliguoriif test "$sdl" = "yes" ; then
3451 a442fe2fSDaniel P. Berrangé  sdl_image_probe
3452 a442fe2fSDaniel P. Berrangéelse
3453 a442fe2fSDaniel P. Berrangé  if test "$sdl_image" = "yes"; then
3454 a442fe2fSDaniel P. Berrangé    echo "warning: SDL Image requested, but SDL is not available, disabling"
3455 a442fe2fSDaniel P. Berrangé  fi
3456 a442fe2fSDaniel P. Berrangé  sdl_image=no
3457 a442fe2fSDaniel P. Berrangéfi
3458 a442fe2fSDaniel P. Berrangé
3459 a442fe2fSDaniel P. Berrangéif test "$sdl" = "yes" ; then
3460 5368a422Saliguori  cat > $TMPC <<EOF
3461 5368a422Saliguori#include <SDL.h>
3462 5368a422Saliguori#if defined(SDL_VIDEO_DRIVER_X11)
3463 5368a422Saliguori#include <X11/XKBlib.h>
3464 5368a422Saliguori#else
3465 5368a422Saliguori#error No x11 support
3466 5368a422Saliguori#endif
3467 5368a422Saliguoriint main(void) { return 0; }
3468 5368a422SaliguoriEOF
3469 f676c67eSJeremy White  if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3470 8781595bSGerd Hoffmann    need_x11=yes
3471 f676c67eSJeremy White    sdl_cflags="$sdl_cflags $x11_cflags"
3472 f676c67eSJeremy White    sdl_libs="$sdl_libs $x11_libs"
3473 5368a422Saliguori  fi
3474 5368a422Saliguorifi
3475 5368a422Saliguori
3476 8f28f3fbSths##########################################
3477 2da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries
3478 2da776dbSMichael R. Hinesif test "$rdma" != "no" ; then
3479 2da776dbSMichael R. Hines  cat > $TMPC <<EOF
3480 2da776dbSMichael R. Hines#include <rdma/rdma_cma.h>
3481 2da776dbSMichael R. Hinesint main(void) { return 0; }
3482 2da776dbSMichael R. HinesEOF
3483 ef6d4ccdSYuval Shaia  rdma_libs="-lrdmacm -libverbs -libumad"
3484 2da776dbSMichael R. Hines  if compile_prog "" "$rdma_libs" ; then
3485 2da776dbSMichael R. Hines    rdma="yes"
3486 ef6d4ccdSYuval Shaia    libs_softmmu="$libs_softmmu $rdma_libs"
3487 2da776dbSMichael R. Hines  else
3488 2da776dbSMichael R. Hines    if test "$rdma" = "yes" ; then
3489 2da776dbSMichael R. Hines        error_exit \
3490 ef6d4ccdSYuval Shaia            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3491 2da776dbSMichael R. Hines            " Your options:" \
3492 ef6d4ccdSYuval Shaia            "  (1) Fast: Install infiniband packages (devel) from your distro." \
3493 2da776dbSMichael R. Hines            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
3494 2da776dbSMichael R. Hines            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
3495 2da776dbSMichael R. Hines    fi
3496 2da776dbSMichael R. Hines    rdma="no"
3497 2da776dbSMichael R. Hines  fi
3498 2da776dbSMichael R. Hinesfi
3499 2da776dbSMichael R. Hines
3500 21ab34c9SMarcel Apfelbaum##########################################
3501 21ab34c9SMarcel Apfelbaum# PVRDMA detection
3502 21ab34c9SMarcel Apfelbaum
3503 21ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF &&
3504 21ab34c9SMarcel Apfelbaum#include <sys/mman.h>
3505 21ab34c9SMarcel Apfelbaum
3506 21ab34c9SMarcel Apfelbaumint
3507 21ab34c9SMarcel Apfelbaummain(void)
3508 21ab34c9SMarcel Apfelbaum{
3509 21ab34c9SMarcel Apfelbaum    char buf = 0;
3510 21ab34c9SMarcel Apfelbaum    void *addr = &buf;
3511 21ab34c9SMarcel Apfelbaum    addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3512 21ab34c9SMarcel Apfelbaum
3513 21ab34c9SMarcel Apfelbaum    return 0;
3514 21ab34c9SMarcel Apfelbaum}
3515 21ab34c9SMarcel ApfelbaumEOF
3516 21ab34c9SMarcel Apfelbaum
3517 21ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then
3518 21ab34c9SMarcel Apfelbaum    case "$pvrdma" in
3519 21ab34c9SMarcel Apfelbaum    "")
3520 21ab34c9SMarcel Apfelbaum        if compile_prog "" ""; then
3521 21ab34c9SMarcel Apfelbaum            pvrdma="yes"
3522 21ab34c9SMarcel Apfelbaum        else
3523 21ab34c9SMarcel Apfelbaum            pvrdma="no"
3524 21ab34c9SMarcel Apfelbaum        fi
3525 21ab34c9SMarcel Apfelbaum        ;;
3526 21ab34c9SMarcel Apfelbaum    "yes")
3527 21ab34c9SMarcel Apfelbaum        if ! compile_prog "" ""; then
3528 21ab34c9SMarcel Apfelbaum            error_exit "PVRDMA is not supported since mremap is not implemented"
3529 21ab34c9SMarcel Apfelbaum        fi
3530 21ab34c9SMarcel Apfelbaum        pvrdma="yes"
3531 21ab34c9SMarcel Apfelbaum        ;;
3532 21ab34c9SMarcel Apfelbaum    "no")
3533 21ab34c9SMarcel Apfelbaum        pvrdma="no"
3534 21ab34c9SMarcel Apfelbaum        ;;
3535 21ab34c9SMarcel Apfelbaum    esac
3536 21ab34c9SMarcel Apfelbaumelse
3537 21ab34c9SMarcel Apfelbaum    if test "$pvrdma" = "yes" ; then
3538 21ab34c9SMarcel Apfelbaum        error_exit "PVRDMA requires rdma suppport"
3539 21ab34c9SMarcel Apfelbaum    fi
3540 21ab34c9SMarcel Apfelbaum    pvrdma="no"
3541 21ab34c9SMarcel Apfelbaumfi
3542 95c6bff3SBenoît Canet
3543 ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported
3544 ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then
3545 ee108585SYuval Shaia
3546 ee108585SYuval Shaiacat > $TMPC <<EOF &&
3547 ee108585SYuval Shaia#include <infiniband/verbs.h>
3548 ee108585SYuval Shaia
3549 ee108585SYuval Shaiaint
3550 ee108585SYuval Shaiamain(void)
3551 ee108585SYuval Shaia{
3552 ee108585SYuval Shaia    struct ibv_mr *mr;
3553 ee108585SYuval Shaia    struct ibv_pd *pd = NULL;
3554 ee108585SYuval Shaia    size_t length = 10;
3555 ee108585SYuval Shaia    uint64_t iova = 0;
3556 ee108585SYuval Shaia    int access = 0;
3557 ee108585SYuval Shaia    void *addr = NULL;
3558 ee108585SYuval Shaia
3559 ee108585SYuval Shaia    mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3560 ee108585SYuval Shaia
3561 ee108585SYuval Shaia    ibv_dereg_mr(mr);
3562 ee108585SYuval Shaia
3563 ee108585SYuval Shaia    return 0;
3564 ee108585SYuval Shaia}
3565 ee108585SYuval ShaiaEOF
3566 ee108585SYuval Shaia    if ! compile_prog "" "-libverbs"; then
3567 ee108585SYuval Shaia        QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3568 ee108585SYuval Shaia    fi
3569 ee108585SYuval Shaiafi
3570 ee108585SYuval Shaia
3571 95c6bff3SBenoît Canet##########################################
3572 2f9606b3Saliguori# VNC SASL detection
3573 e633a5c6SEric Blakeif test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3574 2f9606b3Saliguori  cat > $TMPC <<EOF
3575 2f9606b3Saliguori#include <sasl/sasl.h>
3576 2f9606b3Saliguori#include <stdio.h>
3577 2f9606b3Saliguoriint main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3578 2f9606b3SaliguoriEOF
3579 2f9606b3Saliguori  # Assuming Cyrus-SASL installed in /usr prefix
3580 bd702ffcSPhilippe Mathieu-Daudé  # QEMU defines struct iovec in "qemu/osdep.h",
3581 bd702ffcSPhilippe Mathieu-Daudé  # we don't want libsasl to redefine it in <sasl/sasl.h>.
3582 bd702ffcSPhilippe Mathieu-Daudé  vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED"
3583 2f9606b3Saliguori  vnc_sasl_libs="-lsasl2"
3584 52166aa0SJuan Quintela  if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3585 ea784e3bSJuan Quintela    vnc_sasl=yes
3586 fa838301SJuan Quintela    libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3587 ca273d58SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3588 2f9606b3Saliguori  else
3589 ea784e3bSJuan Quintela    if test "$vnc_sasl" = "yes" ; then
3590 21684af0SStewart Smith      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3591 ea784e3bSJuan Quintela    fi
3592 ea784e3bSJuan Quintela    vnc_sasl=no
3593 2f9606b3Saliguori  fi
3594 2f9606b3Saliguorifi
3595 2f9606b3Saliguori
3596 2f9606b3Saliguori##########################################
3597 2f6f5c7aSCorentin Chary# VNC JPEG detection
3598 e633a5c6SEric Blakeif test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3599 2f6f5c7aSCorentin Charycat > $TMPC <<EOF
3600 2f6f5c7aSCorentin Chary#include <stdio.h>
3601 2f6f5c7aSCorentin Chary#include <jpeglib.h>
3602 2f6f5c7aSCorentin Charyint main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3603 2f6f5c7aSCorentin CharyEOF
3604 2f6f5c7aSCorentin Chary    vnc_jpeg_cflags=""
3605 2f6f5c7aSCorentin Chary    vnc_jpeg_libs="-ljpeg"
3606 2f6f5c7aSCorentin Chary  if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3607 2f6f5c7aSCorentin Chary    vnc_jpeg=yes
3608 2f6f5c7aSCorentin Chary    libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3609 ca273d58SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3610 2f6f5c7aSCorentin Chary  else
3611 2f6f5c7aSCorentin Chary    if test "$vnc_jpeg" = "yes" ; then
3612 21684af0SStewart Smith      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3613 2f6f5c7aSCorentin Chary    fi
3614 2f6f5c7aSCorentin Chary    vnc_jpeg=no
3615 2f6f5c7aSCorentin Chary  fi
3616 2f6f5c7aSCorentin Charyfi
3617 2f6f5c7aSCorentin Chary
3618 2f6f5c7aSCorentin Chary##########################################
3619 efe556adSCorentin Chary# VNC PNG detection
3620 e633a5c6SEric Blakeif test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3621 efe556adSCorentin Charycat > $TMPC <<EOF
3622 efe556adSCorentin Chary//#include <stdio.h>
3623 efe556adSCorentin Chary#include <png.h>
3624 832ce9c2SScott Wood#include <stddef.h>
3625 efe556adSCorentin Charyint main(void) {
3626 efe556adSCorentin Chary    png_structp png_ptr;
3627 efe556adSCorentin Chary    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3628 7edc3fedSPeter Maydell    return png_ptr != 0;
3629 efe556adSCorentin Chary}
3630 efe556adSCorentin CharyEOF
3631 65d5d3f9SStefan Weil  if $pkg_config libpng --exists; then
3632 89138857SStefan Weil    vnc_png_cflags=$($pkg_config libpng --cflags)
3633 89138857SStefan Weil    vnc_png_libs=$($pkg_config libpng --libs)
3634 9af8025eSBrad  else
3635 efe556adSCorentin Chary    vnc_png_cflags=""
3636 efe556adSCorentin Chary    vnc_png_libs="-lpng"
3637 9af8025eSBrad  fi
3638 efe556adSCorentin Chary  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3639 efe556adSCorentin Chary    vnc_png=yes
3640 efe556adSCorentin Chary    libs_softmmu="$vnc_png_libs $libs_softmmu"
3641 9af8025eSBrad    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3642 efe556adSCorentin Chary  else
3643 efe556adSCorentin Chary    if test "$vnc_png" = "yes" ; then
3644 21684af0SStewart Smith      feature_not_found "vnc-png" "Install libpng devel"
3645 efe556adSCorentin Chary    fi
3646 efe556adSCorentin Chary    vnc_png=no
3647 efe556adSCorentin Chary  fi
3648 efe556adSCorentin Charyfi
3649 efe556adSCorentin Chary
3650 efe556adSCorentin Chary##########################################
3651 6a021536SGerd Hoffmann# xkbcommon probe
3652 6a021536SGerd Hoffmannif test "$xkbcommon" != "no" ; then
3653 6a021536SGerd Hoffmann  if $pkg_config xkbcommon --exists; then
3654 6a021536SGerd Hoffmann    xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3655 6a021536SGerd Hoffmann    xkbcommon_libs=$($pkg_config xkbcommon --libs)
3656 6a021536SGerd Hoffmann    xkbcommon=yes
3657 6a021536SGerd Hoffmann  else
3658 6a021536SGerd Hoffmann    if test "$xkbcommon" = "yes" ; then
3659 6a021536SGerd Hoffmann      feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3660 6a021536SGerd Hoffmann    fi
3661 6a021536SGerd Hoffmann    xkbcommon=no
3662 6a021536SGerd Hoffmann  fi
3663 6a021536SGerd Hoffmannfi
3664 6a021536SGerd Hoffmann
3665 76655d6dSaliguori
3666 76655d6dSaliguori##########################################
3667 c1bb86cdSEric Blake# xfsctl() probe, used for file-posix.c
3668 dce512deSChristoph Hellwigif test "$xfs" != "no" ; then
3669 dce512deSChristoph Hellwig  cat > $TMPC << EOF
3670 ffc41d10SStefan Weil#include <stddef.h>  /* NULL */
3671 dce512deSChristoph Hellwig#include <xfs/xfs.h>
3672 dce512deSChristoph Hellwigint main(void)
3673 dce512deSChristoph Hellwig{
3674 dce512deSChristoph Hellwig    xfsctl(NULL, 0, 0, NULL);
3675 dce512deSChristoph Hellwig    return 0;
3676 dce512deSChristoph Hellwig}
3677 dce512deSChristoph HellwigEOF
3678 dce512deSChristoph Hellwig  if compile_prog "" "" ; then
3679 dce512deSChristoph Hellwig    xfs="yes"
3680 dce512deSChristoph Hellwig  else
3681 dce512deSChristoph Hellwig    if test "$xfs" = "yes" ; then
3682 21684af0SStewart Smith      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3683 dce512deSChristoph Hellwig    fi
3684 dce512deSChristoph Hellwig    xfs=no
3685 dce512deSChristoph Hellwig  fi
3686 dce512deSChristoph Hellwigfi
3687 dce512deSChristoph Hellwig
3688 dce512deSChristoph Hellwig##########################################
3689 8a16d273Sths# vde libraries probe
3690 dfb278bdSJuan Quintelaif test "$vde" != "no" ; then
3691 4baae0acSJuan Quintela  vde_libs="-lvdeplug"
3692 8a16d273Sths  cat > $TMPC << EOF
3693 8a16d273Sths#include <libvdeplug.h>
3694 4a7f0e06Spbrookint main(void)
3695 4a7f0e06Spbrook{
3696 4a7f0e06Spbrook    struct vde_open_args a = {0, 0, 0};
3697 fea08e08SPeter Maydell    char s[] = "";
3698 fea08e08SPeter Maydell    vde_open(s, s, &a);
3699 4a7f0e06Spbrook    return 0;
3700 4a7f0e06Spbrook}
3701 8a16d273SthsEOF
3702 52166aa0SJuan Quintela  if compile_prog "" "$vde_libs" ; then
3703 4baae0acSJuan Quintela    vde=yes
3704 dfb278bdSJuan Quintela  else
3705 dfb278bdSJuan Quintela    if test "$vde" = "yes" ; then
3706 21684af0SStewart Smith      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3707 dfb278bdSJuan Quintela    fi
3708 dfb278bdSJuan Quintela    vde=no
3709 8a16d273Sths  fi
3710 8a16d273Sthsfi
3711 8a16d273Sths
3712 8a16d273Sths##########################################
3713 0a985b37SVincenzo Maffione# netmap support probe
3714 0a985b37SVincenzo Maffione# Apart from looking for netmap headers, we make sure that the host API version
3715 0a985b37SVincenzo Maffione# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3716 0a985b37SVincenzo Maffione# a minor/major version number. Minor new features will be marked with values up
3717 0a985b37SVincenzo Maffione# to 15, and if something happens that requires a change to the backend we will
3718 0a985b37SVincenzo Maffione# move above 15, submit the backend fixes and modify this two bounds.
3719 58952137SVincenzo Maffioneif test "$netmap" != "no" ; then
3720 58952137SVincenzo Maffione  cat > $TMPC << EOF
3721 58952137SVincenzo Maffione#include <inttypes.h>
3722 58952137SVincenzo Maffione#include <net/if.h>
3723 58952137SVincenzo Maffione#include <net/netmap.h>
3724 58952137SVincenzo Maffione#include <net/netmap_user.h>
3725 0a985b37SVincenzo Maffione#if (NETMAP_API < 11) || (NETMAP_API > 15)
3726 0a985b37SVincenzo Maffione#error
3727 0a985b37SVincenzo Maffione#endif
3728 58952137SVincenzo Maffioneint main(void) { return 0; }
3729 58952137SVincenzo MaffioneEOF
3730 58952137SVincenzo Maffione  if compile_prog "" "" ; then
3731 58952137SVincenzo Maffione    netmap=yes
3732 58952137SVincenzo Maffione  else
3733 58952137SVincenzo Maffione    if test "$netmap" = "yes" ; then
3734 58952137SVincenzo Maffione      feature_not_found "netmap"
3735 58952137SVincenzo Maffione    fi
3736 58952137SVincenzo Maffione    netmap=no
3737 58952137SVincenzo Maffione  fi
3738 58952137SVincenzo Maffionefi
3739 58952137SVincenzo Maffione
3740 58952137SVincenzo Maffione##########################################
3741 47e98658SCorey Bryant# libcap-ng library probe
3742 47e98658SCorey Bryantif test "$cap_ng" != "no" ; then
3743 47e98658SCorey Bryant  cap_libs="-lcap-ng"
3744 47e98658SCorey Bryant  cat > $TMPC << EOF
3745 47e98658SCorey Bryant#include <cap-ng.h>
3746 47e98658SCorey Bryantint main(void)
3747 47e98658SCorey Bryant{
3748 47e98658SCorey Bryant    capng_capability_to_name(CAPNG_EFFECTIVE);
3749 47e98658SCorey Bryant    return 0;
3750 47e98658SCorey Bryant}
3751 47e98658SCorey BryantEOF
3752 47e98658SCorey Bryant  if compile_prog "" "$cap_libs" ; then
3753 47e98658SCorey Bryant    cap_ng=yes
3754 47e98658SCorey Bryant    libs_tools="$cap_libs $libs_tools"
3755 47e98658SCorey Bryant  else
3756 47e98658SCorey Bryant    if test "$cap_ng" = "yes" ; then
3757 21684af0SStewart Smith      feature_not_found "cap_ng" "Install libcap-ng devel"
3758 47e98658SCorey Bryant    fi
3759 47e98658SCorey Bryant    cap_ng=no
3760 47e98658SCorey Bryant  fi
3761 47e98658SCorey Bryantfi
3762 47e98658SCorey Bryant
3763 47e98658SCorey Bryant##########################################
3764 c2de5c91Smalc# Sound support libraries probe
3765 8f28f3fbSths
3766 89138857SStefan Weilaudio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3767 c2de5c91Smalcfor drv in $audio_drv_list; do
3768 c2de5c91Smalc    case $drv in
3769 e42975a1SGerd Hoffmann    alsa | try-alsa)
3770 c80a867fSGerd Hoffmann    if $pkg_config alsa --exists; then
3771 c80a867fSGerd Hoffmann        alsa_libs=$($pkg_config alsa --libs)
3772 478e943fSPaolo Bonzini        alsa_cflags=$($pkg_config alsa --cflags)
3773 478e943fSPaolo Bonzini        alsa=yes
3774 e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3775 e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3776 e42975a1SGerd Hoffmann        fi
3777 e42975a1SGerd Hoffmann    else
3778 e42975a1SGerd Hoffmann        if test "$drv" = "try-alsa"; then
3779 e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3780 c80a867fSGerd Hoffmann        else
3781 c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3782 c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3783 c80a867fSGerd Hoffmann        fi
3784 e42975a1SGerd Hoffmann    fi
3785 c2de5c91Smalc    ;;
3786 c2de5c91Smalc
3787 e42975a1SGerd Hoffmann    pa | try-pa)
3788 c80a867fSGerd Hoffmann    if $pkg_config libpulse --exists; then
3789 478e943fSPaolo Bonzini        libpulse=yes
3790 c80a867fSGerd Hoffmann        pulse_libs=$($pkg_config libpulse --libs)
3791 478e943fSPaolo Bonzini        pulse_cflags=$($pkg_config libpulse --cflags)
3792 e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3793 e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3794 e42975a1SGerd Hoffmann        fi
3795 e42975a1SGerd Hoffmann    else
3796 e42975a1SGerd Hoffmann        if test "$drv" = "try-pa"; then
3797 e42975a1SGerd Hoffmann            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3798 c80a867fSGerd Hoffmann        else
3799 c80a867fSGerd Hoffmann            error_exit "$drv check failed" \
3800 c80a867fSGerd Hoffmann                "Make sure to have the $drv libs and headers installed."
3801 c80a867fSGerd Hoffmann        fi
3802 e42975a1SGerd Hoffmann    fi
3803 b8e59f18Smalc    ;;
3804 b8e59f18Smalc
3805 373967b2SGerd Hoffmann    sdl)
3806 373967b2SGerd Hoffmann    if test "$sdl" = "no"; then
3807 373967b2SGerd Hoffmann        error_exit "sdl not found or disabled, can not use sdl audio driver"
3808 373967b2SGerd Hoffmann    fi
3809 373967b2SGerd Hoffmann    ;;
3810 373967b2SGerd Hoffmann
3811 e42975a1SGerd Hoffmann    try-sdl)
3812 e42975a1SGerd Hoffmann    if test "$sdl" = "no"; then
3813 e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3814 e42975a1SGerd Hoffmann    else
3815 e42975a1SGerd Hoffmann        audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3816 e42975a1SGerd Hoffmann    fi
3817 e42975a1SGerd Hoffmann    ;;
3818 e42975a1SGerd Hoffmann
3819 997e690aSJuan Quintela    coreaudio)
3820 b1149911SFam Zheng      coreaudio_libs="-framework CoreAudio"
3821 997e690aSJuan Quintela    ;;
3822 997e690aSJuan Quintela
3823 a4bf6780SJuan Quintela    dsound)
3824 b1149911SFam Zheng      dsound_libs="-lole32 -ldxguid"
3825 d5631638Smalc      audio_win_int="yes"
3826 a4bf6780SJuan Quintela    ;;
3827 a4bf6780SJuan Quintela
3828 a4bf6780SJuan Quintela    oss)
3829 b1149911SFam Zheng      oss_libs="$oss_lib"
3830 a4bf6780SJuan Quintela    ;;
3831 a4bf6780SJuan Quintela
3832 2e445703SGeoffrey McRae    jack | try-jack)
3833 2e445703SGeoffrey McRae    if $pkg_config jack --exists; then
3834 478e943fSPaolo Bonzini        libjack=yes
3835 2e445703SGeoffrey McRae        jack_libs=$($pkg_config jack --libs)
3836 2e445703SGeoffrey McRae        if test "$drv" = "try-jack"; then
3837 2e445703SGeoffrey McRae            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3838 2e445703SGeoffrey McRae        fi
3839 2e445703SGeoffrey McRae    else
3840 2e445703SGeoffrey McRae        if test "$drv" = "try-jack"; then
3841 2e445703SGeoffrey McRae            audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3842 2e445703SGeoffrey McRae        else
3843 2e445703SGeoffrey McRae            error_exit "$drv check failed" \
3844 2e445703SGeoffrey McRae                "Make sure to have the $drv libs and headers installed."
3845 2e445703SGeoffrey McRae        fi
3846 2e445703SGeoffrey McRae    fi
3847 2e445703SGeoffrey McRae    ;;
3848 2e445703SGeoffrey McRae
3849 e4c63a6aSmalc    *)
3850 1c9b2a52Smalc    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3851 76ad07a4SPeter Maydell        error_exit "Unknown driver '$drv' selected" \
3852 76ad07a4SPeter Maydell            "Possible drivers are: $audio_possible_drivers"
3853 e4c63a6aSmalc    }
3854 e4c63a6aSmalc    ;;
3855 c2de5c91Smalc    esac
3856 c2de5c91Smalcdone
3857 8f28f3fbSths
3858 4d3b6f6eSbalrog##########################################
3859 2e4d9fb1Saurel32# BrlAPI probe
3860 2e4d9fb1Saurel32
3861 4ffcedb6SJuan Quintelaif test "$brlapi" != "no" ; then
3862 eb82284fSJuan Quintela  brlapi_libs="-lbrlapi"
3863 2e4d9fb1Saurel32  cat > $TMPC << EOF
3864 2e4d9fb1Saurel32#include <brlapi.h>
3865 832ce9c2SScott Wood#include <stddef.h>
3866 2e4d9fb1Saurel32int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3867 2e4d9fb1Saurel32EOF
3868 52166aa0SJuan Quintela  if compile_prog "" "$brlapi_libs" ; then
3869 2e4d9fb1Saurel32    brlapi=yes
3870 4ffcedb6SJuan Quintela  else
3871 4ffcedb6SJuan Quintela    if test "$brlapi" = "yes" ; then
3872 21684af0SStewart Smith      feature_not_found "brlapi" "Install brlapi devel"
3873 4ffcedb6SJuan Quintela    fi
3874 4ffcedb6SJuan Quintela    brlapi=no
3875 eb82284fSJuan Quintela  fi
3876 eb82284fSJuan Quintelafi
3877 2e4d9fb1Saurel32
3878 2e4d9fb1Saurel32##########################################
3879 e08bb301SSamuel Thibault# iconv probe
3880 e08bb301SSamuel Thibaultif test "$iconv" != "no" ; then
3881 e08bb301SSamuel Thibault  cat > $TMPC << EOF
3882 e08bb301SSamuel Thibault#include <iconv.h>
3883 e08bb301SSamuel Thibaultint main(void) {
3884 e08bb301SSamuel Thibault  iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3885 e08bb301SSamuel Thibault  return conv != (iconv_t) -1;
3886 e08bb301SSamuel Thibault}
3887 e08bb301SSamuel ThibaultEOF
3888 e08bb301SSamuel Thibault  iconv_prefix_list="/usr/local:/usr"
3889 e08bb301SSamuel Thibault  iconv_lib_list=":-liconv"
3890 e08bb301SSamuel Thibault  IFS=:
3891 e08bb301SSamuel Thibault  for iconv_prefix in $iconv_prefix_list; do
3892 e08bb301SSamuel Thibault    IFS=:
3893 e08bb301SSamuel Thibault    iconv_cflags="-I$iconv_prefix/include"
3894 e08bb301SSamuel Thibault    iconv_ldflags="-L$iconv_prefix/lib"
3895 e08bb301SSamuel Thibault    for iconv_link in $iconv_lib_list; do
3896 e08bb301SSamuel Thibault      unset IFS
3897 e08bb301SSamuel Thibault      iconv_lib="$iconv_ldflags $iconv_link"
3898 e08bb301SSamuel Thibault      echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3899 e08bb301SSamuel Thibault      if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3900 e08bb301SSamuel Thibault        iconv_found=yes
3901 e08bb301SSamuel Thibault        break
3902 e08bb301SSamuel Thibault      fi
3903 e08bb301SSamuel Thibault    done
3904 e08bb301SSamuel Thibault    if test "$iconv_found" = yes ; then
3905 e08bb301SSamuel Thibault      break
3906 e08bb301SSamuel Thibault    fi
3907 e08bb301SSamuel Thibault  done
3908 e08bb301SSamuel Thibault  if test "$iconv_found" = "yes" ; then
3909 e08bb301SSamuel Thibault    iconv=yes
3910 e08bb301SSamuel Thibault  else
3911 e08bb301SSamuel Thibault    if test "$iconv" = "yes" ; then
3912 e08bb301SSamuel Thibault      feature_not_found "iconv" "Install iconv devel"
3913 e08bb301SSamuel Thibault    fi
3914 e08bb301SSamuel Thibault    iconv=no
3915 e08bb301SSamuel Thibault  fi
3916 e08bb301SSamuel Thibaultfi
3917 e08bb301SSamuel Thibault
3918 e08bb301SSamuel Thibault##########################################
3919 4d3b6f6eSbalrog# curses probe
3920 e08bb301SSamuel Thibaultif test "$iconv" = "no" ; then
3921 e08bb301SSamuel Thibault  # curses will need iconv
3922 e08bb301SSamuel Thibault  curses=no
3923 e08bb301SSamuel Thibaultfi
3924 a3605bf6SMichael Tokarevif test "$curses" != "no" ; then
3925 e095e2f3SStefan Weil  if test "$mingw32" = "yes" ; then
3926 8ddc5bf9SSamuel Thibault    curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3927 8ddc5bf9SSamuel Thibault    curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3928 e095e2f3SStefan Weil  else
3929 7c703002SSamuel Thibault    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3930 8ddc5bf9SSamuel Thibault    curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3931 e095e2f3SStefan Weil  fi
3932 c584a6d0SJuan Quintela  curses_found=no
3933 4d3b6f6eSbalrog  cat > $TMPC << EOF
3934 8ddc5bf9SSamuel Thibault#include <locale.h>
3935 4d3b6f6eSbalrog#include <curses.h>
3936 8ddc5bf9SSamuel Thibault#include <wchar.h>
3937 2f8b7cd5SSamuel Thibault#include <langinfo.h>
3938 ef9a2524SStefan Weilint main(void) {
3939 2f8b7cd5SSamuel Thibault  const char *codeset;
3940 8ddc5bf9SSamuel Thibault  wchar_t wch = L'w';
3941 8ddc5bf9SSamuel Thibault  setlocale(LC_ALL, "");
3942 ef9a2524SStefan Weil  resize_term(0, 0);
3943 8ddc5bf9SSamuel Thibault  addwstr(L"wide chars\n");
3944 8ddc5bf9SSamuel Thibault  addnwstr(&wch, 1);
3945 7c703002SSamuel Thibault  add_wch(WACS_DEGREE);
3946 2f8b7cd5SSamuel Thibault  codeset = nl_langinfo(CODESET);
3947 2f8b7cd5SSamuel Thibault  return codeset != 0;
3948 ef9a2524SStefan Weil}
3949 4d3b6f6eSbalrogEOF
3950 ecbe251fSVadim Evard  IFS=:
3951 8ddc5bf9SSamuel Thibault  for curses_inc in $curses_inc_list; do
3952 b01a4fd3SPeter Maydell    # Make sure we get the wide character prototypes
3953 b01a4fd3SPeter Maydell    curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3954 7c703002SSamuel Thibault    IFS=:
3955 8ddc5bf9SSamuel Thibault    for curses_lib in $curses_lib_list; do
3956 ecbe251fSVadim Evard      unset IFS
3957 8ddc5bf9SSamuel Thibault      if compile_prog "$curses_inc" "$curses_lib" ; then
3958 c584a6d0SJuan Quintela        curses_found=yes
3959 4f78ef9aSJuan Quintela        break
3960 4d3b6f6eSbalrog      fi
3961 4f78ef9aSJuan Quintela    done
3962 7c703002SSamuel Thibault    if test "$curses_found" = yes ; then
3963 7c703002SSamuel Thibault      break
3964 7c703002SSamuel Thibault    fi
3965 8ddc5bf9SSamuel Thibault  done
3966 ecbe251fSVadim Evard  unset IFS
3967 c584a6d0SJuan Quintela  if test "$curses_found" = "yes" ; then
3968 c584a6d0SJuan Quintela    curses=yes
3969 c584a6d0SJuan Quintela  else
3970 c584a6d0SJuan Quintela    if test "$curses" = "yes" ; then
3971 21684af0SStewart Smith      feature_not_found "curses" "Install ncurses devel"
3972 c584a6d0SJuan Quintela    fi
3973 c584a6d0SJuan Quintela    curses=no
3974 c584a6d0SJuan Quintela  fi
3975 4f78ef9aSJuan Quintelafi
3976 4d3b6f6eSbalrog
3977 414f0dabSblueswir1##########################################
3978 769ce76dSAlexander Graf# curl probe
3979 a3605bf6SMichael Tokarevif test "$curl" != "no" ; then
3980 65d5d3f9SStefan Weil  if $pkg_config libcurl --exists; then
3981 a8bd70adSPaolo Bonzini    curlconfig="$pkg_config libcurl"
3982 4e2b0658SPaolo Bonzini  else
3983 4e2b0658SPaolo Bonzini    curlconfig=curl-config
3984 4e2b0658SPaolo Bonzini  fi
3985 769ce76dSAlexander Graf  cat > $TMPC << EOF
3986 769ce76dSAlexander Graf#include <curl/curl.h>
3987 0b862cedSPeter Maydellint main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3988 769ce76dSAlexander GrafEOF
3989 89138857SStefan Weil  curl_cflags=$($curlconfig --cflags 2>/dev/null)
3990 89138857SStefan Weil  curl_libs=$($curlconfig --libs 2>/dev/null)
3991 b1d5a277SJuan Quintela  if compile_prog "$curl_cflags" "$curl_libs" ; then
3992 769ce76dSAlexander Graf    curl=yes
3993 788c8196SJuan Quintela  else
3994 788c8196SJuan Quintela    if test "$curl" = "yes" ; then
3995 21684af0SStewart Smith      feature_not_found "curl" "Install libcurl devel"
3996 788c8196SJuan Quintela    fi
3997 788c8196SJuan Quintela    curl=no
3998 769ce76dSAlexander Graf  fi
3999 769ce76dSAlexander Graffi # test "$curl"
4000 769ce76dSAlexander Graf
4001 769ce76dSAlexander Graf##########################################
4002 e18df141SAnthony Liguori# glib support probe
4003 a52d28afSPaolo Bonzini
4004 00f2cfbbSDaniel P. Berrangéglib_req_ver=2.48
4005 aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
4006 aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
4007 a88afc64SGerd Hoffmann    glib_modules="$glib_modules gmodule-export-2.0"
4008 aa0d1f44SPaolo Bonzinifi
4009 54cb65d8SEmilio G. Cotaif test "$plugins" = yes; then
4010 54cb65d8SEmilio G. Cota    glib_modules="$glib_modules gmodule-2.0"
4011 54cb65d8SEmilio G. Cotafi
4012 e26110cfSFam Zheng
4013 4eaf7202SSameeh Jubran# This workaround is required due to a bug in pkg-config file for glib as it
4014 4eaf7202SSameeh Jubran# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
4015 4eaf7202SSameeh Jubran
4016 e633a5c6SEric Blakeif test "$static" = yes && test "$mingw32" = yes; then
4017 4eaf7202SSameeh Jubran    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
4018 4eaf7202SSameeh Jubranfi
4019 4eaf7202SSameeh Jubran
4020 aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
4021 e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
4022 89138857SStefan Weil        glib_cflags=$($pkg_config --cflags $i)
4023 89138857SStefan Weil        glib_libs=$($pkg_config --libs $i)
4024 4a058899SMarc-André Lureau        QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
4025 14015304SAnthony Liguori        LIBS="$glib_libs $LIBS"
4026 e18df141SAnthony Liguori    else
4027 e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
4028 e26110cfSFam Zheng    fi
4029 e26110cfSFam Zhengdone
4030 e26110cfSFam Zheng
4031 f876b765SMarc-André Lureauif $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
4032 f876b765SMarc-André Lureau    gio=yes
4033 f876b765SMarc-André Lureau    gio_cflags=$($pkg_config --cflags gio-2.0)
4034 f876b765SMarc-André Lureau    gio_libs=$($pkg_config --libs gio-2.0)
4035 25a97a56SMarc-André Lureau    gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
4036 0dba4897SMarc-André Lureau    if [ ! -x "$gdbus_codegen" ]; then
4037 0dba4897SMarc-André Lureau        gdbus_codegen=
4038 0dba4897SMarc-André Lureau    fi
4039 f876b765SMarc-André Lureauelse
4040 f876b765SMarc-André Lureau    gio=no
4041 f876b765SMarc-André Lureaufi
4042 f876b765SMarc-André Lureau
4043 25a97a56SMarc-André Lureauif $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
4044 25a97a56SMarc-André Lureau    gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
4045 25a97a56SMarc-André Lureau    gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
4046 25a97a56SMarc-André Lureaufi
4047 25a97a56SMarc-André Lureau
4048 977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the
4049 977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches
4050 977a82abSDaniel P. Berrange# problems on multi-arch where people try to build
4051 977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers
4052 977a82abSDaniel P. Berrangecat > $TMPC <<EOF
4053 977a82abSDaniel P. Berrange#include <glib.h>
4054 977a82abSDaniel P. Berrange#include <unistd.h>
4055 977a82abSDaniel P. Berrange
4056 977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \
4057 977a82abSDaniel P. Berrange  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
4058 977a82abSDaniel P. Berrange
4059 977a82abSDaniel P. Berrangeint main(void) {
4060 977a82abSDaniel P. Berrange   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
4061 977a82abSDaniel P. Berrange   return 0;
4062 977a82abSDaniel P. Berrange}
4063 977a82abSDaniel P. BerrangeEOF
4064 977a82abSDaniel P. Berrange
4065 5919e032SStefan Weilif ! compile_prog "$CFLAGS" "$LIBS" ; then
4066 977a82abSDaniel P. Berrange    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
4067 977a82abSDaniel P. Berrange               "You probably need to set PKG_CONFIG_LIBDIR"\
4068 977a82abSDaniel P. Berrange	       "to point to the right pkg-config files for your"\
4069 977a82abSDaniel P. Berrange	       "build target"
4070 977a82abSDaniel P. Berrangefi
4071 977a82abSDaniel P. Berrange
4072 bbbf2e04SJohn Snow# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
4073 bbbf2e04SJohn Snowcat > $TMPC << EOF
4074 bbbf2e04SJohn Snow#include <glib.h>
4075 bbbf2e04SJohn Snowint main(void) { return 0; }
4076 bbbf2e04SJohn SnowEOF
4077 bbbf2e04SJohn Snowif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
4078 bbbf2e04SJohn Snow    if cc_has_warning_flag "-Wno-unknown-attributes"; then
4079 bbbf2e04SJohn Snow        glib_cflags="-Wno-unknown-attributes $glib_cflags"
4080 086d5f75SPaolo Bonzini        QEMU_CFLAGS="-Wno-unknown-attributes $CFLAGS"
4081 bbbf2e04SJohn Snow    fi
4082 bbbf2e04SJohn Snowfi
4083 bbbf2e04SJohn Snow
4084 9bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2
4085 9bda600bSEric Blakecat > $TMPC << EOF
4086 9bda600bSEric Blake#include <glib.h>
4087 9bda600bSEric Blaketypedef struct Foo {
4088 9bda600bSEric Blake    int i;
4089 9bda600bSEric Blake} Foo;
4090 9bda600bSEric Blakestatic void foo_free(Foo *f)
4091 9bda600bSEric Blake{
4092 9bda600bSEric Blake    g_free(f);
4093 9bda600bSEric Blake}
4094 9bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
4095 9bda600bSEric Blakeint main(void) { return 0; }
4096 9bda600bSEric BlakeEOF
4097 9bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
4098 9bda600bSEric Blake    if cc_has_warning_flag "-Wno-unused-function"; then
4099 9bda600bSEric Blake        glib_cflags="$glib_cflags -Wno-unused-function"
4100 9bda600bSEric Blake        CFLAGS="$CFLAGS -Wno-unused-function"
4101 9bda600bSEric Blake    fi
4102 9bda600bSEric Blakefi
4103 9bda600bSEric Blake
4104 6a1f42bdSStefan Weil#########################################
4105 6a1f42bdSStefan Weil# zlib check
4106 6a1f42bdSStefan Weil
4107 6a1f42bdSStefan Weilif test "$zlib" != "no" ; then
4108 6a1f42bdSStefan Weil    if $pkg_config --exists zlib; then
4109 6a1f42bdSStefan Weil        zlib_cflags=$($pkg_config --cflags zlib)
4110 6a1f42bdSStefan Weil        zlib_libs=$($pkg_config --libs zlib)
4111 6a1f42bdSStefan Weil        QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
4112 6a1f42bdSStefan Weil        LIBS="$zlib_libs $LIBS"
4113 6a1f42bdSStefan Weil    else
4114 6a1f42bdSStefan Weil        cat > $TMPC << EOF
4115 6a1f42bdSStefan Weil#include <zlib.h>
4116 6a1f42bdSStefan Weilint main(void) { zlibVersion(); return 0; }
4117 6a1f42bdSStefan WeilEOF
4118 6a1f42bdSStefan Weil        if compile_prog "" "-lz" ; then
4119 5e5733e5SMarc-André Lureau            zlib_libs=-lz
4120 5e5733e5SMarc-André Lureau            LIBS="$LIBS $zlib_libs"
4121 6a1f42bdSStefan Weil        else
4122 6a1f42bdSStefan Weil            error_exit "zlib check failed" \
4123 6a1f42bdSStefan Weil                "Make sure to have the zlib libs and headers installed."
4124 6a1f42bdSStefan Weil        fi
4125 6a1f42bdSStefan Weil    fi
4126 6a1f42bdSStefan Weilfi
4127 6a1f42bdSStefan Weil
4128 e26110cfSFam Zheng##########################################
4129 e26110cfSFam Zheng# SHA command probe for modules
4130 e26110cfSFam Zhengif test "$modules" = yes; then
4131 e26110cfSFam Zheng    shacmd_probe="sha1sum sha1 shasum"
4132 e26110cfSFam Zheng    for c in $shacmd_probe; do
4133 8ccefb91SFam Zheng        if has $c; then
4134 e26110cfSFam Zheng            shacmd="$c"
4135 e26110cfSFam Zheng            break
4136 e26110cfSFam Zheng        fi
4137 e26110cfSFam Zheng    done
4138 e26110cfSFam Zheng    if test "$shacmd" = ""; then
4139 e26110cfSFam Zheng        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
4140 e26110cfSFam Zheng    fi
4141 e18df141SAnthony Liguorifi
4142 e18df141SAnthony Liguori
4143 e18df141SAnthony Liguori##########################################
4144 e2134eb9SGerd Hoffmann# pixman support probe
4145 e2134eb9SGerd Hoffmann
4146 9b52b17bSThomas Huthif test "$softmmu" = "no"; then
4147 74880fe2SRobert Schiele  pixman_cflags=
4148 74880fe2SRobert Schiele  pixman_libs=
4149 35c4e86cSGerd Hoffmannelif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
4150 89138857SStefan Weil  pixman_cflags=$($pkg_config --cflags pixman-1)
4151 89138857SStefan Weil  pixman_libs=$($pkg_config --libs pixman-1)
4152 e2134eb9SGerd Hoffmannelse
4153 c12b6d70SGerd Hoffmann  error_exit "pixman >= 0.21.8 not present." \
4154 c12b6d70SGerd Hoffmann      "Please install the pixman devel package."
4155 e2134eb9SGerd Hoffmannfi
4156 e2134eb9SGerd Hoffmann
4157 e2134eb9SGerd Hoffmann##########################################
4158 fe8fc5aeSPaolo Bonzini# libmpathpersist probe
4159 fe8fc5aeSPaolo Bonzini
4160 fe8fc5aeSPaolo Bonziniif test "$mpath" != "no" ; then
4161 1b0578f5SMurilo Opsfelder Araujo  # probe for the new API
4162 fe8fc5aeSPaolo Bonzini  cat > $TMPC <<EOF
4163 fe8fc5aeSPaolo Bonzini#include <libudev.h>
4164 fe8fc5aeSPaolo Bonzini#include <mpath_persist.h>
4165 fe8fc5aeSPaolo Bonziniunsigned mpath_mx_alloc_len = 1024;
4166 fe8fc5aeSPaolo Bonziniint logsink;
4167 b3f1c8c4SPaolo Bonzinistatic struct config *multipath_conf;
4168 b3f1c8c4SPaolo Bonziniextern struct udev *udev;
4169 b3f1c8c4SPaolo Bonziniextern struct config *get_multipath_config(void);
4170 b3f1c8c4SPaolo Bonziniextern void put_multipath_config(struct config *conf);
4171 b3f1c8c4SPaolo Bonzinistruct udev *udev;
4172 b3f1c8c4SPaolo Bonzinistruct config *get_multipath_config(void) { return multipath_conf; }
4173 b3f1c8c4SPaolo Bonzinivoid put_multipath_config(struct config *conf) { }
4174 b3f1c8c4SPaolo Bonzini
4175 fe8fc5aeSPaolo Bonziniint main(void) {
4176 b3f1c8c4SPaolo Bonzini    udev = udev_new();
4177 b3f1c8c4SPaolo Bonzini    multipath_conf = mpath_lib_init();
4178 fe8fc5aeSPaolo Bonzini    return 0;
4179 fe8fc5aeSPaolo Bonzini}
4180 fe8fc5aeSPaolo BonziniEOF
4181 fe8fc5aeSPaolo Bonzini  if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4182 fe8fc5aeSPaolo Bonzini    mpathpersist=yes
4183 1b0578f5SMurilo Opsfelder Araujo    mpathpersist_new_api=yes
4184 1b0578f5SMurilo Opsfelder Araujo  else
4185 1b0578f5SMurilo Opsfelder Araujo    # probe for the old API
4186 1b0578f5SMurilo Opsfelder Araujo    cat > $TMPC <<EOF
4187 1b0578f5SMurilo Opsfelder Araujo#include <libudev.h>
4188 1b0578f5SMurilo Opsfelder Araujo#include <mpath_persist.h>
4189 1b0578f5SMurilo Opsfelder Araujounsigned mpath_mx_alloc_len = 1024;
4190 1b0578f5SMurilo Opsfelder Araujoint logsink;
4191 1b0578f5SMurilo Opsfelder Araujoint main(void) {
4192 1b0578f5SMurilo Opsfelder Araujo    struct udev *udev = udev_new();
4193 1b0578f5SMurilo Opsfelder Araujo    mpath_lib_init(udev);
4194 1b0578f5SMurilo Opsfelder Araujo    return 0;
4195 1b0578f5SMurilo Opsfelder Araujo}
4196 1b0578f5SMurilo Opsfelder AraujoEOF
4197 1b0578f5SMurilo Opsfelder Araujo    if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
4198 1b0578f5SMurilo Opsfelder Araujo      mpathpersist=yes
4199 1b0578f5SMurilo Opsfelder Araujo      mpathpersist_new_api=no
4200 fe8fc5aeSPaolo Bonzini    else
4201 fe8fc5aeSPaolo Bonzini      mpathpersist=no
4202 fe8fc5aeSPaolo Bonzini    fi
4203 1b0578f5SMurilo Opsfelder Araujo  fi
4204 fe8fc5aeSPaolo Bonzinielse
4205 fe8fc5aeSPaolo Bonzini  mpathpersist=no
4206 fe8fc5aeSPaolo Bonzinifi
4207 fe8fc5aeSPaolo Bonzini
4208 fe8fc5aeSPaolo Bonzini##########################################
4209 e5d355d1Saliguori# pthread probe
4210 4b29ec41SBradPTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
4211 3c529d93Saliguori
4212 e5d355d1Saliguoripthread=no
4213 414f0dabSblueswir1cat > $TMPC << EOF
4214 3c529d93Saliguori#include <pthread.h>
4215 7a42bbe4SStefan Weilstatic void *f(void *p) { return NULL; }
4216 7a42bbe4SStefan Weilint main(void) {
4217 7a42bbe4SStefan Weil  pthread_t thread;
4218 7a42bbe4SStefan Weil  pthread_create(&thread, 0, f, 0);
4219 7a42bbe4SStefan Weil  return 0;
4220 7a42bbe4SStefan Weil}
4221 414f0dabSblueswir1EOF
4222 bd00d539SAndreas Färberif compile_prog "" "" ; then
4223 bd00d539SAndreas Färber  pthread=yes
4224 bd00d539SAndreas Färberelse
4225 de65fe0fSSebastian Herbszt  for pthread_lib in $PTHREADLIBS_LIST; do
4226 52166aa0SJuan Quintela    if compile_prog "" "$pthread_lib" ; then
4227 e5d355d1Saliguori      pthread=yes
4228 e3c56761SPeter Portante      found=no
4229 e3c56761SPeter Portante      for lib_entry in $LIBS; do
4230 e3c56761SPeter Portante        if test "$lib_entry" = "$pthread_lib"; then
4231 e3c56761SPeter Portante          found=yes
4232 e3c56761SPeter Portante          break
4233 e3c56761SPeter Portante        fi
4234 e3c56761SPeter Portante      done
4235 e3c56761SPeter Portante      if test "$found" = "no"; then
4236 5572b539SJuan Quintela        LIBS="$pthread_lib $LIBS"
4237 e3c56761SPeter Portante      fi
4238 409437e1SDaniel P. Berrange      PTHREAD_LIB="$pthread_lib"
4239 de65fe0fSSebastian Herbszt      break
4240 414f0dabSblueswir1    fi
4241 de65fe0fSSebastian Herbszt  done
4242 bd00d539SAndreas Färberfi
4243 414f0dabSblueswir1
4244 e633a5c6SEric Blakeif test "$mingw32" != yes && test "$pthread" = no; then
4245 76ad07a4SPeter Maydell  error_exit "pthread check failed" \
4246 76ad07a4SPeter Maydell      "Make sure to have the pthread libs and headers installed."
4247 e5d355d1Saliguorifi
4248 e5d355d1Saliguori
4249 479a5747SRoman Bolshakov# check for pthread_setname_np with thread id
4250 479a5747SRoman Bolshakovpthread_setname_np_w_tid=no
4251 5c312079SDr. David Alan Gilbertcat > $TMPC << EOF
4252 5c312079SDr. David Alan Gilbert#include <pthread.h>
4253 5c312079SDr. David Alan Gilbert
4254 5c312079SDr. David Alan Gilbertstatic void *f(void *p) { return NULL; }
4255 5c312079SDr. David Alan Gilbertint main(void)
4256 5c312079SDr. David Alan Gilbert{
4257 5c312079SDr. David Alan Gilbert    pthread_t thread;
4258 5c312079SDr. David Alan Gilbert    pthread_create(&thread, 0, f, 0);
4259 5c312079SDr. David Alan Gilbert    pthread_setname_np(thread, "QEMU");
4260 5c312079SDr. David Alan Gilbert    return 0;
4261 5c312079SDr. David Alan Gilbert}
4262 5c312079SDr. David Alan GilbertEOF
4263 5c312079SDr. David Alan Gilbertif compile_prog "" "$pthread_lib" ; then
4264 479a5747SRoman Bolshakov  pthread_setname_np_w_tid=yes
4265 479a5747SRoman Bolshakovfi
4266 479a5747SRoman Bolshakov
4267 479a5747SRoman Bolshakov# check for pthread_setname_np without thread id
4268 479a5747SRoman Bolshakovpthread_setname_np_wo_tid=no
4269 479a5747SRoman Bolshakovcat > $TMPC << EOF
4270 479a5747SRoman Bolshakov#include <pthread.h>
4271 479a5747SRoman Bolshakov
4272 12a9b8d8SThomas Huthstatic void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
4273 479a5747SRoman Bolshakovint main(void)
4274 479a5747SRoman Bolshakov{
4275 479a5747SRoman Bolshakov    pthread_t thread;
4276 479a5747SRoman Bolshakov    pthread_create(&thread, 0, f, 0);
4277 479a5747SRoman Bolshakov    return 0;
4278 479a5747SRoman Bolshakov}
4279 479a5747SRoman BolshakovEOF
4280 479a5747SRoman Bolshakovif compile_prog "" "$pthread_lib" ; then
4281 479a5747SRoman Bolshakov  pthread_setname_np_wo_tid=yes
4282 5c312079SDr. David Alan Gilbertfi
4283 5c312079SDr. David Alan Gilbert
4284 bf9298b9Saliguori##########################################
4285 f27aaf4bSChristian Brunner# rbd probe
4286 f27aaf4bSChristian Brunnerif test "$rbd" != "no" ; then
4287 f27aaf4bSChristian Brunner  cat > $TMPC <<EOF
4288 f27aaf4bSChristian Brunner#include <stdio.h>
4289 ad32e9c0SJosh Durgin#include <rbd/librbd.h>
4290 f27aaf4bSChristian Brunnerint main(void) {
4291 ad32e9c0SJosh Durgin    rados_t cluster;
4292 ad32e9c0SJosh Durgin    rados_create(&cluster, NULL);
4293 f27aaf4bSChristian Brunner    return 0;
4294 f27aaf4bSChristian Brunner}
4295 f27aaf4bSChristian BrunnerEOF
4296 ad32e9c0SJosh Durgin  rbd_libs="-lrbd -lrados"
4297 f27aaf4bSChristian Brunner  if compile_prog "" "$rbd_libs" ; then
4298 f27aaf4bSChristian Brunner    rbd=yes
4299 f27aaf4bSChristian Brunner  else
4300 f27aaf4bSChristian Brunner    if test "$rbd" = "yes" ; then
4301 21684af0SStewart Smith      feature_not_found "rados block device" "Install librbd/ceph devel"
4302 f27aaf4bSChristian Brunner    fi
4303 f27aaf4bSChristian Brunner    rbd=no
4304 f27aaf4bSChristian Brunner  fi
4305 f27aaf4bSChristian Brunnerfi
4306 f27aaf4bSChristian Brunner
4307 f27aaf4bSChristian Brunner##########################################
4308 b10d49d7SPino Toscano# libssh probe
4309 b10d49d7SPino Toscanoif test "$libssh" != "no" ; then
4310 b10d49d7SPino Toscano  if $pkg_config --exists libssh; then
4311 b10d49d7SPino Toscano    libssh_cflags=$($pkg_config libssh --cflags)
4312 b10d49d7SPino Toscano    libssh_libs=$($pkg_config libssh --libs)
4313 b10d49d7SPino Toscano    libssh=yes
4314 0a12ec87SRichard W.M. Jones  else
4315 b10d49d7SPino Toscano    if test "$libssh" = "yes" ; then
4316 b10d49d7SPino Toscano      error_exit "libssh required for --enable-libssh"
4317 0a12ec87SRichard W.M. Jones    fi
4318 b10d49d7SPino Toscano    libssh=no
4319 0a12ec87SRichard W.M. Jones  fi
4320 0a12ec87SRichard W.M. Jonesfi
4321 0a12ec87SRichard W.M. Jones
4322 0a12ec87SRichard W.M. Jones##########################################
4323 b10d49d7SPino Toscano# Check for libssh 0.8
4324 b10d49d7SPino Toscano# This is done like this instead of using the LIBSSH_VERSION_* and
4325 b10d49d7SPino Toscano# SSH_VERSION_* macros because some distributions in the past shipped
4326 b10d49d7SPino Toscano# snapshots of the future 0.8 from Git, and those snapshots did not
4327 b10d49d7SPino Toscano# have updated version numbers (still referring to 0.7.0).
4328 9a2d462eSRichard W.M. Jones
4329 b10d49d7SPino Toscanoif test "$libssh" = "yes"; then
4330 9a2d462eSRichard W.M. Jones  cat > $TMPC <<EOF
4331 b10d49d7SPino Toscano#include <libssh/libssh.h>
4332 b10d49d7SPino Toscanoint main(void) { return ssh_get_server_publickey(NULL, NULL); }
4333 9a2d462eSRichard W.M. JonesEOF
4334 b10d49d7SPino Toscano  if compile_prog "$libssh_cflags" "$libssh_libs"; then
4335 b10d49d7SPino Toscano    libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4336 9a2d462eSRichard W.M. Jones  fi
4337 9a2d462eSRichard W.M. Jonesfi
4338 9a2d462eSRichard W.M. Jones
4339 9a2d462eSRichard W.M. Jones##########################################
4340 5c6c3a6cSChristoph Hellwig# linux-aio probe
4341 5c6c3a6cSChristoph Hellwig
4342 5c6c3a6cSChristoph Hellwigif test "$linux_aio" != "no" ; then
4343 5c6c3a6cSChristoph Hellwig  cat > $TMPC <<EOF
4344 5c6c3a6cSChristoph Hellwig#include <libaio.h>
4345 5c6c3a6cSChristoph Hellwig#include <sys/eventfd.h>
4346 832ce9c2SScott Wood#include <stddef.h>
4347 5c6c3a6cSChristoph Hellwigint main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4348 5c6c3a6cSChristoph HellwigEOF
4349 5c6c3a6cSChristoph Hellwig  if compile_prog "" "-laio" ; then
4350 5c6c3a6cSChristoph Hellwig    linux_aio=yes
4351 5c6c3a6cSChristoph Hellwig  else
4352 5c6c3a6cSChristoph Hellwig    if test "$linux_aio" = "yes" ; then
4353 21684af0SStewart Smith      feature_not_found "linux AIO" "Install libaio devel"
4354 5c6c3a6cSChristoph Hellwig    fi
4355 3cfcae3cSLuiz Capitulino    linux_aio=no
4356 5c6c3a6cSChristoph Hellwig  fi
4357 5c6c3a6cSChristoph Hellwigfi
4358 c10dd856SAarushi Mehta##########################################
4359 c10dd856SAarushi Mehta# linux-io-uring probe
4360 c10dd856SAarushi Mehta
4361 c10dd856SAarushi Mehtaif test "$linux_io_uring" != "no" ; then
4362 c10dd856SAarushi Mehta  if $pkg_config liburing; then
4363 c10dd856SAarushi Mehta    linux_io_uring_cflags=$($pkg_config --cflags liburing)
4364 c10dd856SAarushi Mehta    linux_io_uring_libs=$($pkg_config --libs liburing)
4365 c10dd856SAarushi Mehta    linux_io_uring=yes
4366 73fd282eSStefan Hajnoczi
4367 73fd282eSStefan Hajnoczi    # io_uring is used in libqemuutil.a where per-file -libs variables are not
4368 73fd282eSStefan Hajnoczi    # seen by programs linking the archive.  It's not ideal, but just add the
4369 73fd282eSStefan Hajnoczi    # library dependency globally.
4370 73fd282eSStefan Hajnoczi    LIBS="$linux_io_uring_libs $LIBS"
4371 c10dd856SAarushi Mehta  else
4372 c10dd856SAarushi Mehta    if test "$linux_io_uring" = "yes" ; then
4373 c10dd856SAarushi Mehta      feature_not_found "linux io_uring" "Install liburing devel"
4374 c10dd856SAarushi Mehta    fi
4375 c10dd856SAarushi Mehta    linux_io_uring=no
4376 c10dd856SAarushi Mehta  fi
4377 c10dd856SAarushi Mehtafi
4378 5c6c3a6cSChristoph Hellwig
4379 5c6c3a6cSChristoph Hellwig##########################################
4380 7aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX
4381 3b8acc11SPaolo Bonzini
4382 7aaa6a16SPaolo Bonziniif test "$tpm" = ""; then
4383 7aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes"; then
4384 7aaa6a16SPaolo Bonzini    tpm=no
4385 3b8acc11SPaolo Bonzini  else
4386 7aaa6a16SPaolo Bonzini    tpm=yes
4387 7aaa6a16SPaolo Bonzini  fi
4388 7aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then
4389 7aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes" ; then
4390 7aaa6a16SPaolo Bonzini    error_exit "TPM emulation only available on POSIX systems"
4391 7aaa6a16SPaolo Bonzini  fi
4392 3b8acc11SPaolo Bonzinifi
4393 3b8acc11SPaolo Bonzini
4394 3b8acc11SPaolo Bonzini##########################################
4395 758e8e38SVenkateswararao Jujjuri (JV)# attr probe
4396 758e8e38SVenkateswararao Jujjuri (JV)
4397 ec0d5893SMarc-André Lureaulibattr_libs=
4398 758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" != "no" ; then
4399 758e8e38SVenkateswararao Jujjuri (JV)  cat > $TMPC <<EOF
4400 758e8e38SVenkateswararao Jujjuri (JV)#include <stdio.h>
4401 758e8e38SVenkateswararao Jujjuri (JV)#include <sys/types.h>
4402 f2338fb4SPavel Borzenkov#ifdef CONFIG_LIBATTR
4403 f2338fb4SPavel Borzenkov#include <attr/xattr.h>
4404 f2338fb4SPavel Borzenkov#else
4405 4f26f2b6SAvi Kivity#include <sys/xattr.h>
4406 f2338fb4SPavel Borzenkov#endif
4407 758e8e38SVenkateswararao Jujjuri (JV)int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4408 758e8e38SVenkateswararao Jujjuri (JV)EOF
4409 4f26f2b6SAvi Kivity  if compile_prog "" "" ; then
4410 4f26f2b6SAvi Kivity    attr=yes
4411 4f26f2b6SAvi Kivity  # Older distros have <attr/xattr.h>, and need -lattr:
4412 f2338fb4SPavel Borzenkov  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4413 758e8e38SVenkateswararao Jujjuri (JV)    attr=yes
4414 ec0d5893SMarc-André Lureau    libattr_libs="-lattr"
4415 ec0d5893SMarc-André Lureau    LIBS="$libattr_libs $LIBS"
4416 4f26f2b6SAvi Kivity    libattr=yes
4417 758e8e38SVenkateswararao Jujjuri (JV)  else
4418 758e8e38SVenkateswararao Jujjuri (JV)    if test "$attr" = "yes" ; then
4419 21684af0SStewart Smith      feature_not_found "ATTR" "Install libc6 or libattr devel"
4420 758e8e38SVenkateswararao Jujjuri (JV)    fi
4421 758e8e38SVenkateswararao Jujjuri (JV)    attr=no
4422 758e8e38SVenkateswararao Jujjuri (JV)  fi
4423 758e8e38SVenkateswararao Jujjuri (JV)fi
4424 758e8e38SVenkateswararao Jujjuri (JV)
4425 758e8e38SVenkateswararao Jujjuri (JV)##########################################
4426 bf9298b9Saliguori# iovec probe
4427 bf9298b9Saliguoricat > $TMPC <<EOF
4428 db34f0b3Sblueswir1#include <sys/types.h>
4429 bf9298b9Saliguori#include <sys/uio.h>
4430 db34f0b3Sblueswir1#include <unistd.h>
4431 f91f9beeSStefan Weilint main(void) { return sizeof(struct iovec); }
4432 bf9298b9SaliguoriEOF
4433 bf9298b9Saliguoriiovec=no
4434 52166aa0SJuan Quintelaif compile_prog "" "" ; then
4435 bf9298b9Saliguori  iovec=yes
4436 bf9298b9Saliguorifi
4437 bf9298b9Saliguori
4438 f652e6afSaurel32##########################################
4439 ceb42de8Saliguori# preadv probe
4440 ceb42de8Saliguoricat > $TMPC <<EOF
4441 ceb42de8Saliguori#include <sys/types.h>
4442 ceb42de8Saliguori#include <sys/uio.h>
4443 ceb42de8Saliguori#include <unistd.h>
4444 c075a723SBlue Swirlint main(void) { return preadv(0, 0, 0, 0); }
4445 ceb42de8SaliguoriEOF
4446 ceb42de8Saliguoripreadv=no
4447 52166aa0SJuan Quintelaif compile_prog "" "" ; then
4448 ceb42de8Saliguori  preadv=yes
4449 ceb42de8Saliguorifi
4450 ceb42de8Saliguori
4451 ceb42de8Saliguori##########################################
4452 f652e6afSaurel32# fdt probe
4453 e169e1e1SPeter Maydell# fdt support is mandatory for at least some target architectures,
4454 e169e1e1SPeter Maydell# so insist on it if we're building those system emulators.
4455 e169e1e1SPeter Maydellfdt_required=no
4456 e169e1e1SPeter Maydellfor target in $target_list; do
4457 e169e1e1SPeter Maydell  case $target in
4458 c8c35e5fSYoshinori Sato    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
4459 e169e1e1SPeter Maydell      fdt_required=yes
4460 e169e1e1SPeter Maydell    ;;
4461 e169e1e1SPeter Maydell  esac
4462 e169e1e1SPeter Maydelldone
4463 e169e1e1SPeter Maydell
4464 e169e1e1SPeter Maydellif test "$fdt_required" = "yes"; then
4465 e169e1e1SPeter Maydell  if test "$fdt" = "no"; then
4466 e169e1e1SPeter Maydell    error_exit "fdt disabled but some requested targets require it." \
4467 e169e1e1SPeter Maydell      "You can turn off fdt only if you also disable all the system emulation" \
4468 e169e1e1SPeter Maydell      "targets which need it (by specifying a cut down --target-list)."
4469 e169e1e1SPeter Maydell  fi
4470 e169e1e1SPeter Maydell  fdt=yes
4471 7ba4a4d3SPhilippe Mathieu-Daudéelif test "$fdt" != "yes" ; then
4472 7ba4a4d3SPhilippe Mathieu-Daudé  fdt=no
4473 e169e1e1SPeter Maydellfi
4474 e169e1e1SPeter Maydell
4475 d599938aSLaurent Vivier# fdt is only required when building softmmu targets
4476 d599938aSLaurent Vivierif test -z "$fdt" -a "$softmmu" != "yes" ; then
4477 d599938aSLaurent Vivier    fdt="no"
4478 d599938aSLaurent Vivierfi
4479 d599938aSLaurent Vivier
4480 2df87df7SJuan Quintelaif test "$fdt" != "no" ; then
4481 b41af4baSJuan Quintela  fdt_libs="-lfdt"
4482 96ce6545SPeter Crosthwaite  # explicitly check for libfdt_env.h as it is missing in some stable installs
4483 6e85fce0SPaul Burton  # and test for required functions to make sure we are on a version >= 1.4.2
4484 f652e6afSaurel32  cat > $TMPC << EOF
4485 31ce0adbSThomas Huth#include <libfdt.h>
4486 96ce6545SPeter Crosthwaite#include <libfdt_env.h>
4487 fea35ca4SAlexey Kardashevskiyint main(void) { fdt_check_full(NULL, 0); return 0; }
4488 f652e6afSaurel32EOF
4489 52166aa0SJuan Quintela  if compile_prog "" "$fdt_libs" ; then
4490 a540f158SPeter Crosthwaite    # system DTC is good - use it
4491 e3971d61SPhilippe Mathieu-Daudé    fdt=system
4492 aef45d51SDaniel P. Berrange  else
4493 aef45d51SDaniel P. Berrange      # have GIT checkout, so activate dtc submodule
4494 aef45d51SDaniel P. Berrange      if test -e "${source_path}/.git" ; then
4495 aef45d51SDaniel P. Berrange          git_submodules="${git_submodules} dtc"
4496 aef45d51SDaniel P. Berrange      fi
4497 aef45d51SDaniel P. Berrange      if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4498 e3971d61SPhilippe Mathieu-Daudé          fdt=git
4499 a540f158SPeter Crosthwaite          mkdir -p dtc
4500 cab00a5aSMichael S. Tsirkin          if [ "$pwd_is_source_path" != "y" ] ; then
4501 a540f158SPeter Crosthwaite              symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4502 2df87df7SJuan Quintela          fi
4503 25211446SPaolo Bonzini          fdt_cflags="-I${source_path}/dtc/libfdt"
4504 25211446SPaolo Bonzini          fdt_ldflags="-L$PWD/dtc/libfdt"
4505 8a99e9a3SPhilippe Mathieu-Daudé          fdt_libs="$fdt_libs"
4506 a540f158SPeter Crosthwaite      elif test "$fdt" = "yes" ; then
4507 aef45d51SDaniel P. Berrange          # Not a git build & no libfdt found, prompt for system install
4508 aef45d51SDaniel P. Berrange          error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4509 aef45d51SDaniel P. Berrange                     "Please install the DTC (libfdt) devel package"
4510 a540f158SPeter Crosthwaite      else
4511 a540f158SPeter Crosthwaite          # don't have and don't want
4512 de3a354aSMichael Walle          fdt_libs=
4513 2df87df7SJuan Quintela          fdt=no
4514 f652e6afSaurel32      fi
4515 f652e6afSaurel32  fi
4516 aef45d51SDaniel P. Berrangefi
4517 f652e6afSaurel32
4518 a540f158SPeter Crosthwaitelibs_softmmu="$libs_softmmu $fdt_libs"
4519 a540f158SPeter Crosthwaite
4520 20ff075bSMichael Walle##########################################
4521 fb719563SOGAWA Hirofumi# opengl probe (for sdl2, gtk, milkymist-tmu2)
4522 b1546f32SGerd Hoffmann
4523 d52c454aSMarc-André Lureaugbm="no"
4524 d52c454aSMarc-André Lureauif $pkg_config gbm; then
4525 d52c454aSMarc-André Lureau    gbm_cflags="$($pkg_config --cflags gbm)"
4526 d52c454aSMarc-André Lureau    gbm_libs="$($pkg_config --libs gbm)"
4527 d52c454aSMarc-André Lureau    gbm="yes"
4528 d52c454aSMarc-André Lureaufi
4529 d52c454aSMarc-André Lureau
4530 da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then
4531 4939a1dfSMichael Tokarev  opengl_pkgs="epoxy gbm"
4532 5f9b1e35SGerd Hoffmann  if $pkg_config $opengl_pkgs; then
4533 5f9b1e35SGerd Hoffmann    opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4534 5f9b1e35SGerd Hoffmann    opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4535 da076ffeSGerd Hoffmann    opengl=yes
4536 925a0400SGerd Hoffmann    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4537 925a0400SGerd Hoffmann        gtk_gl="yes"
4538 925a0400SGerd Hoffmann    fi
4539 cc720a5dSGerd Hoffmann    QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4540 20ff075bSMichael Walle  else
4541 da076ffeSGerd Hoffmann    if test "$opengl" = "yes" ; then
4542 dcf30025SGerd Hoffmann      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4543 20ff075bSMichael Walle    fi
4544 f676c67eSJeremy White    opengl_cflags=""
4545 da076ffeSGerd Hoffmann    opengl_libs=""
4546 da076ffeSGerd Hoffmann    opengl=no
4547 20ff075bSMichael Walle  fi
4548 20ff075bSMichael Wallefi
4549 20ff075bSMichael Walle
4550 014cb152SGerd Hoffmannif test "$opengl" = "yes"; then
4551 014cb152SGerd Hoffmann  cat > $TMPC << EOF
4552 014cb152SGerd Hoffmann#include <epoxy/egl.h>
4553 014cb152SGerd Hoffmann#ifndef EGL_MESA_image_dma_buf_export
4554 014cb152SGerd Hoffmann# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4555 014cb152SGerd Hoffmann#endif
4556 014cb152SGerd Hoffmannint main(void) { return 0; }
4557 014cb152SGerd HoffmannEOF
4558 014cb152SGerd Hoffmann  if compile_prog "" "" ; then
4559 014cb152SGerd Hoffmann    opengl_dmabuf=yes
4560 014cb152SGerd Hoffmann  fi
4561 014cb152SGerd Hoffmannfi
4562 c9a12e75SChrysostomos Nanakos
4563 e633a5c6SEric Blakeif test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4564 99e1a93bSPhilippe Mathieu-Daudé  for target in $target_list; do
4565 99e1a93bSPhilippe Mathieu-Daudé    case $target in
4566 99e1a93bSPhilippe Mathieu-Daudé      lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4567 99e1a93bSPhilippe Mathieu-Daudé        need_x11=yes
4568 99e1a93bSPhilippe Mathieu-Daudé      ;;
4569 99e1a93bSPhilippe Mathieu-Daudé    esac
4570 99e1a93bSPhilippe Mathieu-Daudé  done
4571 99e1a93bSPhilippe Mathieu-Daudéfi
4572 99e1a93bSPhilippe Mathieu-Daudé
4573 ed279a06SKlim Kireev##########################################
4574 ed279a06SKlim Kireev# libxml2 probe
4575 ed279a06SKlim Kireevif test "$libxml2" != "no" ; then
4576 ed279a06SKlim Kireev    if $pkg_config --exists libxml-2.0; then
4577 ed279a06SKlim Kireev        libxml2="yes"
4578 ed279a06SKlim Kireev        libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4579 ed279a06SKlim Kireev        libxml2_libs=$($pkg_config --libs libxml-2.0)
4580 ed279a06SKlim Kireev    else
4581 ed279a06SKlim Kireev        if test "$libxml2" = "yes"; then
4582 ed279a06SKlim Kireev            feature_not_found "libxml2" "Install libxml2 devel"
4583 ed279a06SKlim Kireev        fi
4584 ed279a06SKlim Kireev        libxml2="no"
4585 ed279a06SKlim Kireev    fi
4586 ed279a06SKlim Kireevfi
4587 c9a12e75SChrysostomos Nanakos
4588 eb100396SBharata B Rao##########################################
4589 eb100396SBharata B Rao# glusterfs probe
4590 eb100396SBharata B Raoif test "$glusterfs" != "no" ; then
4591 65d5d3f9SStefan Weil  if $pkg_config --atleast-version=3 glusterfs-api; then
4592 e01bee08SBharata B Rao    glusterfs="yes"
4593 89138857SStefan Weil    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4594 89138857SStefan Weil    glusterfs_libs=$($pkg_config --libs glusterfs-api)
4595 d85fa9ebSJeff Cody    if $pkg_config --atleast-version=4 glusterfs-api; then
4596 d85fa9ebSJeff Cody      glusterfs_xlator_opt="yes"
4597 d85fa9ebSJeff Cody    fi
4598 65d5d3f9SStefan Weil    if $pkg_config --atleast-version=5 glusterfs-api; then
4599 0c14fb47SBharata B Rao      glusterfs_discard="yes"
4600 0c14fb47SBharata B Rao    fi
4601 7c815372SBharata B Rao    if $pkg_config --atleast-version=6 glusterfs-api; then
4602 df3a429aSNiels de Vos      glusterfs_fallocate="yes"
4603 7c815372SBharata B Rao      glusterfs_zerofill="yes"
4604 7c815372SBharata B Rao    fi
4605 e014dbe7SPrasanna Kumar Kalever    cat > $TMPC << EOF
4606 e014dbe7SPrasanna Kumar Kalever#include <glusterfs/api/glfs.h>
4607 e014dbe7SPrasanna Kumar Kalever
4608 e014dbe7SPrasanna Kumar Kaleverint
4609 e014dbe7SPrasanna Kumar Kalevermain(void)
4610 e014dbe7SPrasanna Kumar Kalever{
4611 e014dbe7SPrasanna Kumar Kalever	/* new glfs_ftruncate() passes two additional args */
4612 e014dbe7SPrasanna Kumar Kalever	return glfs_ftruncate(NULL, 0, NULL, NULL);
4613 e014dbe7SPrasanna Kumar Kalever}
4614 e014dbe7SPrasanna Kumar KaleverEOF
4615 e014dbe7SPrasanna Kumar Kalever    if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4616 e014dbe7SPrasanna Kumar Kalever      glusterfs_ftruncate_has_stat="yes"
4617 e014dbe7SPrasanna Kumar Kalever    fi
4618 0e3b891fSNiels de Vos    cat > $TMPC << EOF
4619 0e3b891fSNiels de Vos#include <glusterfs/api/glfs.h>
4620 0e3b891fSNiels de Vos
4621 0e3b891fSNiels de Vos/* new glfs_io_cbk() passes two additional glfs_stat structs */
4622 0e3b891fSNiels de Vosstatic void
4623 0e3b891fSNiels de Vosglusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4624 0e3b891fSNiels de Vos{}
4625 0e3b891fSNiels de Vos
4626 0e3b891fSNiels de Vosint
4627 0e3b891fSNiels de Vosmain(void)
4628 0e3b891fSNiels de Vos{
4629 0e3b891fSNiels de Vos	glfs_io_cbk iocb = &glusterfs_iocb;
4630 0e3b891fSNiels de Vos	iocb(NULL, 0 , NULL, NULL, NULL);
4631 0e3b891fSNiels de Vos	return 0;
4632 0e3b891fSNiels de Vos}
4633 0e3b891fSNiels de VosEOF
4634 0e3b891fSNiels de Vos    if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4635 0e3b891fSNiels de Vos      glusterfs_iocb_has_stat="yes"
4636 0e3b891fSNiels de Vos    fi
4637 eb100396SBharata B Rao  else
4638 eb100396SBharata B Rao    if test "$glusterfs" = "yes" ; then
4639 8efc9363SHu Tao      feature_not_found "GlusterFS backend support" \
4640 8efc9363SHu Tao          "Install glusterfs-api devel >= 3"
4641 eb100396SBharata B Rao    fi
4642 e01bee08SBharata B Rao    glusterfs="no"
4643 eb100396SBharata B Rao  fi
4644 eb100396SBharata B Raofi
4645 eb100396SBharata B Rao
4646 39386ac7Saurel32# Check for inotify functions when we are building linux-user
4647 3b3f24adSaurel32# emulator.  This is done because older glibc versions don't
4648 3b3f24adSaurel32# have syscall stubs for these implemented.  In that case we
4649 3b3f24adSaurel32# don't provide them even if kernel supports them.
4650 3b3f24adSaurel32#
4651 3b3f24adSaurel32inotify=no
4652 3b3f24adSaurel32cat > $TMPC << EOF
4653 3b3f24adSaurel32#include <sys/inotify.h>
4654 3b3f24adSaurel32
4655 3b3f24adSaurel32int
4656 3b3f24adSaurel32main(void)
4657 3b3f24adSaurel32{
4658 3b3f24adSaurel32	/* try to start inotify */
4659 8690e420Saurel32	return inotify_init();
4660 3b3f24adSaurel32}
4661 3b3f24adSaurel32EOF
4662 52166aa0SJuan Quintelaif compile_prog "" "" ; then
4663 3b3f24adSaurel32  inotify=yes
4664 3b3f24adSaurel32fi
4665 3b3f24adSaurel32
4666 c05c7a73SRiku Voipioinotify1=no
4667 c05c7a73SRiku Voipiocat > $TMPC << EOF
4668 c05c7a73SRiku Voipio#include <sys/inotify.h>
4669 c05c7a73SRiku Voipio
4670 c05c7a73SRiku Voipioint
4671 c05c7a73SRiku Voipiomain(void)
4672 c05c7a73SRiku Voipio{
4673 c05c7a73SRiku Voipio    /* try to start inotify */
4674 c05c7a73SRiku Voipio    return inotify_init1(0);
4675 c05c7a73SRiku Voipio}
4676 c05c7a73SRiku VoipioEOF
4677 c05c7a73SRiku Voipioif compile_prog "" "" ; then
4678 c05c7a73SRiku Voipio  inotify1=yes
4679 c05c7a73SRiku Voipiofi
4680 c05c7a73SRiku Voipio
4681 099d6b0fSRiku Voipio# check if pipe2 is there
4682 099d6b0fSRiku Voipiopipe2=no
4683 099d6b0fSRiku Voipiocat > $TMPC << EOF
4684 099d6b0fSRiku Voipio#include <unistd.h>
4685 099d6b0fSRiku Voipio#include <fcntl.h>
4686 099d6b0fSRiku Voipio
4687 099d6b0fSRiku Voipioint main(void)
4688 099d6b0fSRiku Voipio{
4689 099d6b0fSRiku Voipio    int pipefd[2];
4690 9bca8162SBruce Rogers    return pipe2(pipefd, O_CLOEXEC);
4691 099d6b0fSRiku Voipio}
4692 099d6b0fSRiku VoipioEOF
4693 52166aa0SJuan Quintelaif compile_prog "" "" ; then
4694 099d6b0fSRiku Voipio  pipe2=yes
4695 099d6b0fSRiku Voipiofi
4696 099d6b0fSRiku Voipio
4697 40ff6d7eSKevin Wolf# check if accept4 is there
4698 40ff6d7eSKevin Wolfaccept4=no
4699 40ff6d7eSKevin Wolfcat > $TMPC << EOF
4700 40ff6d7eSKevin Wolf#include <sys/socket.h>
4701 40ff6d7eSKevin Wolf#include <stddef.h>
4702 40ff6d7eSKevin Wolf
4703 40ff6d7eSKevin Wolfint main(void)
4704 40ff6d7eSKevin Wolf{
4705 40ff6d7eSKevin Wolf    accept4(0, NULL, NULL, SOCK_CLOEXEC);
4706 40ff6d7eSKevin Wolf    return 0;
4707 40ff6d7eSKevin Wolf}
4708 40ff6d7eSKevin WolfEOF
4709 40ff6d7eSKevin Wolfif compile_prog "" "" ; then
4710 40ff6d7eSKevin Wolf  accept4=yes
4711 40ff6d7eSKevin Wolffi
4712 40ff6d7eSKevin Wolf
4713 3ce34dfbSvibisreenivasan# check if tee/splice is there. vmsplice was added same time.
4714 3ce34dfbSvibisreenivasansplice=no
4715 3ce34dfbSvibisreenivasancat > $TMPC << EOF
4716 3ce34dfbSvibisreenivasan#include <unistd.h>
4717 3ce34dfbSvibisreenivasan#include <fcntl.h>
4718 3ce34dfbSvibisreenivasan#include <limits.h>
4719 3ce34dfbSvibisreenivasan
4720 3ce34dfbSvibisreenivasanint main(void)
4721 3ce34dfbSvibisreenivasan{
4722 66ea0f22SStefan Weil    int len, fd = 0;
4723 3ce34dfbSvibisreenivasan    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4724 3ce34dfbSvibisreenivasan    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4725 3ce34dfbSvibisreenivasan    return 0;
4726 3ce34dfbSvibisreenivasan}
4727 3ce34dfbSvibisreenivasanEOF
4728 52166aa0SJuan Quintelaif compile_prog "" "" ; then
4729 3ce34dfbSvibisreenivasan  splice=yes
4730 3ce34dfbSvibisreenivasanfi
4731 3ce34dfbSvibisreenivasan
4732 dcc38d1cSMarcelo Tosatti##########################################
4733 a99d57bbSWanlong Gao# libnuma probe
4734 a99d57bbSWanlong Gao
4735 a99d57bbSWanlong Gaoif test "$numa" != "no" ; then
4736 a99d57bbSWanlong Gao  cat > $TMPC << EOF
4737 a99d57bbSWanlong Gao#include <numa.h>
4738 a99d57bbSWanlong Gaoint main(void) { return numa_available(); }
4739 a99d57bbSWanlong GaoEOF
4740 a99d57bbSWanlong Gao
4741 a99d57bbSWanlong Gao  if compile_prog "" "-lnuma" ; then
4742 a99d57bbSWanlong Gao    numa=yes
4743 a99d57bbSWanlong Gao    libs_softmmu="-lnuma $libs_softmmu"
4744 a99d57bbSWanlong Gao  else
4745 a99d57bbSWanlong Gao    if test "$numa" = "yes" ; then
4746 a99d57bbSWanlong Gao      feature_not_found "numa" "install numactl devel"
4747 a99d57bbSWanlong Gao    fi
4748 a99d57bbSWanlong Gao    numa=no
4749 a99d57bbSWanlong Gao  fi
4750 a99d57bbSWanlong Gaofi
4751 a99d57bbSWanlong Gao
4752 7b01cb97SAlexandre Derumierif test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4753 7b01cb97SAlexandre Derumier    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4754 7b01cb97SAlexandre Derumier    exit 1
4755 7b01cb97SAlexandre Derumierfi
4756 7b01cb97SAlexandre Derumier
4757 5a22ab71SYang Zhong# Even if malloc_trim() is available, these non-libc memory allocators
4758 5a22ab71SYang Zhong# do not support it.
4759 5a22ab71SYang Zhongif test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4760 5a22ab71SYang Zhong    if test "$malloc_trim" = "yes" ; then
4761 5a22ab71SYang Zhong        echo "Disabling malloc_trim with non-libc memory allocator"
4762 5a22ab71SYang Zhong    fi
4763 5a22ab71SYang Zhong    malloc_trim="no"
4764 5a22ab71SYang Zhongfi
4765 5a22ab71SYang Zhong
4766 5a22ab71SYang Zhong#######################################
4767 5a22ab71SYang Zhong# malloc_trim
4768 5a22ab71SYang Zhong
4769 5a22ab71SYang Zhongif test "$malloc_trim" != "no" ; then
4770 5a22ab71SYang Zhong    cat > $TMPC << EOF
4771 5a22ab71SYang Zhong#include <malloc.h>
4772 5a22ab71SYang Zhongint main(void) { malloc_trim(0); return 0; }
4773 5a22ab71SYang ZhongEOF
4774 5a22ab71SYang Zhong    if compile_prog "" "" ; then
4775 5a22ab71SYang Zhong        malloc_trim="yes"
4776 5a22ab71SYang Zhong    else
4777 5a22ab71SYang Zhong        malloc_trim="no"
4778 5a22ab71SYang Zhong    fi
4779 5a22ab71SYang Zhongfi
4780 5a22ab71SYang Zhong
4781 a99d57bbSWanlong Gao##########################################
4782 2847b469SFam Zheng# tcmalloc probe
4783 2847b469SFam Zheng
4784 2847b469SFam Zhengif test "$tcmalloc" = "yes" ; then
4785 2847b469SFam Zheng  cat > $TMPC << EOF
4786 2847b469SFam Zheng#include <stdlib.h>
4787 f2dfe54cSLeonid Blochint main(void) {
4788 f2dfe54cSLeonid Bloch    void *tmp = malloc(1);
4789 f2dfe54cSLeonid Bloch    if (tmp != NULL) {
4790 f2dfe54cSLeonid Bloch        return 0;
4791 f2dfe54cSLeonid Bloch    }
4792 f2dfe54cSLeonid Bloch    return 1;
4793 f2dfe54cSLeonid Bloch}
4794 2847b469SFam ZhengEOF
4795 2847b469SFam Zheng
4796 2847b469SFam Zheng  if compile_prog "" "-ltcmalloc" ; then
4797 2847b469SFam Zheng    LIBS="-ltcmalloc $LIBS"
4798 2847b469SFam Zheng  else
4799 2847b469SFam Zheng    feature_not_found "tcmalloc" "install gperftools devel"
4800 2847b469SFam Zheng  fi
4801 2847b469SFam Zhengfi
4802 2847b469SFam Zheng
4803 2847b469SFam Zheng##########################################
4804 7b01cb97SAlexandre Derumier# jemalloc probe
4805 7b01cb97SAlexandre Derumier
4806 7b01cb97SAlexandre Derumierif test "$jemalloc" = "yes" ; then
4807 7b01cb97SAlexandre Derumier  cat > $TMPC << EOF
4808 7b01cb97SAlexandre Derumier#include <stdlib.h>
4809 f2dfe54cSLeonid Blochint main(void) {
4810 f2dfe54cSLeonid Bloch    void *tmp = malloc(1);
4811 f2dfe54cSLeonid Bloch    if (tmp != NULL) {
4812 f2dfe54cSLeonid Bloch        return 0;
4813 f2dfe54cSLeonid Bloch    }
4814 f2dfe54cSLeonid Bloch    return 1;
4815 f2dfe54cSLeonid Bloch}
4816 7b01cb97SAlexandre DerumierEOF
4817 7b01cb97SAlexandre Derumier
4818 7b01cb97SAlexandre Derumier  if compile_prog "" "-ljemalloc" ; then
4819 7b01cb97SAlexandre Derumier    LIBS="-ljemalloc $LIBS"
4820 7b01cb97SAlexandre Derumier  else
4821 7b01cb97SAlexandre Derumier    feature_not_found "jemalloc" "install jemalloc devel"
4822 7b01cb97SAlexandre Derumier  fi
4823 7b01cb97SAlexandre Derumierfi
4824 7b01cb97SAlexandre Derumier
4825 7b01cb97SAlexandre Derumier##########################################
4826 dcc38d1cSMarcelo Tosatti# signalfd probe
4827 dcc38d1cSMarcelo Tosattisignalfd="no"
4828 dcc38d1cSMarcelo Tosatticat > $TMPC << EOF
4829 dcc38d1cSMarcelo Tosatti#include <unistd.h>
4830 dcc38d1cSMarcelo Tosatti#include <sys/syscall.h>
4831 dcc38d1cSMarcelo Tosatti#include <signal.h>
4832 dcc38d1cSMarcelo Tosattiint main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4833 dcc38d1cSMarcelo TosattiEOF
4834 dcc38d1cSMarcelo Tosatti
4835 dcc38d1cSMarcelo Tosattiif compile_prog "" "" ; then
4836 dcc38d1cSMarcelo Tosatti  signalfd=yes
4837 dcc38d1cSMarcelo Tosattifi
4838 dcc38d1cSMarcelo Tosatti
4839 d339d766SRichard W.M. Jones# check if optreset global is declared by <getopt.h>
4840 d339d766SRichard W.M. Jonesoptreset="no"
4841 d339d766SRichard W.M. Jonescat > $TMPC << EOF
4842 d339d766SRichard W.M. Jones#include <getopt.h>
4843 d339d766SRichard W.M. Jonesint main(void) { return optreset; }
4844 d339d766SRichard W.M. JonesEOF
4845 d339d766SRichard W.M. Jones
4846 d339d766SRichard W.M. Jonesif compile_prog "" "" ; then
4847 d339d766SRichard W.M. Jones  optreset=yes
4848 d339d766SRichard W.M. Jonesfi
4849 d339d766SRichard W.M. Jones
4850 c2882b96SRiku Voipio# check if eventfd is supported
4851 c2882b96SRiku Voipioeventfd=no
4852 c2882b96SRiku Voipiocat > $TMPC << EOF
4853 c2882b96SRiku Voipio#include <sys/eventfd.h>
4854 c2882b96SRiku Voipio
4855 c2882b96SRiku Voipioint main(void)
4856 c2882b96SRiku Voipio{
4857 55cc7f3eSStefan Weil    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4858 c2882b96SRiku Voipio}
4859 c2882b96SRiku VoipioEOF
4860 c2882b96SRiku Voipioif compile_prog "" "" ; then
4861 c2882b96SRiku Voipio  eventfd=yes
4862 c2882b96SRiku Voipiofi
4863 c2882b96SRiku Voipio
4864 751bcc39SMarc-André Lureau# check if memfd is supported
4865 751bcc39SMarc-André Lureaumemfd=no
4866 751bcc39SMarc-André Lureaucat > $TMPC << EOF
4867 75e5b70eSPaolo Bonzini#include <sys/mman.h>
4868 751bcc39SMarc-André Lureau
4869 751bcc39SMarc-André Lureauint main(void)
4870 751bcc39SMarc-André Lureau{
4871 751bcc39SMarc-André Lureau    return memfd_create("foo", MFD_ALLOW_SEALING);
4872 751bcc39SMarc-André Lureau}
4873 751bcc39SMarc-André LureauEOF
4874 751bcc39SMarc-André Lureauif compile_prog "" "" ; then
4875 751bcc39SMarc-André Lureau  memfd=yes
4876 751bcc39SMarc-André Lureaufi
4877 751bcc39SMarc-André Lureau
4878 955727d2SCortland Tölva# check for usbfs
4879 955727d2SCortland Tölvahave_usbfs=no
4880 955727d2SCortland Tölvaif test "$linux_user" = "yes"; then
4881 96566d09SThomas Petazzoni  cat > $TMPC << EOF
4882 96566d09SThomas Petazzoni#include <linux/usbdevice_fs.h>
4883 96566d09SThomas Petazzoni
4884 96566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES
4885 96566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined"
4886 96566d09SThomas Petazzoni#endif
4887 96566d09SThomas Petazzoni
4888 96566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM
4889 96566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined"
4890 96566d09SThomas Petazzoni#endif
4891 96566d09SThomas Petazzoni
4892 96566d09SThomas Petazzoniint main(void)
4893 96566d09SThomas Petazzoni{
4894 96566d09SThomas Petazzoni    return 0;
4895 96566d09SThomas Petazzoni}
4896 96566d09SThomas PetazzoniEOF
4897 96566d09SThomas Petazzoni  if compile_prog "" ""; then
4898 955727d2SCortland Tölva    have_usbfs=yes
4899 955727d2SCortland Tölva  fi
4900 955727d2SCortland Tölvafi
4901 751bcc39SMarc-André Lureau
4902 d0927938SUlrich Hecht# check for fallocate
4903 d0927938SUlrich Hechtfallocate=no
4904 d0927938SUlrich Hechtcat > $TMPC << EOF
4905 d0927938SUlrich Hecht#include <fcntl.h>
4906 d0927938SUlrich Hecht
4907 d0927938SUlrich Hechtint main(void)
4908 d0927938SUlrich Hecht{
4909 d0927938SUlrich Hecht    fallocate(0, 0, 0, 0);
4910 d0927938SUlrich Hecht    return 0;
4911 d0927938SUlrich Hecht}
4912 d0927938SUlrich HechtEOF
4913 8fb03151SPeter Maydellif compile_prog "" "" ; then
4914 d0927938SUlrich Hecht  fallocate=yes
4915 d0927938SUlrich Hechtfi
4916 d0927938SUlrich Hecht
4917 3d4fa43eSKusanagi Kouichi# check for fallocate hole punching
4918 3d4fa43eSKusanagi Kouichifallocate_punch_hole=no
4919 3d4fa43eSKusanagi Kouichicat > $TMPC << EOF
4920 3d4fa43eSKusanagi Kouichi#include <fcntl.h>
4921 3d4fa43eSKusanagi Kouichi#include <linux/falloc.h>
4922 3d4fa43eSKusanagi Kouichi
4923 3d4fa43eSKusanagi Kouichiint main(void)
4924 3d4fa43eSKusanagi Kouichi{
4925 3d4fa43eSKusanagi Kouichi    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4926 3d4fa43eSKusanagi Kouichi    return 0;
4927 3d4fa43eSKusanagi Kouichi}
4928 3d4fa43eSKusanagi KouichiEOF
4929 3d4fa43eSKusanagi Kouichiif compile_prog "" "" ; then
4930 3d4fa43eSKusanagi Kouichi  fallocate_punch_hole=yes
4931 3d4fa43eSKusanagi Kouichifi
4932 3d4fa43eSKusanagi Kouichi
4933 b953f075SDenis V. Lunev# check that fallocate supports range zeroing inside the file
4934 b953f075SDenis V. Lunevfallocate_zero_range=no
4935 b953f075SDenis V. Lunevcat > $TMPC << EOF
4936 b953f075SDenis V. Lunev#include <fcntl.h>
4937 b953f075SDenis V. Lunev#include <linux/falloc.h>
4938 b953f075SDenis V. Lunev
4939 b953f075SDenis V. Lunevint main(void)
4940 b953f075SDenis V. Lunev{
4941 b953f075SDenis V. Lunev    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4942 b953f075SDenis V. Lunev    return 0;
4943 b953f075SDenis V. Lunev}
4944 b953f075SDenis V. LunevEOF
4945 b953f075SDenis V. Lunevif compile_prog "" "" ; then
4946 b953f075SDenis V. Lunev  fallocate_zero_range=yes
4947 b953f075SDenis V. Lunevfi
4948 b953f075SDenis V. Lunev
4949 ed911435SKevin Wolf# check for posix_fallocate
4950 ed911435SKevin Wolfposix_fallocate=no
4951 ed911435SKevin Wolfcat > $TMPC << EOF
4952 ed911435SKevin Wolf#include <fcntl.h>
4953 ed911435SKevin Wolf
4954 ed911435SKevin Wolfint main(void)
4955 ed911435SKevin Wolf{
4956 ed911435SKevin Wolf    posix_fallocate(0, 0, 0);
4957 ed911435SKevin Wolf    return 0;
4958 ed911435SKevin Wolf}
4959 ed911435SKevin WolfEOF
4960 ed911435SKevin Wolfif compile_prog "" "" ; then
4961 ed911435SKevin Wolf    posix_fallocate=yes
4962 ed911435SKevin Wolffi
4963 ed911435SKevin Wolf
4964 c727f47dSPeter Maydell# check for sync_file_range
4965 c727f47dSPeter Maydellsync_file_range=no
4966 c727f47dSPeter Maydellcat > $TMPC << EOF
4967 c727f47dSPeter Maydell#include <fcntl.h>
4968 c727f47dSPeter Maydell
4969 c727f47dSPeter Maydellint main(void)
4970 c727f47dSPeter Maydell{
4971 c727f47dSPeter Maydell    sync_file_range(0, 0, 0, 0);
4972 c727f47dSPeter Maydell    return 0;
4973 c727f47dSPeter Maydell}
4974 c727f47dSPeter MaydellEOF
4975 8fb03151SPeter Maydellif compile_prog "" "" ; then
4976 c727f47dSPeter Maydell  sync_file_range=yes
4977 c727f47dSPeter Maydellfi
4978 c727f47dSPeter Maydell
4979 dace20dcSPeter Maydell# check for linux/fiemap.h and FS_IOC_FIEMAP
4980 dace20dcSPeter Maydellfiemap=no
4981 dace20dcSPeter Maydellcat > $TMPC << EOF
4982 dace20dcSPeter Maydell#include <sys/ioctl.h>
4983 dace20dcSPeter Maydell#include <linux/fs.h>
4984 dace20dcSPeter Maydell#include <linux/fiemap.h>
4985 dace20dcSPeter Maydell
4986 dace20dcSPeter Maydellint main(void)
4987 dace20dcSPeter Maydell{
4988 dace20dcSPeter Maydell    ioctl(0, FS_IOC_FIEMAP, 0);
4989 dace20dcSPeter Maydell    return 0;
4990 dace20dcSPeter Maydell}
4991 dace20dcSPeter MaydellEOF
4992 8fb03151SPeter Maydellif compile_prog "" "" ; then
4993 dace20dcSPeter Maydell  fiemap=yes
4994 dace20dcSPeter Maydellfi
4995 dace20dcSPeter Maydell
4996 d0927938SUlrich Hecht# check for dup3
4997 d0927938SUlrich Hechtdup3=no
4998 d0927938SUlrich Hechtcat > $TMPC << EOF
4999 d0927938SUlrich Hecht#include <unistd.h>
5000 d0927938SUlrich Hecht
5001 d0927938SUlrich Hechtint main(void)
5002 d0927938SUlrich Hecht{
5003 d0927938SUlrich Hecht    dup3(0, 0, 0);
5004 d0927938SUlrich Hecht    return 0;
5005 d0927938SUlrich Hecht}
5006 d0927938SUlrich HechtEOF
5007 78f5d726SJan Kiszkaif compile_prog "" "" ; then
5008 d0927938SUlrich Hecht  dup3=yes
5009 d0927938SUlrich Hechtfi
5010 d0927938SUlrich Hecht
5011 4e0c6529SAlex Bligh# check for ppoll support
5012 4e0c6529SAlex Blighppoll=no
5013 4e0c6529SAlex Blighcat > $TMPC << EOF
5014 4e0c6529SAlex Bligh#include <poll.h>
5015 4e0c6529SAlex Bligh
5016 4e0c6529SAlex Blighint main(void)
5017 4e0c6529SAlex Bligh{
5018 4e0c6529SAlex Bligh    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
5019 4e0c6529SAlex Bligh    ppoll(&pfd, 1, 0, 0);
5020 4e0c6529SAlex Bligh    return 0;
5021 4e0c6529SAlex Bligh}
5022 4e0c6529SAlex BlighEOF
5023 4e0c6529SAlex Blighif compile_prog "" "" ; then
5024 4e0c6529SAlex Bligh  ppoll=yes
5025 4e0c6529SAlex Blighfi
5026 4e0c6529SAlex Bligh
5027 cd758dd0SAlex Bligh# check for prctl(PR_SET_TIMERSLACK , ... ) support
5028 cd758dd0SAlex Blighprctl_pr_set_timerslack=no
5029 cd758dd0SAlex Blighcat > $TMPC << EOF
5030 cd758dd0SAlex Bligh#include <sys/prctl.h>
5031 cd758dd0SAlex Bligh
5032 cd758dd0SAlex Blighint main(void)
5033 cd758dd0SAlex Bligh{
5034 cd758dd0SAlex Bligh    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
5035 cd758dd0SAlex Bligh    return 0;
5036 cd758dd0SAlex Bligh}
5037 cd758dd0SAlex BlighEOF
5038 cd758dd0SAlex Blighif compile_prog "" "" ; then
5039 cd758dd0SAlex Bligh  prctl_pr_set_timerslack=yes
5040 cd758dd0SAlex Blighfi
5041 cd758dd0SAlex Bligh
5042 3b6edd16SPeter Maydell# check for epoll support
5043 3b6edd16SPeter Maydellepoll=no
5044 3b6edd16SPeter Maydellcat > $TMPC << EOF
5045 3b6edd16SPeter Maydell#include <sys/epoll.h>
5046 3b6edd16SPeter Maydell
5047 3b6edd16SPeter Maydellint main(void)
5048 3b6edd16SPeter Maydell{
5049 3b6edd16SPeter Maydell    epoll_create(0);
5050 3b6edd16SPeter Maydell    return 0;
5051 3b6edd16SPeter Maydell}
5052 3b6edd16SPeter MaydellEOF
5053 8fb03151SPeter Maydellif compile_prog "" "" ; then
5054 3b6edd16SPeter Maydell  epoll=yes
5055 3b6edd16SPeter Maydellfi
5056 3b6edd16SPeter Maydell
5057 227f0214SPeter Maydell# epoll_create1 is a later addition
5058 227f0214SPeter Maydell# so we must check separately for its presence
5059 3b6edd16SPeter Maydellepoll_create1=no
5060 3b6edd16SPeter Maydellcat > $TMPC << EOF
5061 3b6edd16SPeter Maydell#include <sys/epoll.h>
5062 3b6edd16SPeter Maydell
5063 3b6edd16SPeter Maydellint main(void)
5064 3b6edd16SPeter Maydell{
5065 19e83f6bSPeter Maydell    /* Note that we use epoll_create1 as a value, not as
5066 19e83f6bSPeter Maydell     * a function being called. This is necessary so that on
5067 19e83f6bSPeter Maydell     * old SPARC glibc versions where the function was present in
5068 19e83f6bSPeter Maydell     * the library but not declared in the header file we will
5069 19e83f6bSPeter Maydell     * fail the configure check. (Otherwise we will get a compiler
5070 19e83f6bSPeter Maydell     * warning but not an error, and will proceed to fail the
5071 19e83f6bSPeter Maydell     * qemu compile where we compile with -Werror.)
5072 19e83f6bSPeter Maydell     */
5073 c075a723SBlue Swirl    return (int)(uintptr_t)&epoll_create1;
5074 3b6edd16SPeter Maydell}
5075 3b6edd16SPeter MaydellEOF
5076 8fb03151SPeter Maydellif compile_prog "" "" ; then
5077 3b6edd16SPeter Maydell  epoll_create1=yes
5078 3b6edd16SPeter Maydellfi
5079 3b6edd16SPeter Maydell
5080 a8fd1abaSPeter Maydell# check for sendfile support
5081 a8fd1abaSPeter Maydellsendfile=no
5082 a8fd1abaSPeter Maydellcat > $TMPC << EOF
5083 a8fd1abaSPeter Maydell#include <sys/sendfile.h>
5084 a8fd1abaSPeter Maydell
5085 a8fd1abaSPeter Maydellint main(void)
5086 a8fd1abaSPeter Maydell{
5087 a8fd1abaSPeter Maydell    return sendfile(0, 0, 0, 0);
5088 a8fd1abaSPeter Maydell}
5089 a8fd1abaSPeter MaydellEOF
5090 a8fd1abaSPeter Maydellif compile_prog "" "" ; then
5091 a8fd1abaSPeter Maydell  sendfile=yes
5092 a8fd1abaSPeter Maydellfi
5093 a8fd1abaSPeter Maydell
5094 51834341SRiku Voipio# check for timerfd support (glibc 2.8 and newer)
5095 51834341SRiku Voipiotimerfd=no
5096 51834341SRiku Voipiocat > $TMPC << EOF
5097 51834341SRiku Voipio#include <sys/timerfd.h>
5098 51834341SRiku Voipio
5099 51834341SRiku Voipioint main(void)
5100 51834341SRiku Voipio{
5101 51834341SRiku Voipio    return(timerfd_create(CLOCK_REALTIME, 0));
5102 51834341SRiku Voipio}
5103 51834341SRiku VoipioEOF
5104 51834341SRiku Voipioif compile_prog "" "" ; then
5105 51834341SRiku Voipio  timerfd=yes
5106 51834341SRiku Voipiofi
5107 51834341SRiku Voipio
5108 9af5c906SRiku Voipio# check for setns and unshare support
5109 9af5c906SRiku Voipiosetns=no
5110 9af5c906SRiku Voipiocat > $TMPC << EOF
5111 9af5c906SRiku Voipio#include <sched.h>
5112 9af5c906SRiku Voipio
5113 9af5c906SRiku Voipioint main(void)
5114 9af5c906SRiku Voipio{
5115 9af5c906SRiku Voipio    int ret;
5116 9af5c906SRiku Voipio    ret = setns(0, 0);
5117 9af5c906SRiku Voipio    ret = unshare(0);
5118 9af5c906SRiku Voipio    return ret;
5119 9af5c906SRiku Voipio}
5120 9af5c906SRiku VoipioEOF
5121 9af5c906SRiku Voipioif compile_prog "" "" ; then
5122 9af5c906SRiku Voipio  setns=yes
5123 9af5c906SRiku Voipiofi
5124 9af5c906SRiku Voipio
5125 38860a03SAleksandar Markovic# clock_adjtime probe
5126 38860a03SAleksandar Markovicclock_adjtime=no
5127 38860a03SAleksandar Markoviccat > $TMPC <<EOF
5128 38860a03SAleksandar Markovic#include <time.h>
5129 38860a03SAleksandar Markovic
5130 38860a03SAleksandar Markovicint main(void)
5131 38860a03SAleksandar Markovic{
5132 38860a03SAleksandar Markovic    return clock_adjtime(0, 0);
5133 38860a03SAleksandar Markovic}
5134 38860a03SAleksandar MarkovicEOF
5135 38860a03SAleksandar Markovicclock_adjtime=no
5136 38860a03SAleksandar Markovicif compile_prog "" "" ; then
5137 38860a03SAleksandar Markovic  clock_adjtime=yes
5138 38860a03SAleksandar Markovicfi
5139 38860a03SAleksandar Markovic
5140 5a03cd00SAleksandar Markovic# syncfs probe
5141 5a03cd00SAleksandar Markovicsyncfs=no
5142 5a03cd00SAleksandar Markoviccat > $TMPC <<EOF
5143 5a03cd00SAleksandar Markovic#include <unistd.h>
5144 5a03cd00SAleksandar Markovic
5145 5a03cd00SAleksandar Markovicint main(void)
5146 5a03cd00SAleksandar Markovic{
5147 5a03cd00SAleksandar Markovic    return syncfs(0);
5148 5a03cd00SAleksandar Markovic}
5149 5a03cd00SAleksandar MarkovicEOF
5150 5a03cd00SAleksandar Markovicsyncfs=no
5151 5a03cd00SAleksandar Markovicif compile_prog "" "" ; then
5152 5a03cd00SAleksandar Markovic  syncfs=yes
5153 5a03cd00SAleksandar Markovicfi
5154 5a03cd00SAleksandar Markovic
5155 db37dd89SAleksandar Markovic# check for kcov support (kernel must be 4.4+, compiled with certain options)
5156 db37dd89SAleksandar Markovickcov=no
5157 db37dd89SAleksandar Markovicif check_include sys/kcov.h ; then
5158 db37dd89SAleksandar Markovic    kcov=yes
5159 db37dd89SAleksandar Markovicfi
5160 db37dd89SAleksandar Markovic
5161 516e8b7dSPeter Maydell# If we're making warnings fatal, apply this to Sphinx runs as well
5162 516e8b7dSPeter Maydellsphinx_werror=""
5163 516e8b7dSPeter Maydellif test "$werror" = "yes"; then
5164 516e8b7dSPeter Maydell    sphinx_werror="-W"
5165 516e8b7dSPeter Maydellfi
5166 516e8b7dSPeter Maydell
5167 5f71eac0SPeter Maydell# Check we have a new enough version of sphinx-build
5168 5f71eac0SPeter Maydellhas_sphinx_build() {
5169 5f71eac0SPeter Maydell    # This is a bit awkward but works: create a trivial document and
5170 5f71eac0SPeter Maydell    # try to run it with our configuration file (which enforces a
5171 5f71eac0SPeter Maydell    # version requirement). This will fail if either
5172 5f71eac0SPeter Maydell    # sphinx-build doesn't exist at all or if it is too old.
5173 5f71eac0SPeter Maydell    mkdir -p "$TMPDIR1/sphinx"
5174 5f71eac0SPeter Maydell    touch "$TMPDIR1/sphinx/index.rst"
5175 988ae6c3SAlex Bennée    "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
5176 988ae6c3SAlex Bennée                    -b html "$TMPDIR1/sphinx" \
5177 988ae6c3SAlex Bennée                    "$TMPDIR1/sphinx/out"  >> config.log 2>&1
5178 5f71eac0SPeter Maydell}
5179 5f71eac0SPeter Maydell
5180 cc8ae6deSpbrook# Check if tools are available to build documentation.
5181 a25dba17SJuan Quintelaif test "$docs" != "no" ; then
5182 758b617aSPeter Maydell  if has_sphinx_build; then
5183 758b617aSPeter Maydell    sphinx_ok=yes
5184 758b617aSPeter Maydell  else
5185 758b617aSPeter Maydell    sphinx_ok=no
5186 758b617aSPeter Maydell  fi
5187 758b617aSPeter Maydell  if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
5188 a25dba17SJuan Quintela    docs=yes
5189 83a3ab8bSJuan Quintela  else
5190 a25dba17SJuan Quintela    if test "$docs" = "yes" ; then
5191 758b617aSPeter Maydell      if has $sphinx_build && test "$sphinx_ok" != "yes"; then
5192 758b617aSPeter Maydell        echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
5193 758b617aSPeter Maydell      fi
5194 758b617aSPeter Maydell      feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
5195 83a3ab8bSJuan Quintela    fi
5196 a25dba17SJuan Quintela    docs=no
5197 83a3ab8bSJuan Quintela  fi
5198 cc8ae6deSpbrookfi
5199 cc8ae6deSpbrook
5200 f514f41cSStefan Weil# Search for bswap_32 function
5201 6ae9a1f4SJuan Quintelabyteswap_h=no
5202 6ae9a1f4SJuan Quintelacat > $TMPC << EOF
5203 6ae9a1f4SJuan Quintela#include <byteswap.h>
5204 6ae9a1f4SJuan Quintelaint main(void) { return bswap_32(0); }
5205 6ae9a1f4SJuan QuintelaEOF
5206 52166aa0SJuan Quintelaif compile_prog "" "" ; then
5207 6ae9a1f4SJuan Quintela  byteswap_h=yes
5208 6ae9a1f4SJuan Quintelafi
5209 6ae9a1f4SJuan Quintela
5210 75f13596SStefan Weil# Search for bswap32 function
5211 6ae9a1f4SJuan Quintelabswap_h=no
5212 6ae9a1f4SJuan Quintelacat > $TMPC << EOF
5213 6ae9a1f4SJuan Quintela#include <sys/endian.h>
5214 6ae9a1f4SJuan Quintela#include <sys/types.h>
5215 6ae9a1f4SJuan Quintela#include <machine/bswap.h>
5216 6ae9a1f4SJuan Quintelaint main(void) { return bswap32(0); }
5217 6ae9a1f4SJuan QuintelaEOF
5218 52166aa0SJuan Quintelaif compile_prog "" "" ; then
5219 6ae9a1f4SJuan Quintela  bswap_h=yes
5220 6ae9a1f4SJuan Quintelafi
5221 6ae9a1f4SJuan Quintela
5222 da93a1fdSaliguori##########################################
5223 e49ab19fSPeter Lieven# Do we have libiscsi >= 1.9.0
5224 c589b249SRonnie Sahlbergif test "$libiscsi" != "no" ; then
5225 e49ab19fSPeter Lieven  if $pkg_config --atleast-version=1.9.0 libiscsi; then
5226 3c33ea96SPaolo Bonzini    libiscsi="yes"
5227 ca871ec8SStefan Weil    libiscsi_cflags=$($pkg_config --cflags libiscsi)
5228 ca871ec8SStefan Weil    libiscsi_libs=$($pkg_config --libs libiscsi)
5229 c589b249SRonnie Sahlberg  else
5230 c589b249SRonnie Sahlberg    if test "$libiscsi" = "yes" ; then
5231 e49ab19fSPeter Lieven      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
5232 c589b249SRonnie Sahlberg    fi
5233 c589b249SRonnie Sahlberg    libiscsi="no"
5234 c589b249SRonnie Sahlberg  fi
5235 c589b249SRonnie Sahlbergfi
5236 c589b249SRonnie Sahlberg
5237 c589b249SRonnie Sahlberg##########################################
5238 8bacde8dSNatanael Copa# Do we need libm
5239 8bacde8dSNatanael Copacat > $TMPC << EOF
5240 8bacde8dSNatanael Copa#include <math.h>
5241 f80ea986SAlexey Kardashevskiyint main(int argc, char **argv) { return isnan(sin((double)argc)); }
5242 8bacde8dSNatanael CopaEOF
5243 8bacde8dSNatanael Copaif compile_prog "" "" ; then
5244 8bacde8dSNatanael Copa  :
5245 8bacde8dSNatanael Copaelif compile_prog "" "-lm" ; then
5246 8bacde8dSNatanael Copa  LIBS="-lm $LIBS"
5247 8bacde8dSNatanael Copaelse
5248 76ad07a4SPeter Maydell  error_exit "libm check failed"
5249 8bacde8dSNatanael Copafi
5250 8bacde8dSNatanael Copa
5251 8bacde8dSNatanael Copa##########################################
5252 da93a1fdSaliguori# Do we need librt
5253 8bacde8dSNatanael Copa# uClibc provides 2 versions of clock_gettime(), one with realtime
5254 8bacde8dSNatanael Copa# support and one without. This means that the clock_gettime() don't
5255 8bacde8dSNatanael Copa# need -lrt. We still need it for timer_create() so we check for this
5256 8bacde8dSNatanael Copa# function in addition.
5257 da93a1fdSaliguoricat > $TMPC <<EOF
5258 da93a1fdSaliguori#include <signal.h>
5259 da93a1fdSaliguori#include <time.h>
5260 8bacde8dSNatanael Copaint main(void) {
5261 8bacde8dSNatanael Copa  timer_create(CLOCK_REALTIME, NULL, NULL);
5262 8bacde8dSNatanael Copa  return clock_gettime(CLOCK_REALTIME, NULL);
5263 8bacde8dSNatanael Copa}
5264 da93a1fdSaliguoriEOF
5265 da93a1fdSaliguori
5266 52166aa0SJuan Quintelaif compile_prog "" "" ; then
5267 07ffa4bdSJuan Quintela  :
5268 8bacde8dSNatanael Copa# we need pthread for static linking. use previous pthread test result
5269 18e588b1SRick Liuelif compile_prog "" "$pthread_lib -lrt" ; then
5270 18e588b1SRick Liu  LIBS="$LIBS -lrt"
5271 da93a1fdSaliguorifi
5272 da93a1fdSaliguori
5273 d99e97e6SThomas Huth# Check whether we need to link libutil for openpty()
5274 d99e97e6SThomas Huthcat > $TMPC << EOF
5275 d99e97e6SThomas Huthextern int openpty(int *am, int *as, char *name, void *termp, void *winp);
5276 d99e97e6SThomas Huthint main(void) { return openpty(0, 0, 0, 0, 0); }
5277 d99e97e6SThomas HuthEOF
5278 d99e97e6SThomas Huth
5279 9df8b20dSThomas Huthhave_openpty="no"
5280 9df8b20dSThomas Huthif compile_prog "" "" ; then
5281 9df8b20dSThomas Huth  have_openpty="yes"
5282 9df8b20dSThomas Huthelse
5283 d99e97e6SThomas Huth  if compile_prog "" "-lutil" ; then
5284 6362a53fSJuan Quintela    libs_softmmu="-lutil $libs_softmmu"
5285 d99e97e6SThomas Huth    libs_tools="-lutil $libs_tools"
5286 9df8b20dSThomas Huth    have_openpty="yes"
5287 d99e97e6SThomas Huth  fi
5288 6362a53fSJuan Quintelafi
5289 6362a53fSJuan Quintela
5290 de5071c5SBlue Swirl##########################################
5291 cd4ec0b4SGerd Hoffmann# spice probe
5292 cd4ec0b4SGerd Hoffmannif test "$spice" != "no" ; then
5293 cd4ec0b4SGerd Hoffmann  cat > $TMPC << EOF
5294 cd4ec0b4SGerd Hoffmann#include <spice.h>
5295 cd4ec0b4SGerd Hoffmannint main(void) { spice_server_new(); return 0; }
5296 cd4ec0b4SGerd HoffmannEOF
5297 710fc4f5SJiri Denemark  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
5298 710fc4f5SJiri Denemark  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
5299 1b63665cSMarc-André Lureau  if $pkg_config --atleast-version=0.12.5 spice-server && \
5300 65d5d3f9SStefan Weil     $pkg_config --atleast-version=0.12.3 spice-protocol && \
5301 cd4ec0b4SGerd Hoffmann     compile_prog "$spice_cflags" "$spice_libs" ; then
5302 cd4ec0b4SGerd Hoffmann    spice="yes"
5303 cd4ec0b4SGerd Hoffmann    libs_softmmu="$libs_softmmu $spice_libs"
5304 cd4ec0b4SGerd Hoffmann    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
5305 cd4ec0b4SGerd Hoffmann  else
5306 cd4ec0b4SGerd Hoffmann    if test "$spice" = "yes" ; then
5307 8efc9363SHu Tao      feature_not_found "spice" \
5308 1b63665cSMarc-André Lureau          "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
5309 cd4ec0b4SGerd Hoffmann    fi
5310 cd4ec0b4SGerd Hoffmann    spice="no"
5311 cd4ec0b4SGerd Hoffmann  fi
5312 cd4ec0b4SGerd Hoffmannfi
5313 cd4ec0b4SGerd Hoffmann
5314 7b02f544SMarc-André Lureau# check for smartcard support
5315 7b02f544SMarc-André Lureauif test "$smartcard" != "no"; then
5316 0f5c642dSMichal Privoznik    if $pkg_config --atleast-version=2.5.1 libcacard; then
5317 7b02f544SMarc-André Lureau        libcacard_cflags=$($pkg_config --cflags libcacard)
5318 7b02f544SMarc-André Lureau        libcacard_libs=$($pkg_config --libs libcacard)
5319 7b02f544SMarc-André Lureau        smartcard="yes"
5320 111a38b0SRobert Relyea    else
5321 7b02f544SMarc-André Lureau        if test "$smartcard" = "yes"; then
5322 7b02f544SMarc-André Lureau            feature_not_found "smartcard" "Install libcacard devel"
5323 111a38b0SRobert Relyea        fi
5324 7b02f544SMarc-André Lureau        smartcard="no"
5325 111a38b0SRobert Relyea    fi
5326 111a38b0SRobert Relyeafi
5327 111a38b0SRobert Relyea
5328 2b2325ffSGerd Hoffmann# check for libusb
5329 2b2325ffSGerd Hoffmannif test "$libusb" != "no" ; then
5330 65d5d3f9SStefan Weil    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
5331 2b2325ffSGerd Hoffmann        libusb="yes"
5332 ca871ec8SStefan Weil        libusb_cflags=$($pkg_config --cflags libusb-1.0)
5333 ca871ec8SStefan Weil        libusb_libs=$($pkg_config --libs libusb-1.0)
5334 2b2325ffSGerd Hoffmann    else
5335 2b2325ffSGerd Hoffmann        if test "$libusb" = "yes"; then
5336 8efc9363SHu Tao            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
5337 2b2325ffSGerd Hoffmann        fi
5338 2b2325ffSGerd Hoffmann        libusb="no"
5339 2b2325ffSGerd Hoffmann    fi
5340 2b2325ffSGerd Hoffmannfi
5341 2b2325ffSGerd Hoffmann
5342 69354a83SHans de Goede# check for usbredirparser for usb network redirection support
5343 69354a83SHans de Goedeif test "$usb_redir" != "no" ; then
5344 65d5d3f9SStefan Weil    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
5345 69354a83SHans de Goede        usb_redir="yes"
5346 ca871ec8SStefan Weil        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
5347 ca871ec8SStefan Weil        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
5348 69354a83SHans de Goede    else
5349 69354a83SHans de Goede        if test "$usb_redir" = "yes"; then
5350 21684af0SStewart Smith            feature_not_found "usb-redir" "Install usbredir devel"
5351 69354a83SHans de Goede        fi
5352 69354a83SHans de Goede        usb_redir="no"
5353 69354a83SHans de Goede    fi
5354 69354a83SHans de Goedefi
5355 69354a83SHans de Goede
5356 cd4ec0b4SGerd Hoffmann##########################################
5357 d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win
5358 d9840e25STomoki Sekiyama
5359 e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5360 e633a5c6SEric Blake        test "$vss_win32_sdk" != "no" ; then
5361 d9840e25STomoki Sekiyama  case "$vss_win32_sdk" in
5362 690604f6SMichael Roth    "")   vss_win32_include="-isystem $source_path" ;;
5363 d9840e25STomoki Sekiyama    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
5364 d9840e25STomoki Sekiyama          # handle path with spaces. So we symlink the headers into ".sdk/vss".
5365 690604f6SMichael Roth          vss_win32_include="-isystem $source_path/.sdk/vss"
5366 d9840e25STomoki Sekiyama	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
5367 d9840e25STomoki Sekiyama	  ;;
5368 690604f6SMichael Roth    *)    vss_win32_include="-isystem $vss_win32_sdk"
5369 d9840e25STomoki Sekiyama  esac
5370 d9840e25STomoki Sekiyama  cat > $TMPC << EOF
5371 d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__
5372 d9840e25STomoki Sekiyama#include <inc/win2003/vss.h>
5373 d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; }
5374 d9840e25STomoki SekiyamaEOF
5375 d9840e25STomoki Sekiyama  if compile_prog "$vss_win32_include" "" ; then
5376 d9840e25STomoki Sekiyama    guest_agent_with_vss="yes"
5377 d9840e25STomoki Sekiyama    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
5378 315d3184SFam Zheng    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
5379 f33ca81fSMichael Roth    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
5380 d9840e25STomoki Sekiyama  else
5381 d9840e25STomoki Sekiyama    if test "$vss_win32_sdk" != "" ; then
5382 d9840e25STomoki Sekiyama      echo "ERROR: Please download and install Microsoft VSS SDK:"
5383 d9840e25STomoki Sekiyama      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
5384 d9840e25STomoki Sekiyama      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
5385 d9840e25STomoki Sekiyama      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
5386 d9840e25STomoki Sekiyama      echo "ERROR: The headers are extracted in the directory \`inc'."
5387 d9840e25STomoki Sekiyama      feature_not_found "VSS support"
5388 d9840e25STomoki Sekiyama    fi
5389 d9840e25STomoki Sekiyama    guest_agent_with_vss="no"
5390 d9840e25STomoki Sekiyama  fi
5391 d9840e25STomoki Sekiyamafi
5392 d9840e25STomoki Sekiyama
5393 d9840e25STomoki Sekiyama##########################################
5394 d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified)
5395 d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent
5396 d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the
5397 d9840e25STomoki Sekiyama# pre-compiled .tlb file is included.
5398 d9840e25STomoki Sekiyama
5399 e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
5400 e633a5c6SEric Blake        test "$guest_agent_with_vss" = "yes" ; then
5401 d9840e25STomoki Sekiyama  if test -z "$win_sdk"; then
5402 d9840e25STomoki Sekiyama    programfiles="$PROGRAMFILES"
5403 d9840e25STomoki Sekiyama    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
5404 d9840e25STomoki Sekiyama    if test -n "$programfiles"; then
5405 d9840e25STomoki Sekiyama      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
5406 d9840e25STomoki Sekiyama    else
5407 d9840e25STomoki Sekiyama      feature_not_found "Windows SDK"
5408 d9840e25STomoki Sekiyama    fi
5409 d9840e25STomoki Sekiyama  elif test "$win_sdk" = "no"; then
5410 d9840e25STomoki Sekiyama    win_sdk=""
5411 d9840e25STomoki Sekiyama  fi
5412 d9840e25STomoki Sekiyamafi
5413 d9840e25STomoki Sekiyama
5414 d9840e25STomoki Sekiyama##########################################
5415 50cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h
5416 e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
5417 50cbebb9SMichael Roth  cat > $TMPC << EOF
5418 50cbebb9SMichael Roth#include <windows.h>
5419 50cbebb9SMichael Roth#include <ntddscsi.h>
5420 50cbebb9SMichael Rothint main(void) {
5421 50cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS)
5422 50cbebb9SMichael Roth#error Missing required ioctl definitions
5423 50cbebb9SMichael Roth#endif
5424 50cbebb9SMichael Roth  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
5425 50cbebb9SMichael Roth  return addr.Lun;
5426 50cbebb9SMichael Roth}
5427 50cbebb9SMichael RothEOF
5428 50cbebb9SMichael Roth  if compile_prog "" "" ; then
5429 50cbebb9SMichael Roth    guest_agent_ntddscsi=yes
5430 996b9cdcSMatt Hines    libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
5431 50cbebb9SMichael Roth  fi
5432 50cbebb9SMichael Rothfi
5433 50cbebb9SMichael Roth
5434 50cbebb9SMichael Roth##########################################
5435 9d9e1521SGerd Hoffmann# virgl renderer probe
5436 9d9e1521SGerd Hoffmann
5437 9d9e1521SGerd Hoffmannif test "$virglrenderer" != "no" ; then
5438 9d9e1521SGerd Hoffmann  cat > $TMPC << EOF
5439 9d9e1521SGerd Hoffmann#include <virglrenderer.h>
5440 9d9e1521SGerd Hoffmannint main(void) { virgl_renderer_poll(); return 0; }
5441 9d9e1521SGerd HoffmannEOF
5442 9d9e1521SGerd Hoffmann  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
5443 9d9e1521SGerd Hoffmann  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
5444 47479c55SMarc-André Lureau  virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
5445 9d9e1521SGerd Hoffmann  if $pkg_config virglrenderer >/dev/null 2>&1 && \
5446 9d9e1521SGerd Hoffmann     compile_prog "$virgl_cflags" "$virgl_libs" ; then
5447 9d9e1521SGerd Hoffmann    virglrenderer="yes"
5448 9d9e1521SGerd Hoffmann  else
5449 9d9e1521SGerd Hoffmann    if test "$virglrenderer" = "yes" ; then
5450 9d9e1521SGerd Hoffmann      feature_not_found "virglrenderer"
5451 9d9e1521SGerd Hoffmann    fi
5452 9d9e1521SGerd Hoffmann    virglrenderer="no"
5453 9d9e1521SGerd Hoffmann  fi
5454 9d9e1521SGerd Hoffmannfi
5455 9d9e1521SGerd Hoffmann
5456 9d9e1521SGerd Hoffmann##########################################
5457 8ca80760SRichard Henderson# capstone
5458 8ca80760SRichard Henderson
5459 e219c499SRichard Hendersoncase "$capstone" in
5460 e219c499SRichard Henderson  "" | yes)
5461 8ca80760SRichard Henderson    if $pkg_config capstone; then
5462 e219c499SRichard Henderson      capstone=system
5463 e633a5c6SEric Blake    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5464 e219c499SRichard Henderson      capstone=git
5465 e219c499SRichard Henderson    elif test -e "${source_path}/capstone/Makefile" ; then
5466 e219c499SRichard Henderson      capstone=internal
5467 e219c499SRichard Henderson    elif test -z "$capstone" ; then
5468 e219c499SRichard Henderson      capstone=no
5469 e219c499SRichard Henderson    else
5470 e219c499SRichard Henderson      feature_not_found "capstone" "Install capstone devel or git submodule"
5471 e219c499SRichard Henderson    fi
5472 e219c499SRichard Henderson    ;;
5473 e219c499SRichard Henderson
5474 e219c499SRichard Henderson  system)
5475 e219c499SRichard Henderson    if ! $pkg_config capstone; then
5476 e219c499SRichard Henderson      feature_not_found "capstone" "Install capstone devel"
5477 e219c499SRichard Henderson    fi
5478 e219c499SRichard Henderson    ;;
5479 e219c499SRichard Hendersonesac
5480 e219c499SRichard Henderson
5481 e219c499SRichard Hendersoncase "$capstone" in
5482 e219c499SRichard Henderson  git | internal)
5483 e219c499SRichard Henderson    if test "$capstone" = git; then
5484 e219c499SRichard Henderson      git_submodules="${git_submodules} capstone"
5485 e219c499SRichard Henderson    fi
5486 e219c499SRichard Henderson    mkdir -p capstone
5487 25211446SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS -I${source_path}/capstone/include"
5488 e219c499SRichard Henderson    if test "$mingw32" = "yes"; then
5489 e219c499SRichard Henderson      LIBCAPSTONE=capstone.lib
5490 e219c499SRichard Henderson    else
5491 e219c499SRichard Henderson      LIBCAPSTONE=libcapstone.a
5492 e219c499SRichard Henderson    fi
5493 25211446SPaolo Bonzini    libs_cpu="-L$PWD/capstone -lcapstone $libs_cpu"
5494 e219c499SRichard Henderson    ;;
5495 e219c499SRichard Henderson
5496 e219c499SRichard Henderson  system)
5497 8ca80760SRichard Henderson    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5498 02f9135bSDaniel P. Berrangé    libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5499 e219c499SRichard Henderson    ;;
5500 e219c499SRichard Henderson
5501 e219c499SRichard Henderson  no)
5502 e219c499SRichard Henderson    ;;
5503 e219c499SRichard Henderson  *)
5504 e219c499SRichard Henderson    error_exit "Unknown state for capstone: $capstone"
5505 e219c499SRichard Henderson    ;;
5506 e219c499SRichard Hendersonesac
5507 8ca80760SRichard Henderson
5508 8ca80760SRichard Henderson##########################################
5509 5f6b9e8fSBlue Swirl# check if we have fdatasync
5510 5f6b9e8fSBlue Swirl
5511 5f6b9e8fSBlue Swirlfdatasync=no
5512 5f6b9e8fSBlue Swirlcat > $TMPC << EOF
5513 5f6b9e8fSBlue Swirl#include <unistd.h>
5514 d1722a27SAlexandre Raymondint main(void) {
5515 d1722a27SAlexandre Raymond#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5516 d1722a27SAlexandre Raymondreturn fdatasync(0);
5517 d1722a27SAlexandre Raymond#else
5518 e172fe11SStefan Weil#error Not supported
5519 d1722a27SAlexandre Raymond#endif
5520 d1722a27SAlexandre Raymond}
5521 5f6b9e8fSBlue SwirlEOF
5522 5f6b9e8fSBlue Swirlif compile_prog "" "" ; then
5523 5f6b9e8fSBlue Swirl    fdatasync=yes
5524 5f6b9e8fSBlue Swirlfi
5525 5f6b9e8fSBlue Swirl
5526 94a420b1SStefan Hajnoczi##########################################
5527 e78815a5SAndreas Färber# check if we have madvise
5528 e78815a5SAndreas Färber
5529 e78815a5SAndreas Färbermadvise=no
5530 e78815a5SAndreas Färbercat > $TMPC << EOF
5531 e78815a5SAndreas Färber#include <sys/types.h>
5532 e78815a5SAndreas Färber#include <sys/mman.h>
5533 832ce9c2SScott Wood#include <stddef.h>
5534 e78815a5SAndreas Färberint main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5535 e78815a5SAndreas FärberEOF
5536 e78815a5SAndreas Färberif compile_prog "" "" ; then
5537 e78815a5SAndreas Färber    madvise=yes
5538 e78815a5SAndreas Färberfi
5539 e78815a5SAndreas Färber
5540 e78815a5SAndreas Färber##########################################
5541 e78815a5SAndreas Färber# check if we have posix_madvise
5542 e78815a5SAndreas Färber
5543 e78815a5SAndreas Färberposix_madvise=no
5544 e78815a5SAndreas Färbercat > $TMPC << EOF
5545 e78815a5SAndreas Färber#include <sys/mman.h>
5546 832ce9c2SScott Wood#include <stddef.h>
5547 e78815a5SAndreas Färberint main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5548 e78815a5SAndreas FärberEOF
5549 e78815a5SAndreas Färberif compile_prog "" "" ; then
5550 e78815a5SAndreas Färber    posix_madvise=yes
5551 e78815a5SAndreas Färberfi
5552 e78815a5SAndreas Färber
5553 e78815a5SAndreas Färber##########################################
5554 9bc5a719SAndreas Gustafsson# check if we have posix_memalign()
5555 9bc5a719SAndreas Gustafsson
5556 9bc5a719SAndreas Gustafssonposix_memalign=no
5557 9bc5a719SAndreas Gustafssoncat > $TMPC << EOF
5558 9bc5a719SAndreas Gustafsson#include <stdlib.h>
5559 9bc5a719SAndreas Gustafssonint main(void) {
5560 9bc5a719SAndreas Gustafsson    void *p;
5561 9bc5a719SAndreas Gustafsson    return posix_memalign(&p, 8, 8);
5562 9bc5a719SAndreas Gustafsson}
5563 9bc5a719SAndreas GustafssonEOF
5564 9bc5a719SAndreas Gustafssonif compile_prog "" "" ; then
5565 9bc5a719SAndreas Gustafsson    posix_memalign=yes
5566 9bc5a719SAndreas Gustafssonfi
5567 9bc5a719SAndreas Gustafsson
5568 9bc5a719SAndreas Gustafsson##########################################
5569 0a852417SPaul Durrant# check if we have posix_syslog
5570 0a852417SPaul Durrant
5571 0a852417SPaul Durrantposix_syslog=no
5572 0a852417SPaul Durrantcat > $TMPC << EOF
5573 0a852417SPaul Durrant#include <syslog.h>
5574 0a852417SPaul Durrantint main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5575 0a852417SPaul DurrantEOF
5576 0a852417SPaul Durrantif compile_prog "" "" ; then
5577 0a852417SPaul Durrant    posix_syslog=yes
5578 0a852417SPaul Durrantfi
5579 0a852417SPaul Durrant
5580 0a852417SPaul Durrant##########################################
5581 401bc051SPeter Maydell# check if we have sem_timedwait
5582 401bc051SPeter Maydell
5583 401bc051SPeter Maydellsem_timedwait=no
5584 401bc051SPeter Maydellcat > $TMPC << EOF
5585 401bc051SPeter Maydell#include <semaphore.h>
5586 811294b7SDaniel P. Berrangéint main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5587 401bc051SPeter MaydellEOF
5588 401bc051SPeter Maydellif compile_prog "" "" ; then
5589 401bc051SPeter Maydell    sem_timedwait=yes
5590 401bc051SPeter Maydellfi
5591 401bc051SPeter Maydell
5592 401bc051SPeter Maydell##########################################
5593 5c99fa37SKeno Fischer# check if we have strchrnul
5594 5c99fa37SKeno Fischer
5595 5c99fa37SKeno Fischerstrchrnul=no
5596 5c99fa37SKeno Fischercat > $TMPC << EOF
5597 5c99fa37SKeno Fischer#include <string.h>
5598 5c99fa37SKeno Fischerint main(void);
5599 5c99fa37SKeno Fischer// Use a haystack that the compiler shouldn't be able to constant fold
5600 5c99fa37SKeno Fischerchar *haystack = (char*)&main;
5601 5c99fa37SKeno Fischerint main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5602 5c99fa37SKeno FischerEOF
5603 5c99fa37SKeno Fischerif compile_prog "" "" ; then
5604 5c99fa37SKeno Fischer    strchrnul=yes
5605 5c99fa37SKeno Fischerfi
5606 5c99fa37SKeno Fischer
5607 8a792b03SJiufei Xue#########################################
5608 8a792b03SJiufei Xue# check if we have st_atim
5609 8a792b03SJiufei Xue
5610 8a792b03SJiufei Xuest_atim=no
5611 8a792b03SJiufei Xuecat > $TMPC << EOF
5612 8a792b03SJiufei Xue#include <sys/stat.h>
5613 8a792b03SJiufei Xue#include <stddef.h>
5614 8a792b03SJiufei Xueint main(void) { return offsetof(struct stat, st_atim); }
5615 8a792b03SJiufei XueEOF
5616 8a792b03SJiufei Xueif compile_prog "" "" ; then
5617 8a792b03SJiufei Xue    st_atim=yes
5618 8a792b03SJiufei Xuefi
5619 8a792b03SJiufei Xue
5620 5c99fa37SKeno Fischer##########################################
5621 94a420b1SStefan Hajnoczi# check if trace backend exists
5622 94a420b1SStefan Hajnoczi
5623 5b808275SLluís Vilanova$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
5624 94a420b1SStefan Hajnocziif test "$?" -ne 0 ; then
5625 5b808275SLluís Vilanova  error_exit "invalid trace backends" \
5626 5b808275SLluís Vilanova      "Please choose supported trace backends."
5627 94a420b1SStefan Hajnoczifi
5628 94a420b1SStefan Hajnoczi
5629 7e24e92aSStefan Hajnoczi##########################################
5630 7e24e92aSStefan Hajnoczi# For 'ust' backend, test if ust headers are present
5631 5b808275SLluís Vilanovaif have_backend "ust"; then
5632 7e24e92aSStefan Hajnoczi  cat > $TMPC << EOF
5633 bf15f63cSMohamad Gebai#include <lttng/tracepoint.h>
5634 7e24e92aSStefan Hajnocziint main(void) { return 0; }
5635 7e24e92aSStefan HajnocziEOF
5636 c79ed23dSFrancis Deslauriers  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5637 bf15f63cSMohamad Gebai    if $pkg_config lttng-ust --exists; then
5638 89138857SStefan Weil      lttng_ust_libs=$($pkg_config --libs lttng-ust)
5639 7e24e92aSStefan Hajnoczi    else
5640 c79ed23dSFrancis Deslauriers      lttng_ust_libs="-llttng-ust -ldl"
5641 bf15f63cSMohamad Gebai    fi
5642 bf15f63cSMohamad Gebai    if $pkg_config liburcu-bp --exists; then
5643 89138857SStefan Weil      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5644 bf15f63cSMohamad Gebai    else
5645 bf15f63cSMohamad Gebai      urcu_bp_libs="-lurcu-bp"
5646 bf15f63cSMohamad Gebai    fi
5647 bf15f63cSMohamad Gebai
5648 bf15f63cSMohamad Gebai    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5649 bf15f63cSMohamad Gebai  else
5650 bf15f63cSMohamad Gebai    error_exit "Trace backend 'ust' missing lttng-ust header files"
5651 7e24e92aSStefan Hajnoczi  fi
5652 7e24e92aSStefan Hajnoczifi
5653 b3d08c02SDaniel P. Berrange
5654 b3d08c02SDaniel P. Berrange##########################################
5655 b3d08c02SDaniel P. Berrange# For 'dtrace' backend, test if 'dtrace' command is present
5656 5b808275SLluís Vilanovaif have_backend "dtrace"; then
5657 b3d08c02SDaniel P. Berrange  if ! has 'dtrace' ; then
5658 76ad07a4SPeter Maydell    error_exit "dtrace command is not found in PATH $PATH"
5659 b3d08c02SDaniel P. Berrange  fi
5660 c276b17dSDaniel P. Berrange  trace_backend_stap="no"
5661 c276b17dSDaniel P. Berrange  if has 'stap' ; then
5662 c276b17dSDaniel P. Berrange    trace_backend_stap="yes"
5663 c276b17dSDaniel P. Berrange  fi
5664 b3d08c02SDaniel P. Berrangefi
5665 b3d08c02SDaniel P. Berrange
5666 7e24e92aSStefan Hajnoczi##########################################
5667 519175a2SAlex Barcelo# check and set a backend for coroutine
5668 d0e2fce5SAneesh Kumar K.V
5669 7c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback
5670 33c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows
5671 33c53c54SDaniel P. Berrange# specific one.
5672 7c2acc70SPeter Maydell
5673 7c2acc70SPeter Maydellucontext_works=no
5674 d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then
5675 d0e2fce5SAneesh Kumar K.V  cat > $TMPC << EOF
5676 d0e2fce5SAneesh Kumar K.V#include <ucontext.h>
5677 cdf84806SPeter Maydell#ifdef __stub_makecontext
5678 cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail
5679 cdf84806SPeter Maydell#endif
5680 75cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; }
5681 d0e2fce5SAneesh Kumar K.VEOF
5682 d0e2fce5SAneesh Kumar K.V  if compile_prog "" "" ; then
5683 7c2acc70SPeter Maydell    ucontext_works=yes
5684 d0e2fce5SAneesh Kumar K.V  fi
5685 519175a2SAlex Barcelofi
5686 7c2acc70SPeter Maydell
5687 7c2acc70SPeter Maydellif test "$coroutine" = ""; then
5688 7c2acc70SPeter Maydell  if test "$mingw32" = "yes"; then
5689 7c2acc70SPeter Maydell    coroutine=win32
5690 7c2acc70SPeter Maydell  elif test "$ucontext_works" = "yes"; then
5691 7c2acc70SPeter Maydell    coroutine=ucontext
5692 519175a2SAlex Barcelo  else
5693 7c2acc70SPeter Maydell    coroutine=sigaltstack
5694 7c2acc70SPeter Maydell  fi
5695 7c2acc70SPeter Maydellelse
5696 7c2acc70SPeter Maydell  case $coroutine in
5697 7c2acc70SPeter Maydell  windows)
5698 7c2acc70SPeter Maydell    if test "$mingw32" != "yes"; then
5699 7c2acc70SPeter Maydell      error_exit "'windows' coroutine backend only valid for Windows"
5700 7c2acc70SPeter Maydell    fi
5701 7c2acc70SPeter Maydell    # Unfortunately the user visible backend name doesn't match the
5702 7c2acc70SPeter Maydell    # coroutine-*.c filename for this case, so we have to adjust it here.
5703 7c2acc70SPeter Maydell    coroutine=win32
5704 7c2acc70SPeter Maydell    ;;
5705 7c2acc70SPeter Maydell  ucontext)
5706 7c2acc70SPeter Maydell    if test "$ucontext_works" != "yes"; then
5707 7c2acc70SPeter Maydell      feature_not_found "ucontext"
5708 7c2acc70SPeter Maydell    fi
5709 7c2acc70SPeter Maydell    ;;
5710 33c53c54SDaniel P. Berrange  sigaltstack)
5711 7c2acc70SPeter Maydell    if test "$mingw32" = "yes"; then
5712 7c2acc70SPeter Maydell      error_exit "only the 'windows' coroutine backend is valid for Windows"
5713 7c2acc70SPeter Maydell    fi
5714 7c2acc70SPeter Maydell    ;;
5715 7c2acc70SPeter Maydell  *)
5716 76ad07a4SPeter Maydell    error_exit "unknown coroutine backend $coroutine"
5717 7c2acc70SPeter Maydell    ;;
5718 7c2acc70SPeter Maydell  esac
5719 d0e2fce5SAneesh Kumar K.Vfi
5720 d0e2fce5SAneesh Kumar K.V
5721 70c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then
5722 70c60c08SStefan Hajnoczi  coroutine_pool=yes
5723 70c60c08SStefan Hajnoczifi
5724 70c60c08SStefan Hajnoczi
5725 7d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then
5726 7d992e4dSPeter Lieven  if test "$coroutine_pool" = "yes"; then
5727 7d992e4dSPeter Lieven    echo "WARN: disabling coroutine pool for stack usage debugging"
5728 7d992e4dSPeter Lieven    coroutine_pool=no
5729 7d992e4dSPeter Lieven  fi
5730 7d992e4dSPeter Lievenfi
5731 7d992e4dSPeter Lieven
5732 1e4f6065SDaniele Buono##################################################
5733 1e4f6065SDaniele Buono# SafeStack
5734 1e4f6065SDaniele Buono
5735 1e4f6065SDaniele Buono
5736 1e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
5737 1e4f6065SDaniele Buonocat > $TMPC << EOF
5738 1e4f6065SDaniele Buonoint main(int argc, char *argv[])
5739 1e4f6065SDaniele Buono{
5740 1e4f6065SDaniele Buono#if ! __has_feature(safe_stack)
5741 1e4f6065SDaniele Buono#error SafeStack Disabled
5742 1e4f6065SDaniele Buono#endif
5743 1e4f6065SDaniele Buono    return 0;
5744 1e4f6065SDaniele Buono}
5745 1e4f6065SDaniele BuonoEOF
5746 1e4f6065SDaniele Buono  flag="-fsanitize=safe-stack"
5747 1e4f6065SDaniele Buono  # Check that safe-stack is supported and enabled.
5748 1e4f6065SDaniele Buono  if compile_prog "-Werror $flag" "$flag"; then
5749 1e4f6065SDaniele Buono    # Flag needed both at compilation and at linking
5750 1e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5751 1e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5752 1e4f6065SDaniele Buono  else
5753 1e4f6065SDaniele Buono    error_exit "SafeStack not supported by your compiler"
5754 1e4f6065SDaniele Buono  fi
5755 1e4f6065SDaniele Buono  if test "$coroutine" != "ucontext"; then
5756 1e4f6065SDaniele Buono    error_exit "SafeStack is only supported by the coroutine backend ucontext"
5757 1e4f6065SDaniele Buono  fi
5758 1e4f6065SDaniele Buonoelse
5759 1e4f6065SDaniele Buonocat > $TMPC << EOF
5760 1e4f6065SDaniele Buonoint main(int argc, char *argv[])
5761 1e4f6065SDaniele Buono{
5762 1e4f6065SDaniele Buono#if defined(__has_feature)
5763 1e4f6065SDaniele Buono#if __has_feature(safe_stack)
5764 1e4f6065SDaniele Buono#error SafeStack Enabled
5765 1e4f6065SDaniele Buono#endif
5766 1e4f6065SDaniele Buono#endif
5767 1e4f6065SDaniele Buono    return 0;
5768 1e4f6065SDaniele Buono}
5769 1e4f6065SDaniele BuonoEOF
5770 1e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then
5771 1e4f6065SDaniele Buono  # Make sure that safe-stack is disabled
5772 1e4f6065SDaniele Buono  if ! compile_prog "-Werror" ""; then
5773 1e4f6065SDaniele Buono    # SafeStack was already enabled, try to explicitly remove the feature
5774 1e4f6065SDaniele Buono    flag="-fno-sanitize=safe-stack"
5775 1e4f6065SDaniele Buono    if ! compile_prog "-Werror $flag" "$flag"; then
5776 1e4f6065SDaniele Buono      error_exit "Configure cannot disable SafeStack"
5777 1e4f6065SDaniele Buono    fi
5778 1e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
5779 1e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
5780 1e4f6065SDaniele Buono  fi
5781 1e4f6065SDaniele Buonoelse # "$safe_stack" = ""
5782 1e4f6065SDaniele Buono  # Set safe_stack to yes or no based on pre-existing flags
5783 1e4f6065SDaniele Buono  if compile_prog "-Werror" ""; then
5784 1e4f6065SDaniele Buono    safe_stack="no"
5785 1e4f6065SDaniele Buono  else
5786 1e4f6065SDaniele Buono    safe_stack="yes"
5787 1e4f6065SDaniele Buono    if test "$coroutine" != "ucontext"; then
5788 1e4f6065SDaniele Buono      error_exit "SafeStack is only supported by the coroutine backend ucontext"
5789 1e4f6065SDaniele Buono    fi
5790 1e4f6065SDaniele Buono  fi
5791 1e4f6065SDaniele Buonofi
5792 1e4f6065SDaniele Buonofi
5793 7d992e4dSPeter Lieven
5794 d0e2fce5SAneesh Kumar K.V##########################################
5795 d2042378SAneesh Kumar K.V# check if we have open_by_handle_at
5796 d2042378SAneesh Kumar K.V
5797 4e1797f9SStefan Weilopen_by_handle_at=no
5798 d2042378SAneesh Kumar K.Vcat > $TMPC << EOF
5799 d2042378SAneesh Kumar K.V#include <fcntl.h>
5800 acc55ba8SStefan Weil#if !defined(AT_EMPTY_PATH)
5801 acc55ba8SStefan Weil# error missing definition
5802 acc55ba8SStefan Weil#else
5803 75cafad7SStefan Weilint main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5804 acc55ba8SStefan Weil#endif
5805 d2042378SAneesh Kumar K.VEOF
5806 d2042378SAneesh Kumar K.Vif compile_prog "" "" ; then
5807 d2042378SAneesh Kumar K.V    open_by_handle_at=yes
5808 d2042378SAneesh Kumar K.Vfi
5809 d2042378SAneesh Kumar K.V
5810 e06a765eSHarsh Prateek Bora########################################
5811 e06a765eSHarsh Prateek Bora# check if we have linux/magic.h
5812 e06a765eSHarsh Prateek Bora
5813 e06a765eSHarsh Prateek Boralinux_magic_h=no
5814 e06a765eSHarsh Prateek Boracat > $TMPC << EOF
5815 e06a765eSHarsh Prateek Bora#include <linux/magic.h>
5816 e06a765eSHarsh Prateek Boraint main(void) {
5817 75cafad7SStefan Weil  return 0;
5818 e06a765eSHarsh Prateek Bora}
5819 e06a765eSHarsh Prateek BoraEOF
5820 e06a765eSHarsh Prateek Boraif compile_prog "" "" ; then
5821 e06a765eSHarsh Prateek Bora    linux_magic_h=yes
5822 e06a765eSHarsh Prateek Borafi
5823 e06a765eSHarsh Prateek Bora
5824 8ab1bf12SLuiz Capitulino########################################
5825 541be927SChristian Borntraeger# check if we have valgrind/valgrind.h
5826 3f4349dcSKevin Wolf
5827 3f4349dcSKevin Wolfvalgrind_h=no
5828 3f4349dcSKevin Wolfcat > $TMPC << EOF
5829 3f4349dcSKevin Wolf#include <valgrind/valgrind.h>
5830 3f4349dcSKevin Wolfint main(void) {
5831 3f4349dcSKevin Wolf  return 0;
5832 3f4349dcSKevin Wolf}
5833 3f4349dcSKevin WolfEOF
5834 3f4349dcSKevin Wolfif compile_prog "" "" ; then
5835 3f4349dcSKevin Wolf    valgrind_h=yes
5836 3f4349dcSKevin Wolffi
5837 3f4349dcSKevin Wolf
5838 3f4349dcSKevin Wolf########################################
5839 8ab1bf12SLuiz Capitulino# check if environ is declared
5840 8ab1bf12SLuiz Capitulino
5841 8ab1bf12SLuiz Capitulinohas_environ=no
5842 8ab1bf12SLuiz Capitulinocat > $TMPC << EOF
5843 8ab1bf12SLuiz Capitulino#include <unistd.h>
5844 8ab1bf12SLuiz Capitulinoint main(void) {
5845 c075a723SBlue Swirl    environ = 0;
5846 8ab1bf12SLuiz Capitulino    return 0;
5847 8ab1bf12SLuiz Capitulino}
5848 8ab1bf12SLuiz CapitulinoEOF
5849 8ab1bf12SLuiz Capitulinoif compile_prog "" "" ; then
5850 8ab1bf12SLuiz Capitulino    has_environ=yes
5851 8ab1bf12SLuiz Capitulinofi
5852 8ab1bf12SLuiz Capitulino
5853 76a347e1SRichard Henderson########################################
5854 76a347e1SRichard Henderson# check if cpuid.h is usable.
5855 76a347e1SRichard Henderson
5856 76a347e1SRichard Hendersoncat > $TMPC << EOF
5857 76a347e1SRichard Henderson#include <cpuid.h>
5858 76a347e1SRichard Hendersonint main(void) {
5859 774d566cSPeter Maydell    unsigned a, b, c, d;
5860 774d566cSPeter Maydell    int max = __get_cpuid_max(0, 0);
5861 774d566cSPeter Maydell
5862 774d566cSPeter Maydell    if (max >= 1) {
5863 774d566cSPeter Maydell        __cpuid(1, a, b, c, d);
5864 774d566cSPeter Maydell    }
5865 774d566cSPeter Maydell
5866 774d566cSPeter Maydell    if (max >= 7) {
5867 774d566cSPeter Maydell        __cpuid_count(7, 0, a, b, c, d);
5868 774d566cSPeter Maydell    }
5869 774d566cSPeter Maydell
5870 76a347e1SRichard Henderson    return 0;
5871 76a347e1SRichard Henderson}
5872 76a347e1SRichard HendersonEOF
5873 76a347e1SRichard Hendersonif compile_prog "" "" ; then
5874 76a347e1SRichard Henderson    cpuid_h=yes
5875 76a347e1SRichard Hendersonfi
5876 76a347e1SRichard Henderson
5877 5dd89908SRichard Henderson##########################################
5878 5dd89908SRichard Henderson# avx2 optimization requirement check
5879 5dd89908SRichard Henderson#
5880 5dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable,
5881 5dd89908SRichard Henderson# since we won't be able to select the new routines.
5882 5dd89908SRichard Henderson
5883 e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5884 5dd89908SRichard Henderson  cat > $TMPC << EOF
5885 5dd89908SRichard Henderson#pragma GCC push_options
5886 5dd89908SRichard Henderson#pragma GCC target("avx2")
5887 5dd89908SRichard Henderson#include <cpuid.h>
5888 5dd89908SRichard Henderson#include <immintrin.h>
5889 5dd89908SRichard Hendersonstatic int bar(void *a) {
5890 5dd89908SRichard Henderson    __m256i x = *(__m256i *)a;
5891 5dd89908SRichard Henderson    return _mm256_testz_si256(x, x);
5892 5dd89908SRichard Henderson}
5893 5dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); }
5894 5dd89908SRichard HendersonEOF
5895 5dd89908SRichard Henderson  if compile_object "" ; then
5896 5dd89908SRichard Henderson    avx2_opt="yes"
5897 86583a07SLiam Merwick  else
5898 86583a07SLiam Merwick    avx2_opt="no"
5899 5dd89908SRichard Henderson  fi
5900 5dd89908SRichard Hendersonfi
5901 5dd89908SRichard Henderson
5902 6b8cd447SRobert Hoo##########################################
5903 6b8cd447SRobert Hoo# avx512f optimization requirement check
5904 6b8cd447SRobert Hoo#
5905 6b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable,
5906 6b8cd447SRobert Hoo# since we won't be able to select the new routines.
5907 6b8cd447SRobert Hoo# by default, it is turned off.
5908 6b8cd447SRobert Hoo# if user explicitly want to enable it, check environment
5909 6b8cd447SRobert Hoo
5910 6b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5911 6b8cd447SRobert Hoo  cat > $TMPC << EOF
5912 6b8cd447SRobert Hoo#pragma GCC push_options
5913 6b8cd447SRobert Hoo#pragma GCC target("avx512f")
5914 6b8cd447SRobert Hoo#include <cpuid.h>
5915 6b8cd447SRobert Hoo#include <immintrin.h>
5916 6b8cd447SRobert Hoostatic int bar(void *a) {
5917 6b8cd447SRobert Hoo    __m512i x = *(__m512i *)a;
5918 6b8cd447SRobert Hoo    return _mm512_test_epi64_mask(x, x);
5919 6b8cd447SRobert Hoo}
5920 6b8cd447SRobert Hooint main(int argc, char *argv[])
5921 6b8cd447SRobert Hoo{
5922 6b8cd447SRobert Hoo	return bar(argv[0]);
5923 6b8cd447SRobert Hoo}
5924 6b8cd447SRobert HooEOF
5925 6b8cd447SRobert Hoo  if ! compile_object "" ; then
5926 6b8cd447SRobert Hoo    avx512f_opt="no"
5927 6b8cd447SRobert Hoo  fi
5928 6b8cd447SRobert Hooelse
5929 6b8cd447SRobert Hoo  avx512f_opt="no"
5930 6b8cd447SRobert Hoofi
5931 6b8cd447SRobert Hoo
5932 f540166bSRichard Henderson########################################
5933 f540166bSRichard Henderson# check if __[u]int128_t is usable.
5934 f540166bSRichard Henderson
5935 f540166bSRichard Hendersonint128=no
5936 f540166bSRichard Hendersoncat > $TMPC << EOF
5937 f540166bSRichard Henderson__int128_t a;
5938 f540166bSRichard Henderson__uint128_t b;
5939 f540166bSRichard Hendersonint main (void) {
5940 f540166bSRichard Henderson  a = a + b;
5941 f540166bSRichard Henderson  b = a * b;
5942 464e3671SPeter Maydell  a = a * a;
5943 f540166bSRichard Henderson  return 0;
5944 f540166bSRichard Henderson}
5945 f540166bSRichard HendersonEOF
5946 f540166bSRichard Hendersonif compile_prog "" "" ; then
5947 f540166bSRichard Henderson    int128=yes
5948 f540166bSRichard Hendersonfi
5949 76a347e1SRichard Henderson
5950 7ebee43eSRichard Henderson#########################################
5951 7ebee43eSRichard Henderson# See if 128-bit atomic operations are supported.
5952 7ebee43eSRichard Henderson
5953 7ebee43eSRichard Hendersonatomic128=no
5954 7ebee43eSRichard Hendersonif test "$int128" = "yes"; then
5955 7ebee43eSRichard Henderson  cat > $TMPC << EOF
5956 7ebee43eSRichard Hendersonint main(void)
5957 7ebee43eSRichard Henderson{
5958 7ebee43eSRichard Henderson  unsigned __int128 x = 0, y = 0;
5959 7ebee43eSRichard Henderson  y = __atomic_load_16(&x, 0);
5960 7ebee43eSRichard Henderson  __atomic_store_16(&x, y, 0);
5961 7ebee43eSRichard Henderson  __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5962 7ebee43eSRichard Henderson  return 0;
5963 7ebee43eSRichard Henderson}
5964 7ebee43eSRichard HendersonEOF
5965 7ebee43eSRichard Henderson  if compile_prog "" "" ; then
5966 7ebee43eSRichard Henderson    atomic128=yes
5967 7ebee43eSRichard Henderson  fi
5968 7ebee43eSRichard Hendersonfi
5969 7ebee43eSRichard Henderson
5970 e6cd4bb5SRichard Hendersoncmpxchg128=no
5971 e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then
5972 e6cd4bb5SRichard Henderson  cat > $TMPC << EOF
5973 e6cd4bb5SRichard Hendersonint main(void)
5974 e6cd4bb5SRichard Henderson{
5975 e6cd4bb5SRichard Henderson  unsigned __int128 x = 0, y = 0;
5976 e6cd4bb5SRichard Henderson  __sync_val_compare_and_swap_16(&x, y, x);
5977 e6cd4bb5SRichard Henderson  return 0;
5978 e6cd4bb5SRichard Henderson}
5979 e6cd4bb5SRichard HendersonEOF
5980 e6cd4bb5SRichard Henderson  if compile_prog "" "" ; then
5981 e6cd4bb5SRichard Henderson    cmpxchg128=yes
5982 e6cd4bb5SRichard Henderson  fi
5983 e6cd4bb5SRichard Hendersonfi
5984 e6cd4bb5SRichard Henderson
5985 df79b996SRichard Henderson#########################################
5986 df79b996SRichard Henderson# See if 64-bit atomic operations are supported.
5987 df79b996SRichard Henderson# Note that without __atomic builtins, we can only
5988 df79b996SRichard Henderson# assume atomic loads/stores max at pointer size.
5989 df79b996SRichard Henderson
5990 df79b996SRichard Hendersoncat > $TMPC << EOF
5991 df79b996SRichard Henderson#include <stdint.h>
5992 df79b996SRichard Hendersonint main(void)
5993 df79b996SRichard Henderson{
5994 df79b996SRichard Henderson  uint64_t x = 0, y = 0;
5995 df79b996SRichard Henderson#ifdef __ATOMIC_RELAXED
5996 df79b996SRichard Henderson  y = __atomic_load_8(&x, 0);
5997 df79b996SRichard Henderson  __atomic_store_8(&x, y, 0);
5998 df79b996SRichard Henderson  __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5999 df79b996SRichard Henderson  __atomic_exchange_8(&x, y, 0);
6000 df79b996SRichard Henderson  __atomic_fetch_add_8(&x, y, 0);
6001 df79b996SRichard Henderson#else
6002 df79b996SRichard Henderson  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
6003 df79b996SRichard Henderson  __sync_lock_test_and_set(&x, y);
6004 df79b996SRichard Henderson  __sync_val_compare_and_swap(&x, y, 0);
6005 df79b996SRichard Henderson  __sync_fetch_and_add(&x, y);
6006 df79b996SRichard Henderson#endif
6007 df79b996SRichard Henderson  return 0;
6008 df79b996SRichard Henderson}
6009 df79b996SRichard HendersonEOF
6010 df79b996SRichard Hendersonif compile_prog "" "" ; then
6011 df79b996SRichard Henderson  atomic64=yes
6012 df79b996SRichard Hendersonfi
6013 df79b996SRichard Henderson
6014 26fffe29SEmilio G. Cota#########################################
6015 26fffe29SEmilio G. Cota# See if --dynamic-list is supported by the linker
6016 26fffe29SEmilio G. Cotald_dynamic_list="no"
6017 26fffe29SEmilio G. Cotaif test "$static" = "no" ; then
6018 26fffe29SEmilio G. Cota    cat > $TMPTXT <<EOF
6019 26fffe29SEmilio G. Cota{
6020 26fffe29SEmilio G. Cota  foo;
6021 26fffe29SEmilio G. Cota};
6022 26fffe29SEmilio G. CotaEOF
6023 26fffe29SEmilio G. Cota
6024 26fffe29SEmilio G. Cota    cat > $TMPC <<EOF
6025 26fffe29SEmilio G. Cota#include <stdio.h>
6026 26fffe29SEmilio G. Cotavoid foo(void);
6027 26fffe29SEmilio G. Cota
6028 26fffe29SEmilio G. Cotavoid foo(void)
6029 26fffe29SEmilio G. Cota{
6030 26fffe29SEmilio G. Cota  printf("foo\n");
6031 26fffe29SEmilio G. Cota}
6032 26fffe29SEmilio G. Cota
6033 26fffe29SEmilio G. Cotaint main(void)
6034 26fffe29SEmilio G. Cota{
6035 26fffe29SEmilio G. Cota  foo();
6036 26fffe29SEmilio G. Cota  return 0;
6037 26fffe29SEmilio G. Cota}
6038 26fffe29SEmilio G. CotaEOF
6039 26fffe29SEmilio G. Cota
6040 26fffe29SEmilio G. Cota    if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
6041 26fffe29SEmilio G. Cota        ld_dynamic_list="yes"
6042 26fffe29SEmilio G. Cota    fi
6043 26fffe29SEmilio G. Cotafi
6044 26fffe29SEmilio G. Cota
6045 26fffe29SEmilio G. Cota#########################################
6046 26fffe29SEmilio G. Cota# See if -exported_symbols_list is supported by the linker
6047 26fffe29SEmilio G. Cota
6048 26fffe29SEmilio G. Cotald_exported_symbols_list="no"
6049 26fffe29SEmilio G. Cotaif test "$static" = "no" ; then
6050 26fffe29SEmilio G. Cota    cat > $TMPTXT <<EOF
6051 26fffe29SEmilio G. Cota  _foo
6052 26fffe29SEmilio G. CotaEOF
6053 26fffe29SEmilio G. Cota
6054 26fffe29SEmilio G. Cota    if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
6055 26fffe29SEmilio G. Cota        ld_exported_symbols_list="yes"
6056 26fffe29SEmilio G. Cota    fi
6057 26fffe29SEmilio G. Cotafi
6058 26fffe29SEmilio G. Cota
6059 26fffe29SEmilio G. Cotaif  test "$plugins" = "yes" &&
6060 26fffe29SEmilio G. Cota    test "$ld_dynamic_list" = "no" &&
6061 26fffe29SEmilio G. Cota    test "$ld_exported_symbols_list" = "no" ; then
6062 26fffe29SEmilio G. Cota  error_exit \
6063 26fffe29SEmilio G. Cota      "Plugin support requires dynamic linking and specifying a set of symbols " \
6064 26fffe29SEmilio G. Cota      "that are exported to plugins. Unfortunately your linker doesn't " \
6065 26fffe29SEmilio G. Cota      "support the flag (--dynamic-list or -exported_symbols_list) used " \
6066 26fffe29SEmilio G. Cota      "for this purpose. You can't build with --static."
6067 26fffe29SEmilio G. Cotafi
6068 26fffe29SEmilio G. Cota
6069 1e6e9acaSRichard Henderson########################################
6070 db8aaae8SRichard Henderson# See if __attribute__((alias)) is supported.
6071 db8aaae8SRichard Henderson# This false for Xcode 9, but has been remedied for Xcode 10.
6072 db8aaae8SRichard Henderson# Unfortunately, travis uses Xcode 9 by default.
6073 db8aaae8SRichard Henderson
6074 db8aaae8SRichard Hendersonattralias=no
6075 db8aaae8SRichard Hendersoncat > $TMPC << EOF
6076 db8aaae8SRichard Hendersonint x = 1;
6077 db8aaae8SRichard Hendersonextern const int y __attribute__((alias("x")));
6078 db8aaae8SRichard Hendersonint main(void) { return 0; }
6079 db8aaae8SRichard HendersonEOF
6080 db8aaae8SRichard Hendersonif compile_prog "" "" ; then
6081 db8aaae8SRichard Henderson    attralias=yes
6082 db8aaae8SRichard Hendersonfi
6083 db8aaae8SRichard Henderson
6084 db8aaae8SRichard Henderson########################################
6085 1e6e9acaSRichard Henderson# check if getauxval is available.
6086 1e6e9acaSRichard Henderson
6087 1e6e9acaSRichard Hendersongetauxval=no
6088 1e6e9acaSRichard Hendersoncat > $TMPC << EOF
6089 1e6e9acaSRichard Henderson#include <sys/auxv.h>
6090 1e6e9acaSRichard Hendersonint main(void) {
6091 1e6e9acaSRichard Henderson  return getauxval(AT_HWCAP) == 0;
6092 1e6e9acaSRichard Henderson}
6093 1e6e9acaSRichard HendersonEOF
6094 1e6e9acaSRichard Hendersonif compile_prog "" "" ; then
6095 1e6e9acaSRichard Henderson    getauxval=yes
6096 1e6e9acaSRichard Hendersonfi
6097 1e6e9acaSRichard Henderson
6098 fd0e6053SJohn Snow########################################
6099 fd0e6053SJohn Snow# check if ccache is interfering with
6100 fd0e6053SJohn Snow# semantic analysis of macros
6101 fd0e6053SJohn Snow
6102 5e4dfd3dSJohn Snowunset CCACHE_CPP2
6103 fd0e6053SJohn Snowccache_cpp2=no
6104 fd0e6053SJohn Snowcat > $TMPC << EOF
6105 fd0e6053SJohn Snowstatic const int Z = 1;
6106 fd0e6053SJohn Snow#define fn() ({ Z; })
6107 fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
6108 fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
6109 fd0e6053SJohn Snow#define ID(X) (X)
6110 fd0e6053SJohn Snowint main(int argc, char *argv[])
6111 fd0e6053SJohn Snow{
6112 fd0e6053SJohn Snow    int x = 0, y = 0;
6113 fd0e6053SJohn Snow    x = ID(x);
6114 fd0e6053SJohn Snow    x = fn();
6115 fd0e6053SJohn Snow    fn();
6116 fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
6117 fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
6118 fd0e6053SJohn Snow    return 0;
6119 fd0e6053SJohn Snow}
6120 fd0e6053SJohn SnowEOF
6121 fd0e6053SJohn Snow
6122 fd0e6053SJohn Snowif ! compile_object "-Werror"; then
6123 fd0e6053SJohn Snow    ccache_cpp2=yes
6124 fd0e6053SJohn Snowfi
6125 fd0e6053SJohn Snow
6126 b553a042SJohn Snow#################################################
6127 b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE.
6128 b553a042SJohn Snow
6129 b553a042SJohn Snowif test "$fortify_source" != "no"; then
6130 b553a042SJohn Snow  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
6131 b553a042SJohn Snow    fortify_source="no";
6132 e189091fSPeter Maydell  elif test -n "$cxx" && has $cxx &&
6133 cfcc7c14SJohn Snow       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
6134 b553a042SJohn Snow    fortify_source="no";
6135 b553a042SJohn Snow  else
6136 b553a042SJohn Snow    fortify_source="yes"
6137 b553a042SJohn Snow  fi
6138 b553a042SJohn Snowfi
6139 b553a042SJohn Snow
6140 1efad060SFam Zheng###############################################
6141 1efad060SFam Zheng# Check if copy_file_range is provided by glibc
6142 1efad060SFam Zhenghave_copy_file_range=no
6143 1efad060SFam Zhengcat > $TMPC << EOF
6144 1efad060SFam Zheng#include <unistd.h>
6145 1efad060SFam Zhengint main(void) {
6146 1efad060SFam Zheng  copy_file_range(0, NULL, 0, NULL, 0, 0);
6147 1efad060SFam Zheng  return 0;
6148 1efad060SFam Zheng}
6149 1efad060SFam ZhengEOF
6150 1efad060SFam Zhengif compile_prog "" "" ; then
6151 1efad060SFam Zheng    have_copy_file_range=yes
6152 1efad060SFam Zhengfi
6153 1efad060SFam Zheng
6154 d2042378SAneesh Kumar K.V##########################################
6155 277abf15SJan Vesely# check if struct fsxattr is available via linux/fs.h
6156 277abf15SJan Vesely
6157 277abf15SJan Veselyhave_fsxattr=no
6158 277abf15SJan Veselycat > $TMPC << EOF
6159 277abf15SJan Vesely#include <linux/fs.h>
6160 277abf15SJan Veselystruct fsxattr foo;
6161 277abf15SJan Veselyint main(void) {
6162 277abf15SJan Vesely  return 0;
6163 277abf15SJan Vesely}
6164 277abf15SJan VeselyEOF
6165 277abf15SJan Veselyif compile_prog "" "" ; then
6166 277abf15SJan Vesely    have_fsxattr=yes
6167 277abf15SJan Veselyfi
6168 277abf15SJan Vesely
6169 b66e10e4SPeter Maydell##########################################
6170 a40161cbSPaolo Bonzini# check for usable membarrier system call
6171 a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then
6172 a40161cbSPaolo Bonzini    have_membarrier=no
6173 a40161cbSPaolo Bonzini    if test "$mingw32" = "yes" ; then
6174 a40161cbSPaolo Bonzini        have_membarrier=yes
6175 a40161cbSPaolo Bonzini    elif test "$linux" = "yes" ; then
6176 a40161cbSPaolo Bonzini        cat > $TMPC << EOF
6177 a40161cbSPaolo Bonzini    #include <linux/membarrier.h>
6178 a40161cbSPaolo Bonzini    #include <sys/syscall.h>
6179 a40161cbSPaolo Bonzini    #include <unistd.h>
6180 a40161cbSPaolo Bonzini    #include <stdlib.h>
6181 a40161cbSPaolo Bonzini    int main(void) {
6182 a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
6183 a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
6184 a40161cbSPaolo Bonzini	exit(0);
6185 a40161cbSPaolo Bonzini    }
6186 a40161cbSPaolo BonziniEOF
6187 a40161cbSPaolo Bonzini        if compile_prog "" "" ; then
6188 a40161cbSPaolo Bonzini            have_membarrier=yes
6189 a40161cbSPaolo Bonzini        fi
6190 a40161cbSPaolo Bonzini    fi
6191 a40161cbSPaolo Bonzini    if test "$have_membarrier" = "no"; then
6192 a40161cbSPaolo Bonzini      feature_not_found "membarrier" "membarrier system call not available"
6193 a40161cbSPaolo Bonzini    fi
6194 a40161cbSPaolo Bonzinielse
6195 a40161cbSPaolo Bonzini    # Do not enable it by default even for Mingw32, because it doesn't
6196 a40161cbSPaolo Bonzini    # work on Wine.
6197 a40161cbSPaolo Bonzini    membarrier=no
6198 a40161cbSPaolo Bonzinifi
6199 a40161cbSPaolo Bonzini
6200 a40161cbSPaolo Bonzini##########################################
6201 b66e10e4SPeter Maydell# check if rtnetlink.h exists and is useful
6202 575b22b1SLaurent Vivierhave_rtnetlink=no
6203 575b22b1SLaurent Viviercat > $TMPC << EOF
6204 575b22b1SLaurent Vivier#include <linux/rtnetlink.h>
6205 575b22b1SLaurent Vivierint main(void) {
6206 575b22b1SLaurent Vivier  return IFLA_PROTO_DOWN;
6207 575b22b1SLaurent Vivier}
6208 575b22b1SLaurent VivierEOF
6209 575b22b1SLaurent Vivierif compile_prog "" "" ; then
6210 575b22b1SLaurent Vivier    have_rtnetlink=yes
6211 575b22b1SLaurent Vivierfi
6212 575b22b1SLaurent Vivier
6213 6a02c806SStefan Hajnoczi##########################################
6214 6a02c806SStefan Hajnoczi# check for usable AF_VSOCK environment
6215 6a02c806SStefan Hajnoczihave_af_vsock=no
6216 6a02c806SStefan Hajnoczicat > $TMPC << EOF
6217 6a02c806SStefan Hajnoczi#include <errno.h>
6218 6a02c806SStefan Hajnoczi#include <sys/types.h>
6219 6a02c806SStefan Hajnoczi#include <sys/socket.h>
6220 6a02c806SStefan Hajnoczi#if !defined(AF_VSOCK)
6221 6a02c806SStefan Hajnoczi# error missing AF_VSOCK flag
6222 6a02c806SStefan Hajnoczi#endif
6223 6a02c806SStefan Hajnoczi#include <linux/vm_sockets.h>
6224 6a02c806SStefan Hajnocziint main(void) {
6225 6a02c806SStefan Hajnoczi    int sock, ret;
6226 6a02c806SStefan Hajnoczi    struct sockaddr_vm svm;
6227 6a02c806SStefan Hajnoczi    socklen_t len = sizeof(svm);
6228 6a02c806SStefan Hajnoczi    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
6229 6a02c806SStefan Hajnoczi    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
6230 6a02c806SStefan Hajnoczi    if ((ret == -1) && (errno == ENOTCONN)) {
6231 6a02c806SStefan Hajnoczi        return 0;
6232 6a02c806SStefan Hajnoczi    }
6233 6a02c806SStefan Hajnoczi    return -1;
6234 6a02c806SStefan Hajnoczi}
6235 6a02c806SStefan HajnocziEOF
6236 6a02c806SStefan Hajnocziif compile_prog "" "" ; then
6237 6a02c806SStefan Hajnoczi    have_af_vsock=yes
6238 6a02c806SStefan Hajnoczifi
6239 6a02c806SStefan Hajnoczi
6240 f0d92b56SLongpeng(Mike)##########################################
6241 f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment
6242 4f67366eSThomas Huthhave_afalg=no
6243 f0d92b56SLongpeng(Mike)cat > $TMPC << EOF
6244 f0d92b56SLongpeng(Mike)#include <errno.h>
6245 f0d92b56SLongpeng(Mike)#include <sys/types.h>
6246 f0d92b56SLongpeng(Mike)#include <sys/socket.h>
6247 f0d92b56SLongpeng(Mike)#include <linux/if_alg.h>
6248 f0d92b56SLongpeng(Mike)int main(void) {
6249 f0d92b56SLongpeng(Mike)    int sock;
6250 f0d92b56SLongpeng(Mike)    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
6251 f0d92b56SLongpeng(Mike)    return sock;
6252 f0d92b56SLongpeng(Mike)}
6253 f0d92b56SLongpeng(Mike)EOF
6254 f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then
6255 f0d92b56SLongpeng(Mike)    have_afalg=yes
6256 f0d92b56SLongpeng(Mike)fi
6257 f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes"
6258 f0d92b56SLongpeng(Mike)then
6259 f0d92b56SLongpeng(Mike)    if test "$have_afalg" != "yes"
6260 f0d92b56SLongpeng(Mike)    then
6261 f0d92b56SLongpeng(Mike)	error_exit "AF_ALG requested but could not be detected"
6262 f0d92b56SLongpeng(Mike)    fi
6263 f0d92b56SLongpeng(Mike)fi
6264 f0d92b56SLongpeng(Mike)
6265 f0d92b56SLongpeng(Mike)
6266 6969ec6cSJames Clarke#################################################
6267 c97d6d2cSSergio Andres Gomez Del Real# Check to see if we have the Hypervisor framework
6268 d2d08522SPeter Maydellif [ "$darwin" = "yes" ] ; then
6269 c97d6d2cSSergio Andres Gomez Del Real  cat > $TMPC << EOF
6270 c97d6d2cSSergio Andres Gomez Del Real#include <Hypervisor/hv.h>
6271 c97d6d2cSSergio Andres Gomez Del Realint main() { return 0;}
6272 c97d6d2cSSergio Andres Gomez Del RealEOF
6273 c97d6d2cSSergio Andres Gomez Del Real  if ! compile_object ""; then
6274 c97d6d2cSSergio Andres Gomez Del Real    hvf='no'
6275 c97d6d2cSSergio Andres Gomez Del Real  else
6276 c97d6d2cSSergio Andres Gomez Del Real    hvf='yes'
6277 db5adeaaSPaolo Bonzini    QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS"
6278 c97d6d2cSSergio Andres Gomez Del Real  fi
6279 c97d6d2cSSergio Andres Gomez Del Realfi
6280 c97d6d2cSSergio Andres Gomez Del Real
6281 c97d6d2cSSergio Andres Gomez Del Real#################################################
6282 6969ec6cSJames Clarke# Sparc implicitly links with --relax, which is
6283 6969ec6cSJames Clarke# incompatible with -r, so --no-relax should be
6284 6969ec6cSJames Clarke# given. It does no harm to give it on other
6285 6969ec6cSJames Clarke# platforms too.
6286 6969ec6cSJames Clarke
6287 6969ec6cSJames Clarke# Note: the prototype is needed since QEMU_CFLAGS
6288 6969ec6cSJames Clarke#       contains -Wmissing-prototypes
6289 6969ec6cSJames Clarkecat > $TMPC << EOF
6290 6969ec6cSJames Clarkeextern int foo(void);
6291 6969ec6cSJames Clarkeint foo(void) { return 0; }
6292 6969ec6cSJames ClarkeEOF
6293 6969ec6cSJames Clarkeif ! compile_object ""; then
6294 6969ec6cSJames Clarke  error_exit "Failed to compile object file for LD_REL_FLAGS test"
6295 6969ec6cSJames Clarkefi
6296 7ecf44a5SPaolo Bonzinifor i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
6297 7ecf44a5SPaolo Bonzini  if do_cc -nostdlib $i -o $TMPMO $TMPO; then
6298 7ecf44a5SPaolo Bonzini    LD_REL_FLAGS=$i
6299 7ecf44a5SPaolo Bonzini    break
6300 7ecf44a5SPaolo Bonzini  fi
6301 7ecf44a5SPaolo Bonzinidone
6302 7ecf44a5SPaolo Bonziniif test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
6303 7ecf44a5SPaolo Bonzini  feature_not_found "modules" "Cannot find how to build relocatable objects"
6304 6969ec6cSJames Clarkefi
6305 6969ec6cSJames Clarke
6306 277abf15SJan Vesely##########################################
6307 4d04351fSChristopher Covington# check for sysmacros.h
6308 4d04351fSChristopher Covington
6309 4d04351fSChristopher Covingtonhave_sysmacros=no
6310 4d04351fSChristopher Covingtoncat > $TMPC << EOF
6311 4d04351fSChristopher Covington#include <sys/sysmacros.h>
6312 4d04351fSChristopher Covingtonint main(void) {
6313 4d04351fSChristopher Covington    return makedev(0, 0);
6314 4d04351fSChristopher Covington}
6315 4d04351fSChristopher CovingtonEOF
6316 4d04351fSChristopher Covingtonif compile_prog "" "" ; then
6317 4d04351fSChristopher Covington    have_sysmacros=yes
6318 4d04351fSChristopher Covingtonfi
6319 4d04351fSChristopher Covington
6320 4d04351fSChristopher Covington##########################################
6321 49e00a18SAndreas Grapentin# check for _Static_assert()
6322 49e00a18SAndreas Grapentin
6323 49e00a18SAndreas Grapentinhave_static_assert=no
6324 49e00a18SAndreas Grapentincat > $TMPC << EOF
6325 49e00a18SAndreas Grapentin_Static_assert(1, "success");
6326 49e00a18SAndreas Grapentinint main(void) {
6327 49e00a18SAndreas Grapentin    return 0;
6328 49e00a18SAndreas Grapentin}
6329 49e00a18SAndreas GrapentinEOF
6330 49e00a18SAndreas Grapentinif compile_prog "" "" ; then
6331 49e00a18SAndreas Grapentin    have_static_assert=yes
6332 49e00a18SAndreas Grapentinfi
6333 49e00a18SAndreas Grapentin
6334 49e00a18SAndreas Grapentin##########################################
6335 e674605fSTomáš Golembiovský# check for utmpx.h, it is missing e.g. on OpenBSD
6336 e674605fSTomáš Golembiovský
6337 e674605fSTomáš Golembiovskýhave_utmpx=no
6338 e674605fSTomáš Golembiovskýcat > $TMPC << EOF
6339 e674605fSTomáš Golembiovský#include <utmpx.h>
6340 e674605fSTomáš Golembiovskýstruct utmpx user_info;
6341 e674605fSTomáš Golembiovskýint main(void) {
6342 e674605fSTomáš Golembiovský    return 0;
6343 e674605fSTomáš Golembiovský}
6344 e674605fSTomáš GolembiovskýEOF
6345 e674605fSTomáš Golembiovskýif compile_prog "" "" ; then
6346 e674605fSTomáš Golembiovský    have_utmpx=yes
6347 e674605fSTomáš Golembiovskýfi
6348 e674605fSTomáš Golembiovský
6349 e674605fSTomáš Golembiovský##########################################
6350 db1ed1abSRichard Henderson# check for getrandom()
6351 db1ed1abSRichard Henderson
6352 db1ed1abSRichard Hendersonhave_getrandom=no
6353 db1ed1abSRichard Hendersoncat > $TMPC << EOF
6354 db1ed1abSRichard Henderson#include <sys/random.h>
6355 db1ed1abSRichard Hendersonint main(void) {
6356 db1ed1abSRichard Henderson    return getrandom(0, 0, GRND_NONBLOCK);
6357 db1ed1abSRichard Henderson}
6358 db1ed1abSRichard HendersonEOF
6359 db1ed1abSRichard Hendersonif compile_prog "" "" ; then
6360 db1ed1abSRichard Henderson    have_getrandom=yes
6361 db1ed1abSRichard Hendersonfi
6362 db1ed1abSRichard Henderson
6363 db1ed1abSRichard Henderson##########################################
6364 247724cbSMarc-André Lureau# checks for sanitizers
6365 247724cbSMarc-André Lureau
6366 247724cbSMarc-André Lureauhave_asan=no
6367 247724cbSMarc-André Lureauhave_ubsan=no
6368 d83414e1SMarc-André Lureauhave_asan_iface_h=no
6369 d83414e1SMarc-André Lureauhave_asan_iface_fiber=no
6370 247724cbSMarc-André Lureau
6371 247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then
6372 b9f44da2SMarc-André Lureau  write_c_skeleton
6373 247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
6374 247724cbSMarc-André Lureau      have_asan=yes
6375 247724cbSMarc-André Lureau  fi
6376 b9f44da2SMarc-André Lureau
6377 b9f44da2SMarc-André Lureau  # we could use a simple skeleton for flags checks, but this also
6378 b9f44da2SMarc-André Lureau  # detect the static linking issue of ubsan, see also:
6379 b9f44da2SMarc-André Lureau  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
6380 b9f44da2SMarc-André Lureau  cat > $TMPC << EOF
6381 b9f44da2SMarc-André Lureau#include <stdlib.h>
6382 b9f44da2SMarc-André Lureauint main(void) {
6383 b9f44da2SMarc-André Lureau    void *tmp = malloc(10);
6384 f2dfe54cSLeonid Bloch    if (tmp != NULL) {
6385 b9f44da2SMarc-André Lureau        return *(int *)(tmp + 2);
6386 b9f44da2SMarc-André Lureau    }
6387 d1abf3fcSOlaf Hering    return 1;
6388 f2dfe54cSLeonid Bloch}
6389 b9f44da2SMarc-André LureauEOF
6390 247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
6391 247724cbSMarc-André Lureau      have_ubsan=yes
6392 247724cbSMarc-André Lureau  fi
6393 d83414e1SMarc-André Lureau
6394 d83414e1SMarc-André Lureau  if check_include "sanitizer/asan_interface.h" ; then
6395 d83414e1SMarc-André Lureau      have_asan_iface_h=yes
6396 d83414e1SMarc-André Lureau  fi
6397 d83414e1SMarc-André Lureau
6398 d83414e1SMarc-André Lureau  cat > $TMPC << EOF
6399 d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h>
6400 d83414e1SMarc-André Lureauint main(void) {
6401 d83414e1SMarc-André Lureau  __sanitizer_start_switch_fiber(0, 0, 0);
6402 d83414e1SMarc-André Lureau  return 0;
6403 d83414e1SMarc-André Lureau}
6404 d83414e1SMarc-André LureauEOF
6405 d83414e1SMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
6406 d83414e1SMarc-André Lureau      have_asan_iface_fiber=yes
6407 d83414e1SMarc-André Lureau  fi
6408 247724cbSMarc-André Lureaufi
6409 247724cbSMarc-André Lureau
6410 247724cbSMarc-André Lureau##########################################
6411 adc28027SAlexander Bulekov# checks for fuzzer
6412 adc28027SAlexander Bulekovif test "$fuzzing" = "yes" ; then
6413 adc28027SAlexander Bulekov  write_c_fuzzer_skeleton
6414 dd016265SAlexander Bulekov  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
6415 adc28027SAlexander Bulekov      have_fuzzer=yes
6416 adc28027SAlexander Bulekov  fi
6417 adc28027SAlexander Bulekovfi
6418 adc28027SAlexander Bulekov
6419 0aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers;
6420 0aebab04SLingfeng Yang# keep it separate until that is not the case.
6421 0aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
6422 0aebab04SLingfeng Yang  error_exit "TSAN is not supported with other sanitiziers."
6423 0aebab04SLingfeng Yangfi
6424 0aebab04SLingfeng Yanghave_tsan=no
6425 0aebab04SLingfeng Yanghave_tsan_iface_fiber=no
6426 0aebab04SLingfeng Yangif test "$tsan" = "yes" ; then
6427 0aebab04SLingfeng Yang  write_c_skeleton
6428 0aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6429 0aebab04SLingfeng Yang      have_tsan=yes
6430 0aebab04SLingfeng Yang  fi
6431 0aebab04SLingfeng Yang  cat > $TMPC << EOF
6432 0aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h>
6433 0aebab04SLingfeng Yangint main(void) {
6434 0aebab04SLingfeng Yang  __tsan_create_fiber(0);
6435 0aebab04SLingfeng Yang  return 0;
6436 0aebab04SLingfeng Yang}
6437 0aebab04SLingfeng YangEOF
6438 0aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
6439 0aebab04SLingfeng Yang      have_tsan_iface_fiber=yes
6440 0aebab04SLingfeng Yang  fi
6441 0aebab04SLingfeng Yangfi
6442 0aebab04SLingfeng Yang
6443 adc28027SAlexander Bulekov##########################################
6444 17824406SJunyan He# check for libpmem
6445 17824406SJunyan He
6446 17824406SJunyan Heif test "$libpmem" != "no"; then
6447 17824406SJunyan He	if $pkg_config --exists "libpmem"; then
6448 17824406SJunyan He		libpmem="yes"
6449 17824406SJunyan He		libpmem_libs=$($pkg_config --libs libpmem)
6450 17824406SJunyan He		libpmem_cflags=$($pkg_config --cflags libpmem)
6451 17824406SJunyan He		libs_softmmu="$libs_softmmu $libpmem_libs"
6452 17824406SJunyan He		QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
6453 17824406SJunyan He	else
6454 17824406SJunyan He		if test "$libpmem" = "yes" ; then
6455 17824406SJunyan He			feature_not_found "libpmem" "Install nvml or pmdk"
6456 17824406SJunyan He		fi
6457 17824406SJunyan He		libpmem="no"
6458 17824406SJunyan He	fi
6459 17824406SJunyan Hefi
6460 17824406SJunyan He
6461 17824406SJunyan He##########################################
6462 21b2eca6SJingqi Liu# check for libdaxctl
6463 21b2eca6SJingqi Liu
6464 21b2eca6SJingqi Liuif test "$libdaxctl" != "no"; then
6465 21b2eca6SJingqi Liu	if $pkg_config --atleast-version=57 "libdaxctl"; then
6466 21b2eca6SJingqi Liu		libdaxctl="yes"
6467 21b2eca6SJingqi Liu		libdaxctl_libs=$($pkg_config --libs libdaxctl)
6468 21b2eca6SJingqi Liu		libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
6469 21b2eca6SJingqi Liu		libs_softmmu="$libs_softmmu $libdaxctl_libs"
6470 21b2eca6SJingqi Liu		QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags"
6471 21b2eca6SJingqi Liu	else
6472 21b2eca6SJingqi Liu		if test "$libdaxctl" = "yes" ; then
6473 21b2eca6SJingqi Liu			feature_not_found "libdaxctl" "Install libdaxctl"
6474 21b2eca6SJingqi Liu		fi
6475 21b2eca6SJingqi Liu		libdaxctl="no"
6476 21b2eca6SJingqi Liu	fi
6477 21b2eca6SJingqi Liufi
6478 21b2eca6SJingqi Liu
6479 21b2eca6SJingqi Liu##########################################
6480 675b9b53SMarc-André Lureau# check for slirp
6481 675b9b53SMarc-André Lureau
6482 d599938aSLaurent Vivier# slirp is only required when building softmmu targets
6483 d599938aSLaurent Vivierif test -z "$slirp" -a "$softmmu" != "yes" ; then
6484 d599938aSLaurent Vivier    slirp="no"
6485 d599938aSLaurent Vivierfi
6486 d599938aSLaurent Vivier
6487 675b9b53SMarc-André Lureaucase "$slirp" in
6488 675b9b53SMarc-André Lureau  "" | yes)
6489 675b9b53SMarc-André Lureau    if $pkg_config slirp; then
6490 675b9b53SMarc-André Lureau      slirp=system
6491 7c57bdd8SMarc-André Lureau    elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
6492 7c57bdd8SMarc-André Lureau      slirp=git
6493 675b9b53SMarc-André Lureau    elif test -e "${source_path}/slirp/Makefile" ; then
6494 675b9b53SMarc-André Lureau      slirp=internal
6495 675b9b53SMarc-André Lureau    elif test -z "$slirp" ; then
6496 675b9b53SMarc-André Lureau      slirp=no
6497 675b9b53SMarc-André Lureau    else
6498 675b9b53SMarc-André Lureau      feature_not_found "slirp" "Install slirp devel or git submodule"
6499 675b9b53SMarc-André Lureau    fi
6500 675b9b53SMarc-André Lureau    ;;
6501 675b9b53SMarc-André Lureau
6502 675b9b53SMarc-André Lureau  system)
6503 675b9b53SMarc-André Lureau    if ! $pkg_config slirp; then
6504 675b9b53SMarc-André Lureau      feature_not_found "slirp" "Install slirp devel"
6505 675b9b53SMarc-André Lureau    fi
6506 675b9b53SMarc-André Lureau    ;;
6507 675b9b53SMarc-André Lureauesac
6508 675b9b53SMarc-André Lureau
6509 675b9b53SMarc-André Lureaucase "$slirp" in
6510 7c57bdd8SMarc-André Lureau  git | internal)
6511 7c57bdd8SMarc-André Lureau    if test "$slirp" = git; then
6512 7c57bdd8SMarc-André Lureau      git_submodules="${git_submodules} slirp"
6513 7c57bdd8SMarc-André Lureau    fi
6514 675b9b53SMarc-André Lureau    mkdir -p slirp
6515 25211446SPaolo Bonzini    slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src"
6516 25211446SPaolo Bonzini    slirp_libs="-L$PWD/slirp -lslirp"
6517 b965e8c5SPaolo Bonzini    if test "$mingw32" = "yes" ; then
6518 b965e8c5SPaolo Bonzini      slirp_libs="$slirp_libs -lws2_32 -liphlpapi"
6519 b965e8c5SPaolo Bonzini    fi
6520 675b9b53SMarc-André Lureau    ;;
6521 675b9b53SMarc-André Lureau
6522 675b9b53SMarc-André Lureau  system)
6523 675b9b53SMarc-André Lureau    slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
6524 675b9b53SMarc-André Lureau    slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
6525 675b9b53SMarc-André Lureau    slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
6526 675b9b53SMarc-André Lureau    ;;
6527 675b9b53SMarc-André Lureau
6528 675b9b53SMarc-André Lureau  no)
6529 675b9b53SMarc-André Lureau    ;;
6530 675b9b53SMarc-André Lureau  *)
6531 675b9b53SMarc-André Lureau    error_exit "Unknown state for slirp: $slirp"
6532 675b9b53SMarc-André Lureau    ;;
6533 675b9b53SMarc-André Lureauesac
6534 675b9b53SMarc-André Lureau
6535 54e7aac0SAlexey Krasikov##########################################
6536 54e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall
6537 54e7aac0SAlexey Krasikov
6538 54e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then
6539 54e7aac0SAlexey Krasikov
6540 54e7aac0SAlexey Krasikov    have_keyring=no
6541 54e7aac0SAlexey Krasikov    cat > $TMPC << EOF
6542 54e7aac0SAlexey Krasikov#include <errno.h>
6543 54e7aac0SAlexey Krasikov#include <asm/unistd.h>
6544 54e7aac0SAlexey Krasikov#include <linux/keyctl.h>
6545 54e7aac0SAlexey Krasikov#include <unistd.h>
6546 54e7aac0SAlexey Krasikovint main(void) {
6547 54e7aac0SAlexey Krasikov    return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
6548 54e7aac0SAlexey Krasikov}
6549 54e7aac0SAlexey KrasikovEOF
6550 54e7aac0SAlexey Krasikov    if compile_prog "" "" ; then
6551 54e7aac0SAlexey Krasikov        have_keyring=yes
6552 54e7aac0SAlexey Krasikov    fi
6553 54e7aac0SAlexey Krasikovfi
6554 54e7aac0SAlexey Krasikovif test "$secret_keyring" != "no"
6555 54e7aac0SAlexey Krasikovthen
6556 b418d265SDavid Edmondson    if test "$have_keyring" = "yes"
6557 54e7aac0SAlexey Krasikov    then
6558 54e7aac0SAlexey Krasikov	secret_keyring=yes
6559 54e7aac0SAlexey Krasikov    else
6560 54e7aac0SAlexey Krasikov	if test "$secret_keyring" = "yes"
6561 54e7aac0SAlexey Krasikov	then
6562 54e7aac0SAlexey Krasikov	    error_exit "syscall __NR_keyctl requested, \
6563 54e7aac0SAlexey Krasikovbut not implemented on your system"
6564 54e7aac0SAlexey Krasikov	else
6565 54e7aac0SAlexey Krasikov	    secret_keyring=no
6566 54e7aac0SAlexey Krasikov	fi
6567 54e7aac0SAlexey Krasikov    fi
6568 54e7aac0SAlexey Krasikovfi
6569 54e7aac0SAlexey Krasikov
6570 92500362SAlexey Krasikov##########################################
6571 92500362SAlexey Krasikov# check for usable keyutils.h
6572 92500362SAlexey Krasikov
6573 92500362SAlexey Krasikovif test "$linux" = "yes" ; then
6574 92500362SAlexey Krasikov
6575 92500362SAlexey Krasikov    have_keyutils=no
6576 92500362SAlexey Krasikov    cat > $TMPC << EOF
6577 92500362SAlexey Krasikov#include <errno.h>
6578 92500362SAlexey Krasikov#include <asm/unistd.h>
6579 92500362SAlexey Krasikov#include <unistd.h>
6580 92500362SAlexey Krasikov#include <sys/types.h>
6581 92500362SAlexey Krasikov#include <keyutils.h>
6582 92500362SAlexey Krasikovint main(void) {
6583 92500362SAlexey Krasikov    return request_key("user", NULL, NULL, 0);
6584 92500362SAlexey Krasikov}
6585 92500362SAlexey KrasikovEOF
6586 92500362SAlexey Krasikov    if compile_prog "" "-lkeyutils"; then
6587 92500362SAlexey Krasikov        have_keyutils=yes
6588 92500362SAlexey Krasikov    fi
6589 92500362SAlexey Krasikovfi
6590 92500362SAlexey Krasikov
6591 675b9b53SMarc-André Lureau
6592 675b9b53SMarc-André Lureau##########################################
6593 e86ecd4bSJuan Quintela# End of CC checks
6594 e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
6595 e86ecd4bSJuan Quintela
6596 d83414e1SMarc-André Lureauwrite_c_skeleton
6597 d83414e1SMarc-André Lureau
6598 1d728c39SBlue Swirlif test "$gcov" = "yes" ; then
6599 bf0e56a3SMarc-André Lureau  :
6600 b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then
6601 086d5f75SPaolo Bonzini  QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
6602 086d5f75SPaolo Bonzini  debug=no
6603 086d5f75SPaolo Bonzinifi
6604 086d5f75SPaolo Bonziniif test "$debug_info" = "yes"; then
6605 086d5f75SPaolo Bonzini  CFLAGS="-g $CFLAGS"
6606 086d5f75SPaolo Bonzini  LDFLAGS="-g $LDFLAGS"
6607 086d5f75SPaolo Bonzinifi
6608 a5665051SPaolo Bonziniif test "$debug" = "no"; then
6609 a5665051SPaolo Bonzini  CFLAGS="-O2 $CFLAGS"
6610 a5665051SPaolo Bonzinifi
6611 086d5f75SPaolo Bonzini
6612 086d5f75SPaolo Bonzinicase "$ARCH" in
6613 086d5f75SPaolo Bonzinialpha)
6614 086d5f75SPaolo Bonzini  # Ensure there's only a single GP
6615 086d5f75SPaolo Bonzini  QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
6616 086d5f75SPaolo Bonzini;;
6617 086d5f75SPaolo Bonziniesac
6618 086d5f75SPaolo Bonzini
6619 086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then
6620 086d5f75SPaolo Bonzini  QEMU_CFLAGS="-p $QEMU_CFLAGS"
6621 086d5f75SPaolo Bonzini  QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
6622 086d5f75SPaolo Bonzinifi
6623 a316e378SJuan Quintela
6624 247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then
6625 db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
6626 db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
6627 d83414e1SMarc-André Lureau  if test "$have_asan_iface_h" = "no" ; then
6628 d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header missing." \
6629 d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
6630 d83414e1SMarc-André Lureau  elif test "$have_asan_iface_fiber" = "no" ; then
6631 d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header is too old." \
6632 d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
6633 d83414e1SMarc-André Lureau  fi
6634 247724cbSMarc-André Lureaufi
6635 0aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then
6636 0aebab04SLingfeng Yang  if test "$have_tsan_iface_fiber" = "yes" ; then
6637 0aebab04SLingfeng Yang    QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
6638 0aebab04SLingfeng Yang    QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
6639 0aebab04SLingfeng Yang  else
6640 0aebab04SLingfeng Yang    error_exit "Cannot enable TSAN due to missing fiber annotation interface."
6641 0aebab04SLingfeng Yang  fi
6642 0aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then
6643 0aebab04SLingfeng Yang  error_exit "Cannot enable TSAN due to missing sanitize thread interface."
6644 0aebab04SLingfeng Yangfi
6645 247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then
6646 db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
6647 db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
6648 247724cbSMarc-André Lureaufi
6649 247724cbSMarc-André Lureau
6650 6542aa9cSPeter Lieven##########################################
6651 6542aa9cSPeter Lieven# Do we have libnfs
6652 6542aa9cSPeter Lievenif test "$libnfs" != "no" ; then
6653 b7d769c9SPeter Lieven  if $pkg_config --atleast-version=1.9.3 libnfs; then
6654 6542aa9cSPeter Lieven    libnfs="yes"
6655 6542aa9cSPeter Lieven    libnfs_libs=$($pkg_config --libs libnfs)
6656 6542aa9cSPeter Lieven  else
6657 6542aa9cSPeter Lieven    if test "$libnfs" = "yes" ; then
6658 8efc9363SHu Tao      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6659 6542aa9cSPeter Lieven    fi
6660 6542aa9cSPeter Lieven    libnfs="no"
6661 6542aa9cSPeter Lieven  fi
6662 6542aa9cSPeter Lievenfi
6663 1d728c39SBlue Swirl
6664 3efac6ebSTomáš Golembiovský##########################################
6665 3efac6ebSTomáš Golembiovský# Do we have libudev
6666 3efac6ebSTomáš Golembiovskýif test "$libudev" != "no" ; then
6667 3efac6ebSTomáš Golembiovský  if $pkg_config libudev && test "$static" != "yes"; then
6668 3efac6ebSTomáš Golembiovský    libudev="yes"
6669 3efac6ebSTomáš Golembiovský    libudev_libs=$($pkg_config --libs libudev)
6670 3efac6ebSTomáš Golembiovský  else
6671 3efac6ebSTomáš Golembiovský    libudev="no"
6672 3efac6ebSTomáš Golembiovský  fi
6673 3efac6ebSTomáš Golembiovskýfi
6674 3efac6ebSTomáš Golembiovský
6675 6ca026cbSPeter Maydell# Now we've finished running tests it's OK to add -Werror to the compiler flags
6676 6ca026cbSPeter Maydellif test "$werror" = "yes"; then
6677 6ca026cbSPeter Maydell    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6678 6ca026cbSPeter Maydellfi
6679 6ca026cbSPeter Maydell
6680 0aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
6681 0aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then
6682 e86ecd4bSJuan Quintela    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6683 db5adeaaSPaolo Bonzini        QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
6684 e86ecd4bSJuan Quintela    fi
6685 e86ecd4bSJuan Quintelafi
6686 e86ecd4bSJuan Quintela
6687 94dd53c5SGerd Hoffmann# test if pod2man has --utf8 option
6688 94dd53c5SGerd Hoffmannif pod2man --help | grep -q utf8; then
6689 94dd53c5SGerd Hoffmann    POD2MAN="pod2man --utf8"
6690 94dd53c5SGerd Hoffmannelse
6691 94dd53c5SGerd Hoffmann    POD2MAN="pod2man"
6692 94dd53c5SGerd Hoffmannfi
6693 94dd53c5SGerd Hoffmann
6694 952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available
6695 952afb71SBlue Swirlif test "$mingw32" = "yes" ; then
6696 952afb71SBlue Swirl    for flag in --dynamicbase --no-seh --nxcompat; do
6697 e9a3591fSChristian Borntraeger        if ld_has $flag ; then
6698 db5adeaaSPaolo Bonzini            QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
6699 952afb71SBlue Swirl        fi
6700 952afb71SBlue Swirl    done
6701 952afb71SBlue Swirlfi
6702 952afb71SBlue Swirl
6703 7776ea6bSPhilippe Mathieu-Daudé# Disable OpenBSD W^X if available
6704 7776ea6bSPhilippe Mathieu-Daudéif test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6705 7776ea6bSPhilippe Mathieu-Daudé    cat > $TMPC <<EOF
6706 7776ea6bSPhilippe Mathieu-Daudé    int main(void) { return 0; }
6707 7776ea6bSPhilippe Mathieu-DaudéEOF
6708 7776ea6bSPhilippe Mathieu-Daudé    wx_ldflags="-Wl,-z,wxneeded"
6709 7776ea6bSPhilippe Mathieu-Daudé    if compile_prog "" "$wx_ldflags"; then
6710 7776ea6bSPhilippe Mathieu-Daudé        QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6711 7776ea6bSPhilippe Mathieu-Daudé    fi
6712 7776ea6bSPhilippe Mathieu-Daudéfi
6713 7776ea6bSPhilippe Mathieu-Daudé
6714 10ea68b3SEduardo Habkostqemu_confdir=$sysconfdir$confsuffix
6715 e26110cfSFam Zhengqemu_moddir=$libdir$confsuffix
6716 528ae5b8SEduardo Habkostqemu_datadir=$datadir$confsuffix
6717 834574eaSAnthony Liguoriqemu_localedir="$datadir/locale"
6718 a8260d38SDaniel P. Berrangéqemu_icondir="$datadir/icons"
6719 67ea9546SDaniel P. Berrangéqemu_desktopdir="$datadir/applications"
6720 5a67135aSbellard
6721 e0580342SKamil Rytarowski# We can only support ivshmem if we have eventfd
6722 e0580342SKamil Rytarowskiif [ "$eventfd" = "yes" ]; then
6723 e0580342SKamil Rytarowski  ivshmem=yes
6724 e0580342SKamil Rytarowskifi
6725 e0580342SKamil Rytarowski
6726 4b1c11fdSDaniel P. Berrangeif test "$softmmu" = yes ; then
6727 b855f8d1SPaolo Bonzini  if test "$linux" = yes; then
6728 7e462613SPaolo Bonzini    if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
6729 983eef5aSMeador Inge      virtfs=yes
6730 983eef5aSMeador Inge    else
6731 983eef5aSMeador Inge      if test "$virtfs" = yes; then
6732 7e462613SPaolo Bonzini        error_exit "VirtFS requires libcap-ng devel and libattr devel"
6733 983eef5aSMeador Inge      fi
6734 17500370SAndreas Färber      virtfs=no
6735 983eef5aSMeador Inge    fi
6736 fe8fc5aeSPaolo Bonzini    if test "$mpath" != no && test "$mpathpersist" = yes ; then
6737 fe8fc5aeSPaolo Bonzini      mpath=yes
6738 fe8fc5aeSPaolo Bonzini    else
6739 fe8fc5aeSPaolo Bonzini      if test "$mpath" = yes; then
6740 fe8fc5aeSPaolo Bonzini        error_exit "Multipath requires libmpathpersist devel"
6741 fe8fc5aeSPaolo Bonzini      fi
6742 fe8fc5aeSPaolo Bonzini      mpath=no
6743 fe8fc5aeSPaolo Bonzini    fi
6744 b855f8d1SPaolo Bonzini  else
6745 b855f8d1SPaolo Bonzini    if test "$virtfs" = yes; then
6746 b855f8d1SPaolo Bonzini      error_exit "VirtFS is supported only on Linux"
6747 b855f8d1SPaolo Bonzini    fi
6748 b855f8d1SPaolo Bonzini    virtfs=no
6749 fe8fc5aeSPaolo Bonzini    if test "$mpath" = yes; then
6750 fe8fc5aeSPaolo Bonzini      error_exit "Multipath is supported only on Linux"
6751 fe8fc5aeSPaolo Bonzini    fi
6752 fe8fc5aeSPaolo Bonzini    mpath=no
6753 17bff52bSM. Mohan Kumar  fi
6754 ff69fd8cSLaurent Vivierfi
6755 9d6bc27bSMichael Roth
6756 9d6bc27bSMichael Roth# Probe for guest agent support/options
6757 9d6bc27bSMichael Roth
6758 e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then
6759 a5125905SLaurent Vivier  if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6760 a5125905SLaurent Vivier      guest_agent=no
6761 a5125905SLaurent Vivier  elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6762 e8ef31a3SMichael Tokarev      guest_agent=yes
6763 e8ef31a3SMichael Tokarev  elif [ "$guest_agent" != yes ]; then
6764 e8ef31a3SMichael Tokarev      guest_agent=no
6765 e8ef31a3SMichael Tokarev  else
6766 e8ef31a3SMichael Tokarev      error_exit "Guest agent is not supported on this platform"
6767 ca35f780SPaolo Bonzini  fi
6768 4b1c11fdSDaniel P. Berrangefi
6769 ca35f780SPaolo Bonzini
6770 9d6bc27bSMichael Roth# Guest agent Window MSI  package
6771 9d6bc27bSMichael Roth
6772 9d6bc27bSMichael Rothif test "$guest_agent" != yes; then
6773 9d6bc27bSMichael Roth  if test "$guest_agent_msi" = yes; then
6774 9d6bc27bSMichael Roth    error_exit "MSI guest agent package requires guest agent enabled"
6775 9d6bc27bSMichael Roth  fi
6776 9d6bc27bSMichael Roth  guest_agent_msi=no
6777 9d6bc27bSMichael Rothelif test "$mingw32" != "yes"; then
6778 9d6bc27bSMichael Roth  if test "$guest_agent_msi" = "yes"; then
6779 9d6bc27bSMichael Roth    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6780 9d6bc27bSMichael Roth  fi
6781 9d6bc27bSMichael Roth  guest_agent_msi=no
6782 9d6bc27bSMichael Rothelif ! has wixl; then
6783 9d6bc27bSMichael Roth  if test "$guest_agent_msi" = "yes"; then
6784 9d6bc27bSMichael Roth    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6785 9d6bc27bSMichael Roth  fi
6786 9d6bc27bSMichael Roth  guest_agent_msi=no
6787 1a34904eSMichael Rothelse
6788 1a34904eSMichael Roth  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6789 1a34904eSMichael Roth  # disabled explicitly
6790 1a34904eSMichael Roth  if test "$guest_agent_msi" != "no"; then
6791 1a34904eSMichael Roth    guest_agent_msi=yes
6792 1a34904eSMichael Roth  fi
6793 9d6bc27bSMichael Rothfi
6794 9d6bc27bSMichael Roth
6795 1a34904eSMichael Rothif test "$guest_agent_msi" = "yes"; then
6796 9d6bc27bSMichael Roth  if test "$guest_agent_with_vss" = "yes"; then
6797 9d6bc27bSMichael Roth    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6798 9d6bc27bSMichael Roth  fi
6799 9d6bc27bSMichael Roth
6800 9d6bc27bSMichael Roth  if test "$QEMU_GA_MANUFACTURER" = ""; then
6801 9d6bc27bSMichael Roth    QEMU_GA_MANUFACTURER=QEMU
6802 9d6bc27bSMichael Roth  fi
6803 9d6bc27bSMichael Roth
6804 9d6bc27bSMichael Roth  if test "$QEMU_GA_DISTRO" = ""; then
6805 9d6bc27bSMichael Roth    QEMU_GA_DISTRO=Linux
6806 9d6bc27bSMichael Roth  fi
6807 9d6bc27bSMichael Roth
6808 9d6bc27bSMichael Roth  if test "$QEMU_GA_VERSION" = ""; then
6809 89138857SStefan Weil      QEMU_GA_VERSION=$(cat $source_path/VERSION)
6810 9d6bc27bSMichael Roth  fi
6811 9d6bc27bSMichael Roth
6812 89138857SStefan Weil  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6813 9d6bc27bSMichael Roth
6814 9d6bc27bSMichael Roth  case "$cpu" in
6815 9d6bc27bSMichael Roth  x86_64)
6816 9d6bc27bSMichael Roth    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6817 9d6bc27bSMichael Roth    ;;
6818 9d6bc27bSMichael Roth  i386)
6819 9d6bc27bSMichael Roth    QEMU_GA_MSI_ARCH="-D Arch=32"
6820 9d6bc27bSMichael Roth    ;;
6821 9d6bc27bSMichael Roth  *)
6822 9d6bc27bSMichael Roth    error_exit "CPU $cpu not supported for building installation package"
6823 9d6bc27bSMichael Roth    ;;
6824 9d6bc27bSMichael Roth  esac
6825 9d6bc27bSMichael Rothfi
6826 9d6bc27bSMichael Roth
6827 ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
6828 ca35f780SPaolo Bonziniroms=
6829 e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6830 e633a5c6SEric Blake        test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6831 e633a5c6SEric Blake        test "$softmmu" = yes ; then
6832 e57218b6SPeter Maydell    # Different host OS linkers have different ideas about the name of the ELF
6833 c65d5e4eSBrad Smith    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6834 c65d5e4eSBrad Smith    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6835 c65d5e4eSBrad Smith    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6836 e57218b6SPeter Maydell        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6837 e57218b6SPeter Maydell            ld_i386_emulation="$emu"
6838 ca35f780SPaolo Bonzini            roms="optionrom"
6839 e57218b6SPeter Maydell            break
6840 e57218b6SPeter Maydell        fi
6841 e57218b6SPeter Maydell    done
6842 ca35f780SPaolo Bonzinifi
6843 ca35f780SPaolo Bonzini
6844 2e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6845 9933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then
6846 2e33c3f8SThomas Huth  write_c_skeleton
6847 2e33c3f8SThomas Huth  if compile_prog "-march=z900" ""; then
6848 9933c305SChristian Borntraeger    roms="$roms s390-ccw"
6849 1ef6bfc2SPhilippe Mathieu-Daudé    # SLOF is required for building the s390-ccw firmware on s390x,
6850 1ef6bfc2SPhilippe Mathieu-Daudé    # since it is using the libnet code from SLOF for network booting.
6851 1ef6bfc2SPhilippe Mathieu-Daudé    if test -e "${source_path}/.git" ; then
6852 1ef6bfc2SPhilippe Mathieu-Daudé      git_submodules="${git_submodules} roms/SLOF"
6853 1ef6bfc2SPhilippe Mathieu-Daudé    fi
6854 9933c305SChristian Borntraeger  fi
6855 2e33c3f8SThomas Huthfi
6856 9933c305SChristian Borntraeger
6857 11cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler.
6858 11cde1c8SBruno Dominguez# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6859 11cde1c8SBruno Dominguezif has $cxx; then
6860 11cde1c8SBruno Dominguez    cat > $TMPC <<EOF
6861 11cde1c8SBruno Dominguezint c_function(void);
6862 11cde1c8SBruno Dominguezint main(void) { return c_function(); }
6863 11cde1c8SBruno DominguezEOF
6864 11cde1c8SBruno Dominguez
6865 11cde1c8SBruno Dominguez    compile_object
6866 11cde1c8SBruno Dominguez
6867 11cde1c8SBruno Dominguez    cat > $TMPCXX <<EOF
6868 11cde1c8SBruno Dominguezextern "C" {
6869 11cde1c8SBruno Dominguez   int c_function(void);
6870 11cde1c8SBruno Dominguez}
6871 11cde1c8SBruno Dominguezint c_function(void) { return 42; }
6872 11cde1c8SBruno DominguezEOF
6873 11cde1c8SBruno Dominguez
6874 11cde1c8SBruno Dominguez    update_cxxflags
6875 11cde1c8SBruno Dominguez
6876 086d5f75SPaolo Bonzini    if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
6877 11cde1c8SBruno Dominguez        # C++ compiler $cxx works ok with C compiler $cc
6878 11cde1c8SBruno Dominguez        :
6879 11cde1c8SBruno Dominguez    else
6880 11cde1c8SBruno Dominguez        echo "C++ compiler $cxx does not work with C compiler $cc"
6881 11cde1c8SBruno Dominguez        echo "Disabling C++ specific optional code"
6882 11cde1c8SBruno Dominguez        cxx=
6883 11cde1c8SBruno Dominguez    fi
6884 11cde1c8SBruno Dominguezelse
6885 11cde1c8SBruno Dominguez    echo "No C++ compiler available; disabling C++ specific optional code"
6886 11cde1c8SBruno Dominguez    cxx=
6887 11cde1c8SBruno Dominguezfi
6888 11cde1c8SBruno Dominguez
6889 02d34f62SCole Robinsonecho_version() {
6890 02d34f62SCole Robinson    if test "$1" = "yes" ; then
6891 02d34f62SCole Robinson        echo "($2)"
6892 02d34f62SCole Robinson    fi
6893 02d34f62SCole Robinson}
6894 02d34f62SCole Robinson
6895 50e12060SJan Kiszka# prepend pixman and ftd flags after all config tests are done
6896 50e12060SJan KiszkaQEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6897 8a99e9a3SPhilippe Mathieu-DaudéQEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6898 50e12060SJan Kiszkalibs_softmmu="$pixman_libs $libs_softmmu"
6899 5ca9388aSGerd Hoffmann
6900 98ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
6901 97a847bcSbellard
6902 dbd99ae3SStefan Weilecho "# Automatically generated by configure - do not modify" >config-all-disas.mak
6903 dbd99ae3SStefan Weil
6904 98ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
6905 98ec69acSJuan Quintelaecho >> $config_host_mak
6906 98ec69acSJuan Quintela
6907 e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
6908 99d7cc75SPaolo Bonziniecho "prefix=$prefix" >> $config_host_mak
6909 99d7cc75SPaolo Bonziniecho "bindir=$bindir" >> $config_host_mak
6910 3aa5d2beSAlon Levyecho "libdir=$libdir" >> $config_host_mak
6911 8bf188aaSMichael Tokarevecho "libexecdir=$libexecdir" >> $config_host_mak
6912 0f94d6daSAlon Levyecho "includedir=$includedir" >> $config_host_mak
6913 99d7cc75SPaolo Bonziniecho "mandir=$mandir" >> $config_host_mak
6914 99d7cc75SPaolo Bonziniecho "sysconfdir=$sysconfdir" >> $config_host_mak
6915 22d07038SEduardo Habkostecho "qemu_confdir=$qemu_confdir" >> $config_host_mak
6916 9afa52ceSEduardo Habkostecho "qemu_datadir=$qemu_datadir" >> $config_host_mak
6917 3d5eecabSGerd Hoffmannecho "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6918 9afa52ceSEduardo Habkostecho "qemu_docdir=$qemu_docdir" >> $config_host_mak
6919 e26110cfSFam Zhengecho "qemu_moddir=$qemu_moddir" >> $config_host_mak
6920 5a699bbbSLaszlo Ersekif test "$mingw32" = "no" ; then
6921 785c23aeSLuiz Capitulino  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6922 5a699bbbSLaszlo Ersekfi
6923 f354b1a1SMichael Tokarevecho "qemu_helperdir=$libexecdir" >> $config_host_mak
6924 834574eaSAnthony Liguoriecho "qemu_localedir=$qemu_localedir" >> $config_host_mak
6925 a8260d38SDaniel P. Berrangéecho "qemu_icondir=$qemu_icondir" >> $config_host_mak
6926 67ea9546SDaniel P. Berrangéecho "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6927 02f9135bSDaniel P. Berrangéecho "libs_cpu=$libs_cpu" >> $config_host_mak
6928 f544a488SPaolo Bonziniecho "libs_softmmu=$libs_softmmu" >> $config_host_mak
6929 cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak
6930 aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6931 f62bbee5SDaniel P. Berrangeecho "GIT_UPDATE=$git_update" >> $config_host_mak
6932 804edf29SJuan Quintela
6933 98ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak
6934 727e5283SPaolo Bonzini
6935 777dddc5SAlex Bennéeecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6936 777dddc5SAlex Bennéeecho "GLIB_LDFLAGS=$glib_ldflags" >> $config_host_mak
6937 777dddc5SAlex Bennée
6938 f3494749SPaolo Bonziniif test "$default_devices" = "yes" ; then
6939 f3494749SPaolo Bonzini  echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6940 f3494749SPaolo Bonzinielse
6941 f3494749SPaolo Bonzini  echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6942 f3494749SPaolo Bonzinifi
6943 f8393946Saurel32if test "$debug_tcg" = "yes" ; then
6944 2358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6945 f8393946Saurel32fi
6946 1625af87Saliguoriif test "$strip_opt" = "yes" ; then
6947 52ba784dSHollis Blanchard  echo "STRIP=${strip}" >> $config_host_mak
6948 1625af87Saliguorifi
6949 7d13299dSbellardif test "$bigendian" = "yes" ; then
6950 e2542fe2SJuan Quintela  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6951 97a847bcSbellardfi
6952 67b915a5Sbellardif test "$mingw32" = "yes" ; then
6953 98ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
6954 89138857SStefan Weil  rc_version=$(cat $source_path/VERSION)
6955 9fe6de94SBlue Swirl  version_major=${rc_version%%.*}
6956 9fe6de94SBlue Swirl  rc_version=${rc_version#*.}
6957 9fe6de94SBlue Swirl  version_minor=${rc_version%%.*}
6958 9fe6de94SBlue Swirl  rc_version=${rc_version#*.}
6959 9fe6de94SBlue Swirl  version_subminor=${rc_version%%.*}
6960 9fe6de94SBlue Swirl  version_micro=0
6961 9fe6de94SBlue Swirl  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6962 9fe6de94SBlue Swirl  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6963 d9840e25STomoki Sekiyama  if test "$guest_agent_with_vss" = "yes" ; then
6964 d9840e25STomoki Sekiyama    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6965 f33ca81fSMichael Roth    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6966 d9840e25STomoki Sekiyama    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6967 d9840e25STomoki Sekiyama  fi
6968 50cbebb9SMichael Roth  if test "$guest_agent_ntddscsi" = "yes" ; then
6969 76dc75caSTomáš Golembiovský    echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6970 50cbebb9SMichael Roth  fi
6971 1a34904eSMichael Roth  if test "$guest_agent_msi" = "yes"; then
6972 9dacf32dSYossi Hindin    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6973 9dacf32dSYossi Hindin    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6974 9dacf32dSYossi Hindin    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6975 9dacf32dSYossi Hindin    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6976 9dacf32dSYossi Hindin    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6977 9dacf32dSYossi Hindin    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6978 9dacf32dSYossi Hindin    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6979 9dacf32dSYossi Hindin  fi
6980 210fa556Spbrookelse
6981 35f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
6982 210fa556Spbrookfi
6983 128ab2ffSblueswir1
6984 dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
6985 dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
6986 dffcb71cSMark McLoughlinfi
6987 dffcb71cSMark McLoughlin
6988 83fb7adfSbellardif test "$darwin" = "yes" ; then
6989 98ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
6990 83fb7adfSbellardfi
6991 b29fe3edSmalc
6992 ec530c81Sbellardif test "$solaris" = "yes" ; then
6993 98ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
6994 ec530c81Sbellardfi
6995 179cf400SAndreas Färberif test "$haiku" = "yes" ; then
6996 179cf400SAndreas Färber  echo "CONFIG_HAIKU=y" >> $config_host_mak
6997 179cf400SAndreas Färberfi
6998 97a847bcSbellardif test "$static" = "yes" ; then
6999 98ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
7000 97a847bcSbellardfi
7001 1ba16968SStefan Weilif test "$profiler" = "yes" ; then
7002 2358a494SJuan Quintela  echo "CONFIG_PROFILER=y" >> $config_host_mak
7003 05c2a3e7Sbellardfi
7004 c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then
7005 c932ce31SPaolo Bonzini  echo "CONFIG_TOOLS=y" >> $config_host_mak
7006 c932ce31SPaolo Bonzinifi
7007 f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then
7008 f15bff25SPaolo Bonzini  echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
7009 f15bff25SPaolo Bonzinifi
7010 675b9b53SMarc-André Lureauif test "$slirp" != "no"; then
7011 98ec69acSJuan Quintela  echo "CONFIG_SLIRP=y" >> $config_host_mak
7012 e2d8830eSBrad  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
7013 675b9b53SMarc-André Lureau  echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
7014 675b9b53SMarc-André Lureau  echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
7015 675b9b53SMarc-André Lureaufi
7016 7c57bdd8SMarc-André Lureauif [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
7017 3b8593eeSMarkus Armbruster    echo "config-host.h: slirp/all" >> $config_host_mak
7018 c20709aaSbellardfi
7019 8a16d273Sthsif test "$vde" = "yes" ; then
7020 98ec69acSJuan Quintela  echo "CONFIG_VDE=y" >> $config_host_mak
7021 e2ad6f16SFam Zheng  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
7022 8a16d273Sthsfi
7023 58952137SVincenzo Maffioneif test "$netmap" = "yes" ; then
7024 58952137SVincenzo Maffione  echo "CONFIG_NETMAP=y" >> $config_host_mak
7025 58952137SVincenzo Maffionefi
7026 015a33bdSGongleiif test "$l2tpv3" = "yes" ; then
7027 015a33bdSGonglei  echo "CONFIG_L2TPV3=y" >> $config_host_mak
7028 015a33bdSGongleifi
7029 4cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then
7030 4cc600d2SPaolo Bonzini  echo "CONFIG_GPROF=y" >> $config_host_mak
7031 4cc600d2SPaolo Bonzinifi
7032 47e98658SCorey Bryantif test "$cap_ng" = "yes" ; then
7033 a358bca2SPaolo Bonzini  echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
7034 3f99cf57SPaolo Bonzini  echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
7035 47e98658SCorey Bryantfi
7036 2358a494SJuan Quintelaecho "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
7037 0c58ac1cSmalcfor drv in $audio_drv_list; do
7038 1ef1ec2aSGerd Hoffmann    def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
7039 ce3dc033SGerd Hoffmann    case "$drv" in
7040 051c7d5cSGerd Hoffmann	alsa | oss | pa | sdl)
7041 ce3dc033SGerd Hoffmann	    echo "$def=m" >> $config_host_mak ;;
7042 ce3dc033SGerd Hoffmann	*)
7043 ce3dc033SGerd Hoffmann	    echo "$def=y" >> $config_host_mak ;;
7044 ce3dc033SGerd Hoffmann    esac
7045 0c58ac1cSmalcdone
7046 478e943fSPaolo Bonziniif test "$alsa" = "yes" ; then
7047 478e943fSPaolo Bonzini    echo "CONFIG_ALSA=y" >> $config_host_mak
7048 478e943fSPaolo Bonzinifi
7049 b1149911SFam Zhengecho "ALSA_LIBS=$alsa_libs" >> $config_host_mak
7050 478e943fSPaolo Bonziniecho "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
7051 478e943fSPaolo Bonziniif test "$libpulse" = "yes" ; then
7052 478e943fSPaolo Bonzini    echo "CONFIG_LIBPULSE=y" >> $config_host_mak
7053 478e943fSPaolo Bonzinifi
7054 b1149911SFam Zhengecho "PULSE_LIBS=$pulse_libs" >> $config_host_mak
7055 478e943fSPaolo Bonziniecho "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
7056 b1149911SFam Zhengecho "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
7057 b1149911SFam Zhengecho "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
7058 b1149911SFam Zhengecho "OSS_LIBS=$oss_libs" >> $config_host_mak
7059 478e943fSPaolo Bonziniif test "$libjack" = "yes" ; then
7060 478e943fSPaolo Bonzini    echo "CONFIG_LIBJACK=y" >> $config_host_mak
7061 478e943fSPaolo Bonzinifi
7062 2e445703SGeoffrey McRaeecho "JACK_LIBS=$jack_libs" >> $config_host_mak
7063 d5631638Smalcif test "$audio_win_int" = "yes" ; then
7064 d5631638Smalc  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
7065 d5631638Smalcfi
7066 b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
7067 b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
7068 821601eaSJes Sorensenif test "$vnc" = "yes" ; then
7069 821601eaSJes Sorensen  echo "CONFIG_VNC=y" >> $config_host_mak
7070 821601eaSJes Sorensenfi
7071 2f9606b3Saliguoriif test "$vnc_sasl" = "yes" ; then
7072 98ec69acSJuan Quintela  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
7073 2f9606b3Saliguorifi
7074 2b1ccdf4SMarc-André Lureauecho "SASL_CFLAGS=$vnc_sasl_cflags" >> $config_host_mak
7075 2b1ccdf4SMarc-André Lureauecho "SASL_LIBS=$vnc_sasl_libs" >> $config_host_mak
7076 821601eaSJes Sorensenif test "$vnc_jpeg" = "yes" ; then
7077 2f6f5c7aSCorentin Chary  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
7078 2f6f5c7aSCorentin Charyfi
7079 2b1ccdf4SMarc-André Lureauecho "JPEG_CFLAGS=$vnc_jpeg_cflags" >> $config_host_mak
7080 2b1ccdf4SMarc-André Lureauecho "JPEG_LIBS=$vnc_jpeg_libs" >> $config_host_mak
7081 821601eaSJes Sorensenif test "$vnc_png" = "yes" ; then
7082 efe556adSCorentin Chary  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
7083 efe556adSCorentin Charyfi
7084 2b1ccdf4SMarc-André Lureauecho "PNG_CFLAGS=$vnc_png_cflags" >> $config_host_mak
7085 2b1ccdf4SMarc-André Lureauecho "PNG_LIBS=$vnc_png_libs" >> $config_host_mak
7086 6a021536SGerd Hoffmannif test "$xkbcommon" = "yes" ; then
7087 ade60d4fSMarc-André Lureau  echo "CONFIG_XKBCOMMON=y" >> $config_host_mak
7088 6a021536SGerd Hoffmann  echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
7089 6a021536SGerd Hoffmann  echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
7090 6a021536SGerd Hoffmannfi
7091 dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then
7092 dce512deSChristoph Hellwig  echo "CONFIG_XFS=y" >> $config_host_mak
7093 dce512deSChristoph Hellwigfi
7094 89138857SStefan Weilqemu_version=$(head $source_path/VERSION)
7095 98ec69acSJuan Quintelaecho "VERSION=$qemu_version" >>$config_host_mak
7096 2358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak
7097 98ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
7098 2b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
7099 a25dba17SJuan Quintelaif [ "$docs" = "yes" ] ; then
7100 98ec69acSJuan Quintela  echo "BUILD_DOCS=yes" >> $config_host_mak
7101 cc8ae6deSpbrookfi
7102 17969268SFam Zhengif test "$modules" = "yes"; then
7103 e26110cfSFam Zheng  # $shacmd can generate a hash started with digit, which the compiler doesn't
7104 e26110cfSFam Zheng  # like as an symbol. So prefix it with an underscore
7105 89138857SStefan Weil  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
7106 17969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
7107 17969268SFam Zhengfi
7108 bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then
7109 bd83c861SChristian Ehrhardt  echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
7110 bd83c861SChristian Ehrhardtfi
7111 e633a5c6SEric Blakeif test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
7112 8781595bSGerd Hoffmann  echo "CONFIG_X11=y" >> $config_host_mak
7113 8781595bSGerd Hoffmann  echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
7114 8781595bSGerd Hoffmann  echo "X11_LIBS=$x11_libs" >> $config_host_mak
7115 8781595bSGerd Hoffmannfi
7116 1ac88f28SJuan Quintelaif test "$sdl" = "yes" ; then
7117 96400a14SGerd Hoffmann  echo "CONFIG_SDL=m" >> $config_host_mak
7118 8ad3a7ddSJuan Quintela  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
7119 8ecc89f6SFam Zheng  echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
7120 a442fe2fSDaniel P. Berrangé  if test "$sdl_image" = "yes" ; then
7121 a442fe2fSDaniel P. Berrangé      echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
7122 a442fe2fSDaniel P. Berrangé  fi
7123 49ecc3faSbellardfi
7124 49ecc3faSbellardif test "$cocoa" = "yes" ; then
7125 98ec69acSJuan Quintela  echo "CONFIG_COCOA=y" >> $config_host_mak
7126 49ecc3faSbellardfi
7127 e08bb301SSamuel Thibaultif test "$iconv" = "yes" ; then
7128 e08bb301SSamuel Thibault  echo "CONFIG_ICONV=y" >> $config_host_mak
7129 e08bb301SSamuel Thibault  echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
7130 e08bb301SSamuel Thibault  echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
7131 e08bb301SSamuel Thibaultfi
7132 4d3b6f6eSbalrogif test "$curses" = "yes" ; then
7133 2373f7d5SGerd Hoffmann  echo "CONFIG_CURSES=m" >> $config_host_mak
7134 2373f7d5SGerd Hoffmann  echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
7135 2373f7d5SGerd Hoffmann  echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
7136 ab4e5602SJan Kiszkafi
7137 099d6b0fSRiku Voipioif test "$pipe2" = "yes" ; then
7138 2358a494SJuan Quintela  echo "CONFIG_PIPE2=y" >> $config_host_mak
7139 099d6b0fSRiku Voipiofi
7140 40ff6d7eSKevin Wolfif test "$accept4" = "yes" ; then
7141 40ff6d7eSKevin Wolf  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
7142 40ff6d7eSKevin Wolffi
7143 3ce34dfbSvibisreenivasanif test "$splice" = "yes" ; then
7144 2358a494SJuan Quintela  echo "CONFIG_SPLICE=y" >> $config_host_mak
7145 3ce34dfbSvibisreenivasanfi
7146 c2882b96SRiku Voipioif test "$eventfd" = "yes" ; then
7147 c2882b96SRiku Voipio  echo "CONFIG_EVENTFD=y" >> $config_host_mak
7148 c2882b96SRiku Voipiofi
7149 751bcc39SMarc-André Lureauif test "$memfd" = "yes" ; then
7150 751bcc39SMarc-André Lureau  echo "CONFIG_MEMFD=y" >> $config_host_mak
7151 751bcc39SMarc-André Lureaufi
7152 955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then
7153 955727d2SCortland Tölva  echo "CONFIG_USBFS=y" >> $config_host_mak
7154 955727d2SCortland Tölvafi
7155 d0927938SUlrich Hechtif test "$fallocate" = "yes" ; then
7156 d0927938SUlrich Hecht  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
7157 d0927938SUlrich Hechtfi
7158 3d4fa43eSKusanagi Kouichiif test "$fallocate_punch_hole" = "yes" ; then
7159 3d4fa43eSKusanagi Kouichi  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
7160 3d4fa43eSKusanagi Kouichifi
7161 b953f075SDenis V. Lunevif test "$fallocate_zero_range" = "yes" ; then
7162 b953f075SDenis V. Lunev  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
7163 b953f075SDenis V. Lunevfi
7164 ed911435SKevin Wolfif test "$posix_fallocate" = "yes" ; then
7165 ed911435SKevin Wolf  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
7166 ed911435SKevin Wolffi
7167 c727f47dSPeter Maydellif test "$sync_file_range" = "yes" ; then
7168 c727f47dSPeter Maydell  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
7169 c727f47dSPeter Maydellfi
7170 dace20dcSPeter Maydellif test "$fiemap" = "yes" ; then
7171 dace20dcSPeter Maydell  echo "CONFIG_FIEMAP=y" >> $config_host_mak
7172 dace20dcSPeter Maydellfi
7173 d0927938SUlrich Hechtif test "$dup3" = "yes" ; then
7174 d0927938SUlrich Hecht  echo "CONFIG_DUP3=y" >> $config_host_mak
7175 d0927938SUlrich Hechtfi
7176 4e0c6529SAlex Blighif test "$ppoll" = "yes" ; then
7177 4e0c6529SAlex Bligh  echo "CONFIG_PPOLL=y" >> $config_host_mak
7178 4e0c6529SAlex Blighfi
7179 cd758dd0SAlex Blighif test "$prctl_pr_set_timerslack" = "yes" ; then
7180 cd758dd0SAlex Bligh  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
7181 cd758dd0SAlex Blighfi
7182 3b6edd16SPeter Maydellif test "$epoll" = "yes" ; then
7183 3b6edd16SPeter Maydell  echo "CONFIG_EPOLL=y" >> $config_host_mak
7184 3b6edd16SPeter Maydellfi
7185 3b6edd16SPeter Maydellif test "$epoll_create1" = "yes" ; then
7186 3b6edd16SPeter Maydell  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
7187 3b6edd16SPeter Maydellfi
7188 a8fd1abaSPeter Maydellif test "$sendfile" = "yes" ; then
7189 a8fd1abaSPeter Maydell  echo "CONFIG_SENDFILE=y" >> $config_host_mak
7190 a8fd1abaSPeter Maydellfi
7191 51834341SRiku Voipioif test "$timerfd" = "yes" ; then
7192 51834341SRiku Voipio  echo "CONFIG_TIMERFD=y" >> $config_host_mak
7193 51834341SRiku Voipiofi
7194 9af5c906SRiku Voipioif test "$setns" = "yes" ; then
7195 9af5c906SRiku Voipio  echo "CONFIG_SETNS=y" >> $config_host_mak
7196 9af5c906SRiku Voipiofi
7197 38860a03SAleksandar Markovicif test "$clock_adjtime" = "yes" ; then
7198 38860a03SAleksandar Markovic  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
7199 38860a03SAleksandar Markovicfi
7200 5a03cd00SAleksandar Markovicif test "$syncfs" = "yes" ; then
7201 5a03cd00SAleksandar Markovic  echo "CONFIG_SYNCFS=y" >> $config_host_mak
7202 5a03cd00SAleksandar Markovicfi
7203 db37dd89SAleksandar Markovicif test "$kcov" = "yes" ; then
7204 db37dd89SAleksandar Markovic  echo "CONFIG_KCOV=y" >> $config_host_mak
7205 db37dd89SAleksandar Markovicfi
7206 3b3f24adSaurel32if test "$inotify" = "yes" ; then
7207 2358a494SJuan Quintela  echo "CONFIG_INOTIFY=y" >> $config_host_mak
7208 3b3f24adSaurel32fi
7209 c05c7a73SRiku Voipioif test "$inotify1" = "yes" ; then
7210 c05c7a73SRiku Voipio  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
7211 c05c7a73SRiku Voipiofi
7212 401bc051SPeter Maydellif test "$sem_timedwait" = "yes" ; then
7213 401bc051SPeter Maydell  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
7214 401bc051SPeter Maydellfi
7215 5c99fa37SKeno Fischerif test "$strchrnul" = "yes" ; then
7216 5c99fa37SKeno Fischer  echo "HAVE_STRCHRNUL=y" >> $config_host_mak
7217 5c99fa37SKeno Fischerfi
7218 8a792b03SJiufei Xueif test "$st_atim" = "yes" ; then
7219 8a792b03SJiufei Xue  echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
7220 8a792b03SJiufei Xuefi
7221 6ae9a1f4SJuan Quintelaif test "$byteswap_h" = "yes" ; then
7222 6ae9a1f4SJuan Quintela  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
7223 6ae9a1f4SJuan Quintelafi
7224 6ae9a1f4SJuan Quintelaif test "$bswap_h" = "yes" ; then
7225 6ae9a1f4SJuan Quintela  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
7226 6ae9a1f4SJuan Quintelafi
7227 769ce76dSAlexander Grafif test "$curl" = "yes" ; then
7228 d3399d7cSFam Zheng  echo "CONFIG_CURL=m" >> $config_host_mak
7229 b1d5a277SJuan Quintela  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
7230 6ebc91e5SFam Zheng  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
7231 769ce76dSAlexander Graffi
7232 2e4d9fb1Saurel32if test "$brlapi" = "yes" ; then
7233 98ec69acSJuan Quintela  echo "CONFIG_BRLAPI=y" >> $config_host_mak
7234 8eca2889SFam Zheng  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
7235 2e4d9fb1Saurel32fi
7236 a4ccabcfSAnthony Liguoriif test "$gtk" = "yes" ; then
7237 e0fb129cSGerd Hoffmann  echo "CONFIG_GTK=m" >> $config_host_mak
7238 a4ccabcfSAnthony Liguori  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
7239 014cb152SGerd Hoffmann  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
7240 925a0400SGerd Hoffmann  if test "$gtk_gl" = "yes" ; then
7241 925a0400SGerd Hoffmann    echo "CONFIG_GTK_GL=y" >> $config_host_mak
7242 925a0400SGerd Hoffmann  fi
7243 bbbf9bfbSStefan Weilfi
7244 f876b765SMarc-André Lureauif test "$gio" = "yes" ; then
7245 f876b765SMarc-André Lureau    echo "CONFIG_GIO=y" >> $config_host_mak
7246 f876b765SMarc-André Lureau    echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
7247 f876b765SMarc-André Lureau    echo "GIO_LIBS=$gio_libs" >> $config_host_mak
7248 25a97a56SMarc-André Lureau    echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
7249 f876b765SMarc-André Lureaufi
7250 a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
7251 ddbb0d09SDaniel P. Berrangeif test "$gnutls" = "yes" ; then
7252 ddbb0d09SDaniel P. Berrange  echo "CONFIG_GNUTLS=y" >> $config_host_mak
7253 a81df1b6SPaolo Bonzini  echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
7254 a81df1b6SPaolo Bonzini  echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
7255 ddbb0d09SDaniel P. Berrangefi
7256 91bfcdb0SDaniel P. Berrangeif test "$gcrypt" = "yes" ; then
7257 91bfcdb0SDaniel P. Berrange  echo "CONFIG_GCRYPT=y" >> $config_host_mak
7258 1f923c70SLongpeng(Mike)  if test "$gcrypt_hmac" = "yes" ; then
7259 1f923c70SLongpeng(Mike)    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
7260 1f923c70SLongpeng(Mike)  fi
7261 62893b67SDaniel P. Berrangefi
7262 91bfcdb0SDaniel P. Berrangeif test "$nettle" = "yes" ; then
7263 91bfcdb0SDaniel P. Berrange  echo "CONFIG_NETTLE=y" >> $config_host_mak
7264 becaeb72SRadim Krčmář  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
7265 a81df1b6SPaolo Bonzini  echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
7266 a81df1b6SPaolo Bonzini  echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
7267 ed754746SDaniel P. Berrangefi
7268 e0576942SDaniel P. Berrangéif test "$qemu_private_xts" = "yes" ; then
7269 e0576942SDaniel P. Berrangé  echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
7270 e0576942SDaniel P. Berrangéfi
7271 9a2fd434SDaniel P. Berrangeif test "$tasn1" = "yes" ; then
7272 9a2fd434SDaniel P. Berrange  echo "CONFIG_TASN1=y" >> $config_host_mak
7273 9a2fd434SDaniel P. Berrangefi
7274 8953caf3SDaniel P. Berrangeif test "$auth_pam" = "yes" ; then
7275 8953caf3SDaniel P. Berrange    echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
7276 8953caf3SDaniel P. Berrangefi
7277 559607eaSDaniel P. Berrangeif test "$have_ifaddrs_h" = "yes" ; then
7278 559607eaSDaniel P. Berrange    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
7279 559607eaSDaniel P. Berrangefi
7280 e865b97fSChen Gangif test "$have_drm_h" = "yes" ; then
7281 e865b97fSChen Gang  echo "HAVE_DRM_H=y" >> $config_host_mak
7282 e865b97fSChen Gangfi
7283 6b39b063SEric Blakeif test "$have_broken_size_max" = "yes" ; then
7284 6b39b063SEric Blake    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
7285 6b39b063SEric Blakefi
7286 9df8b20dSThomas Huthif test "$have_openpty" = "yes" ; then
7287 9df8b20dSThomas Huth    echo "HAVE_OPENPTY=y" >> $config_host_mak
7288 9df8b20dSThomas Huthfi
7289 2a4b472cSDavid CARLIERif test "$have_sys_signal_h" = "yes" ; then
7290 2a4b472cSDavid CARLIER    echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
7291 2a4b472cSDavid CARLIERfi
7292 277abf15SJan Vesely
7293 277abf15SJan Vesely# Work around a system header bug with some kernel/XFS header
7294 277abf15SJan Vesely# versions where they both try to define 'struct fsxattr':
7295 277abf15SJan Vesely# xfs headers will not try to redefine structs from linux headers
7296 277abf15SJan Vesely# if this macro is set.
7297 277abf15SJan Veselyif test "$have_fsxattr" = "yes" ; then
7298 277abf15SJan Vesely    echo "HAVE_FSXATTR=y" >> $config_host_mak
7299 277abf15SJan Veselyfi
7300 1efad060SFam Zhengif test "$have_copy_file_range" = "yes" ; then
7301 1efad060SFam Zheng    echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
7302 1efad060SFam Zhengfi
7303 bbbf9bfbSStefan Weilif test "$vte" = "yes" ; then
7304 bbbf9bfbSStefan Weil  echo "CONFIG_VTE=y" >> $config_host_mak
7305 a4ccabcfSAnthony Liguori  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
7306 e0fb129cSGerd Hoffmann  echo "VTE_LIBS=$vte_libs" >> $config_host_mak
7307 a4ccabcfSAnthony Liguorifi
7308 9d9e1521SGerd Hoffmannif test "$virglrenderer" = "yes" ; then
7309 9d9e1521SGerd Hoffmann  echo "CONFIG_VIRGL=y" >> $config_host_mak
7310 9d9e1521SGerd Hoffmann  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
7311 9d9e1521SGerd Hoffmann  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
7312 9d9e1521SGerd Hoffmannfi
7313 e37630caSaliguoriif test "$xen" = "yes" ; then
7314 6dbd588aSJan Kiszka  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
7315 d5b93ddfSAnthony PERARD  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
7316 e37630caSaliguorifi
7317 5c6c3a6cSChristoph Hellwigif test "$linux_aio" = "yes" ; then
7318 5c6c3a6cSChristoph Hellwig  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
7319 5c6c3a6cSChristoph Hellwigfi
7320 c10dd856SAarushi Mehtaif test "$linux_io_uring" = "yes" ; then
7321 c10dd856SAarushi Mehta  echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
7322 c10dd856SAarushi Mehta  echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
7323 c10dd856SAarushi Mehta  echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
7324 c10dd856SAarushi Mehtafi
7325 758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" = "yes" ; then
7326 758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_ATTR=y" >> $config_host_mak
7327 ec0d5893SMarc-André Lureau  echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
7328 758e8e38SVenkateswararao Jujjuri (JV)fi
7329 4f26f2b6SAvi Kivityif test "$libattr" = "yes" ; then
7330 4f26f2b6SAvi Kivity  echo "CONFIG_LIBATTR=y" >> $config_host_mak
7331 4f26f2b6SAvi Kivityfi
7332 983eef5aSMeador Ingeif test "$virtfs" = "yes" ; then
7333 758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_VIRTFS=y" >> $config_host_mak
7334 758e8e38SVenkateswararao Jujjuri (JV)fi
7335 fe8fc5aeSPaolo Bonziniif test "$mpath" = "yes" ; then
7336 fe8fc5aeSPaolo Bonzini  echo "CONFIG_MPATH=y" >> $config_host_mak
7337 1b0578f5SMurilo Opsfelder Araujo  if test "$mpathpersist_new_api" = "yes"; then
7338 1b0578f5SMurilo Opsfelder Araujo    echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
7339 1b0578f5SMurilo Opsfelder Araujo  fi
7340 fe8fc5aeSPaolo Bonzinifi
7341 5e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then
7342 5e9be92dSNicholas Bellinger  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
7343 5e9be92dSNicholas Bellingerfi
7344 af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then
7345 af3bba76SPaolo Bonzini  echo "CONFIG_VHOST_NET=y" >> $config_host_mak
7346 af3bba76SPaolo Bonzinifi
7347 af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then
7348 56f41de7SPaolo Bonzini  echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
7349 03ce5744SNikolay Nikolaevfi
7350 108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then
7351 108a6481SCindy Lu  echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
7352 108a6481SCindy Lufi
7353 042cea27SGongleiif test "$vhost_crypto" = "yes" ; then
7354 042cea27SGonglei  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
7355 042cea27SGongleifi
7356 fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then
7357 fc0b9b0eSStefan Hajnoczi  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
7358 5fe97d88SStefano Garzarella  if test "$vhost_user" = "yes" ; then
7359 5fe97d88SStefano Garzarella    echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
7360 5fe97d88SStefano Garzarella  fi
7361 fc0b9b0eSStefan Hajnoczifi
7362 299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then
7363 299e6f19SPaolo Bonzini  echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
7364 299e6f19SPaolo Bonzinifi
7365 e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then
7366 e6a74868SMarc-André Lureau  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
7367 e6a74868SMarc-André Lureaufi
7368 108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then
7369 108a6481SCindy Lu  echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
7370 108a6481SCindy Lufi
7371 98fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then
7372 98fc1adaSDr. David Alan Gilbert  echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
7373 98fc1adaSDr. David Alan Gilbertfi
7374 77755340Sthsif test "$blobs" = "yes" ; then
7375 98ec69acSJuan Quintela  echo "INSTALL_BLOBS=yes" >> $config_host_mak
7376 77755340Sthsfi
7377 bf9298b9Saliguoriif test "$iovec" = "yes" ; then
7378 2358a494SJuan Quintela  echo "CONFIG_IOVEC=y" >> $config_host_mak
7379 bf9298b9Saliguorifi
7380 ceb42de8Saliguoriif test "$preadv" = "yes" ; then
7381 2358a494SJuan Quintela  echo "CONFIG_PREADV=y" >> $config_host_mak
7382 ceb42de8Saliguorifi
7383 e3971d61SPhilippe Mathieu-Daudéif test "$fdt" != "no" ; then
7384 3f0855b1SJuan Quintela  echo "CONFIG_FDT=y" >> $config_host_mak
7385 4a96337dSPaolo Bonzini  echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak
7386 4a96337dSPaolo Bonzini  echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak
7387 f652e6afSaurel32fi
7388 a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then
7389 a40161cbSPaolo Bonzini  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
7390 a40161cbSPaolo Bonzinifi
7391 dcc38d1cSMarcelo Tosattiif test "$signalfd" = "yes" ; then
7392 dcc38d1cSMarcelo Tosatti  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
7393 dcc38d1cSMarcelo Tosattifi
7394 d339d766SRichard W.M. Jonesif test "$optreset" = "yes" ; then
7395 d339d766SRichard W.M. Jones  echo "HAVE_OPTRESET=y" >> $config_host_mak
7396 d339d766SRichard W.M. Jonesfi
7397 b3f6ea7eSPaolo Bonziniif test "$tcg" = "yes"; then
7398 b3f6ea7eSPaolo Bonzini  echo "CONFIG_TCG=y" >> $config_host_mak
7399 9195b2c2SStefan Weil  if test "$tcg_interpreter" = "yes" ; then
7400 9195b2c2SStefan Weil    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
7401 9195b2c2SStefan Weil  fi
7402 b3f6ea7eSPaolo Bonzinifi
7403 5f6b9e8fSBlue Swirlif test "$fdatasync" = "yes" ; then
7404 5f6b9e8fSBlue Swirl  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
7405 5f6b9e8fSBlue Swirlfi
7406 e78815a5SAndreas Färberif test "$madvise" = "yes" ; then
7407 e78815a5SAndreas Färber  echo "CONFIG_MADVISE=y" >> $config_host_mak
7408 e78815a5SAndreas Färberfi
7409 e78815a5SAndreas Färberif test "$posix_madvise" = "yes" ; then
7410 e78815a5SAndreas Färber  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
7411 e78815a5SAndreas Färberfi
7412 9bc5a719SAndreas Gustafssonif test "$posix_memalign" = "yes" ; then
7413 9bc5a719SAndreas Gustafsson  echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
7414 9bc5a719SAndreas Gustafssonfi
7415 5e5733e5SMarc-André Lureauif test "$zlib" != "no" ; then
7416 5e5733e5SMarc-André Lureau    echo "CONFIG_ZLIB=y" >> $config_host_mak
7417 5e5733e5SMarc-André Lureau    echo "ZLIB_CFLAGS=$zlib_cflags" >> $config_host_mak
7418 5e5733e5SMarc-André Lureau    echo "ZLIB_LIBS=$zlib_libs" >> $config_host_mak
7419 5e5733e5SMarc-André Lureaufi
7420 cd4ec0b4SGerd Hoffmannif test "$spice" = "yes" ; then
7421 cd4ec0b4SGerd Hoffmann  echo "CONFIG_SPICE=y" >> $config_host_mak
7422 2634733cSPaolo Bonzini  echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
7423 2634733cSPaolo Bonzini  echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
7424 cd4ec0b4SGerd Hoffmannfi
7425 cd4ec0b4SGerd Hoffmann
7426 7b02f544SMarc-André Lureauif test "$smartcard" = "yes" ; then
7427 7b02f544SMarc-André Lureau  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
7428 7b62bf5aSFam Zheng  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
7429 7b62bf5aSFam Zheng  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
7430 111a38b0SRobert Relyeafi
7431 111a38b0SRobert Relyea
7432 2b2325ffSGerd Hoffmannif test "$libusb" = "yes" ; then
7433 2b2325ffSGerd Hoffmann  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
7434 b878b652SFam Zheng  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
7435 b878b652SFam Zheng  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
7436 2b2325ffSGerd Hoffmannfi
7437 2b2325ffSGerd Hoffmann
7438 69354a83SHans de Goedeif test "$usb_redir" = "yes" ; then
7439 69354a83SHans de Goede  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
7440 cc7923fcSFam Zheng  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
7441 cc7923fcSFam Zheng  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
7442 69354a83SHans de Goedefi
7443 69354a83SHans de Goede
7444 da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then
7445 da076ffeSGerd Hoffmann  echo "CONFIG_OPENGL=y" >> $config_host_mak
7446 da076ffeSGerd Hoffmann  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
7447 014cb152SGerd Hoffmann  if test "$opengl_dmabuf" = "yes" ; then
7448 014cb152SGerd Hoffmann    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
7449 014cb152SGerd Hoffmann  fi
7450 20ff075bSMichael Wallefi
7451 20ff075bSMichael Walle
7452 d52c454aSMarc-André Lureauif test "$gbm" = "yes" ; then
7453 d52c454aSMarc-André Lureau    echo "CONFIG_GBM=y" >> $config_host_mak
7454 d52c454aSMarc-André Lureau    echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
7455 d52c454aSMarc-André Lureau    echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
7456 d52c454aSMarc-André Lureaufi
7457 d52c454aSMarc-André Lureau
7458 d52c454aSMarc-André Lureau
7459 5a22ab71SYang Zhongif test "$malloc_trim" = "yes" ; then
7460 5a22ab71SYang Zhong  echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7461 5a22ab71SYang Zhongfi
7462 5a22ab71SYang Zhong
7463 99f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then
7464 99f2dbd3SLiang Li  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7465 99f2dbd3SLiang Lifi
7466 99f2dbd3SLiang Li
7467 6b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then
7468 6b8cd447SRobert Hoo  echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
7469 6b8cd447SRobert Hoofi
7470 6b8cd447SRobert Hoo
7471 607dacd0Sqiaonuohanif test "$lzo" = "yes" ; then
7472 607dacd0Sqiaonuohan  echo "CONFIG_LZO=y" >> $config_host_mak
7473 *708eab42SMarc-André Lureau  echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
7474 607dacd0Sqiaonuohanfi
7475 607dacd0Sqiaonuohan
7476 607dacd0Sqiaonuohanif test "$snappy" = "yes" ; then
7477 607dacd0Sqiaonuohan  echo "CONFIG_SNAPPY=y" >> $config_host_mak
7478 *708eab42SMarc-André Lureau  echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
7479 607dacd0Sqiaonuohanfi
7480 607dacd0Sqiaonuohan
7481 6b383c08SPeter Wuif test "$bzip2" = "yes" ; then
7482 6b383c08SPeter Wu  echo "CONFIG_BZIP2=y" >> $config_host_mak
7483 6b383c08SPeter Wu  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7484 6b383c08SPeter Wufi
7485 6b383c08SPeter Wu
7486 83bc1f97SJulio Faraccoif test "$lzfse" = "yes" ; then
7487 83bc1f97SJulio Faracco  echo "CONFIG_LZFSE=y" >> $config_host_mak
7488 83bc1f97SJulio Faracco  echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7489 83bc1f97SJulio Faraccofi
7490 83bc1f97SJulio Faracco
7491 3a678481SJuan Quintelaif test "$zstd" = "yes" ; then
7492 3a678481SJuan Quintela  echo "CONFIG_ZSTD=y" >> $config_host_mak
7493 5e5733e5SMarc-André Lureau  echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
7494 5e5733e5SMarc-André Lureau  echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
7495 3a678481SJuan Quintelafi
7496 3a678481SJuan Quintela
7497 c589b249SRonnie Sahlbergif test "$libiscsi" = "yes" ; then
7498 d3399d7cSFam Zheng  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
7499 6ebc91e5SFam Zheng  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7500 6ebc91e5SFam Zheng  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7501 c589b249SRonnie Sahlbergfi
7502 c589b249SRonnie Sahlberg
7503 6542aa9cSPeter Lievenif test "$libnfs" = "yes" ; then
7504 4be4879fSColin Lord  echo "CONFIG_LIBNFS=m" >> $config_host_mak
7505 4be4879fSColin Lord  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7506 6542aa9cSPeter Lievenfi
7507 6542aa9cSPeter Lieven
7508 f794573eSEduardo Otuboif test "$seccomp" = "yes"; then
7509 f794573eSEduardo Otubo  echo "CONFIG_SECCOMP=y" >> $config_host_mak
7510 c3883e1fSFam Zheng  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7511 c3883e1fSFam Zheng  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7512 f794573eSEduardo Otubofi
7513 f794573eSEduardo Otubo
7514 83fb7adfSbellard# XXX: suppress that
7515 7d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
7516 2358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
7517 7d3505c5Sbellardfi
7518 7d3505c5Sbellard
7519 4d9310f4SDaniel P. Berrangeif test "$localtime_r" = "yes" ; then
7520 4d9310f4SDaniel P. Berrange  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7521 4d9310f4SDaniel P. Berrangefi
7522 3556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then
7523 3556c233SPaolo Bonzini  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7524 3556c233SPaolo Bonzinifi
7525 f27aaf4bSChristian Brunnerif test "$rbd" = "yes" ; then
7526 d3399d7cSFam Zheng  echo "CONFIG_RBD=m" >> $config_host_mak
7527 6ebc91e5SFam Zheng  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7528 f27aaf4bSChristian Brunnerfi
7529 20ff6c80SAnthony Liguori
7530 7c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7531 70c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then
7532 70c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7533 70c60c08SStefan Hajnoczielse
7534 70c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7535 70c60c08SStefan Hajnoczifi
7536 d0e2fce5SAneesh Kumar K.V
7537 7d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then
7538 7d992e4dSPeter Lieven  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7539 7d992e4dSPeter Lievenfi
7540 7d992e4dSPeter Lieven
7541 f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then
7542 f0d92b56SLongpeng(Mike)  echo "CONFIG_AF_ALG=y" >> $config_host_mak
7543 f0d92b56SLongpeng(Mike)fi
7544 f0d92b56SLongpeng(Mike)
7545 d2042378SAneesh Kumar K.Vif test "$open_by_handle_at" = "yes" ; then
7546 d2042378SAneesh Kumar K.V  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7547 d2042378SAneesh Kumar K.Vfi
7548 d2042378SAneesh Kumar K.V
7549 e06a765eSHarsh Prateek Boraif test "$linux_magic_h" = "yes" ; then
7550 e06a765eSHarsh Prateek Bora  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7551 e06a765eSHarsh Prateek Borafi
7552 e06a765eSHarsh Prateek Bora
7553 3f4349dcSKevin Wolfif test "$valgrind_h" = "yes" ; then
7554 3f4349dcSKevin Wolf  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7555 3f4349dcSKevin Wolffi
7556 3f4349dcSKevin Wolf
7557 d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then
7558 d83414e1SMarc-André Lureau    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7559 d83414e1SMarc-André Lureaufi
7560 d83414e1SMarc-André Lureau
7561 0aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
7562 0aebab04SLingfeng Yang    echo "CONFIG_TSAN=y" >> $config_host_mak
7563 0aebab04SLingfeng Yangfi
7564 0aebab04SLingfeng Yang
7565 8ab1bf12SLuiz Capitulinoif test "$has_environ" = "yes" ; then
7566 8ab1bf12SLuiz Capitulino  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7567 8ab1bf12SLuiz Capitulinofi
7568 8ab1bf12SLuiz Capitulino
7569 76a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then
7570 76a347e1SRichard Henderson  echo "CONFIG_CPUID_H=y" >> $config_host_mak
7571 76a347e1SRichard Hendersonfi
7572 76a347e1SRichard Henderson
7573 f540166bSRichard Hendersonif test "$int128" = "yes" ; then
7574 f540166bSRichard Henderson  echo "CONFIG_INT128=y" >> $config_host_mak
7575 f540166bSRichard Hendersonfi
7576 f540166bSRichard Henderson
7577 7ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then
7578 7ebee43eSRichard Henderson  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7579 7ebee43eSRichard Hendersonfi
7580 7ebee43eSRichard Henderson
7581 e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then
7582 e6cd4bb5SRichard Henderson  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7583 e6cd4bb5SRichard Hendersonfi
7584 e6cd4bb5SRichard Henderson
7585 df79b996SRichard Hendersonif test "$atomic64" = "yes" ; then
7586 df79b996SRichard Henderson  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7587 df79b996SRichard Hendersonfi
7588 df79b996SRichard Henderson
7589 db8aaae8SRichard Hendersonif test "$attralias" = "yes" ; then
7590 db8aaae8SRichard Henderson  echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
7591 db8aaae8SRichard Hendersonfi
7592 db8aaae8SRichard Henderson
7593 1e6e9acaSRichard Hendersonif test "$getauxval" = "yes" ; then
7594 1e6e9acaSRichard Henderson  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7595 1e6e9acaSRichard Hendersonfi
7596 1e6e9acaSRichard Henderson
7597 eb100396SBharata B Raoif test "$glusterfs" = "yes" ; then
7598 d3399d7cSFam Zheng  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7599 6ebc91e5SFam Zheng  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7600 6ebc91e5SFam Zheng  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7601 eb100396SBharata B Raofi
7602 eb100396SBharata B Rao
7603 d85fa9ebSJeff Codyif test "$glusterfs_xlator_opt" = "yes" ; then
7604 d85fa9ebSJeff Cody  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7605 d85fa9ebSJeff Codyfi
7606 d85fa9ebSJeff Cody
7607 0c14fb47SBharata B Raoif test "$glusterfs_discard" = "yes" ; then
7608 0c14fb47SBharata B Rao  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7609 0c14fb47SBharata B Raofi
7610 0c14fb47SBharata B Rao
7611 df3a429aSNiels de Vosif test "$glusterfs_fallocate" = "yes" ; then
7612 df3a429aSNiels de Vos  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7613 df3a429aSNiels de Vosfi
7614 df3a429aSNiels de Vos
7615 7c815372SBharata B Raoif test "$glusterfs_zerofill" = "yes" ; then
7616 7c815372SBharata B Rao  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7617 7c815372SBharata B Raofi
7618 7c815372SBharata B Rao
7619 e014dbe7SPrasanna Kumar Kaleverif test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7620 e014dbe7SPrasanna Kumar Kalever  echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7621 e014dbe7SPrasanna Kumar Kaleverfi
7622 e014dbe7SPrasanna Kumar Kalever
7623 0e3b891fSNiels de Vosif test "$glusterfs_iocb_has_stat" = "yes" ; then
7624 0e3b891fSNiels de Vos  echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7625 0e3b891fSNiels de Vosfi
7626 0e3b891fSNiels de Vos
7627 b10d49d7SPino Toscanoif test "$libssh" = "yes" ; then
7628 b10d49d7SPino Toscano  echo "CONFIG_LIBSSH=m" >> $config_host_mak
7629 b10d49d7SPino Toscano  echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7630 b10d49d7SPino Toscano  echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7631 0a12ec87SRichard W.M. Jonesfi
7632 0a12ec87SRichard W.M. Jones
7633 ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then
7634 ed1701c6SDr. David Alan Gilbert  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7635 ed1701c6SDr. David Alan Gilbertfi
7636 ed1701c6SDr. David Alan Gilbert
7637 3b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then
7638 3cae16dbSPaolo Bonzini  echo 'CONFIG_TPM=y' >> $config_host_mak
7639 3b8acc11SPaolo Bonzinifi
7640 3b8acc11SPaolo Bonzini
7641 5b808275SLluís Vilanovaecho "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7642 5b808275SLluís Vilanovaif have_backend "nop"; then
7643 6d8a764eSLluís  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7644 22890ab5SPrerna Saxenafi
7645 5b808275SLluís Vilanovaif have_backend "simple"; then
7646 6d8a764eSLluís  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7647 6d8a764eSLluís  # Set the appropriate trace file.
7648 953ffe0fSAndreas Färber  trace_file="\"$trace_file-\" FMT_pid"
7649 9410b56cSPrerna Saxenafi
7650 ed7f5f1dSPaolo Bonziniif have_backend "log"; then
7651 ed7f5f1dSPaolo Bonzini  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7652 6d8a764eSLluísfi
7653 5b808275SLluís Vilanovaif have_backend "ust"; then
7654 6d8a764eSLluís  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7655 a81df1b6SPaolo Bonzini  echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
7656 a81df1b6SPaolo Bonzini  echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
7657 6d8a764eSLluísfi
7658 5b808275SLluís Vilanovaif have_backend "dtrace"; then
7659 6d8a764eSLluís  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7660 6d8a764eSLluís  if test "$trace_backend_stap" = "yes" ; then
7661 6d8a764eSLluís    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7662 6d8a764eSLluís  fi
7663 c276b17dSDaniel P. Berrangefi
7664 5b808275SLluís Vilanovaif have_backend "ftrace"; then
7665 781e9545SEiichi Tsukata  if test "$linux" = "yes" ; then
7666 781e9545SEiichi Tsukata    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7667 781e9545SEiichi Tsukata  else
7668 21684af0SStewart Smith    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7669 781e9545SEiichi Tsukata  fi
7670 781e9545SEiichi Tsukatafi
7671 0a852417SPaul Durrantif have_backend "syslog"; then
7672 0a852417SPaul Durrant  if test "$posix_syslog" = "yes" ; then
7673 0a852417SPaul Durrant    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7674 0a852417SPaul Durrant  else
7675 0a852417SPaul Durrant    feature_not_found "syslog(trace backend)" "syslog not available"
7676 0a852417SPaul Durrant  fi
7677 0a852417SPaul Durrantfi
7678 9410b56cSPrerna Saxenaecho "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7679 9410b56cSPrerna Saxena
7680 2da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
7681 2da776dbSMichael R. Hines  echo "CONFIG_RDMA=y" >> $config_host_mak
7682 392fb643SFam Zheng  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7683 2da776dbSMichael R. Hinesfi
7684 2da776dbSMichael R. Hines
7685 21ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then
7686 21ab34c9SMarcel Apfelbaum  echo "CONFIG_PVRDMA=y" >> $config_host_mak
7687 21ab34c9SMarcel Apfelbaumfi
7688 21ab34c9SMarcel Apfelbaum
7689 575b22b1SLaurent Vivierif test "$have_rtnetlink" = "yes" ; then
7690 575b22b1SLaurent Vivier  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7691 575b22b1SLaurent Vivierfi
7692 575b22b1SLaurent Vivier
7693 ed279a06SKlim Kireevif test "$libxml2" = "yes" ; then
7694 ed279a06SKlim Kireev  echo "CONFIG_LIBXML2=y" >> $config_host_mak
7695 ed279a06SKlim Kireev  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7696 ed279a06SKlim Kireev  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7697 ed279a06SKlim Kireevfi
7698 ed279a06SKlim Kireev
7699 a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then
7700 a6b1d4c0SChanglong Xie  echo "CONFIG_REPLICATION=y" >> $config_host_mak
7701 a6b1d4c0SChanglong Xiefi
7702 a6b1d4c0SChanglong Xie
7703 6a02c806SStefan Hajnocziif test "$have_af_vsock" = "yes" ; then
7704 6a02c806SStefan Hajnoczi  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7705 6a02c806SStefan Hajnoczifi
7706 6a02c806SStefan Hajnoczi
7707 4d04351fSChristopher Covingtonif test "$have_sysmacros" = "yes" ; then
7708 4d04351fSChristopher Covington  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7709 4d04351fSChristopher Covingtonfi
7710 4d04351fSChristopher Covington
7711 49e00a18SAndreas Grapentinif test "$have_static_assert" = "yes" ; then
7712 49e00a18SAndreas Grapentin  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7713 49e00a18SAndreas Grapentinfi
7714 49e00a18SAndreas Grapentin
7715 e674605fSTomáš Golembiovskýif test "$have_utmpx" = "yes" ; then
7716 e674605fSTomáš Golembiovský  echo "HAVE_UTMPX=y" >> $config_host_mak
7717 e674605fSTomáš Golembiovskýfi
7718 db1ed1abSRichard Hendersonif test "$have_getrandom" = "yes" ; then
7719 db1ed1abSRichard Henderson  echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7720 db1ed1abSRichard Hendersonfi
7721 e0580342SKamil Rytarowskiif test "$ivshmem" = "yes" ; then
7722 e0580342SKamil Rytarowski  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7723 e0580342SKamil Rytarowskifi
7724 e219c499SRichard Hendersonif test "$capstone" != "no" ; then
7725 8ca80760SRichard Henderson  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7726 8ca80760SRichard Hendersonfi
7727 ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then
7728 ba59fb77SPaolo Bonzini  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7729 ba59fb77SPaolo Bonzinifi
7730 e0580342SKamil Rytarowski
7731 5c312079SDr. David Alan Gilbert# Hold two types of flag:
7732 5c312079SDr. David Alan Gilbert#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
7733 5c312079SDr. David Alan Gilbert#                                     a thread we have a handle to
7734 479a5747SRoman Bolshakov#   CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7735 5c312079SDr. David Alan Gilbert#                                     platform
7736 479a5747SRoman Bolshakovif test "$pthread_setname_np_w_tid" = "yes" ; then
7737 5c312079SDr. David Alan Gilbert  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7738 479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7739 479a5747SRoman Bolshakovelif test "$pthread_setname_np_wo_tid" = "yes" ; then
7740 479a5747SRoman Bolshakov  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7741 479a5747SRoman Bolshakov  echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7742 5c312079SDr. David Alan Gilbertfi
7743 5c312079SDr. David Alan Gilbert
7744 17824406SJunyan Heif test "$libpmem" = "yes" ; then
7745 17824406SJunyan He  echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7746 17824406SJunyan Hefi
7747 17824406SJunyan He
7748 21b2eca6SJingqi Liuif test "$libdaxctl" = "yes" ; then
7749 21b2eca6SJingqi Liu  echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
7750 21b2eca6SJingqi Liufi
7751 21b2eca6SJingqi Liu
7752 2f740136SJeff Codyif test "$bochs" = "yes" ; then
7753 2f740136SJeff Cody  echo "CONFIG_BOCHS=y" >> $config_host_mak
7754 2f740136SJeff Codyfi
7755 2f740136SJeff Codyif test "$cloop" = "yes" ; then
7756 2f740136SJeff Cody  echo "CONFIG_CLOOP=y" >> $config_host_mak
7757 2f740136SJeff Codyfi
7758 2f740136SJeff Codyif test "$dmg" = "yes" ; then
7759 2f740136SJeff Cody  echo "CONFIG_DMG=y" >> $config_host_mak
7760 2f740136SJeff Codyfi
7761 2f740136SJeff Codyif test "$qcow1" = "yes" ; then
7762 2f740136SJeff Cody  echo "CONFIG_QCOW1=y" >> $config_host_mak
7763 2f740136SJeff Codyfi
7764 2f740136SJeff Codyif test "$vdi" = "yes" ; then
7765 2f740136SJeff Cody  echo "CONFIG_VDI=y" >> $config_host_mak
7766 2f740136SJeff Codyfi
7767 2f740136SJeff Codyif test "$vvfat" = "yes" ; then
7768 2f740136SJeff Cody  echo "CONFIG_VVFAT=y" >> $config_host_mak
7769 2f740136SJeff Codyfi
7770 2f740136SJeff Codyif test "$qed" = "yes" ; then
7771 2f740136SJeff Cody  echo "CONFIG_QED=y" >> $config_host_mak
7772 2f740136SJeff Codyfi
7773 2f740136SJeff Codyif test "$parallels" = "yes" ; then
7774 2f740136SJeff Cody  echo "CONFIG_PARALLELS=y" >> $config_host_mak
7775 2f740136SJeff Codyfi
7776 2f740136SJeff Codyif test "$sheepdog" = "yes" ; then
7777 2f740136SJeff Cody  echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7778 2f740136SJeff Codyfi
7779 c9c8b88fSDavid CARLIERif test "$pty_h" = "yes" ; then
7780 c9c8b88fSDavid CARLIER  echo "HAVE_PTY_H=y" >> $config_host_mak
7781 c9c8b88fSDavid CARLIERfi
7782 195588ccSDavid CARLIERif test "$have_mlockall" = "yes" ; then
7783 195588ccSDavid CARLIER  echo "HAVE_MLOCKALL=y" >> $config_host_mak
7784 195588ccSDavid CARLIERfi
7785 adc28027SAlexander Bulekovif test "$fuzzing" = "yes" ; then
7786 adc28027SAlexander Bulekov  if test "$have_fuzzer" = "yes"; then
7787 dd016265SAlexander Bulekov    FUZZ_LDFLAGS=" -fsanitize=fuzzer"
7788 dd016265SAlexander Bulekov    FUZZ_CFLAGS=" -fsanitize=fuzzer"
7789 086d5f75SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
7790 adc28027SAlexander Bulekov  else
7791 dd016265SAlexander Bulekov    error_exit "Your compiler doesn't support -fsanitize=fuzzer"
7792 adc28027SAlexander Bulekov    exit 1
7793 adc28027SAlexander Bulekov  fi
7794 adc28027SAlexander Bulekovfi
7795 2f740136SJeff Cody
7796 40e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then
7797 40e8c6f4SAlex Bennée    echo "CONFIG_PLUGIN=y" >> $config_host_mak
7798 40e8c6f4SAlex Bennée    LIBS="-ldl $LIBS"
7799 26fffe29SEmilio G. Cota    # Copy the export object list to the build dir
7800 26fffe29SEmilio G. Cota    if test "$ld_dynamic_list" = "yes" ; then
7801 26fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
7802 26fffe29SEmilio G. Cota	ld_symbols=qemu-plugins-ld.symbols
7803 26fffe29SEmilio G. Cota	cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
7804 26fffe29SEmilio G. Cota    elif test "$ld_exported_symbols_list" = "yes" ; then
7805 26fffe29SEmilio G. Cota	echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
7806 26fffe29SEmilio G. Cota	ld64_symbols=qemu-plugins-ld64.symbols
7807 26fffe29SEmilio G. Cota	echo "# Automatically generated by configure - do not modify" > $ld64_symbols
7808 26fffe29SEmilio G. Cota	grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
7809 26fffe29SEmilio G. Cota	    sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
7810 26fffe29SEmilio G. Cota    else
7811 26fffe29SEmilio G. Cota	error_exit \
7812 26fffe29SEmilio G. Cota	    "If \$plugins=yes, either \$ld_dynamic_list or " \
7813 26fffe29SEmilio G. Cota	    "\$ld_exported_symbols_list should have been set to 'yes'."
7814 26fffe29SEmilio G. Cota    fi
7815 40e8c6f4SAlex Bennéefi
7816 40e8c6f4SAlex Bennée
7817 f48e590aSAlex Bennéeif test -n "$gdb_bin" ; then
7818 f48e590aSAlex Bennée    echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
7819 f48e590aSAlex Bennéefi
7820 f48e590aSAlex Bennée
7821 54e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then
7822 54e7aac0SAlexey Krasikov  echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
7823 92500362SAlexey Krasikov  if test "$have_keyutils" = "yes" ; then
7824 92500362SAlexey Krasikov    echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak
7825 92500362SAlexey Krasikov  fi
7826 54e7aac0SAlexey Krasikovfi
7827 54e7aac0SAlexey Krasikov
7828 5b5e3037SPaolo Bonziniif test "$tcg_interpreter" = "yes"; then
7829 25211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES"
7830 5b5e3037SPaolo Bonzinielif test "$ARCH" = "sparc64" ; then
7831 25211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES"
7832 5b5e3037SPaolo Bonzinielif test "$ARCH" = "s390x" ; then
7833 25211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES"
7834 e633a5c6SEric Blakeelif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7835 25211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES"
7836 40d964b5SRichard Hendersonelif test "$ARCH" = "ppc64" ; then
7837 25211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES"
7838 e633a5c6SEric Blakeelif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7839 25211446SPaolo Bonzini  QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES"
7840 5b5e3037SPaolo Bonzinielse
7841 25211446SPaolo Bonzini  QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES"
7842 5b5e3037SPaolo Bonzinifi
7843 5b5e3037SPaolo Bonzini
7844 98ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
7845 804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
7846 804edf29SJuan Quintelaecho "INSTALL=$install" >> $config_host_mak
7847 1901cb14SBradecho "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7848 1901cb14SBradecho "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7849 1901cb14SBradecho "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7850 21655882SPaolo Bonziniecho "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7851 c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
7852 2eb054c2SPeter Maydellecho "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
7853 516e8b7dSPeter Maydellecho "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak
7854 39d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak
7855 a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak
7856 804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
7857 a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then
7858 a31a8642SMichael S. Tsirkin  echo "IASL=$iasl" >> $config_host_mak
7859 a31a8642SMichael S. Tsirkinfi
7860 83f73fceSTomoki Sekiyamaecho "CXX=$cxx" >> $config_host_mak
7861 3c4a4d0dSPeter Maydellecho "OBJCC=$objcc" >> $config_host_mak
7862 804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak
7863 45d285abSPeter Maydellecho "ARFLAGS=$ARFLAGS" >> $config_host_mak
7864 cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak
7865 5f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak
7866 3dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak
7867 804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak
7868 804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak
7869 9f81aeb5SAlistair Francisecho "RANLIB=$ranlib" >> $config_host_mak
7870 4852ee95SStefan Weilecho "NM=$nm" >> $config_host_mak
7871 daa79d9aSAlex Bennéeecho "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7872 9fe6de94SBlue Swirlecho "WINDRES=$windres" >> $config_host_mak
7873 e2a2ed06SJuan Quintelaecho "CFLAGS=$CFLAGS" >> $config_host_mak
7874 086d5f75SPaolo Bonziniecho "CXXFLAGS=$CXXFLAGS" >> $config_host_mak
7875 46eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7876 a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7877 11cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7878 f9728943SPaolo Bonziniecho "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7879 a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
7880 a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak
7881 e39f0062SPaolo Bonziniif test "$sparse" = "yes" ; then
7882 968b4db3SPaolo Bonzini  echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7883 e39f0062SPaolo Bonzinifi
7884 8a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7885 db5adeaaSPaolo Bonziniecho "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7886 6969ec6cSJames Clarkeecho "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7887 e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7888 73da375eSJuan Quintelaecho "LIBS+=$LIBS" >> $config_host_mak
7889 3e2e0e6bSJuan Quintelaecho "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7890 409437e1SDaniel P. Berrangeecho "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7891 804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
7892 17969268SFam Zhengecho "DSOSUF=$DSOSUF" >> $config_host_mak
7893 17969268SFam Zhengecho "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7894 f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak
7895 90246037SDaniel P. Berrangeecho "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7896 90246037SDaniel P. Berrangeecho "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7897 94dd53c5SGerd Hoffmannecho "POD2MAN=$POD2MAN" >> $config_host_mak
7898 1d728c39SBlue Swirlif test "$gcov" = "yes" ; then
7899 1d728c39SBlue Swirl  echo "CONFIG_GCOV=y" >> $config_host_mak
7900 1d728c39SBlue Swirlfi
7901 804edf29SJuan Quintela
7902 3efac6ebSTomáš Golembiovskýif test "$libudev" != "no"; then
7903 3efac6ebSTomáš Golembiovský    echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7904 3efac6ebSTomáš Golembiovský    echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7905 3efac6ebSTomáš Golembiovskýfi
7906 adc28027SAlexander Bulekovif test "$fuzzing" != "no"; then
7907 adc28027SAlexander Bulekov    echo "CONFIG_FUZZ=y" >> $config_host_mak
7908 adc28027SAlexander Bulekov    echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak
7909 adc28027SAlexander Bulekov    echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak
7910 adc28027SAlexander Bulekovfi
7911 3efac6ebSTomáš Golembiovský
7912 05dfa22bSPhilippe Mathieu-Daudéif test "$edk2_blobs" = "yes" ; then
7913 05dfa22bSPhilippe Mathieu-Daudé  echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
7914 05dfa22bSPhilippe Mathieu-Daudéfi
7915 05dfa22bSPhilippe Mathieu-Daudé
7916 b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then
7917 b767d257SMarek Marczykowski-Górecki  echo "CONFIG_RNG_NONE=y" >> $config_host_mak
7918 b767d257SMarek Marczykowski-Góreckifi
7919 b767d257SMarek Marczykowski-Górecki
7920 6efd7517SPeter Maydell# use included Linux headers
7921 6efd7517SPeter Maydellif test "$linux" = "yes" ; then
7922 a307beb6SAndreas Färber  mkdir -p linux-headers
7923 6efd7517SPeter Maydell  case "$cpu" in
7924 c72b26ecSRichard Henderson  i386|x86_64|x32)
7925 08312a63SPeter Maydell    linux_arch=x86
7926 6efd7517SPeter Maydell    ;;
7927 f8378accSRichard Henderson  ppc|ppc64|ppc64le)
7928 08312a63SPeter Maydell    linux_arch=powerpc
7929 6efd7517SPeter Maydell    ;;
7930 6efd7517SPeter Maydell  s390x)
7931 08312a63SPeter Maydell    linux_arch=s390
7932 08312a63SPeter Maydell    ;;
7933 1f080313SClaudio Fontana  aarch64)
7934 1f080313SClaudio Fontana    linux_arch=arm64
7935 1f080313SClaudio Fontana    ;;
7936 222e7d11SSanjay Lal  mips64)
7937 222e7d11SSanjay Lal    linux_arch=mips
7938 222e7d11SSanjay Lal    ;;
7939 08312a63SPeter Maydell  *)
7940 08312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
7941 08312a63SPeter Maydell    linux_arch="$cpu"
7942 6efd7517SPeter Maydell    ;;
7943 6efd7517SPeter Maydell  esac
7944 08312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
7945 08312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7946 08312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7947 08312a63SPeter Maydell    fi
7948 6efd7517SPeter Maydellfi
7949 6efd7517SPeter Maydell
7950 97a847bcSbellardfor target in $target_list; do
7951 97a847bcSbellardtarget_dir="$target"
7952 25be210fSJuan Quintelaconfig_target_mak=$target_dir/config-target.mak
7953 89138857SStefan Weiltarget_name=$(echo $target | cut -d '-' -f 1)
7954 52bf9771Stony.nguyen@bt.comtarget_aligned_only="no"
7955 52bf9771Stony.nguyen@bt.comcase "$target_name" in
7956 52bf9771Stony.nguyen@bt.com  alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7957 52bf9771Stony.nguyen@bt.com  target_aligned_only="yes"
7958 52bf9771Stony.nguyen@bt.com  ;;
7959 52bf9771Stony.nguyen@bt.comesac
7960 97a847bcSbellardtarget_bigendian="no"
7961 c1799a84SPaolo Bonzinicase "$target_name" in
7962 a69dc537SThomas Huth  armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7963 52bf9771Stony.nguyen@bt.com  target_bigendian="yes"
7964 ea2d6a39SJuan Quintela  ;;
7965 ea2d6a39SJuan Quintelaesac
7966 97a847bcSbellardtarget_softmmu="no"
7967 997344f3Sbellardtarget_user_only="no"
7968 831b7825Sthstarget_linux_user="no"
7969 84778508Sblueswir1target_bsd_user="no"
7970 9e407a85Spbrookcase "$target" in
7971 c1799a84SPaolo Bonzini  ${target_name}-softmmu)
7972 9e407a85Spbrook    target_softmmu="yes"
7973 9e407a85Spbrook    ;;
7974 c1799a84SPaolo Bonzini  ${target_name}-linux-user)
7975 9e407a85Spbrook    target_user_only="yes"
7976 9e407a85Spbrook    target_linux_user="yes"
7977 9e407a85Spbrook    ;;
7978 c1799a84SPaolo Bonzini  ${target_name}-bsd-user)
7979 84778508Sblueswir1    target_user_only="yes"
7980 84778508Sblueswir1    target_bsd_user="yes"
7981 84778508Sblueswir1    ;;
7982 9e407a85Spbrook  *)
7983 76ad07a4SPeter Maydell    error_exit "Target '$target' not recognised"
7984 9e407a85Spbrook    exit 1
7985 9e407a85Spbrook    ;;
7986 9e407a85Spbrookesac
7987 831b7825Sths
7988 97a847bcSbellardmkdir -p $target_dir
7989 25be210fSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_target_mak
7990 97a847bcSbellard
7991 e5fe0c52Spbrookbflt="no"
7992 ca759f9eSAlex Bennéemttcg="no"
7993 89138857SStefan Weilinterp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7994 56aebc89Spbrookgdb_xml_files=""
7995 7ba1e619Saliguori
7996 c1799a84SPaolo BonziniTARGET_ARCH="$target_name"
7997 6acff7daSJuan QuintelaTARGET_BASE_ARCH=""
7998 e6e91b9cSJuan QuintelaTARGET_ABI_DIR=""
7999 e73aae67SJuan Quintela
8000 c1799a84SPaolo Bonzinicase "$target_name" in
8001 2408a527Saurel32  i386)
8002 0a7fa00aSEmilio G. Cota    mttcg="yes"
8003 7b0f97baSDoug Gale	gdb_xml_files="i386-32bit.xml"
8004 28988117SLaurent Vivier    TARGET_SYSTBL_ABI=i386
8005 2408a527Saurel32  ;;
8006 2408a527Saurel32  x86_64)
8007 6acff7daSJuan Quintela    TARGET_BASE_ARCH=i386
8008 8d62f35aSLaurent Vivier    TARGET_SYSTBL_ABI=common,64
8009 0a7fa00aSEmilio G. Cota    mttcg="yes"
8010 7b0f97baSDoug Gale	gdb_xml_files="i386-64bit.xml"
8011 2408a527Saurel32  ;;
8012 2408a527Saurel32  alpha)
8013 5ee4f3c2SRichard Henderson    mttcg="yes"
8014 6116aea9SLaurent Vivier    TARGET_SYSTBL_ABI=common
8015 2408a527Saurel32  ;;
8016 2408a527Saurel32  arm|armeb)
8017 b498c8a0SJuan Quintela    TARGET_ARCH=arm
8018 5bcb4986SLaurent Vivier    TARGET_SYSTBL_ABI=common,oabi
8019 e5fe0c52Spbrook    bflt="yes"
8020 ca759f9eSAlex Bennée    mttcg="yes"
8021 c888f7e0SPeter Maydell    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
8022 2408a527Saurel32  ;;
8023 722dd7beSMichael Weiser  aarch64|aarch64_be)
8024 722dd7beSMichael Weiser    TARGET_ARCH=aarch64
8025 6a49fa95SAlexander Graf    TARGET_BASE_ARCH=arm
8026 6a49fa95SAlexander Graf    bflt="yes"
8027 ca759f9eSAlex Bennée    mttcg="yes"
8028 c888f7e0SPeter Maydell    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml"
8029 6a49fa95SAlexander Graf  ;;
8030 42f3ff00SMichael Rolnik  avr)
8031 42f3ff00SMichael Rolnik    gdb_xml_files="avr-cpu.xml"
8032 42f3ff00SMichael Rolnik    target_compiler=$cross_cc_avr
8033 42f3ff00SMichael Rolnik  ;;
8034 2408a527Saurel32  cris)
8035 2408a527Saurel32  ;;
8036 61766fe9SRichard Henderson  hppa)
8037 7b93dab5SRichard Henderson    mttcg="yes"
8038 9566f4c6SLaurent Vivier    TARGET_SYSTBL_ABI=common,32
8039 61766fe9SRichard Henderson  ;;
8040 613a22c9SMichael Walle  lm32)
8041 613a22c9SMichael Walle  ;;
8042 2408a527Saurel32  m68k)
8043 0938cda5Saurel32    bflt="yes"
8044 a976ed3fSKONRAD Frederic    gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
8045 5b85cae9SLaurent Vivier    TARGET_SYSTBL_ABI=common
8046 2408a527Saurel32  ;;
8047 877fdc12SEdgar E. Iglesias  microblaze|microblazeel)
8048 877fdc12SEdgar E. Iglesias    TARGET_ARCH=microblaze
8049 ddf0c4cdSLaurent Vivier    TARGET_SYSTBL_ABI=common
8050 72b675caSEdgar E. Iglesias    bflt="yes"
8051 be73ef64SEdgar E. Iglesias    echo "TARGET_ABI32=y" >> $config_target_mak
8052 72b675caSEdgar E. Iglesias  ;;
8053 2408a527Saurel32  mips|mipsel)
8054 0454728cSAleksandar Markovic    mttcg="yes"
8055 b498c8a0SJuan Quintela    TARGET_ARCH=mips
8056 25be210fSJuan Quintela    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
8057 c59716fcSLaurent Vivier    TARGET_SYSTBL_ABI=o32
8058 2408a527Saurel32  ;;
8059 2408a527Saurel32  mipsn32|mipsn32el)
8060 0454728cSAleksandar Markovic    mttcg="yes"
8061 597e2cecSRichard Henderson    TARGET_ARCH=mips64
8062 6acff7daSJuan Quintela    TARGET_BASE_ARCH=mips
8063 25be210fSJuan Quintela    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
8064 597e2cecSRichard Henderson    echo "TARGET_ABI32=y" >> $config_target_mak
8065 686a0fe4SLaurent Vivier    TARGET_SYSTBL_ABI=n32
8066 2408a527Saurel32  ;;
8067 2408a527Saurel32  mips64|mips64el)
8068 a092a955SAlex Bennée    mttcg="no"
8069 b498c8a0SJuan Quintela    TARGET_ARCH=mips64
8070 6acff7daSJuan Quintela    TARGET_BASE_ARCH=mips
8071 25be210fSJuan Quintela    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
8072 686a0fe4SLaurent Vivier    TARGET_SYSTBL_ABI=n64
8073 2408a527Saurel32  ;;
8074 d15a9c23SAnthony Green  moxie)
8075 d15a9c23SAnthony Green  ;;
8076 e671711cSMarek Vasut  nios2)
8077 e671711cSMarek Vasut  ;;
8078 4a09d0bbSRichard Henderson  or1k)
8079 e67db06eSJia Liu    TARGET_ARCH=openrisc
8080 e67db06eSJia Liu    TARGET_BASE_ARCH=openrisc
8081 e67db06eSJia Liu  ;;
8082 2408a527Saurel32  ppc)
8083 c8b3532dSaurel32    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
8084 76a691f1SLaurent Vivier    TARGET_SYSTBL_ABI=common,nospu,32
8085 2408a527Saurel32  ;;
8086 2408a527Saurel32  ppc64)
8087 6acff7daSJuan Quintela    TARGET_BASE_ARCH=ppc
8088 e6e91b9cSJuan Quintela    TARGET_ABI_DIR=ppc
8089 76a691f1SLaurent Vivier    TARGET_SYSTBL_ABI=common,nospu,64
8090 f0b0685dSNikunj A Dadhania    mttcg=yes
8091 1438eff3SAnton Blanchard    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8092 2408a527Saurel32  ;;
8093 9c35126cSDoug Kwan  ppc64le)
8094 9c35126cSDoug Kwan    TARGET_ARCH=ppc64
8095 9c35126cSDoug Kwan    TARGET_BASE_ARCH=ppc
8096 9c35126cSDoug Kwan    TARGET_ABI_DIR=ppc
8097 76a691f1SLaurent Vivier    TARGET_SYSTBL_ABI=common,nospu,64
8098 f0b0685dSNikunj A Dadhania    mttcg=yes
8099 1438eff3SAnton Blanchard    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8100 9c35126cSDoug Kwan  ;;
8101 2408a527Saurel32  ppc64abi32)
8102 b498c8a0SJuan Quintela    TARGET_ARCH=ppc64
8103 6acff7daSJuan Quintela    TARGET_BASE_ARCH=ppc
8104 e6e91b9cSJuan Quintela    TARGET_ABI_DIR=ppc
8105 76a691f1SLaurent Vivier    TARGET_SYSTBL_ABI=common,nospu,32
8106 25be210fSJuan Quintela    echo "TARGET_ABI32=y" >> $config_target_mak
8107 1438eff3SAnton Blanchard    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
8108 2408a527Saurel32  ;;
8109 25fa194bSMichael Clark  riscv32)
8110 25fa194bSMichael Clark    TARGET_BASE_ARCH=riscv
8111 25fa194bSMichael Clark    TARGET_ABI_DIR=riscv
8112 25fa194bSMichael Clark    mttcg=yes
8113 ae4a70c0SKeith Packard    gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml"
8114 25fa194bSMichael Clark  ;;
8115 25fa194bSMichael Clark  riscv64)
8116 25fa194bSMichael Clark    TARGET_BASE_ARCH=riscv
8117 25fa194bSMichael Clark    TARGET_ABI_DIR=riscv
8118 25fa194bSMichael Clark    mttcg=yes
8119 ae4a70c0SKeith Packard    gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml"
8120 25fa194bSMichael Clark  ;;
8121 c8c35e5fSYoshinori Sato  rx)
8122 c8c35e5fSYoshinori Sato    TARGET_ARCH=rx
8123 c8c35e5fSYoshinori Sato    bflt="yes"
8124 c8c35e5fSYoshinori Sato    target_compiler=$cross_cc_rx
8125 c8c35e5fSYoshinori Sato    gdb_xml_files="rx-core.xml"
8126 c8c35e5fSYoshinori Sato  ;;
8127 2408a527Saurel32  sh4|sh4eb)
8128 b498c8a0SJuan Quintela    TARGET_ARCH=sh4
8129 d0c832f6SLaurent Vivier    TARGET_SYSTBL_ABI=common
8130 4dbed897Spbrook    bflt="yes"
8131 2408a527Saurel32  ;;
8132 2408a527Saurel32  sparc)
8133 bb0cdc03SLaurent Vivier    TARGET_SYSTBL_ABI=common,32
8134 2408a527Saurel32  ;;
8135 2408a527Saurel32  sparc64)
8136 6acff7daSJuan Quintela    TARGET_BASE_ARCH=sparc
8137 bb0cdc03SLaurent Vivier    TARGET_SYSTBL_ABI=common,64
8138 2408a527Saurel32  ;;
8139 2408a527Saurel32  sparc32plus)
8140 b498c8a0SJuan Quintela    TARGET_ARCH=sparc64
8141 6acff7daSJuan Quintela    TARGET_BASE_ARCH=sparc
8142 e6e91b9cSJuan Quintela    TARGET_ABI_DIR=sparc
8143 bb0cdc03SLaurent Vivier    TARGET_SYSTBL_ABI=common,32
8144 25be210fSJuan Quintela    echo "TARGET_ABI32=y" >> $config_target_mak
8145 2408a527Saurel32  ;;
8146 24e804ecSAlexander Graf  s390x)
8147 318f371dSLaurent Vivier    TARGET_SYSTBL_ABI=common,64
8148 63685bc4SDavid Hildenbrand    mttcg=yes
8149 86158a2aSChristian Borntraeger    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
8150 24e804ecSAlexander Graf  ;;
8151 444e06b1SChen Gang  tilegx)
8152 444e06b1SChen Gang  ;;
8153 5ecaa4edSPeter Crosthwaite  tricore)
8154 5ecaa4edSPeter Crosthwaite  ;;
8155 d2fbca94SGuan Xuetao  unicore32)
8156 d2fbca94SGuan Xuetao  ;;
8157 cfa550c6SMax Filippov  xtensa|xtensaeb)
8158 cfa550c6SMax Filippov    TARGET_ARCH=xtensa
8159 a4a93592SLaurent Vivier    TARGET_SYSTBL_ABI=common
8160 02e33e9fSMax Filippov    bflt="yes"
8161 9fb40342SMax Filippov    mttcg="yes"
8162 cfa550c6SMax Filippov  ;;
8163 2408a527Saurel32  *)
8164 76ad07a4SPeter Maydell    error_exit "Unsupported target CPU"
8165 2408a527Saurel32  ;;
8166 2408a527Saurel32esac
8167 5e8861a0SPaolo Bonzini# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
8168 5e8861a0SPaolo Bonziniif [ "$TARGET_BASE_ARCH" = "" ]; then
8169 5e8861a0SPaolo Bonzini  TARGET_BASE_ARCH=$TARGET_ARCH
8170 5e8861a0SPaolo Bonzinifi
8171 5e8861a0SPaolo Bonzini
8172 5e8861a0SPaolo Bonzinisymlink "$source_path/Makefile.target" "$target_dir/Makefile"
8173 5e8861a0SPaolo Bonzini
8174 99afc91dSDaniel P. Berrangeupper() {
8175 99afc91dSDaniel P. Berrange    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
8176 99afc91dSDaniel P. Berrange}
8177 99afc91dSDaniel P. Berrange
8178 89138857SStefan Weiltarget_arch_name="$(upper $TARGET_ARCH)"
8179 25be210fSJuan Quintelaecho "TARGET_$target_arch_name=y" >> $config_target_mak
8180 c1799a84SPaolo Bonziniecho "TARGET_NAME=$target_name" >> $config_target_mak
8181 25be210fSJuan Quintelaecho "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
8182 e6e91b9cSJuan Quintelaif [ "$TARGET_ABI_DIR" = "" ]; then
8183 e6e91b9cSJuan Quintela  TARGET_ABI_DIR=$TARGET_ARCH
8184 e6e91b9cSJuan Quintelafi
8185 25be210fSJuan Quintelaecho "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
8186 adfc3e91SStacey Sonif [ "$HOST_VARIANT_DIR" != "" ]; then
8187 adfc3e91SStacey Son    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
8188 adfc3e91SStacey Sonfi
8189 4d6a835dSLaurent Vivierif [ "$TARGET_SYSTBL_ABI" != "" ]; then
8190 4d6a835dSLaurent Vivier    echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak
8191 4d6a835dSLaurent Vivierfi
8192 3b6b7550SPaolo Bonzini
8193 3b6b7550SPaolo Bonziniif supported_xen_target $target; then
8194 25be210fSJuan Quintela    echo "CONFIG_XEN=y" >> $config_target_mak
8195 eb6fda0fSAnthony PERARD    if test "$xen_pci_passthrough" = yes; then
8196 eb6fda0fSAnthony PERARD        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
8197 eb6fda0fSAnthony PERARD    fi
8198 432d268cSJun Nakajimafi
8199 3b6b7550SPaolo Bonziniif supported_kvm_target $target; then
8200 25be210fSJuan Quintela    echo "CONFIG_KVM=y" >> $config_target_mak
8201 c59249f9SJuan Quintelafi
8202 3b6b7550SPaolo Bonziniif supported_hax_target $target; then
8203 b0cb0a66SVincent Palatin    echo "CONFIG_HAX=y" >> $config_target_mak
8204 b0cb0a66SVincent Palatinfi
8205 c97d6d2cSSergio Andres Gomez Del Realif supported_hvf_target $target; then
8206 c97d6d2cSSergio Andres Gomez Del Real    echo "CONFIG_HVF=y" >> $config_target_mak
8207 c97d6d2cSSergio Andres Gomez Del Realfi
8208 d661d9a4SJustin Terry (VM)if supported_whpx_target $target; then
8209 d661d9a4SJustin Terry (VM)    echo "CONFIG_WHPX=y" >> $config_target_mak
8210 d661d9a4SJustin Terry (VM)fi
8211 52bf9771Stony.nguyen@bt.comif test "$target_aligned_only" = "yes" ; then
8212 52bf9771Stony.nguyen@bt.com  echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
8213 52bf9771Stony.nguyen@bt.comfi
8214 de83cd02Sbellardif test "$target_bigendian" = "yes" ; then
8215 25be210fSJuan Quintela  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
8216 97a847bcSbellardfi
8217 97a847bcSbellardif test "$target_softmmu" = "yes" ; then
8218 25be210fSJuan Quintela  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
8219 ca759f9eSAlex Bennée  if test "$mttcg" = "yes" ; then
8220 ca759f9eSAlex Bennée    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
8221 ca759f9eSAlex Bennée  fi
8222 de83cd02Sbellardfi
8223 997344f3Sbellardif test "$target_user_only" = "yes" ; then
8224 25be210fSJuan Quintela  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
8225 a2c80be9SStefan Weil  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
8226 997344f3Sbellardfi
8227 831b7825Sthsif test "$target_linux_user" = "yes" ; then
8228 25be210fSJuan Quintela  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
8229 831b7825Sthsfi
8230 56aebc89Spbrooklist=""
8231 56aebc89Spbrookif test ! -z "$gdb_xml_files" ; then
8232 56aebc89Spbrook  for x in $gdb_xml_files; do
8233 56aebc89Spbrook    list="$list $source_path/gdb-xml/$x"
8234 56aebc89Spbrook  done
8235 25be210fSJuan Quintela  echo "TARGET_XML_FILES=$list" >> $config_target_mak
8236 3d0f1517SJuan Quintelafi
8237 de83cd02Sbellard
8238 e633a5c6SEric Blakeif test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
8239 25be210fSJuan Quintela  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
8240 e5fe0c52Spbrookfi
8241 84778508Sblueswir1if test "$target_bsd_user" = "yes" ; then
8242 25be210fSJuan Quintela  echo "CONFIG_BSD_USER=y" >> $config_target_mak
8243 84778508Sblueswir1fi
8244 5b0753e0Sbellard
8245 d75402b5SAlex Bennée
8246 db5adeaaSPaolo Bonzini# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets
8247 fa282484SJuan Quintela
8248 4afddb55SJuan Quintelacflags=""
8249 fa282484SJuan Quintelaldflags=""
8250 9b8e111fSJuan Quintela
8251 c765fcacSPeter Crosthwaitedisas_config() {
8252 c765fcacSPeter Crosthwaite  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
8253 c765fcacSPeter Crosthwaite  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
8254 c765fcacSPeter Crosthwaite}
8255 c765fcacSPeter Crosthwaite
8256 64656024SJuan Quintelafor i in $ARCH $TARGET_BASE_ARCH ; do
8257 64656024SJuan Quintela  case "$i" in
8258 64656024SJuan Quintela  alpha)
8259 c765fcacSPeter Crosthwaite    disas_config "ALPHA"
8260 64656024SJuan Quintela  ;;
8261 82295d8aSRichard Henderson  aarch64)
8262 82295d8aSRichard Henderson    if test -n "${cxx}"; then
8263 c765fcacSPeter Crosthwaite      disas_config "ARM_A64"
8264 82295d8aSRichard Henderson    fi
8265 82295d8aSRichard Henderson  ;;
8266 64656024SJuan Quintela  arm)
8267 c765fcacSPeter Crosthwaite    disas_config "ARM"
8268 999b53ecSClaudio Fontana    if test -n "${cxx}"; then
8269 c765fcacSPeter Crosthwaite      disas_config "ARM_A64"
8270 999b53ecSClaudio Fontana    fi
8271 64656024SJuan Quintela  ;;
8272 42f3ff00SMichael Rolnik  avr)
8273 42f3ff00SMichael Rolnik    disas_config "AVR"
8274 42f3ff00SMichael Rolnik  ;;
8275 64656024SJuan Quintela  cris)
8276 c765fcacSPeter Crosthwaite    disas_config "CRIS"
8277 64656024SJuan Quintela  ;;
8278 429b31a2SRichard Henderson  hppa)
8279 429b31a2SRichard Henderson    disas_config "HPPA"
8280 429b31a2SRichard Henderson  ;;
8281 c72b26ecSRichard Henderson  i386|x86_64|x32)
8282 c765fcacSPeter Crosthwaite    disas_config "I386"
8283 64656024SJuan Quintela  ;;
8284 79368f49SMichael Walle  lm32)
8285 c765fcacSPeter Crosthwaite    disas_config "LM32"
8286 79368f49SMichael Walle  ;;
8287 64656024SJuan Quintela  m68k)
8288 c765fcacSPeter Crosthwaite    disas_config "M68K"
8289 64656024SJuan Quintela  ;;
8290 877fdc12SEdgar E. Iglesias  microblaze*)
8291 c765fcacSPeter Crosthwaite    disas_config "MICROBLAZE"
8292 64656024SJuan Quintela  ;;
8293 64656024SJuan Quintela  mips*)
8294 c765fcacSPeter Crosthwaite    disas_config "MIPS"
8295 89a955e8SAleksandar Markovic    if test -n "${cxx}"; then
8296 89a955e8SAleksandar Markovic      disas_config "NANOMIPS"
8297 89a955e8SAleksandar Markovic    fi
8298 64656024SJuan Quintela  ;;
8299 d15a9c23SAnthony Green  moxie*)
8300 c765fcacSPeter Crosthwaite    disas_config "MOXIE"
8301 d15a9c23SAnthony Green  ;;
8302 e671711cSMarek Vasut  nios2)
8303 e671711cSMarek Vasut    disas_config "NIOS2"
8304 e671711cSMarek Vasut  ;;
8305 4a09d0bbSRichard Henderson  or1k)
8306 c765fcacSPeter Crosthwaite    disas_config "OPENRISC"
8307 e67db06eSJia Liu  ;;
8308 64656024SJuan Quintela  ppc*)
8309 c765fcacSPeter Crosthwaite    disas_config "PPC"
8310 64656024SJuan Quintela  ;;
8311 c4f80543SAlistair Francis  riscv*)
8312 25fa194bSMichael Clark    disas_config "RISCV"
8313 25fa194bSMichael Clark  ;;
8314 c8c35e5fSYoshinori Sato  rx)
8315 c8c35e5fSYoshinori Sato    disas_config "RX"
8316 c8c35e5fSYoshinori Sato  ;;
8317 24e804ecSAlexander Graf  s390*)
8318 c765fcacSPeter Crosthwaite    disas_config "S390"
8319 64656024SJuan Quintela  ;;
8320 64656024SJuan Quintela  sh4)
8321 c765fcacSPeter Crosthwaite    disas_config "SH4"
8322 64656024SJuan Quintela  ;;
8323 64656024SJuan Quintela  sparc*)
8324 c765fcacSPeter Crosthwaite    disas_config "SPARC"
8325 64656024SJuan Quintela  ;;
8326 cfa550c6SMax Filippov  xtensa*)
8327 c765fcacSPeter Crosthwaite    disas_config "XTENSA"
8328 cfa550c6SMax Filippov  ;;
8329 64656024SJuan Quintela  esac
8330 64656024SJuan Quinteladone
8331 9195b2c2SStefan Weilif test "$tcg_interpreter" = "yes" ; then
8332 c765fcacSPeter Crosthwaite  disas_config "TCI"
8333 9195b2c2SStefan Weilfi
8334 64656024SJuan Quintela
8335 e9a3591fSChristian Borntraeger# Newer kernels on s390 check for an S390_PGSTE program header and
8336 e9a3591fSChristian Borntraeger# enable the pgste page table extensions in that case. This makes
8337 e9a3591fSChristian Borntraeger# the vm.allocate_pgste sysctl unnecessary. We enable this program
8338 e9a3591fSChristian Borntraeger# header if
8339 e9a3591fSChristian Borntraeger#  - we build on s390x
8340 e9a3591fSChristian Borntraeger#  - we build the system emulation for s390x (qemu-system-s390x)
8341 e9a3591fSChristian Borntraeger#  - KVM is enabled
8342 e9a3591fSChristian Borntraeger#  - the linker supports --s390-pgste
8343 e633a5c6SEric Blakeif test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
8344 e633a5c6SEric Blake        test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
8345 e9a3591fSChristian Borntraeger    if ld_has --s390-pgste ; then
8346 e9a3591fSChristian Borntraeger        ldflags="-Wl,--s390-pgste $ldflags"
8347 e9a3591fSChristian Borntraeger    fi
8348 e9a3591fSChristian Borntraegerfi
8349 e9a3591fSChristian Borntraeger
8350 db5adeaaSPaolo Bonziniecho "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak
8351 25be210fSJuan Quintelaecho "QEMU_CFLAGS+=$cflags" >> $config_target_mak
8352 fa282484SJuan Quintela
8353 97a847bcSbellarddone # for target in $targets
8354 7d13299dSbellard
8355 d52c454aSMarc-André Lureauecho "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
8356 d52c454aSMarc-André Lureauecho "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
8357 d52c454aSMarc-André Lureau
8358 e3971d61SPhilippe Mathieu-Daudéif [ "$fdt" = "git" ]; then
8359 3b8593eeSMarkus Armbruster  echo "config-host.h: dtc/all" >> $config_host_mak
8360 a540f158SPeter Crosthwaitefi
8361 e219c499SRichard Hendersonif [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
8362 3b8593eeSMarkus Armbruster  echo "config-host.h: capstone/all" >> $config_host_mak
8363 e219c499SRichard Hendersonfi
8364 e219c499SRichard Hendersonif test -n "$LIBCAPSTONE"; then
8365 e219c499SRichard Henderson  echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
8366 e219c499SRichard Hendersonfi
8367 a540f158SPeter Crosthwaite
8368 a99d57bbSWanlong Gaoif test "$numa" = "yes"; then
8369 a99d57bbSWanlong Gao  echo "CONFIG_NUMA=y" >> $config_host_mak
8370 a99d57bbSWanlong Gaofi
8371 a99d57bbSWanlong Gao
8372 fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
8373 fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
8374 fd0e6053SJohn Snowfi
8375 fd0e6053SJohn Snow
8376 1e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
8377 1e4f6065SDaniele Buono  echo "CONFIG_SAFESTACK=y" >> $config_host_mak
8378 1e4f6065SDaniele Buonofi
8379 1e4f6065SDaniele Buono
8380 e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now.
8381 e29e5c6eSPeter Maydell# DIRS are directories which we simply mkdir in the build tree;
8382 e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree
8383 e29e5c6eSPeter Maydell# (these can be both files and directories).
8384 e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This
8385 e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is
8386 e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun
8387 e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and
8388 e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own
8389 e29e5c6eSPeter Maydell# directory and symlink the directory instead.
8390 1cf4323eSThomas HuthDIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
8391 1cf4323eSThomas HuthDIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
8392 b855f8d1SPaolo BonziniDIRS="$DIRS docs docs/interop fsdev scsi"
8393 744a928cSAlexey KardashevskiyDIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
8394 8db2a4fdSGerd HoffmannDIRS="$DIRS roms/seabios"
8395 2038f8c8SPaolo BonziniLINKS="Makefile"
8396 2038f8c8SPaolo BonziniLINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
8397 3941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target"
8398 671f760bSEmilio G. CotaLINKS="$LINKS tests/plugin/Makefile"
8399 e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
8400 e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile"
8401 8db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile"
8402 e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp"
8403 e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
8404 39950353SPeter MaydellLINKS="$LINKS tests/acceptance tests/data"
8405 39950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check"
8406 8f8fd9edSCleber RosaLINKS="$LINKS python"
8407 753d11f2SRichard Hendersonfor bios_file in \
8408 753d11f2SRichard Henderson    $source_path/pc-bios/*.bin \
8409 225a9ab8SAlexey Kardashevskiy    $source_path/pc-bios/*.lid \
8410 753d11f2SRichard Henderson    $source_path/pc-bios/*.rom \
8411 753d11f2SRichard Henderson    $source_path/pc-bios/*.dtb \
8412 e89e33e1SDominik Dingel    $source_path/pc-bios/*.img \
8413 753d11f2SRichard Henderson    $source_path/pc-bios/openbios-* \
8414 4e73c781SAlexander Graf    $source_path/pc-bios/u-boot.* \
8415 26ce90fdSLaszlo Ersek    $source_path/pc-bios/edk2-*.fd.bz2 \
8416 753d11f2SRichard Henderson    $source_path/pc-bios/palcode-*
8417 753d11f2SRichard Hendersondo
8418 e29e5c6eSPeter Maydell    LINKS="$LINKS pc-bios/$(basename $bios_file)"
8419 7ea78b74SJan Kiszkadone
8420 d1807a4fSPaolo Bonzinimkdir -p $DIRS
8421 e29e5c6eSPeter Maydellfor f in $LINKS ; do
8422 cab00a5aSMichael S. Tsirkin    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
8423 f9245e10SPeter Maydell        symlink "$source_path/$f" "$f"
8424 f9245e10SPeter Maydell    fi
8425 7d13299dSbellarddone
8426 1ad2134fSPaul Brook
8427 2038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do
8428 2038f8c8SPaolo Bonzini  export $i
8429 2038f8c8SPaolo Bonzinidone
8430 afc3a8f9SAlex Bennéeexport target_list source_path use_containers
8431 2038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh)
8432 2038f8c8SPaolo Bonzini
8433 c34ebfdcSAnthony Liguori# temporary config to build submodules
8434 8db2a4fdSGerd Hoffmannfor rom in seabios; do
8435 c34ebfdcSAnthony Liguori    config_mak=roms/$rom/config.mak
8436 37116c89SStefan Weil    echo "# Automatically generated by configure - do not modify" > $config_mak
8437 c34ebfdcSAnthony Liguori    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
8438 cdbd727cSRichard Henderson    echo "AS=$as" >> $config_mak
8439 5f6f0e27SRichard Henderson    echo "CCAS=$ccas" >> $config_mak
8440 c34ebfdcSAnthony Liguori    echo "CC=$cc" >> $config_mak
8441 c34ebfdcSAnthony Liguori    echo "BCC=bcc" >> $config_mak
8442 3dd46c78SBlue Swirl    echo "CPP=$cpp" >> $config_mak
8443 c34ebfdcSAnthony Liguori    echo "OBJCOPY=objcopy" >> $config_mak
8444 a31a8642SMichael S. Tsirkin    echo "IASL=$iasl" >> $config_mak
8445 c34ebfdcSAnthony Liguori    echo "LD=$ld" >> $config_mak
8446 9f81aeb5SAlistair Francis    echo "RANLIB=$ranlib" >> $config_mak
8447 c34ebfdcSAnthony Liguoridone
8448 c34ebfdcSAnthony Liguori
8449 76c7560aSMax Reitz# set up qemu-iotests in this build directory
8450 76c7560aSMax Reitziotests_common_env="tests/qemu-iotests/common.env"
8451 76c7560aSMax Reitz
8452 76c7560aSMax Reitzecho "# Automatically generated by configure - do not modify" > "$iotests_common_env"
8453 76c7560aSMax Reitzecho >> "$iotests_common_env"
8454 76c7560aSMax Reitzecho "export PYTHON='$python'" >> "$iotests_common_env"
8455 76c7560aSMax Reitz
8456 a5665051SPaolo Bonziniif test "$skip_meson" = no; then
8457 fc929892SMarc-André Lureaucross="config-meson.cross.new"
8458 fc929892SMarc-André Lureaumeson_quote() {
8459 fc929892SMarc-André Lureau    echo "['$(echo $* | sed "s/ /','/g")']"
8460 fc929892SMarc-André Lureau}
8461 fc929892SMarc-André Lureau
8462 fc929892SMarc-André Lureauecho "# Automatically generated by configure - do not modify" > $cross
8463 fc929892SMarc-André Lureauecho "[properties]" >> $cross
8464 fc929892SMarc-André Lureautest -z "$cxx" && echo "link_language = 'c'" >> $cross
8465 fc929892SMarc-André Lureauecho "[binaries]" >> $cross
8466 fc929892SMarc-André Lureauecho "c = $(meson_quote $cc)" >> $cross
8467 fc929892SMarc-André Lureautest -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross
8468 fc929892SMarc-André Lureauecho "ar = $(meson_quote $ar)" >> $cross
8469 fc929892SMarc-André Lureauecho "nm = $(meson_quote $nm)" >> $cross
8470 fc929892SMarc-André Lureauecho "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross
8471 fc929892SMarc-André Lureauecho "ranlib = $(meson_quote $ranlib)" >> $cross
8472 fc929892SMarc-André Lureauecho "strip = $(meson_quote $strip)" >> $cross
8473 fc929892SMarc-André Lureauecho "windres = $(meson_quote $windres)" >> $cross
8474 fc929892SMarc-André Lureauif test -n "$cross_prefix"; then
8475 fc929892SMarc-André Lureau    cross_arg="--cross-file config-meson.cross"
8476 fc929892SMarc-André Lureau    # Hack: Meson expects an absolute path for the *build* machine
8477 fc929892SMarc-André Lureau    # for the prefix, so add a slash in front of a Windows path that
8478 fc929892SMarc-André Lureau    # includes a drive letter.
8479 fc929892SMarc-André Lureau    #
8480 fc929892SMarc-André Lureau    # See https://github.com/mesonbuild/meson/issues/7577.
8481 fc929892SMarc-André Lureau    echo "[host_machine]" >> $cross
8482 fc929892SMarc-André Lureau    if test "$mingw32" = "yes" ; then
8483 fc929892SMarc-André Lureau        echo "system = 'windows'" >> $cross
8484 fc929892SMarc-André Lureau        case $prefix in
8485 fc929892SMarc-André Lureau            ?:*) pre_prefix=/ ;;
8486 fc929892SMarc-André Lureau        esac
8487 fc929892SMarc-André Lureau    fi
8488 fc929892SMarc-André Lureau    case "$ARCH" in
8489 fc929892SMarc-André Lureau        i386|x86_64)
8490 fc929892SMarc-André Lureau            echo "cpu_family = 'x86'" >> $cross
8491 fc929892SMarc-André Lureau            ;;
8492 fc929892SMarc-André Lureau        ppc64le)
8493 fc929892SMarc-André Lureau            echo "cpu_family = 'ppc64'" >> $cross
8494 fc929892SMarc-André Lureau            ;;
8495 fc929892SMarc-André Lureau        *)
8496 fc929892SMarc-André Lureau            echo "cpu_family = '$ARCH'" >> $cross
8497 fc929892SMarc-André Lureau            ;;
8498 fc929892SMarc-André Lureau    esac
8499 fc929892SMarc-André Lureau    echo "cpu = '$cpu'" >> $cross
8500 fc929892SMarc-André Lureau    if test "$bigendian" = "yes" ; then
8501 fc929892SMarc-André Lureau        echo "endian = 'big'" >> $cross
8502 fc929892SMarc-André Lureau    else
8503 fc929892SMarc-André Lureau        echo "endian = 'little'" >> $cross
8504 fc929892SMarc-André Lureau    fi
8505 fc929892SMarc-André Lureauelse
8506 fc929892SMarc-André Lureau    cross_arg="--native-file config-meson.cross"
8507 fc929892SMarc-André Lureaufi
8508 fc929892SMarc-André Lureaumv $cross config-meson.cross
8509 fc929892SMarc-André Lureau
8510 a5665051SPaolo Bonzinirm -rf meson-private meson-info meson-logs
8511 a5665051SPaolo BonziniNINJA=$PWD/ninjatool $meson setup \
8512 fc929892SMarc-André Lureau        --prefix "${pre_prefix}$prefix" \
8513 fc929892SMarc-André Lureau        --libdir "${pre_prefix}$libdir" \
8514 fc929892SMarc-André Lureau        --libexecdir "${pre_prefix}$libexecdir" \
8515 fc929892SMarc-André Lureau        --bindir "${pre_prefix}$bindir" \
8516 fc929892SMarc-André Lureau        --includedir "${pre_prefix}$includedir" \
8517 fc929892SMarc-André Lureau        --datadir "${pre_prefix}$datadir" \
8518 fc929892SMarc-André Lureau        --mandir "${pre_prefix}$mandir" \
8519 fc929892SMarc-André Lureau        --sysconfdir "${pre_prefix}$sysconfdir" \
8520 fc929892SMarc-André Lureau        --localstatedir "${pre_prefix}$local_statedir" \
8521 a5665051SPaolo Bonzini        -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
8522 a5665051SPaolo Bonzini        -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
8523 a5665051SPaolo Bonzini        -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
8524 a5665051SPaolo Bonzini        -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
8525 da6d48b9SMarc-André Lureau        -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
8526 bf0e56a3SMarc-André Lureau        -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
8527 fc929892SMarc-André Lureau        $cross_arg \
8528 a5665051SPaolo Bonzini        "$PWD" "$source_path"
8529 a5665051SPaolo Bonzini
8530 a5665051SPaolo Bonziniif test "$?" -ne 0 ; then
8531 a5665051SPaolo Bonzini    error_exit "meson setup failed"
8532 a5665051SPaolo Bonzinifi
8533 a5665051SPaolo Bonzinitouch ninjatool.stamp
8534 a5665051SPaolo Bonzinifi
8535 a5665051SPaolo Bonzini
8536 dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
8537 dc655404SMichael S. Tsirkincat <<EOD >config.status
8538 dc655404SMichael S. Tsirkin#!/bin/sh
8539 dc655404SMichael S. Tsirkin# Generated by configure.
8540 dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
8541 dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
8542 dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
8543 dc655404SMichael S. TsirkinEOD
8544 e811da7fSDaniel P. Berrangé
8545 e811da7fSDaniel P. Berrangépreserve_env() {
8546 e811da7fSDaniel P. Berrangé    envname=$1
8547 e811da7fSDaniel P. Berrangé
8548 e811da7fSDaniel P. Berrangé    eval envval=\$$envname
8549 e811da7fSDaniel P. Berrangé
8550 e811da7fSDaniel P. Berrangé    if test -n "$envval"
8551 e811da7fSDaniel P. Berrangé    then
8552 e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
8553 e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
8554 e811da7fSDaniel P. Berrangé    else
8555 e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
8556 e811da7fSDaniel P. Berrangé    fi
8557 e811da7fSDaniel P. Berrangé}
8558 e811da7fSDaniel P. Berrangé
8559 e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
8560 e811da7fSDaniel P. Berrangé# features/build target configure will detect
8561 e811da7fSDaniel P. Berrangépreserve_env AR
8562 e811da7fSDaniel P. Berrangépreserve_env AS
8563 e811da7fSDaniel P. Berrangépreserve_env CC
8564 e811da7fSDaniel P. Berrangépreserve_env CPP
8565 e811da7fSDaniel P. Berrangépreserve_env CXX
8566 e811da7fSDaniel P. Berrangépreserve_env INSTALL
8567 e811da7fSDaniel P. Berrangépreserve_env LD
8568 e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
8569 e811da7fSDaniel P. Berrangépreserve_env LIBTOOL
8570 e811da7fSDaniel P. Berrangépreserve_env MAKE
8571 e811da7fSDaniel P. Berrangépreserve_env NM
8572 e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
8573 e811da7fSDaniel P. Berrangépreserve_env PATH
8574 e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
8575 e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
8576 e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
8577 e811da7fSDaniel P. Berrangépreserve_env PYTHON
8578 e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
8579 e811da7fSDaniel P. Berrangépreserve_env SMBD
8580 e811da7fSDaniel P. Berrangépreserve_env STRIP
8581 e811da7fSDaniel P. Berrangépreserve_env WINDRES
8582 e811da7fSDaniel P. Berrangé
8583 dc655404SMichael S. Tsirkinprintf "exec" >>config.status
8584 a5665051SPaolo Bonzinifor i in "$0" "$@"; do
8585 a5665051SPaolo Bonzini  test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
8586 a5665051SPaolo Bonzinidone
8587 cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
8588 dc655404SMichael S. Tsirkinchmod +x config.status
8589 dc655404SMichael S. Tsirkin
8590 8cd05ab6SPeter Maydellrm -r "$TMPDIR1"
8591