diff mbox series

[v4,2/3] kernel: add support to extract compiled files

Message ID 20250514125706.495571-3-daniel.turull@ericsson.com
State New
Headers show
Series Check compiled files to filter kernel CVEs | expand

Commit Message

Daniel Turull May 14, 2025, 12:57 p.m. UTC
From: Daniel Turull <daniel.turull@ericsson.com>

Use gen_compile_commands.py to extract files used during compilation
for the used kernel configuration.

To enable set SPDX_INCLUDED_COMPILED_SOURCES="1"

The location can be controlled with KERNEL_FILES_DIR

CC: Marta Rybczynska <rybczynska@gmail.com>
CC: Bruce Ashfield <bruce.ashfield@gmail.com>
CC: Peter Marko <peter.marko@siemens.com>
Signed-off-by: Daniel Turull <daniel.turull@ericsson.com>
---
 meta/classes-recipe/kernel.bbclass | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
diff mbox series

Patch

diff --git a/meta/classes-recipe/kernel.bbclass b/meta/classes-recipe/kernel.bbclass
index 36ce659762..acef8b86ce 100644
--- a/meta/classes-recipe/kernel.bbclass
+++ b/meta/classes-recipe/kernel.bbclass
@@ -159,6 +159,9 @@  set -e
     image_task = d.getVar('INITRAMFS_TASK')
     if image_task:
         d.appendVarFlag('do_configure', 'depends', ' ${INITRAMFS_TASK}')
+    if d.getVar("SPDX_INCLUDE_COMPILED_SOURCES") == "1":
+        bb.build.addtask('do_save_compiled_files', 'do_build', 'do_compile do_compile_kernelmodules', d)
+        d.appendVarFlag('do_create_spdx', 'depends', f'{pn}:do_save_compiled_files')
 }
 
 # Here we pull in all various kernel image types which we support.
@@ -867,3 +870,19 @@  EXPORT_FUNCTIONS do_deploy
 
 # Add using Device Tree support
 inherit kernel-devicetree
+
+# in case we don't use spdx bbclass
+SPDX_COMPILED_SOURCES_DIR ?= "${LOG_DIR}/spdx-compiled/${PN}"
+SPDX_COMPILED_SOURCES ?= "${SPDX_COMPILED_SOURCES_DIR}/compiled_src-${MACHINE}-${BP}.txt"
+
+KERNEL_COMPILED_FILES ?= "${SPDX_COMPILED_SOURCES_DIR}/compiled_commands-${MACHINE}-${BP}.json"
+
+do_save_compiled_files() {
+    bbdebug 1 "Saving compiled files in ${SPDX_COMPILED_SOURCES}"
+    mkdir -p ${SPDX_COMPILED_SOURCES_DIR}
+    ${S}/scripts/clang-tools/gen_compile_commands.py -o ${KERNEL_COMPILED_FILES} -d ${B}
+    # Make paths releative to the kernel source
+    sed -i 's|${B}/||g' ${KERNEL_COMPILED_FILES}
+    sed -i 's|${S}/||g' ${KERNEL_COMPILED_FILES}
+    grep '"file": ' ${KERNEL_COMPILED_FILES} | awk '{print $2}' | tr -d '"' > ${SPDX_COMPILED_SOURCES}
+}