xref: /openbmc/qemu/configure (revision c853c4d08728f8e7fa6965e8508ed826b5461f04)
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 5b507233SPaolo Bonzini# just as autoconf does.  Unlike autoconf, we assume that unset exists.
8 5b507233SPaolo Bonziniunset CLICOLOR_FORCE GREP_OPTIONS BASH_ENV ENV MAIL MAILPATH CDPATH
9 99519e67SCornelia Huck
10 5e4dfd3dSJohn Snow# Don't allow CCACHE, if present, to use cached results of compile tests!
11 5e4dfd3dSJohn Snowexport CCACHE_RECACHE=yes
12 5e4dfd3dSJohn Snow
13 dedad027SDaniel P. Berrangé# make source path absolute
14 dedad027SDaniel P. Berrangésource_path=$(cd "$(dirname -- "$0")"; pwd)
15 dedad027SDaniel P. Berrangé
16 dedad027SDaniel P. Berrangéif test "$PWD" = "$source_path"
17 dedad027SDaniel P. Berrangéthen
18 dedad027SDaniel P. Berrangé    echo "Using './build' as the directory for build output"
19 dedad027SDaniel P. Berrangé
20 dedad027SDaniel P. Berrangé    MARKER=build/auto-created-by-configure
21 dedad027SDaniel P. Berrangé
22 dedad027SDaniel P. Berrangé    if test -e build
23 dedad027SDaniel P. Berrangé    then
24 dedad027SDaniel P. Berrangé        if test -f $MARKER
25 dedad027SDaniel P. Berrangé        then
26 dedad027SDaniel P. Berrangé           rm -rf build
27 dedad027SDaniel P. Berrangé        else
28 dedad027SDaniel P. Berrangé            echo "ERROR: ./build dir already exists and was not previously created by configure"
29 dedad027SDaniel P. Berrangé            exit 1
30 dedad027SDaniel P. Berrangé        fi
31 dedad027SDaniel P. Berrangé    fi
32 dedad027SDaniel P. Berrangé
33 f160a5b2SDinah Baum    if ! mkdir build || ! touch $MARKER
34 f160a5b2SDinah Baum    then
35 f160a5b2SDinah Baum        echo "ERROR: Could not create ./build directory. Check the permissions on"
36 f160a5b2SDinah Baum        echo "your source directory, or try doing an out-of-tree build."
37 f160a5b2SDinah Baum        exit 1
38 f160a5b2SDinah Baum    fi
39 dedad027SDaniel P. Berrangé
40 dedad027SDaniel P. Berrangé    cat > GNUmakefile <<'EOF'
41 dedad027SDaniel P. Berrangé# This file is auto-generated by configure to support in-source tree
42 dedad027SDaniel P. Berrangé# 'make' command invocation
43 dedad027SDaniel P. Berrangé
44 dedad027SDaniel P. Berrangéifeq ($(MAKECMDGOALS),)
45 dedad027SDaniel P. Berrangérecurse: all
46 dedad027SDaniel P. Berrangéendif
47 dedad027SDaniel P. Berrangé
48 dedad027SDaniel P. Berrangé.NOTPARALLEL: %
49 dedad027SDaniel P. Berrangé%: force
50 dedad027SDaniel P. Berrangé	@echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
51 dedad027SDaniel P. Berrangé	@$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
52 dedad027SDaniel P. Berrangé	@if test "$(MAKECMDGOALS)" = "distclean" && \
53 dedad027SDaniel P. Berrangé	    test -e build/auto-created-by-configure ; \
54 dedad027SDaniel P. Berrangé	then \
55 dedad027SDaniel P. Berrangé	    rm -rf build GNUmakefile ; \
56 dedad027SDaniel P. Berrangé	fi
57 dedad027SDaniel P. Berrangéforce: ;
58 dedad027SDaniel P. Berrangé.PHONY: force
59 dedad027SDaniel P. BerrangéGNUmakefile: ;
60 dedad027SDaniel P. Berrangé
61 dedad027SDaniel P. BerrangéEOF
62 dedad027SDaniel P. Berrangé    cd build
63 64708615SPeter Maydell    exec "$source_path/configure" "$@"
64 dedad027SDaniel P. Berrangéfi
65 dedad027SDaniel P. Berrangé
66 8cd05ab6SPeter Maydell# Temporary directory used for files created while
67 8cd05ab6SPeter Maydell# configure runs. Since it is in the build directory
68 8cd05ab6SPeter Maydell# we can safely blow away any previous version of it
69 8cd05ab6SPeter Maydell# (and we need not jump through hoops to try to delete
70 8cd05ab6SPeter Maydell# it when configure exits.)
71 8cd05ab6SPeter MaydellTMPDIR1="config-temp"
72 8cd05ab6SPeter Maydellrm -rf "${TMPDIR1}"
73 563661c0SPeter Maydellif ! mkdir -p "${TMPDIR1}"; then
74 8cd05ab6SPeter Maydell    echo "ERROR: failed to create temporary directory"
75 8cd05ab6SPeter Maydell    exit 1
76 7d13299dSbellardfi
77 7d13299dSbellard
78 8cd05ab6SPeter MaydellTMPB="qemu-conf"
79 8cd05ab6SPeter MaydellTMPC="${TMPDIR1}/${TMPB}.c"
80 66518bf6SDon SlutzTMPO="${TMPDIR1}/${TMPB}.o"
81 8cd05ab6SPeter MaydellTMPE="${TMPDIR1}/${TMPB}.exe"
82 7d13299dSbellard
83 da1d85e3SGerd Hoffmannrm -f config.log
84 9ac81bbbSmalc
85 b48e3611SPeter Maydell# Print a helpful header at the top of config.log
86 b48e3611SPeter Maydellecho "# QEMU configure log $(date)" >> config.log
87 979ae168SPeter Maydellprintf "# Configured with:" >> config.log
88 7f788779SAlex Bennée# repeat the invocation to log and stdout for CI
89 7f788779SAlex Bennéeinvoke=$(printf " '%s'" "$0" "$@")
90 7f788779SAlex Bennéetest -n "$GITLAB_CI" && echo "configuring with: $invoke"
91 7f788779SAlex Bennée{ echo "$invoke"; echo; echo "#"; } >> config.log
92 b48e3611SPeter Maydell
93 835af899SPaolo Bonziniquote_sh() {
94 835af899SPaolo Bonzini    printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
95 835af899SPaolo Bonzini}
96 835af899SPaolo Bonzini
97 d880a3baSPaolo Bonziniprint_error() {
98 d880a3baSPaolo Bonzini    (echo
99 76ad07a4SPeter Maydell    echo "ERROR: $1"
100 76ad07a4SPeter Maydell    while test -n "$2"; do
101 76ad07a4SPeter Maydell        echo "       $2"
102 76ad07a4SPeter Maydell        shift
103 76ad07a4SPeter Maydell    done
104 d880a3baSPaolo Bonzini    echo) >&2
105 d880a3baSPaolo Bonzini}
106 d880a3baSPaolo Bonzini
107 d880a3baSPaolo Bonzinierror_exit() {
108 d880a3baSPaolo Bonzini    print_error "$@"
109 76ad07a4SPeter Maydell    exit 1
110 76ad07a4SPeter Maydell}
111 76ad07a4SPeter Maydell
112 9c83ffd8SPeter Maydelldo_compiler() {
113 9c83ffd8SPeter Maydell  # Run the compiler, capturing its output to the log. First argument
114 9c83ffd8SPeter Maydell  # is compiler binary to execute.
115 b3b5472dSPeter Maydell  compiler="$1"
116 cd362defSPaolo Bonzini  shift
117 cd362defSPaolo Bonzini  if test -n "$BASH_VERSION"; then eval '
118 cd362defSPaolo Bonzini      echo >>config.log "
119 cd362defSPaolo Bonzinifuncs: ${FUNCNAME[*]}
120 cd362defSPaolo Bonzinilines: ${BASH_LINENO[*]}"
121 cd362defSPaolo Bonzini  '; fi
122 cd362defSPaolo Bonzini  echo $compiler "$@" >> config.log
123 cd362defSPaolo Bonzini  $compiler "$@" >> config.log 2>&1 || return $?
124 cd362defSPaolo Bonzini}
125 cd362defSPaolo Bonzini
126 9c83ffd8SPeter Maydelldo_cc() {
127 d0016b86SPaolo Bonzini    do_compiler "$cc" $CPU_CFLAGS "$@"
128 9c83ffd8SPeter Maydell}
129 9c83ffd8SPeter Maydell
130 52166aa0SJuan Quintelacompile_object() {
131 fd0e6053SJohn Snow  local_cflags="$1"
132 a988b4c5SPaolo Bonzini  do_cc $CFLAGS $EXTRA_CFLAGS $local_cflags -c -o $TMPO $TMPC
133 52166aa0SJuan Quintela}
134 52166aa0SJuan Quintela
135 52166aa0SJuan Quintelacompile_prog() {
136 52166aa0SJuan Quintela  local_cflags="$1"
137 52166aa0SJuan Quintela  local_ldflags="$2"
138 a988b4c5SPaolo Bonzini  do_cc $CFLAGS $EXTRA_CFLAGS $local_cflags -o $TMPE $TMPC \
139 a988b4c5SPaolo Bonzini      $LDFLAGS $EXTRA_LDFLAGS $local_ldflags
140 52166aa0SJuan Quintela}
141 52166aa0SJuan Quintela
142 11568d6dSPaolo Bonzini# symbolically link $1 to $2.  Portable version of "ln -sf".
143 11568d6dSPaolo Bonzinisymlink() {
144 72b8b5a1SStefan Weil  rm -rf "$2"
145 ec5b06d7SAnthony Liguori  mkdir -p "$(dirname "$2")"
146 72b8b5a1SStefan Weil  ln -s "$1" "$2"
147 11568d6dSPaolo Bonzini}
148 11568d6dSPaolo Bonzini
149 0dba6195SLoïc Minier# check whether a command is available to this shell (may be either an
150 0dba6195SLoïc Minier# executable or a builtin)
151 0dba6195SLoïc Minierhas() {
152 0dba6195SLoïc Minier    type "$1" >/dev/null 2>&1
153 0dba6195SLoïc Minier}
154 0dba6195SLoïc Minier
155 0a01d76fSMarc-André Lureauversion_ge () {
156 2df52b9bSAlex Bennée    local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
157 2df52b9bSAlex Bennée    local_ver2=$(echo "$2" | tr . ' ')
158 0a01d76fSMarc-André Lureau    while true; do
159 0a01d76fSMarc-André Lureau        set x $local_ver1
160 0a01d76fSMarc-André Lureau        local_first=${2-0}
161 c44a33e2SStefano Garzarella        # 'shift 2' if $2 is set, or 'shift' if $2 is not set
162 c44a33e2SStefano Garzarella        shift ${2:+2}
163 0a01d76fSMarc-André Lureau        local_ver1=$*
164 0a01d76fSMarc-André Lureau        set x $local_ver2
165 0a01d76fSMarc-André Lureau        # the second argument finished, the first must be greater or equal
166 0a01d76fSMarc-André Lureau        test $# = 1 && return 0
167 0a01d76fSMarc-André Lureau        test $local_first -lt $2 && return 1
168 0a01d76fSMarc-André Lureau        test $local_first -gt $2 && return 0
169 c44a33e2SStefano Garzarella        shift ${2:+2}
170 0a01d76fSMarc-André Lureau        local_ver2=$*
171 0a01d76fSMarc-André Lureau    done
172 0a01d76fSMarc-André Lureau}
173 0a01d76fSMarc-André Lureau
174 4ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
175 4ace32e2SAntonio Ospitethen
176 4ace32e2SAntonio Ospite  error_exit "main directory cannot contain spaces nor colons"
177 4ace32e2SAntonio Ospitefi
178 4ace32e2SAntonio Ospite
179 13cf376cSPaolo Bonzini# parse CC options first; some compiler tests are used to establish
180 13cf376cSPaolo Bonzini# some defaults, based on the host environment
181 13cf376cSPaolo Bonzini
182 14211825SAntonio Ospite# default parameters
183 2ff6b91eSJuan Quintelacpu=""
184 3812c0c4SJoelle van Dynecross_compile="no"
185 7d13299dSbellardcross_prefix=""
186 e49d021eSPeter Maydellhost_cc="cc"
187 13cf376cSPaolo BonziniEXTRA_CFLAGS=""
188 13cf376cSPaolo BonziniEXTRA_CXXFLAGS=""
189 13cf376cSPaolo BonziniEXTRA_OBJCFLAGS=""
190 13cf376cSPaolo BonziniEXTRA_LDFLAGS=""
191 377529c0SPaolo Bonzini
192 377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
193 377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
194 377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
195 377529c0SPaolo Bonzini#              unless --disable-foo is given
196 377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
197 377529c0SPaolo Bonzini#              feature will searched for,
198 377529c0SPaolo Bonzini#              if not found, configure exits with error
199 377529c0SPaolo Bonzini#
200 377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
201 377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
202 377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
203 c87ea116SAlex Bennéedefault_feature=""
204 c87ea116SAlex Bennée
205 ac0df51dSaliguorifor opt do
206 89138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
207 ac0df51dSaliguori  case "$opt" in
208 ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
209 3812c0c4SJoelle van Dyne                    cross_compile="yes"
210 ac0df51dSaliguori  ;;
211 3d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
212 ac0df51dSaliguori  ;;
213 83f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
214 83f73fceSTomoki Sekiyama  ;;
215 c0c34c91SPeter Maydell  --objcc=*) objcc="$optarg"
216 c0c34c91SPeter Maydell  ;;
217 2ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
218 2ff6b91eSJuan Quintela  ;;
219 a2866660SPaolo Bonzini  --extra-cflags=*)
220 a2866660SPaolo Bonzini    EXTRA_CFLAGS="$EXTRA_CFLAGS $optarg"
221 a2866660SPaolo Bonzini    EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
222 e910c7d9SPhilippe Mathieu-Daudé    EXTRA_OBJCFLAGS="$EXTRA_OBJCFLAGS $optarg"
223 e2a2ed06SJuan Quintela    ;;
224 a2866660SPaolo Bonzini  --extra-cxxflags=*) EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
225 11cde1c8SBruno Dominguez  ;;
226 e910c7d9SPhilippe Mathieu-Daudé  --extra-objcflags=*) EXTRA_OBJCFLAGS="$EXTRA_OBJCFLAGS $optarg"
227 e910c7d9SPhilippe Mathieu-Daudé  ;;
228 a2866660SPaolo Bonzini  --extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg"
229 e2a2ed06SJuan Quintela  ;;
230 d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
231 d75402b5SAlex Bennée  ;;
232 479ca4ccSMatheus Ferst  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-cflags-}; cc_arch=${cc_arch%%=*}
233 d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
234 d422b2bcSAlex Bennée  ;;
235 d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
236 d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
237 d75402b5SAlex Bennée  ;;
238 5adb43beSPaolo Bonzini  --cross-prefix-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-prefix-FOO option"
239 5adb43beSPaolo Bonzini  ;;
240 5adb43beSPaolo Bonzini  --cross-prefix-*) cc_arch=${opt#--cross-prefix-}; cc_arch=${cc_arch%%=*}
241 5adb43beSPaolo Bonzini                    eval "cross_prefix_${cc_arch}=\$optarg"
242 5adb43beSPaolo Bonzini  ;;
243 13cf376cSPaolo Bonzini  --without-default-features) default_feature="no"
244 13cf376cSPaolo Bonzini  ;;
245 ac0df51dSaliguori  esac
246 ac0df51dSaliguoridone
247 ac0df51dSaliguori
248 13cf376cSPaolo Bonzini
249 13cf376cSPaolo Bonzinigit_submodules_action="update"
250 13cf376cSPaolo Bonzinigit="git"
251 13cf376cSPaolo Bonzinidebug_tcg="no"
252 13cf376cSPaolo Bonzinidocs="auto"
253 13cf376cSPaolo BonziniEXESUF=""
254 13cf376cSPaolo Bonziniprefix="/usr/local"
255 13cf376cSPaolo Bonziniqemu_suffix="qemu"
256 13cf376cSPaolo Bonzinisoftmmu="yes"
257 13cf376cSPaolo Bonzinilinux_user=""
258 13cf376cSPaolo Bonzinibsd_user=""
259 13cf376cSPaolo Bonziniplugins="$default_feature"
260 13cf376cSPaolo Bonzinininja=""
261 13cf376cSPaolo Bonzinipython=
262 ac4ccac7SPaolo Bonzinidownload="enabled"
263 13cf376cSPaolo Bonzinibindir="bin"
264 13cf376cSPaolo Bonziniskip_meson=no
265 13cf376cSPaolo Bonziniuse_containers="yes"
266 13cf376cSPaolo Bonzinigdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
267 13cf376cSPaolo Bonzinigdb_arches=""
268 13cf376cSPaolo Bonziniwerror=""
269 13cf376cSPaolo Bonzini
270 13cf376cSPaolo Bonzini# Don't accept a target_list environment variable.
271 13cf376cSPaolo Bonziniunset target_list
272 13cf376cSPaolo Bonziniunset target_list_exclude
273 13cf376cSPaolo Bonzini
274 13cf376cSPaolo Bonzini# The following Meson options are handled manually (still they
275 13cf376cSPaolo Bonzini# are included in the automatically generated help message)
276 2019cabfSPaolo Bonzini# because they automatically enable/disable other options
277 13cf376cSPaolo Bonzinitcg="auto"
278 13cf376cSPaolo Bonzinicfi="false"
279 13cf376cSPaolo Bonzini
280 2019cabfSPaolo Bonzini# Meson has PIE as a boolean rather than enabled/disabled/auto,
281 2019cabfSPaolo Bonzini# and we also need to check for -static-pie before Meson runs
282 2019cabfSPaolo Bonzini# which requires knowing whether --static is enabled.
283 13cf376cSPaolo Bonzinipie=""
284 13cf376cSPaolo Bonzinistatic="no"
285 13cf376cSPaolo Bonzini
286 e49d021eSPeter Maydell# Preferred compiler:
287 e49d021eSPeter Maydell#  ${CC} (if set)
288 e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
289 e49d021eSPeter Maydell#  system compiler
290 e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
291 e49d021eSPeter Maydell  cc="$host_cc"
292 e49d021eSPeter Maydellelse
293 b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
294 e49d021eSPeter Maydellfi
295 e49d021eSPeter Maydell
296 83f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
297 83f73fceSTomoki Sekiyama  cxx="c++"
298 83f73fceSTomoki Sekiyamaelse
299 83f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
300 83f73fceSTomoki Sekiyamafi
301 83f73fceSTomoki Sekiyama
302 c0c34c91SPeter Maydell# Preferred ObjC compiler:
303 c0c34c91SPeter Maydell# $objcc (if set, i.e. via --objcc option)
304 c0c34c91SPeter Maydell# ${cross_prefix}clang (if cross-prefix specified)
305 c0c34c91SPeter Maydell# clang (if available)
306 c0c34c91SPeter Maydell# $cc
307 c0c34c91SPeter Maydellif test -z "${objcc}${cross_prefix}"; then
308 c0c34c91SPeter Maydell  if has clang; then
309 c0c34c91SPeter Maydell    objcc=clang
310 c0c34c91SPeter Maydell  else
311 c0c34c91SPeter Maydell    objcc="$cc"
312 c0c34c91SPeter Maydell  fi
313 c0c34c91SPeter Maydellelse
314 c0c34c91SPeter Maydell  objcc="${objcc-${cross_prefix}clang}"
315 c0c34c91SPeter Maydellfi
316 c0c34c91SPeter Maydell
317 b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
318 cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
319 5f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
320 b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
321 b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
322 9f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
323 4852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
324 35acbb30SPaolo Bonzinismbd="$SMBD"
325 b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
326 158bb224SKonstantin Kostiukwidl="${WIDL-${cross_prefix}widl}"
327 b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
328 f9f0e617SAndrey Drobyshevwindmc="${WINDMC-${cross_prefix}windmc}"
329 877c5567SPaolo Bonzinipkg_config="${PKG_CONFIG-${cross_prefix}pkg-config}"
330 47c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
331 ac0df51dSaliguori
332 ac0df51dSaliguoricheck_define() {
333 ac0df51dSaliguoricat > $TMPC <<EOF
334 ac0df51dSaliguori#if !defined($1)
335 fd786e1aSPeter Maydell#error $1 not defined
336 ac0df51dSaliguori#endif
337 ac0df51dSaliguoriint main(void) { return 0; }
338 ac0df51dSaliguoriEOF
339 52166aa0SJuan Quintela  compile_object
340 ac0df51dSaliguori}
341 ac0df51dSaliguori
342 93b25869SJohn Snowwrite_c_skeleton() {
343 93b25869SJohn Snow    cat > $TMPC <<EOF
344 93b25869SJohn Snowint main(void) { return 0; }
345 93b25869SJohn SnowEOF
346 93b25869SJohn Snow}
347 93b25869SJohn Snow
348 bbea4050SPeter Maydellif check_define __linux__ ; then
349 ba7c60c2SPaolo Bonzini  targetos=linux
350 bbea4050SPeter Maydellelif check_define _WIN32 ; then
351 ba7c60c2SPaolo Bonzini  targetos=windows
352 bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
353 ba7c60c2SPaolo Bonzini  targetos=openbsd
354 bbea4050SPeter Maydellelif check_define __sun__ ; then
355 ba7c60c2SPaolo Bonzini  targetos=sunos
356 bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
357 ba7c60c2SPaolo Bonzini  targetos=haiku
358 951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
359 ba7c60c2SPaolo Bonzini  targetos=freebsd
360 951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
361 ba7c60c2SPaolo Bonzini  targetos=gnu/kfreebsd
362 951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
363 ba7c60c2SPaolo Bonzini  targetos=dragonfly
364 951fedfcSPeter Maydellelif check_define __NetBSD__; then
365 ba7c60c2SPaolo Bonzini  targetos=netbsd
366 951fedfcSPeter Maydellelif check_define __APPLE__; then
367 ba7c60c2SPaolo Bonzini  targetos=darwin
368 bbea4050SPeter Maydellelse
369 951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
370 951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
371 951fedfcSPeter Maydell  # be the result of a missing compiler.
372 ba7c60c2SPaolo Bonzini  targetos=bogus
373 bbea4050SPeter Maydellfi
374 bbea4050SPeter Maydell
375 65eff01bSPaolo Bonzini# OS specific
376 65eff01bSPaolo Bonzini
377 3b0d8643SPaolo Bonzinimingw32="no"
378 3b0d8643SPaolo Bonzinibsd="no"
379 3b0d8643SPaolo Bonzinilinux="no"
380 3b0d8643SPaolo Bonzinisolaris="no"
381 65eff01bSPaolo Bonzinicase $targetos in
382 65eff01bSPaolo Bonziniwindows)
383 65eff01bSPaolo Bonzini  mingw32="yes"
384 65eff01bSPaolo Bonzini  plugins="no"
385 65eff01bSPaolo Bonzini  pie="no"
386 65eff01bSPaolo Bonzini;;
387 65eff01bSPaolo Bonzinignu/kfreebsd)
388 65eff01bSPaolo Bonzini  bsd="yes"
389 65eff01bSPaolo Bonzini;;
390 65eff01bSPaolo Bonzinifreebsd)
391 65eff01bSPaolo Bonzini  bsd="yes"
392 65eff01bSPaolo Bonzini  # needed for kinfo_getvmmap(3) in libutil.h
393 65eff01bSPaolo Bonzini;;
394 65eff01bSPaolo Bonzinidragonfly)
395 65eff01bSPaolo Bonzini  bsd="yes"
396 65eff01bSPaolo Bonzini;;
397 65eff01bSPaolo Bonzininetbsd)
398 65eff01bSPaolo Bonzini  bsd="yes"
399 65eff01bSPaolo Bonzini;;
400 65eff01bSPaolo Bonziniopenbsd)
401 65eff01bSPaolo Bonzini  bsd="yes"
402 65eff01bSPaolo Bonzini;;
403 65eff01bSPaolo Bonzinidarwin)
404 65eff01bSPaolo Bonzini  bsd="yes"
405 65eff01bSPaolo Bonzini  darwin="yes"
406 65eff01bSPaolo Bonzini;;
407 65eff01bSPaolo Bonzinisunos)
408 65eff01bSPaolo Bonzini  solaris="yes"
409 65eff01bSPaolo Bonzini;;
410 65eff01bSPaolo Bonzinihaiku)
411 65eff01bSPaolo Bonzini  pie="no"
412 65eff01bSPaolo Bonzini;;
413 65eff01bSPaolo Bonzinilinux)
414 65eff01bSPaolo Bonzini  linux="yes"
415 65eff01bSPaolo Bonzini;;
416 bbea4050SPeter Maydellesac
417 bbea4050SPeter Maydell
418 2ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
419 2ff6b91eSJuan Quintela  # command line argument
420 2ff6b91eSJuan Quintela  :
421 2ff6b91eSJuan Quintelaelif check_define __i386__ ; then
422 ac0df51dSaliguori  cpu="i386"
423 ac0df51dSaliguorielif check_define __x86_64__ ; then
424 c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
425 c72b26ecSRichard Henderson    cpu="x32"
426 c72b26ecSRichard Henderson  else
427 ac0df51dSaliguori    cpu="x86_64"
428 c72b26ecSRichard Henderson  fi
429 3aa9bd6cSblueswir1elif check_define __sparc__ ; then
430 3aa9bd6cSblueswir1  if check_define __arch64__ ; then
431 3aa9bd6cSblueswir1    cpu="sparc64"
432 3aa9bd6cSblueswir1  else
433 3aa9bd6cSblueswir1    cpu="sparc"
434 3aa9bd6cSblueswir1  fi
435 fdf7ed96Smalcelif check_define _ARCH_PPC ; then
436 fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
437 f8378accSRichard Henderson    if check_define _LITTLE_ENDIAN ; then
438 f8378accSRichard Henderson      cpu="ppc64le"
439 f8378accSRichard Henderson    else
440 fdf7ed96Smalc      cpu="ppc64"
441 f8378accSRichard Henderson    fi
442 ac0df51dSaliguori  else
443 fdf7ed96Smalc    cpu="ppc"
444 fdf7ed96Smalc  fi
445 afa05235SAurelien Jarnoelif check_define __mips__ ; then
446 afa05235SAurelien Jarno  cpu="mips"
447 d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
448 d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
449 d66ed0eaSAurelien Jarno    cpu="s390x"
450 d66ed0eaSAurelien Jarno  else
451 d66ed0eaSAurelien Jarno    cpu="s390"
452 d66ed0eaSAurelien Jarno  fi
453 c4f80543SAlistair Franciselif check_define __riscv ; then
454 e3e477c3SPhilippe Mathieu-Daudé  if check_define _LP64 ; then
455 e3e477c3SPhilippe Mathieu-Daudé    cpu="riscv64"
456 e3e477c3SPhilippe Mathieu-Daudé  else
457 e3e477c3SPhilippe Mathieu-Daudé    cpu="riscv32"
458 e3e477c3SPhilippe Mathieu-Daudé  fi
459 21d89f84SPeter Maydellelif check_define __arm__ ; then
460 21d89f84SPeter Maydell  cpu="arm"
461 1f080313SClaudio Fontanaelif check_define __aarch64__ ; then
462 1f080313SClaudio Fontana  cpu="aarch64"
463 dfcf900bSWANG Xueruielif check_define __loongarch64 ; then
464 dfcf900bSWANG Xuerui  cpu="loongarch64"
465 fdf7ed96Smalcelse
466 f9c77801SPaolo Bonzini  # Using uname is really broken, but it is just a fallback for architectures
467 f9c77801SPaolo Bonzini  # that are going to use TCI anyway
468 89138857SStefan Weil  cpu=$(uname -m)
469 f9c77801SPaolo Bonzini  echo "WARNING: unrecognized host CPU, proceeding with 'uname -m' output '$cpu'"
470 ac0df51dSaliguorifi
471 ac0df51dSaliguori
472 971fac27SPaolo Bonzini# Normalise host CPU name to the values used by Meson cross files and in source
473 971fac27SPaolo Bonzini# directories, and set multilib cflags.  The canonicalization isn't really
474 971fac27SPaolo Bonzini# necessary, because the architectures that we check for should not hit the
475 971fac27SPaolo Bonzini# 'uname -m' case, but better safe than sorry in case --cpu= is used.
476 971fac27SPaolo Bonzini#
477 359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
478 971fac27SPaolo Bonzini# Please keep it sorted and synchronized with meson.build's host_arch.
479 971fac27SPaolo Bonzinihost_arch=
480 971fac27SPaolo Bonzinilinux_arch=
481 7d13299dSbellardcase "$cpu" in
482 971fac27SPaolo Bonzini  aarch64)
483 971fac27SPaolo Bonzini    host_arch=aarch64
484 971fac27SPaolo Bonzini    linux_arch=arm64
485 971fac27SPaolo Bonzini    ;;
486 971fac27SPaolo Bonzini
487 e4da0e39SPaolo Bonzini  armv*b|armv*l|arm)
488 971fac27SPaolo Bonzini    cpu=arm
489 971fac27SPaolo Bonzini    host_arch=arm
490 971fac27SPaolo Bonzini    linux_arch=arm
491 971fac27SPaolo Bonzini    ;;
492 e4da0e39SPaolo Bonzini
493 f9c77801SPaolo Bonzini  i386|i486|i586|i686)
494 97a847bcSbellard    cpu="i386"
495 971fac27SPaolo Bonzini    host_arch=i386
496 971fac27SPaolo Bonzini    linux_arch=x86
497 971fac27SPaolo Bonzini    CPU_CFLAGS="-m32"
498 971fac27SPaolo Bonzini    ;;
499 971fac27SPaolo Bonzini
500 971fac27SPaolo Bonzini  loongarch*)
501 971fac27SPaolo Bonzini    cpu=loongarch64
502 971fac27SPaolo Bonzini    host_arch=loongarch64
503 971fac27SPaolo Bonzini    ;;
504 971fac27SPaolo Bonzini
505 971fac27SPaolo Bonzini  mips64*)
506 971fac27SPaolo Bonzini    cpu=mips64
507 971fac27SPaolo Bonzini    host_arch=mips
508 971fac27SPaolo Bonzini    linux_arch=mips
509 971fac27SPaolo Bonzini    ;;
510 971fac27SPaolo Bonzini  mips*)
511 971fac27SPaolo Bonzini    cpu=mips
512 971fac27SPaolo Bonzini    host_arch=mips
513 971fac27SPaolo Bonzini    linux_arch=mips
514 971fac27SPaolo Bonzini    ;;
515 971fac27SPaolo Bonzini
516 971fac27SPaolo Bonzini  ppc)
517 971fac27SPaolo Bonzini    host_arch=ppc
518 971fac27SPaolo Bonzini    linux_arch=powerpc
519 971fac27SPaolo Bonzini    CPU_CFLAGS="-m32"
520 971fac27SPaolo Bonzini    ;;
521 971fac27SPaolo Bonzini  ppc64)
522 971fac27SPaolo Bonzini    host_arch=ppc64
523 971fac27SPaolo Bonzini    linux_arch=powerpc
524 971fac27SPaolo Bonzini    CPU_CFLAGS="-m64 -mbig-endian"
525 971fac27SPaolo Bonzini    ;;
526 971fac27SPaolo Bonzini  ppc64le)
527 971fac27SPaolo Bonzini    cpu=ppc64
528 971fac27SPaolo Bonzini    host_arch=ppc64
529 971fac27SPaolo Bonzini    linux_arch=powerpc
530 971fac27SPaolo Bonzini    CPU_CFLAGS="-m64 -mlittle-endian"
531 971fac27SPaolo Bonzini    ;;
532 971fac27SPaolo Bonzini
533 971fac27SPaolo Bonzini  riscv32 | riscv64)
534 971fac27SPaolo Bonzini    host_arch=riscv
535 971fac27SPaolo Bonzini    linux_arch=riscv
536 971fac27SPaolo Bonzini    ;;
537 971fac27SPaolo Bonzini
538 971fac27SPaolo Bonzini  s390)
539 971fac27SPaolo Bonzini    linux_arch=s390
540 971fac27SPaolo Bonzini    CPU_CFLAGS="-m31"
541 971fac27SPaolo Bonzini    ;;
542 971fac27SPaolo Bonzini  s390x)
543 971fac27SPaolo Bonzini    host_arch=s390x
544 971fac27SPaolo Bonzini    linux_arch=s390
545 971fac27SPaolo Bonzini    CPU_CFLAGS="-m64"
546 971fac27SPaolo Bonzini    ;;
547 971fac27SPaolo Bonzini
548 971fac27SPaolo Bonzini  sparc|sun4[cdmuv])
549 971fac27SPaolo Bonzini    cpu=sparc
550 971fac27SPaolo Bonzini    CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
551 971fac27SPaolo Bonzini    ;;
552 971fac27SPaolo Bonzini  sparc64)
553 971fac27SPaolo Bonzini    host_arch=sparc64
554 971fac27SPaolo Bonzini    CPU_CFLAGS="-m64 -mcpu=ultrasparc"
555 971fac27SPaolo Bonzini    ;;
556 971fac27SPaolo Bonzini
557 e4da0e39SPaolo Bonzini  x32)
558 4da270beSPaolo Bonzini    cpu="x86_64"
559 971fac27SPaolo Bonzini    host_arch=x86_64
560 971fac27SPaolo Bonzini    linux_arch=x86
561 971fac27SPaolo Bonzini    CPU_CFLAGS="-mx32"
562 971fac27SPaolo Bonzini    ;;
563 aaa5fa14Saurel32  x86_64|amd64)
564 aaa5fa14Saurel32    cpu="x86_64"
565 971fac27SPaolo Bonzini    host_arch=x86_64
566 971fac27SPaolo Bonzini    linux_arch=x86
567 e4da0e39SPaolo Bonzini    # ??? Only extremely old AMD cpus do not have cmpxchg16b.
568 e4da0e39SPaolo Bonzini    # If we truly care, we should simply detect this case at
569 e4da0e39SPaolo Bonzini    # runtime and generate the fallback to serial emulation.
570 971fac27SPaolo Bonzini    CPU_CFLAGS="-m64 -mcx16"
571 971fac27SPaolo Bonzini    ;;
572 7d13299dSbellardesac
573 e2d52ad3SJuan Quintela
574 971fac27SPaolo Bonziniif test -n "$host_arch" && {
575 971fac27SPaolo Bonzini    ! test -d "$source_path/linux-user/include/host/$host_arch" ||
576 971fac27SPaolo Bonzini    ! test -d "$source_path/common-user/host/$host_arch"; }; then
577 971fac27SPaolo Bonzini    error_exit "linux-user/include/host/$host_arch does not exist." \
578 971fac27SPaolo Bonzini       "This is a bug in the configure script, please report it."
579 971fac27SPaolo Bonzinifi
580 971fac27SPaolo Bonziniif test -n "$linux_arch" && ! test -d "$source_path/linux-headers/asm-$linux_arch"; then
581 971fac27SPaolo Bonzini    error_exit "linux-headers/asm-$linux_arch does not exist." \
582 971fac27SPaolo Bonzini       "This is a bug in the configure script, please report it."
583 971fac27SPaolo Bonzinifi
584 971fac27SPaolo Bonzini
585 fee6d412SJohn Snowcheck_py_version() {
586 5591b745SPaolo Bonzini    # We require python >= 3.7.
587 fee6d412SJohn Snow    # NB: a True python conditional creates a non-zero return code (Failure)
588 5591b745SPaolo Bonzini    "$1" -c 'import sys; sys.exit(sys.version_info < (3,7))'
589 fee6d412SJohn Snow}
590 fee6d412SJohn Snow
591 fee6d412SJohn Snowfirst_python=
592 fee6d412SJohn Snowif test -z "${PYTHON}"; then
593 fee6d412SJohn Snow    # A bare 'python' is traditionally python 2.x, but some distros
594 fee6d412SJohn Snow    # have it as python 3.x, so check in both places.
595 5591b745SPaolo Bonzini    for binary in python3 python python3.11 python3.10 python3.9 python3.8 python3.7; do
596 fee6d412SJohn Snow        if has "$binary"; then
597 95c5f2deSPaolo Bonzini            python=$(command -v "$binary")
598 fee6d412SJohn Snow            if check_py_version "$python"; then
599 fee6d412SJohn Snow                # This one is good.
600 fee6d412SJohn Snow                first_python=
601 faf44142SDaniel P. Berrangé                break
602 fee6d412SJohn Snow            else
603 fee6d412SJohn Snow                first_python=$python
604 fee6d412SJohn Snow            fi
605 faf44142SDaniel P. Berrangé        fi
606 faf44142SDaniel P. Berrangé    done
607 fee6d412SJohn Snowelse
608 fee6d412SJohn Snow    # Same as above, but only check the environment variable.
609 fee6d412SJohn Snow    has "${PYTHON}" || error_exit "The PYTHON environment variable does not point to an executable"
610 fee6d412SJohn Snow    python=$(command -v "$PYTHON")
611 fee6d412SJohn Snow    if check_py_version "$python"; then
612 fee6d412SJohn Snow        # This one is good.
613 fee6d412SJohn Snow        first_python=
614 fee6d412SJohn Snow    else
615 fee6d412SJohn Snow        first_python=$first_python
616 fee6d412SJohn Snow    fi
617 fee6d412SJohn Snowfi
618 903458c8SMarkus Armbruster
619 39d87c8cSAlex Bennée# Check for ancillary tools used in testing
620 39d87c8cSAlex Bennéegenisoimage=
621 3df437c7SAlex Bennéefor binary in genisoimage mkisofs
622 39d87c8cSAlex Bennéedo
623 39d87c8cSAlex Bennée    if has $binary
624 39d87c8cSAlex Bennée    then
625 39d87c8cSAlex Bennée        genisoimage=$(command -v "$binary")
626 39d87c8cSAlex Bennée        break
627 39d87c8cSAlex Bennée    fi
628 39d87c8cSAlex Bennéedone
629 39d87c8cSAlex Bennée
630 3457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
631 3457a3f8SJuan Quintela  EXESUF=".exe"
632 d17f305aSPaolo Bonzini  prefix="/qemu"
633 c09c1ce7SPaolo Bonzini  bindir=""
634 77433a5fSMarc-André Lureau  qemu_suffix=""
635 3457a3f8SJuan Quintelafi
636 3457a3f8SJuan Quintela
637 8154f5e6SAkihiko Odakimeson_option_build_array() {
638 8154f5e6SAkihiko Odaki  printf '['
639 c5cfdabaSPeter Maydell  (if test "$targetos" = windows; then
640 8154f5e6SAkihiko Odaki    IFS=\;
641 8154f5e6SAkihiko Odaki  else
642 8154f5e6SAkihiko Odaki    IFS=:
643 8154f5e6SAkihiko Odaki  fi
644 8154f5e6SAkihiko Odaki  for e in $1; do
645 65842b03SPeter Maydell    printf '"""'
646 65842b03SPeter Maydell    # backslash escape any '\' and '"' characters
647 65842b03SPeter Maydell    printf "%s" "$e" | sed -e 's/\([\"]\)/\\\1/g'
648 65842b03SPeter Maydell    printf '""",'
649 8154f5e6SAkihiko Odaki  done)
650 8154f5e6SAkihiko Odaki  printf ']\n'
651 8154f5e6SAkihiko Odaki}
652 8154f5e6SAkihiko Odaki
653 64708615SPeter Maydell. "$source_path/scripts/meson-buildoptions.sh"
654 61d63097SPaolo Bonzini
655 61d63097SPaolo Bonzinimeson_options=
656 c54b59eeSPaolo Bonzinimeson_option_add() {
657 c54b59eeSPaolo Bonzini  meson_options="$meson_options $(quote_sh "$1")"
658 c54b59eeSPaolo Bonzini}
659 61d63097SPaolo Bonzinimeson_option_parse() {
660 61d63097SPaolo Bonzini  meson_options="$meson_options $(_meson_option_parse "$@")"
661 61d63097SPaolo Bonzini  if test $? -eq 1; then
662 61d63097SPaolo Bonzini    echo "ERROR: unknown option $1"
663 61d63097SPaolo Bonzini    echo "Try '$0 --help' for more information"
664 61d63097SPaolo Bonzini    exit 1
665 61d63097SPaolo Bonzini  fi
666 61d63097SPaolo Bonzini}
667 61d63097SPaolo Bonzini
668 7d13299dSbellardfor opt do
669 89138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
670 7d13299dSbellard  case "$opt" in
671 2efc3265Sbellard  --help|-h) show_help=yes
672 2efc3265Sbellard  ;;
673 64708615SPeter Maydell  --version|-V) exec cat "$source_path/VERSION"
674 99123e13SMike Frysinger  ;;
675 b1a550a0Spbrook  --prefix=*) prefix="$optarg"
676 7d13299dSbellard  ;;
677 ac0df51dSaliguori  --cross-prefix=*)
678 7d13299dSbellard  ;;
679 ac0df51dSaliguori  --cc=*)
680 7d13299dSbellard  ;;
681 b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
682 83469015Sbellard  ;;
683 83f73fceSTomoki Sekiyama  --cxx=*)
684 83f73fceSTomoki Sekiyama  ;;
685 c0c34c91SPeter Maydell  --objcc=*)
686 3c4a4d0dSPeter Maydell  ;;
687 b17bbf83SPaolo Bonzini  --make=*)
688 7d13299dSbellard  ;;
689 b6daf4d3SPaolo Bonzini  --install=*)
690 6a882643Spbrook  ;;
691 81e2b198SJohn Snow  --python=*) python="$optarg"
692 c886edfbSBlue Swirl  ;;
693 a5665051SPaolo Bonzini  --skip-meson) skip_meson=yes
694 a5665051SPaolo Bonzini  ;;
695 48328880SPaolo Bonzini  --ninja=*) ninja="$optarg"
696 48328880SPaolo Bonzini  ;;
697 e2d8830eSBrad  --smbd=*) smbd="$optarg"
698 e2d8830eSBrad  ;;
699 e2a2ed06SJuan Quintela  --extra-cflags=*)
700 7d13299dSbellard  ;;
701 11cde1c8SBruno Dominguez  --extra-cxxflags=*)
702 11cde1c8SBruno Dominguez  ;;
703 e910c7d9SPhilippe Mathieu-Daudé  --extra-objcflags=*)
704 e910c7d9SPhilippe Mathieu-Daudé  ;;
705 e2a2ed06SJuan Quintela  --extra-ldflags=*)
706 7d13299dSbellard  ;;
707 d75402b5SAlex Bennée  --cross-cc-*)
708 d75402b5SAlex Bennée  ;;
709 5adb43beSPaolo Bonzini  --cross-prefix-*)
710 5adb43beSPaolo Bonzini  ;;
711 6b0cedcdSJohn Snow  --enable-docs) docs=enabled
712 6b0cedcdSJohn Snow  ;;
713 6b0cedcdSJohn Snow  --disable-docs) docs=disabled
714 6b0cedcdSJohn Snow  ;;
715 2ff6b91eSJuan Quintela  --cpu=*)
716 7d13299dSbellard  ;;
717 b1a550a0Spbrook  --target-list=*) target_list="$optarg"
718 447e133fSAlex Bennée                   if test "$target_list_exclude"; then
719 447e133fSAlex Bennée                       error_exit "Can't mix --target-list with --target-list-exclude"
720 447e133fSAlex Bennée                   fi
721 447e133fSAlex Bennée  ;;
722 447e133fSAlex Bennée  --target-list-exclude=*) target_list_exclude="$optarg"
723 447e133fSAlex Bennée                   if test "$target_list"; then
724 447e133fSAlex Bennée                       error_exit "Can't mix --target-list-exclude with --target-list"
725 447e133fSAlex Bennée                   fi
726 de83cd02Sbellard  ;;
727 c54b59eeSPaolo Bonzini  --with-default-devices) meson_option_add -Ddefault_devices=true
728 f3494749SPaolo Bonzini  ;;
729 c54b59eeSPaolo Bonzini  --without-default-devices) meson_option_add -Ddefault_devices=false
730 f3494749SPaolo Bonzini  ;;
731 d1d5e9eeSAlex Bennée  --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
732 d1d5e9eeSAlex Bennée  ;;
733 d1d5e9eeSAlex Bennée  --with-devices-*) device_arch=${opt#--with-devices-};
734 d1d5e9eeSAlex Bennée                    device_arch=${device_arch%%=*}
735 d1d5e9eeSAlex Bennée                    cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
736 d1d5e9eeSAlex Bennée                    if test -f "$cf"; then
737 d1d5e9eeSAlex Bennée                        device_archs="$device_archs $device_arch"
738 d1d5e9eeSAlex Bennée                        eval "devices_${device_arch}=\$optarg"
739 d1d5e9eeSAlex Bennée                    else
740 d1d5e9eeSAlex Bennée                        error_exit "File $cf does not exist"
741 d1d5e9eeSAlex Bennée                    fi
742 d1d5e9eeSAlex Bennée  ;;
743 c87ea116SAlex Bennée  --without-default-features) # processed above
744 c87ea116SAlex Bennée  ;;
745 877c5567SPaolo Bonzini  --static) static="yes"
746 43ce4dfeSbellard  ;;
747 0b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
748 0b24e75fSPaolo Bonzini  ;;
749 77433a5fSMarc-André Lureau  --with-suffix=*) qemu_suffix="$optarg"
750 023d3d67SEduardo Habkost  ;;
751 181ce1d0SOlaf Hering  --host=*|--build=*|\
752 181ce1d0SOlaf Hering  --disable-dependency-tracking|\
753 785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
754 fe0038beSPaolo Bonzini  --oldincludedir=*|--datarootdir=*|--infodir=*|\
755 023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
756 023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
757 023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
758 023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
759 023ddd74SMax Filippov    # lots of directory switches by default.
760 023ddd74SMax Filippov  ;;
761 f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
762 f8393946Saurel32  ;;
763 f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
764 f8393946Saurel32  ;;
765 f3d08ee6SPaul Brook  --enable-debug)
766 f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
767 f3d08ee6SPaul Brook      debug_tcg="yes"
768 58a2e3f5SStefan Hajnoczi      meson_option_parse --enable-debug-graph-lock ""
769 c55cf6abSPaolo Bonzini      meson_option_parse --enable-debug-mutex ""
770 c54b59eeSPaolo Bonzini      meson_option_add -Doptimization=0
771 0aebab04SLingfeng Yang  ;;
772 1badb709SPaolo Bonzini  --disable-tcg) tcg="disabled"
773 d1a14257SAlex Bennée                 plugins="no"
774 b3f6ea7eSPaolo Bonzini  ;;
775 1badb709SPaolo Bonzini  --enable-tcg) tcg="enabled"
776 b3f6ea7eSPaolo Bonzini  ;;
777 cad25d69Spbrook  --disable-system) softmmu="no"
778 0a8e90f4Spbrook  ;;
779 cad25d69Spbrook  --enable-system) softmmu="yes"
780 0a8e90f4Spbrook  ;;
781 0953a80fSZachary Amsden  --disable-user)
782 0953a80fSZachary Amsden      linux_user="no" ;
783 0953a80fSZachary Amsden      bsd_user="no" ;
784 0953a80fSZachary Amsden  ;;
785 0953a80fSZachary Amsden  --enable-user) ;;
786 831b7825Sths  --disable-linux-user) linux_user="no"
787 0a8e90f4Spbrook  ;;
788 831b7825Sths  --enable-linux-user) linux_user="yes"
789 831b7825Sths  ;;
790 84778508Sblueswir1  --disable-bsd-user) bsd_user="no"
791 84778508Sblueswir1  ;;
792 84778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
793 84778508Sblueswir1  ;;
794 40d6444eSAvi Kivity  --enable-pie) pie="yes"
795 34005a00SKirill A. Shutemov  ;;
796 40d6444eSAvi Kivity  --disable-pie) pie="no"
797 34005a00SKirill A. Shutemov  ;;
798 85aa5189Sbellard  --enable-werror) werror="yes"
799 85aa5189Sbellard  ;;
800 85aa5189Sbellard  --disable-werror) werror="no"
801 85aa5189Sbellard  ;;
802 9e62ba48SDaniele Buono  --enable-cfi)
803 9e62ba48SDaniele Buono      cfi="true";
804 c54b59eeSPaolo Bonzini      meson_option_add -Db_lto=true
805 9e62ba48SDaniele Buono  ;;
806 9e62ba48SDaniele Buono  --disable-cfi) cfi="false"
807 9e62ba48SDaniele Buono  ;;
808 6f3ae23bSPaolo Bonzini  --disable-download) download="disabled"; git_submodules_action=validate;
809 f62bbee5SDaniel P. Berrange  ;;
810 6f3ae23bSPaolo Bonzini  --enable-download) download="enabled"; git_submodules_action=update;
811 0c5f3dcbSJohn Snow  ;;
812 9b8e4298SAlex Bennée  --enable-plugins) if test "$mingw32" = "yes"; then
813 9b8e4298SAlex Bennée                        error_exit "TCG plugins not currently supported on Windows platforms"
814 9b8e4298SAlex Bennée                    else
815 9b8e4298SAlex Bennée                        plugins="yes"
816 9b8e4298SAlex Bennée                    fi
817 40e8c6f4SAlex Bennée  ;;
818 40e8c6f4SAlex Bennée  --disable-plugins) plugins="no"
819 40e8c6f4SAlex Bennée  ;;
820 afc3a8f9SAlex Bennée  --enable-containers) use_containers="yes"
821 afc3a8f9SAlex Bennée  ;;
822 afc3a8f9SAlex Bennée  --disable-containers) use_containers="no"
823 afc3a8f9SAlex Bennée  ;;
824 f48e590aSAlex Bennée  --gdb=*) gdb_bin="$optarg"
825 f48e590aSAlex Bennée  ;;
826 3b4da132SPaolo Bonzini  # everything else has the same name in configure and meson
827 4fda6011SPaolo Bonzini  --*) meson_option_parse "$opt" "$optarg"
828 7f1559c6Sbalrog  ;;
829 ff136d2aSDaniel P. Berrangé  # Pass through -Dxxxx options to meson
830 ff136d2aSDaniel P. Berrangé  -D*) meson_options="$meson_options $opt"
831 ff136d2aSDaniel P. Berrangé  ;;
832 7d13299dSbellard  esac
833 7d13299dSbellarddone
834 7d13299dSbellard
835 6f3ae23bSPaolo Bonziniif ! test -e "$source_path/.git"
836 6f3ae23bSPaolo Bonzinithen
837 8edddaa2SPaolo Bonzini    git_submodules_action="validate"
838 6f3ae23bSPaolo Bonzinifi
839 6f3ae23bSPaolo Bonzini
840 d1a14257SAlex Bennée# test for any invalid configuration combinations
841 d1a14257SAlex Bennéeif test "$plugins" = "yes" -a "$tcg" = "disabled"; then
842 d1a14257SAlex Bennée    error_exit "Can't enable plugins on non-TCG builds"
843 d1a14257SAlex Bennéefi
844 d1a14257SAlex Bennée
845 2019cabfSPaolo Bonziniif ! test -f "$source_path/subprojects/keycodemapdb/README" \
846 c06b1571SMichal Privoznik    && test "$download" = disabled
847 2019cabfSPaolo Bonzinithen
848 2019cabfSPaolo Bonzini    echo
849 2019cabfSPaolo Bonzini    echo "ERROR: missing subprojects"
850 2019cabfSPaolo Bonzini    echo
851 2019cabfSPaolo Bonzini    if test -e "$source_path/.git"; then
852 2019cabfSPaolo Bonzini        echo "--disable-download specified but subprojects were not"
853 2019cabfSPaolo Bonzini        echo 'checked out.  Please invoke "meson subprojects download"'
854 2019cabfSPaolo Bonzini        echo "before configuring QEMU, or remove --disable-download"
855 2019cabfSPaolo Bonzini        echo "from the command line."
856 2019cabfSPaolo Bonzini    else
857 2019cabfSPaolo Bonzini        echo "This is not a GIT checkout but subproject content appears to"
858 2019cabfSPaolo Bonzini        echo "be missing. Do not use 'git archive' or GitHub download links"
859 2019cabfSPaolo Bonzini        echo "to acquire QEMU source archives. Non-GIT builds are only"
860 2019cabfSPaolo Bonzini        echo "supported with source archives linked from:"
861 2019cabfSPaolo Bonzini        echo
862 2019cabfSPaolo Bonzini        echo "  https://www.qemu.org/download/#source"
863 2019cabfSPaolo Bonzini        echo
864 2019cabfSPaolo Bonzini        echo "Developers working with GIT can use scripts/archive-source.sh"
865 2019cabfSPaolo Bonzini        echo "if they need to create valid source archives."
866 2019cabfSPaolo Bonzini    fi
867 2019cabfSPaolo Bonzini    echo
868 2019cabfSPaolo Bonzini    exit 1
869 2019cabfSPaolo Bonzinifi
870 2019cabfSPaolo Bonzini
871 60e0df25SPeter Maydelldefault_target_list=""
872 6e92f823SPeter Maydellmak_wilds=""
873 6e92f823SPeter Maydell
874 b915a2f1SPaolo Bonziniif [ "$linux_user" != no ]; then
875 971fac27SPaolo Bonzini    if [ "$targetos" = linux ] && [ -n "$host_arch" ]; then
876 b915a2f1SPaolo Bonzini        linux_user=yes
877 b915a2f1SPaolo Bonzini    elif [ "$linux_user" = yes ]; then
878 b915a2f1SPaolo Bonzini        error_exit "linux-user not supported on this architecture"
879 b915a2f1SPaolo Bonzini    fi
880 b915a2f1SPaolo Bonzinifi
881 b915a2f1SPaolo Bonziniif [ "$bsd_user" != no ]; then
882 b915a2f1SPaolo Bonzini    if [ "$bsd_user" = "" ]; then
883 b915a2f1SPaolo Bonzini        test $targetos = freebsd && bsd_user=yes
884 b915a2f1SPaolo Bonzini    fi
885 64708615SPeter Maydell    if [ "$bsd_user" = yes ] && ! [ -d "$source_path/bsd-user/$targetos" ]; then
886 b915a2f1SPaolo Bonzini        error_exit "bsd-user not supported on this host OS"
887 b915a2f1SPaolo Bonzini    fi
888 b915a2f1SPaolo Bonzinifi
889 60e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
890 812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
891 60e0df25SPeter Maydellfi
892 60e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
893 812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
894 60e0df25SPeter Maydellfi
895 60e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
896 812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
897 60e0df25SPeter Maydellfi
898 60e0df25SPeter Maydell
899 447e133fSAlex Bennéefor config in $mak_wilds; do
900 447e133fSAlex Bennée    target="$(basename "$config" .mak)"
901 98db9a06SAlex Bennée    if echo "$target_list_exclude" | grep -vq "$target"; then
902 447e133fSAlex Bennée        default_target_list="${default_target_list} $target"
903 447e133fSAlex Bennée    fi
904 447e133fSAlex Bennéedone
905 6e92f823SPeter Maydell
906 af5db58eSpbrookif test x"$show_help" = x"yes" ; then
907 af5db58eSpbrookcat << EOF
908 af5db58eSpbrook
909 af5db58eSpbrookUsage: configure [options]
910 af5db58eSpbrookOptions: [defaults in brackets after descriptions]
911 af5db58eSpbrook
912 08fb77edSStefan WeilStandard options:
913 08fb77edSStefan Weil  --help                   print this message
914 08fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
915 74154d7eSThomas Huth  --target-list=LIST       set target list (default: build all)
916 08fb77edSStefan Weil$(echo Available targets: $default_target_list | \
917 08fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
918 447e133fSAlex Bennée  --target-list-exclude=LIST exclude a set of targets from the default target-list
919 08fb77edSStefan Weil
920 08fb77edSStefan WeilAdvanced options (experts only):
921 ff136d2aSDaniel P. Berrangé  -Dmesonoptname=val       passthrough option to meson unmodified
922 3812c0c4SJoelle van Dyne  --cross-prefix=PREFIX    use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
923 08fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
924 08fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
925 08fb77edSStefan Weil                           build time
926 08fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
927 08fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
928 a2866660SPaolo Bonzini  --extra-cflags=CFLAGS    append extra C compiler flags CFLAGS
929 a2866660SPaolo Bonzini  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags CXXFLAGS
930 e910c7d9SPhilippe Mathieu-Daudé  --extra-objcflags=OBJCFLAGS append extra Objective C compiler flags OBJCFLAGS
931 08fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
932 d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
933 479ca4ccSMatheus Ferst  --cross-cc-cflags-ARCH=  use compiler flags when building ARCH guest tests
934 5adb43beSPaolo Bonzini  --cross-prefix-ARCH=PREFIX cross compiler prefix when building ARCH guest test cases
935 08fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
936 48328880SPaolo Bonzini  --ninja=NINJA            use specified ninja [$ninja]
937 08fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
938 08fb77edSStefan Weil  --static                 enable static build [$static]
939 08fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
940 ca8c0909SMarc-André Lureau  --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
941 c035c8d6SPaolo Bonzini  --without-default-features default all --enable-* options to "disabled"
942 c035c8d6SPaolo Bonzini  --without-default-devices  do not include any device that is not needed to
943 c035c8d6SPaolo Bonzini                           start the emulator (only use if you are including
944 d1d5e9eeSAlex Bennée                           desired devices in configs/devices/)
945 d1d5e9eeSAlex Bennée  --with-devices-ARCH=NAME override default configs/devices
946 08fb77edSStefan Weil  --enable-debug           enable common debug build options
947 08fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
948 c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
949 40e8c6f4SAlex Bennée  --enable-plugins
950 40e8c6f4SAlex Bennée                           enable plugins via shared library loading
951 afc3a8f9SAlex Bennée  --disable-containers     don't use containers for cross-building
952 f48e590aSAlex Bennée  --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
953 61d63097SPaolo BonziniEOF
954 61d63097SPaolo Bonzini  meson_options_help
955 61d63097SPaolo Bonzinicat << EOF
956 c23f23b9SMichael Tokarev  system          all system emulation targets
957 c23f23b9SMichael Tokarev  user            supported user emulation targets
958 c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
959 c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
960 c23f23b9SMichael Tokarev  pie             Position Independent Executables
961 c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
962 08fb77edSStefan Weil
963 08fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
964 af5db58eSpbrookEOF
965 2d2ad6d0SFam Zhengexit 0
966 af5db58eSpbrookfi
967 af5db58eSpbrook
968 9c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated
969 002d8c13SPeter Maydellrm -f ./*/config-devices.mak.d
970 9c790242SThomas Huth
971 faf44142SDaniel P. Berrangéif test -z "$python"
972 faf44142SDaniel P. Berrangéthen
973 fee6d412SJohn Snow    # If first_python is set, there was a binary somewhere even though
974 fee6d412SJohn Snow    # it was not suitable.  Use it for the error message.
975 fee6d412SJohn Snow    if test -n "$first_python"; then
976 5591b745SPaolo Bonzini        error_exit "Cannot use '$first_python', Python >= 3.7 is required." \
977 fee6d412SJohn Snow            "Use --python=/path/to/python to specify a supported Python."
978 fee6d412SJohn Snow    else
979 c53eeaf7SStefan Hajnoczi        error_exit "Python not found. Use --python=/path/to/python"
980 c53eeaf7SStefan Hajnoczi    fi
981 fee6d412SJohn Snowfi
982 fee6d412SJohn Snow
983 fee6d412SJohn Snowif ! check_py_version "$python"; then
984 5591b745SPaolo Bonzini  error_exit "Cannot use '$python', Python >= 3.7 is required." \
985 e46b82a0SJohn Snow             "Use --python=/path/to/python to specify a supported Python." \
986 e46b82a0SJohn Snow             "Maybe try:" \
987 e46b82a0SJohn Snow             "  openSUSE Leap 15.3+: zypper install python39" \
988 e46b82a0SJohn Snow             "  CentOS 8: dnf install python38"
989 c53eeaf7SStefan Hajnoczifi
990 c53eeaf7SStefan Hajnoczi
991 81e2b198SJohn Snow# Resolve PATH
992 81e2b198SJohn Snowpython="$(command -v "$python")"
993 81e2b198SJohn Snow
994 81e2b198SJohn Snow# Create a Python virtual environment using our configured python.
995 81e2b198SJohn Snow# The stdout of this script will be the location of a symlink that
996 81e2b198SJohn Snow# points to the configured Python.
997 81e2b198SJohn Snow# Entry point scripts for pip, meson, and sphinx are generated if those
998 81e2b198SJohn Snow# packages are present.
999 81e2b198SJohn Snow
1000 81e2b198SJohn Snow# Defaults assumed for now:
1001 81e2b198SJohn Snow# - venv is cleared if it exists already;
1002 81e2b198SJohn Snow# - venv is allowed to use system packages;
1003 0c5f3dcbSJohn Snow# - all setup can be performed offline;
1004 0c5f3dcbSJohn Snow# - missing packages may be fetched from PyPI,
1005 ac4ccac7SPaolo Bonzini#   unless --disable-download is passed.
1006 81e2b198SJohn Snow# - pip is not installed into the venv when possible,
1007 81e2b198SJohn Snow#   but ensurepip is called as a fallback when necessary.
1008 81e2b198SJohn Snow
1009 81e2b198SJohn Snowecho "python determined to be '$python'"
1010 81e2b198SJohn Snowecho "python version: $($python --version)"
1011 81e2b198SJohn Snow
1012 81e2b198SJohn Snowpython="$($python -B "${source_path}/python/scripts/mkvenv.py" create pyvenv)"
1013 81e2b198SJohn Snowif test "$?" -ne 0 ; then
1014 81e2b198SJohn Snow    error_exit "python venv creation failed"
1015 81e2b198SJohn Snowfi
1016 81e2b198SJohn Snow
1017 81e2b198SJohn Snow# Suppress writing compiled files
1018 81e2b198SJohn Snowpython="$python -B"
1019 6f6652ebSJohn Snowmkvenv="$python ${source_path}/python/scripts/mkvenv.py"
1020 462a6567SPaolo Bonzini
1021 edc21078SPaolo Bonzini# Finish preparing the virtual environment using vendored .whl files
1022 edc21078SPaolo Bonzini
1023 edc21078SPaolo Bonziniif $python -c 'import sys; sys.exit(sys.version_info >= (3,11))'; then
1024 edc21078SPaolo Bonzini    $mkvenv ensure --dir "${source_path}/python/wheels" \
1025 edc21078SPaolo Bonzini        'tomli>=1.2.0' || exit 1
1026 edc21078SPaolo Bonzinifi
1027 *c853c4d0SPaolo Bonzini$mkvenv ensuregroup --dir "${source_path}/python/wheels" \
1028 *c853c4d0SPaolo Bonzini     ${source_path}/pythondeps.toml meson || exit 1
1029 a5665051SPaolo Bonzini
1030 66e2c6cbSJohn Snow# At this point, we expect Meson to be installed and available.
1031 66e2c6cbSJohn Snow# We expect mkvenv or pip to have created pyvenv/bin/meson for us.
1032 66e2c6cbSJohn Snow# We ignore PATH completely here: we want to use the venv's Meson
1033 66e2c6cbSJohn Snow# *exclusively*.
1034 0a01d76fSMarc-André Lureau
1035 66e2c6cbSJohn Snowmeson="$(cd pyvenv/bin; pwd)/meson"
1036 0a01d76fSMarc-André Lureau
1037 6f6652ebSJohn Snow# Conditionally ensure Sphinx is installed.
1038 6f6652ebSJohn Snow
1039 0c5f3dcbSJohn Snowmkvenv_flags=""
1040 ac4ccac7SPaolo Bonziniif test "$download" = "enabled" -a "$docs" = "enabled" ; then
1041 0c5f3dcbSJohn Snow    mkvenv_flags="--online"
1042 0c5f3dcbSJohn Snowfi
1043 0c5f3dcbSJohn Snow
1044 6f6652ebSJohn Snowif test "$docs" != "disabled" ; then
1045 *c853c4d0SPaolo Bonzini    if ! $mkvenv ensuregroup \
1046 0c5f3dcbSJohn Snow         $mkvenv_flags \
1047 *c853c4d0SPaolo Bonzini         ${source_path}/pythondeps.toml docs;
1048 6f6652ebSJohn Snow    then
1049 6f6652ebSJohn Snow        if test "$docs" = "enabled" ; then
1050 6f6652ebSJohn Snow            exit 1
1051 6f6652ebSJohn Snow        fi
1052 6f6652ebSJohn Snow        echo "Sphinx not found/usable, disabling docs."
1053 6f6652ebSJohn Snow        docs=disabled
1054 6f6652ebSJohn Snow    else
1055 6f6652ebSJohn Snow        docs=enabled
1056 6f6652ebSJohn Snow    fi
1057 6f6652ebSJohn Snowfi
1058 6f6652ebSJohn Snow
1059 09e93326SPaolo Bonzini# Probe for ninja
1060 48328880SPaolo Bonzini
1061 48328880SPaolo Bonziniif test -z "$ninja"; then
1062 48328880SPaolo Bonzini    for c in ninja ninja-build samu; do
1063 48328880SPaolo Bonzini        if has $c; then
1064 48328880SPaolo Bonzini            ninja=$(command -v "$c")
1065 48328880SPaolo Bonzini            break
1066 48328880SPaolo Bonzini        fi
1067 48328880SPaolo Bonzini    done
1068 09e93326SPaolo Bonzini    if test -z "$ninja"; then
1069 09e93326SPaolo Bonzini      error_exit "Cannot find Ninja"
1070 09e93326SPaolo Bonzini    fi
1071 48328880SPaolo Bonzinifi
1072 a5665051SPaolo Bonzini
1073 9c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
1074 9c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
1075 9c83ffd8SPeter Maydellif test -z "$werror" ; then
1076 6f3ae23bSPaolo Bonzini    if test -e "$source_path/.git" && \
1077 e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1078 9c83ffd8SPeter Maydell        werror="yes"
1079 9c83ffd8SPeter Maydell    else
1080 9c83ffd8SPeter Maydell        werror="no"
1081 9c83ffd8SPeter Maydell    fi
1082 9c83ffd8SPeter Maydellfi
1083 9c83ffd8SPeter Maydell
1084 975ff037SPaolo Bonziniif test "$targetos" = "bogus"; then
1085 fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
1086 fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
1087 fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
1088 fb59dabdSPeter Maydell    # host OS we should stop now.
1089 951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1090 fb59dabdSPeter Maydellfi
1091 fb59dabdSPeter Maydell
1092 40d6444eSAvi Kivityif test "$static" = "yes" ; then
1093 5f2453acSAlex Bennée  if test "$plugins" = "yes"; then
1094 5f2453acSAlex Bennée    error_exit "static and plugins are mutually incompatible"
1095 ba4dd2aaSAlex Bennée  else
1096 ba4dd2aaSAlex Bennée    plugins="no"
1097 5f2453acSAlex Bennée  fi
1098 40d6444eSAvi Kivityfi
1099 37650689SPaolo Bonzinitest "$plugins" = "" && plugins=yes
1100 40d6444eSAvi Kivity
1101 40d6444eSAvi Kivitycat > $TMPC << EOF
1102 21d4a791SAvi Kivity
1103 21d4a791SAvi Kivity#ifdef __linux__
1104 21d4a791SAvi Kivity#  define THREAD __thread
1105 21d4a791SAvi Kivity#else
1106 21d4a791SAvi Kivity#  define THREAD
1107 21d4a791SAvi Kivity#endif
1108 21d4a791SAvi Kivitystatic THREAD int tls_var;
1109 21d4a791SAvi Kivityint main(void) { return tls_var; }
1110 40d6444eSAvi KivityEOF
1111 b2634124SRichard Henderson
1112 12781462SRichard Hendersonif test "$static" = "yes"; then
1113 eca7a8e6SRichard Henderson  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
1114 12781462SRichard Henderson    pie="yes"
1115 12781462SRichard Henderson  elif test "$pie" = "yes"; then
1116 12781462SRichard Henderson    error_exit "-static-pie not available due to missing toolchain support"
1117 12781462SRichard Henderson  else
1118 12781462SRichard Henderson    pie="no"
1119 12781462SRichard Henderson  fi
1120 a988b4c5SPaolo Bonzinielif test "$pie" != "no"; then
1121 a988b4c5SPaolo Bonzini  if compile_prog "-Werror -fPIE -DPIE" "-pie"; then
1122 40d6444eSAvi Kivity    pie="yes"
1123 2c674109SRichard Henderson  elif test "$pie" = "yes"; then
1124 76ad07a4SPeter Maydell    error_exit "PIE not available due to missing toolchain support"
1125 40d6444eSAvi Kivity  else
1126 40d6444eSAvi Kivity    echo "Disabling PIE due to missing toolchain support"
1127 40d6444eSAvi Kivity    pie="no"
1128 40d6444eSAvi Kivity  fi
1129 a988b4c5SPaolo Bonzinifi
1130 40d6444eSAvi Kivity
1131 09dada40SPaolo Bonzini##########################################
1132 09dada40SPaolo Bonzini
1133 afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
1134 fdb75aefSPaolo Bonzini    default_targets=yes
1135 d880a3baSPaolo Bonzini    for target in $default_target_list; do
1136 d880a3baSPaolo Bonzini        target_list="$target_list $target"
1137 d880a3baSPaolo Bonzini    done
1138 d880a3baSPaolo Bonzini    target_list="${target_list# }"
1139 121afa9eSAnthony Liguorielse
1140 fdb75aefSPaolo Bonzini    default_targets=no
1141 89138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1142 d880a3baSPaolo Bonzini    for target in $target_list; do
1143 25b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
1144 25b48338SPeter Maydell        # friendly error message than if we let it fall through.
1145 25b48338SPeter Maydell        case " $default_target_list " in
1146 25b48338SPeter Maydell            *" $target "*)
1147 25b48338SPeter Maydell                ;;
1148 25b48338SPeter Maydell            *)
1149 25b48338SPeter Maydell                error_exit "Unknown target name '$target'"
1150 25b48338SPeter Maydell                ;;
1151 25b48338SPeter Maydell        esac
1152 25b48338SPeter Maydell    done
1153 d880a3baSPaolo Bonzinifi
1154 25b48338SPeter Maydell
1155 f55fe278SPaolo Bonzini# see if system emulation was really requested
1156 f55fe278SPaolo Bonzinicase " $target_list " in
1157 f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
1158 f55fe278SPaolo Bonzini  ;;
1159 f55fe278SPaolo Bonzini  *) softmmu=no
1160 f55fe278SPaolo Bonzini  ;;
1161 f55fe278SPaolo Bonziniesac
1162 5327cf48Sbellard
1163 7630156dSPhilippe Mathieu-Daudéif test "$tcg" = "auto"; then
1164 7630156dSPhilippe Mathieu-Daudé  if test -z "$target_list"; then
1165 7630156dSPhilippe Mathieu-Daudé    tcg="disabled"
1166 7630156dSPhilippe Mathieu-Daudé  else
1167 7630156dSPhilippe Mathieu-Daudé    tcg="enabled"
1168 7630156dSPhilippe Mathieu-Daudé  fi
1169 7630156dSPhilippe Mathieu-Daudéfi
1170 7630156dSPhilippe Mathieu-Daudé
1171 33ab5f24SMichal Privoznik##########################################
1172 7d13299dSbellard# big/little endian test
1173 7d13299dSbellardcat > $TMPC << EOF
1174 33ab5f24SMichal Privoznik#if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
1175 33ab5f24SMichal Privoznik# error LITTLE
1176 33ab5f24SMichal Privoznik#endif
1177 33ab5f24SMichal Privoznikint main(void) { return 0; }
1178 7d13299dSbellardEOF
1179 7d13299dSbellard
1180 33ab5f24SMichal Privoznikif ! compile_prog ; then
1181 61cc919fSMike Frysinger  bigendian="no"
1182 7d13299dSbellardelse
1183 33ab5f24SMichal Privoznik  cat > $TMPC << EOF
1184 33ab5f24SMichal Privoznik#if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
1185 33ab5f24SMichal Privoznik# error BIG
1186 33ab5f24SMichal Privoznik#endif
1187 33ab5f24SMichal Privoznikint main(void) { return 0; }
1188 33ab5f24SMichal PrivoznikEOF
1189 33ab5f24SMichal Privoznik
1190 33ab5f24SMichal Privoznik  if ! compile_prog ; then
1191 33ab5f24SMichal Privoznik    bigendian="yes"
1192 33ab5f24SMichal Privoznik  else
1193 7d13299dSbellard    echo big/little test failed
1194 659eb157SThomas Huth    exit 1
1195 7d13299dSbellard  fi
1196 7d13299dSbellardfi
1197 7d13299dSbellard
1198 76a347e1SRichard Henderson########################################
1199 fd0e6053SJohn Snow# check if ccache is interfering with
1200 fd0e6053SJohn Snow# semantic analysis of macros
1201 fd0e6053SJohn Snow
1202 5e4dfd3dSJohn Snowunset CCACHE_CPP2
1203 fd0e6053SJohn Snowccache_cpp2=no
1204 fd0e6053SJohn Snowcat > $TMPC << EOF
1205 fd0e6053SJohn Snowstatic const int Z = 1;
1206 fd0e6053SJohn Snow#define fn() ({ Z; })
1207 fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
1208 fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
1209 fd0e6053SJohn Snow#define ID(X) (X)
1210 8a0afbb2SStefan Weilint main(void)
1211 fd0e6053SJohn Snow{
1212 fd0e6053SJohn Snow    int x = 0, y = 0;
1213 fd0e6053SJohn Snow    x = ID(x);
1214 fd0e6053SJohn Snow    x = fn();
1215 fd0e6053SJohn Snow    fn();
1216 fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
1217 fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
1218 fd0e6053SJohn Snow    return 0;
1219 fd0e6053SJohn Snow}
1220 fd0e6053SJohn SnowEOF
1221 fd0e6053SJohn Snow
1222 fd0e6053SJohn Snowif ! compile_object "-Werror"; then
1223 fd0e6053SJohn Snow    ccache_cpp2=yes
1224 fd0e6053SJohn Snowfi
1225 fd0e6053SJohn Snow
1226 adc28027SAlexander Bulekov##########################################
1227 cd362defSPaolo Bonzini# functions to probe cross compilers
1228 cd362defSPaolo Bonzini
1229 cd362defSPaolo Bonzinicontainer="no"
1230 60f999b7SAlex Bennéerunc=""
1231 47fdc8fbSStefan Weilif test $use_containers = "yes" && (has "docker" || has "podman"); then
1232 c4575b59SPaolo Bonzini    case $($python "$source_path"/tests/docker/docker.py probe) in
1233 c4575b59SPaolo Bonzini        *docker) container=docker ;;
1234 c4575b59SPaolo Bonzini        podman) container=podman ;;
1235 c4575b59SPaolo Bonzini        no) container=no ;;
1236 c4575b59SPaolo Bonzini    esac
1237 a3e28f81SPaolo Bonzini    if test "$container" != "no"; then
1238 a3e28f81SPaolo Bonzini        docker_py="$python $source_path/tests/docker/docker.py --engine $container"
1239 60f999b7SAlex Bennée        runc=$($python "$source_path"/tests/docker/docker.py probe)
1240 a3e28f81SPaolo Bonzini    fi
1241 cd362defSPaolo Bonzinifi
1242 cd362defSPaolo Bonzini
1243 cd362defSPaolo Bonzini# cross compilers defaults, can be overridden with --cross-cc-ARCH
1244 5adb43beSPaolo Bonzini: ${cross_prefix_aarch64="aarch64-linux-gnu-"}
1245 5adb43beSPaolo Bonzini: ${cross_prefix_aarch64_be="$cross_prefix_aarch64"}
1246 5adb43beSPaolo Bonzini: ${cross_prefix_alpha="alpha-linux-gnu-"}
1247 5adb43beSPaolo Bonzini: ${cross_prefix_arm="arm-linux-gnueabihf-"}
1248 5adb43beSPaolo Bonzini: ${cross_prefix_armeb="$cross_prefix_arm"}
1249 5adb43beSPaolo Bonzini: ${cross_prefix_hexagon="hexagon-unknown-linux-musl-"}
1250 34bb43b0SSong Gao: ${cross_prefix_loongarch64="loongarch64-unknown-linux-gnu-"}
1251 5adb43beSPaolo Bonzini: ${cross_prefix_hppa="hppa-linux-gnu-"}
1252 5adb43beSPaolo Bonzini: ${cross_prefix_i386="i686-linux-gnu-"}
1253 5adb43beSPaolo Bonzini: ${cross_prefix_m68k="m68k-linux-gnu-"}
1254 5adb43beSPaolo Bonzini: ${cross_prefix_microblaze="microblaze-linux-musl-"}
1255 5adb43beSPaolo Bonzini: ${cross_prefix_mips64el="mips64el-linux-gnuabi64-"}
1256 5adb43beSPaolo Bonzini: ${cross_prefix_mips64="mips64-linux-gnuabi64-"}
1257 5adb43beSPaolo Bonzini: ${cross_prefix_mipsel="mipsel-linux-gnu-"}
1258 5adb43beSPaolo Bonzini: ${cross_prefix_mips="mips-linux-gnu-"}
1259 5adb43beSPaolo Bonzini: ${cross_prefix_nios2="nios2-linux-gnu-"}
1260 5adb43beSPaolo Bonzini: ${cross_prefix_ppc="powerpc-linux-gnu-"}
1261 5adb43beSPaolo Bonzini: ${cross_prefix_ppc64="powerpc64-linux-gnu-"}
1262 5adb43beSPaolo Bonzini: ${cross_prefix_ppc64le="$cross_prefix_ppc64"}
1263 5adb43beSPaolo Bonzini: ${cross_prefix_riscv64="riscv64-linux-gnu-"}
1264 5adb43beSPaolo Bonzini: ${cross_prefix_s390x="s390x-linux-gnu-"}
1265 5adb43beSPaolo Bonzini: ${cross_prefix_sh4="sh4-linux-gnu-"}
1266 5adb43beSPaolo Bonzini: ${cross_prefix_sparc64="sparc64-linux-gnu-"}
1267 5adb43beSPaolo Bonzini: ${cross_prefix_sparc="$cross_prefix_sparc64"}
1268 a3d3de8eSPaolo Bonzini: ${cross_prefix_tricore="tricore-"}
1269 5adb43beSPaolo Bonzini: ${cross_prefix_x86_64="x86_64-linux-gnu-"}
1270 5adb43beSPaolo Bonzini
1271 cd362defSPaolo Bonzini: ${cross_cc_aarch64_be="$cross_cc_aarch64"}
1272 cd362defSPaolo Bonzini: ${cross_cc_cflags_aarch64_be="-mbig-endian"}
1273 46af66edSPaolo Bonzini: ${cross_cc_armeb="$cross_cc_arm"}
1274 cd362defSPaolo Bonzini: ${cross_cc_cflags_armeb="-mbig-endian"}
1275 cd362defSPaolo Bonzini: ${cross_cc_hexagon="hexagon-unknown-linux-musl-clang"}
1276 fc2622f6STaylor Simpson: ${cross_cc_cflags_hexagon="-mv73 -O2 -static"}
1277 cd362defSPaolo Bonzini: ${cross_cc_cflags_i386="-m32"}
1278 d44f2f96SPaolo Bonzini: ${cross_cc_cflags_ppc="-m32 -mbig-endian"}
1279 cd362defSPaolo Bonzini: ${cross_cc_cflags_ppc64="-m64 -mbig-endian"}
1280 cd362defSPaolo Bonzini: ${cross_cc_ppc64le="$cross_cc_ppc64"}
1281 cd362defSPaolo Bonzini: ${cross_cc_cflags_ppc64le="-m64 -mlittle-endian"}
1282 cd362defSPaolo Bonzini: ${cross_cc_cflags_sparc64="-m64 -mcpu=ultrasparc"}
1283 46af66edSPaolo Bonzini: ${cross_cc_sparc="$cross_cc_sparc64"}
1284 46af66edSPaolo Bonzini: ${cross_cc_cflags_sparc="-m32 -mcpu=supersparc"}
1285 cd362defSPaolo Bonzini: ${cross_cc_cflags_x86_64="-m64"}
1286 cd362defSPaolo Bonzini
1287 5adb43beSPaolo Bonzinicompute_target_variable() {
1288 92e288fcSPaolo Bonzini  eval "$2="
1289 5adb43beSPaolo Bonzini  if eval test -n "\"\${cross_prefix_$1}\""; then
1290 5adb43beSPaolo Bonzini    if eval has "\"\${cross_prefix_$1}\$3\""; then
1291 5adb43beSPaolo Bonzini      eval "$2=\"\${cross_prefix_$1}\$3\""
1292 5adb43beSPaolo Bonzini    fi
1293 5adb43beSPaolo Bonzini  fi
1294 5adb43beSPaolo Bonzini}
1295 cd362defSPaolo Bonzini
1296 35fd22b0SPaolo Bonzinihave_target() {
1297 35fd22b0SPaolo Bonzini  for i; do
1298 35fd22b0SPaolo Bonzini    case " $target_list " in
1299 35fd22b0SPaolo Bonzini      *" $i "*) return 0;;
1300 35fd22b0SPaolo Bonzini      *) ;;
1301 35fd22b0SPaolo Bonzini    esac
1302 35fd22b0SPaolo Bonzini  done
1303 35fd22b0SPaolo Bonzini  return 1
1304 35fd22b0SPaolo Bonzini}
1305 35fd22b0SPaolo Bonzini
1306 52f08deaSPaolo Bonzini# probe_target_compiler TARGET
1307 52f08deaSPaolo Bonzini#
1308 52f08deaSPaolo Bonzini# Look for a compiler for the given target, either native or cross.
1309 52f08deaSPaolo Bonzini# Set variables target_* if a compiler is found, and container_cross_*
1310 52f08deaSPaolo Bonzini# if a Docker-based cross-compiler image is known for the target.
1311 52f08deaSPaolo Bonzini# Set got_cross_cc to yes/no depending on whether a non-container-based
1312 52f08deaSPaolo Bonzini# compiler was found.
1313 52f08deaSPaolo Bonzini#
1314 52f08deaSPaolo Bonzini# If TARGET is a user-mode emulation target, also set build_static to
1315 52f08deaSPaolo Bonzini# "y" if static linking is possible.
1316 52f08deaSPaolo Bonzini#
1317 cd362defSPaolo Bonziniprobe_target_compiler() {
1318 cd362defSPaolo Bonzini  # reset all output variables
1319 92e288fcSPaolo Bonzini  got_cross_cc=no
1320 cd362defSPaolo Bonzini  container_image=
1321 cd362defSPaolo Bonzini  container_hosts=
1322 cd362defSPaolo Bonzini  container_cross_cc=
1323 87eb014cSPaolo Bonzini  container_cross_ar=
1324 cd362defSPaolo Bonzini  container_cross_as=
1325 cd362defSPaolo Bonzini  container_cross_ld=
1326 87eb014cSPaolo Bonzini  container_cross_nm=
1327 87eb014cSPaolo Bonzini  container_cross_objcopy=
1328 87eb014cSPaolo Bonzini  container_cross_ranlib=
1329 87eb014cSPaolo Bonzini  container_cross_strip=
1330 cd362defSPaolo Bonzini
1331 52f08deaSPaolo Bonzini  target_arch=${1%%-*}
1332 52f08deaSPaolo Bonzini  case $target_arch in
1333 cd362defSPaolo Bonzini    aarch64) container_hosts="x86_64 aarch64" ;;
1334 cd362defSPaolo Bonzini    alpha) container_hosts=x86_64 ;;
1335 cd362defSPaolo Bonzini    arm) container_hosts="x86_64 aarch64" ;;
1336 cd362defSPaolo Bonzini    cris) container_hosts=x86_64 ;;
1337 cd362defSPaolo Bonzini    hexagon) container_hosts=x86_64 ;;
1338 cd362defSPaolo Bonzini    hppa) container_hosts=x86_64 ;;
1339 cd362defSPaolo Bonzini    i386) container_hosts=x86_64 ;;
1340 b70ec50bSRichard Henderson    loongarch64) container_hosts=x86_64 ;;
1341 cd362defSPaolo Bonzini    m68k) container_hosts=x86_64 ;;
1342 cd362defSPaolo Bonzini    microblaze) container_hosts=x86_64 ;;
1343 cd362defSPaolo Bonzini    mips64el) container_hosts=x86_64 ;;
1344 cd362defSPaolo Bonzini    mips64) container_hosts=x86_64 ;;
1345 cd362defSPaolo Bonzini    mipsel) container_hosts=x86_64 ;;
1346 cd362defSPaolo Bonzini    mips) container_hosts=x86_64 ;;
1347 cd362defSPaolo Bonzini    nios2) container_hosts=x86_64 ;;
1348 cd362defSPaolo Bonzini    ppc) container_hosts=x86_64 ;;
1349 cd362defSPaolo Bonzini    ppc64|ppc64le) container_hosts=x86_64 ;;
1350 cd362defSPaolo Bonzini    riscv64) container_hosts=x86_64 ;;
1351 cd362defSPaolo Bonzini    s390x) container_hosts=x86_64 ;;
1352 cd362defSPaolo Bonzini    sh4) container_hosts=x86_64 ;;
1353 cd362defSPaolo Bonzini    sparc64) container_hosts=x86_64 ;;
1354 cd362defSPaolo Bonzini    tricore) container_hosts=x86_64 ;;
1355 cd362defSPaolo Bonzini    x86_64) container_hosts="aarch64 ppc64el x86_64" ;;
1356 cd362defSPaolo Bonzini    xtensa*) container_hosts=x86_64 ;;
1357 cd362defSPaolo Bonzini  esac
1358 cd362defSPaolo Bonzini
1359 cd362defSPaolo Bonzini  for host in $container_hosts; do
1360 cd362defSPaolo Bonzini    test "$container" != no || continue
1361 cd362defSPaolo Bonzini    test "$host" = "$cpu" || continue
1362 52f08deaSPaolo Bonzini    case $target_arch in
1363 cd362defSPaolo Bonzini      aarch64)
1364 cd362defSPaolo Bonzini        # We don't have any bigendian build tools so we only use this for AArch64
1365 cd362defSPaolo Bonzini        container_image=debian-arm64-cross
1366 5adb43beSPaolo Bonzini        container_cross_prefix=aarch64-linux-gnu-
1367 5adb43beSPaolo Bonzini        container_cross_cc=${container_cross_prefix}gcc-10
1368 cd362defSPaolo Bonzini        ;;
1369 cd362defSPaolo Bonzini      alpha)
1370 cd362defSPaolo Bonzini        container_image=debian-alpha-cross
1371 5adb43beSPaolo Bonzini        container_cross_prefix=alpha-linux-gnu-
1372 cd362defSPaolo Bonzini        ;;
1373 cd362defSPaolo Bonzini      arm)
1374 cd362defSPaolo Bonzini        # We don't have any bigendian build tools so we only use this for ARM
1375 cd362defSPaolo Bonzini        container_image=debian-armhf-cross
1376 5adb43beSPaolo Bonzini        container_cross_prefix=arm-linux-gnueabihf-
1377 cd362defSPaolo Bonzini        ;;
1378 cd362defSPaolo Bonzini      cris)
1379 cd362defSPaolo Bonzini        container_image=fedora-cris-cross
1380 5adb43beSPaolo Bonzini        container_cross_prefix=cris-linux-gnu-
1381 cd362defSPaolo Bonzini        ;;
1382 cd362defSPaolo Bonzini      hexagon)
1383 cd362defSPaolo Bonzini        container_image=debian-hexagon-cross
1384 5adb43beSPaolo Bonzini        container_cross_prefix=hexagon-unknown-linux-musl-
1385 5adb43beSPaolo Bonzini        container_cross_cc=${container_cross_prefix}clang
1386 cd362defSPaolo Bonzini        ;;
1387 cd362defSPaolo Bonzini      hppa)
1388 cd362defSPaolo Bonzini        container_image=debian-hppa-cross
1389 5adb43beSPaolo Bonzini        container_cross_prefix=hppa-linux-gnu-
1390 cd362defSPaolo Bonzini        ;;
1391 cd362defSPaolo Bonzini      i386)
1392 cd362defSPaolo Bonzini        container_image=fedora-i386-cross
1393 5adb43beSPaolo Bonzini        container_cross_prefix=
1394 cd362defSPaolo Bonzini        ;;
1395 b70ec50bSRichard Henderson      loongarch64)
1396 b70ec50bSRichard Henderson        container_image=debian-loongarch-cross
1397 b70ec50bSRichard Henderson        container_cross_prefix=loongarch64-unknown-linux-gnu-
1398 b70ec50bSRichard Henderson        ;;
1399 cd362defSPaolo Bonzini      m68k)
1400 cd362defSPaolo Bonzini        container_image=debian-m68k-cross
1401 5adb43beSPaolo Bonzini        container_cross_prefix=m68k-linux-gnu-
1402 cd362defSPaolo Bonzini        ;;
1403 cd362defSPaolo Bonzini      microblaze)
1404 cd362defSPaolo Bonzini        container_image=debian-microblaze-cross
1405 5adb43beSPaolo Bonzini        container_cross_prefix=microblaze-linux-musl-
1406 cd362defSPaolo Bonzini        ;;
1407 cd362defSPaolo Bonzini      mips64el)
1408 cd362defSPaolo Bonzini        container_image=debian-mips64el-cross
1409 5adb43beSPaolo Bonzini        container_cross_prefix=mips64el-linux-gnuabi64-
1410 cd362defSPaolo Bonzini        ;;
1411 cd362defSPaolo Bonzini      mips64)
1412 cd362defSPaolo Bonzini        container_image=debian-mips64-cross
1413 5adb43beSPaolo Bonzini        container_cross_prefix=mips64-linux-gnuabi64-
1414 cd362defSPaolo Bonzini        ;;
1415 cd362defSPaolo Bonzini      mipsel)
1416 cd362defSPaolo Bonzini        container_image=debian-mipsel-cross
1417 5adb43beSPaolo Bonzini        container_cross_prefix=mipsel-linux-gnu-
1418 cd362defSPaolo Bonzini        ;;
1419 cd362defSPaolo Bonzini      mips)
1420 cd362defSPaolo Bonzini        container_image=debian-mips-cross
1421 5adb43beSPaolo Bonzini        container_cross_prefix=mips-linux-gnu-
1422 cd362defSPaolo Bonzini        ;;
1423 cd362defSPaolo Bonzini      nios2)
1424 cd362defSPaolo Bonzini        container_image=debian-nios2-cross
1425 5adb43beSPaolo Bonzini        container_cross_prefix=nios2-linux-gnu-
1426 cd362defSPaolo Bonzini        ;;
1427 cd362defSPaolo Bonzini      ppc)
1428 cd362defSPaolo Bonzini        container_image=debian-powerpc-test-cross
1429 5adb43beSPaolo Bonzini        container_cross_prefix=powerpc-linux-gnu-
1430 5adb43beSPaolo Bonzini        container_cross_cc=${container_cross_prefix}gcc-10
1431 cd362defSPaolo Bonzini        ;;
1432 cd362defSPaolo Bonzini      ppc64|ppc64le)
1433 cd362defSPaolo Bonzini        container_image=debian-powerpc-test-cross
1434 705c881fSRichard Henderson        container_cross_prefix=powerpc${target_arch#ppc}-linux-gnu-
1435 5adb43beSPaolo Bonzini        container_cross_cc=${container_cross_prefix}gcc-10
1436 cd362defSPaolo Bonzini        ;;
1437 cd362defSPaolo Bonzini      riscv64)
1438 cd362defSPaolo Bonzini        container_image=debian-riscv64-test-cross
1439 5adb43beSPaolo Bonzini        container_cross_prefix=riscv64-linux-gnu-
1440 cd362defSPaolo Bonzini        ;;
1441 cd362defSPaolo Bonzini      s390x)
1442 cd362defSPaolo Bonzini        container_image=debian-s390x-cross
1443 5adb43beSPaolo Bonzini        container_cross_prefix=s390x-linux-gnu-
1444 cd362defSPaolo Bonzini        ;;
1445 cd362defSPaolo Bonzini      sh4)
1446 cd362defSPaolo Bonzini        container_image=debian-sh4-cross
1447 5adb43beSPaolo Bonzini        container_cross_prefix=sh4-linux-gnu-
1448 cd362defSPaolo Bonzini        ;;
1449 cd362defSPaolo Bonzini      sparc64)
1450 cd362defSPaolo Bonzini        container_image=debian-sparc64-cross
1451 5adb43beSPaolo Bonzini        container_cross_prefix=sparc64-linux-gnu-
1452 cd362defSPaolo Bonzini        ;;
1453 cd362defSPaolo Bonzini      tricore)
1454 cd362defSPaolo Bonzini        container_image=debian-tricore-cross
1455 5adb43beSPaolo Bonzini        container_cross_prefix=tricore-
1456 cd362defSPaolo Bonzini        ;;
1457 cd362defSPaolo Bonzini      x86_64)
1458 cd362defSPaolo Bonzini        container_image=debian-amd64-cross
1459 5adb43beSPaolo Bonzini        container_cross_prefix=x86_64-linux-gnu-
1460 cd362defSPaolo Bonzini        ;;
1461 cd362defSPaolo Bonzini      xtensa*)
1462 cd362defSPaolo Bonzini        container_hosts=x86_64
1463 cd362defSPaolo Bonzini        container_image=debian-xtensa-cross
1464 cd362defSPaolo Bonzini
1465 cd362defSPaolo Bonzini        # default to the dc232b cpu
1466 5adb43beSPaolo Bonzini        container_cross_prefix=/opt/2020.07/xtensa-dc232b-elf/bin/xtensa-dc232b-elf-
1467 cd362defSPaolo Bonzini        ;;
1468 cd362defSPaolo Bonzini    esac
1469 5adb43beSPaolo Bonzini    : ${container_cross_cc:=${container_cross_prefix}gcc}
1470 87eb014cSPaolo Bonzini    : ${container_cross_ar:=${container_cross_prefix}ar}
1471 5adb43beSPaolo Bonzini    : ${container_cross_as:=${container_cross_prefix}as}
1472 5adb43beSPaolo Bonzini    : ${container_cross_ld:=${container_cross_prefix}ld}
1473 87eb014cSPaolo Bonzini    : ${container_cross_nm:=${container_cross_prefix}nm}
1474 87eb014cSPaolo Bonzini    : ${container_cross_objcopy:=${container_cross_prefix}objcopy}
1475 87eb014cSPaolo Bonzini    : ${container_cross_ranlib:=${container_cross_prefix}ranlib}
1476 87eb014cSPaolo Bonzini    : ${container_cross_strip:=${container_cross_prefix}strip}
1477 cd362defSPaolo Bonzini  done
1478 cd362defSPaolo Bonzini
1479 92e288fcSPaolo Bonzini  try=cross
1480 92e288fcSPaolo Bonzini  case "$target_arch:$cpu" in
1481 92e288fcSPaolo Bonzini    aarch64_be:aarch64 | \
1482 92e288fcSPaolo Bonzini    armeb:arm | \
1483 92e288fcSPaolo Bonzini    i386:x86_64 | \
1484 92e288fcSPaolo Bonzini    mips*:mips64 | \
1485 92e288fcSPaolo Bonzini    ppc*:ppc64 | \
1486 92e288fcSPaolo Bonzini    sparc:sparc64 | \
1487 92e288fcSPaolo Bonzini    "$cpu:$cpu")
1488 92e288fcSPaolo Bonzini      try='native cross' ;;
1489 92e288fcSPaolo Bonzini  esac
1490 52f08deaSPaolo Bonzini  eval "target_cflags=\${cross_cc_cflags_$target_arch}"
1491 b3b5472dSPeter Maydell  for thistry in $try; do
1492 b3b5472dSPeter Maydell    case $thistry in
1493 92e288fcSPaolo Bonzini    native)
1494 92e288fcSPaolo Bonzini      target_cc=$cc
1495 92e288fcSPaolo Bonzini      target_ccas=$ccas
1496 92e288fcSPaolo Bonzini      target_ar=$ar
1497 92e288fcSPaolo Bonzini      target_as=$as
1498 92e288fcSPaolo Bonzini      target_ld=$ld
1499 92e288fcSPaolo Bonzini      target_nm=$nm
1500 92e288fcSPaolo Bonzini      target_objcopy=$objcopy
1501 92e288fcSPaolo Bonzini      target_ranlib=$ranlib
1502 92e288fcSPaolo Bonzini      target_strip=$strip
1503 92e288fcSPaolo Bonzini      ;;
1504 92e288fcSPaolo Bonzini    cross)
1505 92e288fcSPaolo Bonzini      target_cc=
1506 52f08deaSPaolo Bonzini      if eval test -n "\"\${cross_cc_$target_arch}\""; then
1507 52f08deaSPaolo Bonzini        if eval has "\"\${cross_cc_$target_arch}\""; then
1508 52f08deaSPaolo Bonzini          eval "target_cc=\"\${cross_cc_$target_arch}\""
1509 cd362defSPaolo Bonzini        fi
1510 5adb43beSPaolo Bonzini      else
1511 52f08deaSPaolo Bonzini        compute_target_variable $target_arch target_cc gcc
1512 cd362defSPaolo Bonzini      fi
1513 87eb014cSPaolo Bonzini      target_ccas=$target_cc
1514 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_ar ar
1515 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_as as
1516 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_ld ld
1517 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_nm nm
1518 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_objcopy objcopy
1519 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_ranlib ranlib
1520 52f08deaSPaolo Bonzini      compute_target_variable $target_arch target_strip strip
1521 640aabc8SPaolo Bonzini      ;;
1522 640aabc8SPaolo Bonzini    esac
1523 92e288fcSPaolo Bonzini
1524 2ad60f6fSPaolo Bonzini    if test -n "$target_cc"; then
1525 52f08deaSPaolo Bonzini      case $target_arch in
1526 2ad60f6fSPaolo Bonzini        i386|x86_64)
1527 2ad60f6fSPaolo Bonzini          if $target_cc --version | grep -qi "clang"; then
1528 92e288fcSPaolo Bonzini            continue
1529 2ad60f6fSPaolo Bonzini          fi
1530 2ad60f6fSPaolo Bonzini          ;;
1531 2ad60f6fSPaolo Bonzini      esac
1532 92e288fcSPaolo Bonzini    elif test -n "$target_as" && test -n "$target_ld"; then
1533 92e288fcSPaolo Bonzini      # Special handling for assembler only targets
1534 92e288fcSPaolo Bonzini      case $target in
1535 92e288fcSPaolo Bonzini        tricore-softmmu)
1536 92e288fcSPaolo Bonzini          build_static=
1537 92e288fcSPaolo Bonzini          got_cross_cc=yes
1538 92e288fcSPaolo Bonzini          break
1539 92e288fcSPaolo Bonzini          ;;
1540 92e288fcSPaolo Bonzini        *)
1541 92e288fcSPaolo Bonzini          continue
1542 92e288fcSPaolo Bonzini          ;;
1543 92e288fcSPaolo Bonzini      esac
1544 92e288fcSPaolo Bonzini    else
1545 92e288fcSPaolo Bonzini      continue
1546 92e288fcSPaolo Bonzini    fi
1547 92e288fcSPaolo Bonzini
1548 92e288fcSPaolo Bonzini    write_c_skeleton
1549 92e288fcSPaolo Bonzini    case $1 in
1550 92e288fcSPaolo Bonzini      *-softmmu)
1551 92e288fcSPaolo Bonzini        if do_compiler "$target_cc" $target_cflags -o $TMPO -c $TMPC &&
1552 92e288fcSPaolo Bonzini          do_compiler "$target_cc" $target_cflags -r -nostdlib -o "${TMPDIR1}/${TMPB}2.o" "$TMPO" -lgcc; then
1553 92e288fcSPaolo Bonzini          got_cross_cc=yes
1554 92e288fcSPaolo Bonzini          break
1555 92e288fcSPaolo Bonzini        fi
1556 92e288fcSPaolo Bonzini        ;;
1557 92e288fcSPaolo Bonzini      *)
1558 92e288fcSPaolo Bonzini        if do_compiler "$target_cc" $target_cflags -o $TMPE $TMPC -static ; then
1559 92e288fcSPaolo Bonzini          build_static=y
1560 92e288fcSPaolo Bonzini          got_cross_cc=yes
1561 92e288fcSPaolo Bonzini          break
1562 92e288fcSPaolo Bonzini        fi
1563 92e288fcSPaolo Bonzini        if do_compiler "$target_cc" $target_cflags -o $TMPE $TMPC ; then
1564 92e288fcSPaolo Bonzini          build_static=
1565 92e288fcSPaolo Bonzini          got_cross_cc=yes
1566 92e288fcSPaolo Bonzini          break
1567 92e288fcSPaolo Bonzini        fi
1568 92e288fcSPaolo Bonzini        ;;
1569 92e288fcSPaolo Bonzini    esac
1570 92e288fcSPaolo Bonzini  done
1571 92e288fcSPaolo Bonzini  if test $got_cross_cc != yes; then
1572 92e288fcSPaolo Bonzini    build_static=
1573 92e288fcSPaolo Bonzini    target_cc=
1574 92e288fcSPaolo Bonzini    target_ccas=
1575 92e288fcSPaolo Bonzini    target_ar=
1576 92e288fcSPaolo Bonzini    target_as=
1577 92e288fcSPaolo Bonzini    target_ld=
1578 92e288fcSPaolo Bonzini    target_nm=
1579 92e288fcSPaolo Bonzini    target_objcopy=
1580 92e288fcSPaolo Bonzini    target_ranlib=
1581 92e288fcSPaolo Bonzini    target_strip=
1582 2ad60f6fSPaolo Bonzini  fi
1583 fde10960SAlex Bennée  test -n "$target_cc"
1584 cd362defSPaolo Bonzini}
1585 cd362defSPaolo Bonzini
1586 cd362defSPaolo Bonziniwrite_target_makefile() {
1587 e81785abSPaolo Bonzini  echo "EXTRA_CFLAGS=$target_cflags"
1588 0825cae0SPaolo Bonzini  if test -z "$target_cc" && test -z "$target_as"; then
1589 0825cae0SPaolo Bonzini    test -z "$container_image" && error_exit "Internal error: could not find cross compiler for $1?"
1590 0825cae0SPaolo Bonzini    echo "$1: docker-image-$container_image" >> Makefile.prereqs
1591 0825cae0SPaolo Bonzini    if test -n "$container_cross_cc"; then
1592 0825cae0SPaolo Bonzini      echo "CC=$docker_py cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
1593 0825cae0SPaolo Bonzini      echo "CCAS=$docker_py cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
1594 0825cae0SPaolo Bonzini    fi
1595 0825cae0SPaolo Bonzini    echo "AR=$docker_py cc --cc $container_cross_ar -i qemu/$container_image -s $source_path --"
1596 0825cae0SPaolo Bonzini    echo "AS=$docker_py cc --cc $container_cross_as -i qemu/$container_image -s $source_path --"
1597 0825cae0SPaolo Bonzini    echo "LD=$docker_py cc --cc $container_cross_ld -i qemu/$container_image -s $source_path --"
1598 0825cae0SPaolo Bonzini    echo "NM=$docker_py cc --cc $container_cross_nm -i qemu/$container_image -s $source_path --"
1599 0825cae0SPaolo Bonzini    echo "OBJCOPY=$docker_py cc --cc $container_cross_objcopy -i qemu/$container_image -s $source_path --"
1600 0825cae0SPaolo Bonzini    echo "RANLIB=$docker_py cc --cc $container_cross_ranlib -i qemu/$container_image -s $source_path --"
1601 0825cae0SPaolo Bonzini    echo "STRIP=$docker_py cc --cc $container_cross_strip -i qemu/$container_image -s $source_path --"
1602 0825cae0SPaolo Bonzini  else
1603 cd362defSPaolo Bonzini    if test -n "$target_cc"; then
1604 cd362defSPaolo Bonzini      echo "CC=$target_cc"
1605 87eb014cSPaolo Bonzini      echo "CCAS=$target_ccas"
1606 87eb014cSPaolo Bonzini    fi
1607 87eb014cSPaolo Bonzini    if test -n "$target_ar"; then
1608 87eb014cSPaolo Bonzini      echo "AR=$target_ar"
1609 cd362defSPaolo Bonzini    fi
1610 cd362defSPaolo Bonzini    if test -n "$target_as"; then
1611 cd362defSPaolo Bonzini      echo "AS=$target_as"
1612 cd362defSPaolo Bonzini    fi
1613 cd362defSPaolo Bonzini    if test -n "$target_ld"; then
1614 cd362defSPaolo Bonzini      echo "LD=$target_ld"
1615 cd362defSPaolo Bonzini    fi
1616 87eb014cSPaolo Bonzini    if test -n "$target_nm"; then
1617 87eb014cSPaolo Bonzini      echo "NM=$target_nm"
1618 87eb014cSPaolo Bonzini    fi
1619 87eb014cSPaolo Bonzini    if test -n "$target_objcopy"; then
1620 87eb014cSPaolo Bonzini      echo "OBJCOPY=$target_objcopy"
1621 87eb014cSPaolo Bonzini    fi
1622 87eb014cSPaolo Bonzini    if test -n "$target_ranlib"; then
1623 87eb014cSPaolo Bonzini      echo "RANLIB=$target_ranlib"
1624 87eb014cSPaolo Bonzini    fi
1625 87eb014cSPaolo Bonzini    if test -n "$target_strip"; then
1626 87eb014cSPaolo Bonzini      echo "STRIP=$target_strip"
1627 87eb014cSPaolo Bonzini    fi
1628 cd362defSPaolo Bonzini  fi
1629 cd362defSPaolo Bonzini}
1630 cd362defSPaolo Bonzini
1631 33ab4787SPaolo Bonzini#######################################
1632 33ab4787SPaolo Bonzini# cross-compiled firmware targets
1633 33ab4787SPaolo Bonzini
1634 ad388845SPaolo Bonzini# Set up build tree symlinks that point back into the source tree
1635 ad388845SPaolo Bonzini# (these can be both files and directories).
1636 ad388845SPaolo Bonzini# Caution: avoid adding files or directories here using wildcards. This
1637 ad388845SPaolo Bonzini# will result in problems later if a new file matching the wildcard is
1638 ad388845SPaolo Bonzini# added to the source tree -- nothing will cause configure to be rerun
1639 ad388845SPaolo Bonzini# so the build tree will be missing the link back to the new file, and
1640 ad388845SPaolo Bonzini# tests might fail. Prefer to keep the relevant files in their own
1641 ad388845SPaolo Bonzini# directory and symlink the directory instead.
1642 ad388845SPaolo BonziniLINKS="Makefile"
1643 201aa17eSThomas HuthLINKS="$LINKS docs/config"
1644 ad388845SPaolo BonziniLINKS="$LINKS pc-bios/optionrom/Makefile"
1645 ad388845SPaolo BonziniLINKS="$LINKS pc-bios/s390-ccw/Makefile"
1646 d695918fSPaolo BonziniLINKS="$LINKS pc-bios/vof/Makefile"
1647 ad388845SPaolo BonziniLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
1648 ad388845SPaolo BonziniLINKS="$LINKS tests/avocado tests/data"
1649 ad388845SPaolo BonziniLINKS="$LINKS tests/qemu-iotests/check"
1650 ad388845SPaolo BonziniLINKS="$LINKS python"
1651 ad388845SPaolo BonziniLINKS="$LINKS contrib/plugins/Makefile "
1652 ad388845SPaolo Bonzinifor f in $LINKS ; do
1653 ad388845SPaolo Bonzini    if [ -e "$source_path/$f" ]; then
1654 ad388845SPaolo Bonzini        symlink "$source_path/$f" "$f"
1655 ad388845SPaolo Bonzini    fi
1656 ad388845SPaolo Bonzinidone
1657 ad388845SPaolo Bonzini
1658 b898bf28SPaolo Bonziniecho "# Automatically generated by configure - do not modify" > Makefile.prereqs
1659 b898bf28SPaolo Bonzini
1660 ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
1661 ca35f780SPaolo Bonziniroms=
1662 35fd22b0SPaolo Bonziniif have_target i386-softmmu x86_64-softmmu && \
1663 35fd22b0SPaolo Bonzini        test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
1664 35fd22b0SPaolo Bonzini        test "$targetos" != "haiku" && \
1665 61cbb356SPaolo Bonzini        probe_target_compiler i386-softmmu; then
1666 76ca98b0SPaolo Bonzini    roms="pc-bios/optionrom"
1667 33ab4787SPaolo Bonzini    config_mak=pc-bios/optionrom/config.mak
1668 33ab4787SPaolo Bonzini    echo "# Automatically generated by configure - do not modify" > $config_mak
1669 33ab4787SPaolo Bonzini    echo "TOPSRC_DIR=$source_path" >> $config_mak
1670 fde10960SAlex Bennée    write_target_makefile >> $config_mak
1671 33ab4787SPaolo Bonzinifi
1672 ca35f780SPaolo Bonzini
1673 35fd22b0SPaolo Bonziniif have_target ppc-softmmu ppc64-softmmu && \
1674 35fd22b0SPaolo Bonzini        probe_target_compiler ppc-softmmu; then
1675 76ca98b0SPaolo Bonzini    roms="$roms pc-bios/vof"
1676 d695918fSPaolo Bonzini    config_mak=pc-bios/vof/config.mak
1677 d695918fSPaolo Bonzini    echo "# Automatically generated by configure - do not modify" > $config_mak
1678 d695918fSPaolo Bonzini    echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
1679 fde10960SAlex Bennée    write_target_makefile >> $config_mak
1680 d695918fSPaolo Bonzinifi
1681 d695918fSPaolo Bonzini
1682 9ffed426SPaolo Bonzini# Only build s390-ccw bios if the compiler has -march=z900 or -march=z10
1683 9ffed426SPaolo Bonzini# (which is the lowest architecture level that Clang supports)
1684 b11f9bd9SPaolo Bonziniif have_target s390x-softmmu && probe_target_compiler s390x-softmmu && \
1685 b11f9bd9SPaolo Bonzini    GIT=git "$source_path/scripts/git-submodule.sh" "$git_submodules_action" roms/SLOF >> config.log 2>&1; then
1686 2e33c3f8SThomas Huth  write_c_skeleton
1687 9ffed426SPaolo Bonzini  do_compiler "$target_cc" $target_cc_cflags -march=z900 -o $TMPO -c $TMPC
1688 a5b2afd5SThomas Huth  has_z900=$?
1689 9ffed426SPaolo Bonzini  if [ $has_z900 = 0 ] || do_compiler "$target_cc" $target_cc_cflags -march=z10 -msoft-float -Werror -o $TMPO -c $TMPC; then
1690 a5b2afd5SThomas Huth    if [ $has_z900 != 0 ]; then
1691 a5b2afd5SThomas Huth      echo "WARNING: Your compiler does not support the z900!"
1692 a5b2afd5SThomas Huth      echo "         The s390-ccw bios will only work with guest CPUs >= z10."
1693 a5b2afd5SThomas Huth    fi
1694 76ca98b0SPaolo Bonzini    roms="$roms pc-bios/s390-ccw"
1695 9ffed426SPaolo Bonzini    config_mak=pc-bios/s390-ccw/config-host.mak
1696 9ffed426SPaolo Bonzini    echo "# Automatically generated by configure - do not modify" > $config_mak
1697 9ffed426SPaolo Bonzini    echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
1698 b11f9bd9SPaolo Bonzini    echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_mak
1699 fde10960SAlex Bennée    write_target_makefile >> $config_mak
1700 1ef6bfc2SPhilippe Mathieu-Daudé  fi
1701 9933c305SChristian Borntraegerfi
1702 9933c305SChristian Borntraeger
1703 9ffed426SPaolo Bonzini#######################################
1704 9ffed426SPaolo Bonzini# generate config-host.mak
1705 9ffed426SPaolo Bonzini
1706 98ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
1707 97a847bcSbellard
1708 98ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
1709 98ec69acSJuan Quintelaecho >> $config_host_mak
1710 98ec69acSJuan Quintela
1711 e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
1712 804edf29SJuan Quintela
1713 f8393946Saurel32if test "$debug_tcg" = "yes" ; then
1714 2358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
1715 f8393946Saurel32fi
1716 67b915a5Sbellardif test "$mingw32" = "yes" ; then
1717 98ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
1718 954ed68fSPaolo Bonzini  echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER-QEMU}" >> $config_host_mak
1719 954ed68fSPaolo Bonzini  echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO-Linux}" >> $config_host_mak
1720 954ed68fSPaolo Bonzini  echo "QEMU_GA_VERSION=${QEMU_GA_VERSION-$(cat "$source_path"/VERSION)}" >> $config_host_mak
1721 210fa556Spbrookelse
1722 35f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
1723 210fa556Spbrookfi
1724 128ab2ffSblueswir1
1725 dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
1726 dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
1727 dffcb71cSMark McLoughlinfi
1728 dffcb71cSMark McLoughlin
1729 83fb7adfSbellardif test "$darwin" = "yes" ; then
1730 98ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
1731 83fb7adfSbellardfi
1732 b29fe3edSmalc
1733 ec530c81Sbellardif test "$solaris" = "yes" ; then
1734 98ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
1735 ec530c81Sbellardfi
1736 98ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
1737 2b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
1738 277abf15SJan Vesely
1739 83fb7adfSbellard# XXX: suppress that
1740 7d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
1741 2358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
1742 7d3505c5Sbellardfi
1743 7d3505c5Sbellard
1744 40e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then
1745 40e8c6f4SAlex Bennée    echo "CONFIG_PLUGIN=y" >> $config_host_mak
1746 40e8c6f4SAlex Bennéefi
1747 40e8c6f4SAlex Bennée
1748 f48e590aSAlex Bennéeif test -n "$gdb_bin"; then
1749 b1863cccSAlex Bennée    gdb_version=$($gdb_bin --version | head -n 1)
1750 d6a66c81SAlex Bennée    if version_ge ${gdb_version##* } 9.1; then
1751 f48e590aSAlex Bennée        echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
1752 4b424c75SPaolo Bonzini        gdb_arches=$($python "$source_path/scripts/probe-gdb-support.py" $gdb_bin)
1753 48543dd7SAlex Bennée    else
1754 48543dd7SAlex Bennée        gdb_bin=""
1755 f48e590aSAlex Bennée    fi
1756 b1863cccSAlex Bennéefi
1757 f48e590aSAlex Bennée
1758 c4575b59SPaolo Bonziniif test "$container" != no; then
1759 c4575b59SPaolo Bonzini    echo "ENGINE=$container" >> $config_host_mak
1760 60f999b7SAlex Bennée    echo "RUNC=$runc" >> $config_host_mak
1761 c4575b59SPaolo Bonzinifi
1762 98ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
1763 c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
1764 39d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak
1765 a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak
1766 09e93326SPaolo Bonziniecho "NINJA=$ninja" >> $config_host_mak
1767 877c5567SPaolo Bonziniecho "PKG_CONFIG=${pkg_config}" >> $config_host_mak
1768 804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
1769 804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
1770 804edf29SJuan Quintela
1771 971fac27SPaolo Bonzini# use included Linux headers for KVM architectures
1772 971fac27SPaolo Bonziniif test "$linux" = "yes" && test -n "$linux_arch"; then
1773 08312a63SPeter Maydell  symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
1774 08312a63SPeter Maydellfi
1775 6efd7517SPeter Maydell
1776 97a847bcSbellardfor target in $target_list; do
1777 97a847bcSbellard    target_dir="$target"
1778 57a93f16SPhilippe Mathieu-Daudé    target_name=$(echo $target | cut -d '-' -f 1)$EXESUF
1779 64708615SPeter Maydell    mkdir -p "$target_dir"
1780 fdb75aefSPaolo Bonzini    case $target in
1781 fdb75aefSPaolo Bonzini        *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
1782 fdb75aefSPaolo Bonzini        *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
1783 2408a527Saurel32    esac
1784 56aebc89Spbrookdone
1785 7d13299dSbellard
1786 fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then
1787 fdb75aefSPaolo Bonzini  echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
1788 fdb75aefSPaolo Bonzinifi
1789 a540f158SPeter Crosthwaite
1790 fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
1791 fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
1792 fd0e6053SJohn Snowfi
1793 fd0e6053SJohn Snow
1794 cd362defSPaolo Bonzini# tests/tcg configuration
1795 b898bf28SPaolo Bonzini(config_host_mak=tests/tcg/config-host.mak
1796 d674342eSPaolo Bonzinimkdir -p tests/tcg
1797 cd362defSPaolo Bonziniecho "# Automatically generated by configure - do not modify" > $config_host_mak
1798 cd362defSPaolo Bonziniecho "SRC_PATH=$source_path" >> $config_host_mak
1799 cd362defSPaolo Bonziniecho "HOST_CC=$host_cc" >> $config_host_mak
1800 cd362defSPaolo Bonzini
1801 48543dd7SAlex Bennée# versioned checked in the main config_host.mak above
1802 48543dd7SAlex Bennéeif test -n "$gdb_bin"; then
1803 48543dd7SAlex Bennée    echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
1804 48543dd7SAlex Bennéefi
1805 d1d94d96SPaolo Bonziniif test "$plugins" = "yes" ; then
1806 d1d94d96SPaolo Bonzini    echo "CONFIG_PLUGIN=y" >> $config_host_mak
1807 d1d94d96SPaolo Bonzinifi
1808 48543dd7SAlex Bennée
1809 cd362defSPaolo Bonzinitcg_tests_targets=
1810 cd362defSPaolo Bonzinifor target in $target_list; do
1811 cd362defSPaolo Bonzini  arch=${target%%-*}
1812 cd362defSPaolo Bonzini
1813 cd362defSPaolo Bonzini  case $target in
1814 c48a5c47SPaolo Bonzini    xtensa*-linux-user)
1815 c48a5c47SPaolo Bonzini      # the toolchain is not complete with headers, only build softmmu tests
1816 c48a5c47SPaolo Bonzini      continue
1817 c48a5c47SPaolo Bonzini      ;;
1818 cd362defSPaolo Bonzini    *-softmmu)
1819 64708615SPeter Maydell      test -f "$source_path/tests/tcg/$arch/Makefile.softmmu-target" || continue
1820 cd362defSPaolo Bonzini      qemu="qemu-system-$arch"
1821 cd362defSPaolo Bonzini      ;;
1822 cd362defSPaolo Bonzini    *-linux-user|*-bsd-user)
1823 cd362defSPaolo Bonzini      qemu="qemu-$arch"
1824 cd362defSPaolo Bonzini      ;;
1825 cd362defSPaolo Bonzini  esac
1826 cd362defSPaolo Bonzini
1827 fde10960SAlex Bennée  if probe_target_compiler $target || test -n "$container_image"; then
1828 0825cae0SPaolo Bonzini      test -n "$container_image" && build_static=y
1829 d674342eSPaolo Bonzini      mkdir -p "tests/tcg/$target"
1830 c7022a70SPaolo Bonzini      config_target_mak=tests/tcg/$target/config-target.mak
1831 d674342eSPaolo Bonzini      ln -sf "$source_path/tests/tcg/Makefile.target" "tests/tcg/$target/Makefile"
1832 c7022a70SPaolo Bonzini      echo "# Automatically generated by configure - do not modify" > "$config_target_mak"
1833 c7022a70SPaolo Bonzini      echo "TARGET_NAME=$arch" >> "$config_target_mak"
1834 a3e28f81SPaolo Bonzini      echo "TARGET=$target" >> "$config_target_mak"
1835 c7022a70SPaolo Bonzini      write_target_makefile "build-tcg-tests-$target" >> "$config_target_mak"
1836 15b273f8SPaolo Bonzini      echo "BUILD_STATIC=$build_static" >> "$config_target_mak"
1837 c7022a70SPaolo Bonzini      echo "QEMU=$PWD/$qemu" >> "$config_target_mak"
1838 bcbc36a9SAlex Bennée
1839 bcbc36a9SAlex Bennée      # will GDB work with these binaries?
1840 bcbc36a9SAlex Bennée      if test "${gdb_arches#*$arch}" != "$gdb_arches"; then
1841 bcbc36a9SAlex Bennée          echo "HOST_GDB_SUPPORTS_ARCH=y" >> "$config_target_mak"
1842 bcbc36a9SAlex Bennée      fi
1843 bcbc36a9SAlex Bennée
1844 b898bf28SPaolo Bonzini      echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> Makefile.prereqs
1845 cd362defSPaolo Bonzini      tcg_tests_targets="$tcg_tests_targets $target"
1846 cd362defSPaolo Bonzini  fi
1847 2038f8c8SPaolo Bonzinidone
1848 c0031d38SFabiano Rosas
1849 c0031d38SFabiano Rosasif test "$tcg" = "enabled"; then
1850 c0031d38SFabiano Rosas    echo "TCG_TESTS_TARGETS=$tcg_tests_targets" >> config-host.mak
1851 c0031d38SFabiano Rosasfi
1852 c0031d38SFabiano Rosas)
1853 2038f8c8SPaolo Bonzini
1854 a5665051SPaolo Bonziniif test "$skip_meson" = no; then
1855 fc929892SMarc-André Lureau  cross="config-meson.cross.new"
1856 fc929892SMarc-André Lureau  meson_quote() {
1857 ac7ebcc5SPaolo Bonzini    test $# = 0 && return
1858 47b30835SPaolo Bonzini    echo "'$(echo $* | sed "s/ /','/g")'"
1859 fc929892SMarc-André Lureau  }
1860 fc929892SMarc-André Lureau
1861 fc929892SMarc-André Lureau  echo "# Automatically generated by configure - do not modify" > $cross
1862 fc929892SMarc-André Lureau  echo "[properties]" >> $cross
1863 d1d5e9eeSAlex Bennée
1864 d1d5e9eeSAlex Bennée  # unroll any custom device configs
1865 d1d5e9eeSAlex Bennée  for a in $device_archs; do
1866 d1d5e9eeSAlex Bennée      eval "c=\$devices_${a}"
1867 d1d5e9eeSAlex Bennée      echo "${a}-softmmu = '$c'" >> $cross
1868 d1d5e9eeSAlex Bennée  done
1869 d1d5e9eeSAlex Bennée
1870 47b30835SPaolo Bonzini  echo "[built-in options]" >> $cross
1871 a2866660SPaolo Bonzini  echo "c_args = [$(meson_quote $CFLAGS $EXTRA_CFLAGS)]" >> $cross
1872 a2866660SPaolo Bonzini  echo "cpp_args = [$(meson_quote $CXXFLAGS $EXTRA_CXXFLAGS)]" >> $cross
1873 e910c7d9SPhilippe Mathieu-Daudé  test -n "$objcc" && echo "objc_args = [$(meson_quote $OBJCFLAGS $EXTRA_OBJCFLAGS)]" >> $cross
1874 a2866660SPaolo Bonzini  echo "c_link_args = [$(meson_quote $CFLAGS $LDFLAGS $EXTRA_CFLAGS $EXTRA_LDFLAGS)]" >> $cross
1875 a2866660SPaolo Bonzini  echo "cpp_link_args = [$(meson_quote $CXXFLAGS $LDFLAGS $EXTRA_CXXFLAGS $EXTRA_LDFLAGS)]" >> $cross
1876 fc929892SMarc-André Lureau  echo "[binaries]" >> $cross
1877 4dba2789SPaolo Bonzini  echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
1878 4dba2789SPaolo Bonzini  test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
1879 4dba2789SPaolo Bonzini  test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross
1880 47b30835SPaolo Bonzini  echo "ar = [$(meson_quote $ar)]" >> $cross
1881 47b30835SPaolo Bonzini  echo "nm = [$(meson_quote $nm)]" >> $cross
1882 877c5567SPaolo Bonzini  echo "pkgconfig = [$(meson_quote $pkg_config)]" >> $cross
1883 47b30835SPaolo Bonzini  echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
1884 e8178514SPaolo Bonzini  if has $sdl2_config; then
1885 47b30835SPaolo Bonzini    echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
1886 e8178514SPaolo Bonzini  fi
1887 47b30835SPaolo Bonzini  echo "strip = [$(meson_quote $strip)]" >> $cross
1888 158bb224SKonstantin Kostiuk  echo "widl = [$(meson_quote $widl)]" >> $cross
1889 47b30835SPaolo Bonzini  echo "windres = [$(meson_quote $windres)]" >> $cross
1890 f9f0e617SAndrey Drobyshev  echo "windmc = [$(meson_quote $windmc)]" >> $cross
1891 3812c0c4SJoelle van Dyne  if test "$cross_compile" = "yes"; then
1892 fc929892SMarc-André Lureau    cross_arg="--cross-file config-meson.cross"
1893 fc929892SMarc-André Lureau    echo "[host_machine]" >> $cross
1894 ba7c60c2SPaolo Bonzini    echo "system = '$targetos'" >> $cross
1895 823eb013SPaolo Bonzini    case "$cpu" in
1896 f6bca9dfSJoelle van Dyne        i386)
1897 fc929892SMarc-André Lureau            echo "cpu_family = 'x86'" >> $cross
1898 fc929892SMarc-André Lureau            ;;
1899 fc929892SMarc-André Lureau        *)
1900 823eb013SPaolo Bonzini            echo "cpu_family = '$cpu'" >> $cross
1901 fc929892SMarc-André Lureau            ;;
1902 fc929892SMarc-André Lureau    esac
1903 fc929892SMarc-André Lureau    echo "cpu = '$cpu'" >> $cross
1904 fc929892SMarc-André Lureau    if test "$bigendian" = "yes" ; then
1905 fc929892SMarc-André Lureau        echo "endian = 'big'" >> $cross
1906 fc929892SMarc-André Lureau    else
1907 fc929892SMarc-André Lureau        echo "endian = 'little'" >> $cross
1908 fc929892SMarc-André Lureau    fi
1909 fc929892SMarc-André Lureau  else
1910 fc929892SMarc-André Lureau    cross_arg="--native-file config-meson.cross"
1911 fc929892SMarc-André Lureau  fi
1912 fc929892SMarc-André Lureau  mv $cross config-meson.cross
1913 fc929892SMarc-André Lureau
1914 a5665051SPaolo Bonzini  rm -rf meson-private meson-info meson-logs
1915 0a31e3a0SPaolo Bonzini
1916 0a31e3a0SPaolo Bonzini  # Built-in options
1917 ac4ccac7SPaolo Bonzini  test "$download" = "disabled" && meson_option_add "--wrap-mode=nodownload"
1918 0a31e3a0SPaolo Bonzini  test "$bindir" != "bin" && meson_option_add "-Dbindir=$bindir"
1919 0a31e3a0SPaolo Bonzini  test "$default_feature" = no && meson_option_add -Dauto_features=disabled
1920 a0cbd2e8SPaolo Bonzini  test "$static" = yes && meson_option_add -Dprefer_static=true
1921 0a31e3a0SPaolo Bonzini  test "$pie" = no && meson_option_add -Db_pie=false
1922 0a31e3a0SPaolo Bonzini  test "$werror" = yes && meson_option_add -Dwerror=true
1923 0a31e3a0SPaolo Bonzini
1924 0a31e3a0SPaolo Bonzini  # QEMU options
1925 0a31e3a0SPaolo Bonzini  test "$cfi" != false && meson_option_add "-Dcfi=$cfi"
1926 6b0cedcdSJohn Snow  test "$docs" != auto && meson_option_add "-Ddocs=$docs"
1927 0a31e3a0SPaolo Bonzini  test -n "${LIB_FUZZING_ENGINE+xxx}" && meson_option_add "-Dfuzzing_engine=$LIB_FUZZING_ENGINE"
1928 0a31e3a0SPaolo Bonzini  test "$qemu_suffix" != qemu && meson_option_add "-Dqemu_suffix=$qemu_suffix"
1929 0a31e3a0SPaolo Bonzini  test "$smbd" != '' && meson_option_add "-Dsmbd=$smbd"
1930 0a31e3a0SPaolo Bonzini  test "$tcg" != enabled && meson_option_add "-Dtcg=$tcg"
1931 61d63097SPaolo Bonzini  run_meson() {
1932 0a31e3a0SPaolo Bonzini    NINJA=$ninja $meson setup --prefix "$prefix" "$@" $cross_arg "$PWD" "$source_path"
1933 61d63097SPaolo Bonzini  }
1934 61d63097SPaolo Bonzini  eval run_meson $meson_options
1935 a5665051SPaolo Bonzini  if test "$?" -ne 0 ; then
1936 a5665051SPaolo Bonzini      error_exit "meson setup failed"
1937 a5665051SPaolo Bonzini  fi
1938 6c5f893dSPaolo Bonzini  echo "$meson" > build.ninja.stamp
1939 973038dbSPaolo Bonzinielse
1940 973038dbSPaolo Bonzini  if test -f meson-private/cmd_line.txt; then
1941 973038dbSPaolo Bonzini    # Adjust old command line options that were removed
1942 973038dbSPaolo Bonzini    # sed -i is not portable
1943 973038dbSPaolo Bonzini    perl -i -ne '
1944 973038dbSPaolo Bonzini      /^sphinx_build/ && next;
1945 973038dbSPaolo Bonzini      print;' meson-private/cmd_line.txt
1946 973038dbSPaolo Bonzini  fi
1947 a5665051SPaolo Bonzinifi
1948 a5665051SPaolo Bonzini
1949 dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
1950 dc655404SMichael S. Tsirkincat <<EOD >config.status
1951 dc655404SMichael S. Tsirkin#!/bin/sh
1952 dc655404SMichael S. Tsirkin# Generated by configure.
1953 dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
1954 dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
1955 dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
1956 dc655404SMichael S. TsirkinEOD
1957 e811da7fSDaniel P. Berrangé
1958 e811da7fSDaniel P. Berrangépreserve_env() {
1959 e811da7fSDaniel P. Berrangé    envname=$1
1960 e811da7fSDaniel P. Berrangé
1961 e811da7fSDaniel P. Berrangé    eval envval=\$$envname
1962 e811da7fSDaniel P. Berrangé
1963 e811da7fSDaniel P. Berrangé    if test -n "$envval"
1964 e811da7fSDaniel P. Berrangé    then
1965 e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
1966 e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
1967 e811da7fSDaniel P. Berrangé    else
1968 e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
1969 e811da7fSDaniel P. Berrangé    fi
1970 e811da7fSDaniel P. Berrangé}
1971 e811da7fSDaniel P. Berrangé
1972 e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
1973 e811da7fSDaniel P. Berrangé# features/build target configure will detect
1974 e811da7fSDaniel P. Berrangépreserve_env AR
1975 e811da7fSDaniel P. Berrangépreserve_env AS
1976 e811da7fSDaniel P. Berrangépreserve_env CC
1977 8009da03SPaolo Bonzinipreserve_env CFLAGS
1978 e811da7fSDaniel P. Berrangépreserve_env CXX
1979 8009da03SPaolo Bonzinipreserve_env CXXFLAGS
1980 e811da7fSDaniel P. Berrangépreserve_env LD
1981 8009da03SPaolo Bonzinipreserve_env LDFLAGS
1982 e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
1983 e811da7fSDaniel P. Berrangépreserve_env NM
1984 b5569e5bSPaolo Bonzinipreserve_env OBJCFLAGS
1985 e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
1986 e811da7fSDaniel P. Berrangépreserve_env PATH
1987 e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
1988 e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
1989 e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
1990 e811da7fSDaniel P. Berrangépreserve_env PYTHON
1991 954ed68fSPaolo Bonzinipreserve_env QEMU_GA_MANUFACTURER
1992 954ed68fSPaolo Bonzinipreserve_env QEMU_GA_DISTRO
1993 954ed68fSPaolo Bonzinipreserve_env QEMU_GA_VERSION
1994 e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
1995 e811da7fSDaniel P. Berrangépreserve_env SMBD
1996 e811da7fSDaniel P. Berrangépreserve_env STRIP
1997 158bb224SKonstantin Kostiukpreserve_env WIDL
1998 e811da7fSDaniel P. Berrangépreserve_env WINDRES
1999 f9f0e617SAndrey Drobyshevpreserve_env WINDMC
2000 e811da7fSDaniel P. Berrangé
2001 dc655404SMichael S. Tsirkinprintf "exec" >>config.status
2002 a5665051SPaolo Bonzinifor i in "$0" "$@"; do
2003 835af899SPaolo Bonzini  test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
2004 a5665051SPaolo Bonzinidone
2005 cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
2006 dc655404SMichael S. Tsirkinchmod +x config.status
2007 dc655404SMichael S. Tsirkin
2008 8cd05ab6SPeter Maydellrm -r "$TMPDIR1"
2009