Message ID | 20190622202046.21817-1-yann.morin.1998@free.fr |
---|---|
State | Changes Requested |
Headers | show |
Series | [PATCHv2] meson: add per package optional compiler/linker flags | expand |
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, 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.
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 >
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