From: "Alexandre Belloni" <alexandre.belloni@bootlin.com>
To: Joshua Watt <JPEWhacker@gmail.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [OE-core][PATCH] classes/package: Add extended packaged data
Date: Thu, 15 Jul 2021 12:32:31 +0200 [thread overview]
Message-ID: <YPAOvwXEbo1+T5/u@piout.net> (raw)
In-Reply-To: <20210713160846.18356-1-JPEWhacker@gmail.com>
Hello Josh,
On 13/07/2021 11:08:46-0500, Joshua Watt wrote:
> Adds extended package data which is encoded as JSON which allows it to
> encode more structure than the "flat" package data files. The extended
> data might be much larger than the standard package data, so it is not
> read by default and instead requires
> oe.packagedata.read_subpkgdata_extended() to be called
>
> Currently, the file sizes and ELF debug sources are saved off into the
> extended package data
>
This break non-gpl3 builds:
https://autobuilder.yoctoproject.org/typhoon/#/builders/75/builds/3685
ERROR: libgcrypt-1.9.3-r0 do_package: One or more file debug sources were not consumed by a package: /usr/bin/dumpsexp
ERROR: libidn2-2.3.1-r0 do_package: One or more file debug sources were not consumed by a package: /usr/bin/idn2
> Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
> ---
> meta/classes/package.bbclass | 38 ++++++++++++++++++++++++++++++++++--
> meta/lib/oe/packagedata.py | 9 +++++++++
> 2 files changed, 45 insertions(+), 2 deletions(-)
>
> diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
> index cf30f33f3d..a0e7f464a9 100644
> --- a/meta/classes/package.bbclass
> +++ b/meta/classes/package.bbclass
> @@ -1225,6 +1225,14 @@ python split_and_strip_files () {
> # Modified the file so clear the cache
> cpath.updatecache(file)
>
> + def strip_pkgd_prefix(f):
> + nonlocal dvar
> +
> + if f.startswith(dvar):
> + return f[len(dvar):]
> +
> + return f
> +
> #
> # First lets process debug splitting
> #
> @@ -1238,6 +1246,8 @@ python split_and_strip_files () {
> for file in staticlibs:
> results.append( (file,source_info(file, d)) )
>
> + d.setVar("PKGDEBUGSOURCES", {strip_pkgd_prefix(f): sorted(s) for f, s in results})
> +
> sources = set()
> for r in results:
> sources.update(r[1])
> @@ -1622,6 +1632,8 @@ fi
> with open(data_file, 'w') as fd:
> fd.write("PACKAGES: %s\n" % packages)
>
> + pkgdebugsource = d.getVar("PKGDEBUGSOURCES") or []
> +
> pn = d.getVar('PN')
> global_variants = (d.getVar('MULTILIB_GLOBAL_VARIANTS') or "").split()
> variants = (d.getVar('MULTILIB_VARIANTS') or "").split()
> @@ -1641,17 +1653,32 @@ fi
> pkgval = pkg
> d.setVar('PKG_%s' % pkg, pkg)
>
> + extended_data = {
> + "files_info": {}
> + }
> +
> pkgdestpkg = os.path.join(pkgdest, pkg)
> files = {}
> + files_extra = {}
> total_size = 0
> seen = set()
> for f in pkgfiles[pkg]:
> - relpth = os.path.relpath(f, pkgdestpkg)
> + fpath = os.sep + os.path.relpath(f, pkgdestpkg)
> +
> fstat = os.lstat(f)
> - files[os.sep + relpth] = fstat.st_size
> + files[fpath] = fstat.st_size
> +
> + extended_data["files_info"].setdefault(fpath, {})
> + extended_data["files_info"][fpath]['size'] = fstat.st_size
> +
> if fstat.st_ino not in seen:
> seen.add(fstat.st_ino)
> total_size += fstat.st_size
> +
> + if fpath in pkgdebugsource:
> + extended_data["files_info"][fpath]['debugsrc'] = pkgdebugsource[fpath]
> + del pkgdebugsource[fpath]
> +
> d.setVar('FILES_INFO', json.dumps(files, sort_keys=True))
>
> process_postinst_on_target(pkg, d.getVar("MLPREFIX"))
> @@ -1672,6 +1699,10 @@ fi
>
> sf.write('%s_%s: %d\n' % ('PKGSIZE', pkg, total_size))
>
> + subdata_extended_file = pkgdatadir + "/runtime/%s.json" % pkg
> + with open(subdata_extended_file, "w") as f:
> + json.dump(extended_data, f, sort_keys=True, separators=(",", ":"))
> +
> # Symlinks needed for rprovides lookup
> rprov = d.getVar('RPROVIDES_%s' % pkg) or d.getVar('RPROVIDES')
> if rprov:
> @@ -1694,6 +1725,9 @@ fi
> packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg
> open(packagedfile, 'w').close()
>
> + if pkgdebugsource:
> + bb.fatal("One or more file debug sources were not consumed by a package: %s" % " ".join(pkgdebugsource.keys()))
> +
> if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d):
> write_extra_runtime_pkgs(variants, packages, pkgdatadir)
>
> diff --git a/meta/lib/oe/packagedata.py b/meta/lib/oe/packagedata.py
> index a82085a792..60485cc79d 100644
> --- a/meta/lib/oe/packagedata.py
> +++ b/meta/lib/oe/packagedata.py
> @@ -57,6 +57,15 @@ def read_subpkgdata_dict(pkg, d):
> ret[newvar] = subd[var]
> return ret
>
> +def read_subpkgdata_extended(pkg, d):
> + import json
> + fn = d.expand("${PKGDATA_DIR}/runtime/%s.json" % pkg)
> + try:
> + with open(fn, "r") as f:
> + return json.load(f)
> + except FileNotFoundError:
> + return None
> +
> def _pkgmap(d):
> """Return a dictionary mapping package to recipe name."""
>
> --
> 2.32.0
>
>
>
>
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2021-07-15 10:32 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-13 16:08 [OE-core][PATCH] classes/package: Add extended packaged data Joshua Watt
2021-07-15 10:32 ` Alexandre Belloni [this message]
2021-08-09 15:05 ` [OE-core][PATCH v2] " Joshua Watt
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=YPAOvwXEbo1+T5/u@piout.net \
--to=alexandre.belloni@bootlin.com \
--cc=JPEWhacker@gmail.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