buildman: Add a way to specific a full toolchain prefix

At present buildman allows you to specify the directory containing the
toolchain, but not the actual toolchain prefix. If there are multiple
toolchains in a single directory, this can be inconvenient.

Add a new 'toolchain-prefix' setting to the settings file, which allows
the full prefix (or path to the C compiler) to be specified.

Update the documentation to match.

Suggested-by: Stephen Warren <swarren@wwwdotorg.org>
Reviewed-by: Joe Hershberger <joe.hershberger@ni.com>
Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Stephen Warren <swarren@nvidia.com>
This commit is contained in:
Simon Glass 2016-03-12 18:50:32 -07:00
parent d4c8572b71
commit 17bce66cbf
2 changed files with 226 additions and 110 deletions

View File

@ -169,6 +169,28 @@ Make sure the tags (here root: rest: and eldk:) are unique.
The toolchain-alias section indicates that the i386 toolchain should be used
to build x86 commits.
Note that you can also specific exactly toolchain prefixes if you like:
[toolchain-prefix]
arm: /opt/arm-eabi-4.6/bin/arm-eabi-
or even:
[toolchain-prefix]
arm: /opt/arm-eabi-4.6/bin/arm-eabi-gcc
This tells buildman that you want to use this exact toolchain for the arm
architecture. This will override any toolchains found by searching using the
[toolchain] settings.
Since the toolchain prefix is an explicit request, buildman will report an
error if a toolchain is not found with that prefix. The current PATH will be
searched, so it is possible to use:
[toolchain-prefix]
arm: arm-none-eabi-
and buildman will find arm-none-eabi-gcc in /usr/bin if you have it installed.
3. Make sure you have the require Python pre-requisites
@ -185,124 +207,180 @@ Run this check to make sure that you have a toolchain for every architecture.
$ ./tools/buildman/buildman --list-tool-chains
Scanning for tool chains
- scanning prefix '/opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux-'
Tool chain test: OK, arch='x86', priority 1
- scanning prefix '/opt/arm-eabi-4.6/bin/arm-eabi-'
Tool chain test: OK, arch='arm', priority 1
- scanning path '/toolchains/gcc-4.9.0-nolibc/i386-linux'
- looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/.'
- looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/bin'
- found '/toolchains/gcc-4.9.0-nolibc/i386-linux/bin/i386-linux-gcc'
- looking in '/toolchains/gcc-4.9.0-nolibc/i386-linux/usr/bin'
Tool chain test: OK, arch='i386', priority 4
- scanning path '/toolchains/gcc-4.9.0-nolibc/aarch64-linux'
- looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/.'
- looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin'
- found '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc'
- looking in '/toolchains/gcc-4.9.0-nolibc/aarch64-linux/usr/bin'
Tool chain test: OK, arch='aarch64', priority 4
- scanning path '/toolchains/gcc-4.9.0-nolibc/microblaze-linux'
- looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/.'
- looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin'
- found '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc'
- looking in '/toolchains/gcc-4.9.0-nolibc/microblaze-linux/usr/bin'
Tool chain test: OK, arch='microblaze', priority 4
- scanning path '/toolchains/gcc-4.9.0-nolibc/mips64-linux'
- looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/.'
- looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/bin'
- found '/toolchains/gcc-4.9.0-nolibc/mips64-linux/bin/mips64-linux-gcc'
- looking in '/toolchains/gcc-4.9.0-nolibc/mips64-linux/usr/bin'
Tool chain test: OK, arch='mips64', priority 4
- scanning path '/toolchains/gcc-4.9.0-nolibc/sparc64-linux'
- looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/.'
- looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin'
- found '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin/sparc64-linux-gcc'
- looking in '/toolchains/gcc-4.9.0-nolibc/sparc64-linux/usr/bin'
Tool chain test: OK, arch='sparc64', priority 4
- scanning path '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi'
- looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/.'
- looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin'
- found '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc'
- looking in '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/usr/bin'
Tool chain test: OK, arch='arm', priority 3
Toolchain '/toolchains/gcc-4.9.0-nolibc/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc' at priority 3 will be ignored because another toolchain for arch 'arm' has priority 1
- scanning path '/toolchains/gcc-4.9.0-nolibc/sparc-linux'
- looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/.'
- looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/bin'
- found '/toolchains/gcc-4.9.0-nolibc/sparc-linux/bin/sparc-linux-gcc'
- looking in '/toolchains/gcc-4.9.0-nolibc/sparc-linux/usr/bin'
Tool chain test: OK, arch='sparc', priority 4
- scanning path '/toolchains/gcc-4.9.0-nolibc/mips-linux'
- looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/.'
- looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/bin'
- found '/toolchains/gcc-4.9.0-nolibc/mips-linux/bin/mips-linux-gcc'
- looking in '/toolchains/gcc-4.9.0-nolibc/mips-linux/usr/bin'
Tool chain test: OK, arch='mips', priority 4
- scanning path '/toolchains/gcc-4.9.0-nolibc/x86_64-linux'
- looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/.'
- looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin'
- found '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc'
- found '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-x86_64-linux-gcc'
- looking in '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/usr/bin'
Tool chain test: OK, arch='x86_64', priority 4
Tool chain test: OK, arch='x86_64', priority 4
Toolchain '/toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-x86_64-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'x86_64' has priority 4
- scanning path '/toolchains/gcc-4.9.0-nolibc/m68k-linux'
- looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/.'
- looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/bin'
- found '/toolchains/gcc-4.9.0-nolibc/m68k-linux/bin/m68k-linux-gcc'
- looking in '/toolchains/gcc-4.9.0-nolibc/m68k-linux/usr/bin'
Tool chain test: OK, arch='m68k', priority 4
- scanning path '/toolchains/gcc-4.9.0-nolibc/powerpc-linux'
- looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/.'
- looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin'
- found '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc'
- looking in '/toolchains/gcc-4.9.0-nolibc/powerpc-linux/usr/bin'
Tool chain test: OK, arch='powerpc', priority 4
- scanning path '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux'
- looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/.'
- looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin'
- found '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin/bfin-uclinux-gcc'
- looking in '/toolchains/gcc-4.6.3-nolibc/bfin-uclinux/usr/bin'
Tool chain test: OK, arch='bfin', priority 6
- scanning path '/toolchains/gcc-4.6.3-nolibc/sparc-linux'
- looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/.'
- looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin'
- found '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin/sparc-linux-gcc'
- looking in '/toolchains/gcc-4.6.3-nolibc/sparc-linux/usr/bin'
Tool chain test: OK, arch='sparc', priority 4
Toolchain '/toolchains/gcc-4.6.3-nolibc/sparc-linux/bin/sparc-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'sparc' has priority 4
- scanning path '/toolchains/gcc-4.6.3-nolibc/mips-linux'
- looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/.'
- looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin'
- found '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin/mips-linux-gcc'
- looking in '/toolchains/gcc-4.6.3-nolibc/mips-linux/usr/bin'
Tool chain test: OK, arch='mips', priority 4
Toolchain '/toolchains/gcc-4.6.3-nolibc/mips-linux/bin/mips-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'mips' has priority 4
- scanning path '/toolchains/gcc-4.6.3-nolibc/m68k-linux'
- looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/.'
- looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin'
- found '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin/m68k-linux-gcc'
- looking in '/toolchains/gcc-4.6.3-nolibc/m68k-linux/usr/bin'
Tool chain test: OK, arch='m68k', priority 4
Toolchain '/toolchains/gcc-4.6.3-nolibc/m68k-linux/bin/m68k-linux-gcc' at priority 4 will be ignored because another toolchain for arch 'm68k' has priority 4
- scanning path '/toolchains/gcc-4.6.3-nolibc/powerpc-linux'
- looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/.'
- looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/bin'
- found '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/bin/powerpc-linux-gcc'
- looking in '/toolchains/gcc-4.6.3-nolibc/powerpc-linux/usr/bin'
Tool chain test: OK, arch='powerpc', priority 4
Tool chain test: OK, arch='or32', priority 4
- scanning path '/toolchains/gcc-4.2.4-nolibc/avr32-linux'
- looking in '/toolchains/gcc-4.2.4-nolibc/avr32-linux/.'
- looking in '/toolchains/gcc-4.2.4-nolibc/avr32-linux/bin'
- found '/toolchains/gcc-4.2.4-nolibc/avr32-linux/bin/avr32-linux-gcc'
- looking in '/toolchains/gcc-4.2.4-nolibc/avr32-linux/usr/bin'
Tool chain test: OK, arch='avr32', priority 4
- scanning path '/'
- looking in '/.'
- looking in '/bin'
- looking in '/usr/bin'
- found '/usr/bin/gcc'
Tool chain test: OK
- found '/usr/bin/i586-mingw32msvc-gcc'
- found '/usr/bin/c89-gcc'
Tool chain test: OK
- found '/usr/bin/c99-gcc'
Tool chain test: OK
- found '/usr/bin/x86_64-linux-gnu-gcc'
Tool chain test: OK
- scanning path '/toolchains/powerpc-linux'
- looking in '/toolchains/powerpc-linux/.'
- looking in '/toolchains/powerpc-linux/bin'
- found '/toolchains/powerpc-linux/bin/powerpc-linux-gcc'
Tool chain test: OK
- looking in '/toolchains/powerpc-linux/usr/bin'
- scanning path '/toolchains/nds32le-linux-glibc-v1f'
- looking in '/toolchains/nds32le-linux-glibc-v1f/.'
- looking in '/toolchains/nds32le-linux-glibc-v1f/bin'
- found '/toolchains/nds32le-linux-glibc-v1f/bin/nds32le-linux-gcc'
Tool chain test: OK
- looking in '/toolchains/nds32le-linux-glibc-v1f/usr/bin'
- scanning path '/toolchains/nios2'
- looking in '/toolchains/nios2/.'
- looking in '/toolchains/nios2/bin'
- found '/toolchains/nios2/bin/nios2-linux-gcc'
Tool chain test: OK
- found '/toolchains/nios2/bin/nios2-linux-uclibc-gcc'
Tool chain test: OK
- looking in '/toolchains/nios2/usr/bin'
- found '/toolchains/nios2/usr/bin/nios2-linux-gcc'
Tool chain test: OK
- found '/toolchains/nios2/usr/bin/nios2-linux-uclibc-gcc'
Tool chain test: OK
- scanning path '/toolchains/microblaze-unknown-linux-gnu'
- looking in '/toolchains/microblaze-unknown-linux-gnu/.'
- looking in '/toolchains/microblaze-unknown-linux-gnu/bin'
- found '/toolchains/microblaze-unknown-linux-gnu/bin/microblaze-unknown-linux-gnu-gcc'
Tool chain test: OK
- found '/toolchains/microblaze-unknown-linux-gnu/bin/mb-linux-gcc'
Tool chain test: OK
- looking in '/toolchains/microblaze-unknown-linux-gnu/usr/bin'
- scanning path '/toolchains/mips-linux'
- looking in '/toolchains/mips-linux/.'
- looking in '/toolchains/mips-linux/bin'
- found '/toolchains/mips-linux/bin/mips-linux-gcc'
Tool chain test: OK
- looking in '/toolchains/mips-linux/usr/bin'
- scanning path '/toolchains/old'
- looking in '/toolchains/old/.'
- looking in '/toolchains/old/bin'
- looking in '/toolchains/old/usr/bin'
- scanning path '/toolchains/i386-linux'
- looking in '/toolchains/i386-linux/.'
- looking in '/toolchains/i386-linux/bin'
- found '/toolchains/i386-linux/bin/i386-linux-gcc'
Tool chain test: OK
- looking in '/toolchains/i386-linux/usr/bin'
- scanning path '/toolchains/bfin-uclinux'
- looking in '/toolchains/bfin-uclinux/.'
- looking in '/toolchains/bfin-uclinux/bin'
- found '/toolchains/bfin-uclinux/bin/bfin-uclinux-gcc'
Tool chain test: OK
- looking in '/toolchains/bfin-uclinux/usr/bin'
- scanning path '/toolchains/sparc-elf'
- looking in '/toolchains/sparc-elf/.'
- looking in '/toolchains/sparc-elf/bin'
- found '/toolchains/sparc-elf/bin/sparc-elf-gcc'
Tool chain test: OK
- looking in '/toolchains/sparc-elf/usr/bin'
- scanning path '/toolchains/arm-2010q1'
- looking in '/toolchains/arm-2010q1/.'
- looking in '/toolchains/arm-2010q1/bin'
- found '/toolchains/arm-2010q1/bin/arm-none-linux-gnueabi-gcc'
Tool chain test: OK
- looking in '/toolchains/arm-2010q1/usr/bin'
- scanning path '/toolchains/from'
- looking in '/toolchains/from/.'
- looking in '/toolchains/from/bin'
- looking in '/toolchains/from/usr/bin'
- scanning path '/toolchains/sh4-gentoo-linux-gnu'
- looking in '/toolchains/sh4-gentoo-linux-gnu/.'
- looking in '/toolchains/sh4-gentoo-linux-gnu/bin'
- found '/toolchains/sh4-gentoo-linux-gnu/bin/sh4-gentoo-linux-gnu-gcc'
Tool chain test: OK
- looking in '/toolchains/sh4-gentoo-linux-gnu/usr/bin'
- scanning path '/toolchains/avr32-linux'
- looking in '/toolchains/avr32-linux/.'
- looking in '/toolchains/avr32-linux/bin'
- found '/toolchains/avr32-linux/bin/avr32-gcc'
Tool chain test: OK
- looking in '/toolchains/avr32-linux/usr/bin'
- scanning path '/toolchains/m68k-linux'
- looking in '/toolchains/m68k-linux/.'
- looking in '/toolchains/m68k-linux/bin'
- found '/toolchains/m68k-linux/bin/m68k-linux-gcc'
Tool chain test: OK
- looking in '/toolchains/m68k-linux/usr/bin'
List of available toolchains (17):
arm : /toolchains/arm-2010q1/bin/arm-none-linux-gnueabi-gcc
avr32 : /toolchains/avr32-linux/bin/avr32-gcc
bfin : /toolchains/bfin-uclinux/bin/bfin-uclinux-gcc
- found '/usr/bin/gcc'
- found '/usr/bin/c99-gcc'
- found '/usr/bin/arm-linux-gnueabi-gcc'
- found '/usr/bin/aarch64-linux-gnu-gcc'
- found '/usr/bin/winegcc'
- found '/usr/bin/arm-linux-gnueabihf-gcc'
Tool chain test: OK, arch='i586', priority 11
Tool chain test: OK, arch='c89', priority 11
Tool chain test: OK, arch='x86_64', priority 4
Toolchain '/usr/bin/x86_64-linux-gnu-gcc' at priority 4 will be ignored because another toolchain for arch 'x86_64' has priority 4
Tool chain test: OK, arch='sandbox', priority 11
Tool chain test: OK, arch='c99', priority 11
Tool chain test: OK, arch='arm', priority 4
Toolchain '/usr/bin/arm-linux-gnueabi-gcc' at priority 4 will be ignored because another toolchain for arch 'arm' has priority 1
Tool chain test: OK, arch='aarch64', priority 4
Toolchain '/usr/bin/aarch64-linux-gnu-gcc' at priority 4 will be ignored because another toolchain for arch 'aarch64' has priority 4
Tool chain test: OK, arch='sandbox', priority 11
Toolchain '/usr/bin/winegcc' at priority 11 will be ignored because another toolchain for arch 'sandbox' has priority 11
Tool chain test: OK, arch='arm', priority 4
Toolchain '/usr/bin/arm-linux-gnueabihf-gcc' at priority 4 will be ignored because another toolchain for arch 'arm' has priority 1
List of available toolchains (34):
aarch64 : /toolchains/gcc-4.9.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc
alpha : /toolchains/gcc-4.9.0-nolibc/alpha-linux/bin/alpha-linux-gcc
am33_2.0 : /toolchains/gcc-4.9.0-nolibc/am33_2.0-linux/bin/am33_2.0-linux-gcc
arm : /opt/arm-eabi-4.6/bin/arm-eabi-gcc
avr32 : /toolchains/gcc-4.2.4-nolibc/avr32-linux/bin/avr32-linux-gcc
bfin : /toolchains/gcc-4.6.3-nolibc/bfin-uclinux/bin/bfin-uclinux-gcc
c89 : /usr/bin/c89-gcc
c99 : /usr/bin/c99-gcc
i386 : /toolchains/i386-linux/bin/i386-linux-gcc
m68k : /toolchains/m68k-linux/bin/m68k-linux-gcc
mb : /toolchains/microblaze-unknown-linux-gnu/bin/mb-linux-gcc
microblaze: /toolchains/microblaze-unknown-linux-gnu/bin/microblaze-unknown-linux-gnu-gcc
mips : /toolchains/mips-linux/bin/mips-linux-gcc
nds32le : /toolchains/nds32le-linux-glibc-v1f/bin/nds32le-linux-gcc
nios2 : /toolchains/nios2/bin/nios2-linux-gcc
powerpc : /toolchains/powerpc-linux/bin/powerpc-linux-gcc
frv : /toolchains/gcc-4.9.0-nolibc/frv-linux/bin/frv-linux-gcc
h8300 : /toolchains/gcc-4.9.0-nolibc/h8300-elf/bin/h8300-elf-gcc
hppa : /toolchains/gcc-4.9.0-nolibc/hppa-linux/bin/hppa-linux-gcc
hppa64 : /toolchains/gcc-4.9.0-nolibc/hppa64-linux/bin/hppa64-linux-gcc
i386 : /toolchains/gcc-4.9.0-nolibc/i386-linux/bin/i386-linux-gcc
i586 : /usr/bin/i586-mingw32msvc-gcc
ia64 : /toolchains/gcc-4.9.0-nolibc/ia64-linux/bin/ia64-linux-gcc
m32r : /toolchains/gcc-4.9.0-nolibc/m32r-linux/bin/m32r-linux-gcc
m68k : /toolchains/gcc-4.9.0-nolibc/m68k-linux/bin/m68k-linux-gcc
microblaze: /toolchains/gcc-4.9.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc
mips : /toolchains/gcc-4.9.0-nolibc/mips-linux/bin/mips-linux-gcc
mips64 : /toolchains/gcc-4.9.0-nolibc/mips64-linux/bin/mips64-linux-gcc
or32 : /toolchains/gcc-4.5.1-nolibc/or32-linux/bin/or32-linux-gcc
powerpc : /toolchains/gcc-4.9.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc
powerpc64 : /toolchains/gcc-4.9.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc
ppc64le : /toolchains/gcc-4.9.0-nolibc/ppc64le-linux/bin/ppc64le-linux-gcc
s390x : /toolchains/gcc-4.9.0-nolibc/s390x-linux/bin/s390x-linux-gcc
sandbox : /usr/bin/gcc
sh4 : /toolchains/sh4-gentoo-linux-gnu/bin/sh4-gentoo-linux-gnu-gcc
sparc : /toolchains/sparc-elf/bin/sparc-elf-gcc
x86_64 : /usr/bin/x86_64-linux-gnu-gcc
sh4 : /toolchains/gcc-4.6.3-nolibc/sh4-linux/bin/sh4-linux-gcc
sparc : /toolchains/gcc-4.9.0-nolibc/sparc-linux/bin/sparc-linux-gcc
sparc64 : /toolchains/gcc-4.9.0-nolibc/sparc64-linux/bin/sparc64-linux-gcc
tilegx : /toolchains/gcc-4.6.2-nolibc/tilegx-linux/bin/tilegx-linux-gcc
x86 : /opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux-gcc
x86_64 : /toolchains/gcc-4.9.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc
You can see that everything is covered, even some strange ones that won't

View File

@ -14,7 +14,8 @@ import urllib2
import bsettings
import command
PRIORITY_CALC = 0
(PRIORITY_FULL_PREFIX, PRIORITY_PREFIX_GCC, PRIORITY_PREFIX_GCC_PATH,
PRIORITY_CALC) = range(4)
# Simple class to collect links from a page
class MyHTMLParser(HTMLParser):
@ -152,11 +153,17 @@ class Toolchains:
Public members:
toolchains: Dict of Toolchain objects, keyed by architecture name
prefixes: Dict of prefixes to check, keyed by architecture. This can
be a full path and toolchain prefix, for example
{'x86', 'opt/i386-linux/bin/i386-linux-'}, or the name of
something on the search path, for example
{'arm', 'arm-linux-gnueabihf-'}. Wildcards are not supported.
paths: List of paths to check for toolchains (may contain wildcards)
"""
def __init__(self):
self.toolchains = {}
self.prefixes = {}
self.paths = []
self._make_flags = dict(bsettings.GetItems('make-flags'))
@ -182,6 +189,7 @@ class Toolchains:
return paths
def GetSettings(self):
self.prefixes = bsettings.GetItems('toolchain-prefix')
self.paths += self.GetPathList()
def Add(self, fname, test=True, verbose=False, priority=PRIORITY_CALC,
@ -228,6 +236,21 @@ class Toolchains:
fnames.append(fname)
return fnames
def ScanPathEnv(self, fname):
"""Scan the PATH environment variable for a given filename.
Args:
fname: Filename to scan for
Returns:
List of matching pathanames, or [] if none
"""
pathname_list = []
for path in os.environ["PATH"].split(os.pathsep):
path = path.strip('"')
pathname = os.path.join(path, fname)
if os.path.exists(pathname):
pathname_list.append(pathname)
return pathname_list
def Scan(self, verbose):
"""Scan for available toolchains and select the best for each arch.
@ -240,6 +263,21 @@ class Toolchains:
verbose: True to print out progress information
"""
if verbose: print 'Scanning for tool chains'
for name, value in self.prefixes:
if verbose: print " - scanning prefix '%s'" % value
if os.path.exists(value):
self.Add(value, True, verbose, PRIORITY_FULL_PREFIX, name)
continue
fname = value + 'gcc'
if os.path.exists(fname):
self.Add(fname, True, verbose, PRIORITY_PREFIX_GCC, name)
continue
fname_list = self.ScanPathEnv(fname)
for f in fname_list:
self.Add(f, True, verbose, PRIORITY_PREFIX_GCC_PATH, name)
if not fname_list:
raise ValueError, ("No tool chain found for prefix '%s'" %
value)
for path in self.paths:
if verbose: print " - scanning path '%s'" % path
fnames = self.ScanPath(path, verbose)