| Message ID | 20260512-sbom-zstd-support-v1-2-93273381d548@bootlin.com |
|---|---|
| State | New |
| Headers | show |
| Series | spdx3: support SBOM compression with Zstd | expand |
On Tue, 2026-05-12 at 19:01 +0200, Jérémie Dautheribes via lists.openembedded.org wrote: > > objset.objects.add(objset.doc) > - with dest.open("wb") as f: > - serializer.write(objset, f, force_at_graph=True) > + > + if dest.name.endswith(".zst"): > + num_threads = int(d.getVar("BB_NUMBER_THREADS")) > + with bb.compress.zstd.open(dest, "w", num_threads=num_threads) as f: This should be derived from PARALLEL_MAKE, not BB_NUMBER_THREADS. The latter is how many tasks bitbake runs in parallel, the former is how many threads the task should have. There is a function somewhere which extracts the number of jobs from PARALLEL_MAKE... Cheers, Richard
diff --git a/meta/classes/create-spdx-3.0.bbclass b/meta/classes/create-spdx-3.0.bbclass index 785edb9865..6cf8fa4688 100644 --- a/meta/classes/create-spdx-3.0.bbclass +++ b/meta/classes/create-spdx-3.0.bbclass @@ -75,7 +75,8 @@ SPDX_IMPORTS[doc] = "SPDX_IMPORTS is the base variable that describes how to \ SPDX 3 spec. Optional but recommended" SPDX_SBOM_EXT ??= ".spdx.json" -SPDX_SBOM_EXT[doc] = "SBOM file extension name." +SPDX_SBOM_EXT[doc] = "SBOM file extension name.\ + If it ends with '.zst', SBOMs are automatically compressed using Zstd." # Agents # Bitbake variables can be used to describe an SPDX Agent that may be used diff --git a/meta/lib/oe/sbom30.py b/meta/lib/oe/sbom30.py index 0f1f9281ad..2184c1a07f 100644 --- a/meta/lib/oe/sbom30.py +++ b/meta/lib/oe/sbom30.py @@ -1036,8 +1036,15 @@ def write_jsonld_doc(d, objset, dest): serializer = oe.spdx30.JSONLDInlineSerializer() objset.objects.add(objset.doc) - with dest.open("wb") as f: - serializer.write(objset, f, force_at_graph=True) + + if dest.name.endswith(".zst"): + num_threads = int(d.getVar("BB_NUMBER_THREADS")) + with bb.compress.zstd.open(dest, "w", num_threads=num_threads) as f: + serializer.write(objset, f, force_at_graph=True) + else: + with dest.open("wb") as f: + serializer.write(objset, f, force_at_graph=True) + objset.objects.remove(objset.doc)
Add support for optional zstd compression for all types of SBOMs, including: - image SBOM - recipe SBOM - SDK SBOM Zstd compression is applied if SPDX_SBOM_EXT ends with ".zst". Co-authored-by: Benjamin Robin (Schneider Electric) <benjamin.robin@bootlin.com> Signed-off-by: Jérémie Dautheribes (Schneider Electric) <jeremie.dautheribes@bootlin.com> --- meta/classes/create-spdx-3.0.bbclass | 3 ++- meta/lib/oe/sbom30.py | 11 +++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-)