On Mon, 2023-11-20 at 15:46 +0100, Adrian Freihofer wrote:
> Define the CMAKE_CROSSCOMPILING_EMULATOR variable similar to what the
> meson bbclass does. This allows for example to execute cross compilied
> unit tests on the build machine when using an SDK.
> 
> CMAKE_CROSSCOMPILING_EMULATOR is a semi colon separated list of
> paramters which could directly handle the -L and the -E parameters.
> Creating a wrapper script is not absolutely mandatory. But anyway lets
> do it similar to what the meson.bbclass does and also disable pseudo.
> 
> Further information can be found in the camke documentation in the
> CMAKE_CROSSCOMPILING_EMULATOR section.
> 
> Keep the code optional, as the core does not need this function and does
> not intend to use it in the future.
> 
> [YOCTO #15214]
> 
> Signed-off-by: Adrian Freihofer <adrian.freiho...@siemens.com>
> ---
>  meta/classes-recipe/cmake-qemu.bbclass | 28 ++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
>  create mode 100644 meta/classes-recipe/cmake-qemu.bbclass
> 
> diff --git a/meta/classes-recipe/cmake-qemu.bbclass 
> b/meta/classes-recipe/cmake-qemu.bbclass
> new file mode 100644
> index 0000000000..76b748f340
> --- /dev/null
> +++ b/meta/classes-recipe/cmake-qemu.bbclass
> @@ -0,0 +1,28 @@
> +#
> +# Copyright OpenEmbedded Contributors
> +#
> +# SPDX-License-Identifier: MIT
> +#
> +# Not all platforms are supported by Qemu. Using qemu-user therefore
> +# involves a certain risk, which is also the reason why this feature
> +# is not activated by default.

"not part of the main cmake class by default"?

> +
> +inherit qemu
> +
> +CMAKE_EXEWRAPPER_ENABLED:class-native = "False"
> +CMAKE_EXEWRAPPER_ENABLED:class-nativesdk = "False"
> +CMAKE_EXEWRAPPER_ENABLED ?= "${@bb.utils.contains('MACHINE_FEATURES', 
> 'qemu-usermode', 'True', 'False', d)}"
> +DEPENDS:append = "${@' qemu-native' if d.getVar('CMAKE_EXEWRAPPER_ENABLED') 
> == 'True' else ''}"

I suspect making that a DEPENDS:append:class-target might help bitbake
with parsing things a bit.

I'm also a bit torn on CMAKE_EXEWRAPPER_ENABLED and whether we
need/want the variable or just switch on qemu-usermode. I'm guessing
you worked the code this way so you could conditionally bypass it with
different defaults.

> +
> +cmake_do_generate_toolchain_file:append:class-target() {
> +    if [ "${CMAKE_EXEWRAPPER_ENABLED}" = "True" ]; then
> +        # Write out a qemu wrapper that will be used as exe_wrapper so that 
> camake
> +        # can run target helper binaries through that. This also allows to 
> execute ctest.
> +        qemu_binary="${@qemu_wrapper_cmdline(d, '${STAGING_DIR_HOST}', 
> ['${STAGING_DIR_HOST}/${libdir}','${STAGING_DIR_HOST}/${base_libdir}'])}"
> +        echo "#!/bin/sh" > "${WORKDIR}/cmake-qemuwrapper"
> +        echo "$qemu_binary \"\$@\"" >> "${WORKDIR}/cmake-qemuwrapper"
> +        chmod +x "${WORKDIR}/cmake-qemuwrapper"
> +        echo "set( CMAKE_CROSSCOMPILING_EMULATOR 
> ${WORKDIR}/cmake-qemuwrapper)" \
> +          >> ${WORKDIR}/toolchain.cmake
> +    fi

Cheers,

Richard


-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#191160): 
https://lists.openembedded.org/g/openembedded-core/message/191160
Mute This Topic: https://lists.openembedded.org/mt/102708280/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to