From c4445538f86929f2cb90f1c2fb42be1aa97911fc Mon Sep 17 00:00:00 2001 From: Linus Svensson Date: Thu, 16 Feb 2017 12:53:59 +0100 Subject: meson.bbclass: Add meson.bbclass Add a class for packages that uses the meson build system. Meson uses a cross-file that contain needed tools and information about the host and target system. Such a file will be created in {WORKDIR}. Meson only allows installation directories to be specified as relative to prefix, except for sysconfdir, which can be absolute. This patch is based on a prototype patch by Ross Burton . Signed-off-by: Linus Svensson Signed-off-by: Martin Jansa --- meta-oe/classes/meson.bbclass | 86 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 meta-oe/classes/meson.bbclass (limited to 'meta-oe/classes') diff --git a/meta-oe/classes/meson.bbclass b/meta-oe/classes/meson.bbclass new file mode 100644 index 0000000000..5a04134f05 --- /dev/null +++ b/meta-oe/classes/meson.bbclass @@ -0,0 +1,86 @@ +inherit python3native + +DEPENDS_append = " meson-native ninja-native" + +# As Meson enforces out-of-tree builds we can just use cleandirs +B = "${WORKDIR}/build" +do_configure[cleandirs] = "${B}" + +# Where the meson.build build configuration is +MESON_SOURCEPATH = "${S}" + +# These variables in the environment override the *native* tools not the cross, +# so they need to be unexported. +CC[unexport] = "1" + +def noprefix(var, d): + return d.getVar(var, True).replace(d.getVar('prefix', True) + '/', '', 1) + +MESONOPTS = " --prefix ${prefix} \ + --bindir ${@noprefix('bindir', d)} \ + --datadir ${@noprefix('datadir', d)} \ + --libdir ${@noprefix('libdir', d)} \ + --libexecdir ${@noprefix('libexecdir', d)} \ + --includedir ${@noprefix('includedir', d)} \ + --mandir ${@noprefix('mandir', d)} \ + --localedir ${@noprefix('localedir', d)} \ + --sysconfdir ${sysconfdir}" + +MESON_C_ARGS = "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" + +MESON_HOST_ENDIAN = "${@bb.utils.contains('SITEINFO_ENDIANNESS', 'be', 'big', 'little', d)}" +MESON_TARGET_ENDIAN = "${@bb.utils.contains('TUNE_FEATURES', 'bigendian', 'big', 'little', d)}" + +EXTRA_OEMESON += "${PACKAGECONFIG_CONFARGS}" + +def meson_array(var, d): + return "', '".join(d.getVar(var, True).split()).join(("'", "'")) + +addtask write_config before do_configure +do_write_config[vardeps] += "MESON_C_ARGS TOOLCHAIN_OPTIONS" +do_write_config() { + # This needs to be Py to split the args into single-element lists + cat >${WORKDIR}/meson.cross <