Skip to content

Commit fd309ff

Browse files
smcvjpakkane
authored andcommitted
environment: Never require an exe_wrapper for native builds
It is possible to run a container or chroot with one ABI on a CPU and kernel that would normally have a different ABI, most commonly by running a 32-bit container on a 64-bit CPU and kernel. When we do a native build in such an environment, the build and host architectures are both equal to the architecture of the container, and it is safe to assume that we can run executables from that architecture, because if we could not, we wouldn't be running Python successfully. Until now, we have been handling this by adding explicit special cases in `machine_info_can_run()` for each known-good combination of the detected CPU and the host architecture: every x86_64 can run x86 binaries, and every mips64 is assumed to be able to run 32-bit mips binaries. However, the equivalent would not be true on ARM systems: *most* aarch64 CPUs can run arm binaries, but not all (according to Wikipedia, ARM Cortex-A34 is an example of a purely 64-bit CPU that cannot execute 32-bit instructions). Instead, assume that if we are doing a native build (not a cross build), by definition we can run build-architecture executables, and since the host architecture is equal to the build architecture during a native build, this implies that we can run host-architecture executables too. This makes the behaviour of `need_exe_wrapper()` consistent with `meson.can_run_host_binaries()`, which in turn avoids `Compiler.run()` failing with error message "Can not run test applications in this cross environment" during native builds even though `meson.can_run_host_binaries()` has previously succeeded. Resolves: mesonbuild#13841 Signed-off-by: Simon McVittie <[email protected]>
1 parent 467da05 commit fd309ff

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

mesonbuild/environment.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,8 @@ def need_exe_wrapper(self, for_machine: MachineChoice = MachineChoice.HOST):
991991
value = self.properties[for_machine].get('needs_exe_wrapper', None)
992992
if value is not None:
993993
return value
994+
if not self.is_cross_build():
995+
return False
994996
return not machine_info_can_run(self.machines[for_machine])
995997

996998
def get_exe_wrapper(self) -> T.Optional[ExternalProgram]:

0 commit comments

Comments
 (0)