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