* [Buildroot] [PATCH next v2] package/pkg-meson: support per-package directories
@ 2018-11-30 10:40 Thomas Petazzoni
2018-12-28 13:28 ` Thomas Petazzoni
2019-01-17 21:54 ` Peter Korsgaard
0 siblings, 2 replies; 4+ messages in thread
From: Thomas Petazzoni @ 2018-11-30 10:40 UTC (permalink / raw)
To: buildroot
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
--
2.19.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH next v2] package/pkg-meson: support per-package directories
2018-11-30 10:40 [Buildroot] [PATCH next v2] package/pkg-meson: support per-package directories Thomas Petazzoni
@ 2018-12-28 13:28 ` Thomas Petazzoni
2019-01-04 18:35 ` Peter Seiderer
2019-01-17 21:54 ` Peter Korsgaard
1 sibling, 1 reply; 4+ messages in thread
From: Thomas Petazzoni @ 2018-12-28 13:28 UTC (permalink / raw)
To: buildroot
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
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH next v2] package/pkg-meson: support per-package directories
2018-12-28 13:28 ` Thomas Petazzoni
@ 2019-01-04 18:35 ` Peter Seiderer
0 siblings, 0 replies; 4+ messages in thread
From: Peter Seiderer @ 2019-01-04 18:35 UTC (permalink / raw)
To: buildroot
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
>
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH next v2] package/pkg-meson: support per-package directories
2018-11-30 10:40 [Buildroot] [PATCH next v2] package/pkg-meson: support per-package directories Thomas Petazzoni
2018-12-28 13:28 ` Thomas Petazzoni
@ 2019-01-17 21:54 ` Peter Korsgaard
1 sibling, 0 replies; 4+ messages in thread
From: Peter Korsgaard @ 2019-01-17 21:54 UTC (permalink / raw)
To: buildroot
>>>>> "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.
--
Bye, Peter Korsgaard
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-01-17 21:54 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-30 10:40 [Buildroot] [PATCH next v2] package/pkg-meson: support per-package directories Thomas Petazzoni
2018-12-28 13:28 ` Thomas Petazzoni
2019-01-04 18:35 ` Peter Seiderer
2019-01-17 21:54 ` Peter Korsgaard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox