@ -3,6 +3,7 @@
# SPDX-License-Identifier: GPL-2.0+
#
import re
import glob
import os
@ -97,12 +98,18 @@ class Toolchains:
def __init__ ( self ) :
self . toolchains = { }
self . paths = [ ]
for name , value in bsettings . GetItems ( ' toolchain ' ) :
toolchains = bsettings . GetItems ( ' toolchain ' )
if not toolchains :
print ( " Warning: No tool chains - please add a [toolchain] section "
" to your buildman config file %s . See README for details " %
config_fname )
for name , value in toolchains :
if ' * ' in value :
self . paths + = glob . glob ( value )
else :
self . paths . append ( value )
self . _make_flags = dict ( bsettings . GetItems ( ' make-flags ' ) )
def Add ( self , fname , test = True , verbose = False ) :
""" Add a toolchain to our list
@ -167,3 +174,73 @@ class Toolchains:
if not arch in self . toolchains :
raise ValueError , ( " No tool chain found for arch ' %s ' " % arch )
return self . toolchains [ arch ]
def ResolveReferences ( self , var_dict , args ) :
""" Resolve variable references in a string
This converts $ { blah } within the string to the value of blah .
This function works recursively .
Args :
var_dict : Dictionary containing variables and their values
args : String containing make arguments
Returns :
Resolved string
>> > bsettings . Setup ( )
>> > tcs = Toolchains ( )
>> > tcs . Add ( ' fred ' , False )
>> > var_dict = { ' oblique ' : ' OBLIQUE ' , ' first ' : ' fi$ {second} rst ' , \
' second ' : ' 2nd ' }
>> > tcs . ResolveReferences ( var_dict , ' this=$ {oblique} _set ' )
' this=OBLIQUE_set '
>> > tcs . ResolveReferences ( var_dict , ' this=$ {oblique} _set$ {first} nd ' )
' this=OBLIQUE_setfi2ndrstnd '
"""
re_var = re . compile ( ' ( \ $ \ { [a-z0-9A-Z] { 1,} \ }) ' )
while True :
m = re_var . search ( args )
if not m :
break
lookup = m . group ( 0 ) [ 2 : - 1 ]
value = var_dict . get ( lookup , ' ' )
args = args [ : m . start ( 0 ) ] + value + args [ m . end ( 0 ) : ]
return args
def GetMakeArguments ( self , board ) :
""" Returns ' make ' arguments for a given board
The flags are in a section called ' make-flags ' . Flags are named
after the target they represent , for example snapper9260 = TESTING = 1
will pass TESTING = 1 to make when building the snapper9260 board .
References to other boards can be added in the string also . For
example :
[ make - flags ]
at91 - boards = ENABLE_AT91_TEST = 1
snapper9260 = $ { at91 - boards } BUILD_TAG = 442
snapper9g45 = $ { at91 - boards } BUILD_TAG = 443
This will return ' ENABLE_AT91_TEST=1 BUILD_TAG=442 ' for snapper9260
and ' ENABLE_AT91_TEST=1 BUILD_TAG=443 ' for snapper9g45 .
A special ' target ' variable is set to the board target .
Args :
board : Board object for the board to check .
Returns :
' make ' flags for that board , or ' ' if none
"""
self . _make_flags [ ' target ' ] = board . target
arg_str = self . ResolveReferences ( self . _make_flags ,
self . _make_flags . get ( board . target , ' ' ) )
args = arg_str . split ( ' ' )
i = 0
while i < len ( args ) :
if not args [ i ] :
del args [ i ]
else :
i + = 1
return args