summaryrefslogtreecommitdiffstats
path: root/poky/meta/classes/meson.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'poky/meta/classes/meson.bbclass')
-rw-r--r--poky/meta/classes/meson.bbclass106
1 files changed, 67 insertions, 39 deletions
diff --git a/poky/meta/classes/meson.bbclass b/poky/meta/classes/meson.bbclass
index 2d7ee4fff..3cbdcf18c 100644
--- a/poky/meta/classes/meson.bbclass
+++ b/poky/meta/classes/meson.bbclass
@@ -1,4 +1,4 @@
-inherit python3native
+inherit siteinfo python3native
DEPENDS_append = " meson-native ninja-native"
@@ -24,25 +24,52 @@ MESONOPTS = " --prefix ${prefix} \
--infodir ${@noprefix('infodir', d)} \
--sysconfdir ${sysconfdir} \
--localstatedir ${localstatedir} \
- --sharedstatedir ${sharedstatedir}"
+ --sharedstatedir ${sharedstatedir} \
+ -Dc_args='${BUILD_CPPFLAGS} ${BUILD_CFLAGS}' \
+ -Dc_link_args='${BUILD_LDFLAGS}' \
+ -Dcpp_args='${BUILD_CPPFLAGS} ${BUILD_CXXFLAGS}' \
+ -Dcpp_link_args='${BUILD_LDFLAGS}'"
MESON_TOOLCHAIN_ARGS = "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
MESON_C_ARGS = "${MESON_TOOLCHAIN_ARGS} ${CFLAGS}"
MESON_CPP_ARGS = "${MESON_TOOLCHAIN_ARGS} ${CXXFLAGS}"
MESON_LINK_ARGS = "${MESON_TOOLCHAIN_ARGS} ${LDFLAGS}"
-# both are required but not used by meson
-MESON_HOST_ENDIAN = "bogus-endian"
-MESON_TARGET_ENDIAN = "bogus-endian"
-
-EXTRA_OEMESON += "${PACKAGECONFIG_CONFARGS}"
+EXTRA_OEMESON_append = " ${PACKAGECONFIG_CONFARGS}"
MESON_CROSS_FILE = ""
MESON_CROSS_FILE_class-target = "--cross-file ${WORKDIR}/meson.cross"
MESON_CROSS_FILE_class-nativesdk = "--cross-file ${WORKDIR}/meson.cross"
def meson_array(var, d):
- return "', '".join(d.getVar(var).split()).join(("'", "'"))
+ items = d.getVar(var).split()
+ return repr(items[0] if len(items) == 1 else items)
+
+# Map our ARCH values to what Meson expects:
+# http://mesonbuild.com/Reference-tables.html#cpu-families
+def meson_cpu_family(var, d):
+ import re
+ arch = d.getVar(var)
+ if arch == 'powerpc':
+ return 'ppc'
+ elif arch == 'powerpc64':
+ return 'ppc64'
+ elif arch == 'mipsel':
+ return 'mips'
+ elif re.match(r"i[3-6]86", arch):
+ return "x86"
+ else:
+ return arch
+
+def meson_endian(prefix, d):
+ arch, os = d.getVar(prefix + "_ARCH"), d.getVar(prefix + "_OS")
+ sitedata = siteinfo_data_for_machine(arch, os, d)
+ if "endian-little" in sitedata:
+ return "little"
+ elif "endian-big" in sitedata:
+ return "big"
+ else:
+ bb.fatal("Cannot determine endianism for %s-%s" % (arch, os))
addtask write_config before do_configure
do_write_config[vardeps] += "MESON_C_ARGS MESON_CPP_ARGS MESON_LINK_ARGS CC CXX LD AR NM STRIP READELF"
@@ -50,68 +77,69 @@ do_write_config() {
# This needs to be Py to split the args into single-element lists
cat >${WORKDIR}/meson.cross <<EOF
[binaries]
-c = [${@meson_array('CC', d)}]
-cpp = [${@meson_array('CXX', d)}]
-ar = [${@meson_array('AR', d)}]
-nm = [${@meson_array('NM', d)}]
-ld = [${@meson_array('LD', d)}]
-strip = [${@meson_array('STRIP', d)}]
-readelf = [${@meson_array('READELF', d)}]
+c = ${@meson_array('CC', d)}
+cpp = ${@meson_array('CXX', d)}
+ar = ${@meson_array('AR', d)}
+nm = ${@meson_array('NM', d)}
+ld = ${@meson_array('LD', d)}
+strip = ${@meson_array('STRIP', d)}
+readelf = ${@meson_array('READELF', d)}
pkgconfig = 'pkg-config'
[properties]
needs_exe_wrapper = true
-c_args = [${@meson_array('MESON_C_ARGS', d)}]
-c_link_args = [${@meson_array('MESON_LINK_ARGS', d)}]
-cpp_args = [${@meson_array('MESON_CPP_ARGS', d)}]
-cpp_link_args = [${@meson_array('MESON_LINK_ARGS', d)}]
+c_args = ${@meson_array('MESON_C_ARGS', d)}
+c_link_args = ${@meson_array('MESON_LINK_ARGS', d)}
+cpp_args = ${@meson_array('MESON_CPP_ARGS', d)}
+cpp_link_args = ${@meson_array('MESON_LINK_ARGS', d)}
gtkdoc_exe_wrapper = '${B}/gtkdoc-qemuwrapper'
[host_machine]
system = '${HOST_OS}'
-cpu_family = '${HOST_ARCH}'
+cpu_family = '${@meson_cpu_family('HOST_ARCH', d)}'
cpu = '${HOST_ARCH}'
-endian = '${MESON_HOST_ENDIAN}'
+endian = '${@meson_endian('HOST', d)}'
[target_machine]
system = '${TARGET_OS}'
-cpu_family = '${TARGET_ARCH}'
+cpu_family = '${@meson_cpu_family('TARGET_ARCH', d)}'
cpu = '${TARGET_ARCH}'
-endian = '${MESON_TARGET_ENDIAN}'
+endian = '${@meson_endian('TARGET', d)}'
EOF
}
CONFIGURE_FILES = "meson.build"
meson_do_configure() {
+ # Work around "Meson fails if /tmp is mounted with noexec #2972"
+ mkdir -p "${B}/meson-private/tmp"
+ export TMPDIR="${B}/meson-private/tmp"
+ bbnote Executing meson ${EXTRA_OEMESON}...
if ! meson ${MESONOPTS} "${MESON_SOURCEPATH}" "${B}" ${MESON_CROSS_FILE} ${EXTRA_OEMESON}; then
- cat ${B}/meson-logs/meson-log.txt
bbfatal_log meson failed
fi
}
-meson_do_configure_prepend_class-target() {
+override_native_tools() {
# Set these so that meson uses the native tools for its build sanity tests,
# which require executables to be runnable. The cross file will still
- # override these for the target build. Note that we do *not* set CFLAGS,
- # LDFLAGS, etc. as they will be slurped in by meson and applied to the
- # target build, causing errors.
+ # override these for the target build.
export CC="${BUILD_CC}"
export CXX="${BUILD_CXX}"
export LD="${BUILD_LD}"
export AR="${BUILD_AR}"
+ # These contain *target* flags but will be used as *native* flags. The
+ # correct native flags will be passed via -Dc_args and so on, unset them so
+ # they don't interfere with tools invoked by Meson (such as g-ir-scanner)
+ unset CPPFLAGS CFLAGS CXXFLAGS LDFLAGS
+}
+
+meson_do_configure_prepend_class-target() {
+ override_native_tools
}
meson_do_configure_prepend_class-nativesdk() {
- # Set these so that meson uses the native tools for its build sanity tests,
- # which require executables to be runnable. The cross file will still
- # override these for the nativesdk build. Note that we do *not* set CFLAGS,
- # LDFLAGS, etc. as they will be slurped in by meson and applied to the
- # nativesdk build, causing errors.
- export CC="${BUILD_CC}"
- export CXX="${BUILD_CXX}"
- export LD="${BUILD_LD}"
- export AR="${BUILD_AR}"
+ override_native_tools
}
meson_do_configure_prepend_class-native() {
@@ -120,11 +148,11 @@ meson_do_configure_prepend_class-native() {
do_compile[progress] = "outof:^\[(\d+)/(\d+)\]\s+"
meson_do_compile() {
- ninja ${PARALLEL_MAKE}
+ ninja -v ${PARALLEL_MAKE}
}
meson_do_install() {
- DESTDIR='${D}' ninja ${PARALLEL_MAKEINST} install
+ DESTDIR='${D}' ninja -v ${PARALLEL_MAKEINST} install
}
EXPORT_FUNCTIONS do_configure do_compile do_install
OpenPOWER on IntegriCloud