Files
operating-system/buildroot/docs/manual/adding-packages-meson.txt
Stefan Agner a0871be6c0 Bump buildroot to 2020.11-rc1 (#985)
* Update buildroot-patches for 2020.11-rc1 buildroot

* Update buildroot to 2020.11-rc1

Signed-off-by: Stefan Agner <stefan@agner.ch>

* Don't rely on sfdisk --list-free output

The --list-free (-F) argument does not allow machine readable mode. And
it seems that the output format changes over time (different spacing,
using size postfixes instead of raw blocks).

Use sfdisk json output and calculate free partition space ourselfs. This
works for 2.35 and 2.36 and is more robust since we rely on output which
is meant for scripts to parse.

* Migrate defconfigs for Buildroot 2020.11-rc1

In particular, rename BR2_TARGET_UBOOT_BOOT_SCRIPT(_SOURCE) to
BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT(_SOURCE).

* Rebase/remove systemd patches for systemd 246

* Drop apparmor/libapparmor from buildroot-external

* hassos-persists: use /run as directory for lockfiles

The U-Boot tools use /var/lock by default which is not created any more
by systemd by default (it is under tmpfiles legacy.conf, which we no
longer install).

* Disable systemd-update-done.service

The service is not suited for pure read-only systems. In particular the
service needs to be able to write a file in /etc and /var. Remove the
service. Note: This is a static service and cannot be removed using
systemd-preset.

* Disable apparmor.service for now

The service loads all default profiles. Some might actually cause
problems. E.g. the profile for ping seems not to match our setup for
/etc/resolv.conf:
[85503.634653] audit: type=1400 audit(1605286002.684:236): apparmor="DENIED" operation="open" profile="ping" name="/run/resolv.conf" pid=27585 comm="ping" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
2020-11-13 18:25:44 +01:00

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).