summaryrefslogtreecommitdiffstats
path: root/meta/classes
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2024-07-25 11:40:00 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2024-07-26 12:28:42 +0100
commit7c1de3118fef96fa899ae5365f80ea8ccb1a5876 (patch)
tree2e349c781ace5293048f618f8fa296b55eec99b9 /meta/classes
parent3e29ba2205e2cef66b24af33b76c49148ee4146e (diff)
downloadpoky-7c1de3118fef96fa899ae5365f80ea8ccb1a5876.tar.gz
create-spdx-3.0/populate_sdk_base: Add SDK_CLASSES inherit mechanism to fix tarball SPDX manifests
Currently, "tarball" sdk based recipes don't generate SPDX manifests as they don't include the rootfs generation classes. Split the SPDX 3.0 image class into two so the SDK components can be included where needed. To do this, introduce an SDK_CLASSES variable similar to IMAGE_CLASSES which the SDK code can use. Migrate testsdk usage to this. Also move the image/sdk spdx classes to classes-recipe rather than the general classes directory since they'd never be included on a global level. For buildtools-tarball, it has its own testsdk functions so disable the class there as a deferred inherit would overwrite it. (From OE-Core rev: 662396533177b72cc1d83e95841b27f7e42dcb20) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes')
-rw-r--r--meta/classes/create-spdx-3.0.bbclass1
-rw-r--r--meta/classes/create-spdx-image-3.0.bbclass145
2 files changed, 1 insertions, 145 deletions
diff --git a/meta/classes/create-spdx-3.0.bbclass b/meta/classes/create-spdx-3.0.bbclass
index 2eb44ba808..c1241e5856 100644
--- a/meta/classes/create-spdx-3.0.bbclass
+++ b/meta/classes/create-spdx-3.0.bbclass
@@ -115,6 +115,7 @@ SPDX_PACKAGE_SUPPLIER[doc] = "The base variable name to describe the Agent who \
115 115
116 116
117IMAGE_CLASSES:append = " create-spdx-image-3.0" 117IMAGE_CLASSES:append = " create-spdx-image-3.0"
118SDK_CLASSES += "create-spdx-sdk-3.0"
118 119
119oe.spdx30_tasks.set_timestamp_now[vardepsexclude] = "SPDX_INCLUDE_TIMESTAMPS" 120oe.spdx30_tasks.set_timestamp_now[vardepsexclude] = "SPDX_INCLUDE_TIMESTAMPS"
120oe.spdx30_tasks.get_package_sources_from_debug[vardepsexclude] += "STAGING_KERNEL_DIR" 121oe.spdx30_tasks.get_package_sources_from_debug[vardepsexclude] += "STAGING_KERNEL_DIR"
diff --git a/meta/classes/create-spdx-image-3.0.bbclass b/meta/classes/create-spdx-image-3.0.bbclass
deleted file mode 100644
index 1cad8537d1..0000000000
--- a/meta/classes/create-spdx-image-3.0.bbclass
+++ /dev/null
@@ -1,145 +0,0 @@
1#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: GPL-2.0-only
5#
6# SPDX image tasks
7
8SPDX_ROOTFS_PACKAGES = "${SPDXDIR}/rootfs-packages.json"
9SPDXIMAGEDEPLOYDIR = "${SPDXDIR}/image-deploy"
10SPDXROOTFSDEPLOY = "${SPDXDIR}/rootfs-deploy"
11
12python spdx_collect_rootfs_packages() {
13 import json
14 from pathlib import Path
15 from oe.rootfs import image_list_installed_packages
16
17 root_packages_file = Path(d.getVar("SPDX_ROOTFS_PACKAGES"))
18
19 packages = image_list_installed_packages(d)
20 if not packages:
21 packages = {}
22
23 root_packages_file.parent.mkdir(parents=True, exist_ok=True)
24 with root_packages_file.open("w") as f:
25 json.dump(packages, f)
26}
27ROOTFS_POSTUNINSTALL_COMMAND =+ "spdx_collect_rootfs_packages"
28
29python do_create_rootfs_spdx() {
30 import oe.spdx30_tasks
31 oe.spdx30_tasks.create_rootfs_spdx(d)
32}
33addtask do_create_rootfs_spdx after do_rootfs before do_image
34SSTATETASKS += "do_create_rootfs_spdx"
35do_create_rootfs_spdx[sstate-inputdirs] = "${SPDXROOTFSDEPLOY}"
36do_create_rootfs_spdx[sstate-outputdirs] = "${DEPLOY_DIR_SPDX}"
37do_create_rootfs_spdx[recrdeptask] += "do_create_spdx do_create_package_spdx"
38do_create_rootfs_spdx[cleandirs] += "${SPDXROOTFSDEPLOY}"
39
40python do_create_rootfs_spdx_setscene() {
41 sstate_setscene(d)
42}
43addtask do_create_rootfs_spdx_setscene
44
45python do_create_image_spdx() {
46 import oe.spdx30_tasks
47 oe.spdx30_tasks.create_image_spdx(d)
48}
49addtask do_create_image_spdx after do_image_complete do_create_rootfs_spdx before do_build
50SSTATETASKS += "do_create_image_spdx"
51SSTATE_SKIP_CREATION:task-combine-image-type-spdx = "1"
52do_create_image_spdx[sstate-inputdirs] = "${SPDXIMAGEWORK}"
53do_create_image_spdx[sstate-outputdirs] = "${DEPLOY_DIR_SPDX}"
54do_create_image_spdx[cleandirs] = "${SPDXIMAGEWORK}"
55do_create_image_spdx[dirs] = "${SPDXIMAGEWORK}"
56
57python do_create_image_spdx_setscene() {
58 sstate_setscene(d)
59}
60addtask do_create_image_spdx_setscene
61
62
63python do_create_image_sbom_spdx() {
64 import oe.spdx30_tasks
65 oe.spdx30_tasks.create_image_sbom_spdx(d)
66}
67addtask do_create_image_sbom_spdx after do_create_rootfs_spdx do_create_image_spdx before do_build
68SSTATETASKS += "do_create_image_sbom_spdx"
69SSTATE_SKIP_CREATION:task-create-image-sbom = "1"
70do_create_image_sbom_spdx[sstate-inputdirs] = "${SPDXIMAGEDEPLOYDIR}"
71do_create_image_sbom_spdx[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
72do_create_image_sbom_spdx[stamp-extra-info] = "${MACHINE_ARCH}"
73do_create_image_sbom_spdx[cleandirs] = "${SPDXIMAGEDEPLOYDIR}"
74do_create_image_sbom_spdx[recrdeptask] += "do_create_spdx do_create_package_spdx"
75
76python do_create_image_sbom_spdx_setscene() {
77 sstate_setscene(d)
78}
79addtask do_create_image_sbom_spdx_setscene
80
81do_populate_sdk[recrdeptask] += "do_create_spdx do_create_package_spdx"
82do_populate_sdk[cleandirs] += "${SPDXSDKWORK}"
83do_populate_sdk[postfuncs] += "sdk_create_sbom"
84POPULATE_SDK_POST_HOST_COMMAND:append:task-populate-sdk = " sdk_host_create_spdx"
85POPULATE_SDK_POST_TARGET_COMMAND:append:task-populate-sdk = " sdk_target_create_spdx"
86
87do_populate_sdk_ext[recrdeptask] += "do_create_spdx do_create_package_spdx"
88do_populate_sdk_ext[cleandirs] += "${SPDXSDKEXTWORK}"
89do_populate_sdk_ext[postfuncs] += "sdk_ext_create_sbom"
90POPULATE_SDK_POST_HOST_COMMAND:append:task-populate-sdk-ext = " sdk_ext_host_create_spdx"
91POPULATE_SDK_POST_TARGET_COMMAND:append:task-populate-sdk-ext = " sdk_ext_target_create_spdx"
92
93python sdk_host_create_spdx() {
94 from pathlib import Path
95 import oe.spdx30_tasks
96 spdx_work_dir = Path(d.getVar('SPDXSDKWORK'))
97
98 oe.spdx30_tasks.sdk_create_spdx(d, "host", spdx_work_dir, d.getVar("TOOLCHAIN_OUTPUTNAME"))
99}
100
101python sdk_target_create_spdx() {
102 from pathlib import Path
103 import oe.spdx30_tasks
104 spdx_work_dir = Path(d.getVar('SPDXSDKWORK'))
105
106 oe.spdx30_tasks.sdk_create_spdx(d, "target", spdx_work_dir, d.getVar("TOOLCHAIN_OUTPUTNAME"))
107}
108
109python sdk_ext_host_create_spdx() {
110 from pathlib import Path
111 import oe.spdx30_tasks
112 spdx_work_dir = Path(d.getVar('SPDXSDKEXTWORK'))
113
114 # TODO: This doesn't seem to work
115 oe.spdx30_tasks.sdk_create_spdx(d, "host", spdx_work_dir, d.getVar("TOOLCHAINEXT_OUTPUTNAME"))
116}
117
118python sdk_ext_target_create_spdx() {
119 from pathlib import Path
120 import oe.spdx30_tasks
121 spdx_work_dir = Path(d.getVar('SPDXSDKEXTWORK'))
122
123 # TODO: This doesn't seem to work
124 oe.spdx30_tasks.sdk_create_spdx(d, "target", spdx_work_dir, d.getVar("TOOLCHAINEXT_OUTPUTNAME"))
125}
126
127
128python sdk_create_sbom() {
129 from pathlib import Path
130 import oe.spdx30_tasks
131 sdk_deploydir = Path(d.getVar("SDKDEPLOYDIR"))
132 spdx_work_dir = Path(d.getVar('SPDXSDKWORK'))
133
134 oe.spdx30_tasks.create_sdk_sbom(d, sdk_deploydir, spdx_work_dir, d.getVar("TOOLCHAIN_OUTPUTNAME"))
135}
136
137python sdk_ext_create_sbom() {
138 from pathlib import Path
139 import oe.spdx30_tasks
140 sdk_deploydir = Path(d.getVar("SDKEXTDEPLOYDIR"))
141 spdx_work_dir = Path(d.getVar('SPDXSDKEXTWORK'))
142
143 oe.spdx30_tasks.create_sdk_sbom(d, sdk_deploydir, spdx_work_dir, d.getVar("TOOLCHAINEXT_OUTPUTNAME"))
144}
145