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