From 74ba5885a06de4dcea0b34f6fecd23b7e3d074f3 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Wed, 30 May 2018 17:09:47 +0200 Subject: [PATCH] Add a MetaPlatformInfo. A metaplatform allow to regroup sereval platform together. When a target is added to the platform, the target is dispatched/add to all sub platforms. As the step (metaplatformName, target) is not really added, we have to track which steps are really added, so `add_targets` need to return the list of added targets. --- kiwixbuild/builder.py | 11 ++++++----- kiwixbuild/platforms/base.py | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/kiwixbuild/builder.py b/kiwixbuild/builder.py index 8d784e6..0734270 100644 --- a/kiwixbuild/builder.py +++ b/kiwixbuild/builder.py @@ -18,17 +18,18 @@ class Builder: PlatformInfo.get_platform('neutral', self._targets) platform = PlatformInfo.get_platform(option('target_platform'), self._targets) - platform.add_targets(option('targets'), self._targets) + self.targetDefs = platform.add_targets(option('targets'), self._targets) def finalize_target_steps(self): - targetDef = (option('target_platform'), option('targets')) - dependencies = self.order_steps(targetDef) - dependencies = list(remove_duplicates(dependencies)) + steps = [] + for targetDef in self.targetDefs: + steps += self.order_steps(targetDef) + steps = list(remove_duplicates(steps)) if option('build_nodeps'): add_target_step(targetDef, self._targets[targetDef]) else: - for dep in dependencies: + for dep in steps: if option('build_deps_only') and dep == targetDef: continue add_target_step(dep, self._targets[dep]) diff --git a/kiwixbuild/platforms/base.py b/kiwixbuild/platforms/base.py index 7f1e135..94316ec 100644 --- a/kiwixbuild/platforms/base.py +++ b/kiwixbuild/platforms/base.py @@ -58,7 +58,7 @@ class PlatformInfo(metaclass=_MetaPlatform): def add_targets(self, targetName, targets): if (self.name, targetName) in targets: - return + return [] targetClass = Dependency.all_deps[targetName] targets[('source', targetName)] = targetClass.Source targets[(self.name, targetName)] = targetClass.Builder @@ -69,6 +69,7 @@ class PlatformInfo(metaclass=_MetaPlatform): depPlatformName, depName = self.name, dep depPlatform = self.get_platform(depPlatformName, targets) depPlatform.add_targets(depName, targets) + return [(self.name, targetName)] def get_cross_config(self): return {} @@ -102,3 +103,15 @@ class PlatformInfo(metaclass=_MetaPlatform): def clean_intermediate_directories(self): self.buildEnv.clean_intermediate_directories() + + +class MetaPlatformInfo(PlatformInfo): + subPlatformNames = [] + + def add_targets(self, targetName, targets): + targetDefs = [] + for platformName in self.subPlatformNames: + print("radd {}".format(platformName)) + platform = self.get_platform(platformName, targets) + targetDefs += platform.add_targets(targetName, targets) + return targetDefs