It would help if you explain why existing meson class can't be used directly, and what the meson class adds compared to meson-env that gets in the way of that.
Alex On Fri, 24 Mar 2023 at 04:13, Zoltan Boszormenyi <[email protected]> wrote: > > The new meson-env class will be used by a new PEP517 python > build class using meson-python a.k.a. mesonpy. > > Signed-off-by: Zoltán Böszörményi <[email protected]> > --- > v2: The split-off part is called meson-env.bbclass > because "common" is not liked. > > meta/classes-recipe/meson-env.bbclass | 141 ++++++++++++++++++++++++++ > meta/classes-recipe/meson.bbclass | 136 +------------------------ > 2 files changed, 142 insertions(+), 135 deletions(-) > create mode 100644 meta/classes-recipe/meson-env.bbclass > > diff --git a/meta/classes-recipe/meson-env.bbclass > b/meta/classes-recipe/meson-env.bbclass > new file mode 100644 > index 0000000000..e02b3e5ab6 > --- /dev/null > +++ b/meta/classes-recipe/meson-env.bbclass > @@ -0,0 +1,141 @@ > +# > +# Copyright OpenEmbedded Contributors > +# > +# SPDX-License-Identifier: MIT > +# > + > +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}" > + > +# Where the meson.build build configuration is > +MESON_SOURCEPATH = "${S}" > + > +def noprefix(var, d): > + return d.getVar(var).replace(d.getVar('prefix') + '/', '', 1) > + > +MESON_BUILDTYPE ?= "${@oe.utils.vartrue('DEBUG_BUILD', 'debug', 'plain', d)}" > +MESON_BUILDTYPE[vardeps] += "DEBUG_BUILD" > +MESONOPTS = " --prefix ${prefix} \ > + --buildtype ${MESON_BUILDTYPE} \ > + --bindir ${@noprefix('bindir', d)} \ > + --sbindir ${@noprefix('sbindir', d)} \ > + --datadir ${@noprefix('datadir', d)} \ > + --libdir ${@noprefix('libdir', d)} \ > + --libexecdir ${@noprefix('libexecdir', d)} \ > + --includedir ${@noprefix('includedir', d)} \ > + --mandir ${@noprefix('mandir', d)} \ > + --infodir ${@noprefix('infodir', d)} \ > + --sysconfdir ${sysconfdir} \ > + --localstatedir ${localstatedir} \ > + --sharedstatedir ${sharedstatedir} \ > + --wrap-mode nodownload \ > + --native-file ${WORKDIR}/meson.native" > + > +EXTRA_OEMESON:append = " ${PACKAGECONFIG_CONFARGS}" > + > +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: > + return "" > + cmd = [rustc, "--target", d.getVar(target_var)] + > d.getVar("RUSTFLAGS").split() > + return "rust = %s" % repr(cmd) > + > +addtask write_config before do_configure > +do_write_config[vardeps] += "CC CXX LD AR NM STRIP READELF CFLAGS CXXFLAGS > LDFLAGS RUSTC RUSTFLAGS" > +do_write_config() { > + # This needs to be Py to split the args into single-element lists > + cat >${WORKDIR}/meson.cross <<EOF > +[binaries] > +c = ${@meson_array('CC', d)} > +cpp = ${@meson_array('CXX', d)} > +cython = 'cython3' > +ar = ${@meson_array('AR', d)} > +nm = ${@meson_array('NM', d)} > +strip = ${@meson_array('STRIP', d)} > +readelf = ${@meson_array('READELF', d)} > +objcopy = ${@meson_array('OBJCOPY', d)} > +pkgconfig = 'pkg-config' > +llvm-config = 'llvm-config' > +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)} > +c_link_args = ${@meson_array('LDFLAGS', d)} > +cpp_args = ${@meson_array('CXXFLAGS', d)} > +cpp_link_args = ${@meson_array('LDFLAGS', d)} > + > +[properties] > +needs_exe_wrapper = true > + > +[host_machine] > +system = '${@meson_operating_system('HOST_OS', d)}' > +cpu_family = '${@meson_cpu_family('HOST_ARCH', d)}' > +cpu = '${HOST_ARCH}' > +endian = '${@meson_endian('HOST', d)}' > + > +[target_machine] > +system = '${@meson_operating_system('TARGET_OS', d)}' > +cpu_family = '${@meson_cpu_family('TARGET_ARCH', d)}' > +cpu = '${TARGET_ARCH}' > +endian = '${@meson_endian('TARGET', d)}' > +EOF > + > + cat >${WORKDIR}/meson.native <<EOF > +[binaries] > +c = ${@meson_array('BUILD_CC', d)} > +cpp = ${@meson_array('BUILD_CXX', d)} > +cython = 'cython3' > +ar = ${@meson_array('BUILD_AR', d)} > +nm = ${@meson_array('BUILD_NM', d)} > +strip = ${@meson_array('BUILD_STRIP', d)} > +readelf = ${@meson_array('BUILD_READELF', d)} > +objcopy = ${@meson_array('BUILD_OBJCOPY', d)} > +pkgconfig = 'pkg-config-native' > +${@rust_tool(d, "BUILD_SYS")} > + > +[built-in options] > +c_args = ${@meson_array('BUILD_CFLAGS', d)} > +c_link_args = ${@meson_array('BUILD_LDFLAGS', d)} > +cpp_args = ${@meson_array('BUILD_CXXFLAGS', d)} > +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 > +} > diff --git a/meta/classes-recipe/meson.bbclass > b/meta/classes-recipe/meson.bbclass > index 48688bed75..697cf6ecc8 100644 > --- a/meta/classes-recipe/meson.bbclass > +++ b/meta/classes-recipe/meson.bbclass > @@ -4,141 +4,7 @@ > # SPDX-License-Identifier: MIT > # > > -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}" > - > -# Where the meson.build build configuration is > -MESON_SOURCEPATH = "${S}" > - > -def noprefix(var, d): > - return d.getVar(var).replace(d.getVar('prefix') + '/', '', 1) > - > -MESON_BUILDTYPE ?= "${@oe.utils.vartrue('DEBUG_BUILD', 'debug', 'plain', d)}" > -MESON_BUILDTYPE[vardeps] += "DEBUG_BUILD" > -MESONOPTS = " --prefix ${prefix} \ > - --buildtype ${MESON_BUILDTYPE} \ > - --bindir ${@noprefix('bindir', d)} \ > - --sbindir ${@noprefix('sbindir', d)} \ > - --datadir ${@noprefix('datadir', d)} \ > - --libdir ${@noprefix('libdir', d)} \ > - --libexecdir ${@noprefix('libexecdir', d)} \ > - --includedir ${@noprefix('includedir', d)} \ > - --mandir ${@noprefix('mandir', d)} \ > - --infodir ${@noprefix('infodir', d)} \ > - --sysconfdir ${sysconfdir} \ > - --localstatedir ${localstatedir} \ > - --sharedstatedir ${sharedstatedir} \ > - --wrap-mode nodownload \ > - --native-file ${WORKDIR}/meson.native" > - > -EXTRA_OEMESON:append = " ${PACKAGECONFIG_CONFARGS}" > - > -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: > - return "" > - cmd = [rustc, "--target", d.getVar(target_var)] + > d.getVar("RUSTFLAGS").split() > - return "rust = %s" % repr(cmd) > - > -addtask write_config before do_configure > -do_write_config[vardeps] += "CC CXX LD AR NM STRIP READELF CFLAGS CXXFLAGS > LDFLAGS RUSTC RUSTFLAGS" > -do_write_config() { > - # This needs to be Py to split the args into single-element lists > - cat >${WORKDIR}/meson.cross <<EOF > -[binaries] > -c = ${@meson_array('CC', d)} > -cpp = ${@meson_array('CXX', d)} > -cython = 'cython3' > -ar = ${@meson_array('AR', d)} > -nm = ${@meson_array('NM', d)} > -strip = ${@meson_array('STRIP', d)} > -readelf = ${@meson_array('READELF', d)} > -objcopy = ${@meson_array('OBJCOPY', d)} > -pkgconfig = 'pkg-config' > -llvm-config = 'llvm-config' > -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)} > -c_link_args = ${@meson_array('LDFLAGS', d)} > -cpp_args = ${@meson_array('CXXFLAGS', d)} > -cpp_link_args = ${@meson_array('LDFLAGS', d)} > - > -[properties] > -needs_exe_wrapper = true > - > -[host_machine] > -system = '${@meson_operating_system('HOST_OS', d)}' > -cpu_family = '${@meson_cpu_family('HOST_ARCH', d)}' > -cpu = '${HOST_ARCH}' > -endian = '${@meson_endian('HOST', d)}' > - > -[target_machine] > -system = '${@meson_operating_system('TARGET_OS', d)}' > -cpu_family = '${@meson_cpu_family('TARGET_ARCH', d)}' > -cpu = '${TARGET_ARCH}' > -endian = '${@meson_endian('TARGET', d)}' > -EOF > - > - cat >${WORKDIR}/meson.native <<EOF > -[binaries] > -c = ${@meson_array('BUILD_CC', d)} > -cpp = ${@meson_array('BUILD_CXX', d)} > -cython = 'cython3' > -ar = ${@meson_array('BUILD_AR', d)} > -nm = ${@meson_array('BUILD_NM', d)} > -strip = ${@meson_array('BUILD_STRIP', d)} > -readelf = ${@meson_array('BUILD_READELF', d)} > -objcopy = ${@meson_array('BUILD_OBJCOPY', d)} > -pkgconfig = 'pkg-config-native' > -${@rust_tool(d, "BUILD_SYS")} > - > -[built-in options] > -c_args = ${@meson_array('BUILD_CFLAGS', d)} > -c_link_args = ${@meson_array('BUILD_LDFLAGS', d)} > -cpp_args = ${@meson_array('BUILD_CXXFLAGS', d)} > -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 > -} > +inherit meson-env > > # Tell externalsrc that changes to this file require a reconfigure > CONFIGURE_FILES = "meson.build" > -- > 2.39.2 > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#179012): https://lists.openembedded.org/g/openembedded-core/message/179012 Mute This Topic: https://lists.openembedded.org/mt/97816812/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
