glib: support target/os/libc-specific Meson cross files

Build systems have a common problem that some tests can only be done by
executing a piece of test code (compared to just compiling or linking test
code).  In a cross-compilation the execution of this code isn't possible and the
Meson solution to this is to allow 'cross properties' to be specified in the
cross files.

GLib has a number of these, for example determining the direction the stack
grows, whether /proc/self/cmdline exists, or the behaviour of snprintf().
Previously we'd passed values for these to the Glib build for target builds, but
this misses out nativesdk builds (which are also cross-compiled) and the fact
that some of these values are specific to the platform, some are specific to the
host OS, and some are specific to the libc implementation.

This problem has already been solved for autotools with the siteinfo class,
which turns the target platform/OS/libc variables into filenames (such as common
common-linux common-glibc).  We can look for these in FILESDIR and use them as
cross files.

Assuming that there are no problems with this appoach it can be moved into
meson.bbclass so that all Meson recipes can use it for their cross files.

(From OE-Core rev: 5acd9cbc9d5c6355010775250fb25f043441c5cd)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ross Burton
2020-01-08 17:19:36 +00:00
committed by Richard Purdie
parent 3189be6d63
commit 64cacd1be4
7 changed files with 45 additions and 7 deletions

View File

@@ -0,0 +1,3 @@
[properties]
# On all known supported architectures the stack grows down
growing_stack = false

View File

@@ -3,8 +3,3 @@ have_c99_vsnprintf = true
have_c99_snprintf = true
have_unix98_printf = true
va_val_copy = true
growing_stack = false
have_proc_self_cmdline = true
[binaries]
env = "/usr/bin/env"

View File

@@ -0,0 +1,5 @@
[properties]
have_proc_self_cmdline = true
[binaries]
env = "/usr/bin/env"

View File

@@ -0,0 +1,6 @@
[properties]
have_c99_vsnprintf = false
have_c99_snprintf = false
have_unix98_printf = false
va_val_copy = true
have_proc_self_cmdline = false

View File

@@ -0,0 +1,6 @@
[properties]
have_c99_vsnprintf = true
have_c99_snprintf = true
have_unix98_printf = true
va_val_copy = true
have_strlcpy = true

View File

@@ -18,7 +18,31 @@ SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \
"
SRC_URI_append_class-native = " file://relocate-modules.patch"
SRC_URI_append_class-target = " file://glib-meson.cross"
SRC_URI[md5sum] = "d52234ecba128932bed90bbc3553bfe5"
SRC_URI[sha256sum] = "4c84030d77fa9712135dfa8036ad663925655ae95b1d19399b6200e869925bbc"
# Find any meson cross files in FILESPATH that are relevant for the current
# build (using siteinfo) and add them to EXTRA_OEMESON.
inherit siteinfo
def find_meson_cross_files(d):
if bb.data.inherits_class('native', d):
return ""
import collections
sitedata = siteinfo_data(d)
# filename -> found
files = collections.OrderedDict()
for path in d.getVar("FILESPATH").split(":"):
for element in sitedata:
filename = os.path.join(path, "meson.cross.d", element)
files[filename] = os.path.exists(filename)
items = ["--cross-file=" + k for k,v in files.items() if v]
d.appendVar("EXTRA_OEMESON", " " + " ".join(items))
items = ["%s:%s" % (k, "True" if v else "False") for k,v in files.items()]
d.appendVarFlag("do_configure", "file-checksums", " " + " ".join(items))
python () {
find_meson_cross_files(d)
}

View File

@@ -49,7 +49,6 @@ PACKAGECONFIG[libelf] = ",,elfutils"
PACKAGECONFIG[tests] = "-Dinstalled_tests=true,-Dinstalled_tests=false,dbus"
EXTRA_OEMESON = "-Ddtrace=false -Dfam=false -Dsystemtap=false -Dselinux=disabled"
EXTRA_OEMESON_append_class-target = " --cross-file ${WORKDIR}/glib-meson.cross"
do_configure_prepend() {
sed -i -e '1s,#!.*,#!${USRBINPATH}/env python3,' ${S}/gio/gdbus-2.0/codegen/gdbus-codegen.in