@ -35,6 +35,7 @@ class Systems:
@@ -35,6 +35,7 @@ class Systems:
self . _socs = [ ]
self . _series = [ ]
self . _families = [ ]
self . _extended_socs = [ ]
if soc_yaml is None :
return
@ -47,12 +48,12 @@ class Systems:
@@ -47,12 +48,12 @@ class Systems:
sys . exit ( f ' ERROR: Malformed yaml { soc_yaml . as_posix ( ) } ' , e )
for f in data . get ( ' family ' , [ ] ) :
family = Family ( f [ ' name ' ] , folder , [ ] , [ ] )
family = Family ( f [ ' name ' ] , [ folder ] , [ ] , [ ] )
for s in f . get ( ' series ' , [ ] ) :
series = Series ( s [ ' name ' ] , folder , f [ ' name ' ] , [ ] )
series = Series ( s [ ' name ' ] , [ folder ] , f [ ' name ' ] , [ ] )
socs = [ ( Soc ( soc [ ' name ' ] ,
[ c [ ' name ' ] for c in soc . get ( ' cpuclusters ' , [ ] ) ] ,
folder , s [ ' name ' ] , f [ ' name ' ] ) )
[ folder ] , s [ ' name ' ] , f [ ' name ' ] ) )
for soc in s . get ( ' socs ' , [ ] ) ]
series . socs . extend ( socs )
self . _series . append ( series )
@ -61,26 +62,36 @@ class Systems:
@@ -61,26 +62,36 @@ class Systems:
family . socs . extend ( socs )
socs = [ ( Soc ( soc [ ' name ' ] ,
[ c [ ' name ' ] for c in soc . get ( ' cpuclusters ' , [ ] ) ] ,
folder , None , f [ ' name ' ] ) )
[ folder ] , None , f [ ' name ' ] ) )
for soc in f . get ( ' socs ' , [ ] ) ]
self . _socs . extend ( socs )
self . _families . append ( family )
for s in data . get ( ' series ' , [ ] ) :
series = Series ( s [ ' name ' ] , folder , ' ' , [ ] )
series = Series ( s [ ' name ' ] , [ folder ] , ' ' , [ ] )
socs = [ ( Soc ( soc [ ' name ' ] ,
[ c [ ' name ' ] for c in soc . get ( ' cpuclusters ' , [ ] ) ] ,
folder , s [ ' name ' ] , ' ' ) )
[ folder ] , s [ ' name ' ] , ' ' ) )
for soc in s . get ( ' socs ' , [ ] ) ]
series . socs . extend ( socs )
self . _series . append ( series )
self . _socs . extend ( socs )
socs = [ ( Soc ( soc [ ' name ' ] ,
[ c [ ' name ' ] for c in soc . get ( ' cpuclusters ' , [ ] ) ] ,
folder , ' ' , ' ' ) )
for soc in data . get ( ' socs ' , [ ] ) ]
self . _socs . extend ( socs )
for soc in data . get ( ' socs ' , [ ] ) :
mutual_exclusive = { ' name ' , ' extend ' }
if len ( mutual_exclusive - soc . keys ( ) ) < 1 :
sys . exit ( f ' ERROR: Malformed content in SoC file: { soc_yaml } \n '
f ' { mutual_exclusive } are mutual exclusive at this level. ' )
if soc . get ( ' name ' ) is not None :
self . _socs . append ( Soc ( soc [ ' name ' ] , [ c [ ' name ' ] for c in soc . get ( ' cpuclusters ' , [ ] ) ] ,
[ folder ] , ' ' , ' ' ) )
elif soc . get ( ' extend ' ) is not None :
self . _extended_socs . append ( Soc ( soc [ ' extend ' ] ,
[ c [ ' name ' ] for c in soc . get ( ' cpuclusters ' , [ ] ) ] ,
[ folder ] , ' ' , ' ' ) )
else :
sys . exit ( f ' ERROR: Malformed " socs " section in SoC file: { soc_yaml } \n '
f ' Cannot find one of required keys { mutual_exclusive } . ' )
# Ensure that any runner configuration matches socs and cpuclusters declared in the same
# soc.yml file
@ -97,7 +108,7 @@ class Systems:
@@ -97,7 +108,7 @@ class Systems:
if components and components [ - 1 ] == ' ns ' :
components . pop ( )
for soc in self . _socs :
for soc in self . _socs + self . _extended_socs :
if re . match ( fr ' ^ { soc_name } $ ' , soc . name ) is not None :
if soc . cpuclusters and components :
check_string = ' / ' . join ( components )
@ -133,8 +144,23 @@ class Systems:
@@ -133,8 +144,23 @@ class Systems:
def extend ( self , systems ) :
self . _families . extend ( systems . get_families ( ) )
self . _series . extend ( systems . get_series ( ) )
for es in self . _extended_socs [ : ] :
for s in systems . get_socs ( ) :
if s . name == es . name :
s . extend ( es )
self . _extended_socs . remove ( es )
break
self . _socs . extend ( systems . get_socs ( ) )
for es in systems . get_extended_socs ( ) :
for s in self . _socs :
if s . name == es . name :
s . extend ( es )
break
else :
self . _extended_socs . append ( es )
def get_families ( self ) :
return self . _families
@ -144,6 +170,9 @@ class Systems:
@@ -144,6 +170,9 @@ class Systems:
def get_socs ( self ) :
return self . _socs
def get_extended_socs ( self ) :
return self . _extended_socs
def get_soc ( self , name ) :
try :
return next ( s for s in self . _socs if s . name == name )
@ -156,15 +185,20 @@ class Systems:
@@ -156,15 +185,20 @@ class Systems:
class Soc :
name : str
cpuclusters : List [ str ]
folder : str
folder : List [ str ]
series : str = ' '
family : str = ' '
def extend ( self , soc ) :
if self . name == soc . name :
self . cpuclusters . extend ( soc . cpuclusters )
self . folder . extend ( soc . folder )
@dataclass
class Series :
name : str
folder : str
folder : List [ str ]
family : str
socs : List [ Soc ]
@ -172,7 +206,7 @@ class Series:
@@ -172,7 +206,7 @@ class Series:
@dataclass
class Family :
name : str
folder : str
folder : List [ str ]
series : List [ Series ]
socs : List [ Soc ]
@ -289,7 +323,7 @@ def dump_v2_system(args, type, system):
@@ -289,7 +323,7 @@ def dump_v2_system(args, type, system):
info = args . cmakeformat . format (
TYPE = ' TYPE; ' + type ,
NAME = ' NAME; ' + system . name ,
DIR = ' DIR; ' + Path ( system . folder ) . as_posix ( ) ,
DIR = ' DIR; ' + ' ; ' . join ( [ Path ( x ) . as_posix ( ) for x in system . folder ] ) ,
HWM = ' HWM; ' + ' v2 '
)
else :