diff options
| author | Kamel Bouhara (Schneider Electric) <kamel.bouhara@bootlin.com> | 2025-11-07 14:14:35 +0100 |
|---|---|---|
| committer | Steve Sakoman <steve@sakoman.com> | 2025-11-14 06:45:29 -0800 |
| commit | 11cd8498da86c61366e8701a8a49d60120c85248 (patch) | |
| tree | cdec6b8c60c78687612dea2f0b61e81d22dbfdc7 /meta/classes-recipe | |
| parent | d101e1410d05ba8faede730214db99c31476f733 (diff) | |
| download | poky-11cd8498da86c61366e8701a8a49d60120c85248.tar.gz | |
backport: SPDX 3.0 fixes and tasks from upstream version Walnascar
Backports the SPDX 3.0 support and fixes from upstream walnascar
commit 49f47169953b807d430461ca33f3a2b076119712 into upstream
scarthgap.
(From OE-Core rev: 9c9b9545049a2f6e5c99edcb079275d29a4d1ac6)
Signed-off-by: Kamel Bouhara (Schneider Electric) <kamel.bouhara@bootlin.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Diffstat (limited to 'meta/classes-recipe')
| -rw-r--r-- | meta/classes-recipe/create-spdx-image-3.0.bbclass | 85 | ||||
| -rw-r--r-- | meta/classes-recipe/create-spdx-sdk-3.0.bbclass | 74 | ||||
| -rw-r--r-- | meta/classes-recipe/nospdx.bbclass | 13 |
3 files changed, 172 insertions, 0 deletions
diff --git a/meta/classes-recipe/create-spdx-image-3.0.bbclass b/meta/classes-recipe/create-spdx-image-3.0.bbclass new file mode 100644 index 0000000000..e0f1766bb7 --- /dev/null +++ b/meta/classes-recipe/create-spdx-image-3.0.bbclass | |||
| @@ -0,0 +1,85 @@ | |||
| 1 | # | ||
| 2 | # Copyright OpenEmbedded Contributors | ||
| 3 | # | ||
| 4 | # SPDX-License-Identifier: GPL-2.0-only | ||
| 5 | # | ||
| 6 | # SPDX image tasks | ||
| 7 | |||
| 8 | SPDX_ROOTFS_PACKAGES = "${SPDXDIR}/rootfs-packages.json" | ||
| 9 | SPDXIMAGEDEPLOYDIR = "${SPDXDIR}/image-deploy" | ||
| 10 | SPDXROOTFSDEPLOY = "${SPDXDIR}/rootfs-deploy" | ||
| 11 | |||
| 12 | python 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 | } | ||
| 27 | ROOTFS_POSTUNINSTALL_COMMAND =+ "spdx_collect_rootfs_packages" | ||
| 28 | |||
| 29 | python do_create_rootfs_spdx() { | ||
| 30 | import oe.spdx30_tasks | ||
| 31 | oe.spdx30_tasks.create_rootfs_spdx(d) | ||
| 32 | } | ||
| 33 | addtask do_create_rootfs_spdx after do_rootfs before do_image | ||
| 34 | SSTATETASKS += "do_create_rootfs_spdx" | ||
| 35 | do_create_rootfs_spdx[sstate-inputdirs] = "${SPDXROOTFSDEPLOY}" | ||
| 36 | do_create_rootfs_spdx[sstate-outputdirs] = "${DEPLOY_DIR_SPDX}" | ||
| 37 | do_create_rootfs_spdx[recrdeptask] += "do_create_spdx do_create_package_spdx" | ||
| 38 | do_create_rootfs_spdx[cleandirs] += "${SPDXROOTFSDEPLOY}" | ||
| 39 | do_create_rootfs_spdx[file-checksums] += "${SPDX3_LIB_DEP_FILES}" | ||
| 40 | |||
| 41 | python do_create_rootfs_spdx_setscene() { | ||
| 42 | sstate_setscene(d) | ||
| 43 | } | ||
| 44 | addtask do_create_rootfs_spdx_setscene | ||
| 45 | |||
| 46 | python do_create_image_spdx() { | ||
| 47 | import oe.spdx30_tasks | ||
| 48 | oe.spdx30_tasks.create_image_spdx(d) | ||
| 49 | } | ||
| 50 | addtask do_create_image_spdx after do_image_complete do_create_rootfs_spdx before do_build | ||
| 51 | SSTATETASKS += "do_create_image_spdx" | ||
| 52 | SSTATE_SKIP_CREATION:task-create-image-spdx = "1" | ||
| 53 | do_create_image_spdx[sstate-inputdirs] = "${SPDXIMAGEWORK}" | ||
| 54 | do_create_image_spdx[sstate-outputdirs] = "${DEPLOY_DIR_SPDX}" | ||
| 55 | do_create_image_spdx[cleandirs] = "${SPDXIMAGEWORK}" | ||
| 56 | do_create_image_spdx[dirs] = "${SPDXIMAGEWORK}" | ||
| 57 | do_create_image_spdx[file-checksums] += "${SPDX3_LIB_DEP_FILES}" | ||
| 58 | do_create_image_spdx[vardeps] += "\ | ||
| 59 | SPDX_IMAGE_PURPOSE \ | ||
| 60 | " | ||
| 61 | |||
| 62 | python do_create_image_spdx_setscene() { | ||
| 63 | sstate_setscene(d) | ||
| 64 | } | ||
| 65 | addtask do_create_image_spdx_setscene | ||
| 66 | |||
| 67 | |||
| 68 | python do_create_image_sbom_spdx() { | ||
| 69 | import oe.spdx30_tasks | ||
| 70 | oe.spdx30_tasks.create_image_sbom_spdx(d) | ||
| 71 | } | ||
| 72 | addtask do_create_image_sbom_spdx after do_create_rootfs_spdx do_create_image_spdx before do_build | ||
| 73 | SSTATETASKS += "do_create_image_sbom_spdx" | ||
| 74 | SSTATE_SKIP_CREATION:task-create-image-sbom = "1" | ||
| 75 | do_create_image_sbom_spdx[sstate-inputdirs] = "${SPDXIMAGEDEPLOYDIR}" | ||
| 76 | do_create_image_sbom_spdx[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}" | ||
| 77 | do_create_image_sbom_spdx[stamp-extra-info] = "${MACHINE_ARCH}" | ||
| 78 | do_create_image_sbom_spdx[cleandirs] = "${SPDXIMAGEDEPLOYDIR}" | ||
| 79 | do_create_image_sbom_spdx[recrdeptask] += "do_create_spdx do_create_package_spdx" | ||
| 80 | do_create_image_sbom_spdx[file-checksums] += "${SPDX3_LIB_DEP_FILES}" | ||
| 81 | |||
| 82 | python do_create_image_sbom_spdx_setscene() { | ||
| 83 | sstate_setscene(d) | ||
| 84 | } | ||
| 85 | addtask do_create_image_sbom_spdx_setscene | ||
diff --git a/meta/classes-recipe/create-spdx-sdk-3.0.bbclass b/meta/classes-recipe/create-spdx-sdk-3.0.bbclass new file mode 100644 index 0000000000..855fb3d09f --- /dev/null +++ b/meta/classes-recipe/create-spdx-sdk-3.0.bbclass | |||
| @@ -0,0 +1,74 @@ | |||
| 1 | # | ||
| 2 | # Copyright OpenEmbedded Contributors | ||
| 3 | # | ||
| 4 | # SPDX-License-Identifier: GPL-2.0-only | ||
| 5 | # | ||
| 6 | # SPDX SDK tasks | ||
| 7 | |||
| 8 | do_populate_sdk[recrdeptask] += "do_create_spdx do_create_package_spdx" | ||
| 9 | do_populate_sdk[cleandirs] += "${SPDXSDKWORK}" | ||
| 10 | do_populate_sdk[postfuncs] += "sdk_create_sbom" | ||
| 11 | do_populate_sdk[file-checksums] += "${SPDX3_LIB_DEP_FILES}" | ||
| 12 | POPULATE_SDK_POST_HOST_COMMAND:append:task-populate-sdk = " sdk_host_create_spdx" | ||
| 13 | POPULATE_SDK_POST_TARGET_COMMAND:append:task-populate-sdk = " sdk_target_create_spdx" | ||
| 14 | |||
| 15 | do_populate_sdk_ext[recrdeptask] += "do_create_spdx do_create_package_spdx" | ||
| 16 | do_populate_sdk_ext[cleandirs] += "${SPDXSDKEXTWORK}" | ||
| 17 | do_populate_sdk_ext[postfuncs] += "sdk_ext_create_sbom" | ||
| 18 | do_populate_sdk_ext[file-checksums] += "${SPDX3_LIB_DEP_FILES}" | ||
| 19 | POPULATE_SDK_POST_HOST_COMMAND:append:task-populate-sdk-ext = " sdk_ext_host_create_spdx" | ||
| 20 | POPULATE_SDK_POST_TARGET_COMMAND:append:task-populate-sdk-ext = " sdk_ext_target_create_spdx" | ||
| 21 | |||
| 22 | python sdk_host_create_spdx() { | ||
| 23 | from pathlib import Path | ||
| 24 | import oe.spdx30_tasks | ||
| 25 | spdx_work_dir = Path(d.getVar('SPDXSDKWORK')) | ||
| 26 | |||
| 27 | oe.spdx30_tasks.sdk_create_spdx(d, "host", spdx_work_dir, d.getVar("TOOLCHAIN_OUTPUTNAME")) | ||
| 28 | } | ||
| 29 | |||
| 30 | python sdk_target_create_spdx() { | ||
| 31 | from pathlib import Path | ||
| 32 | import oe.spdx30_tasks | ||
| 33 | spdx_work_dir = Path(d.getVar('SPDXSDKWORK')) | ||
| 34 | |||
| 35 | oe.spdx30_tasks.sdk_create_spdx(d, "target", spdx_work_dir, d.getVar("TOOLCHAIN_OUTPUTNAME")) | ||
| 36 | } | ||
| 37 | |||
| 38 | python sdk_ext_host_create_spdx() { | ||
| 39 | from pathlib import Path | ||
| 40 | import oe.spdx30_tasks | ||
| 41 | spdx_work_dir = Path(d.getVar('SPDXSDKEXTWORK')) | ||
| 42 | |||
| 43 | # TODO: This doesn't seem to work | ||
| 44 | oe.spdx30_tasks.sdk_create_spdx(d, "host", spdx_work_dir, d.getVar("TOOLCHAINEXT_OUTPUTNAME")) | ||
| 45 | } | ||
| 46 | |||
| 47 | python sdk_ext_target_create_spdx() { | ||
| 48 | from pathlib import Path | ||
| 49 | import oe.spdx30_tasks | ||
| 50 | spdx_work_dir = Path(d.getVar('SPDXSDKEXTWORK')) | ||
| 51 | |||
| 52 | # TODO: This doesn't seem to work | ||
| 53 | oe.spdx30_tasks.sdk_create_spdx(d, "target", spdx_work_dir, d.getVar("TOOLCHAINEXT_OUTPUTNAME")) | ||
| 54 | } | ||
| 55 | |||
| 56 | |||
| 57 | python sdk_create_sbom() { | ||
| 58 | from pathlib import Path | ||
| 59 | import oe.spdx30_tasks | ||
| 60 | sdk_deploydir = Path(d.getVar("SDKDEPLOYDIR")) | ||
| 61 | spdx_work_dir = Path(d.getVar('SPDXSDKWORK')) | ||
| 62 | |||
| 63 | oe.spdx30_tasks.create_sdk_sbom(d, sdk_deploydir, spdx_work_dir, d.getVar("TOOLCHAIN_OUTPUTNAME")) | ||
| 64 | } | ||
| 65 | |||
| 66 | python sdk_ext_create_sbom() { | ||
| 67 | from pathlib import Path | ||
| 68 | import oe.spdx30_tasks | ||
| 69 | sdk_deploydir = Path(d.getVar("SDKEXTDEPLOYDIR")) | ||
| 70 | spdx_work_dir = Path(d.getVar('SPDXSDKEXTWORK')) | ||
| 71 | |||
| 72 | oe.spdx30_tasks.create_sdk_sbom(d, sdk_deploydir, spdx_work_dir, d.getVar("TOOLCHAINEXT_OUTPUTNAME")) | ||
| 73 | } | ||
| 74 | |||
diff --git a/meta/classes-recipe/nospdx.bbclass b/meta/classes-recipe/nospdx.bbclass new file mode 100644 index 0000000000..b20e28218b --- /dev/null +++ b/meta/classes-recipe/nospdx.bbclass | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | # | ||
| 2 | # Copyright OpenEmbedded Contributors | ||
| 3 | # | ||
| 4 | # SPDX-License-Identifier: MIT | ||
| 5 | # | ||
| 6 | |||
| 7 | deltask do_collect_spdx_deps | ||
| 8 | deltask do_create_spdx | ||
| 9 | deltask do_create_spdx_runtime | ||
| 10 | deltask do_create_package_spdx | ||
| 11 | deltask do_create_rootfs_spdx | ||
| 12 | deltask do_create_image_spdx | ||
| 13 | deltask do_create_image_sbom | ||
