waf: Implement module dependency checking in the build system

- Do not build a test if a dependency is not enabled.

- Perform a dependency check and generate an error if an enabled module
  depends on a disabled module.

Closes #4077
This commit is contained in:
Chris Johns
2020-09-15 11:20:44 +10:00
parent c38f93b0c6
commit 7f7363f5f4
5 changed files with 143 additions and 104 deletions

View File

@@ -46,6 +46,10 @@ import builder
import rtems_waf.rtems as rtems
BUILDSET_DIR = builder.BUILDSET_DIR
BUILDSET_DEFAULT = builder.BUILDSET_DEFAULT
windows = os.name == 'nt'
if windows:
@@ -138,16 +142,22 @@ class Builder(builder.ModuleManager):
self.data = {}
for mn in self.getEnabledModules():
enabled_modules = self.getEnabledModules()
for mn in enabled_modules:
m = self[mn]
if m.conditionalOn == "none":
enabled = True
for dep in m.dependencies:
if dep not in enabled_modules:
enabled = False
break
if enabled:
for f in m.files:
_dataInsert(self.data, 'all', f.getSpace(),
f.getFragment())
for cpu, files in sorted(m.cpuDependentSourceFiles.items()):
for f in files:
_dataInsert(self.data, cpu, f.getSpace(),
f.getFragment())
for cpu, files in sorted(m.cpuDependentSourceFiles.items()):
for f in files:
_dataInsert(self.data, cpu, f.getSpace(),
f.getFragment())
# Start here if you need to understand self.data. Add 'True or'
if self.trace: