meson: fix cross detection

Meson 0.51 onwards detects if a build is cross by whether the host and build
machines match.  However this doesn't work in a number of cross compilation
cases: notably where host is Windows but build is Linux, but also the common
OpenEmbedded case where the host and build machine are both x86-64.

Previously we'd patched this to instead look at whether an executable wrapper is
needed: our cross files always set this to true so all cross builds would be
identified as cross.  However, this breaks build on the target as without a
cross file the early cross build detection fails as we don't yet know if an exe
wrapper is needed.

The neater solution is to simply go back to the older logic: a cross build has
cross files defined.

[ YOCTO #13571 ]

(From OE-Core rev: 9aa543aa9bd78c63343ae28fc85113ca2c9e0094)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ross Burton
2019-10-07 11:11:38 +01:00
committed by Richard Purdie
parent 35a9ecd653
commit 45befef2a3
3 changed files with 29 additions and 29 deletions

View File

@@ -15,7 +15,7 @@ SRC_URI = "https://github.com/mesonbuild/meson/releases/download/${PV}/meson-${P
file://disable-rpath-handling.patch \
file://cross-prop-default.patch \
file://0001-environment.py-detect-windows-also-if-the-system-str.patch \
file://0001-mesonbuild-environment.py-do-not-determine-whether-a.patch \
file://0001-Cross-build-is-defined-by-the-existance-of-a-cross-f.patch \
file://0001-mesonbuild-environment.py-check-environment-for-vari.patch \
file://0001-modules-python.py-do-not-substitute-python-s-install.patch \
file://vala-cross-compile.patch \

View File

@@ -0,0 +1,28 @@
Upstream-Status: Backport
Signed-off-by: Ross Burton <ross.burton@intel.com>
From 0b4d1e8afd5428a495f8624ee061f63977b4c268 Mon Sep 17 00:00:00 2001
From: Jussi Pakkanen <jpakkane@gmail.com>
Date: Sun, 6 Oct 2019 15:17:32 +0300
Subject: [PATCH] Cross build is defined by the existance of a cross file.
---
mesonbuild/environment.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index e5d041b4..03c65688 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -611,7 +611,7 @@ class Environment:
self.first_invocation = True
def is_cross_build(self) -> bool:
- return not self.machines.matches_build_machine(MachineChoice.HOST)
+ return self.coredata.is_cross_build()
def dump_coredata(self):
return coredata.save(self.coredata, self.get_build_dir())
--
2.20.1

View File

@@ -1,28 +0,0 @@
From ec9c4a22424a5d55fcf213a55d03f096ec24bcae Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Mon, 25 Mar 2019 18:18:33 +0100
Subject: [PATCH] mesonbuild/environment.py: do not determine whether a build
is cross by comparing architectures
This can, and does, go wrong when our host architecture is same as the target one(e.g. x86_64).
Upstream-Status: Pending
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
mesonbuild/environment.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index 84a7596..9a029f4 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -520,7 +520,7 @@ class Environment:
self.first_invocation = True
def is_cross_build(self) -> bool:
- return not self.machines.matches_build_machine(MachineChoice.HOST)
+ return self.need_exe_wrapper()
def dump_coredata(self):
return coredata.save(self.coredata, self.get_build_dir())