Skip to content

Commit

Permalink
scripts: enforce module name uniqueness
Browse files Browse the repository at this point in the history
Although CMake scripts already support duplicated module
names, if two modules with the same name provide different
Kconfig files, then both files will be loaded leading to
potential conflicts.

Modify zephyr_module.py to enforce that all modules are
uniquely named so that it is possbile to override some of
the built-in modules using ZEPHYR_EXTRA_MODULES variable.

Signed-off-by: Damian Krolik <[email protected]>
  • Loading branch information
Damian-Nordic authored and nashif committed Mar 10, 2022
1 parent 7f365f4 commit a505148
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 10 deletions.
4 changes: 0 additions & 4 deletions cmake/modules/zephyr_module.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,3 @@ else()
)

endif()

if(DEFINED ZEPHYR_MODULE_NAMES)
list(REMOVE_DUPLICATES ZEPHYR_MODULE_NAMES)
endif()
17 changes: 11 additions & 6 deletions scripts/zephyr_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,8 @@ def parse_modules(zephyr_base, modules=None, extra_modules=None):
extra_modules = []

Module = namedtuple('Module', ['project', 'meta', 'depends'])

all_modules_by_name = {}
# dep_modules is a list of all modules that has an unresolved dependency
dep_modules = []
# start_modules is a list modules with no depends left (no incoming edge)
Expand All @@ -410,16 +412,19 @@ def parse_modules(zephyr_base, modules=None, extra_modules=None):

meta = process_module(project)
if meta:
section = meta.get('build', dict())
deps = section.get('depends', [])
if not deps:
start_modules.append(Module(project, meta, []))
else:
dep_modules.append(Module(project, meta, deps))
depends = meta.get('build', {}).get('depends', [])
all_modules_by_name[meta['name']] = Module(project, meta, depends)

elif project in extra_modules:
sys.exit(f'{project}, given in ZEPHYR_EXTRA_MODULES, '
'is not a valid zephyr module')

for module in all_modules_by_name.values():
if not module.depends:
start_modules.append(module)
else:
dep_modules.append(module)

# This will do a topological sort to ensure the modules are ordered
# according to dependency settings.
while start_modules:
Expand Down

0 comments on commit a505148

Please sign in to comment.