diff --git a/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common
new file mode 100644
index 00000000000..0d7c5fa3f8c
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common
@@ -0,0 +1,3 @@
+[properties]
+# On all known supported architectures the stack grows down
+growing_stack = false
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/glib-meson.cross b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-glibc
similarity index 56%
rename from meta/recipes-core/glib-2.0/glib-2.0/glib-meson.cross
rename to meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-glibc
index 5246c776014..c4648f58c78 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0/glib-meson.cross
+++ b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-glibc
@@ -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"
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-linux b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-linux
new file mode 100644
index 00000000000..83596e0efbb
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-linux
@@ -0,0 +1,5 @@
+[properties]
+have_proc_self_cmdline = true
+
+[binaries]
+env = "/usr/bin/env"
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-mingw b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-mingw
new file mode 100644
index 00000000000..75f911ba1ed
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-mingw
@@ -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
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-musl b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-musl
new file mode 100644
index 00000000000..3049e5116ec
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/meson.cross.d/common-musl
@@ -0,0 +1,6 @@
+[properties]
+have_c99_vsnprintf = true
+have_c99_snprintf = true
+have_unix98_printf = true
+va_val_copy = true
+have_strlcpy = true
diff --git a/meta/recipes-core/glib-2.0/glib-2.0_2.62.4.bb b/meta/recipes-core/glib-2.0/glib-2.0_2.62.4.bb
index 7bf8648cade..953fba501a7 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0_2.62.4.bb
+++ b/meta/recipes-core/glib-2.0/glib-2.0_2.62.4.bb
@@ -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)
+}
diff --git a/meta/recipes-core/glib-2.0/glib.inc b/meta/recipes-core/glib-2.0/glib.inc
index e811b42d773..f4aff297e57 100644
--- a/meta/recipes-core/glib-2.0/glib.inc
+++ b/meta/recipes-core/glib-2.0/glib.inc
@@ -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
