scripts: ci: check_compliance: Add support for modules for Kconfig

Adds support for checking modules for disallow Kconfig's in boards
and SoCs, which have been defined in a Zephyr module file

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
This commit is contained in:
Jamie McCrae 2025-03-04 09:11:24 +00:00 committed by Daniel DeGrasse
parent 32d68bed22
commit 6d73a9c45a

View File

@ -10,7 +10,7 @@ from itertools import takewhile
import json
import logging
import os
from pathlib import Path
from pathlib import Path, PurePath
import platform
import re
import subprocess
@ -31,6 +31,11 @@ import magic
from west.manifest import Manifest
from west.manifest import ManifestProject
try:
from yaml import CSafeLoader as SafeLoader
except ImportError:
from yaml import SafeLoader
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from get_maintainer import Maintainers, MaintainersError
import list_boards
@ -751,6 +756,23 @@ class KconfigCheck(ComplianceTest):
return set(kconf_syms)
def module_disallowed_check(self, module_path, type, folder, meta, regex):
# Returns a list with lines from git grep which includes Kconfigs from defconfig files
entry = type + '_root'
git_folder = ":" + folder
if entry in meta['build']['settings']:
tmp_path = module_path.joinpath(meta['build']['settings'][entry])
if Path(tmp_path.joinpath(folder)).is_dir():
tmp_output = git("grep", "--line-number", "-I", "--null",
"--perl-regexp", regex, "--", git_folder,
cwd=tmp_path, ignore_non_zero=True)
if len(tmp_output) > 0:
return tmp_output.splitlines()
return []
def check_disallowed_defconfigs(self, kconf):
"""
Checks that there are no disallowed Kconfigs used in board/SoC defconfig files
@ -799,14 +821,41 @@ class KconfigCheck(ComplianceTest):
grep_stdout_boards = git("grep", "--line-number", "-I", "--null",
"--perl-regexp", regex_boards, "--", ":boards",
cwd=ZEPHYR_BASE)
cwd=ZEPHYR_BASE).splitlines()
grep_stdout_socs = git("grep", "--line-number", "-I", "--null",
"--perl-regexp", regex_socs, "--", ":soc",
cwd=ZEPHYR_BASE)
cwd=ZEPHYR_BASE).splitlines()
manifest = Manifest.from_file()
for project in manifest.get_projects([]):
if not manifest.is_active(project):
continue
if not project.is_cloned():
continue
module_path = PurePath(project.abspath)
module_yml = module_path.joinpath('zephyr/module.yml')
if not Path(module_yml).is_file():
module_yml = module_path.joinpath('zephyr/module.yaml')
if Path(module_yml).is_file():
with Path(module_yml).open('r', encoding='utf-8') as f:
meta = yaml.load(f.read(), Loader=SafeLoader)
if 'build' in meta and 'settings' in meta['build']:
grep_stdout_boards.extend(self.module_disallowed_check(module_path,
'board',
'boards', meta,
regex_boards))
grep_stdout_socs.extend(self.module_disallowed_check(module_path, 'soc',
'soc', meta,
regex_socs))
# Board processing
# splitlines() supports various line terminators
for grep_line in grep_stdout_boards.splitlines():
for grep_line in grep_stdout_boards:
path, lineno, line = grep_line.split("\0")
# Extract symbol references (might be more than one) within the line
@ -823,7 +872,7 @@ Found disallowed Kconfig symbol in board Kconfig files: CONFIG_{sym_name:35}
# SoCs processing
# splitlines() supports various line terminators
for grep_line in grep_stdout_socs.splitlines():
for grep_line in grep_stdout_socs:
path, lineno, line = grep_line.split("\0")
# Extract symbol references (might be more than one) within the line