From 9b83bfdcb0baac4c2f986c600a2a7c2e946ad17c Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 1 Dec 2014 17:34:05 -0700 Subject: [PATCH] buildman: Allow architecture to alias to multiple toolchains Some archs have need than one alias, so support a list of alises in the ..buildman file. Signed-off-by: Simon Glass --- tools/buildman/README | 5 +++-- tools/buildman/test.py | 15 +++++++++++++++ tools/buildman/toolchain.py | 8 +++++--- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/tools/buildman/README b/tools/buildman/README index 865390a6f3..849e6ca763 100644 --- a/tools/buildman/README +++ b/tools/buildman/README @@ -701,8 +701,9 @@ a set of (tag, value) pairs. This converts toolchain architecture names to U-Boot names. For example, if an x86 toolchains is called i386-linux-gcc it will not normally be - used for architecture 'x86'. Adding 'x86: i386' to this section will - tell buildman that the i386 toolchain can be used for x86. + used for architecture 'x86'. Adding 'x86: i386 x86_64' to this section + will tell buildman that the i386 and x86_64 toolchains can be used for + the x86 architecture. '[make-flags]' section diff --git a/tools/buildman/test.py b/tools/buildman/test.py index d19f6ea3d6..25be43ff7d 100644 --- a/tools/buildman/test.py +++ b/tools/buildman/test.py @@ -394,5 +394,20 @@ class TestBuild(unittest.TestCase): build.commit_count = 0 self.CheckDirs(build, '') + def testToolchainAliases(self): + self.assertTrue(self.toolchains.Select('arm') != None) + with self.assertRaises(ValueError): + self.toolchains.Select('no-arch') + with self.assertRaises(ValueError): + self.toolchains.Select('x86') + + self.toolchains = toolchain.Toolchains() + self.toolchains.Add('x86_64-linux-gcc', test=False) + self.assertTrue(self.toolchains.Select('x86') != None) + + self.toolchains = toolchain.Toolchains() + self.toolchains.Add('i386-linux-gcc', test=False) + self.assertTrue(self.toolchains.Select('x86') != None) + if __name__ == "__main__": unittest.main() diff --git a/tools/buildman/toolchain.py b/tools/buildman/toolchain.py index cb693f4641..ad4df8cc9b 100644 --- a/tools/buildman/toolchain.py +++ b/tools/buildman/toolchain.py @@ -185,9 +185,11 @@ class Toolchains: returns: toolchain object, or None if none found """ - for name, value in bsettings.GetItems('toolchain-alias'): - if arch == name: - arch = value + for tag, value in bsettings.GetItems('toolchain-alias'): + if arch == tag: + for alias in value.split(): + if alias in self.toolchains: + return self.toolchains[alias] if not arch in self.toolchains: raise ValueError, ("No tool chain found for arch '%s'" % arch) -- 2.25.1