* [Buildroot] [PATCHv2] meson: add per package optional compiler/linker flags
@ 2019-06-22 20:20 Yann E. MORIN
2019-06-23 10:36 ` Thomas Petazzoni
2019-06-23 19:21 ` Yann E. MORIN
0 siblings, 2 replies; 4+ messages in thread
From: Yann E. MORIN @ 2019-06-22 20:20 UTC (permalink / raw)
To: buildroot
From: Peter Seiderer <ps.report@gmx.net>
Add LIBFOO_CFLAGS, LIBFOO_LDFLAGS and LIBFOO_CXXFLAGS variables to allow
packages to provide their own flags, possibly overriding the generic
ones entirely, like we allow for other infras.
This means that the meson infra is the first and only infra for which
FOO_CFLAGS, FOO_LDFLAGS, and FOOO_CXXFLAGS are meaningful, while for the
other infras, they are just variable private to the package itself.
Instead of naming those variables after the meson infra (e.g.
LIBFOO_MESON_CFLAGS), we name them with a generic name, as mayb, just
maybe, we could also change the ither infras to also recognise those
variables.
To mimic this feature for packages that are bui9lt from the SDK, we also
install a templatised version of cross-compilation.conf, with three new
placeholders for custom flags. If a user wants to buidl a package that
needs custom flags, they can use that template to generate a per-pacakge
cross-compilation.conf.
Signed-off-by: Peter Seiderer <ps.report@gmx.net>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Adam Duskett <aduskett@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
Changes v1 -> v2 (adopted by Yann):
- rename the variables
- don't add new placeholders in the bundled template; instead, insert
those placeholders when generating the partially-templatised
template (irk!).
- update the doc
---
docs/manual/adding-packages-meson.txt | 12 ++++++++++++
package/meson/meson.mk | 14 ++++++++++----
package/pkg-meson.mk | 14 +++++++++++---
3 files changed, 33 insertions(+), 7 deletions(-)
diff --git a/docs/manual/adding-packages-meson.txt b/docs/manual/adding-packages-meson.txt
index 30c338f486..c0bfa6a13f 100644
--- a/docs/manual/adding-packages-meson.txt
+++ b/docs/manual/adding-packages-meson.txt
@@ -97,6 +97,18 @@ will therefore only use a few of them.
* +FOO_CONF_OPTS+, to specify additional options to pass to +meson+ for the
configuration step. By default, empty.
+* +FOO_CFLAGS+, to specify compiler arguments added to the package specific
+ +cross-compile.conf+ file +c_args+ property. By default, empty, so that
+ the global +TARGET_CFLAGS+ are used.
+
+* +FOO_CXXFLAGS+, to specify compiler arguments added to the package specific
+ +cross-compile.conf+ file +cpp_args+ property. By default, empty, so that
+ the global +TARGET_CXXFLAGS+ are used.
+
+* +FOO_LDFLAGS+, to specify compiler arguments added to the package specific
+ +cross-compile.conf+ file +c_link_args+ and +cpp_link_args+ properties. By
+ default, empty, so that the global +TARGET_LDFLAGS+ are used.
+
* +FOO_NINJA_ENV+, to specify additional environment variables to pass to
+ninja+, meson companion tool in charge of the build operations. By default,
empty.
diff --git a/package/meson/meson.mk b/package/meson/meson.mk
index 5b5100cccc..c9269d2a7c 100644
--- a/package/meson/meson.mk
+++ b/package/meson/meson.mk
@@ -50,18 +50,24 @@ HOST_MESON_SED_LDFLAGS = $(if $(TARGET_LDFLAGS),`printf '"%s"$(comma) ' $(TARGET
HOST_MESON_SED_CXXFLAGS = $(if $(TARGET_CXXFLAGS),`printf '"%s"$(comma) ' $(TARGET_CXXFLAGS)`)
# Generate a Meson cross-compilation.conf suitable for use with the
-# SDK
+# SDK; also install the file as a template for users to add their
+# own flags if they need to.
define HOST_MESON_INSTALL_CROSS_CONF
mkdir -p $(HOST_DIR)/etc/meson
sed -e "s%@TARGET_CROSS@%$(TARGET_CROSS)%g" \
-e "s%@TARGET_ARCH@%$(HOST_MESON_TARGET_CPU_FAMILY)%g" \
-e "s%@TARGET_CPU@%$(HOST_MESON_TARGET_CPU)%g" \
-e "s%@TARGET_ENDIAN@%$(HOST_MESON_TARGET_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%@TARGET_CFLAGS@%$(HOST_MESON_SED_CFLAGS)@PKG_TARGET_CFLAGS@%g" \
+ -e "s%@TARGET_LDFLAGS@%$(HOST_MESON_SED_LDFLAGS)@PKG_TARGET_CFLAGS@%g" \
+ -e "s%@TARGET_CXXFLAGS@%$(HOST_MESON_SED_CXXFLAGS)@PKG_TARGET_CFLAGS@%g" \
-e "s%@HOST_DIR@%$(HOST_DIR)%g" \
$(HOST_MESON_PKGDIR)/cross-compilation.conf.in \
+ > $(HOST_DIR)/etc/meson/cross-compilation.conf.in
+ sed -e "s%@PKG_TARGET_CFLAGS@%%g" \
+ -e "s%@PKG_TARGET_LDFLAGS@%%g" \
+ -e "s%@PKG_TARGET_CXXFLAGS@%%g" \
+ $(HOST_DIR)/etc/meson/cross-compilation.conf.in \
> $(HOST_DIR)/etc/meson/cross-compilation.conf
endef
diff --git a/package/pkg-meson.mk b/package/pkg-meson.mk
index 886fcf7205..807b578219 100644
--- a/package/pkg-meson.mk
+++ b/package/pkg-meson.mk
@@ -57,6 +57,14 @@ $(2)_NINJA_ENV ?=
ifndef $(2)_CONFIGURE_CMDS
ifeq ($(4),target)
+$(2)_CFLAGS ?= $$(TARGET_CFLAGS)
+$(2)_LDFLAGS ?= $$(TARGET_LDFLAGS)
+$(2)_CXXFLAGS ?= $$(TARGET_CXXFLAGS)
+
+$(2)_MESON_SED_CFLAGS = $(if $($(2)_CFLAGS),`printf '"%s"$$(comma) ' $($(2)_CFLAGS)`)
+$(2)_MESON_SED_LDFLAGS = $(if $($(2)_LDFLAGS),`printf '"%s"$$(comma) ' $($(2)_LDFLAGS)`)
+$(2)_MESON_SED_CXXFLAGS = $(if $($(2)_CXXFLAGS),`printf '"%s"$$(comma) ' $$($$(2)_CXXFLAGS)`)
+
# Configure package for target
#
#
@@ -67,9 +75,9 @@ define $(2)_CONFIGURE_CMDS
-e "s%@TARGET_ARCH@%$$(HOST_MESON_TARGET_CPU_FAMILY)%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%@TARGET_CFLAGS@%$$($(2)_MESON_SED_CFLAGS)%g" \
+ -e "s%@TARGET_LDFLAGS@%$$($(2)_MESON_SED_LDFLAGS)%g" \
+ -e "s%@TARGET_CXXFLAGS@%$$($(2)_MESON_SED_CXXFLAGS)%g" \
-e "s%@HOST_DIR@%$$(HOST_DIR)%g" \
package/meson/cross-compilation.conf.in \
> $$($$(PKG)_SRCDIR)/build/cross-compilation.conf
--
2.20.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Buildroot] [PATCHv2] meson: add per package optional compiler/linker flags
2019-06-22 20:20 [Buildroot] [PATCHv2] meson: add per package optional compiler/linker flags Yann E. MORIN
@ 2019-06-23 10:36 ` Thomas Petazzoni
2019-06-23 15:24 ` Yann E. MORIN
2019-06-23 19:21 ` Yann E. MORIN
1 sibling, 1 reply; 4+ messages in thread
From: Thomas Petazzoni @ 2019-06-23 10:36 UTC (permalink / raw)
To: buildroot
Hello Yann,
Thanks for respining. One question below.
On Sat, 22 Jun 2019 22:20:46 +0200
"Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
Perhaps the commit should explain that as of today, Meson doesn't allow
to pass cflags/ldflags on the command line when a cross-compilation
file is used.
> Add LIBFOO_CFLAGS, LIBFOO_LDFLAGS and LIBFOO_CXXFLAGS variables to allow
> packages to provide their own flags, possibly overriding the generic
> ones entirely, like we allow for other infras.
>
> This means that the meson infra is the first and only infra for which
> FOO_CFLAGS, FOO_LDFLAGS, and FOOO_CXXFLAGS are meaningful, while for the
> other infras, they are just variable private to the package itself.
> Instead of naming those variables after the meson infra (e.g.
> LIBFOO_MESON_CFLAGS), we name them with a generic name, as mayb, just
mayb -> maybe
> maybe, we could also change the ither infras to also recognise those
ither -> other
> variables.
>
> To mimic this feature for packages that are bui9lt from the SDK, we also
built
> install a templatised version of cross-compilation.conf, with three new
> placeholders for custom flags. If a user wants to buidl a package that
build
> needs custom flags, they can use that template to generate a per-pacakge
package
> +* +FOO_CFLAGS+, to specify compiler arguments added to the package specific
> + +cross-compile.conf+ file +c_args+ property. By default, empty, so that
> + the global +TARGET_CFLAGS+ are used.
I find the wording "By default, empty, so that the global
+TARGET_CFLAGS+ are used" very confusing. Indeed, by default, those
variables are not empty, they are precisely defined to TARGET_CFLAGS.
For example, in the autotools infra documentation, we say:
* +LIBFOO_AUTORECONF+, tells whether the package should
be autoreconfigured or not (i.e. if the configure script and
Makefile.in files should be re-generated by re-running autoconf,
automake, libtool, etc.). Valid values are +YES+ and
+NO+. By default, the value is +NO+
So we just say that the default value is NO, not that it is empty and
that NO is used :)
For extra clarity, it could be rephrased like this:
When no value is specified by the package for this variable,
the value of +TARGET_CFLAGS+ will be used by the
+meson-package+ infrastructure.
If you agree with this change, I can fix that up when applying.
Thanks,
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCHv2] meson: add per package optional compiler/linker flags
2019-06-23 10:36 ` Thomas Petazzoni
@ 2019-06-23 15:24 ` Yann E. MORIN
0 siblings, 0 replies; 4+ messages in thread
From: Yann E. MORIN @ 2019-06-23 15:24 UTC (permalink / raw)
To: buildroot
Thomas, All,
On 2019-06-23 12:36 +0200, Thomas Petazzoni spake thusly:
> On Sat, 22 Jun 2019 22:20:46 +0200
> "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
>
> Perhaps the commit should explain that as of today, Meson doesn't allow
> to pass cflags/ldflags on the command line when a cross-compilation
> file is used.
Indeed.
[--SNIP--]
> > +* +FOO_CFLAGS+, to specify compiler arguments added to the package specific
> > + +cross-compile.conf+ file +c_args+ property. By default, empty, so that
> > + the global +TARGET_CFLAGS+ are used.
>
> I find the wording "By default, empty, so that the global
> +TARGET_CFLAGS+ are used" very confusing. Indeed, by default, those
> variables are not empty, they are precisely defined to TARGET_CFLAGS.
>
> For example, in the autotools infra documentation, we say:
>
> * +LIBFOO_AUTORECONF+, tells whether the package should
> be autoreconfigured or not (i.e. if the configure script and
> Makefile.in files should be re-generated by re-running autoconf,
> automake, libtool, etc.). Valid values are +YES+ and
> +NO+. By default, the value is +NO+
>
> So we just say that the default value is NO, not that it is empty and
> that NO is used :)
>
> For extra clarity, it could be rephrased like this:
>
> When no value is specified by the package for this variable,
> the value of +TARGET_CFLAGS+ will be used by the
> +meson-package+ infrastructure.
Yes, that makes sense.
Regards,
Yann E. MORIN.
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCHv2] meson: add per package optional compiler/linker flags
2019-06-22 20:20 [Buildroot] [PATCHv2] meson: add per package optional compiler/linker flags Yann E. MORIN
2019-06-23 10:36 ` Thomas Petazzoni
@ 2019-06-23 19:21 ` Yann E. MORIN
1 sibling, 0 replies; 4+ messages in thread
From: Yann E. MORIN @ 2019-06-23 19:21 UTC (permalink / raw)
To: buildroot
All,
On 2019-06-22 22:20 +0200, Yann E. MORIN spake thusly:
> From: Peter Seiderer <ps.report@gmx.net>
> Add LIBFOO_CFLAGS, LIBFOO_LDFLAGS and LIBFOO_CXXFLAGS variables to allow
> packages to provide their own flags, possibly overriding the generic
> ones entirely, like we allow for other infras.
[--SNIP--]
> diff --git a/package/pkg-meson.mk b/package/pkg-meson.mk
> index 886fcf7205..807b578219 100644
> --- a/package/pkg-meson.mk
> +++ b/package/pkg-meson.mk
> @@ -57,6 +57,14 @@ $(2)_NINJA_ENV ?=
> ifndef $(2)_CONFIGURE_CMDS
> ifeq ($(4),target)
>
> +$(2)_CFLAGS ?= $$(TARGET_CFLAGS)
> +$(2)_LDFLAGS ?= $$(TARGET_LDFLAGS)
> +$(2)_CXXFLAGS ?= $$(TARGET_CXXFLAGS)
> +
> +$(2)_MESON_SED_CFLAGS = $(if $($(2)_CFLAGS),`printf '"%s"$$(comma) ' $($(2)_CFLAGS)`)
> +$(2)_MESON_SED_LDFLAGS = $(if $($(2)_LDFLAGS),`printf '"%s"$$(comma) ' $($(2)_LDFLAGS)`)
> +$(2)_MESON_SED_CXXFLAGS = $(if $($(2)_CXXFLAGS),`printf '"%s"$$(comma) ' $$($$(2)_CXXFLAGS)`)
Gah... During my experimenting, I dropped the double-dollar in some
places, above. Damn...
I'll son respin, taking Thomas' comments into account.
Sorry for the noise...
Regards,
Yann E. MORIN.
> +
> # Configure package for target
> #
> #
> @@ -67,9 +75,9 @@ define $(2)_CONFIGURE_CMDS
> -e "s%@TARGET_ARCH@%$$(HOST_MESON_TARGET_CPU_FAMILY)%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%@TARGET_CFLAGS@%$$($(2)_MESON_SED_CFLAGS)%g" \
> + -e "s%@TARGET_LDFLAGS@%$$($(2)_MESON_SED_LDFLAGS)%g" \
> + -e "s%@TARGET_CXXFLAGS@%$$($(2)_MESON_SED_CXXFLAGS)%g" \
> -e "s%@HOST_DIR@%$$(HOST_DIR)%g" \
> package/meson/cross-compilation.conf.in \
> > $$($$(PKG)_SRCDIR)/build/cross-compilation.conf
> --
> 2.20.1
>
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-06-23 19:21 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-06-22 20:20 [Buildroot] [PATCHv2] meson: add per package optional compiler/linker flags Yann E. MORIN
2019-06-23 10:36 ` Thomas Petazzoni
2019-06-23 15:24 ` Yann E. MORIN
2019-06-23 19:21 ` Yann E. MORIN
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox