0c89d006ca
With autoconf packages, we often specify ac_cv_func_... cached values to
avoid runtime checks during configure. With meson the equivalent is
setting properties in cross-compilation.conf which we cannot do in
Buildroot at the moment.
For example, libglib2 used to set ac_cv_func_printf_unix98 and
ac_cv_func_vsnprintf_c99 so that the system printf could be used, but
with the conversion to meson these checks fail and the gnulib fallback
is used.
Add infrastructure in the same way as FOO_MESON_EXTRA_BINARIES to allow
per-package modification to the cross-compilation properties.
Signed-off-by: John Keeping <john@metanate.com>
Reviewed-by: Peter Seiderer <ps.report@gmx.net>
Reviewed-by: Adam Duskett <aduskett@gmail.com>
[yann.morin.1998@free.fr: do a single substitution as in a1e3c7b693
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
134 lines
5.5 KiB
Plaintext
134 lines
5.5 KiB
Plaintext
// -*- mode:doc; -*-
|
|
// vim: set syntax=asciidoc:
|
|
|
|
=== Infrastructure for Meson-based packages
|
|
|
|
[[meson-package-tutorial]]
|
|
|
|
==== +meson-package+ tutorial
|
|
|
|
http://mesonbuild.com[Meson] is an open source build system meant to be both
|
|
extremely fast, and, even more importantly, as user friendly as possible. It
|
|
uses https://ninja-build.org[Ninja] as a companion tool to perform the actual
|
|
build operations.
|
|
|
|
Let's see how to write a +.mk+ file for a Meson-based package, with an example:
|
|
|
|
------------------------------
|
|
01: ################################################################################
|
|
02: #
|
|
03: # foo
|
|
04: #
|
|
05: ################################################################################
|
|
06:
|
|
07: FOO_VERSION = 1.0
|
|
08: FOO_SOURCE = foo-$(FOO_VERSION).tar.gz
|
|
09: FOO_SITE = http://www.foosoftware.org/download
|
|
10: FOO_LICENSE = GPL-3.0+
|
|
11: FOO_LICENSE_FILES = COPYING
|
|
12: FOO_INSTALL_STAGING = YES
|
|
13:
|
|
14: FOO_DEPENDENCIES = host-pkgconf bar
|
|
15:
|
|
16: ifeq ($(BR2_PACKAGE_BAZ),y)
|
|
17: FOO_CONF_OPTS += -Dbaz=true
|
|
18: FOO_DEPENDENCIES += baz
|
|
19: else
|
|
20: FOO_CONF_OPTS += -Dbaz=false
|
|
21: endif
|
|
22:
|
|
23: $(eval $(meson-package))
|
|
--------------------------------
|
|
|
|
The Makefile starts with the definition of the standard variables for package
|
|
declaration (lines 7 to 11).
|
|
|
|
On line line 23, we invoke the +meson-package+ macro that generates all the
|
|
Makefile rules that actually allows the package to be built.
|
|
|
|
In the example, +host-pkgconf+ and +bar+ are declared as dependencies in
|
|
+FOO_DEPENDENCIES+ at line 14 because the Meson build file of +foo+ uses
|
|
`pkg-config` to determine the compilation flags and libraries of package +bar+.
|
|
|
|
Note that it is not necessary to add +host-meson+ in the +FOO_DEPENDENCIES+
|
|
variable of a package, since this basic dependency is automatically added as
|
|
needed by the Meson package infrastructure.
|
|
|
|
If the "baz" package is selected, then support for the "baz" feature in "foo" is
|
|
activated by adding +-Dbaz=true+ to +FOO_CONF_OPTS+ at line 17, as specified in
|
|
the +meson_options.txt+ file in "foo" source tree. The "baz" package is also
|
|
added to +FOO_DEPENDENCIES+. Note that the support for +baz+ is explicitly
|
|
disabled at line 20, if the package is not selected.
|
|
|
|
To sum it up, to add a new meson-based package, the Makefile example can be
|
|
copied verbatim then edited to replace all occurences of +FOO+ with the
|
|
uppercase name of the new package and update the values of the standard
|
|
variables.
|
|
|
|
[[meson-package-reference]]
|
|
|
|
==== +meson-package+ reference
|
|
|
|
The main macro of the Meson package infrastructure is +meson-package+. It is
|
|
similar to the +generic-package+ macro. The ability to have target and host
|
|
packages is also available, with the +host-meson-package+ macro.
|
|
|
|
Just like the generic infrastructure, the Meson infrastructure works by defining
|
|
a number of variables before calling the +meson-package+ macro.
|
|
|
|
First, all the package metadata information variables that exist in the generic
|
|
infrastructure also exist in the Meson infrastructure: +FOO_VERSION+,
|
|
+FOO_SOURCE+, +FOO_PATCH+, +FOO_SITE+, +FOO_SUBDIR+, +FOO_DEPENDENCIES+,
|
|
+FOO_INSTALL_STAGING+, +FOO_INSTALL_TARGET+.
|
|
|
|
A few additional variables, specific to the Meson infrastructure, can also be
|
|
defined. Many of them are only useful in very specific cases, typical packages
|
|
will therefore only use a few of them.
|
|
|
|
* +FOO_SUBDIR+ may contain the name of a subdirectory inside the
|
|
package that contains the main meson.build file. This is useful,
|
|
if for example, the main meson.build file is not at the root of
|
|
the tree extracted by the tarball. If +HOST_FOO_SUBDIR+ is not
|
|
specified, it defaults to +FOO_SUBDIR+.
|
|
|
|
* +FOO_CONF_ENV+, to specify additional environment variables to pass to
|
|
+meson+ for the configuration step. By default, empty.
|
|
|
|
* +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, the value of
|
|
+TARGET_CFLAGS+.
|
|
|
|
* +FOO_CXXFLAGS+, to specify compiler arguments added to the package specific
|
|
+cross-compile.conf+ file +cpp_args+ property. By default, the value of
|
|
+TARGET_CXXFLAGS+.
|
|
|
|
* +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, the value of +TARGET_LDFLAGS+.
|
|
|
|
* +FOO_MESON_EXTRA_BINARIES+, to specify a space-separated list of programs
|
|
to add to the `[binaries]` section of the meson `cross-compilation.conf`
|
|
configuration file. The format is `program-name='/path/to/program'`, with
|
|
no space around the +=+ sign, and with the path of the program between
|
|
single quotes. By default, empty. Note that Buildroot already sets the
|
|
correct values for +c+, +cpp+, +ar+, +strip+, and +pkgconfig+.
|
|
|
|
* +FOO_MESON_EXTRA_PROPERTIES+, to specify a space-separated list of
|
|
properties to add to the `[properties]` section of the meson
|
|
`cross-compilation.conf` configuration file. The format is
|
|
`property-name=<value>` with no space around the +=+ sign, and with
|
|
single quotes around string values. By default, empty. Note that
|
|
Buildroot already sets values for +needs_exe_wrapper+, +c_args+,
|
|
+c_link_args+, +cpp_args+, +cpp_link_args+, +sys_root+, and
|
|
+pkg_config_libdir+.
|
|
|
|
* +FOO_NINJA_ENV+, to specify additional environment variables to pass to
|
|
+ninja+, meson companion tool in charge of the build operations. By default,
|
|
empty.
|
|
|
|
* +FOO_NINJA_OPTS+, to specify a space-separated list of targets to build. By
|
|
default, empty, to build the default target(s).
|