From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Petazzoni Date: Fri, 28 Dec 2018 14:28:15 +0100 Subject: [Buildroot] [PATCH next v2] package/pkg-meson: support per-package directories In-Reply-To: <20181130104003.32337-1-thomas.petazzoni@bootlin.com> References: <20181130104003.32337-1-thomas.petazzoni@bootlin.com> Message-ID: <20181228142815.27d98350@windsurf> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net 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 > > 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 > [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 > --- > 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