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