From 0d2020fcffa00cc2464ce80e749fe99b9dfab2a0 Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Thu, 4 Jan 2018 15:12:30 +0200 Subject: meson: add a recipe and class from meta-oe The original recipe has been provided and improved by: Ross Burton Ricardo Ribalda Delgado Adam C. Foltzer Peter Kjellerstedt Linus Svensson I have added patches to fix up gtk-doc and gobject-introspection in cross-compilation environments, and also change the order of linker arguments to replicate autotools more closely (and fix linking errors in some corner cases). (From OE-Core rev: 1f8dea686cdfd6d360ba4a97f62d274c39eaeb8e) Signed-off-by: Alexander Kanavin Signed-off-by: Richard Purdie --- meta/classes/meson.bbclass | 108 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 meta/classes/meson.bbclass (limited to 'meta/classes/meson.bbclass') diff --git a/meta/classes/meson.bbclass b/meta/classes/meson.bbclass new file mode 100644 index 0000000000..5953b5d698 --- /dev/null +++ b/meta/classes/meson.bbclass @@ -0,0 +1,108 @@ +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 meson's *native* tools settings. +# We have to unset them, so that meson doesn't pick up the cross tools and +# use them for native builds. +unset CC +unset CXX +unset AR + +def noprefix(var, d): + return d.getVar(var).replace(d.getVar('prefix') + '/', '', 1) + +MESONOPTS = " --prefix ${prefix} \ + --bindir ${@noprefix('bindir', d)} \ + --sbindir ${@noprefix('sbindir', d)} \ + --datadir ${@noprefix('datadir', d)} \ + --libdir ${@noprefix('libdir', d)} \ + --libexecdir ${@noprefix('libexecdir', d)} \ + --includedir ${@noprefix('includedir', d)} \ + --mandir ${@noprefix('mandir', d)} \ + --infodir ${@noprefix('infodir', d)} \ + --sysconfdir ${sysconfdir} \ + --localstatedir ${localstatedir} \ + --sharedstatedir ${sharedstatedir}" + +MESON_C_ARGS = "${TARGET_CC_ARCH}${TOOLCHAIN_OPTIONS}" +MESON_LINK_ARGS = "${MESON_C_ARGS} ${LDFLAGS}" + +# both are required but not used by meson +MESON_HOST_ENDIAN = "bogus-endian" +MESON_TARGET_ENDIAN = "bogus-endian" + +EXTRA_OEMESON += "${PACKAGECONFIG_CONFARGS}" + +MESON_CROSS_FILE = "" +MESON_CROSS_FILE_class-target = "--cross-file ${WORKDIR}/meson.cross" + +def meson_array(var, d): + return "', '".join(d.getVar(var).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 <