[Buildroot] [PATCH next v2] package/pkg-meson: support per-package directories

Peter Seiderer ps.report at gmx.net
Fri Jan 4 18:35:46 UTC 2019


Hello Thomas,

On Fri, 28 Dec 2018 14:28:15 +0100, Thomas Petazzoni <thomas.petazzoni at bootlin.com> wrote:

> Hello Peter,
> 
> Could you provide some feedback on the below patch, so that we can move
> forward with merging it ?

Sorry for the delay, modified patch still works ;-), you can add my

Tested-by: Peter Seiderer <ps.report at gmx.net>

Regards,
Peter

> 
> Thanks a lot!
> 
> Thomas
> 
> On Fri, 30 Nov 2018 11:40:03 +0100, Thomas Petazzoni wrote:
> > From: Peter Seiderer <ps.report at gmx.net>
> > 
> > Currently, package/meson/meson.mk generates a single global
> > cross-compilation.conf file, with the path to the compiler, cflags,
> > ldflags, and various other details. This file is then used when
> > building all meson-based packages.
> > 
> > This causes two problems:
> > 
> >  - It is not compatible with per-package directories, because with
> >    per-package folders, we need to use a different compiler, and
> >    possibly CFLAGS/LDFLAGS for each package.
> > 
> >  - It is not possible to define per package CFLAGS. Indeed, when
> >    cross-compiling, meson doesn't support passing CFLAGS through the
> >    environment, only the CFLAGS from cross-compilation.conf are taken
> >    into account.
> > 
> > For this reason, this commit:
> > 
> >  - Introduces a per-package cross-compilation.conf, which is generated
> >    by the pkg-meson infrastructure in the "configure" step right
> >    before calling meson. The file is generated in $(@D)/build/, and
> >    because it is generated within a given package "configure" step,
> >    the compiler path is the one of this package.
> > 
> >  - Keeps the global cross-compilation.conf in $(HOST_DIR)/etc/meson/,
> >    for the SDK use-case of Buildroot. Since we want the final and
> >    global values of the compiler path, CFLAGS and LDFLAGS, generating
> >    this global cross-compilation.conf is moved to a
> >    TARGET_FINALIZE_HOOKS. If we were keeping this as a
> >    HOST_MESON_POST_INSTALL_HOOKS, it would contain values specific to
> >    the host-meson package.
> > 
> > For now, we don't yet support per-package CFLAGS/LDFLAGS, but having
> > such per-package cross-compilation.conf is a necessary preparation to
> > achieve this goal.
> > 
> > This commit has been tested by building all Buildroot packages that
> > use meson: json-glib, systemd, enlightenment, at-spi2-core, ncmpc,
> > libmpdclient and ncmpc.
> > 
> > Signed-off-by: Peter Seiderer <ps.report at gmx.net>
> > [Thomas:
> >  - add extended commit log
> >  - in pkg-meson.mk, re-use variables defined in meson.mk to do the
> >    replacement of CFLAGS/LDFLAGS/CXXFLAGS
> >  - move the generation of the global cross-compilation.conf to a
> >    TARGET_FINALIZE_HOOKS
> >  - testing with per-package folders]
> > Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
> > ---
> > Changes since v1:
> >  - Rework commit title and commit log. Indeed, we don't implement
> >    per-package CFLAGS as part of this commit, contrary to what the
> >    previous commit log was saying. However, having a per-package
> >    cross-compilation.conf is a necessary preparation step to implement
> >    per-package CFLAGS in the future.
> > ---
> >  package/meson/meson.mk |  4 +++-
> >  package/pkg-meson.mk   | 12 +++++++++++-
> >  2 files changed, 14 insertions(+), 2 deletions(-)
> > 
> > diff --git a/package/meson/meson.mk b/package/meson/meson.mk
> > index e1675c21b8..7d33e0f0d6 100644
> > --- a/package/meson/meson.mk
> > +++ b/package/meson/meson.mk
> > @@ -20,6 +20,8 @@ HOST_MESON_SED_CFLAGS = $(if $(TARGET_CFLAGS),`printf '"%s"$(comma) ' $(TARGET_C
> >  HOST_MESON_SED_LDFLAGS = $(if $(TARGET_LDFLAGS),`printf '"%s"$(comma) ' $(TARGET_LDFLAGS)`)
> >  HOST_MESON_SED_CXXFLAGS = $(if $(TARGET_CXXFLAGS),`printf '"%s"$(comma) ' $(TARGET_CXXFLAGS)`)
> >  
> > +# Generate a Meson cross-compilation.conf suitable for use with the
> > +# SDK
> >  define HOST_MESON_INSTALL_CROSS_CONF
> >  	mkdir -p $(HOST_DIR)/etc/meson
> >  	sed -e "s%@TARGET_CROSS@%$(TARGET_CROSS)%g" \
> > @@ -34,6 +36,6 @@ define HOST_MESON_INSTALL_CROSS_CONF  
> >  	    > $(HOST_DIR)/etc/meson/cross-compilation.conf    
> >  endef
> >  
> > -HOST_MESON_POST_INSTALL_HOOKS += HOST_MESON_INSTALL_CROSS_CONF
> > +TARGET_FINALIZE_HOOKS += HOST_MESON_INSTALL_CROSS_CONF
> >  
> >  $(eval $(host-python-package))
> > diff --git a/package/pkg-meson.mk b/package/pkg-meson.mk
> > index 507e686068..6c883041d0 100644
> > --- a/package/pkg-meson.mk
> > +++ b/package/pkg-meson.mk
> > @@ -64,12 +64,22 @@ ifeq ($(4),target)
> >  define $(2)_CONFIGURE_CMDS
> >  	rm -rf $$($$(PKG)_SRCDIR)/build
> >  	mkdir -p $$($$(PKG)_SRCDIR)/build
> > +	sed -e "s%@TARGET_CROSS@%$$(TARGET_CROSS)%g" \
> > +	    -e "s%@TARGET_ARCH@%$$(ARCH)%g" \
> > +	    -e "s%@TARGET_CPU@%$$(GCC_TARGET_CPU)%g" \
> > +	    -e "s%@TARGET_ENDIAN@%$$(call LOWERCASE,$$(BR2_ENDIAN))%g" \
> > +	    -e "s%@TARGET_CFLAGS@%$$(HOST_MESON_SED_CFLAGS)%g" \
> > +	    -e "s%@TARGET_LDFLAGS@%$$(HOST_MESON_SED_LDFLAGS)%g" \
> > +	    -e "s%@TARGET_CXXFLAGS@%$$(HOST_MESON_SED_CXXFLAGS)%g" \
> > +	    -e "s%@HOST_DIR@%$$(HOST_DIR)%g" \
> > +	    package/meson/cross-compilation.conf.in \
> > +	    > $$($$(PKG)_SRCDIR)/build/cross-compilation.conf
> >  	PATH=$$(BR_PATH) $$($$(PKG)_CONF_ENV) $$(MESON) \
> >  		--prefix=/usr \
> >  		--libdir=lib \
> >  		--default-library=$(if $(BR2_STATIC_LIBS),static,shared) \
> >  		--buildtype=$(if $(BR2_ENABLE_DEBUG),debug,release) \
> > -		--cross-file=$(HOST_DIR)/etc/meson/cross-compilation.conf \
> > +		--cross-file=$$($$(PKG)_SRCDIR)/build/cross-compilation.conf \
> >  		$$($$(PKG)_CONF_OPTS) \
> >  		$$($$(PKG)_SRCDIR) $$($$(PKG)_SRCDIR)/build
> >  endef  
> 
> 
> 



More information about the buildroot mailing list