xref: /openbmc/qemu/configure (revision 60f999b7f2890c9e8ddcd404ce8c4b89b5dee0a2)
1 7d13299dSbellard#!/bin/sh
2 7d13299dSbellard#
3 3ef693a0Sbellard# qemu configure script (c) 2003 Fabrice Bellard
4 7d13299dSbellard#
5 8cd05ab6SPeter Maydell
6 99519e67SCornelia Huck# Unset some variables known to interfere with behavior of common tools,
7 99519e67SCornelia Huck# just as autoconf does.
8 99519e67SCornelia HuckCLICOLOR_FORCE= GREP_OPTIONS=
9 99519e67SCornelia Huckunset CLICOLOR_FORCE GREP_OPTIONS
10 99519e67SCornelia Huck
11 5e4dfd3dSJohn Snow# Don't allow CCACHE, if present, to use cached results of compile tests!
12 5e4dfd3dSJohn Snowexport CCACHE_RECACHE=yes
13 5e4dfd3dSJohn Snow
14 dedad027SDaniel P. Berrangé# make source path absolute
15 dedad027SDaniel P. Berrangésource_path=$(cd "$(dirname -- "$0")"; pwd)
16 dedad027SDaniel P. Berrangé
17 dedad027SDaniel P. Berrangéif test "$PWD" = "$source_path"
18 dedad027SDaniel P. Berrangéthen
19 dedad027SDaniel P. Berrangé    echo "Using './build' as the directory for build output"
20 dedad027SDaniel P. Berrangé
21 dedad027SDaniel P. Berrangé    MARKER=build/auto-created-by-configure
22 dedad027SDaniel P. Berrangé
23 dedad027SDaniel P. Berrangé    if test -e build
24 dedad027SDaniel P. Berrangé    then
25 dedad027SDaniel P. Berrangé        if test -f $MARKER
26 dedad027SDaniel P. Berrangé        then
27 dedad027SDaniel P. Berrangé           rm -rf build
28 dedad027SDaniel P. Berrangé        else
29 dedad027SDaniel P. Berrangé            echo "ERROR: ./build dir already exists and was not previously created by configure"
30 dedad027SDaniel P. Berrangé            exit 1
31 dedad027SDaniel P. Berrangé        fi
32 dedad027SDaniel P. Berrangé    fi
33 dedad027SDaniel P. Berrangé
34 f160a5b2SDinah Baum    if ! mkdir build || ! touch $MARKER
35 f160a5b2SDinah Baum    then
36 f160a5b2SDinah Baum        echo "ERROR: Could not create ./build directory. Check the permissions on"
37 f160a5b2SDinah Baum        echo "your source directory, or try doing an out-of-tree build."
38 f160a5b2SDinah Baum        exit 1
39 f160a5b2SDinah Baum    fi
40 dedad027SDaniel P. Berrangé
41 dedad027SDaniel P. Berrangé    cat > GNUmakefile <<'EOF'
42 dedad027SDaniel P. Berrangé# This file is auto-generated by configure to support in-source tree
43 dedad027SDaniel P. Berrangé# 'make' command invocation
44 dedad027SDaniel P. Berrangé
45 dedad027SDaniel P. Berrangéifeq ($(MAKECMDGOALS),)
46 dedad027SDaniel P. Berrangérecurse: all
47 dedad027SDaniel P. Berrangéendif
48 dedad027SDaniel P. Berrangé
49 dedad027SDaniel P. Berrangé.NOTPARALLEL: %
50 dedad027SDaniel P. Berrangé%: force
51 dedad027SDaniel P. Berrangé	@echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
52 dedad027SDaniel P. Berrangé	@$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
53 dedad027SDaniel P. Berrangé	@if test "$(MAKECMDGOALS)" = "distclean" && \
54 dedad027SDaniel P. Berrangé	    test -e build/auto-created-by-configure ; \
55 dedad027SDaniel P. Berrangé	then \
56 dedad027SDaniel P. Berrangé	    rm -rf build GNUmakefile ; \
57 dedad027SDaniel P. Berrangé	fi
58 dedad027SDaniel P. Berrangéforce: ;
59 dedad027SDaniel P. Berrangé.PHONY: force
60 dedad027SDaniel P. BerrangéGNUmakefile: ;
61 dedad027SDaniel P. Berrangé
62 dedad027SDaniel P. BerrangéEOF
63 dedad027SDaniel P. Berrangé    cd build
64 64708615SPeter Maydell    exec "$source_path/configure" "$@"
65 dedad027SDaniel P. Berrangéfi
66 dedad027SDaniel P. Berrangé
67 8cd05ab6SPeter Maydell# Temporary directory used for files created while
68 8cd05ab6SPeter Maydell# configure runs. Since it is in the build directory
69 8cd05ab6SPeter Maydell# we can safely blow away any previous version of it
70 8cd05ab6SPeter Maydell# (and we need not jump through hoops to try to delete
71 8cd05ab6SPeter Maydell# it when configure exits.)
72 8cd05ab6SPeter MaydellTMPDIR1="config-temp"
73 8cd05ab6SPeter Maydellrm -rf "${TMPDIR1}"
74 563661c0SPeter Maydellif ! mkdir -p "${TMPDIR1}"; then
75 8cd05ab6SPeter Maydell    echo "ERROR: failed to create temporary directory"
76 8cd05ab6SPeter Maydell    exit 1
77 7d13299dSbellardfi
78 7d13299dSbellard
79 8cd05ab6SPeter MaydellTMPB="qemu-conf"
80 8cd05ab6SPeter MaydellTMPC="${TMPDIR1}/${TMPB}.c"
81 66518bf6SDon SlutzTMPO="${TMPDIR1}/${TMPB}.o"
82 4cb37d11SPhilippe Mathieu-DaudéTMPM="${TMPDIR1}/${TMPB}.m"
83 8cd05ab6SPeter MaydellTMPE="${TMPDIR1}/${TMPB}.exe"
84 7d13299dSbellard
85 da1d85e3SGerd Hoffmannrm -f config.log
86 9ac81bbbSmalc
87 b48e3611SPeter Maydell# Print a helpful header at the top of config.log
88 b48e3611SPeter Maydellecho "# QEMU configure log $(date)" >> config.log
89 979ae168SPeter Maydellprintf "# Configured with:" >> config.log
90 7f788779SAlex Bennée# repeat the invocation to log and stdout for CI
91 7f788779SAlex Bennéeinvoke=$(printf " '%s'" "$0" "$@")
92 7f788779SAlex Bennéetest -n "$GITLAB_CI" && echo "configuring with: $invoke"
93 7f788779SAlex Bennée{ echo "$invoke"; echo; echo "#"; } >> config.log
94 b48e3611SPeter Maydell
95 835af899SPaolo Bonziniquote_sh() {
96 835af899SPaolo Bonzini    printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
97 835af899SPaolo Bonzini}
98 835af899SPaolo Bonzini
99 d880a3baSPaolo Bonziniprint_error() {
100 d880a3baSPaolo Bonzini    (echo
101 76ad07a4SPeter Maydell    echo "ERROR: $1"
102 76ad07a4SPeter Maydell    while test -n "$2"; do
103 76ad07a4SPeter Maydell        echo "       $2"
104 76ad07a4SPeter Maydell        shift
105 76ad07a4SPeter Maydell    done
106 d880a3baSPaolo Bonzini    echo) >&2
107 d880a3baSPaolo Bonzini}
108 d880a3baSPaolo Bonzini
109 d880a3baSPaolo Bonzinierror_exit() {
110 d880a3baSPaolo Bonzini    print_error "$@"
111 76ad07a4SPeter Maydell    exit 1
112 76ad07a4SPeter Maydell}
113 76ad07a4SPeter Maydell
114 9c83ffd8SPeter Maydelldo_compiler() {
115 9c83ffd8SPeter Maydell  # Run the compiler, capturing its output to the log. First argument
116 9c83ffd8SPeter Maydell  # is compiler binary to execute.
117 b3b5472dSPeter Maydell  compiler="$1"
118 cd362defSPaolo Bonzini  shift
119 cd362defSPaolo Bonzini  if test -n "$BASH_VERSION"; then eval '
120 cd362defSPaolo Bonzini      echo >>config.log "
121 cd362defSPaolo Bonzinifuncs: ${FUNCNAME[*]}
122 cd362defSPaolo Bonzinilines: ${BASH_LINENO[*]}"
123 cd362defSPaolo Bonzini  '; fi
124 cd362defSPaolo Bonzini  echo $compiler "$@" >> config.log
125 cd362defSPaolo Bonzini  $compiler "$@" >> config.log 2>&1 || return $?
126 cd362defSPaolo Bonzini}
127 cd362defSPaolo Bonzini
128 cd362defSPaolo Bonzinido_compiler_werror() {
129 cd362defSPaolo Bonzini    # Run the compiler, capturing its output to the log. First argument
130 cd362defSPaolo Bonzini    # is compiler binary to execute.
131 630d86b7SDavid CARLIER    compiler="$1"
132 9c83ffd8SPeter Maydell    shift
133 8bbe05d7SIan Jackson    if test -n "$BASH_VERSION"; then eval '
134 8bbe05d7SIan Jackson        echo >>config.log "
135 8bbe05d7SIan Jacksonfuncs: ${FUNCNAME[*]}
136 8bbe05d7SIan Jacksonlines: ${BASH_LINENO[*]}"
137 8bbe05d7SIan Jackson    '; fi
138 9c83ffd8SPeter Maydell    echo $compiler "$@" >> config.log
139 9c83ffd8SPeter Maydell    $compiler "$@" >> config.log 2>&1 || return $?
140 8dc38a78SPeter Maydell    # Test passed. If this is an --enable-werror build, rerun
141 8dc38a78SPeter Maydell    # the test with -Werror and bail out if it fails. This
142 8dc38a78SPeter Maydell    # makes warning-generating-errors in configure test code
143 8dc38a78SPeter Maydell    # obvious to developers.
144 8dc38a78SPeter Maydell    if test "$werror" != "yes"; then
145 8dc38a78SPeter Maydell        return 0
146 8dc38a78SPeter Maydell    fi
147 8dc38a78SPeter Maydell    # Don't bother rerunning the compile if we were already using -Werror
148 8dc38a78SPeter Maydell    case "$*" in
149 8dc38a78SPeter Maydell        *-Werror*)
150 8dc38a78SPeter Maydell           return 0
151 8dc38a78SPeter Maydell        ;;
152 8dc38a78SPeter Maydell    esac
153 9c83ffd8SPeter Maydell    echo $compiler -Werror "$@" >> config.log
154 9c83ffd8SPeter Maydell    $compiler -Werror "$@" >> config.log 2>&1 && return $?
155 76ad07a4SPeter Maydell    error_exit "configure test passed without -Werror but failed with -Werror." \
156 76ad07a4SPeter Maydell        "This is probably a bug in the configure script. The failing command" \
157 76ad07a4SPeter Maydell        "will be at the bottom of config.log." \
158 76ad07a4SPeter Maydell        "You can run configure with --disable-werror to bypass this check."
159 8dc38a78SPeter Maydell}
160 8dc38a78SPeter Maydell
161 9c83ffd8SPeter Maydelldo_cc() {
162 cd362defSPaolo Bonzini    do_compiler_werror "$cc" $CPU_CFLAGS "$@"
163 9c83ffd8SPeter Maydell}
164 9c83ffd8SPeter Maydell
165 4cb37d11SPhilippe Mathieu-Daudédo_objc() {
166 cd362defSPaolo Bonzini    do_compiler_werror "$objcc" $CPU_CFLAGS "$@"
167 4cb37d11SPhilippe Mathieu-Daudé}
168 4cb37d11SPhilippe Mathieu-Daudé
169 00849b92SRichard Henderson# Append $2 to the variable named $1, with space separation
170 00849b92SRichard Hendersonadd_to() {
171 00849b92SRichard Henderson    eval $1=\${$1:+\"\$$1 \"}\$2
172 00849b92SRichard Henderson}
173 00849b92SRichard Henderson
174 52166aa0SJuan Quintelacompile_object() {
175 fd0e6053SJohn Snow  local_cflags="$1"
176 a2866660SPaolo Bonzini  do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
177 52166aa0SJuan Quintela}
178 52166aa0SJuan Quintela
179 52166aa0SJuan Quintelacompile_prog() {
180 52166aa0SJuan Quintela  local_cflags="$1"
181 52166aa0SJuan Quintela  local_ldflags="$2"
182 a2866660SPaolo Bonzini  do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
183 a2866660SPaolo Bonzini      $LDFLAGS $EXTRA_LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
184 52166aa0SJuan Quintela}
185 52166aa0SJuan Quintela
186 11568d6dSPaolo Bonzini# symbolically link $1 to $2.  Portable version of "ln -sf".
187 11568d6dSPaolo Bonzinisymlink() {
188 72b8b5a1SStefan Weil  rm -rf "$2"
189 ec5b06d7SAnthony Liguori  mkdir -p "$(dirname "$2")"
190 72b8b5a1SStefan Weil  ln -s "$1" "$2"
191 11568d6dSPaolo Bonzini}
192 11568d6dSPaolo Bonzini
193 0dba6195SLoïc Minier# check whether a command is available to this shell (may be either an
194 0dba6195SLoïc Minier# executable or a builtin)
195 0dba6195SLoïc Minierhas() {
196 0dba6195SLoïc Minier    type "$1" >/dev/null 2>&1
197 0dba6195SLoïc Minier}
198 0dba6195SLoïc Minier
199 0a01d76fSMarc-André Lureauversion_ge () {
200 2df52b9bSAlex Bennée    local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
201 2df52b9bSAlex Bennée    local_ver2=$(echo "$2" | tr . ' ')
202 0a01d76fSMarc-André Lureau    while true; do
203 0a01d76fSMarc-André Lureau        set x $local_ver1
204 0a01d76fSMarc-André Lureau        local_first=${2-0}
205 c44a33e2SStefano Garzarella        # 'shift 2' if $2 is set, or 'shift' if $2 is not set
206 c44a33e2SStefano Garzarella        shift ${2:+2}
207 0a01d76fSMarc-André Lureau        local_ver1=$*
208 0a01d76fSMarc-André Lureau        set x $local_ver2
209 0a01d76fSMarc-André Lureau        # the second argument finished, the first must be greater or equal
210 0a01d76fSMarc-André Lureau        test $# = 1 && return 0
211 0a01d76fSMarc-André Lureau        test $local_first -lt $2 && return 1
212 0a01d76fSMarc-André Lureau        test $local_first -gt $2 && return 0
213 c44a33e2SStefano Garzarella        shift ${2:+2}
214 0a01d76fSMarc-André Lureau        local_ver2=$*
215 0a01d76fSMarc-André Lureau    done
216 0a01d76fSMarc-André Lureau}
217 0a01d76fSMarc-André Lureau
218 4ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
219 4ace32e2SAntonio Ospitethen
220 4ace32e2SAntonio Ospite  error_exit "main directory cannot contain spaces nor colons"
221 4ace32e2SAntonio Ospitefi
222 4ace32e2SAntonio Ospite
223 14211825SAntonio Ospite# default parameters
224 2ff6b91eSJuan Quintelacpu=""
225 43ce4dfeSbellardstatic="no"
226 3812c0c4SJoelle van Dynecross_compile="no"
227 7d13299dSbellardcross_prefix=""
228 e49d021eSPeter Maydellhost_cc="cc"
229 63678e17SSteven Noonanstack_protector=""
230 1e4f6065SDaniele Buonosafe_stack=""
231 afc3a8f9SAlex Bennéeuse_containers="yes"
232 f2385398SAlex Bennéegdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
233 ac0df51dSaliguori
234 92712822SDaniel P. Berrangeif test -e "$source_path/.git"
235 92712822SDaniel P. Berrangethen
236 7d7dbf9dSDan Streetman    git_submodules_action="update"
237 92712822SDaniel P. Berrangeelse
238 7d7dbf9dSDan Streetman    git_submodules_action="ignore"
239 92712822SDaniel P. Berrangefi
240 2d652f24SPaolo Bonzini
241 2d652f24SPaolo Bonzinigit_submodules="ui/keycodemapdb"
242 cc84d63aSDaniel P. Berrangegit="git"
243 ac0df51dSaliguori
244 afb63ebdSStefan Weil# Don't accept a target_list environment variable.
245 afb63ebdSStefan Weilunset target_list
246 447e133fSAlex Bennéeunset target_list_exclude
247 377529c0SPaolo Bonzini
248 377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
249 377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
250 377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
251 377529c0SPaolo Bonzini#              unless --disable-foo is given
252 377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
253 377529c0SPaolo Bonzini#              feature will searched for,
254 377529c0SPaolo Bonzini#              if not found, configure exits with error
255 377529c0SPaolo Bonzini#
256 377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
257 377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
258 377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
259 377529c0SPaolo Bonzini
260 c87ea116SAlex Bennéedefault_feature=""
261 c87ea116SAlex Bennée# parse CC options second
262 c87ea116SAlex Bennéefor opt do
263 c87ea116SAlex Bennée  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
264 c87ea116SAlex Bennée  case "$opt" in
265 c87ea116SAlex Bennée      --without-default-features)
266 c87ea116SAlex Bennée          default_feature="no"
267 c87ea116SAlex Bennée  ;;
268 c87ea116SAlex Bennée  esac
269 c87ea116SAlex Bennéedone
270 c87ea116SAlex Bennée
271 a2866660SPaolo BonziniEXTRA_CFLAGS=""
272 a2866660SPaolo BonziniEXTRA_CXXFLAGS=""
273 e910c7d9SPhilippe Mathieu-DaudéEXTRA_OBJCFLAGS=""
274 a2866660SPaolo BonziniEXTRA_LDFLAGS=""
275 a2866660SPaolo Bonzini
276 377529c0SPaolo Bonzinidebug_tcg="no"
277 247724cbSMarc-André Lureausanitizers="no"
278 0aebab04SLingfeng Yangtsan="no"
279 1f3f2bfeSMichael Tokarevfortify_source="yes"
280 c7328271SMiroslav RezaninaEXESUF=""
281 17969268SFam Zhengmodules="no"
282 377529c0SPaolo Bonziniprefix="/usr/local"
283 10ff82d1SMarc-André Lureauqemu_suffix="qemu"
284 377529c0SPaolo Bonzinisoftmmu="yes"
285 b915a2f1SPaolo Bonzinilinux_user=""
286 b915a2f1SPaolo Bonzinibsd_user=""
287 40d6444eSAvi Kivitypie=""
288 519175a2SAlex Barcelocoroutine=""
289 ba4dd2aaSAlex Bennéeplugins="$default_feature"
290 a5665051SPaolo Bonzinimeson=""
291 48328880SPaolo Bonzinininja=""
292 c09c1ce7SPaolo Bonzinibindir="bin"
293 a5665051SPaolo Bonziniskip_meson=no
294 55116968SJagannathan Ramanvfio_user_server="disabled"
295 377529c0SPaolo Bonzini
296 3b4da132SPaolo Bonzini# The following Meson options are handled manually (still they
297 3b4da132SPaolo Bonzini# are included in the automatically generated help message)
298 3b4da132SPaolo Bonzini
299 3b4da132SPaolo Bonzini# 1. Track which submodules are needed
300 0577e84dSThomas Huthfdt="auto"
301 3b4da132SPaolo Bonzini
302 c54b59eeSPaolo Bonzini# 2. Automatically enable/disable other options
303 7630156dSPhilippe Mathieu-Daudétcg="auto"
304 3b4da132SPaolo Bonzinicfi="false"
305 3b4da132SPaolo Bonzini
306 c87ea116SAlex Bennée# parse CC options second
307 ac0df51dSaliguorifor opt do
308 89138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
309 ac0df51dSaliguori  case "$opt" in
310 ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
311 3812c0c4SJoelle van Dyne                    cross_compile="yes"
312 ac0df51dSaliguori  ;;
313 3d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
314 ac0df51dSaliguori  ;;
315 83f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
316 83f73fceSTomoki Sekiyama  ;;
317 2ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
318 2ff6b91eSJuan Quintela  ;;
319 a2866660SPaolo Bonzini  --extra-cflags=*)
320 a2866660SPaolo Bonzini    EXTRA_CFLAGS="$EXTRA_CFLAGS $optarg"
321 a2866660SPaolo Bonzini    EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
322 e910c7d9SPhilippe Mathieu-Daudé    EXTRA_OBJCFLAGS="$EXTRA_OBJCFLAGS $optarg"
323 e2a2ed06SJuan Quintela    ;;
324 a2866660SPaolo Bonzini  --extra-cxxflags=*) EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
325 11cde1c8SBruno Dominguez  ;;
326 e910c7d9SPhilippe Mathieu-Daudé  --extra-objcflags=*) EXTRA_OBJCFLAGS="$EXTRA_OBJCFLAGS $optarg"
327 e910c7d9SPhilippe Mathieu-Daudé  ;;
328 a2866660SPaolo Bonzini  --extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg"
329 e2a2ed06SJuan Quintela  ;;
330 d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
331 d75402b5SAlex Bennée  ;;
332 479ca4ccSMatheus Ferst  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-cflags-}; cc_arch=${cc_arch%%=*}
333 d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
334 d422b2bcSAlex Bennée  ;;
335 d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
336 d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
337 d75402b5SAlex Bennée  ;;
338 5adb43beSPaolo Bonzini  --cross-prefix-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-prefix-FOO option"
339 5adb43beSPaolo Bonzini  ;;
340 5adb43beSPaolo Bonzini  --cross-prefix-*) cc_arch=${opt#--cross-prefix-}; cc_arch=${cc_arch%%=*}
341 5adb43beSPaolo Bonzini                    eval "cross_prefix_${cc_arch}=\$optarg"
342 5adb43beSPaolo Bonzini  ;;
343 ac0df51dSaliguori  esac
344 ac0df51dSaliguoridone
345 ac0df51dSaliguori
346 e49d021eSPeter Maydell# Preferred compiler:
347 e49d021eSPeter Maydell#  ${CC} (if set)
348 e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
349 e49d021eSPeter Maydell#  system compiler
350 e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
351 e49d021eSPeter Maydell  cc="$host_cc"
352 e49d021eSPeter Maydellelse
353 b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
354 e49d021eSPeter Maydellfi
355 e49d021eSPeter Maydell
356 83f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
357 83f73fceSTomoki Sekiyama  cxx="c++"
358 83f73fceSTomoki Sekiyamaelse
359 83f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
360 83f73fceSTomoki Sekiyamafi
361 83f73fceSTomoki Sekiyama
362 b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
363 cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
364 5f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
365 b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
366 b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
367 9f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
368 4852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
369 35acbb30SPaolo Bonzinismbd="$SMBD"
370 b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
371 158bb224SKonstantin Kostiukwidl="${WIDL-${cross_prefix}widl}"
372 b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
373 f9f0e617SAndrey Drobyshevwindmc="${WINDMC-${cross_prefix}windmc}"
374 17884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
375 17884d7bSSergei Trofimovichquery_pkg_config() {
376 17884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
377 17884d7bSSergei Trofimovich}
378 17884d7bSSergei Trofimovichpkg_config=query_pkg_config
379 47c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
380 ac0df51dSaliguori
381 be17dc90SMichael S. Tsirkin# default flags for all hosts
382 2d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where
383 2d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected
384 2d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it
385 2d31515bSPeter Maydell# provides these semantics.)
386 de38c0ccSPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv"
387 be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
388 5770e8afSPaolo Bonzini
389 de38c0ccSPaolo BonziniQEMU_LDFLAGS=
390 de38c0ccSPaolo Bonzini
391 5770e8afSPaolo Bonzini# Flags that are needed during configure but later taken care of by Meson
392 8a9d3d56SRichard HendersonCONFIGURE_CFLAGS="-std=gnu11 -Wall"
393 5770e8afSPaolo BonziniCONFIGURE_LDFLAGS=
394 086d5f75SPaolo Bonzini
395 be17dc90SMichael S. Tsirkin
396 ac0df51dSaliguoricheck_define() {
397 ac0df51dSaliguoricat > $TMPC <<EOF
398 ac0df51dSaliguori#if !defined($1)
399 fd786e1aSPeter Maydell#error $1 not defined
400 ac0df51dSaliguori#endif
401 ac0df51dSaliguoriint main(void) { return 0; }
402 ac0df51dSaliguoriEOF
403 52166aa0SJuan Quintela  compile_object
404 ac0df51dSaliguori}
405 ac0df51dSaliguori
406 307119e7SGerd Hoffmanncheck_include() {
407 307119e7SGerd Hoffmanncat > $TMPC <<EOF
408 307119e7SGerd Hoffmann#include <$1>
409 307119e7SGerd Hoffmannint main(void) { return 0; }
410 307119e7SGerd HoffmannEOF
411 307119e7SGerd Hoffmann  compile_object
412 307119e7SGerd Hoffmann}
413 307119e7SGerd Hoffmann
414 93b25869SJohn Snowwrite_c_skeleton() {
415 93b25869SJohn Snow    cat > $TMPC <<EOF
416 93b25869SJohn Snowint main(void) { return 0; }
417 93b25869SJohn SnowEOF
418 93b25869SJohn Snow}
419 93b25869SJohn Snow
420 bbea4050SPeter Maydellif check_define __linux__ ; then
421 ba7c60c2SPaolo Bonzini  targetos=linux
422 bbea4050SPeter Maydellelif check_define _WIN32 ; then
423 ba7c60c2SPaolo Bonzini  targetos=windows
424 bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
425 ba7c60c2SPaolo Bonzini  targetos=openbsd
426 bbea4050SPeter Maydellelif check_define __sun__ ; then
427 ba7c60c2SPaolo Bonzini  targetos=sunos
428 bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
429 ba7c60c2SPaolo Bonzini  targetos=haiku
430 951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
431 ba7c60c2SPaolo Bonzini  targetos=freebsd
432 951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
433 ba7c60c2SPaolo Bonzini  targetos=gnu/kfreebsd
434 951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
435 ba7c60c2SPaolo Bonzini  targetos=dragonfly
436 951fedfcSPeter Maydellelif check_define __NetBSD__; then
437 ba7c60c2SPaolo Bonzini  targetos=netbsd
438 951fedfcSPeter Maydellelif check_define __APPLE__; then
439 ba7c60c2SPaolo Bonzini  targetos=darwin
440 bbea4050SPeter Maydellelse
441 951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
442 951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
443 951fedfcSPeter Maydell  # be the result of a missing compiler.
444 ba7c60c2SPaolo Bonzini  targetos=bogus
445 bbea4050SPeter Maydellfi
446 bbea4050SPeter Maydell
447 65eff01bSPaolo Bonzini# OS specific
448 65eff01bSPaolo Bonzini
449 3b0d8643SPaolo Bonzinimingw32="no"
450 3b0d8643SPaolo Bonzinibsd="no"
451 3b0d8643SPaolo Bonzinilinux="no"
452 3b0d8643SPaolo Bonzinisolaris="no"
453 65eff01bSPaolo Bonzinicase $targetos in
454 65eff01bSPaolo Bonziniwindows)
455 65eff01bSPaolo Bonzini  mingw32="yes"
456 65eff01bSPaolo Bonzini  plugins="no"
457 65eff01bSPaolo Bonzini  pie="no"
458 65eff01bSPaolo Bonzini;;
459 65eff01bSPaolo Bonzinignu/kfreebsd)
460 65eff01bSPaolo Bonzini  bsd="yes"
461 65eff01bSPaolo Bonzini;;
462 65eff01bSPaolo Bonzinifreebsd)
463 65eff01bSPaolo Bonzini  bsd="yes"
464 65eff01bSPaolo Bonzini  make="${MAKE-gmake}"
465 65eff01bSPaolo Bonzini  # needed for kinfo_getvmmap(3) in libutil.h
466 65eff01bSPaolo Bonzini;;
467 65eff01bSPaolo Bonzinidragonfly)
468 65eff01bSPaolo Bonzini  bsd="yes"
469 65eff01bSPaolo Bonzini  make="${MAKE-gmake}"
470 65eff01bSPaolo Bonzini;;
471 65eff01bSPaolo Bonzininetbsd)
472 65eff01bSPaolo Bonzini  bsd="yes"
473 65eff01bSPaolo Bonzini  make="${MAKE-gmake}"
474 65eff01bSPaolo Bonzini;;
475 65eff01bSPaolo Bonziniopenbsd)
476 65eff01bSPaolo Bonzini  bsd="yes"
477 65eff01bSPaolo Bonzini  make="${MAKE-gmake}"
478 65eff01bSPaolo Bonzini;;
479 65eff01bSPaolo Bonzinidarwin)
480 65eff01bSPaolo Bonzini  bsd="yes"
481 65eff01bSPaolo Bonzini  darwin="yes"
482 65eff01bSPaolo Bonzini  # Disable attempts to use ObjectiveC features in os/object.h since they
483 65eff01bSPaolo Bonzini  # won't work when we're compiling with gcc as a C compiler.
484 65eff01bSPaolo Bonzini  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
485 65eff01bSPaolo Bonzini;;
486 65eff01bSPaolo Bonzinisunos)
487 65eff01bSPaolo Bonzini  solaris="yes"
488 65eff01bSPaolo Bonzini  make="${MAKE-gmake}"
489 65eff01bSPaolo Bonzini# needed for CMSG_ macros in sys/socket.h
490 65eff01bSPaolo Bonzini  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
491 65eff01bSPaolo Bonzini# needed for TIOCWIN* defines in termios.h
492 65eff01bSPaolo Bonzini  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
493 65eff01bSPaolo Bonzini;;
494 65eff01bSPaolo Bonzinihaiku)
495 65eff01bSPaolo Bonzini  pie="no"
496 65eff01bSPaolo Bonzini  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
497 65eff01bSPaolo Bonzini;;
498 65eff01bSPaolo Bonzinilinux)
499 65eff01bSPaolo Bonzini  linux="yes"
500 65eff01bSPaolo Bonzini;;
501 bbea4050SPeter Maydellesac
502 bbea4050SPeter Maydell
503 2ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
504 2ff6b91eSJuan Quintela  # command line argument
505 2ff6b91eSJuan Quintela  :
506 2ff6b91eSJuan Quintelaelif check_define __i386__ ; then
507 ac0df51dSaliguori  cpu="i386"
508 ac0df51dSaliguorielif check_define __x86_64__ ; then
509 c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
510 c72b26ecSRichard Henderson    cpu="x32"
511 c72b26ecSRichard Henderson  else
512 ac0df51dSaliguori    cpu="x86_64"
513 c72b26ecSRichard Henderson  fi
514 3aa9bd6cSblueswir1elif check_define __sparc__ ; then
515 3aa9bd6cSblueswir1  if check_define __arch64__ ; then
516 3aa9bd6cSblueswir1    cpu="sparc64"
517 3aa9bd6cSblueswir1  else
518 3aa9bd6cSblueswir1    cpu="sparc"
519 3aa9bd6cSblueswir1  fi
520 fdf7ed96Smalcelif check_define _ARCH_PPC ; then
521 fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
522 f8378accSRichard Henderson    if check_define _LITTLE_ENDIAN ; then
523 f8378accSRichard Henderson      cpu="ppc64le"
524 f8378accSRichard Henderson    else
525 fdf7ed96Smalc      cpu="ppc64"
526 f8378accSRichard Henderson    fi
527 ac0df51dSaliguori  else
528 fdf7ed96Smalc    cpu="ppc"
529 fdf7ed96Smalc  fi
530 afa05235SAurelien Jarnoelif check_define __mips__ ; then
531 afa05235SAurelien Jarno  cpu="mips"
532 d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
533 d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
534 d66ed0eaSAurelien Jarno    cpu="s390x"
535 d66ed0eaSAurelien Jarno  else
536 d66ed0eaSAurelien Jarno    cpu="s390"
537 d66ed0eaSAurelien Jarno  fi
538 c4f80543SAlistair Franciselif check_define __riscv ; then
539 ba0e7333SRichard Henderson  cpu="riscv"
540 21d89f84SPeter Maydellelif check_define __arm__ ; then
541 21d89f84SPeter Maydell  cpu="arm"
542 1f080313SClaudio Fontanaelif check_define __aarch64__ ; then
543 1f080313SClaudio Fontana  cpu="aarch64"
544 dfcf900bSWANG Xueruielif check_define __loongarch64 ; then
545 dfcf900bSWANG Xuerui  cpu="loongarch64"
546 fdf7ed96Smalcelse
547 f9c77801SPaolo Bonzini  # Using uname is really broken, but it is just a fallback for architectures
548 f9c77801SPaolo Bonzini  # that are going to use TCI anyway
549 89138857SStefan Weil  cpu=$(uname -m)
550 f9c77801SPaolo Bonzini  echo "WARNING: unrecognized host CPU, proceeding with 'uname -m' output '$cpu'"
551 ac0df51dSaliguorifi
552 ac0df51dSaliguori
553 f9c77801SPaolo Bonzini# Normalise host CPU name and set multilib cflags.  The canonicalization
554 f9c77801SPaolo Bonzini# isn't really necessary, because the architectures that we check for
555 f9c77801SPaolo Bonzini# should not hit the 'uname -m' case, but better safe than sorry.
556 359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
557 7d13299dSbellardcase "$cpu" in
558 e4da0e39SPaolo Bonzini  armv*b|armv*l|arm)
559 e4da0e39SPaolo Bonzini    cpu="arm" ;;
560 e4da0e39SPaolo Bonzini
561 f9c77801SPaolo Bonzini  i386|i486|i586|i686)
562 97a847bcSbellard    cpu="i386"
563 e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m32" ;;
564 e4da0e39SPaolo Bonzini  x32)
565 4da270beSPaolo Bonzini    cpu="x86_64"
566 e4da0e39SPaolo Bonzini    CPU_CFLAGS="-mx32" ;;
567 aaa5fa14Saurel32  x86_64|amd64)
568 aaa5fa14Saurel32    cpu="x86_64"
569 e4da0e39SPaolo Bonzini    # ??? Only extremely old AMD cpus do not have cmpxchg16b.
570 e4da0e39SPaolo Bonzini    # If we truly care, we should simply detect this case at
571 e4da0e39SPaolo Bonzini    # runtime and generate the fallback to serial emulation.
572 e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m64 -mcx16" ;;
573 e4da0e39SPaolo Bonzini
574 afa05235SAurelien Jarno  mips*)
575 e4da0e39SPaolo Bonzini    cpu="mips" ;;
576 e4da0e39SPaolo Bonzini
577 e4da0e39SPaolo Bonzini  ppc)
578 e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m32" ;;
579 e4da0e39SPaolo Bonzini  ppc64)
580 ced5cfffSMiroslav Rezanina    CPU_CFLAGS="-m64 -mbig-endian" ;;
581 e4da0e39SPaolo Bonzini  ppc64le)
582 d8ff892dSPaolo Bonzini    cpu="ppc64"
583 ced5cfffSMiroslav Rezanina    CPU_CFLAGS="-m64 -mlittle-endian" ;;
584 e4da0e39SPaolo Bonzini
585 e4da0e39SPaolo Bonzini  s390)
586 823eb013SPaolo Bonzini    CPU_CFLAGS="-m31" ;;
587 e4da0e39SPaolo Bonzini  s390x)
588 e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m64" ;;
589 e4da0e39SPaolo Bonzini
590 3142255cSblueswir1  sparc|sun4[cdmuv])
591 ae228531Sbellard    cpu="sparc"
592 e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" ;;
593 e4da0e39SPaolo Bonzini  sparc64)
594 e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m64 -mcpu=ultrasparc" ;;
595 7d13299dSbellardesac
596 e2d52ad3SJuan Quintela
597 0db4a067SPaolo Bonzini: ${make=${MAKE-make}}
598 b6daf4d3SPaolo Bonzini
599 fee6d412SJohn Snow
600 fee6d412SJohn Snowcheck_py_version() {
601 fee6d412SJohn Snow    # We require python >= 3.6.
602 fee6d412SJohn Snow    # NB: a True python conditional creates a non-zero return code (Failure)
603 fee6d412SJohn Snow    "$1" -c 'import sys; sys.exit(sys.version_info < (3,6))'
604 fee6d412SJohn Snow}
605 fee6d412SJohn Snow
606 faf44142SDaniel P. Berrangépython=
607 fee6d412SJohn Snowfirst_python=
608 fee6d412SJohn Snowif test -z "${PYTHON}"; then
609 0a01d76fSMarc-André Lureau    explicit_python=no
610 fee6d412SJohn Snow    # A bare 'python' is traditionally python 2.x, but some distros
611 fee6d412SJohn Snow    # have it as python 3.x, so check in both places.
612 fee6d412SJohn Snow    for binary in python3 python python3.11 python3.10 python3.9 python3.8 python3.7 python3.6; do
613 fee6d412SJohn Snow        if has "$binary"; then
614 95c5f2deSPaolo Bonzini            python=$(command -v "$binary")
615 fee6d412SJohn Snow            if check_py_version "$python"; then
616 fee6d412SJohn Snow                # This one is good.
617 fee6d412SJohn Snow                first_python=
618 faf44142SDaniel P. Berrangé                break
619 fee6d412SJohn Snow            else
620 fee6d412SJohn Snow                first_python=$python
621 fee6d412SJohn Snow            fi
622 faf44142SDaniel P. Berrangé        fi
623 faf44142SDaniel P. Berrangé    done
624 fee6d412SJohn Snowelse
625 fee6d412SJohn Snow    # Same as above, but only check the environment variable.
626 fee6d412SJohn Snow    has "${PYTHON}" || error_exit "The PYTHON environment variable does not point to an executable"
627 fee6d412SJohn Snow    python=$(command -v "$PYTHON")
628 fee6d412SJohn Snow    explicit_python=yes
629 fee6d412SJohn Snow    if check_py_version "$python"; then
630 fee6d412SJohn Snow        # This one is good.
631 fee6d412SJohn Snow        first_python=
632 fee6d412SJohn Snow    else
633 fee6d412SJohn Snow        first_python=$first_python
634 fee6d412SJohn Snow    fi
635 fee6d412SJohn Snowfi
636 903458c8SMarkus Armbruster
637 39d87c8cSAlex Bennée# Check for ancillary tools used in testing
638 39d87c8cSAlex Bennéegenisoimage=
639 3df437c7SAlex Bennéefor binary in genisoimage mkisofs
640 39d87c8cSAlex Bennéedo
641 39d87c8cSAlex Bennée    if has $binary
642 39d87c8cSAlex Bennée    then
643 39d87c8cSAlex Bennée        genisoimage=$(command -v "$binary")
644 39d87c8cSAlex Bennée        break
645 39d87c8cSAlex Bennée    fi
646 39d87c8cSAlex Bennéedone
647 39d87c8cSAlex Bennée
648 3c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
649 3c4a4d0dSPeter Maydellif has clang; then
650 3c4a4d0dSPeter Maydell  objcc=clang
651 3c4a4d0dSPeter Maydellelse
652 3c4a4d0dSPeter Maydell  objcc="$cc"
653 3c4a4d0dSPeter Maydellfi
654 3c4a4d0dSPeter Maydell
655 3457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
656 3457a3f8SJuan Quintela  EXESUF=".exe"
657 78e9d4adSStefan Weil  # MinGW needs -mthreads for TLS and macro _MT.
658 5770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
659 d17f305aSPaolo Bonzini  prefix="/qemu"
660 c09c1ce7SPaolo Bonzini  bindir=""
661 77433a5fSMarc-André Lureau  qemu_suffix=""
662 3457a3f8SJuan Quintelafi
663 3457a3f8SJuan Quintela
664 487fefdbSAnthony Liguoriwerror=""
665 85aa5189Sbellard
666 8154f5e6SAkihiko Odakimeson_option_build_array() {
667 8154f5e6SAkihiko Odaki  printf '['
668 c5cfdabaSPeter Maydell  (if test "$targetos" = windows; then
669 8154f5e6SAkihiko Odaki    IFS=\;
670 8154f5e6SAkihiko Odaki  else
671 8154f5e6SAkihiko Odaki    IFS=:
672 8154f5e6SAkihiko Odaki  fi
673 8154f5e6SAkihiko Odaki  for e in $1; do
674 65842b03SPeter Maydell    printf '"""'
675 65842b03SPeter Maydell    # backslash escape any '\' and '"' characters
676 65842b03SPeter Maydell    printf "%s" "$e" | sed -e 's/\([\"]\)/\\\1/g'
677 65842b03SPeter Maydell    printf '""",'
678 8154f5e6SAkihiko Odaki  done)
679 8154f5e6SAkihiko Odaki  printf ']\n'
680 8154f5e6SAkihiko Odaki}
681 8154f5e6SAkihiko Odaki
682 64708615SPeter Maydell. "$source_path/scripts/meson-buildoptions.sh"
683 61d63097SPaolo Bonzini
684 61d63097SPaolo Bonzinimeson_options=
685 c54b59eeSPaolo Bonzinimeson_option_add() {
686 c54b59eeSPaolo Bonzini  meson_options="$meson_options $(quote_sh "$1")"
687 c54b59eeSPaolo Bonzini}
688 61d63097SPaolo Bonzinimeson_option_parse() {
689 61d63097SPaolo Bonzini  meson_options="$meson_options $(_meson_option_parse "$@")"
690 61d63097SPaolo Bonzini  if test $? -eq 1; then
691 61d63097SPaolo Bonzini    echo "ERROR: unknown option $1"
692 61d63097SPaolo Bonzini    echo "Try '$0 --help' for more information"
693 61d63097SPaolo Bonzini    exit 1
694 61d63097SPaolo Bonzini  fi
695 61d63097SPaolo Bonzini}
696 61d63097SPaolo Bonzini
697 7d13299dSbellardfor opt do
698 89138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
699 7d13299dSbellard  case "$opt" in
700 2efc3265Sbellard  --help|-h) show_help=yes
701 2efc3265Sbellard  ;;
702 64708615SPeter Maydell  --version|-V) exec cat "$source_path/VERSION"
703 99123e13SMike Frysinger  ;;
704 b1a550a0Spbrook  --prefix=*) prefix="$optarg"
705 7d13299dSbellard  ;;
706 ac0df51dSaliguori  --cross-prefix=*)
707 7d13299dSbellard  ;;
708 ac0df51dSaliguori  --cc=*)
709 7d13299dSbellard  ;;
710 b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
711 83469015Sbellard  ;;
712 83f73fceSTomoki Sekiyama  --cxx=*)
713 83f73fceSTomoki Sekiyama  ;;
714 3c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
715 3c4a4d0dSPeter Maydell  ;;
716 b1a550a0Spbrook  --make=*) make="$optarg"
717 7d13299dSbellard  ;;
718 b6daf4d3SPaolo Bonzini  --install=*)
719 6a882643Spbrook  ;;
720 0a01d76fSMarc-André Lureau  --python=*) python="$optarg" ; explicit_python=yes
721 c886edfbSBlue Swirl  ;;
722 a5665051SPaolo Bonzini  --skip-meson) skip_meson=yes
723 a5665051SPaolo Bonzini  ;;
724 a5665051SPaolo Bonzini  --meson=*) meson="$optarg"
725 a5665051SPaolo Bonzini  ;;
726 48328880SPaolo Bonzini  --ninja=*) ninja="$optarg"
727 48328880SPaolo Bonzini  ;;
728 e2d8830eSBrad  --smbd=*) smbd="$optarg"
729 e2d8830eSBrad  ;;
730 e2a2ed06SJuan Quintela  --extra-cflags=*)
731 7d13299dSbellard  ;;
732 11cde1c8SBruno Dominguez  --extra-cxxflags=*)
733 11cde1c8SBruno Dominguez  ;;
734 e910c7d9SPhilippe Mathieu-Daudé  --extra-objcflags=*)
735 e910c7d9SPhilippe Mathieu-Daudé  ;;
736 e2a2ed06SJuan Quintela  --extra-ldflags=*)
737 7d13299dSbellard  ;;
738 d75402b5SAlex Bennée  --cross-cc-*)
739 d75402b5SAlex Bennée  ;;
740 5adb43beSPaolo Bonzini  --cross-prefix-*)
741 5adb43beSPaolo Bonzini  ;;
742 c54b59eeSPaolo Bonzini  --enable-debug-info) meson_option_add -Ddebug=true
743 28609749SPaolo Bonzini  ;;
744 c54b59eeSPaolo Bonzini  --disable-debug-info) meson_option_add -Ddebug=false
745 28609749SPaolo Bonzini  ;;
746 17969268SFam Zheng  --enable-modules)
747 17969268SFam Zheng      modules="yes"
748 17969268SFam Zheng  ;;
749 3aa88b31SStefan Hajnoczi  --disable-modules)
750 3aa88b31SStefan Hajnoczi      modules="no"
751 3aa88b31SStefan Hajnoczi  ;;
752 2ff6b91eSJuan Quintela  --cpu=*)
753 7d13299dSbellard  ;;
754 b1a550a0Spbrook  --target-list=*) target_list="$optarg"
755 447e133fSAlex Bennée                   if test "$target_list_exclude"; then
756 447e133fSAlex Bennée                       error_exit "Can't mix --target-list with --target-list-exclude"
757 447e133fSAlex Bennée                   fi
758 447e133fSAlex Bennée  ;;
759 447e133fSAlex Bennée  --target-list-exclude=*) target_list_exclude="$optarg"
760 447e133fSAlex Bennée                   if test "$target_list"; then
761 447e133fSAlex Bennée                       error_exit "Can't mix --target-list-exclude with --target-list"
762 447e133fSAlex Bennée                   fi
763 de83cd02Sbellard  ;;
764 c54b59eeSPaolo Bonzini  --with-default-devices) meson_option_add -Ddefault_devices=true
765 f3494749SPaolo Bonzini  ;;
766 c54b59eeSPaolo Bonzini  --without-default-devices) meson_option_add -Ddefault_devices=false
767 f3494749SPaolo Bonzini  ;;
768 d1d5e9eeSAlex Bennée  --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
769 d1d5e9eeSAlex Bennée  ;;
770 d1d5e9eeSAlex Bennée  --with-devices-*) device_arch=${opt#--with-devices-};
771 d1d5e9eeSAlex Bennée                    device_arch=${device_arch%%=*}
772 d1d5e9eeSAlex Bennée                    cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
773 d1d5e9eeSAlex Bennée                    if test -f "$cf"; then
774 d1d5e9eeSAlex Bennée                        device_archs="$device_archs $device_arch"
775 d1d5e9eeSAlex Bennée                        eval "devices_${device_arch}=\$optarg"
776 d1d5e9eeSAlex Bennée                    else
777 d1d5e9eeSAlex Bennée                        error_exit "File $cf does not exist"
778 d1d5e9eeSAlex Bennée                    fi
779 d1d5e9eeSAlex Bennée  ;;
780 c87ea116SAlex Bennée  --without-default-features) # processed above
781 c87ea116SAlex Bennée  ;;
782 79427693SLoïc Minier  --static)
783 79427693SLoïc Minier    static="yes"
784 17884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
785 43ce4dfeSbellard  ;;
786 0b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
787 0b24e75fSPaolo Bonzini  ;;
788 77433a5fSMarc-André Lureau  --with-suffix=*) qemu_suffix="$optarg"
789 023d3d67SEduardo Habkost  ;;
790 181ce1d0SOlaf Hering  --host=*|--build=*|\
791 181ce1d0SOlaf Hering  --disable-dependency-tracking|\
792 785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
793 fe0038beSPaolo Bonzini  --oldincludedir=*|--datarootdir=*|--infodir=*|\
794 023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
795 023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
796 023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
797 023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
798 023ddd74SMax Filippov    # lots of directory switches by default.
799 023ddd74SMax Filippov  ;;
800 f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
801 f8393946Saurel32  ;;
802 f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
803 f8393946Saurel32  ;;
804 f3d08ee6SPaul Brook  --enable-debug)
805 f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
806 f3d08ee6SPaul Brook      debug_tcg="yes"
807 c55cf6abSPaolo Bonzini      meson_option_parse --enable-debug-mutex ""
808 c54b59eeSPaolo Bonzini      meson_option_add -Doptimization=0
809 b553a042SJohn Snow      fortify_source="no"
810 f3d08ee6SPaul Brook  ;;
811 247724cbSMarc-André Lureau  --enable-sanitizers) sanitizers="yes"
812 247724cbSMarc-André Lureau  ;;
813 247724cbSMarc-André Lureau  --disable-sanitizers) sanitizers="no"
814 247724cbSMarc-André Lureau  ;;
815 0aebab04SLingfeng Yang  --enable-tsan) tsan="yes"
816 0aebab04SLingfeng Yang  ;;
817 0aebab04SLingfeng Yang  --disable-tsan) tsan="no"
818 0aebab04SLingfeng Yang  ;;
819 1badb709SPaolo Bonzini  --disable-tcg) tcg="disabled"
820 d1a14257SAlex Bennée                 plugins="no"
821 b3f6ea7eSPaolo Bonzini  ;;
822 1badb709SPaolo Bonzini  --enable-tcg) tcg="enabled"
823 b3f6ea7eSPaolo Bonzini  ;;
824 cad25d69Spbrook  --disable-system) softmmu="no"
825 0a8e90f4Spbrook  ;;
826 cad25d69Spbrook  --enable-system) softmmu="yes"
827 0a8e90f4Spbrook  ;;
828 0953a80fSZachary Amsden  --disable-user)
829 0953a80fSZachary Amsden      linux_user="no" ;
830 0953a80fSZachary Amsden      bsd_user="no" ;
831 0953a80fSZachary Amsden  ;;
832 0953a80fSZachary Amsden  --enable-user) ;;
833 831b7825Sths  --disable-linux-user) linux_user="no"
834 0a8e90f4Spbrook  ;;
835 831b7825Sths  --enable-linux-user) linux_user="yes"
836 831b7825Sths  ;;
837 84778508Sblueswir1  --disable-bsd-user) bsd_user="no"
838 84778508Sblueswir1  ;;
839 84778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
840 84778508Sblueswir1  ;;
841 40d6444eSAvi Kivity  --enable-pie) pie="yes"
842 34005a00SKirill A. Shutemov  ;;
843 40d6444eSAvi Kivity  --disable-pie) pie="no"
844 34005a00SKirill A. Shutemov  ;;
845 85aa5189Sbellard  --enable-werror) werror="yes"
846 85aa5189Sbellard  ;;
847 85aa5189Sbellard  --disable-werror) werror="no"
848 85aa5189Sbellard  ;;
849 63678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
850 63678e17SSteven Noonan  ;;
851 63678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
852 63678e17SSteven Noonan  ;;
853 1e4f6065SDaniele Buono  --enable-safe-stack) safe_stack="yes"
854 1e4f6065SDaniele Buono  ;;
855 1e4f6065SDaniele Buono  --disable-safe-stack) safe_stack="no"
856 1e4f6065SDaniele Buono  ;;
857 9e62ba48SDaniele Buono  --enable-cfi)
858 9e62ba48SDaniele Buono      cfi="true";
859 c54b59eeSPaolo Bonzini      meson_option_add -Db_lto=true
860 9e62ba48SDaniele Buono  ;;
861 9e62ba48SDaniele Buono  --disable-cfi) cfi="false"
862 9e62ba48SDaniele Buono  ;;
863 fbb4121dSPaolo Bonzini  --disable-fdt) fdt="disabled"
864 2df87df7SJuan Quintela  ;;
865 fbb4121dSPaolo Bonzini  --enable-fdt) fdt="enabled"
866 fbb4121dSPaolo Bonzini  ;;
867 fbb4121dSPaolo Bonzini  --enable-fdt=git) fdt="internal"
868 fbb4121dSPaolo Bonzini  ;;
869 03a3c0b3SPaolo Bonzini  --enable-fdt=*) fdt="$optarg"
870 2df87df7SJuan Quintela  ;;
871 519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
872 519175a2SAlex Barcelo  ;;
873 cc84d63aSDaniel P. Berrange  --with-git=*) git="$optarg"
874 cc84d63aSDaniel P. Berrange  ;;
875 7d7dbf9dSDan Streetman  --with-git-submodules=*)
876 7d7dbf9dSDan Streetman      git_submodules_action="$optarg"
877 f62bbee5SDaniel P. Berrange  ;;
878 9b8e4298SAlex Bennée  --enable-plugins) if test "$mingw32" = "yes"; then
879 9b8e4298SAlex Bennée                        error_exit "TCG plugins not currently supported on Windows platforms"
880 9b8e4298SAlex Bennée                    else
881 9b8e4298SAlex Bennée                        plugins="yes"
882 9b8e4298SAlex Bennée                    fi
883 40e8c6f4SAlex Bennée  ;;
884 40e8c6f4SAlex Bennée  --disable-plugins) plugins="no"
885 40e8c6f4SAlex Bennée  ;;
886 afc3a8f9SAlex Bennée  --enable-containers) use_containers="yes"
887 afc3a8f9SAlex Bennée  ;;
888 afc3a8f9SAlex Bennée  --disable-containers) use_containers="no"
889 afc3a8f9SAlex Bennée  ;;
890 f48e590aSAlex Bennée  --gdb=*) gdb_bin="$optarg"
891 f48e590aSAlex Bennée  ;;
892 55116968SJagannathan Raman  --enable-vfio-user-server) vfio_user_server="enabled"
893 55116968SJagannathan Raman  ;;
894 55116968SJagannathan Raman  --disable-vfio-user-server) vfio_user_server="disabled"
895 55116968SJagannathan Raman  ;;
896 3b4da132SPaolo Bonzini  # everything else has the same name in configure and meson
897 4fda6011SPaolo Bonzini  --*) meson_option_parse "$opt" "$optarg"
898 7f1559c6Sbalrog  ;;
899 7d13299dSbellard  esac
900 7d13299dSbellarddone
901 7d13299dSbellard
902 d1a14257SAlex Bennée# test for any invalid configuration combinations
903 d1a14257SAlex Bennéeif test "$plugins" = "yes" -a "$tcg" = "disabled"; then
904 d1a14257SAlex Bennée    error_exit "Can't enable plugins on non-TCG builds"
905 d1a14257SAlex Bennéefi
906 d1a14257SAlex Bennée
907 7d7dbf9dSDan Streetmancase $git_submodules_action in
908 7d7dbf9dSDan Streetman    update|validate)
909 7d7dbf9dSDan Streetman        if test ! -e "$source_path/.git"; then
910 7d7dbf9dSDan Streetman            echo "ERROR: cannot $git_submodules_action git submodules without .git"
911 7d7dbf9dSDan Streetman            exit 1
912 7d7dbf9dSDan Streetman        fi
913 7d7dbf9dSDan Streetman    ;;
914 7d7dbf9dSDan Streetman    ignore)
915 b80fd281SPaolo Bonzini        if ! test -f "$source_path/ui/keycodemapdb/README"
916 b80fd281SPaolo Bonzini        then
917 b80fd281SPaolo Bonzini            echo
918 b80fd281SPaolo Bonzini            echo "ERROR: missing GIT submodules"
919 b80fd281SPaolo Bonzini            echo
920 b80fd281SPaolo Bonzini            if test -e "$source_path/.git"; then
921 b80fd281SPaolo Bonzini                echo "--with-git-submodules=ignore specified but submodules were not"
922 b80fd281SPaolo Bonzini                echo "checked out.  Please initialize and update submodules."
923 b80fd281SPaolo Bonzini            else
924 b80fd281SPaolo Bonzini                echo "This is not a GIT checkout but module content appears to"
925 b80fd281SPaolo Bonzini                echo "be missing. Do not use 'git archive' or GitHub download links"
926 b80fd281SPaolo Bonzini                echo "to acquire QEMU source archives. Non-GIT builds are only"
927 b80fd281SPaolo Bonzini                echo "supported with source archives linked from:"
928 b80fd281SPaolo Bonzini                echo
929 b80fd281SPaolo Bonzini                echo "  https://www.qemu.org/download/#source"
930 b80fd281SPaolo Bonzini                echo
931 b80fd281SPaolo Bonzini                echo "Developers working with GIT can use scripts/archive-source.sh"
932 b80fd281SPaolo Bonzini                echo "if they need to create valid source archives."
933 b80fd281SPaolo Bonzini            fi
934 b80fd281SPaolo Bonzini            echo
935 b80fd281SPaolo Bonzini            exit 1
936 b80fd281SPaolo Bonzini        fi
937 7d7dbf9dSDan Streetman    ;;
938 7d7dbf9dSDan Streetman    *)
939 7d7dbf9dSDan Streetman        echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
940 7d7dbf9dSDan Streetman        exit 1
941 7d7dbf9dSDan Streetman    ;;
942 7d7dbf9dSDan Streetmanesac
943 7d7dbf9dSDan Streetman
944 60e0df25SPeter Maydelldefault_target_list=""
945 6e92f823SPeter Maydellmak_wilds=""
946 6e92f823SPeter Maydell
947 b915a2f1SPaolo Bonziniif [ "$linux_user" != no ]; then
948 64708615SPeter Maydell    if [ "$targetos" = linux ] && [ -d "$source_path/linux-user/include/host/$cpu" ]; then
949 b915a2f1SPaolo Bonzini        linux_user=yes
950 b915a2f1SPaolo Bonzini    elif [ "$linux_user" = yes ]; then
951 b915a2f1SPaolo Bonzini        error_exit "linux-user not supported on this architecture"
952 b915a2f1SPaolo Bonzini    fi
953 b915a2f1SPaolo Bonzinifi
954 b915a2f1SPaolo Bonziniif [ "$bsd_user" != no ]; then
955 b915a2f1SPaolo Bonzini    if [ "$bsd_user" = "" ]; then
956 b915a2f1SPaolo Bonzini        test $targetos = freebsd && bsd_user=yes
957 b915a2f1SPaolo Bonzini    fi
958 64708615SPeter Maydell    if [ "$bsd_user" = yes ] && ! [ -d "$source_path/bsd-user/$targetos" ]; then
959 b915a2f1SPaolo Bonzini        error_exit "bsd-user not supported on this host OS"
960 b915a2f1SPaolo Bonzini    fi
961 b915a2f1SPaolo Bonzinifi
962 60e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
963 812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
964 60e0df25SPeter Maydellfi
965 60e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
966 812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
967 60e0df25SPeter Maydellfi
968 60e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
969 812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
970 60e0df25SPeter Maydellfi
971 60e0df25SPeter Maydell
972 447e133fSAlex Bennéefor config in $mak_wilds; do
973 447e133fSAlex Bennée    target="$(basename "$config" .mak)"
974 98db9a06SAlex Bennée    if echo "$target_list_exclude" | grep -vq "$target"; then
975 447e133fSAlex Bennée        default_target_list="${default_target_list} $target"
976 447e133fSAlex Bennée    fi
977 447e133fSAlex Bennéedone
978 6e92f823SPeter Maydell
979 af5db58eSpbrookif test x"$show_help" = x"yes" ; then
980 af5db58eSpbrookcat << EOF
981 af5db58eSpbrook
982 af5db58eSpbrookUsage: configure [options]
983 af5db58eSpbrookOptions: [defaults in brackets after descriptions]
984 af5db58eSpbrook
985 08fb77edSStefan WeilStandard options:
986 08fb77edSStefan Weil  --help                   print this message
987 08fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
988 74154d7eSThomas Huth  --target-list=LIST       set target list (default: build all)
989 08fb77edSStefan Weil$(echo Available targets: $default_target_list | \
990 08fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
991 447e133fSAlex Bennée  --target-list-exclude=LIST exclude a set of targets from the default target-list
992 08fb77edSStefan Weil
993 08fb77edSStefan WeilAdvanced options (experts only):
994 3812c0c4SJoelle van Dyne  --cross-prefix=PREFIX    use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
995 08fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
996 08fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
997 08fb77edSStefan Weil                           build time
998 08fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
999 08fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1000 a2866660SPaolo Bonzini  --extra-cflags=CFLAGS    append extra C compiler flags CFLAGS
1001 a2866660SPaolo Bonzini  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags CXXFLAGS
1002 e910c7d9SPhilippe Mathieu-Daudé  --extra-objcflags=OBJCFLAGS append extra Objective C compiler flags OBJCFLAGS
1003 08fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1004 d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1005 479ca4ccSMatheus Ferst  --cross-cc-cflags-ARCH=  use compiler flags when building ARCH guest tests
1006 5adb43beSPaolo Bonzini  --cross-prefix-ARCH=PREFIX cross compiler prefix when building ARCH guest test cases
1007 08fb77edSStefan Weil  --make=MAKE              use specified make [$make]
1008 08fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
1009 a5665051SPaolo Bonzini  --meson=MESON            use specified meson [$meson]
1010 48328880SPaolo Bonzini  --ninja=NINJA            use specified ninja [$ninja]
1011 08fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
1012 db1b5f13SThomas Huth  --with-git=GIT           use specified git [$git]
1013 7d7dbf9dSDan Streetman  --with-git-submodules=update   update git submodules (default if .git dir exists)
1014 7d7dbf9dSDan Streetman  --with-git-submodules=validate fail if git submodules are not up to date
1015 7d7dbf9dSDan Streetman  --with-git-submodules=ignore   do not update or check git submodules (default if no .git dir)
1016 08fb77edSStefan Weil  --static                 enable static build [$static]
1017 08fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
1018 ca8c0909SMarc-André Lureau  --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1019 c035c8d6SPaolo Bonzini  --without-default-features default all --enable-* options to "disabled"
1020 c035c8d6SPaolo Bonzini  --without-default-devices  do not include any device that is not needed to
1021 c035c8d6SPaolo Bonzini                           start the emulator (only use if you are including
1022 d1d5e9eeSAlex Bennée                           desired devices in configs/devices/)
1023 d1d5e9eeSAlex Bennée  --with-devices-ARCH=NAME override default configs/devices
1024 08fb77edSStefan Weil  --enable-debug           enable common debug build options
1025 247724cbSMarc-André Lureau  --enable-sanitizers      enable default sanitizers
1026 0aebab04SLingfeng Yang  --enable-tsan            enable thread sanitizer
1027 08fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
1028 63678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
1029 c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
1030 08fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
1031 33c53c54SDaniel P. Berrange                           ucontext, sigaltstack, windows
1032 40e8c6f4SAlex Bennée  --enable-plugins
1033 40e8c6f4SAlex Bennée                           enable plugins via shared library loading
1034 afc3a8f9SAlex Bennée  --disable-containers     don't use containers for cross-building
1035 f48e590aSAlex Bennée  --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
1036 61d63097SPaolo BonziniEOF
1037 61d63097SPaolo Bonzini  meson_options_help
1038 61d63097SPaolo Bonzinicat << EOF
1039 c23f23b9SMichael Tokarev  system          all system emulation targets
1040 c23f23b9SMichael Tokarev  user            supported user emulation targets
1041 c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1042 c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1043 c23f23b9SMichael Tokarev  pie             Position Independent Executables
1044 21e709aaSMarc-André Lureau  modules         modules support (non-Windows)
1045 c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1046 c23f23b9SMichael Tokarev  debug-info      debugging information
1047 1e4f6065SDaniele Buono  safe-stack      SafeStack Stack Smash Protection. Depends on
1048 74a1b256SThomas Huth                  clang/llvm and requires coroutine backend ucontext.
1049 08fb77edSStefan Weil
1050 08fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1051 af5db58eSpbrookEOF
1052 2d2ad6d0SFam Zhengexit 0
1053 af5db58eSpbrookfi
1054 af5db58eSpbrook
1055 9c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated
1056 002d8c13SPeter Maydellrm -f ./*/config-devices.mak.d
1057 9c790242SThomas Huth
1058 faf44142SDaniel P. Berrangéif test -z "$python"
1059 faf44142SDaniel P. Berrangéthen
1060 fee6d412SJohn Snow    # If first_python is set, there was a binary somewhere even though
1061 fee6d412SJohn Snow    # it was not suitable.  Use it for the error message.
1062 fee6d412SJohn Snow    if test -n "$first_python"; then
1063 fee6d412SJohn Snow        error_exit "Cannot use '$first_python', Python >= 3.6 is required." \
1064 fee6d412SJohn Snow            "Use --python=/path/to/python to specify a supported Python."
1065 fee6d412SJohn Snow    else
1066 c53eeaf7SStefan Hajnoczi        error_exit "Python not found. Use --python=/path/to/python"
1067 c53eeaf7SStefan Hajnoczi    fi
1068 fee6d412SJohn Snowfi
1069 fee6d412SJohn Snow
1070 8e2c76bdSRoman Bolshakovif ! has "$make"
1071 8e2c76bdSRoman Bolshakovthen
1072 8e2c76bdSRoman Bolshakov    error_exit "GNU make ($make) not found"
1073 8e2c76bdSRoman Bolshakovfi
1074 c53eeaf7SStefan Hajnoczi
1075 fee6d412SJohn Snowif ! check_py_version "$python"; then
1076 1b11f28dSThomas Huth  error_exit "Cannot use '$python', Python >= 3.6 is required." \
1077 c53eeaf7SStefan Hajnoczi      "Use --python=/path/to/python to specify a supported Python."
1078 c53eeaf7SStefan Hajnoczifi
1079 c53eeaf7SStefan Hajnoczi
1080 462a6567SPaolo Bonzini# Resolve PATH + suppress writing compiled files
1081 462a6567SPaolo Bonzinipython="$(command -v "$python") -B"
1082 462a6567SPaolo Bonzini
1083 462a6567SPaolo Bonzinihas_meson() {
1084 462a6567SPaolo Bonzini  local python_dir=$(dirname "$python")
1085 462a6567SPaolo Bonzini  # PEP405: pyvenv.cfg is either adjacent to the Python executable
1086 462a6567SPaolo Bonzini  # or one directory above
1087 462a6567SPaolo Bonzini  if test -f $python_dir/pyvenv.cfg || test -f $python_dir/../pyvenv.cfg; then
1088 462a6567SPaolo Bonzini    # Ensure that Meson and Python come from the same virtual environment
1089 462a6567SPaolo Bonzini    test -x "$python_dir/meson" &&
1090 462a6567SPaolo Bonzini      test "$(command -v meson)" -ef "$python_dir/meson"
1091 462a6567SPaolo Bonzini  else
1092 462a6567SPaolo Bonzini    has meson
1093 462a6567SPaolo Bonzini  fi
1094 462a6567SPaolo Bonzini}
1095 c53eeaf7SStefan Hajnoczi
1096 0a01d76fSMarc-André Lureauif test -z "$meson"; then
1097 462a6567SPaolo Bonzini    if test "$explicit_python" = no && has_meson && version_ge "$(meson --version)" 0.61.5; then
1098 0a01d76fSMarc-André Lureau        meson=meson
1099 64708615SPeter Maydell    elif test "$git_submodules_action" != 'ignore' ; then
1100 0a01d76fSMarc-André Lureau        meson=git
1101 0a01d76fSMarc-André Lureau    elif test -e "${source_path}/meson/meson.py" ; then
1102 0a01d76fSMarc-André Lureau        meson=internal
1103 0a01d76fSMarc-André Lureau    else
1104 0a01d76fSMarc-André Lureau        if test "$explicit_python" = yes; then
1105 0a01d76fSMarc-André Lureau            error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1106 0a01d76fSMarc-André Lureau        else
1107 a5665051SPaolo Bonzini            error_exit "Meson not found.  Use --meson=/path/to/meson"
1108 a5665051SPaolo Bonzini        fi
1109 0a01d76fSMarc-André Lureau    fi
1110 0a01d76fSMarc-André Lureauelse
1111 0a01d76fSMarc-André Lureau    # Meson uses its own Python interpreter to invoke other Python scripts,
1112 0a01d76fSMarc-André Lureau    # but the user wants to use the one they specified with --python.
1113 0a01d76fSMarc-André Lureau    #
1114 0a01d76fSMarc-André Lureau    # We do not want to override the distro Python interpreter (and sometimes
1115 0a01d76fSMarc-André Lureau    # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1116 0a01d76fSMarc-André Lureau    # just require --meson=git|internal together with --python.
1117 0a01d76fSMarc-André Lureau    if test "$explicit_python" = yes; then
1118 0a01d76fSMarc-André Lureau        case "$meson" in
1119 0a01d76fSMarc-André Lureau            git | internal) ;;
1120 0a01d76fSMarc-André Lureau            *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
1121 0a01d76fSMarc-André Lureau        esac
1122 0a01d76fSMarc-André Lureau    fi
1123 0a01d76fSMarc-André Lureaufi
1124 a5665051SPaolo Bonzini
1125 0a01d76fSMarc-André Lureauif test "$meson" = git; then
1126 0a01d76fSMarc-André Lureau    git_submodules="${git_submodules} meson"
1127 0a01d76fSMarc-André Lureaufi
1128 0a01d76fSMarc-André Lureau
1129 0a01d76fSMarc-André Lureaucase "$meson" in
1130 0a01d76fSMarc-André Lureau    git | internal)
1131 0a01d76fSMarc-André Lureau        meson="$python ${source_path}/meson/meson.py"
1132 0a01d76fSMarc-André Lureau        ;;
1133 84ec0c24SPaolo Bonzini    *) meson=$(command -v "$meson") ;;
1134 0a01d76fSMarc-André Lureauesac
1135 0a01d76fSMarc-André Lureau
1136 09e93326SPaolo Bonzini# Probe for ninja
1137 48328880SPaolo Bonzini
1138 48328880SPaolo Bonziniif test -z "$ninja"; then
1139 48328880SPaolo Bonzini    for c in ninja ninja-build samu; do
1140 48328880SPaolo Bonzini        if has $c; then
1141 48328880SPaolo Bonzini            ninja=$(command -v "$c")
1142 48328880SPaolo Bonzini            break
1143 48328880SPaolo Bonzini        fi
1144 48328880SPaolo Bonzini    done
1145 09e93326SPaolo Bonzini    if test -z "$ninja"; then
1146 09e93326SPaolo Bonzini      error_exit "Cannot find Ninja"
1147 09e93326SPaolo Bonzini    fi
1148 48328880SPaolo Bonzinifi
1149 a5665051SPaolo Bonzini
1150 9aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing
1151 9aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the
1152 9aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case).
1153 9aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC.
1154 9aae6e54SDaniel Henrique Barbozawrite_c_skeleton;
1155 9aae6e54SDaniel Henrique Barbozaif compile_object ; then
1156 9aae6e54SDaniel Henrique Barboza  : C compiler works ok
1157 9aae6e54SDaniel Henrique Barbozaelse
1158 9aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" either does not exist or does not work"
1159 9aae6e54SDaniel Henrique Barbozafi
1160 9aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then
1161 9aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1162 9aae6e54SDaniel Henrique Barbozafi
1163 9aae6e54SDaniel Henrique Barboza
1164 9c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
1165 9c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
1166 9c83ffd8SPeter Maydellif test -z "$werror" ; then
1167 7d7dbf9dSDan Streetman    if test "$git_submodules_action" != "ignore" && \
1168 e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1169 9c83ffd8SPeter Maydell        werror="yes"
1170 9c83ffd8SPeter Maydell    else
1171 9c83ffd8SPeter Maydell        werror="no"
1172 9c83ffd8SPeter Maydell    fi
1173 9c83ffd8SPeter Maydellfi
1174 9c83ffd8SPeter Maydell
1175 975ff037SPaolo Bonziniif test "$targetos" = "bogus"; then
1176 fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
1177 fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
1178 fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
1179 fb59dabdSPeter Maydell    # host OS we should stop now.
1180 951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1181 fb59dabdSPeter Maydellfi
1182 fb59dabdSPeter Maydell
1183 efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements:
1184 efc6c070SThomas Huthcat > $TMPC << EOF
1185 efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__)
1186 efc6c070SThomas Huth# ifdef __apple_build_version__
1187 74a1b256SThomas Huth#  if __clang_major__ < 12 || (__clang_major__ == 12 && __clang_minor__ < 0)
1188 74a1b256SThomas Huth#   error You need at least XCode Clang v12.0 to compile QEMU
1189 efc6c070SThomas Huth#  endif
1190 efc6c070SThomas Huth# else
1191 74a1b256SThomas Huth#  if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
1192 74a1b256SThomas Huth#   error You need at least Clang v10.0 to compile QEMU
1193 efc6c070SThomas Huth#  endif
1194 efc6c070SThomas Huth# endif
1195 efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1196 3830df5fSnia# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
1197 3830df5fSnia#  error You need at least GCC v7.4.0 to compile QEMU
1198 efc6c070SThomas Huth# endif
1199 efc6c070SThomas Huth#else
1200 efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU
1201 efc6c070SThomas Huth#endif
1202 efc6c070SThomas Huthint main (void) { return 0; }
1203 efc6c070SThomas HuthEOF
1204 efc6c070SThomas Huthif ! compile_prog "" "" ; then
1205 74a1b256SThomas Huth    error_exit "You need at least GCC v7.4 or Clang v10.0 (or XCode Clang v12.0)"
1206 efc6c070SThomas Huthfi
1207 efc6c070SThomas Huth
1208 00849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately.
1209 00849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second.
1210 00849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all
1211 00849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would
1212 00849b92SRichard Henderson# just silently disable some features, so it's too error prone.
1213 00849b92SRichard Henderson
1214 00849b92SRichard Hendersonwarn_flags=
1215 ca9b5c2eSPaolo Bonziniadd_to warn_flags -Wundef
1216 ca9b5c2eSPaolo Bonziniadd_to warn_flags -Wwrite-strings
1217 ca9b5c2eSPaolo Bonziniadd_to warn_flags -Wmissing-prototypes
1218 ca9b5c2eSPaolo Bonziniadd_to warn_flags -Wstrict-prototypes
1219 ca9b5c2eSPaolo Bonziniadd_to warn_flags -Wredundant-decls
1220 00849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration
1221 00849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition
1222 00849b92SRichard Hendersonadd_to warn_flags -Wtype-limits
1223 00849b92SRichard Hendersonadd_to warn_flags -Wformat-security
1224 00849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k
1225 00849b92SRichard Hendersonadd_to warn_flags -Winit-self
1226 00849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers
1227 00849b92SRichard Hendersonadd_to warn_flags -Wempty-body
1228 00849b92SRichard Hendersonadd_to warn_flags -Wnested-externs
1229 00849b92SRichard Hendersonadd_to warn_flags -Wendif-labels
1230 00849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined
1231 0a2ebce9SThomas Huthadd_to warn_flags -Wimplicit-fallthrough=2
1232 88a0ef00SDaniel P. Berrangéadd_to warn_flags -Wmissing-format-attribute
1233 3d2d4cc5SKevin Wolfadd_to warn_flags -Wthread-safety
1234 00849b92SRichard Henderson
1235 00849b92SRichard Hendersonnowarn_flags=
1236 00849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides
1237 00849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs
1238 00849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value
1239 00849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int
1240 00849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition
1241 aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare
1242 bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi
1243 28d01b1dSChenyi Qiangadd_to nowarn_flags -Wno-gnu-variable-sized-type-not-at-end
1244 00849b92SRichard Henderson
1245 00849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags"
1246 93b25869SJohn Snow
1247 93b25869SJohn Snowcc_has_warning_flag() {
1248 93b25869SJohn Snow    write_c_skeleton;
1249 93b25869SJohn Snow
1250 a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
1251 a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
1252 a1d29d6cSPeter Maydell    # warning options).
1253 93b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1254 93b25869SJohn Snow    compile_prog "-Werror $optflag" ""
1255 93b25869SJohn Snow}
1256 93b25869SJohn Snow
1257 4cb37d11SPhilippe Mathieu-Daudéobjcc_has_warning_flag() {
1258 4cb37d11SPhilippe Mathieu-Daudé    cat > $TMPM <<EOF
1259 4cb37d11SPhilippe Mathieu-Daudéint main(void) { return 0; }
1260 4cb37d11SPhilippe Mathieu-DaudéEOF
1261 4cb37d11SPhilippe Mathieu-Daudé
1262 4cb37d11SPhilippe Mathieu-Daudé    # Use the positive sense of the flag when testing for -Wno-wombat
1263 4cb37d11SPhilippe Mathieu-Daudé    # support (gcc will happily accept the -Wno- form of unknown
1264 4cb37d11SPhilippe Mathieu-Daudé    # warning options).
1265 4cb37d11SPhilippe Mathieu-Daudé    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1266 4cb37d11SPhilippe Mathieu-Daudé    do_objc -Werror $optflag \
1267 4cb37d11SPhilippe Mathieu-Daudé      $OBJCFLAGS $EXTRA_OBJCFLAGS $CONFIGURE_OBJCFLAGS $QEMU_OBJCFLAGS \
1268 4cb37d11SPhilippe Mathieu-Daudé      -o $TMPE $TMPM $QEMU_LDFLAGS
1269 4cb37d11SPhilippe Mathieu-Daudé}
1270 4cb37d11SPhilippe Mathieu-Daudé
1271 93b25869SJohn Snowfor flag in $gcc_flags; do
1272 93b25869SJohn Snow    if cc_has_warning_flag $flag ; then
1273 8d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1274 8d05095cSPaolo Bonzini    fi
1275 4cb37d11SPhilippe Mathieu-Daudé    if objcc_has_warning_flag $flag ; then
1276 4cb37d11SPhilippe Mathieu-Daudé        QEMU_OBJCFLAGS="$QEMU_OBJCFLAGS $flag"
1277 4cb37d11SPhilippe Mathieu-Daudé    fi
1278 8d05095cSPaolo Bonzinidone
1279 8d05095cSPaolo Bonzini
1280 63678e17SSteven Noonanif test "$stack_protector" != "no"; then
1281 fccd35a0SRodrigo Rebello  cat > $TMPC << EOF
1282 fccd35a0SRodrigo Rebelloint main(int argc, char *argv[])
1283 fccd35a0SRodrigo Rebello{
1284 8a0afbb2SStefan Weil    char arr[64], *p = arr, *c = argv[argc - 1];
1285 fccd35a0SRodrigo Rebello    while (*c) {
1286 fccd35a0SRodrigo Rebello        *p++ = *c++;
1287 fccd35a0SRodrigo Rebello    }
1288 fccd35a0SRodrigo Rebello    return 0;
1289 fccd35a0SRodrigo Rebello}
1290 fccd35a0SRodrigo RebelloEOF
1291 63678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
1292 3b463a3fSMiroslav Rezanina  sp_on=0
1293 63678e17SSteven Noonan  for flag in $gcc_flags; do
1294 590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
1295 590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
1296 086d5f75SPaolo Bonzini    if compile_object "-Werror $flag" &&
1297 590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
1298 63678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1299 db5adeaaSPaolo Bonzini      QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
1300 3b463a3fSMiroslav Rezanina      sp_on=1
1301 63678e17SSteven Noonan      break
1302 63678e17SSteven Noonan    fi
1303 63678e17SSteven Noonan  done
1304 3b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
1305 3b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
1306 3b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
1307 3b463a3fSMiroslav Rezanina    fi
1308 3b463a3fSMiroslav Rezanina  fi
1309 37746c5eSMarc-André Lureaufi
1310 37746c5eSMarc-André Lureau
1311 21e709aaSMarc-André Lureau# Our module code doesn't support Windows
1312 21e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then
1313 21e709aaSMarc-André Lureau  error_exit "Modules are not available for Windows"
1314 21e709aaSMarc-André Lureaufi
1315 21e709aaSMarc-André Lureau
1316 5f2453acSAlex Bennée# Static linking is not possible with plugins, modules or PIE
1317 40d6444eSAvi Kivityif test "$static" = "yes" ; then
1318 aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
1319 aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
1320 aa0d1f44SPaolo Bonzini  fi
1321 5f2453acSAlex Bennée  if test "$plugins" = "yes"; then
1322 5f2453acSAlex Bennée    error_exit "static and plugins are mutually incompatible"
1323 ba4dd2aaSAlex Bennée  else
1324 ba4dd2aaSAlex Bennée    plugins="no"
1325 5f2453acSAlex Bennée  fi
1326 40d6444eSAvi Kivityfi
1327 37650689SPaolo Bonzinitest "$plugins" = "" && plugins=yes
1328 40d6444eSAvi Kivity
1329 40d6444eSAvi Kivitycat > $TMPC << EOF
1330 21d4a791SAvi Kivity
1331 21d4a791SAvi Kivity#ifdef __linux__
1332 21d4a791SAvi Kivity#  define THREAD __thread
1333 21d4a791SAvi Kivity#else
1334 21d4a791SAvi Kivity#  define THREAD
1335 21d4a791SAvi Kivity#endif
1336 21d4a791SAvi Kivitystatic THREAD int tls_var;
1337 21d4a791SAvi Kivityint main(void) { return tls_var; }
1338 40d6444eSAvi KivityEOF
1339 b2634124SRichard Henderson
1340 977cccb8SAlex Bennée# Meson currently only handles pie as a boolean for now so if we have
1341 977cccb8SAlex Bennée# explicitly disabled PIE we need to extend our cflags because it wont.
1342 12781462SRichard Hendersonif test "$static" = "yes"; then
1343 eca7a8e6SRichard Henderson  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
1344 5770e8afSPaolo Bonzini    CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
1345 12781462SRichard Henderson    pie="yes"
1346 12781462SRichard Henderson  elif test "$pie" = "yes"; then
1347 12781462SRichard Henderson    error_exit "-static-pie not available due to missing toolchain support"
1348 12781462SRichard Henderson  else
1349 12781462SRichard Henderson    pie="no"
1350 977cccb8SAlex Bennée    QEMU_CFLAGS="-fno-pie -no-pie $QEMU_CFLAGS"
1351 12781462SRichard Henderson  fi
1352 12781462SRichard Hendersonelif test "$pie" = "no"; then
1353 b9eae9efSPaolo Bonzini  if compile_prog "-Werror -fno-pie" "-no-pie"; then
1354 b9eae9efSPaolo Bonzini    CONFIGURE_CFLAGS="-fno-pie $CONFIGURE_CFLAGS"
1355 b9eae9efSPaolo Bonzini    CONFIGURE_LDFLAGS="-no-pie $CONFIGURE_LDFLAGS"
1356 abafb64bSAlex Bennée    QEMU_CFLAGS="-fno-pie -no-pie $QEMU_CFLAGS"
1357 b9eae9efSPaolo Bonzini  fi
1358 eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
1359 5770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
1360 5770e8afSPaolo Bonzini  CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
1361 40d6444eSAvi Kivity  pie="yes"
1362 2c674109SRichard Hendersonelif test "$pie" = "yes"; then
1363 76ad07a4SPeter Maydell  error_exit "PIE not available due to missing toolchain support"
1364 40d6444eSAvi Kivityelse
1365 40d6444eSAvi Kivity  echo "Disabling PIE due to missing toolchain support"
1366 40d6444eSAvi Kivity  pie="no"
1367 40d6444eSAvi Kivityfi
1368 40d6444eSAvi Kivity
1369 09dada40SPaolo Bonzini##########################################
1370 09dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1371 09dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
1372 09dada40SPaolo Bonzini# specification is necessary
1373 09dada40SPaolo Bonzini
1374 09dada40SPaolo Bonziniif test "$cpu" = "i386"; then
1375 09dada40SPaolo Bonzini  cat > $TMPC << EOF
1376 09dada40SPaolo Bonzinistatic int sfaa(int *ptr)
1377 09dada40SPaolo Bonzini{
1378 09dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
1379 09dada40SPaolo Bonzini}
1380 09dada40SPaolo Bonzini
1381 09dada40SPaolo Bonziniint main(void)
1382 09dada40SPaolo Bonzini{
1383 09dada40SPaolo Bonzini  int val = 42;
1384 1405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
1385 09dada40SPaolo Bonzini  sfaa(&val);
1386 09dada40SPaolo Bonzini  return val;
1387 09dada40SPaolo Bonzini}
1388 09dada40SPaolo BonziniEOF
1389 09dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
1390 09dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1391 09dada40SPaolo Bonzini  fi
1392 09dada40SPaolo Bonzinifi
1393 09dada40SPaolo Bonzini
1394 afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
1395 fdb75aefSPaolo Bonzini    default_targets=yes
1396 d880a3baSPaolo Bonzini    for target in $default_target_list; do
1397 d880a3baSPaolo Bonzini        target_list="$target_list $target"
1398 d880a3baSPaolo Bonzini    done
1399 d880a3baSPaolo Bonzini    target_list="${target_list# }"
1400 121afa9eSAnthony Liguorielse
1401 fdb75aefSPaolo Bonzini    default_targets=no
1402 89138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1403 d880a3baSPaolo Bonzini    for target in $target_list; do
1404 25b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
1405 25b48338SPeter Maydell        # friendly error message than if we let it fall through.
1406 25b48338SPeter Maydell        case " $default_target_list " in
1407 25b48338SPeter Maydell            *" $target "*)
1408 25b48338SPeter Maydell                ;;
1409 25b48338SPeter Maydell            *)
1410 25b48338SPeter Maydell                error_exit "Unknown target name '$target'"
1411 25b48338SPeter Maydell                ;;
1412 25b48338SPeter Maydell        esac
1413 25b48338SPeter Maydell    done
1414 d880a3baSPaolo Bonzinifi
1415 25b48338SPeter Maydell
1416 f55fe278SPaolo Bonzini# see if system emulation was really requested
1417 f55fe278SPaolo Bonzinicase " $target_list " in
1418 f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
1419 f55fe278SPaolo Bonzini  ;;
1420 f55fe278SPaolo Bonzini  *) softmmu=no
1421 f55fe278SPaolo Bonzini  ;;
1422 f55fe278SPaolo Bonziniesac
1423 5327cf48Sbellard
1424 7630156dSPhilippe Mathieu-Daudéif test "$tcg" = "auto"; then
1425 7630156dSPhilippe Mathieu-Daudé  if test -z "$target_list"; then
1426 7630156dSPhilippe Mathieu-Daudé    tcg="disabled"
1427 7630156dSPhilippe Mathieu-Daudé  else
1428 7630156dSPhilippe Mathieu-Daudé    tcg="enabled"
1429 7630156dSPhilippe Mathieu-Daudé  fi
1430 7630156dSPhilippe Mathieu-Daudéfi
1431 7630156dSPhilippe Mathieu-Daudé
1432 7630156dSPhilippe Mathieu-Daudéif test "$tcg" = "enabled"; then
1433 7630156dSPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
1434 7630156dSPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
1435 7630156dSPhilippe Mathieu-Daudéfi
1436 7630156dSPhilippe Mathieu-Daudé
1437 33ab5f24SMichal Privoznik##########################################
1438 7d13299dSbellard# big/little endian test
1439 7d13299dSbellardcat > $TMPC << EOF
1440 33ab5f24SMichal Privoznik#if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
1441 33ab5f24SMichal Privoznik# error LITTLE
1442 33ab5f24SMichal Privoznik#endif
1443 33ab5f24SMichal Privoznikint main(void) { return 0; }
1444 7d13299dSbellardEOF
1445 7d13299dSbellard
1446 33ab5f24SMichal Privoznikif ! compile_prog ; then
1447 61cc919fSMike Frysinger  bigendian="no"
1448 7d13299dSbellardelse
1449 33ab5f24SMichal Privoznik  cat > $TMPC << EOF
1450 33ab5f24SMichal Privoznik#if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
1451 33ab5f24SMichal Privoznik# error BIG
1452 33ab5f24SMichal Privoznik#endif
1453 33ab5f24SMichal Privoznikint main(void) { return 0; }
1454 33ab5f24SMichal PrivoznikEOF
1455 33ab5f24SMichal Privoznik
1456 33ab5f24SMichal Privoznik  if ! compile_prog ; then
1457 33ab5f24SMichal Privoznik    bigendian="yes"
1458 33ab5f24SMichal Privoznik  else
1459 7d13299dSbellard    echo big/little test failed
1460 659eb157SThomas Huth    exit 1
1461 7d13299dSbellard  fi
1462 7d13299dSbellardfi
1463 7d13299dSbellard
1464 015a33bdSGonglei##########################################
1465 779ab5e3SStefan Weil# pkg-config probe
1466 779ab5e3SStefan Weil
1467 779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
1468 76ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
1469 779ab5e3SStefan Weilfi
1470 779ab5e3SStefan Weil
1471 779ab5e3SStefan Weil##########################################
1472 e18df141SAnthony Liguori# glib support probe
1473 a52d28afSPaolo Bonzini
1474 0ce9b08cSThomas Huth# When bumping glib_req_ver, please check also whether we should increase
1475 0ce9b08cSThomas Huth# the _WIN32_WINNT setting in osdep.h according to the value from glib
1476 b4c6036fSDaniel P. Berrangéglib_req_ver=2.56
1477 aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
1478 aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
1479 a88afc64SGerd Hoffmann    glib_modules="$glib_modules gmodule-export-2.0"
1480 b906acacSPaolo Bonzinielif test "$plugins" = "yes"; then
1481 b906acacSPaolo Bonzini    glib_modules="$glib_modules gmodule-no-export-2.0"
1482 54cb65d8SEmilio G. Cotafi
1483 e26110cfSFam Zheng
1484 aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
1485 e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
1486 89138857SStefan Weil        glib_cflags=$($pkg_config --cflags $i)
1487 89138857SStefan Weil        glib_libs=$($pkg_config --libs $i)
1488 e18df141SAnthony Liguori    else
1489 e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
1490 e26110cfSFam Zheng    fi
1491 e26110cfSFam Zhengdone
1492 e26110cfSFam Zheng
1493 5b9e7d05SMarc-André Lureauglib_bindir="$($pkg_config --variable=bindir glib-2.0)"
1494 5b9e7d05SMarc-André Lureauif test -z "$glib_bindir" ; then
1495 5b9e7d05SMarc-André Lureau	glib_bindir="$($pkg_config --variable=prefix glib-2.0)"/bin
1496 5b9e7d05SMarc-André Lureaufi
1497 5b9e7d05SMarc-André Lureau
1498 215b0c2fSPaolo Bonzini# This workaround is required due to a bug in pkg-config file for glib as it
1499 215b0c2fSPaolo Bonzini# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
1500 215b0c2fSPaolo Bonzini
1501 215b0c2fSPaolo Bonziniif test "$static" = yes && test "$mingw32" = yes; then
1502 215b0c2fSPaolo Bonzini    glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
1503 215b0c2fSPaolo Bonzinifi
1504 215b0c2fSPaolo Bonzini
1505 977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the
1506 977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches
1507 977a82abSDaniel P. Berrange# problems on multi-arch where people try to build
1508 977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers
1509 977a82abSDaniel P. Berrangecat > $TMPC <<EOF
1510 977a82abSDaniel P. Berrange#include <glib.h>
1511 977a82abSDaniel P. Berrange#include <unistd.h>
1512 977a82abSDaniel P. Berrange
1513 977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \
1514 977a82abSDaniel P. Berrange  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
1515 977a82abSDaniel P. Berrange
1516 977a82abSDaniel P. Berrangeint main(void) {
1517 977a82abSDaniel P. Berrange   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
1518 977a82abSDaniel P. Berrange   return 0;
1519 977a82abSDaniel P. Berrange}
1520 977a82abSDaniel P. BerrangeEOF
1521 977a82abSDaniel P. Berrange
1522 215b0c2fSPaolo Bonziniif ! compile_prog "$glib_cflags" "$glib_libs" ; then
1523 977a82abSDaniel P. Berrange    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
1524 977a82abSDaniel P. Berrange               "You probably need to set PKG_CONFIG_LIBDIR"\
1525 977a82abSDaniel P. Berrange	       "to point to the right pkg-config files for your"\
1526 977a82abSDaniel P. Berrange	       "build target"
1527 977a82abSDaniel P. Berrangefi
1528 977a82abSDaniel P. Berrange
1529 9bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2
1530 9bda600bSEric Blakecat > $TMPC << EOF
1531 9bda600bSEric Blake#include <glib.h>
1532 9bda600bSEric Blaketypedef struct Foo {
1533 9bda600bSEric Blake    int i;
1534 9bda600bSEric Blake} Foo;
1535 9bda600bSEric Blakestatic void foo_free(Foo *f)
1536 9bda600bSEric Blake{
1537 9bda600bSEric Blake    g_free(f);
1538 9bda600bSEric Blake}
1539 e0e7fe07SMarc-André LureauG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free)
1540 9bda600bSEric Blakeint main(void) { return 0; }
1541 9bda600bSEric BlakeEOF
1542 9bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
1543 9bda600bSEric Blake    if cc_has_warning_flag "-Wno-unused-function"; then
1544 9bda600bSEric Blake        glib_cflags="$glib_cflags -Wno-unused-function"
1545 5770e8afSPaolo Bonzini        CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
1546 9bda600bSEric Blake    fi
1547 9bda600bSEric Blakefi
1548 9bda600bSEric Blake
1549 e26110cfSFam Zheng##########################################
1550 f652e6afSaurel32# fdt probe
1551 e169e1e1SPeter Maydell
1552 fbb4121dSPaolo Bonzinicase "$fdt" in
1553 fbb4121dSPaolo Bonzini  auto | enabled | internal)
1554 fbb4121dSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
1555 aef45d51SDaniel P. Berrange    git_submodules="${git_submodules} dtc"
1556 fbb4121dSPaolo Bonzini    ;;
1557 fbb4121dSPaolo Bonziniesac
1558 f652e6afSaurel32
1559 20ff075bSMichael Walle##########################################
1560 519175a2SAlex Barcelo# check and set a backend for coroutine
1561 d0e2fce5SAneesh Kumar K.V
1562 7c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback
1563 33c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows
1564 33c53c54SDaniel P. Berrange# specific one.
1565 7c2acc70SPeter Maydell
1566 7c2acc70SPeter Maydellucontext_works=no
1567 d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then
1568 d0e2fce5SAneesh Kumar K.V  cat > $TMPC << EOF
1569 d0e2fce5SAneesh Kumar K.V#include <ucontext.h>
1570 cdf84806SPeter Maydell#ifdef __stub_makecontext
1571 cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail
1572 cdf84806SPeter Maydell#endif
1573 75cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; }
1574 d0e2fce5SAneesh Kumar K.VEOF
1575 d0e2fce5SAneesh Kumar K.V  if compile_prog "" "" ; then
1576 7c2acc70SPeter Maydell    ucontext_works=yes
1577 d0e2fce5SAneesh Kumar K.V  fi
1578 519175a2SAlex Barcelofi
1579 7c2acc70SPeter Maydell
1580 7c2acc70SPeter Maydellif test "$coroutine" = ""; then
1581 7c2acc70SPeter Maydell  if test "$mingw32" = "yes"; then
1582 7c2acc70SPeter Maydell    coroutine=win32
1583 7c2acc70SPeter Maydell  elif test "$ucontext_works" = "yes"; then
1584 7c2acc70SPeter Maydell    coroutine=ucontext
1585 519175a2SAlex Barcelo  else
1586 7c2acc70SPeter Maydell    coroutine=sigaltstack
1587 7c2acc70SPeter Maydell  fi
1588 7c2acc70SPeter Maydellelse
1589 7c2acc70SPeter Maydell  case $coroutine in
1590 7c2acc70SPeter Maydell  windows)
1591 7c2acc70SPeter Maydell    if test "$mingw32" != "yes"; then
1592 7c2acc70SPeter Maydell      error_exit "'windows' coroutine backend only valid for Windows"
1593 7c2acc70SPeter Maydell    fi
1594 7c2acc70SPeter Maydell    # Unfortunately the user visible backend name doesn't match the
1595 7c2acc70SPeter Maydell    # coroutine-*.c filename for this case, so we have to adjust it here.
1596 7c2acc70SPeter Maydell    coroutine=win32
1597 7c2acc70SPeter Maydell    ;;
1598 7c2acc70SPeter Maydell  ucontext)
1599 7c2acc70SPeter Maydell    if test "$ucontext_works" != "yes"; then
1600 7cb58448SPaolo Bonzini      error_exit "'ucontext' backend requested but makecontext not available"
1601 7c2acc70SPeter Maydell    fi
1602 7c2acc70SPeter Maydell    ;;
1603 33c53c54SDaniel P. Berrange  sigaltstack)
1604 7c2acc70SPeter Maydell    if test "$mingw32" = "yes"; then
1605 7c2acc70SPeter Maydell      error_exit "only the 'windows' coroutine backend is valid for Windows"
1606 7c2acc70SPeter Maydell    fi
1607 7c2acc70SPeter Maydell    ;;
1608 7c2acc70SPeter Maydell  *)
1609 76ad07a4SPeter Maydell    error_exit "unknown coroutine backend $coroutine"
1610 7c2acc70SPeter Maydell    ;;
1611 7c2acc70SPeter Maydell  esac
1612 d0e2fce5SAneesh Kumar K.Vfi
1613 d0e2fce5SAneesh Kumar K.V
1614 1e4f6065SDaniele Buono##################################################
1615 1e4f6065SDaniele Buono# SafeStack
1616 1e4f6065SDaniele Buono
1617 1e4f6065SDaniele Buono
1618 1e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
1619 1e4f6065SDaniele Buonocat > $TMPC << EOF
1620 8a0afbb2SStefan Weilint main(void)
1621 1e4f6065SDaniele Buono{
1622 1e4f6065SDaniele Buono#if ! __has_feature(safe_stack)
1623 1e4f6065SDaniele Buono#error SafeStack Disabled
1624 1e4f6065SDaniele Buono#endif
1625 1e4f6065SDaniele Buono    return 0;
1626 1e4f6065SDaniele Buono}
1627 1e4f6065SDaniele BuonoEOF
1628 1e4f6065SDaniele Buono  flag="-fsanitize=safe-stack"
1629 1e4f6065SDaniele Buono  # Check that safe-stack is supported and enabled.
1630 1e4f6065SDaniele Buono  if compile_prog "-Werror $flag" "$flag"; then
1631 1e4f6065SDaniele Buono    # Flag needed both at compilation and at linking
1632 1e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1633 1e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
1634 1e4f6065SDaniele Buono  else
1635 1e4f6065SDaniele Buono    error_exit "SafeStack not supported by your compiler"
1636 1e4f6065SDaniele Buono  fi
1637 1e4f6065SDaniele Buono  if test "$coroutine" != "ucontext"; then
1638 1e4f6065SDaniele Buono    error_exit "SafeStack is only supported by the coroutine backend ucontext"
1639 1e4f6065SDaniele Buono  fi
1640 1e4f6065SDaniele Buonoelse
1641 1e4f6065SDaniele Buonocat > $TMPC << EOF
1642 8a0afbb2SStefan Weilint main(void)
1643 1e4f6065SDaniele Buono{
1644 1e4f6065SDaniele Buono#if defined(__has_feature)
1645 1e4f6065SDaniele Buono#if __has_feature(safe_stack)
1646 1e4f6065SDaniele Buono#error SafeStack Enabled
1647 1e4f6065SDaniele Buono#endif
1648 1e4f6065SDaniele Buono#endif
1649 1e4f6065SDaniele Buono    return 0;
1650 1e4f6065SDaniele Buono}
1651 1e4f6065SDaniele BuonoEOF
1652 1e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then
1653 1e4f6065SDaniele Buono  # Make sure that safe-stack is disabled
1654 1e4f6065SDaniele Buono  if ! compile_prog "-Werror" ""; then
1655 1e4f6065SDaniele Buono    # SafeStack was already enabled, try to explicitly remove the feature
1656 1e4f6065SDaniele Buono    flag="-fno-sanitize=safe-stack"
1657 1e4f6065SDaniele Buono    if ! compile_prog "-Werror $flag" "$flag"; then
1658 1e4f6065SDaniele Buono      error_exit "Configure cannot disable SafeStack"
1659 1e4f6065SDaniele Buono    fi
1660 1e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1661 1e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
1662 1e4f6065SDaniele Buono  fi
1663 1e4f6065SDaniele Buonoelse # "$safe_stack" = ""
1664 1e4f6065SDaniele Buono  # Set safe_stack to yes or no based on pre-existing flags
1665 1e4f6065SDaniele Buono  if compile_prog "-Werror" ""; then
1666 1e4f6065SDaniele Buono    safe_stack="no"
1667 1e4f6065SDaniele Buono  else
1668 1e4f6065SDaniele Buono    safe_stack="yes"
1669 1e4f6065SDaniele Buono    if test "$coroutine" != "ucontext"; then
1670 1e4f6065SDaniele Buono      error_exit "SafeStack is only supported by the coroutine backend ucontext"
1671 1e4f6065SDaniele Buono    fi
1672 1e4f6065SDaniele Buono  fi
1673 1e4f6065SDaniele Buonofi
1674 1e4f6065SDaniele Buonofi
1675 7d992e4dSPeter Lieven
1676 76a347e1SRichard Henderson########################################
1677 fd0e6053SJohn Snow# check if ccache is interfering with
1678 fd0e6053SJohn Snow# semantic analysis of macros
1679 fd0e6053SJohn Snow
1680 5e4dfd3dSJohn Snowunset CCACHE_CPP2
1681 fd0e6053SJohn Snowccache_cpp2=no
1682 fd0e6053SJohn Snowcat > $TMPC << EOF
1683 fd0e6053SJohn Snowstatic const int Z = 1;
1684 fd0e6053SJohn Snow#define fn() ({ Z; })
1685 fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
1686 fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
1687 fd0e6053SJohn Snow#define ID(X) (X)
1688 8a0afbb2SStefan Weilint main(void)
1689 fd0e6053SJohn Snow{
1690 fd0e6053SJohn Snow    int x = 0, y = 0;
1691 fd0e6053SJohn Snow    x = ID(x);
1692 fd0e6053SJohn Snow    x = fn();
1693 fd0e6053SJohn Snow    fn();
1694 fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
1695 fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
1696 fd0e6053SJohn Snow    return 0;
1697 fd0e6053SJohn Snow}
1698 fd0e6053SJohn SnowEOF
1699 fd0e6053SJohn Snow
1700 fd0e6053SJohn Snowif ! compile_object "-Werror"; then
1701 fd0e6053SJohn Snow    ccache_cpp2=yes
1702 fd0e6053SJohn Snowfi
1703 fd0e6053SJohn Snow
1704 b553a042SJohn Snow#################################################
1705 b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE.
1706 b553a042SJohn Snow
1707 b553a042SJohn Snowif test "$fortify_source" != "no"; then
1708 b553a042SJohn Snow  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
1709 b553a042SJohn Snow    fortify_source="no";
1710 e189091fSPeter Maydell  elif test -n "$cxx" && has $cxx &&
1711 cfcc7c14SJohn Snow       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
1712 b553a042SJohn Snow    fortify_source="no";
1713 b553a042SJohn Snow  else
1714 b553a042SJohn Snow    fortify_source="yes"
1715 b553a042SJohn Snow  fi
1716 b553a042SJohn Snowfi
1717 b553a042SJohn Snow
1718 d2042378SAneesh Kumar K.V##########################################
1719 247724cbSMarc-André Lureau# checks for sanitizers
1720 247724cbSMarc-André Lureau
1721 247724cbSMarc-André Lureauhave_asan=no
1722 247724cbSMarc-André Lureauhave_ubsan=no
1723 d83414e1SMarc-André Lureauhave_asan_iface_h=no
1724 d83414e1SMarc-André Lureauhave_asan_iface_fiber=no
1725 247724cbSMarc-André Lureau
1726 247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then
1727 b9f44da2SMarc-André Lureau  write_c_skeleton
1728 247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
1729 247724cbSMarc-André Lureau      have_asan=yes
1730 247724cbSMarc-André Lureau  fi
1731 b9f44da2SMarc-André Lureau
1732 b9f44da2SMarc-André Lureau  # we could use a simple skeleton for flags checks, but this also
1733 b9f44da2SMarc-André Lureau  # detect the static linking issue of ubsan, see also:
1734 b9f44da2SMarc-André Lureau  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
1735 b9f44da2SMarc-André Lureau  cat > $TMPC << EOF
1736 b9f44da2SMarc-André Lureau#include <stdlib.h>
1737 b9f44da2SMarc-André Lureauint main(void) {
1738 b9f44da2SMarc-André Lureau    void *tmp = malloc(10);
1739 f2dfe54cSLeonid Bloch    if (tmp != NULL) {
1740 b9f44da2SMarc-André Lureau        return *(int *)(tmp + 2);
1741 b9f44da2SMarc-André Lureau    }
1742 d1abf3fcSOlaf Hering    return 1;
1743 f2dfe54cSLeonid Bloch}
1744 b9f44da2SMarc-André LureauEOF
1745 247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
1746 247724cbSMarc-André Lureau      have_ubsan=yes
1747 247724cbSMarc-André Lureau  fi
1748 d83414e1SMarc-André Lureau
1749 d83414e1SMarc-André Lureau  if check_include "sanitizer/asan_interface.h" ; then
1750 d83414e1SMarc-André Lureau      have_asan_iface_h=yes
1751 d83414e1SMarc-André Lureau  fi
1752 d83414e1SMarc-André Lureau
1753 d83414e1SMarc-André Lureau  cat > $TMPC << EOF
1754 d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h>
1755 d83414e1SMarc-André Lureauint main(void) {
1756 d83414e1SMarc-André Lureau  __sanitizer_start_switch_fiber(0, 0, 0);
1757 d83414e1SMarc-André Lureau  return 0;
1758 d83414e1SMarc-André Lureau}
1759 d83414e1SMarc-André LureauEOF
1760 d83414e1SMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
1761 d83414e1SMarc-André Lureau      have_asan_iface_fiber=yes
1762 d83414e1SMarc-André Lureau  fi
1763 247724cbSMarc-André Lureaufi
1764 247724cbSMarc-André Lureau
1765 0aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers;
1766 0aebab04SLingfeng Yang# keep it separate until that is not the case.
1767 0aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
1768 0aebab04SLingfeng Yang  error_exit "TSAN is not supported with other sanitiziers."
1769 0aebab04SLingfeng Yangfi
1770 0aebab04SLingfeng Yanghave_tsan=no
1771 0aebab04SLingfeng Yanghave_tsan_iface_fiber=no
1772 0aebab04SLingfeng Yangif test "$tsan" = "yes" ; then
1773 0aebab04SLingfeng Yang  write_c_skeleton
1774 0aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
1775 0aebab04SLingfeng Yang      have_tsan=yes
1776 0aebab04SLingfeng Yang  fi
1777 0aebab04SLingfeng Yang  cat > $TMPC << EOF
1778 0aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h>
1779 0aebab04SLingfeng Yangint main(void) {
1780 0aebab04SLingfeng Yang  __tsan_create_fiber(0);
1781 0aebab04SLingfeng Yang  return 0;
1782 0aebab04SLingfeng Yang}
1783 0aebab04SLingfeng YangEOF
1784 0aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
1785 0aebab04SLingfeng Yang      have_tsan_iface_fiber=yes
1786 0aebab04SLingfeng Yang  fi
1787 0aebab04SLingfeng Yangfi
1788 0aebab04SLingfeng Yang
1789 adc28027SAlexander Bulekov##########################################
1790 cd362defSPaolo Bonzini# functions to probe cross compilers
1791 cd362defSPaolo Bonzini
1792 cd362defSPaolo Bonzinicontainer="no"
1793 *60f999b7SAlex Bennéerunc=""
1794 47fdc8fbSStefan Weilif test $use_containers = "yes" && (has "docker" || has "podman"); then
1795 c4575b59SPaolo Bonzini    case $($python "$source_path"/tests/docker/docker.py probe) in
1796 c4575b59SPaolo Bonzini        *docker) container=docker ;;
1797 c4575b59SPaolo Bonzini        podman) container=podman ;;
1798 c4575b59SPaolo Bonzini        no) container=no ;;
1799 c4575b59SPaolo Bonzini    esac
1800 a3e28f81SPaolo Bonzini    if test "$container" != "no"; then
1801 a3e28f81SPaolo Bonzini        docker_py="$python $source_path/tests/docker/docker.py --engine $container"
1802 *60f999b7SAlex Bennée        runc=$($python "$source_path"/tests/docker/docker.py probe)
1803 a3e28f81SPaolo Bonzini    fi
1804 cd362defSPaolo Bonzinifi
1805 cd362defSPaolo Bonzini
1806 cd362defSPaolo Bonzini# cross compilers defaults, can be overridden with --cross-cc-ARCH
1807 5adb43beSPaolo Bonzini: ${cross_prefix_aarch64="aarch64-linux-gnu-"}
1808 5adb43beSPaolo Bonzini: ${cross_prefix_aarch64_be="$cross_prefix_aarch64"}
1809 5adb43beSPaolo Bonzini: ${cross_prefix_alpha="alpha-linux-gnu-"}
1810 5adb43beSPaolo Bonzini: ${cross_prefix_arm="arm-linux-gnueabihf-"}
1811 5adb43beSPaolo Bonzini: ${cross_prefix_armeb="$cross_prefix_arm"}
1812 5adb43beSPaolo Bonzini: ${cross_prefix_hexagon="hexagon-unknown-linux-musl-"}
1813 34bb43b0SSong Gao: ${cross_prefix_loongarch64="loongarch64-unknown-linux-gnu-"}
1814 5adb43beSPaolo Bonzini: ${cross_prefix_hppa="hppa-linux-gnu-"}
1815 5adb43beSPaolo Bonzini: ${cross_prefix_i386="i686-linux-gnu-"}
1816 5adb43beSPaolo Bonzini: ${cross_prefix_m68k="m68k-linux-gnu-"}
1817 5adb43beSPaolo Bonzini: ${cross_prefix_microblaze="microblaze-linux-musl-"}
1818 5adb43beSPaolo Bonzini: ${cross_prefix_mips64el="mips64el-linux-gnuabi64-"}
1819 5adb43beSPaolo Bonzini: ${cross_prefix_mips64="mips64-linux-gnuabi64-"}
1820 5adb43beSPaolo Bonzini: ${cross_prefix_mipsel="mipsel-linux-gnu-"}
1821 5adb43beSPaolo Bonzini: ${cross_prefix_mips="mips-linux-gnu-"}
1822 5adb43beSPaolo Bonzini: ${cross_prefix_nios2="nios2-linux-gnu-"}
1823 5adb43beSPaolo Bonzini: ${cross_prefix_ppc="powerpc-linux-gnu-"}
1824 5adb43beSPaolo Bonzini: ${cross_prefix_ppc64="powerpc64-linux-gnu-"}
1825 5adb43beSPaolo Bonzini: ${cross_prefix_ppc64le="$cross_prefix_ppc64"}
1826 5adb43beSPaolo Bonzini: ${cross_prefix_riscv64="riscv64-linux-gnu-"}
1827 5adb43beSPaolo Bonzini: ${cross_prefix_s390x="s390x-linux-gnu-"}
1828 5adb43beSPaolo Bonzini: ${cross_prefix_sh4="sh4-linux-gnu-"}
1829 5adb43beSPaolo Bonzini: ${cross_prefix_sparc64="sparc64-linux-gnu-"}
1830 5adb43beSPaolo Bonzini: ${cross_prefix_sparc="$cross_prefix_sparc64"}
1831 5adb43beSPaolo Bonzini: ${cross_prefix_x86_64="x86_64-linux-gnu-"}
1832 5adb43beSPaolo Bonzini
1833 cd362defSPaolo Bonzini: ${cross_cc_aarch64_be="$cross_cc_aarch64"}
1834 cd362defSPaolo Bonzini: ${cross_cc_cflags_aarch64_be="-mbig-endian"}
1835 46af66edSPaolo Bonzini: ${cross_cc_armeb="$cross_cc_arm"}
1836 cd362defSPaolo Bonzini: ${cross_cc_cflags_armeb="-mbig-endian"}
1837 cd362defSPaolo Bonzini: ${cross_cc_hexagon="hexagon-unknown-linux-musl-clang"}
1838 cd362defSPaolo Bonzini: ${cross_cc_cflags_hexagon="-mv67 -O2 -static"}
1839 cd362defSPaolo Bonzini: ${cross_cc_cflags_i386="-m32"}
1840 d44f2f96SPaolo Bonzini: ${cross_cc_cflags_ppc="-m32 -mbig-endian"}
1841 cd362defSPaolo Bonzini: ${cross_cc_cflags_ppc64="-m64 -mbig-endian"}
1842 cd362defSPaolo Bonzini: ${cross_cc_ppc64le="$cross_cc_ppc64"}
1843 cd362defSPaolo Bonzini: ${cross_cc_cflags_ppc64le="-m64 -mlittle-endian"}
1844 cd362defSPaolo Bonzini: ${cross_cc_cflags_sparc64="-m64 -mcpu=ultrasparc"}
1845 46af66edSPaolo Bonzini: ${cross_cc_sparc="$cross_cc_sparc64"}
1846 46af66edSPaolo Bonzini: ${cross_cc_cflags_sparc="-m32 -mcpu=supersparc"}
1847 cd362defSPaolo Bonzini: ${cross_cc_cflags_x86_64="-m64"}
1848 cd362defSPaolo Bonzini
1849 5adb43beSPaolo Bonzinicompute_target_variable() {
1850 92e288fcSPaolo Bonzini  eval "$2="
1851 5adb43beSPaolo Bonzini  if eval test -n "\"\${cross_prefix_$1}\""; then
1852 5adb43beSPaolo Bonzini    if eval has "\"\${cross_prefix_$1}\$3\""; then
1853 5adb43beSPaolo Bonzini      eval "$2=\"\${cross_prefix_$1}\$3\""
1854 5adb43beSPaolo Bonzini    fi
1855 5adb43beSPaolo Bonzini  fi
1856 5adb43beSPaolo Bonzini}
1857 cd362defSPaolo Bonzini
1858 35fd22b0SPaolo Bonzinihave_target() {
1859 35fd22b0SPaolo Bonzini  for i; do
1860 35fd22b0SPaolo Bonzini    case " $target_list " in
1861 35fd22b0SPaolo Bonzini      *" $i "*) return 0;;
1862 35fd22b0SPaolo Bonzini      *) ;;
1863 35fd22b0SPaolo Bonzini    esac
1864 35fd22b0SPaolo Bonzini  done
1865 35fd22b0SPaolo Bonzini  return 1
1866 35fd22b0SPaolo Bonzini}
1867 35fd22b0SPaolo Bonzini
1868 52f08deaSPaolo Bonzini# probe_target_compiler TARGET
1869 52f08deaSPaolo Bonzini#
1870 52f08deaSPaolo Bonzini# Look for a compiler for the given target, either native or cross.
1871 52f08deaSPaolo Bonzini# Set variables target_* if a compiler is found, and container_cross_*
1872 52f08deaSPaolo Bonzini# if a Docker-based cross-compiler image is known for the target.
1873 52f08deaSPaolo Bonzini# Set got_cross_cc to yes/no depending on whether a non-container-based
1874 52f08deaSPaolo Bonzini# compiler was found.
1875 52f08deaSPaolo Bonzini#
1876 52f08deaSPaolo Bonzini# If TARGET is a user-mode emulation target, also set build_static to
1877 52f08deaSPaolo Bonzini# "y" if static linking is possible.
1878 52f08deaSPaolo Bonzini#
1879 cd362defSPaolo Bonziniprobe_target_compiler() {
1880 cd362defSPaolo Bonzini  # reset all output variables
1881 92e288fcSPaolo Bonzini  got_cross_cc=no
1882 cd362defSPaolo Bonzini  container_image=
1883 cd362defSPaolo Bonzini  container_hosts=
1884 cd362defSPaolo Bonzini  container_cross_cc=
1885 87eb014cSPaolo Bonzini  container_cross_ar=
1886 cd362defSPaolo Bonzini  container_cross_as=
1887 cd362defSPaolo Bonzini  container_cross_ld=
1888 87eb014cSPaolo Bonzini  container_cross_nm=
1889 87eb014cSPaolo Bonzini  container_cross_objcopy=
1890 87eb014cSPaolo Bonzini  container_cross_ranlib=
1891 87eb014cSPaolo Bonzini  container_cross_strip=
1892 cd362defSPaolo Bonzini
1893 c3b570b5SAlex Bennée  # We shall skip configuring the target compiler if the user didn't
1894 c3b570b5SAlex Bennée  # bother enabling an appropriate guest. This avoids building
1895 c3b570b5SAlex Bennée  # extraneous firmware images and tests.
1896 73acb87bSMukilan Thiyagarajan  if test "${target_list#*$1}" = "$1"; then
1897 c3b570b5SAlex Bennée      return 1
1898 c3b570b5SAlex Bennée  fi
1899 c3b570b5SAlex Bennée
1900 52f08deaSPaolo Bonzini  target_arch=${1%%-*}
1901 52f08deaSPaolo Bonzini  case $target_arch in
1902 cd362defSPaolo Bonzini    aarch64) container_hosts="x86_64 aarch64" ;;
1903 cd362defSPaolo Bonzini    alpha) container_hosts=x86_64 ;;
1904 cd362defSPaolo Bonzini    arm) container_hosts="x86_64 aarch64" ;;
1905 cd362defSPaolo Bonzini    cris) container_hosts=x86_64 ;;
1906 cd362defSPaolo Bonzini    hexagon) container_hosts=x86_64 ;;
1907 cd362defSPaolo Bonzini    hppa) container_hosts=x86_64 ;;
1908 cd362defSPaolo Bonzini    i386) container_hosts=x86_64 ;;
1909 b70ec50bSRichard Henderson    loongarch64) container_hosts=x86_64 ;;
1910 cd362defSPaolo Bonzini    m68k) container_hosts=x86_64 ;;
1911 cd362defSPaolo Bonzini    microblaze) container_hosts=x86_64 ;;
1912 cd362defSPaolo Bonzini    mips64el) container_hosts=x86_64 ;;
1913 cd362defSPaolo Bonzini    mips64) container_hosts=x86_64 ;;
1914 cd362defSPaolo Bonzini    mipsel) container_hosts=x86_64 ;;
1915 cd362defSPaolo Bonzini    mips) container_hosts=x86_64 ;;
1916 cd362defSPaolo Bonzini    nios2) container_hosts=x86_64 ;;
1917 cd362defSPaolo Bonzini    ppc) container_hosts=x86_64 ;;
1918 cd362defSPaolo Bonzini    ppc64|ppc64le) container_hosts=x86_64 ;;
1919 cd362defSPaolo Bonzini    riscv64) container_hosts=x86_64 ;;
1920 cd362defSPaolo Bonzini    s390x) container_hosts=x86_64 ;;
1921 cd362defSPaolo Bonzini    sh4) container_hosts=x86_64 ;;
1922 cd362defSPaolo Bonzini    sparc64) container_hosts=x86_64 ;;
1923 cd362defSPaolo Bonzini    tricore) container_hosts=x86_64 ;;
1924 cd362defSPaolo Bonzini    x86_64) container_hosts="aarch64 ppc64el x86_64" ;;
1925 cd362defSPaolo Bonzini    xtensa*) container_hosts=x86_64 ;;
1926 cd362defSPaolo Bonzini  esac
1927 cd362defSPaolo Bonzini
1928 cd362defSPaolo Bonzini  for host in $container_hosts; do
1929 cd362defSPaolo Bonzini    test "$container" != no || continue
1930 cd362defSPaolo Bonzini    test "$host" = "$cpu" || continue
1931 52f08deaSPaolo Bonzini    case $target_arch in
1932 cd362defSPaolo Bonzini      aarch64)
1933 cd362defSPaolo Bonzini        # We don't have any bigendian build tools so we only use this for AArch64
1934 cd362defSPaolo Bonzini        container_image=debian-arm64-cross
1935 5adb43beSPaolo Bonzini        container_cross_prefix=aarch64-linux-gnu-
1936 5adb43beSPaolo Bonzini        container_cross_cc=${container_cross_prefix}gcc-10
1937 cd362defSPaolo Bonzini        ;;
1938 cd362defSPaolo Bonzini      alpha)
1939 cd362defSPaolo Bonzini        container_image=debian-alpha-cross
1940 5adb43beSPaolo Bonzini        container_cross_prefix=alpha-linux-gnu-
1941 cd362defSPaolo Bonzini        ;;
1942 cd362defSPaolo Bonzini      arm)
1943 cd362defSPaolo Bonzini        # We don't have any bigendian build tools so we only use this for ARM
1944 cd362defSPaolo Bonzini        container_image=debian-armhf-cross
1945 5adb43beSPaolo Bonzini        container_cross_prefix=arm-linux-gnueabihf-
1946 cd362defSPaolo Bonzini        ;;
1947 cd362defSPaolo Bonzini      cris)
1948 cd362defSPaolo Bonzini        container_image=fedora-cris-cross
1949 5adb43beSPaolo Bonzini        container_cross_prefix=cris-linux-gnu-
1950 cd362defSPaolo Bonzini        ;;
1951 cd362defSPaolo Bonzini      hexagon)
1952 cd362defSPaolo Bonzini        container_image=debian-hexagon-cross
1953 5adb43beSPaolo Bonzini        container_cross_prefix=hexagon-unknown-linux-musl-
1954 5adb43beSPaolo Bonzini        container_cross_cc=${container_cross_prefix}clang
1955 cd362defSPaolo Bonzini        ;;
1956 cd362defSPaolo Bonzini      hppa)
1957 cd362defSPaolo Bonzini        container_image=debian-hppa-cross
1958 5adb43beSPaolo Bonzini        container_cross_prefix=hppa-linux-gnu-
1959 cd362defSPaolo Bonzini        ;;
1960 cd362defSPaolo Bonzini      i386)
1961 cd362defSPaolo Bonzini        container_image=fedora-i386-cross
1962 5adb43beSPaolo Bonzini        container_cross_prefix=
1963 cd362defSPaolo Bonzini        ;;
1964 b70ec50bSRichard Henderson      loongarch64)
1965 b70ec50bSRichard Henderson        container_image=debian-loongarch-cross
1966 b70ec50bSRichard Henderson        container_cross_prefix=loongarch64-unknown-linux-gnu-
1967 b70ec50bSRichard Henderson        ;;
1968 cd362defSPaolo Bonzini      m68k)
1969 cd362defSPaolo Bonzini        container_image=debian-m68k-cross
1970 5adb43beSPaolo Bonzini        container_cross_prefix=m68k-linux-gnu-
1971 cd362defSPaolo Bonzini        ;;
1972 cd362defSPaolo Bonzini      microblaze)
1973 cd362defSPaolo Bonzini        container_image=debian-microblaze-cross
1974 5adb43beSPaolo Bonzini        container_cross_prefix=microblaze-linux-musl-
1975 cd362defSPaolo Bonzini        ;;
1976 cd362defSPaolo Bonzini      mips64el)
1977 cd362defSPaolo Bonzini        container_image=debian-mips64el-cross
1978 5adb43beSPaolo Bonzini        container_cross_prefix=mips64el-linux-gnuabi64-
1979 cd362defSPaolo Bonzini        ;;
1980 cd362defSPaolo Bonzini      mips64)
1981 cd362defSPaolo Bonzini        container_image=debian-mips64-cross
1982 5adb43beSPaolo Bonzini        container_cross_prefix=mips64-linux-gnuabi64-
1983 cd362defSPaolo Bonzini        ;;
1984 cd362defSPaolo Bonzini      mipsel)
1985 cd362defSPaolo Bonzini        container_image=debian-mipsel-cross
1986 5adb43beSPaolo Bonzini        container_cross_prefix=mipsel-linux-gnu-
1987 cd362defSPaolo Bonzini        ;;
1988 cd362defSPaolo Bonzini      mips)
1989 cd362defSPaolo Bonzini        container_image=debian-mips-cross
1990 5adb43beSPaolo Bonzini        container_cross_prefix=mips-linux-gnu-
1991 cd362defSPaolo Bonzini        ;;
1992 cd362defSPaolo Bonzini      nios2)
1993 cd362defSPaolo Bonzini        container_image=debian-nios2-cross
1994 5adb43beSPaolo Bonzini        container_cross_prefix=nios2-linux-gnu-
1995 cd362defSPaolo Bonzini        ;;
1996 cd362defSPaolo Bonzini      ppc)
1997 cd362defSPaolo Bonzini        container_image=debian-powerpc-test-cross
1998 5adb43beSPaolo Bonzini        container_cross_prefix=powerpc-linux-gnu-
1999 5adb43beSPaolo Bonzini        container_cross_cc=${container_cross_prefix}gcc-10
2000 cd362defSPaolo Bonzini        ;;
2001 cd362defSPaolo Bonzini      ppc64|ppc64le)
2002 cd362defSPaolo Bonzini        container_image=debian-powerpc-test-cross
2003 705c881fSRichard Henderson        container_cross_prefix=powerpc${target_arch#ppc}-linux-gnu-
2004 5adb43beSPaolo Bonzini        container_cross_cc=${container_cross_prefix}gcc-10
2005 cd362defSPaolo Bonzini        ;;
2006 cd362defSPaolo Bonzini      riscv64)
2007 cd362defSPaolo Bonzini        container_image=debian-riscv64-test-cross
2008 5adb43beSPaolo Bonzini        container_cross_prefix=riscv64-linux-gnu-
2009 cd362defSPaolo Bonzini        ;;
2010 cd362defSPaolo Bonzini      s390x)
2011 cd362defSPaolo Bonzini        container_image=debian-s390x-cross
2012 5adb43beSPaolo Bonzini        container_cross_prefix=s390x-linux-gnu-
2013 cd362defSPaolo Bonzini        ;;
2014 cd362defSPaolo Bonzini      sh4)
2015 cd362defSPaolo Bonzini        container_image=debian-sh4-cross
2016 5adb43beSPaolo Bonzini        container_cross_prefix=sh4-linux-gnu-
2017 cd362defSPaolo Bonzini        ;;
2018 cd362defSPaolo Bonzini      sparc64)
2019 cd362defSPaolo Bonzini        container_image=debian-sparc64-cross
2020 5adb43beSPaolo Bonzini        container_cross_prefix=sparc64-linux-gnu-
2021 cd362defSPaolo Bonzini        ;;
2022 cd362defSPaolo Bonzini      tricore)
2023 cd362defSPaolo Bonzini        container_image=debian-tricore-cross
2024 5adb43beSPaolo Bonzini        container_cross_prefix=tricore-
2025 cd362defSPaolo Bonzini        container_cross_as=tricore-as
2026 cd362defSPaolo Bonzini        container_cross_ld=tricore-ld
2027 5adb43beSPaolo Bonzini        break
2028 cd362defSPaolo Bonzini        ;;
2029 cd362defSPaolo Bonzini      x86_64)
2030 cd362defSPaolo Bonzini        container_image=debian-amd64-cross
2031 5adb43beSPaolo Bonzini        container_cross_prefix=x86_64-linux-gnu-
2032 cd362defSPaolo Bonzini        ;;
2033 cd362defSPaolo Bonzini      xtensa*)
2034 cd362defSPaolo Bonzini        container_hosts=x86_64
2035 cd362defSPaolo Bonzini        container_image=debian-xtensa-cross
2036 cd362defSPaolo Bonzini
2037 cd362defSPaolo Bonzini        # default to the dc232b cpu
2038 5adb43beSPaolo Bonzini        container_cross_prefix=/opt/2020.07/xtensa-dc232b-elf/bin/xtensa-dc232b-elf-
2039 cd362defSPaolo Bonzini        ;;
2040 cd362defSPaolo Bonzini    esac
2041 5adb43beSPaolo Bonzini    : ${container_cross_cc:=${container_cross_prefix}gcc}
2042 87eb014cSPaolo Bonzini    : ${container_cross_ar:=${container_cross_prefix}ar}
2043 5adb43beSPaolo Bonzini    : ${container_cross_as:=${container_cross_prefix}as}
2044 5adb43beSPaolo Bonzini    : ${container_cross_ld:=${container_cross_prefix}ld}
2045 87eb014cSPaolo Bonzini    : ${container_cross_nm:=${container_cross_prefix}nm}
2046 87eb014cSPaolo Bonzini    : ${container_cross_objcopy:=${container_cross_prefix}objcopy}
2047 87eb014cSPaolo Bonzini    : ${container_cross_ranlib:=${container_cross_prefix}ranlib}
2048 87eb014cSPaolo Bonzini    : ${container_cross_strip:=${container_cross_prefix}strip}
2049 cd362defSPaolo Bonzini  done
2050 cd362defSPaolo Bonzini
2051 92e288fcSPaolo Bonzini  try=cross
2052 92e288fcSPaolo Bonzini  case "$target_arch:$cpu" in
2053 92e288fcSPaolo Bonzini    aarch64_be:aarch64 | \
2054 92e288fcSPaolo Bonzini    armeb:arm | \
2055 92e288fcSPaolo Bonzini    i386:x86_64 | \
2056 92e288fcSPaolo Bonzini    mips*:mips64 | \
2057 92e288fcSPaolo Bonzini    ppc*:ppc64 | \
2058 92e288fcSPaolo Bonzini    sparc:sparc64 | \
2059 92e288fcSPaolo Bonzini    "$cpu:$cpu")
2060 92e288fcSPaolo Bonzini      try='native cross' ;;
2061 92e288fcSPaolo Bonzini  esac
2062 52f08deaSPaolo Bonzini  eval "target_cflags=\${cross_cc_cflags_$target_arch}"
2063 b3b5472dSPeter Maydell  for thistry in $try; do
2064 b3b5472dSPeter Maydell    case $thistry in
2065 92e288fcSPaolo Bonzini    native)
2066 92e288fcSPaolo Bonzini      target_cc=$cc
2067 92e288fcSPaolo Bonzini      target_ccas=$ccas
2068 92e288fcSPaolo Bonzini      target_ar=$ar
2069 92e288fcSPaolo Bonzini      target_as=$as
2070 92e288fcSPaolo Bonzini      target_ld=$ld
2071 92e288fcSPaolo Bonzini      target_nm=$nm
2072 92e288fcSPaolo Bonzini      target_objcopy=$objcopy
2073 92e288fcSPaolo Bonzini      target_ranlib=$ranlib
2074 92e288fcSPaolo Bonzini      target_strip=$strip
2075 92e288fcSPaolo Bonzini      ;;
2076 92e288fcSPaolo Bonzini    cross)
2077 92e288fcSPaolo Bonzini      target_cc=
2078 52f08deaSPaolo Bonzini      if eval test -n "\"\${cross_cc_$target_arch}\""; then
2079 52f08deaSPaolo Bonzini        if eval has "\"\${cross_cc_$target_arch}\""; then
2080 52f08deaSPaolo Bonzini          eval "target_cc=\"\${cross_cc_$target_arch}\""
2081 cd362defSPaolo Bonzini        fi
2082 5adb43beSPaolo Bonzini      else
2083 52f08deaSPaolo Bonzini        compute_target_variable $target_arch target_cc gcc
2084 cd362defSPaolo Bonzini      fi
2085 87eb014cSPaolo Bonzini      target_ccas=$target_cc
2086 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_ar ar
2087 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_as as
2088 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_ld ld
2089 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_nm nm
2090 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_objcopy objcopy
2091 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_ranlib ranlib
2092 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_strip strip
2093 640aabc8SPaolo Bonzini      ;;
2094 640aabc8SPaolo Bonzini    esac
2095 92e288fcSPaolo Bonzini
2096 2ad60f6fSPaolo Bonzini    if test -n "$target_cc"; then
2097 52f08deaSPaolo Bonzini      case $target_arch in
2098 2ad60f6fSPaolo Bonzini        i386|x86_64)
2099 2ad60f6fSPaolo Bonzini          if $target_cc --version | grep -qi "clang"; then
2100 92e288fcSPaolo Bonzini            continue
2101 2ad60f6fSPaolo Bonzini          fi
2102 2ad60f6fSPaolo Bonzini          ;;
2103 2ad60f6fSPaolo Bonzini      esac
2104 92e288fcSPaolo Bonzini    elif test -n "$target_as" && test -n "$target_ld"; then
2105 92e288fcSPaolo Bonzini      # Special handling for assembler only targets
2106 92e288fcSPaolo Bonzini      case $target in
2107 92e288fcSPaolo Bonzini        tricore-softmmu)
2108 92e288fcSPaolo Bonzini          build_static=
2109 92e288fcSPaolo Bonzini          got_cross_cc=yes
2110 92e288fcSPaolo Bonzini          break
2111 92e288fcSPaolo Bonzini          ;;
2112 92e288fcSPaolo Bonzini        *)
2113 92e288fcSPaolo Bonzini          continue
2114 92e288fcSPaolo Bonzini          ;;
2115 92e288fcSPaolo Bonzini      esac
2116 92e288fcSPaolo Bonzini    else
2117 92e288fcSPaolo Bonzini      continue
2118 92e288fcSPaolo Bonzini    fi
2119 92e288fcSPaolo Bonzini
2120 92e288fcSPaolo Bonzini    write_c_skeleton
2121 92e288fcSPaolo Bonzini    case $1 in
2122 92e288fcSPaolo Bonzini      *-softmmu)
2123 92e288fcSPaolo Bonzini        if do_compiler "$target_cc" $target_cflags -o $TMPO -c $TMPC &&
2124 92e288fcSPaolo Bonzini          do_compiler "$target_cc" $target_cflags -r -nostdlib -o "${TMPDIR1}/${TMPB}2.o" "$TMPO" -lgcc; then
2125 92e288fcSPaolo Bonzini          got_cross_cc=yes
2126 92e288fcSPaolo Bonzini          break
2127 92e288fcSPaolo Bonzini        fi
2128 92e288fcSPaolo Bonzini        ;;
2129 92e288fcSPaolo Bonzini      *)
2130 92e288fcSPaolo Bonzini        if do_compiler "$target_cc" $target_cflags -o $TMPE $TMPC -static ; then
2131 92e288fcSPaolo Bonzini          build_static=y
2132 92e288fcSPaolo Bonzini          got_cross_cc=yes
2133 92e288fcSPaolo Bonzini          break
2134 92e288fcSPaolo Bonzini        fi
2135 92e288fcSPaolo Bonzini        if do_compiler "$target_cc" $target_cflags -o $TMPE $TMPC ; then
2136 92e288fcSPaolo Bonzini          build_static=
2137 92e288fcSPaolo Bonzini          got_cross_cc=yes
2138 92e288fcSPaolo Bonzini          break
2139 92e288fcSPaolo Bonzini        fi
2140 92e288fcSPaolo Bonzini        ;;
2141 92e288fcSPaolo Bonzini    esac
2142 92e288fcSPaolo Bonzini  done
2143 92e288fcSPaolo Bonzini  if test $got_cross_cc != yes; then
2144 92e288fcSPaolo Bonzini    build_static=
2145 92e288fcSPaolo Bonzini    target_cc=
2146 92e288fcSPaolo Bonzini    target_ccas=
2147 92e288fcSPaolo Bonzini    target_ar=
2148 92e288fcSPaolo Bonzini    target_as=
2149 92e288fcSPaolo Bonzini    target_ld=
2150 92e288fcSPaolo Bonzini    target_nm=
2151 92e288fcSPaolo Bonzini    target_objcopy=
2152 92e288fcSPaolo Bonzini    target_ranlib=
2153 92e288fcSPaolo Bonzini    target_strip=
2154 2ad60f6fSPaolo Bonzini  fi
2155 fde10960SAlex Bennée  test -n "$target_cc"
2156 cd362defSPaolo Bonzini}
2157 cd362defSPaolo Bonzini
2158 cd362defSPaolo Bonziniwrite_target_makefile() {
2159 e81785abSPaolo Bonzini  echo "EXTRA_CFLAGS=$target_cflags"
2160 0825cae0SPaolo Bonzini  if test -z "$target_cc" && test -z "$target_as"; then
2161 0825cae0SPaolo Bonzini    test -z "$container_image" && error_exit "Internal error: could not find cross compiler for $1?"
2162 0825cae0SPaolo Bonzini    echo "$1: docker-image-$container_image" >> Makefile.prereqs
2163 0825cae0SPaolo Bonzini    if test -n "$container_cross_cc"; then
2164 0825cae0SPaolo Bonzini      echo "CC=$docker_py cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
2165 0825cae0SPaolo Bonzini      echo "CCAS=$docker_py cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
2166 0825cae0SPaolo Bonzini    fi
2167 0825cae0SPaolo Bonzini    echo "AR=$docker_py cc --cc $container_cross_ar -i qemu/$container_image -s $source_path --"
2168 0825cae0SPaolo Bonzini    echo "AS=$docker_py cc --cc $container_cross_as -i qemu/$container_image -s $source_path --"
2169 0825cae0SPaolo Bonzini    echo "LD=$docker_py cc --cc $container_cross_ld -i qemu/$container_image -s $source_path --"
2170 0825cae0SPaolo Bonzini    echo "NM=$docker_py cc --cc $container_cross_nm -i qemu/$container_image -s $source_path --"
2171 0825cae0SPaolo Bonzini    echo "OBJCOPY=$docker_py cc --cc $container_cross_objcopy -i qemu/$container_image -s $source_path --"
2172 0825cae0SPaolo Bonzini    echo "RANLIB=$docker_py cc --cc $container_cross_ranlib -i qemu/$container_image -s $source_path --"
2173 0825cae0SPaolo Bonzini    echo "STRIP=$docker_py cc --cc $container_cross_strip -i qemu/$container_image -s $source_path --"
2174 0825cae0SPaolo Bonzini  else
2175 cd362defSPaolo Bonzini    if test -n "$target_cc"; then
2176 cd362defSPaolo Bonzini      echo "CC=$target_cc"
2177 87eb014cSPaolo Bonzini      echo "CCAS=$target_ccas"
2178 87eb014cSPaolo Bonzini    fi
2179 87eb014cSPaolo Bonzini    if test -n "$target_ar"; then
2180 87eb014cSPaolo Bonzini      echo "AR=$target_ar"
2181 cd362defSPaolo Bonzini    fi
2182 cd362defSPaolo Bonzini    if test -n "$target_as"; then
2183 cd362defSPaolo Bonzini      echo "AS=$target_as"
2184 cd362defSPaolo Bonzini    fi
2185 cd362defSPaolo Bonzini    if test -n "$target_ld"; then
2186 cd362defSPaolo Bonzini      echo "LD=$target_ld"
2187 cd362defSPaolo Bonzini    fi
2188 87eb014cSPaolo Bonzini    if test -n "$target_nm"; then
2189 87eb014cSPaolo Bonzini      echo "NM=$target_nm"
2190 87eb014cSPaolo Bonzini    fi
2191 87eb014cSPaolo Bonzini    if test -n "$target_objcopy"; then
2192 87eb014cSPaolo Bonzini      echo "OBJCOPY=$target_objcopy"
2193 87eb014cSPaolo Bonzini    fi
2194 87eb014cSPaolo Bonzini    if test -n "$target_ranlib"; then
2195 87eb014cSPaolo Bonzini      echo "RANLIB=$target_ranlib"
2196 87eb014cSPaolo Bonzini    fi
2197 87eb014cSPaolo Bonzini    if test -n "$target_strip"; then
2198 87eb014cSPaolo Bonzini      echo "STRIP=$target_strip"
2199 87eb014cSPaolo Bonzini    fi
2200 cd362defSPaolo Bonzini  fi
2201 cd362defSPaolo Bonzini}
2202 cd362defSPaolo Bonzini
2203 cd362defSPaolo Bonzini##########################################
2204 55116968SJagannathan Raman# check for vfio_user_server
2205 55116968SJagannathan Raman
2206 55116968SJagannathan Ramancase "$vfio_user_server" in
2207 55116968SJagannathan Raman  enabled )
2208 55116968SJagannathan Raman    if test "$git_submodules_action" != "ignore"; then
2209 55116968SJagannathan Raman      git_submodules="${git_submodules} subprojects/libvfio-user"
2210 55116968SJagannathan Raman    fi
2211 55116968SJagannathan Raman    ;;
2212 55116968SJagannathan Ramanesac
2213 55116968SJagannathan Raman
2214 55116968SJagannathan Raman##########################################
2215 e86ecd4bSJuan Quintela# End of CC checks
2216 e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
2217 e86ecd4bSJuan Quintela
2218 d83414e1SMarc-André Lureauwrite_c_skeleton
2219 d83414e1SMarc-André Lureau
2220 df42fa7dSPaolo Bonziniif test "$fortify_source" = "yes" ; then
2221 086d5f75SPaolo Bonzini  QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
2222 086d5f75SPaolo Bonzinifi
2223 086d5f75SPaolo Bonzini
2224 247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then
2225 db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
2226 db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
2227 d83414e1SMarc-André Lureau  if test "$have_asan_iface_h" = "no" ; then
2228 d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header missing." \
2229 d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
2230 d83414e1SMarc-André Lureau  elif test "$have_asan_iface_fiber" = "no" ; then
2231 d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header is too old." \
2232 d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
2233 d83414e1SMarc-André Lureau  fi
2234 247724cbSMarc-André Lureaufi
2235 0aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then
2236 0aebab04SLingfeng Yang  if test "$have_tsan_iface_fiber" = "yes" ; then
2237 0aebab04SLingfeng Yang    QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
2238 0aebab04SLingfeng Yang    QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
2239 0aebab04SLingfeng Yang  else
2240 0aebab04SLingfeng Yang    error_exit "Cannot enable TSAN due to missing fiber annotation interface."
2241 0aebab04SLingfeng Yang  fi
2242 0aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then
2243 0aebab04SLingfeng Yang  error_exit "Cannot enable TSAN due to missing sanitize thread interface."
2244 0aebab04SLingfeng Yangfi
2245 247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then
2246 db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
2247 db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
2248 247724cbSMarc-André Lureaufi
2249 247724cbSMarc-André Lureau
2250 33ab4787SPaolo Bonzini#######################################
2251 33ab4787SPaolo Bonzini# cross-compiled firmware targets
2252 33ab4787SPaolo Bonzini
2253 ad388845SPaolo Bonzini# Set up build tree symlinks that point back into the source tree
2254 ad388845SPaolo Bonzini# (these can be both files and directories).
2255 ad388845SPaolo Bonzini# Caution: avoid adding files or directories here using wildcards. This
2256 ad388845SPaolo Bonzini# will result in problems later if a new file matching the wildcard is
2257 ad388845SPaolo Bonzini# added to the source tree -- nothing will cause configure to be rerun
2258 ad388845SPaolo Bonzini# so the build tree will be missing the link back to the new file, and
2259 ad388845SPaolo Bonzini# tests might fail. Prefer to keep the relevant files in their own
2260 ad388845SPaolo Bonzini# directory and symlink the directory instead.
2261 ad388845SPaolo BonziniLINKS="Makefile"
2262 ad388845SPaolo BonziniLINKS="$LINKS pc-bios/optionrom/Makefile"
2263 ad388845SPaolo BonziniLINKS="$LINKS pc-bios/s390-ccw/Makefile"
2264 d695918fSPaolo BonziniLINKS="$LINKS pc-bios/vof/Makefile"
2265 ad388845SPaolo BonziniLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
2266 ad388845SPaolo BonziniLINKS="$LINKS tests/avocado tests/data"
2267 ad388845SPaolo BonziniLINKS="$LINKS tests/qemu-iotests/check"
2268 ad388845SPaolo BonziniLINKS="$LINKS python"
2269 ad388845SPaolo BonziniLINKS="$LINKS contrib/plugins/Makefile "
2270 ad388845SPaolo Bonzinifor f in $LINKS ; do
2271 ad388845SPaolo Bonzini    if [ -e "$source_path/$f" ]; then
2272 cc3c71e8SPeter Maydell        mkdir -p "$(dirname ./"$f")"
2273 ad388845SPaolo Bonzini        symlink "$source_path/$f" "$f"
2274 ad388845SPaolo Bonzini    fi
2275 ad388845SPaolo Bonzinidone
2276 ad388845SPaolo Bonzini
2277 b898bf28SPaolo Bonziniecho "# Automatically generated by configure - do not modify" > Makefile.prereqs
2278 b898bf28SPaolo Bonzini
2279 ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
2280 ca35f780SPaolo Bonziniroms=
2281 35fd22b0SPaolo Bonziniif have_target i386-softmmu x86_64-softmmu && \
2282 35fd22b0SPaolo Bonzini        test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
2283 35fd22b0SPaolo Bonzini        test "$targetos" != "haiku" && \
2284 61cbb356SPaolo Bonzini        probe_target_compiler i386-softmmu; then
2285 76ca98b0SPaolo Bonzini    roms="pc-bios/optionrom"
2286 33ab4787SPaolo Bonzini    config_mak=pc-bios/optionrom/config.mak
2287 33ab4787SPaolo Bonzini    echo "# Automatically generated by configure - do not modify" > $config_mak
2288 33ab4787SPaolo Bonzini    echo "TOPSRC_DIR=$source_path" >> $config_mak
2289 fde10960SAlex Bennée    write_target_makefile >> $config_mak
2290 33ab4787SPaolo Bonzinifi
2291 ca35f780SPaolo Bonzini
2292 35fd22b0SPaolo Bonziniif have_target ppc-softmmu ppc64-softmmu && \
2293 35fd22b0SPaolo Bonzini        probe_target_compiler ppc-softmmu; then
2294 76ca98b0SPaolo Bonzini    roms="$roms pc-bios/vof"
2295 d695918fSPaolo Bonzini    config_mak=pc-bios/vof/config.mak
2296 d695918fSPaolo Bonzini    echo "# Automatically generated by configure - do not modify" > $config_mak
2297 d695918fSPaolo Bonzini    echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
2298 fde10960SAlex Bennée    write_target_makefile >> $config_mak
2299 d695918fSPaolo Bonzinifi
2300 d695918fSPaolo Bonzini
2301 9ffed426SPaolo Bonzini# Only build s390-ccw bios if the compiler has -march=z900 or -march=z10
2302 9ffed426SPaolo Bonzini# (which is the lowest architecture level that Clang supports)
2303 35fd22b0SPaolo Bonziniif have_target s390x-softmmu && probe_target_compiler s390x-softmmu; then
2304 2e33c3f8SThomas Huth  write_c_skeleton
2305 9ffed426SPaolo Bonzini  do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
2306 a5b2afd5SThomas Huth  has_z900=$?
2307 9ffed426SPaolo Bonzini  if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
2308 a5b2afd5SThomas Huth    if [ $has_z900 != 0 ]; then
2309 a5b2afd5SThomas Huth      echo "WARNING: Your compiler does not support the z900!"
2310 a5b2afd5SThomas Huth      echo "         The s390-ccw bios will only work with guest CPUs >= z10."
2311 a5b2afd5SThomas Huth    fi
2312 76ca98b0SPaolo Bonzini    roms="$roms pc-bios/s390-ccw"
2313 9ffed426SPaolo Bonzini    config_mak=pc-bios/s390-ccw/config-host.mak
2314 9ffed426SPaolo Bonzini    echo "# Automatically generated by configure - do not modify" > $config_mak
2315 9ffed426SPaolo Bonzini    echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
2316 fde10960SAlex Bennée    write_target_makefile >> $config_mak
2317 1ef6bfc2SPhilippe Mathieu-Daudé    # SLOF is required for building the s390-ccw firmware on s390x,
2318 1ef6bfc2SPhilippe Mathieu-Daudé    # since it is using the libnet code from SLOF for network booting.
2319 1ef6bfc2SPhilippe Mathieu-Daudé    git_submodules="${git_submodules} roms/SLOF"
2320 1ef6bfc2SPhilippe Mathieu-Daudé  fi
2321 9933c305SChristian Borntraegerfi
2322 9933c305SChristian Borntraeger
2323 9ffed426SPaolo Bonzini#######################################
2324 9ffed426SPaolo Bonzini# generate config-host.mak
2325 9ffed426SPaolo Bonzini
2326 7d7dbf9dSDan Streetmanif ! (GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
2327 7d7dbf9dSDan Streetman    exit 1
2328 5d91a2edSYonggang Luofi
2329 5d91a2edSYonggang Luo
2330 98ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
2331 97a847bcSbellard
2332 98ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
2333 98ec69acSJuan Quintelaecho >> $config_host_mak
2334 98ec69acSJuan Quintela
2335 e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
2336 cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak
2337 aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
2338 7d7dbf9dSDan Streetmanecho "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
2339 804edf29SJuan Quintela
2340 f8393946Saurel32if test "$debug_tcg" = "yes" ; then
2341 2358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
2342 f8393946Saurel32fi
2343 67b915a5Sbellardif test "$mingw32" = "yes" ; then
2344 98ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
2345 954ed68fSPaolo Bonzini  echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER-QEMU}" >> $config_host_mak
2346 954ed68fSPaolo Bonzini  echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO-Linux}" >> $config_host_mak
2347 954ed68fSPaolo Bonzini  echo "QEMU_GA_VERSION=${QEMU_GA_VERSION-$(cat "$source_path"/VERSION)}" >> $config_host_mak
2348 210fa556Spbrookelse
2349 35f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
2350 210fa556Spbrookfi
2351 128ab2ffSblueswir1
2352 dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
2353 dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
2354 dffcb71cSMark McLoughlinfi
2355 dffcb71cSMark McLoughlin
2356 83fb7adfSbellardif test "$darwin" = "yes" ; then
2357 98ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
2358 83fb7adfSbellardfi
2359 b29fe3edSmalc
2360 ec530c81Sbellardif test "$solaris" = "yes" ; then
2361 98ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
2362 ec530c81Sbellardfi
2363 97a847bcSbellardif test "$static" = "yes" ; then
2364 98ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
2365 97a847bcSbellardfi
2366 98ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
2367 2b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
2368 17969268SFam Zhengif test "$modules" = "yes"; then
2369 17969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
2370 17969268SFam Zhengfi
2371 277abf15SJan Vesely
2372 83fb7adfSbellard# XXX: suppress that
2373 7d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
2374 2358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
2375 7d3505c5Sbellardfi
2376 7d3505c5Sbellard
2377 7c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
2378 7d992e4dSPeter Lieven
2379 d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then
2380 d83414e1SMarc-André Lureau    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
2381 d83414e1SMarc-André Lureaufi
2382 d83414e1SMarc-André Lureau
2383 0aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
2384 0aebab04SLingfeng Yang    echo "CONFIG_TSAN=y" >> $config_host_mak
2385 0aebab04SLingfeng Yangfi
2386 0aebab04SLingfeng Yang
2387 40e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then
2388 40e8c6f4SAlex Bennée    echo "CONFIG_PLUGIN=y" >> $config_host_mak
2389 40e8c6f4SAlex Bennéefi
2390 40e8c6f4SAlex Bennée
2391 f48e590aSAlex Bennéeif test -n "$gdb_bin"; then
2392 b1863cccSAlex Bennée    gdb_version=$($gdb_bin --version | head -n 1)
2393 d6a66c81SAlex Bennée    if version_ge ${gdb_version##* } 9.1; then
2394 f48e590aSAlex Bennée        echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
2395 48543dd7SAlex Bennée    else
2396 48543dd7SAlex Bennée        gdb_bin=""
2397 f48e590aSAlex Bennée    fi
2398 b1863cccSAlex Bennéefi
2399 f48e590aSAlex Bennée
2400 c4575b59SPaolo Bonziniif test "$container" != no; then
2401 c4575b59SPaolo Bonzini    echo "ENGINE=$container" >> $config_host_mak
2402 *60f999b7SAlex Bennée    echo "RUNC=$runc" >> $config_host_mak
2403 c4575b59SPaolo Bonzinifi
2404 98ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
2405 804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
2406 c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
2407 39d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak
2408 a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak
2409 09e93326SPaolo Bonziniecho "NINJA=$ninja" >> $config_host_mak
2410 804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
2411 a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
2412 4cb37d11SPhilippe Mathieu-Daudéecho "QEMU_OBJCFLAGS=$QEMU_OBJCFLAGS" >> $config_host_mak
2413 a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
2414 a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak
2415 5b9e7d05SMarc-André Lureauecho "GLIB_BINDIR=$glib_bindir" >> $config_host_mak
2416 acedc9a6SPaolo Bonziniecho "GLIB_VERSION=$($pkg_config --modversion glib-2.0)" >> $config_host_mak
2417 8a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
2418 804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
2419 804edf29SJuan Quintela
2420 6efd7517SPeter Maydell# use included Linux headers
2421 6efd7517SPeter Maydellif test "$linux" = "yes" ; then
2422 a307beb6SAndreas Färber  mkdir -p linux-headers
2423 6efd7517SPeter Maydell  case "$cpu" in
2424 4da270beSPaolo Bonzini  i386|x86_64)
2425 08312a63SPeter Maydell    linux_arch=x86
2426 6efd7517SPeter Maydell    ;;
2427 d8ff892dSPaolo Bonzini  ppc|ppc64)
2428 08312a63SPeter Maydell    linux_arch=powerpc
2429 6efd7517SPeter Maydell    ;;
2430 6efd7517SPeter Maydell  s390x)
2431 08312a63SPeter Maydell    linux_arch=s390
2432 08312a63SPeter Maydell    ;;
2433 1f080313SClaudio Fontana  aarch64)
2434 1f080313SClaudio Fontana    linux_arch=arm64
2435 1f080313SClaudio Fontana    ;;
2436 dfcf900bSWANG Xuerui  loongarch*)
2437 dfcf900bSWANG Xuerui    linux_arch=loongarch
2438 dfcf900bSWANG Xuerui    ;;
2439 222e7d11SSanjay Lal  mips64)
2440 222e7d11SSanjay Lal    linux_arch=mips
2441 222e7d11SSanjay Lal    ;;
2442 08312a63SPeter Maydell  *)
2443 08312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
2444 08312a63SPeter Maydell    linux_arch="$cpu"
2445 6efd7517SPeter Maydell    ;;
2446 6efd7517SPeter Maydell  esac
2447 08312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
2448 08312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
2449 08312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
2450 08312a63SPeter Maydell    fi
2451 6efd7517SPeter Maydellfi
2452 6efd7517SPeter Maydell
2453 97a847bcSbellardfor target in $target_list; do
2454 97a847bcSbellard    target_dir="$target"
2455 57a93f16SPhilippe Mathieu-Daudé    target_name=$(echo $target | cut -d '-' -f 1)$EXESUF
2456 64708615SPeter Maydell    mkdir -p "$target_dir"
2457 fdb75aefSPaolo Bonzini    case $target in
2458 fdb75aefSPaolo Bonzini        *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
2459 fdb75aefSPaolo Bonzini        *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
2460 2408a527Saurel32    esac
2461 56aebc89Spbrookdone
2462 7d13299dSbellard
2463 fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then
2464 fdb75aefSPaolo Bonzini  echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
2465 fdb75aefSPaolo Bonzinifi
2466 a540f158SPeter Crosthwaite
2467 fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
2468 fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
2469 fd0e6053SJohn Snowfi
2470 fd0e6053SJohn Snow
2471 1e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
2472 1e4f6065SDaniele Buono  echo "CONFIG_SAFESTACK=y" >> $config_host_mak
2473 1e4f6065SDaniele Buonofi
2474 1e4f6065SDaniele Buono
2475 cd362defSPaolo Bonzini# tests/tcg configuration
2476 b898bf28SPaolo Bonzini(config_host_mak=tests/tcg/config-host.mak
2477 d674342eSPaolo Bonzinimkdir -p tests/tcg
2478 cd362defSPaolo Bonziniecho "# Automatically generated by configure - do not modify" > $config_host_mak
2479 cd362defSPaolo Bonziniecho "SRC_PATH=$source_path" >> $config_host_mak
2480 cd362defSPaolo Bonziniecho "HOST_CC=$host_cc" >> $config_host_mak
2481 cd362defSPaolo Bonzini
2482 48543dd7SAlex Bennée# versioned checked in the main config_host.mak above
2483 48543dd7SAlex Bennéeif test -n "$gdb_bin"; then
2484 48543dd7SAlex Bennée    echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
2485 48543dd7SAlex Bennéefi
2486 d1d94d96SPaolo Bonziniif test "$plugins" = "yes" ; then
2487 d1d94d96SPaolo Bonzini    echo "CONFIG_PLUGIN=y" >> $config_host_mak
2488 d1d94d96SPaolo Bonzinifi
2489 48543dd7SAlex Bennée
2490 cd362defSPaolo Bonzinitcg_tests_targets=
2491 cd362defSPaolo Bonzinifor target in $target_list; do
2492 cd362defSPaolo Bonzini  arch=${target%%-*}
2493 cd362defSPaolo Bonzini
2494 cd362defSPaolo Bonzini  case $target in
2495 c48a5c47SPaolo Bonzini    xtensa*-linux-user)
2496 c48a5c47SPaolo Bonzini      # the toolchain is not complete with headers, only build softmmu tests
2497 c48a5c47SPaolo Bonzini      continue
2498 c48a5c47SPaolo Bonzini      ;;
2499 cd362defSPaolo Bonzini    *-softmmu)
2500 64708615SPeter Maydell      test -f "$source_path/tests/tcg/$arch/Makefile.softmmu-target" || continue
2501 cd362defSPaolo Bonzini      qemu="qemu-system-$arch"
2502 cd362defSPaolo Bonzini      ;;
2503 cd362defSPaolo Bonzini    *-linux-user|*-bsd-user)
2504 cd362defSPaolo Bonzini      qemu="qemu-$arch"
2505 cd362defSPaolo Bonzini      ;;
2506 cd362defSPaolo Bonzini  esac
2507 cd362defSPaolo Bonzini
2508 fde10960SAlex Bennée  if probe_target_compiler $target || test -n "$container_image"; then
2509 0825cae0SPaolo Bonzini      test -n "$container_image" && build_static=y
2510 d674342eSPaolo Bonzini      mkdir -p "tests/tcg/$target"
2511 c7022a70SPaolo Bonzini      config_target_mak=tests/tcg/$target/config-target.mak
2512 d674342eSPaolo Bonzini      ln -sf "$source_path/tests/tcg/Makefile.target" "tests/tcg/$target/Makefile"
2513 c7022a70SPaolo Bonzini      echo "# Automatically generated by configure - do not modify" > "$config_target_mak"
2514 c7022a70SPaolo Bonzini      echo "TARGET_NAME=$arch" >> "$config_target_mak"
2515 a3e28f81SPaolo Bonzini      echo "TARGET=$target" >> "$config_target_mak"
2516 c7022a70SPaolo Bonzini      write_target_makefile "build-tcg-tests-$target" >> "$config_target_mak"
2517 15b273f8SPaolo Bonzini      echo "BUILD_STATIC=$build_static" >> "$config_target_mak"
2518 c7022a70SPaolo Bonzini      echo "QEMU=$PWD/$qemu" >> "$config_target_mak"
2519 b898bf28SPaolo Bonzini      echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> Makefile.prereqs
2520 cd362defSPaolo Bonzini      tcg_tests_targets="$tcg_tests_targets $target"
2521 cd362defSPaolo Bonzini  fi
2522 2038f8c8SPaolo Bonzinidone
2523 c0031d38SFabiano Rosas
2524 c0031d38SFabiano Rosasif test "$tcg" = "enabled"; then
2525 c0031d38SFabiano Rosas    echo "TCG_TESTS_TARGETS=$tcg_tests_targets" >> config-host.mak
2526 c0031d38SFabiano Rosasfi
2527 c0031d38SFabiano Rosas)
2528 2038f8c8SPaolo Bonzini
2529 a5665051SPaolo Bonziniif test "$skip_meson" = no; then
2530 fc929892SMarc-André Lureau  cross="config-meson.cross.new"
2531 fc929892SMarc-André Lureau  meson_quote() {
2532 ac7ebcc5SPaolo Bonzini    test $# = 0 && return
2533 47b30835SPaolo Bonzini    echo "'$(echo $* | sed "s/ /','/g")'"
2534 fc929892SMarc-André Lureau  }
2535 fc929892SMarc-André Lureau
2536 fc929892SMarc-André Lureau  echo "# Automatically generated by configure - do not modify" > $cross
2537 fc929892SMarc-André Lureau  echo "[properties]" >> $cross
2538 d1d5e9eeSAlex Bennée
2539 d1d5e9eeSAlex Bennée  # unroll any custom device configs
2540 d1d5e9eeSAlex Bennée  for a in $device_archs; do
2541 d1d5e9eeSAlex Bennée      eval "c=\$devices_${a}"
2542 d1d5e9eeSAlex Bennée      echo "${a}-softmmu = '$c'" >> $cross
2543 d1d5e9eeSAlex Bennée  done
2544 d1d5e9eeSAlex Bennée
2545 47b30835SPaolo Bonzini  echo "[built-in options]" >> $cross
2546 a2866660SPaolo Bonzini  echo "c_args = [$(meson_quote $CFLAGS $EXTRA_CFLAGS)]" >> $cross
2547 a2866660SPaolo Bonzini  echo "cpp_args = [$(meson_quote $CXXFLAGS $EXTRA_CXXFLAGS)]" >> $cross
2548 e910c7d9SPhilippe Mathieu-Daudé  test -n "$objcc" && echo "objc_args = [$(meson_quote $OBJCFLAGS $EXTRA_OBJCFLAGS)]" >> $cross
2549 a2866660SPaolo Bonzini  echo "c_link_args = [$(meson_quote $CFLAGS $LDFLAGS $EXTRA_CFLAGS $EXTRA_LDFLAGS)]" >> $cross
2550 a2866660SPaolo Bonzini  echo "cpp_link_args = [$(meson_quote $CXXFLAGS $LDFLAGS $EXTRA_CXXFLAGS $EXTRA_LDFLAGS)]" >> $cross
2551 fc929892SMarc-André Lureau  echo "[binaries]" >> $cross
2552 4dba2789SPaolo Bonzini  echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
2553 4dba2789SPaolo Bonzini  test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
2554 4dba2789SPaolo Bonzini  test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross
2555 47b30835SPaolo Bonzini  echo "ar = [$(meson_quote $ar)]" >> $cross
2556 47b30835SPaolo Bonzini  echo "nm = [$(meson_quote $nm)]" >> $cross
2557 47b30835SPaolo Bonzini  echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
2558 47b30835SPaolo Bonzini  echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
2559 e8178514SPaolo Bonzini  if has $sdl2_config; then
2560 47b30835SPaolo Bonzini    echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
2561 e8178514SPaolo Bonzini  fi
2562 47b30835SPaolo Bonzini  echo "strip = [$(meson_quote $strip)]" >> $cross
2563 158bb224SKonstantin Kostiuk  echo "widl = [$(meson_quote $widl)]" >> $cross
2564 47b30835SPaolo Bonzini  echo "windres = [$(meson_quote $windres)]" >> $cross
2565 f9f0e617SAndrey Drobyshev  echo "windmc = [$(meson_quote $windmc)]" >> $cross
2566 3812c0c4SJoelle van Dyne  if test "$cross_compile" = "yes"; then
2567 fc929892SMarc-André Lureau    cross_arg="--cross-file config-meson.cross"
2568 fc929892SMarc-André Lureau    echo "[host_machine]" >> $cross
2569 ba7c60c2SPaolo Bonzini    echo "system = '$targetos'" >> $cross
2570 823eb013SPaolo Bonzini    case "$cpu" in
2571 f6bca9dfSJoelle van Dyne        i386)
2572 fc929892SMarc-André Lureau            echo "cpu_family = 'x86'" >> $cross
2573 fc929892SMarc-André Lureau            ;;
2574 fc929892SMarc-André Lureau        *)
2575 823eb013SPaolo Bonzini            echo "cpu_family = '$cpu'" >> $cross
2576 fc929892SMarc-André Lureau            ;;
2577 fc929892SMarc-André Lureau    esac
2578 fc929892SMarc-André Lureau    echo "cpu = '$cpu'" >> $cross
2579 fc929892SMarc-André Lureau    if test "$bigendian" = "yes" ; then
2580 fc929892SMarc-André Lureau        echo "endian = 'big'" >> $cross
2581 fc929892SMarc-André Lureau    else
2582 fc929892SMarc-André Lureau        echo "endian = 'little'" >> $cross
2583 fc929892SMarc-André Lureau    fi
2584 fc929892SMarc-André Lureau  else
2585 fc929892SMarc-André Lureau    cross_arg="--native-file config-meson.cross"
2586 fc929892SMarc-André Lureau  fi
2587 fc929892SMarc-André Lureau  mv $cross config-meson.cross
2588 fc929892SMarc-André Lureau
2589 a5665051SPaolo Bonzini  rm -rf meson-private meson-info meson-logs
2590 0a31e3a0SPaolo Bonzini
2591 0a31e3a0SPaolo Bonzini  # Built-in options
2592 0a31e3a0SPaolo Bonzini  test "$bindir" != "bin" && meson_option_add "-Dbindir=$bindir"
2593 0a31e3a0SPaolo Bonzini  test "$default_feature" = no && meson_option_add -Dauto_features=disabled
2594 0a31e3a0SPaolo Bonzini  test "$pie" = no && meson_option_add -Db_pie=false
2595 0a31e3a0SPaolo Bonzini  test "$werror" = yes && meson_option_add -Dwerror=true
2596 0a31e3a0SPaolo Bonzini
2597 0a31e3a0SPaolo Bonzini  # QEMU options
2598 0a31e3a0SPaolo Bonzini  test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
2599 0a31e3a0SPaolo Bonzini  test "$fdt" != auto && meson_option_add "-Dfdt=$fdt"
2600 0a31e3a0SPaolo Bonzini  test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
2601 0a31e3a0SPaolo Bonzini  test "$qemu_suffix" != qemu && meson_option_add "-Dqemu_suffix=$qemu_suffix"
2602 0a31e3a0SPaolo Bonzini  test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
2603 0a31e3a0SPaolo Bonzini  test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"
2604 55116968SJagannathan Raman  test "$vfio_user_server" != auto && meson_option_add "-Dvfio_user_server=$vfio_user_server"
2605 61d63097SPaolo Bonzini  run_meson() {
2606 0a31e3a0SPaolo Bonzini    NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path"
2607 61d63097SPaolo Bonzini  }
2608 61d63097SPaolo Bonzini  eval run_meson $meson_options
2609 a5665051SPaolo Bonzini  if test "$?" -ne 0 ; then
2610 a5665051SPaolo Bonzini      error_exit "meson setup failed"
2611 a5665051SPaolo Bonzini  fi
2612 a5665051SPaolo Bonzinifi
2613 a5665051SPaolo Bonzini
2614 dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
2615 dc655404SMichael S. Tsirkincat <<EOD >config.status
2616 dc655404SMichael S. Tsirkin#!/bin/sh
2617 dc655404SMichael S. Tsirkin# Generated by configure.
2618 dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
2619 dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
2620 dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
2621 dc655404SMichael S. TsirkinEOD
2622 e811da7fSDaniel P. Berrangé
2623 e811da7fSDaniel P. Berrangépreserve_env() {
2624 e811da7fSDaniel P. Berrangé    envname=$1
2625 e811da7fSDaniel P. Berrangé
2626 e811da7fSDaniel P. Berrangé    eval envval=\$$envname
2627 e811da7fSDaniel P. Berrangé
2628 e811da7fSDaniel P. Berrangé    if test -n "$envval"
2629 e811da7fSDaniel P. Berrangé    then
2630 e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
2631 e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
2632 e811da7fSDaniel P. Berrangé    else
2633 e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
2634 e811da7fSDaniel P. Berrangé    fi
2635 e811da7fSDaniel P. Berrangé}
2636 e811da7fSDaniel P. Berrangé
2637 e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
2638 e811da7fSDaniel P. Berrangé# features/build target configure will detect
2639 e811da7fSDaniel P. Berrangépreserve_env AR
2640 e811da7fSDaniel P. Berrangépreserve_env AS
2641 e811da7fSDaniel P. Berrangépreserve_env CC
2642 8009da03SPaolo Bonzinipreserve_env CFLAGS
2643 e811da7fSDaniel P. Berrangépreserve_env CXX
2644 8009da03SPaolo Bonzinipreserve_env CXXFLAGS
2645 e811da7fSDaniel P. Berrangépreserve_env LD
2646 8009da03SPaolo Bonzinipreserve_env LDFLAGS
2647 e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
2648 e811da7fSDaniel P. Berrangépreserve_env MAKE
2649 e811da7fSDaniel P. Berrangépreserve_env NM
2650 b5569e5bSPaolo Bonzinipreserve_env OBJCFLAGS
2651 e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
2652 e811da7fSDaniel P. Berrangépreserve_env PATH
2653 e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
2654 e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
2655 e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
2656 e811da7fSDaniel P. Berrangépreserve_env PYTHON
2657 954ed68fSPaolo Bonzinipreserve_env QEMU_GA_MANUFACTURER
2658 954ed68fSPaolo Bonzinipreserve_env QEMU_GA_DISTRO
2659 954ed68fSPaolo Bonzinipreserve_env QEMU_GA_VERSION
2660 e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
2661 e811da7fSDaniel P. Berrangépreserve_env SMBD
2662 e811da7fSDaniel P. Berrangépreserve_env STRIP
2663 158bb224SKonstantin Kostiukpreserve_env WIDL
2664 e811da7fSDaniel P. Berrangépreserve_env WINDRES
2665 f9f0e617SAndrey Drobyshevpreserve_env WINDMC
2666 e811da7fSDaniel P. Berrangé
2667 dc655404SMichael S. Tsirkinprintf "exec" >>config.status
2668 a5665051SPaolo Bonzinifor i in "$0" "$@"; do
2669 835af899SPaolo Bonzini  test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
2670 a5665051SPaolo Bonzinidone
2671 cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
2672 dc655404SMichael S. Tsirkinchmod +x config.status
2673 dc655404SMichael S. Tsirkin
2674 8cd05ab6SPeter Maydellrm -r "$TMPDIR1"
2675