mirror of
https://git.yoctoproject.org/poky
synced 2026-09-24 22:36:21 +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"
|
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
|
# As Meson enforces out-of-tree builds we can just use cleandirs
|
||||||
B = "${WORKDIR}/build"
|
B = "${WORKDIR}/build"
|
||||||
do_configure[cleandirs] = "${B}"
|
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-target = "--cross-file ${WORKDIR}/meson.cross"
|
||||||
MESON_CROSS_FILE:class-nativesdk = "--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):
|
def rust_tool(d, target_var):
|
||||||
rustc = d.getVar('RUSTC')
|
rustc = d.getVar('RUSTC')
|
||||||
if not rustc:
|
if not rustc:
|
||||||
@@ -62,6 +70,7 @@ cups-config = 'cups-config'
|
|||||||
g-ir-scanner = '${STAGING_BINDIR}/g-ir-scanner-wrapper'
|
g-ir-scanner = '${STAGING_BINDIR}/g-ir-scanner-wrapper'
|
||||||
g-ir-compiler = '${STAGING_BINDIR}/g-ir-compiler-wrapper'
|
g-ir-compiler = '${STAGING_BINDIR}/g-ir-compiler-wrapper'
|
||||||
${@rust_tool(d, "HOST_SYS")}
|
${@rust_tool(d, "HOST_SYS")}
|
||||||
|
${@"exe_wrapper = '${WORKDIR}/meson-qemuwrapper'" if d.getVar('EXEWRAPPER_ENABLED') == 'True' else ""}
|
||||||
|
|
||||||
[built-in options]
|
[built-in options]
|
||||||
c_args = ${@meson_array('CFLAGS', d)}
|
c_args = ${@meson_array('CFLAGS', d)}
|
||||||
@@ -71,7 +80,6 @@ cpp_link_args = ${@meson_array('LDFLAGS', d)}
|
|||||||
|
|
||||||
[properties]
|
[properties]
|
||||||
needs_exe_wrapper = true
|
needs_exe_wrapper = true
|
||||||
gtkdoc_exe_wrapper = '${B}/gtkdoc-qemuwrapper'
|
|
||||||
|
|
||||||
[host_machine]
|
[host_machine]
|
||||||
system = '${@meson_operating_system('HOST_OS', d)}'
|
system = '${@meson_operating_system('HOST_OS', d)}'
|
||||||
@@ -106,6 +114,24 @@ cpp_link_args = ${@meson_array('BUILD_LDFLAGS', d)}
|
|||||||
EOF
|
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
|
# Tell externalsrc that changes to this file require a reconfigure
|
||||||
CONFIGURE_FILES = "meson.build"
|
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>
|
From: Alexander Kanavin <alex.kanavin@gmail.com>
|
||||||
Date: Fri, 4 Aug 2017 16:16:41 +0300
|
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
|
Make it possible to specify a wrapper for executing binaries
|
||||||
|
in cross-compiling scenarios.
|
||||||
(usually, some kind of target hardware emulator, such as qemu)
|
(usually, some kind of target hardware emulator, such as qemu)
|
||||||
|
|
||||||
Upstream-Status: Submitted [https://github.com/mesonbuild/meson/pull/9627]
|
Upstream-Status: Submitted [https://github.com/mesonbuild/meson/pull/9627]
|
||||||
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
|
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
|
||||||
|
|
||||||
---
|
---
|
||||||
mesonbuild/modules/gnome.py | 4 ++++
|
mesonbuild/modules/gnome.py | 5 ++++-
|
||||||
1 file changed, 4 insertions(+)
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
|
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
|
--- a/mesonbuild/modules/gnome.py
|
||||||
+++ b/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}')
|
args.append(f'--{program_name}={path}')
|
||||||
if namespace:
|
if namespace:
|
||||||
args.append('--namespace=' + namespace)
|
args.append('--namespace=' + namespace)
|
||||||
+ gtkdoc_exe_wrapper = state.environment.properties.host.get('gtkdoc_exe_wrapper', None)
|
+ if state.environment.need_exe_wrapper() and not isinstance(state.environment.get_exe_wrapper(), EmptyExternalProgram):
|
||||||
+ if gtkdoc_exe_wrapper is not None:
|
+ args.append('--run=' + ' '.join(state.environment.get_exe_wrapper().get_command()))
|
||||||
+ args.append('--run=' + gtkdoc_exe_wrapper)
|
|
||||||
+
|
+
|
||||||
args += self._unpack_args('--htmlargs=', 'html_args', kwargs)
|
args += self._unpack_args('--htmlargs=', 'html_args', kwargs)
|
||||||
args += self._unpack_args('--scanargs=', 'scan_args', kwargs)
|
args += self._unpack_args('--scanargs=', 'scan_args', kwargs)
|
||||||
|
|||||||
Reference in New Issue
Block a user