Do not infinit loop when ordering steps

This commit is contained in:
Matthieu Gautier 2018-05-29 17:41:10 +02:00
parent 7e8ed1a623
commit a87ba06bf3
1 changed files with 13 additions and 5 deletions

View File

@ -21,7 +21,7 @@ class Builder:
self.add_targets(self.targetDef, self._targets) self.add_targets(self.targetDef, self._targets)
def finalize_target_steps(self): def finalize_target_steps(self):
dependencies = self.order_dependencies(self.targetDef) dependencies = self.order_steps(self.targetDef)
dependencies = list(remove_duplicates(dependencies)) dependencies = list(remove_duplicates(dependencies))
if option('build_nodeps'): if option('build_nodeps'):
@ -48,27 +48,35 @@ class Builder:
depPlatform, depName = targetPlatformName, dep depPlatform, depName = targetPlatformName, dep
self.add_targets((depPlatform, depName), targets) self.add_targets((depPlatform, depName), targets)
def order_dependencies(self, targetDef): def order_steps(self, targetDef):
for pltName in PlatformInfo.all_running_platforms: for pltName in PlatformInfo.all_running_platforms:
plt = PlatformInfo.all_platforms[pltName] plt = PlatformInfo.all_platforms[pltName]
for tlcName in plt.toolchain_names: for tlcName in plt.toolchain_names:
tlc = Dependency.all_deps[tlcName] tlc = Dependency.all_deps[tlcName]
yield('source', tlcName) yield('source', tlcName)
yield('neutral' if tlc.neutral else pltName, tlcName) yield('neutral' if tlc.neutral else pltName, tlcName)
_targets =dict(self._targets)
yield from self.order_dependencies(targetDef, _targets)
def order_dependencies(self, targetDef, targets):
targetPlatformName, targetName = targetDef targetPlatformName, targetName = targetDef
if targetPlatformName == 'source': if targetPlatformName == 'source':
# Do not try to order sources, they will be added as dep by the # Do not try to order sources, they will be added as dep by the
# build step two lines later. # build step two lines later.
return return
target = self._targets[targetDef] try:
target = targets.pop(targetDef)
except KeyError:
return
targetPlatform = PlatformInfo.get_platform(targetPlatformName) targetPlatform = PlatformInfo.get_platform(targetPlatformName)
for dep in target.get_dependencies(targetPlatform): for dep in target.get_dependencies(targetPlatform):
try: try:
depPlatform, depName = dep depPlatform, depName = dep
except ValueError: except ValueError:
depPlatform, depName = targetPlatformName, dep depPlatform, depName = targetPlatformName, dep
if (depPlatform, depName) in self._targets: if (depPlatform, depName) in targets:
yield from self.order_dependencies((depPlatform, depName)) yield from self.order_dependencies((depPlatform, depName), targets)
yield ('source', targetName) yield ('source', targetName)
yield targetDef yield targetDef