123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- // -*- 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).
|