[oe] [meta-oe][PATCH v2] meson: export native env only for native build
Martin Kelly
mkelly at xevo.com
Wed Dec 6 17:15:37 UTC 2017
Hi all,
Since meson has not yet transition to OE-core, could we consider this
patch for meta-OE in the meantime? It is causing bugs in my build, so
I'm hoping to drop my private patch backports.
On 11/14/2017 10:22 AM, Martin Kelly wrote:
> Although the meson crossfile should take care of setting the right cross
> environment for a target build, meson slurps any set CFLAGS, CXXFLAGS,
> LDFLAGS, and CPPFLAGS from the environment and injects them into the
> build (see mesonbuild/environment.py:get_args_from_envvars for details).
>
> This means that we are seeing native CFLAGS, CXXFLAGS, LDFLAGS, and
> CPPFLAGS in the target build, which is wrong and causes build failures
> when target and native have libraries in common (the linker gets
> confused and bails).
>
> That said, we *do* need to set certain vars for all builds so that meson
> can find the right build tools. Without this, meson will fail during its
> sanity checking step because it will determine the build tools to be
> unrunnable since they output target instead of native artifacts.
>
> The solution to all of this is to set CC, CXX, LD, and AR globally to
> the native tools while setting the other native vars *only* for the
> native build. For target builds, these vars will get overridden by the
> cross file as we expect.
>
> Signed-off-by: Martin Kelly <mkelly at xevo.com>
> ---
> meta-oe/classes/meson.bbclass | 27 ++++++++++++++++-----------
> 1 file changed, 16 insertions(+), 11 deletions(-)
>
> diff --git a/meta-oe/classes/meson.bbclass b/meta-oe/classes/meson.bbclass
> index a09bc240d..6e38b4bd5 100644
> --- a/meta-oe/classes/meson.bbclass
> +++ b/meta-oe/classes/meson.bbclass
> @@ -9,17 +9,6 @@ do_configure[cleandirs] = "${B}"
> # Where the meson.build build configuration is
> MESON_SOURCEPATH = "${S}"
>
> -# These variables in the environment override the *native* tools, not the cross.
> -export CPPFLAGS = "${BUILD_CPPFLAGS}"
> -export CC = "${BUILD_CC}"
> -export CFLAGS = "${BUILD_CFLAGS}"
> -export CXX = "${BUILD_CXX}"
> -export CXXFLAGS = "${BUILD_CXXFLAGS}"
> -export LD = "${BUILD_LD}"
> -export LDFLAGS = "${BUILD_LDFLAGS}"
> -export AR = "${BUILD_AR}"
> -export PKG_CONFIG = "pkg-config-native"
> -
> def noprefix(var, d):
> return d.getVar(var, True).replace(d.getVar('prefix', True) + '/', '', 1)
>
> @@ -94,6 +83,22 @@ meson_do_configure() {
> fi
> }
>
> +meson_do_configure_prepend_class-target() {
> + # Set these so that meson uses the native tools for its build sanity tests,
> + # which require executables to be runnable. The cross file will still
> + # override these for the target build. Note that we do *not* set CFLAGS,
> + # LDFLAGS, etc. as they will be slurped in by meson and applied to the
> + # target build, causing errors.
> + export CC="${BUILD_CC}"
> + export CXX="${BUILD_CXX}"
> + export LD="${BUILD_LD}"
> + export AR="${BUILD_AR}"
> +}
> +
> +meson_do_configure_prepend_class-native() {
> + export PKG_CONFIG="pkg-config-native"
> +}
> +
> do_compile[progress] = "outof:^\[(\d+)/(\d+)\]\s+"
> meson_do_compile() {
> ninja ${PARALLEL_MAKE}
>
More information about the Openembedded-devel
mailing list