[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