1515import threading
1616import re
1717import glob
18+ import pathlib
1819import shutil
1920import copy
2021import serial
@@ -350,7 +351,7 @@ def _extract_mk_vars(self, data):
350351 continue
351352 if mname not in mk_vars :
352353 mk_vars [mname ] = dict ()
353- var_content = line .split (maxsplit = 2 ) # key =|:= value
354+ var_content = line .split (maxsplit = 2 )
354355 if len (var_content ) == 3 :
355356 mk_vars [mname ][var_content [0 ]] = var_content [2 ]
356357 if var_content [0 ] == "ONCHIP_IP_LIST" :
@@ -374,7 +375,7 @@ def get_configs(self, example):
374375 logger .error ("Fail to run command {}" .format (cmd ))
375376 sys .exit (ex .output .decode ("utf-8" ))
376377
377- def _parse_core_props (self , version , tcf ):
378+ def _parse_core_props (self , version , core , tcf ):
378379 configs = dict ()
379380 tags = list ()
380381 with open (tcf , "rb" ) as f :
@@ -395,24 +396,39 @@ def _parse_core_props(self, version, tcf):
395396 tags .append ("smp" )
396397 continue
397398 tags .append (self .platform_tags [key [12 :]])
398- core = os .path .basename (tcf )
399399 if not version in self .configs :
400400 self .configs [version ] = dict ()
401- self .configs [version ][core [ 0 : - 4 ] ] = {
401+ self .configs [version ][core ] = {
402402 "configs" : configs ,
403403 "tags" : tags
404404 }
405405
406- def get_cores (self , version ):
406+ def get_cores (self , example , version ):
407407 cores = list ()
408+ cmd = ["make" , "EMBARC_ROOT=%s" % EMBARC_ROOT ]
409+ cmd .append ("BOARD=%s" % (self .name ))
410+ cmd .append ("BD_VER=%s" % (version ))
411+ cmd .extend (["-C" , example ])
412+ cmd .append ("spopt" )
413+ try :
414+ output = subprocess .check_output (cmd , stderr = subprocess .STDOUT )
415+ if output :
416+ opt_lines = output .decode ("utf-8" ).splitlines ()
417+ for opt_line in opt_lines :
418+ if opt_line .startswith ("SUPPORTED_CORES" ):
419+ platforms_cores = opt_line .split (":" , 1 )[1 ]
420+ cores .extend (platforms_cores .split ())
421+ break
422+ except subprocess .CalledProcessError as ex :
423+ logger .error ("Fail to run command {}" .format (cmd ))
424+ sys .exit (ex .output .decode ("utf-8" ))
408425 board_root = os .path .join (EMBARC_ROOT , "board" , self .name )
409- for root , _ , files in os .walk (board_root ):
410- if version in root :
411- for file in files :
412- if file .endswith (".tcf" ):
413- cores .append (os .path .splitext (file )[0 ])
414- tcf = os .path .join (root , file )
415- self ._parse_core_props (version , tcf )
426+ for file in pathlib .Path (board_root ).glob ('**/*.tcf' ):
427+ if version in str (file ):
428+ tcf = os .path .join (board_root , str (file ))
429+ for core in cores :
430+ if core in tcf :
431+ self ._parse_core_props (version , core , tcf )
416432 return cores
417433
418434 def __repr__ (self ):
@@ -1177,7 +1193,7 @@ def add_default_platforms(self, platforms=None):
11771193 platform .get_configs (example_path )
11781194 versions = platform .supported_versions
11791195 for version in versions :
1180- cores = platform .get_cores (version )
1196+ cores = platform .get_cores (example_path , version )
11811197 for core in cores :
11821198 platform .version = version
11831199 platform .core = core
0 commit comments