Files
linux/scripts/sbom/sbom/environment.py
Luis Augenstein a1a248adf1 scripts/sbom: add command parsers
Implement savedcmd_parser module for extracting input files
from kernel build commands.

Assisted-by: Cursor:claude-sonnet-4-5
Assisted-by: OpenCode:GLM-4-7
Co-developed-by: Maximilian Huber <maximilian.huber@tngtech.com>
Signed-off-by: Maximilian Huber <maximilian.huber@tngtech.com>
Signed-off-by: Luis Augenstein <luis.augenstein@tngtech.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2026-05-22 13:14:41 +02:00

193 lines
3.8 KiB
Python

# SPDX-License-Identifier: GPL-2.0-only OR MIT
# Copyright (C) 2025 TNG Technology Consulting GmbH
import os
KERNEL_BUILD_VARIABLES_ALLOWLIST = [
"AFLAGS_KERNEL",
"AFLAGS_MODULE",
"AR",
"ARCH",
"ARCH_CORE",
"ARCH_DRIVERS",
"ARCH_LIB",
"AWK",
"BASH",
"BINDGEN",
"BITS",
"CC",
"CC_FLAGS_FPU",
"CC_FLAGS_NO_FPU",
"CFLAGS_GCOV",
"CFLAGS_KERNEL",
"CFLAGS_MODULE",
"CHECK",
"CHECKFLAGS",
"CLIPPY_CONF_DIR",
"CONFIG_SHELL",
"CPP",
"CROSS_COMPILE",
"CURDIR",
"GNUMAKEFLAGS",
"HOSTCC",
"HOSTCXX",
"HOSTPKG_CONFIG",
"HOSTRUSTC",
"INSTALLKERNEL",
"INSTALL_DTBS_PATH",
"INSTALL_HDR_PATH",
"INSTALL_PATH",
"KBUILD_AFLAGS",
"KBUILD_AFLAGS_KERNEL",
"KBUILD_AFLAGS_MODULE",
"KBUILD_BUILTIN",
"KBUILD_CFLAGS",
"KBUILD_CFLAGS_KERNEL",
"KBUILD_CFLAGS_MODULE",
"KBUILD_CHECKSRC",
"KBUILD_CLIPPY",
"KBUILD_CPPFLAGS",
"KBUILD_EXTMOD",
"KBUILD_EXTRA_WARN",
"KBUILD_HOSTCFLAGS",
"KBUILD_HOSTCXXFLAGS",
"KBUILD_HOSTLDFLAGS",
"KBUILD_HOSTLDLIBS",
"KBUILD_HOSTRUSTFLAGS",
"KBUILD_IMAGE",
"KBUILD_LDFLAGS",
"KBUILD_LDFLAGS_MODULE",
"KBUILD_LDS",
"KBUILD_MODULES",
"KBUILD_PROCMACROLDFLAGS",
"KBUILD_RUSTFLAGS",
"KBUILD_RUSTFLAGS_KERNEL",
"KBUILD_RUSTFLAGS_MODULE",
"KBUILD_USERCFLAGS",
"KBUILD_USERLDFLAGS",
"KBUILD_VERBOSE",
"KBUILD_VMLINUX_LIBS",
"KBZIP2",
"KCONFIG_CONFIG",
"KERNELDOC",
"KERNELRELEASE",
"KERNELVERSION",
"KGZIP",
"KLZOP",
"LC_COLLATE",
"LC_NUMERIC",
"LD",
"LDFLAGS_MODULE",
"LEX",
"LINUXINCLUDE",
"LZ4",
"LZMA",
"MAKE",
"MAKEFILES",
"MAKEFILE_LIST",
"MAKEFLAGS",
"MAKELEVEL",
"MAKEOVERRIDES",
"MAKE_COMMAND",
"MAKE_HOST",
"MAKE_TERMERR",
"MAKE_TERMOUT",
"MAKE_VERSION",
"MFLAGS",
"MODLIB",
"NM",
"NOSTDINC_FLAGS",
"O",
"OBJCOPY",
"OBJCOPYFLAGS",
"OBJDUMP",
"PAHOLE",
"PATCHLEVEL",
"PERL",
"PYTHON3",
"Q",
"RCS_FIND_IGNORE",
"READELF",
"REALMODE_CFLAGS",
"RESOLVE_BTFIDS",
"RETHUNK_CFLAGS",
"RETHUNK_RUSTFLAGS",
"RETPOLINE_CFLAGS",
"RETPOLINE_RUSTFLAGS",
"RETPOLINE_VDSO_CFLAGS",
"RUSTC",
"RUSTC_BOOTSTRAP",
"RUSTC_OR_CLIPPY",
"RUSTC_OR_CLIPPY_QUIET",
"RUSTDOC",
"RUSTFLAGS_KERNEL",
"RUSTFLAGS_MODULE",
"RUSTFMT",
"SRCARCH",
"STRIP",
"SUBLEVEL",
"SUFFIXES",
"TAR",
"UTS_MACHINE",
"VERSION",
"VPATH",
"XZ",
"YACC",
"ZSTD",
"building_out_of_srctree",
"cross_compiling",
"objtree",
"quiet",
"rust_common_flags",
"srcroot",
"srctree",
"sub_make_done",
"subdir",
]
class Environment:
"""
Read-only accessor for kernel build environment variables.
"""
@classmethod
def KERNEL_BUILD_VARIABLES(cls) -> dict[str, str]:
return {
name: value.strip()
for name in KERNEL_BUILD_VARIABLES_ALLOWLIST
if (value := os.getenv(name)) is not None and value.strip()
}
@classmethod
def ARCH(cls) -> str | None:
return os.getenv("ARCH")
@classmethod
def SRCARCH(cls) -> str | None:
return os.getenv("SRCARCH")
@classmethod
def CC(cls) -> str | None:
return os.getenv("CC")
@classmethod
def LD(cls) -> str | None:
return os.getenv("LD")
@classmethod
def AR(cls) -> str | None:
return os.getenv("AR")
@classmethod
def NM(cls) -> str | None:
return os.getenv("NM")
@classmethod
def OBJCOPY(cls) -> str | None:
return os.getenv("OBJCOPY")
@classmethod
def STRIP(cls) -> str | None:
return os.getenv("STRIP")