mirror of
https://git.yoctoproject.org/poky
synced 2026-04-23 00:32:12 +02:00
meson: configure and use generic exe_wrapper
This replaces the specific gtkdoc wrapper setting (which was rejected by upstream in https://github.com/mesonbuild/meson/pull/9627) with a generic, officially supported and documented exe_wrapper, which is enabled subject to qemu usermode support (just as is done for g-i and gtk-doc with autotools). gtk-doc support is adjusted so that this wrapper is passed to meson's gtk-doc module, which passes it to gtk-doc. The adjusted patch is re-submitted upstream. The side effect of this is that meson is now able to run target binaries in a generic way when it wants to, so this may affect cross-builds - hopefully in a positive way. (From OE-Core rev: 17fb047282a413aae5af991ecf5bbb225e19581e) Signed-off-by: Alexander Kanavin <alex@linutronix.de> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
a9ad0c267e
commit
40349dc51f
@@ -1,7 +1,12 @@
|
||||
inherit python3native meson-routines
|
||||
inherit python3native meson-routines qemu
|
||||
|
||||
DEPENDS:append = " meson-native ninja-native"
|
||||
|
||||
EXEWRAPPER_ENABLED:class-native = "False"
|
||||
EXEWRAPPER_ENABLED:class-nativesdk = "False"
|
||||
EXEWRAPPER_ENABLED ?= "${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'True', 'False', d)}"
|
||||
DEPENDS:append = "${@' qemu-native' if d.getVar('EXEWRAPPER_ENABLED') == 'True' else ''}"
|
||||
|
||||
# As Meson enforces out-of-tree builds we can just use cleandirs
|
||||
B = "${WORKDIR}/build"
|
||||
do_configure[cleandirs] = "${B}"
|
||||
@@ -36,6 +41,9 @@ MESON_CROSS_FILE = ""
|
||||
MESON_CROSS_FILE:class-target = "--cross-file ${WORKDIR}/meson.cross"
|
||||
MESON_CROSS_FILE:class-nativesdk = "--cross-file ${WORKDIR}/meson.cross"
|
||||
|
||||
# Needed to set up qemu wrapper below
|
||||
export STAGING_DIR_HOST
|
||||
|
||||
def rust_tool(d, target_var):
|
||||
rustc = d.getVar('RUSTC')
|
||||
if not rustc:
|
||||
@@ -62,6 +70,7 @@ cups-config = 'cups-config'
|
||||
g-ir-scanner = '${STAGING_BINDIR}/g-ir-scanner-wrapper'
|
||||
g-ir-compiler = '${STAGING_BINDIR}/g-ir-compiler-wrapper'
|
||||
${@rust_tool(d, "HOST_SYS")}
|
||||
${@"exe_wrapper = '${WORKDIR}/meson-qemuwrapper'" if d.getVar('EXEWRAPPER_ENABLED') == 'True' else ""}
|
||||
|
||||
[built-in options]
|
||||
c_args = ${@meson_array('CFLAGS', d)}
|
||||
@@ -71,7 +80,6 @@ cpp_link_args = ${@meson_array('LDFLAGS', d)}
|
||||
|
||||
[properties]
|
||||
needs_exe_wrapper = true
|
||||
gtkdoc_exe_wrapper = '${B}/gtkdoc-qemuwrapper'
|
||||
|
||||
[host_machine]
|
||||
system = '${@meson_operating_system('HOST_OS', d)}'
|
||||
@@ -106,6 +114,24 @@ cpp_link_args = ${@meson_array('BUILD_LDFLAGS', d)}
|
||||
EOF
|
||||
}
|
||||
|
||||
do_write_config:append:class-target() {
|
||||
# Write out a qemu wrapper that will be used as exe_wrapper so that meson
|
||||
# can run target helper binaries through that.
|
||||
qemu_binary="${@qemu_wrapper_cmdline(d, '$STAGING_DIR_HOST', ['$STAGING_DIR_HOST/${libdir}','$STAGING_DIR_HOST/${base_libdir}'])}"
|
||||
cat > ${WORKDIR}/meson-qemuwrapper << EOF
|
||||
#!/bin/sh
|
||||
# Use a modules directory which doesn't exist so we don't load random things
|
||||
# which may then get deleted (or their dependencies) and potentially segfault
|
||||
export GIO_MODULE_DIR=${STAGING_LIBDIR}/gio/modules-dummy
|
||||
|
||||
# meson sets this wrongly (only to libs in build-dir), qemu-wrapper_cmdline() and GIR_EXTRA_LIBS_PATH take care of it properly
|
||||
unset LD_LIBRARY_PATH
|
||||
|
||||
$qemu_binary "\$@"
|
||||
EOF
|
||||
chmod +x ${WORKDIR}/meson-qemuwrapper
|
||||
}
|
||||
|
||||
# Tell externalsrc that changes to this file require a reconfigure
|
||||
CONFIGURE_FILES = "meson.build"
|
||||
|
||||
|
||||
@@ -1,29 +1,38 @@
|
||||
From 2f9c59e0489e569c5382404667c10f5c200a72ad Mon Sep 17 00:00:00 2001
|
||||
From bbdd6679e49bcba5ec022b240ac234a87b451e41 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Kanavin <alex.kanavin@gmail.com>
|
||||
Date: Fri, 4 Aug 2017 16:16:41 +0300
|
||||
Subject: [PATCH] gtkdoc: fix issues that arise when cross-compiling
|
||||
Subject: [PATCH] gtkdoc: add support for a binary wrapper
|
||||
|
||||
Make it possible to specify a wrapper for executing binaries
|
||||
in cross-compiling scenarios.
|
||||
(usually, some kind of target hardware emulator, such as qemu)
|
||||
|
||||
Upstream-Status: Submitted [https://github.com/mesonbuild/meson/pull/9627]
|
||||
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
|
||||
|
||||
---
|
||||
mesonbuild/modules/gnome.py | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
mesonbuild/modules/gnome.py | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
|
||||
index dc2979e..c9ff9bd 100644
|
||||
index 1c6952d..5a6ff94 100644
|
||||
--- a/mesonbuild/modules/gnome.py
|
||||
+++ b/mesonbuild/modules/gnome.py
|
||||
@@ -1053,6 +1053,10 @@ class GnomeModule(ExtensionModule):
|
||||
@@ -35,7 +35,7 @@ from ..mesonlib import (
|
||||
from ..dependencies import Dependency, PkgConfigDependency, InternalDependency
|
||||
from ..interpreterbase import noPosargs, noKwargs, permittedKwargs, FeatureNew, FeatureNewKwargs, FeatureDeprecatedKwargs, FeatureDeprecated
|
||||
from ..interpreterbase import typed_kwargs, KwargInfo, ContainerTypeInfo
|
||||
-from ..programs import ExternalProgram, OverrideProgram
|
||||
+from ..programs import ExternalProgram, OverrideProgram, EmptyExternalProgram
|
||||
from ..build import CustomTarget, CustomTargetIndex, GeneratedList
|
||||
|
||||
if T.TYPE_CHECKING:
|
||||
@@ -1103,6 +1103,9 @@ class GnomeModule(ExtensionModule):
|
||||
args.append(f'--{program_name}={path}')
|
||||
if namespace:
|
||||
args.append('--namespace=' + namespace)
|
||||
+ gtkdoc_exe_wrapper = state.environment.properties.host.get('gtkdoc_exe_wrapper', None)
|
||||
+ if gtkdoc_exe_wrapper is not None:
|
||||
+ args.append('--run=' + gtkdoc_exe_wrapper)
|
||||
+ if state.environment.need_exe_wrapper() and not isinstance(state.environment.get_exe_wrapper(), EmptyExternalProgram):
|
||||
+ args.append('--run=' + ' '.join(state.environment.get_exe_wrapper().get_command()))
|
||||
+
|
||||
args += self._unpack_args('--htmlargs=', 'html_args', kwargs)
|
||||
args += self._unpack_args('--scanargs=', 'scan_args', kwargs)
|
||||
|
||||
Reference in New Issue
Block a user