diff mbox series

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

Message ID 20181130104003.32337-1-thomas.petazzoni@bootlin.com
State Accepted
Commit 5d882b71a8c0c87b0ccdea7ad620a8f44c33fcb1
Headers show
Series [next,v2] package/pkg-meson: support per-package directories | expand

Commit Message

Thomas Petazzoni Nov. 30, 2018, 10:40 a.m. UTC
From: Peter Seiderer <ps.report@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@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@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(-)

Comments

Thomas Petazzoni Dec. 28, 2018, 1:28 p.m. UTC | #1
Hello Peter,

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

Thanks a lot!

Thomas

On Fri, 30 Nov 2018 11:40:03 +0100, Thomas Petazzoni wrote:
> From: Peter Seiderer <ps.report@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@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@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
Peter Seiderer Jan. 4, 2019, 6:35 p.m. UTC | #2
Hello Thomas,

On Fri, 28 Dec 2018 14:28:15 +0100, Thomas Petazzoni <thomas.petazzoni@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@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@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@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@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  
> 
> 
>
Peter Korsgaard Jan. 17, 2019, 9:54 p.m. UTC | #3
>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@bootlin.com> writes:

 > From: Peter Seiderer <ps.report@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@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@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.

Committed, thanks.
diff mbox series

Patch

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