2019-03-23 16:51:07 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  os  
						 
					
						
							
								
									
										
										
										
											2020-03-09 15:51:29 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  glob  
						 
					
						
							
								
									
										
										
										
											2019-03-23 16:51:07 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  sys  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  subprocess  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  time  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-02 19:01:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								success_count  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								fail_count  =  0  
						 
					
						
							
								
									
										
										
										
											2020-03-09 17:42:57 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								skip_count  =  0  
						 
					
						
							
								
									
										
										
										
											2019-05-02 19:01:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								exit_status  =  0  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-08 12:20:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								total_time  =  time . monotonic ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 15:51:29 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# 1st Argument is Example, build all examples if not existed  
						 
					
						
							
								
									
										
										
										
											2019-08-08 12:20:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								all_examples  =  [ ]  
						 
					
						
							
								
									
										
										
										
											2019-11-21 16:37:34 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  len ( sys . argv )  >  1 :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    all_examples . append ( sys . argv [ 1 ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								else :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  entry  in  os . scandir ( " examples/device " ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  entry . is_dir ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            all_examples . append ( entry . name ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 15:51:29 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								all_examples . sort ( )  
						 
					
						
							
								
									
										
										
										
											2019-05-15 18:11:08 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 15:51:29 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# 2nd Argument is Board, build all boards if not existed  
						 
					
						
							
								
									
										
										
										
											2019-05-15 18:11:08 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								all_boards  =  [ ]  
						 
					
						
							
								
									
										
										
										
											2020-03-09 15:51:29 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								if  len ( sys . argv )  >  2 :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    all_boards . append ( sys . argv [ 2 ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								else :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  entry  in  os . scandir ( " hw/bsp " ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  entry . is_dir ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            all_boards . append ( entry . name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								all_boards . sort ( )  
						 
					
						
							
								
									
										
										
										
											2019-03-23 16:51:07 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-08 12:20:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-02 19:01:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  build_example ( example ,  board ) :  
						 
					
						
							
								
									
										
										
										
											2019-08-08 12:20:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    subprocess . run ( " make -C examples/device/ {}  BOARD= {}  clean " . format ( example ,  board ) ,  shell = True , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   stdout = subprocess . PIPE ,  stderr = subprocess . STDOUT ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-09 18:49:38 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  subprocess . run ( " make -j 4 -C examples/device/ {}  BOARD= {}  all " . format ( example ,  board ) ,  shell = True , 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-08 12:20:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                          stdout = subprocess . PIPE ,  stderr = subprocess . STDOUT ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-02 19:01:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 17:42:57 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  build_size ( example ,  board ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    elf_file  =  ' examples/device/ {} /_build/build- {} / {} -firmware.elf ' . format ( example ,  board ,  board ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_output  =  subprocess . run ( ' size  {} ' . format ( elf_file ) ,  shell = True ,  stdout = subprocess . PIPE ) . stdout . decode ( " utf-8 " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    size_list  =  size_output . split ( ' \n ' ) [ 1 ] . split ( ' \t ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    flash_size  =  int ( size_list [ 0 ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sram_size  =  int ( size_list [ 1 ] )  +  int ( size_list [ 2 ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  ( flash_size ,  sram_size ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 15:51:29 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								def  skip_example ( example ,  board ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ex_dir  =  ' examples/device/ '  +  example 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    board_mk  =  ' hw/bsp/ {} /board.mk ' . format ( board ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  skip_file  in  glob . iglob ( ex_dir  +  ' /.skip.MCU_* ' ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        mcu_cflag  =  ' -DCFG_TUSB_MCU=OPT_ '  +  os . path . basename ( skip_file ) . split ( ' . ' ) [ 2 ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        with  open ( board_mk )  as  mk : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  mcu_cflag  in  mk . read ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  0 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-02 19:01:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 17:42:57 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								build_format  =  ' |  {:20}  |  {:30}  |  {:9}  |  {:5}  |  {:6}  |  {:6}  | '  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								build_separator  =  ' - '  *  95  
						 
					
						
							
								
									
										
										
										
											2019-08-08 12:20:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								print ( build_separator )  
						 
					
						
							
								
									
										
										
										
											2020-03-09 17:42:57 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								print ( build_format . format ( ' Example ' ,  ' Board ' ,  ' Result ' ,  ' Time ' ,  ' Flash ' ,  ' SRAM ' ) )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-11 23:52:58 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								for  example  in  all_examples :  
						 
					
						
							
								
									
										
										
										
											2019-08-08 12:20:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    print ( build_separator ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-26 15:55:00 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    for  board  in  all_boards : 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-02 19:01:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        start_time  =  time . monotonic ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 17:42:57 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        flash_size  =  " - " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        sram_size  =  " - " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 15:51:29 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        # Check if board is skipped 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  skip_example ( example ,  board ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            success  =  " \033 [33mskipped \033 [0m   " 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 17:42:57 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            skip_count  + =  1 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 17:55:31 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            print ( build_format . format ( example ,  board ,  success ,  ' - ' ,  flash_size ,  sram_size ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-27 00:15:43 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 15:51:29 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            build_result  =  build_example ( example ,  board ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  build_result . returncode  ==  0 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                success  =  " \033 [32msucceeded \033 [0m " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                success_count  + =  1 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 17:42:57 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                ( flash_size ,  sram_size )  =  build_size ( example ,  board ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 15:51:29 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                exit_status  =  build_result . returncode 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                success  =  " \033 [31mfailed \033 [0m    " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                fail_count  + =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            build_duration  =  time . monotonic ( )  -  start_time 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 17:42:57 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            print ( build_format . format ( example ,  board ,  success ,  " {:.2f} " . format ( build_duration ) ,  flash_size ,  sram_size ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-02 19:01:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-09 15:51:29 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  build_result . returncode  !=  0 : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                print ( build_result . stdout . decode ( " utf-8 " ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-08 12:20:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-01 16:04:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# FreeRTOS example  
						 
					
						
							
								
									
										
										
										
											2019-08-08 12:20:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# example = 'cdc_msc_hid_freertos'  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# board = 'pca10056'  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# build_example(example, board)  
						 
					
						
							
								
									
										
										
										
											2019-05-02 19:01:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								total_time  =  time . monotonic ( )  -  total_time  
						 
					
						
							
								
									
										
										
										
											2019-08-08 12:20:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								print ( build_separator )  
						 
					
						
							
								
									
										
										
										
											2020-03-09 17:42:57 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								print ( " Build Sumamary:  {}   \033 [32msucceeded \033 [0m,  {}   \033 [31mfailed \033 [0m,  {}   \033 [33mskipped \033 [0m and took  {:.2f} s " . format ( success_count ,  fail_count ,  skip_count ,  total_time ) )  
						 
					
						
							
								
									
										
										
										
											2019-08-08 12:20:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								print ( build_separator )  
						 
					
						
							
								
									
										
										
										
											2019-05-03 14:02:22 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-02 19:01:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								sys . exit ( exit_status )