[OE-core] [OE-Core][PATCH v4 1/2] meson.bbclass: Parameterise meson.cross

Khem Raj raj.khem at gmail.com
Sat Feb 15 21:18:08 UTC 2020


On 2/15/20 1:44 AM, Alex Kiernan wrote:
> Add MESON_CROSS_BINARIES, MESON_CROSS_PROPERTIES as a colon separated
> list of meson properties which are exported into meson.cross.
> 

I am seeing errors

13:14:54   File 
"/mnt/jenkins/workspace/yocto-world-glibc/sources/openembedded-core/meta/classes/meson.bbclass", 
line 130
13:14:54     echo "[properties]" > ${WORKDIR}/meson-tracker.cross
13:14:54                       ^
13:14:54 SyntaxError: invalid syntax


> Signed-off-by: Alex Kiernan <alex.kiernan at gmail.com>
> ---
> 
> Changes in v4: None
> Changes in v3:
> - new
> 
> Changes in v2: None
> 
>   meta/classes/meson.bbclass | 161 ++++++++++++++++++++-----------------
>   1 file changed, 86 insertions(+), 75 deletions(-)
> 
> diff --git a/meta/classes/meson.bbclass b/meta/classes/meson.bbclass
> index 06034e8b4731..e778e37d7f69 100644
> --- a/meta/classes/meson.bbclass
> +++ b/meta/classes/meson.bbclass
> @@ -34,88 +34,99 @@ MESON_CROSS_FILE = ""
>   MESON_CROSS_FILE_class-target = "--cross-file ${WORKDIR}/meson.cross"
>   MESON_CROSS_FILE_class-nativesdk = "--cross-file ${WORKDIR}/meson.cross"
>   
> -def meson_array(var, d):
> -    items = d.getVar(var).split()
> -    return repr(items[0] if len(items) == 1 else items)
> -
> -# Map our ARCH values to what Meson expects:
> -# http://mesonbuild.com/Reference-tables.html#cpu-families
> -def meson_cpu_family(var, d):
> -    import re
> -    arch = d.getVar(var)
> -    if arch == 'powerpc':
> -        return 'ppc'
> -    elif arch == 'powerpc64' or arch == 'powerpc64le':
> -        return 'ppc64'
> -    elif arch == 'armeb':
> -        return 'arm'
> -    elif arch == 'aarch64_be':
> -        return 'aarch64'
> -    elif arch == 'mipsel':
> -        return 'mips'
> -    elif arch == 'mips64el':
> -        return 'mips64'
> -    elif re.match(r"i[3-6]86", arch):
> -        return "x86"
> -    elif arch == "microblazeel":
> -        return "microblaze"
> -    else:
> -        return arch
> -
> -# Map our OS values to what Meson expects:
> -# https://mesonbuild.com/Reference-tables.html#operating-system-names
> -def meson_operating_system(var, d):
> -    os = d.getVar(var)
> -    if "mingw" in os:
> -        return "windows"
> -    else:
> -        return os
> -
> -def meson_endian(prefix, d):
> -    arch, os = d.getVar(prefix + "_ARCH"), d.getVar(prefix + "_OS")
> -    sitedata = siteinfo_data_for_machine(arch, os, d)
> -    if "endian-little" in sitedata:
> -        return "little"
> -    elif "endian-big" in sitedata:
> -        return "big"
> -    else:
> -        bb.fatal("Cannot determine endianism for %s-%s" % (arch, os))
> +MESON_CROSS_BINARIES ??= "c:CC \
> +                          cpp:CXX \
> +                          ar:AR \
> +                          nm:NM \
> +                          strip:STRIP \
> +                          readelf:READELF"
> +
> +MESON_CROSS_PROPERTIES ??= "c_args:CFLAGS \
> +                            c_link_args:LDFLAGS \
> +                            cpp_args:CXXFLAGS \
> +                            cpp_link_args:LDFLAGS"
>   
>   addtask write_config before do_configure
> -do_write_config[vardeps] += "CC CXX LD AR NM STRIP READELF CFLAGS CXXFLAGS LDFLAGS"
> -do_write_config() {
> -    # This needs to be Py to split the args into single-element lists
> -    cat >${WORKDIR}/meson.cross <<EOF
> +python do_write_config() {
> +    def meson_array(var):
> +        items = d.getVar(var).split()
> +        return repr(items[0] if len(items) == 1 else items)
> +
> +    # Map our ARCH values to what Meson expects:
> +    # http://mesonbuild.com/Reference-tables.html#cpu-families
> +    def meson_cpu_family(var):
> +        import re
> +        arch = d.getVar(var)
> +        if arch == 'powerpc':
> +            return 'ppc'
> +        elif arch == 'powerpc64' or arch == 'powerpc64le':
> +            return 'ppc64'
> +        elif arch == 'armeb':
> +            return 'arm'
> +        elif arch == 'aarch64_be':
> +            return 'aarch64'
> +        elif arch == 'mipsel':
> +            return 'mips'
> +        elif arch == 'mips64el':
> +            return 'mips64'
> +        elif re.match(r"i[3-6]86", arch):
> +            return "x86"
> +        elif arch == "microblazeel":
> +            return "microblaze"
> +        else:
> +            return arch
> +
> +    # Map our OS values to what Meson expects:
> +    # https://mesonbuild.com/Reference-tables.html#operating-system-names
> +    def meson_operating_system(var):
> +        os = d.getVar(var)
> +        if "mingw" in os:
> +            return "windows"
> +        else:
> +            return os
> +
> +    def meson_endian(prefix):
> +        arch, os = d.getVar(prefix + "_ARCH"), d.getVar(prefix + "_OS")
> +        sitedata = siteinfo_data_for_machine(arch, os, d)
> +        if "endian-little" in sitedata:
> +            return "little"
> +        elif "endian-big" in sitedata:
> +            return "big"
> +        else:
> +            bb.fatal("Cannot determine endianism for %s-%s" % (arch, os))
> +
> +    def meson_write_props(var, f):
> +        for property in d.getVar(var).split():
> +             (k, v) = property.split(':')
> +             print("{} = {}".format(k, meson_array(v)), file=f)
> +             d.appendVarFlag("do_write_config", "vardeps", v)
> +
> +    with open(oe.path.join(d.getVar('WORKDIR'), "meson.cross"), "w") as f:
> +        print("""\
>   [binaries]
> -c = ${@meson_array('CC', d)}
> -cpp = ${@meson_array('CXX', d)}
> -ar = ${@meson_array('AR', d)}
> -nm = ${@meson_array('NM', d)}
> -strip = ${@meson_array('STRIP', d)}
> -readelf = ${@meson_array('READELF', d)}
>   pkgconfig = 'pkg-config'
> -llvm-config = 'llvm-config${LLVMVERSION}'
> +llvm-config = 'llvm-config{}'""".format(d.getVar("LLVMVERSION")), file=f)
> +
> +        meson_write_props('MESON_CROSS_BINARIES', f)
>   
> +        print("""\
>   [properties]
>   needs_exe_wrapper = true
> -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)}
> -gtkdoc_exe_wrapper = '${B}/gtkdoc-qemuwrapper'
> -
> -[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
> +gtkdoc_exe_wrapper = '{}/gtkdoc-qemuwrapper'""".format(d.getVar('B')), file=f)
> +
> +        meson_write_props('MESON_CROSS_PROPERTIES', f)
> +
> +        print("[host_machine]", file=f)
> +        print("system = '{}'".format(meson_operating_system('HOST_OS')), file=f)
> +        print("cpu_family = '{}'".format(meson_cpu_family('HOST_ARCH')), file=f)
> +        print("cpu = '{}'".format(d.getVar('HOST_ARCH')), file=f)
> +        print("endian = '{}'".format(meson_endian('HOST')), file=f)
> +
> +        print("[target_machine]", file=f)
> +        print("system = '{}'".format(meson_operating_system('TARGET_OS')), file=f)
> +        print("cpu_family = '{}'".format(meson_cpu_family('TARGET_ARCH')), file=f)
> +        print("cpu = '{}'".format(d.getVar('TARGET_ARCH')), file=f)
> +        print("endian = '{}'".format(meson_endian('TARGET')), file=f)
>   }
>   
>   CONFIGURE_FILES = "meson.build"
> 



More information about the Openembedded-core mailing list