environment: Don't override mips64 to mips if no compilers are available

If we have a build- or host-architecture compiler, we can detect mips64
vs. mips by the fact that mips64 compilers define __mips64.  However,
machine_info_can_run() doesn't provide any compilers, because it is
interested in the architecture of the underlying kernel. If we don't
return mips64 when running on a mips64 kernel, machine_info_can_run()
will wrongly say that we can't run mips64 binaries.

If we're running a complete 32-bit mips user-space on a mips64 kernel,
it's OK to return mips64 in the absence of any compilers, as a result
of the previous commit "environment: Assume that mips64 can run 32-bit
mips binaries".

Resolves: https://github.com/mesonbuild/meson/issues/12017
Bug-Debian: https://bugs.debian.org/1041499
Fixes: 6def03c7 "detect_cpu: Fix mips32 detection on mips64"
Signed-off-by: Simon McVittie <smcv@debian.org>
pull/12081/head
Simon McVittie 1 year ago committed by Eli Schwartz
parent 2cf79c5062
commit b95ebf80b8
  1. 4
      mesonbuild/environment.py

@ -343,7 +343,7 @@ def detect_cpu_family(compilers: CompilersDict) -> str:
# MIPS64 is able to run MIPS32 code natively, so there is a chance that
# such mixture mentioned above exists.
elif trial == 'mips64':
if not any_compiler_has_define(compilers, '__mips64'):
if compilers and not any_compiler_has_define(compilers, '__mips64'):
trial = 'mips'
if trial not in known_cpu_families:
@ -383,7 +383,7 @@ def detect_cpu(compilers: CompilersDict) -> str:
if '64' not in trial:
trial = 'mips'
else:
if not any_compiler_has_define(compilers, '__mips64'):
if compilers and not any_compiler_has_define(compilers, '__mips64'):
trial = 'mips'
else:
trial = 'mips64'

Loading…
Cancel
Save