Openembedded Core Discussions
 help / color / mirror / Atom feed
From: "Böszörményi Zoltán" <zboszor@gmail.com>
To: Ross Burton <Ross.Burton@arm.com>
Cc: "openembedded-core@lists.openembedded.org"
	<openembedded-core@lists.openembedded.org>
Subject: Re: [OE-core] [PATCH] meson.bbclass: Split into meson-common and meson classes
Date: Wed, 15 Mar 2023 18:20:17 +0100	[thread overview]
Message-ID: <efae316a-c655-ab08-13cb-214be93b59f2@gmail.com> (raw)
In-Reply-To: <0FA14024-12BF-4952-8E22-3D8A64B472FB@arm.com>

2023. 03. 15. 17:52 keltezéssel, Ross Burton írta:
> On 15 Mar 2023, at 08:00, Zoltan Boszormenyi via lists.openembedded.org <zboszor=gmail.com@lists.openembedded.org> wrote:
>> diff --git a/meta/classes-recipe/meson.bbclass b/meta/classes-recipe/meson.bbclass
>> index 48688bed75..f1273aa1c0 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-common
>>
>> # Tell externalsrc that changes to this file require a reconfigure
>> CONFIGURE_FILES = “meson.build”
> This patch appears to move every line from meson.bbclass to meson-common.bbclass,

It's the other way around but git is stupid. What was done is:

git mv meson.bbclass meson-common.bbclass

then moved a few lined from the end of it to the new meson.bbclass file.

Should I do this in two commits to make it reflect what is actually done?

>   apart from the CONFIGURE_FILES line which would still be needed in the python-meson case anyway.
>
> I can’t see what is gained here, just inherit meson.

The problem is that "inherit meson python_pep517" ends up with

do_configure () {
     meson_do_configure
}

do_compile () {
     meson_do_compile
}

when the python_pep517_ prefixed ones are needed.
It has something to do with the fact that both has the line

EXPORT_FUNCTIONS do_configure do_compile do_install

Which one wins may depend on inheritance order but
who's to say for sure and why can't this be order agnostic?

I need most of meson.bbclass for the settings in the new
meta_mesonpy class to pass to meson but using the pep517
machinery.



  reply	other threads:[~2023-03-15 17:20 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-15  8:00 [PATCH] meson.bbclass: Split into meson-common and meson classes Zoltán Böszörményi
2023-03-15 16:52 ` [OE-core] " Ross Burton
2023-03-15 17:20   ` Böszörményi Zoltán [this message]
2023-03-15 23:08     ` Richard Purdie
2023-03-16  5:23       ` Böszörményi Zoltán
2023-03-16 10:22       ` Böszörményi Zoltán
     [not found]       ` <174CDF317CB46FA2.18629@lists.openembedded.org>
2023-03-16 10:37         ` Böszörményi Zoltán
2023-03-15 17:34   ` Böszörményi Zoltán

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=efae316a-c655-ab08-13cb-214be93b59f2@gmail.com \
    --to=zboszor@gmail.com \
    --cc=Ross.Burton@arm.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox