| 
									
										
										
										
											2020-04-07 16:49:17 +07:00
										 |  |  | import os | 
					
						
							|  |  |  | import glob | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | import subprocess | 
					
						
							|  |  |  | import time | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-05 13:57:07 +07:00
										 |  |  | SUCCEEDED = "\033[32msucceeded\033[0m" | 
					
						
							|  |  |  | FAILED = "\033[31mfailed\033[0m" | 
					
						
							|  |  |  | SKIPPED = "\033[33mskipped\033[0m" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-07 16:49:17 +07:00
										 |  |  | success_count = 0 | 
					
						
							|  |  |  | fail_count = 0 | 
					
						
							|  |  |  | skip_count = 0 | 
					
						
							|  |  |  | exit_status = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | total_time = time.monotonic() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-05 13:57:07 +07:00
										 |  |  | build_format = '| {:23} | {:30} | {:18} | {:7} | {:6} | {:6} |' | 
					
						
							| 
									
										
										
										
											2020-04-07 16:49:17 +07:00
										 |  |  | build_separator = '-' * 100 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 1st Argument is Example, build all examples if not existed | 
					
						
							|  |  |  | all_examples = [] | 
					
						
							|  |  |  | if len(sys.argv) > 1: | 
					
						
							|  |  |  |     all_examples.append(sys.argv[1]) | 
					
						
							|  |  |  | else: | 
					
						
							|  |  |  |     for entry in os.scandir("examples/device"): | 
					
						
							|  |  |  |         # Only includes example with CMakeLists.txt for esp32s | 
					
						
							|  |  |  |         if entry.is_dir() and os.path.exists(entry.path + "/CMakeLists.txt"): | 
					
						
							|  |  |  |             all_examples.append(entry.name) | 
					
						
							|  |  |  | all_examples.sort() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 2nd Argument is Board, build all boards if not existed | 
					
						
							|  |  |  | all_boards = [] | 
					
						
							|  |  |  | if len(sys.argv) > 2: | 
					
						
							|  |  |  |     all_boards.append(sys.argv[2]) | 
					
						
							|  |  |  | else: | 
					
						
							| 
									
										
										
										
											2021-01-22 09:41:41 +07:00
										 |  |  |     for entry in os.scandir("hw/bsp/esp32s2/boards"): | 
					
						
							| 
									
										
										
										
											2020-04-07 16:49:17 +07:00
										 |  |  |         if entry.is_dir(): | 
					
						
							| 
									
										
										
										
											2021-01-22 09:41:41 +07:00
										 |  |  |             all_boards.append(entry.name) | 
					
						
							| 
									
										
										
										
											2020-04-07 16:49:17 +07:00
										 |  |  |                                  | 
					
						
							|  |  |  | all_boards.sort() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def build_example(example, board): | 
					
						
							|  |  |  |     subprocess.run("make -C examples/device/{} BOARD={} clean".format(example, board), shell=True, | 
					
						
							|  |  |  |                    stdout=subprocess.PIPE, stderr=subprocess.STDOUT) | 
					
						
							| 
									
										
										
										
											2020-07-19 14:19:39 +07:00
										 |  |  |     return subprocess.run("make -C examples/device/{} BOARD={} all".format(example, board), shell=True, | 
					
						
							| 
									
										
										
										
											2020-04-07 16:49:17 +07:00
										 |  |  |                           stdout=subprocess.PIPE, stderr=subprocess.STDOUT) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def build_size(example, board): | 
					
						
							|  |  |  |     #elf_file = 'examples/device/{}/_build/build-{}/{}-firmware.elf'.format(example, board, board) | 
					
						
							|  |  |  |     elf_file = 'examples/device/{}/_build/build-{}/*.elf'.format(example, 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) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def skip_example(example, board): | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print(build_separator) | 
					
						
							| 
									
										
										
										
											2020-09-05 13:57:07 +07:00
										 |  |  | print(build_format.format('Example', 'Board', '\033[39mResult\033[0m', 'Time', 'Flash', 'SRAM')) | 
					
						
							| 
									
										
										
										
											2020-04-07 21:47:24 +07:00
										 |  |  | print(build_separator) | 
					
						
							| 
									
										
										
										
											2020-04-07 16:49:17 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  | for example in all_examples: | 
					
						
							|  |  |  |     for board in all_boards: | 
					
						
							|  |  |  |         start_time = time.monotonic() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         flash_size = "-" | 
					
						
							|  |  |  |         sram_size = "-" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Check if board is skipped | 
					
						
							|  |  |  |         if skip_example(example, board): | 
					
						
							| 
									
										
										
										
											2020-09-05 13:57:07 +07:00
										 |  |  |             success = SKIPPED | 
					
						
							| 
									
										
										
										
											2020-04-07 16:49:17 +07:00
										 |  |  |             skip_count += 1 | 
					
						
							|  |  |  |             print(build_format.format(example, board, success, '-', flash_size, sram_size)) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             build_result = build_example(example, board) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if build_result.returncode == 0: | 
					
						
							| 
									
										
										
										
											2020-09-05 13:57:07 +07:00
										 |  |  |                 success = SUCCEEDED | 
					
						
							| 
									
										
										
										
											2020-04-07 16:49:17 +07:00
										 |  |  |                 success_count += 1 | 
					
						
							|  |  |  |                 (flash_size, sram_size) = build_size(example, board) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 exit_status = build_result.returncode | 
					
						
							| 
									
										
										
										
											2020-09-05 13:57:07 +07:00
										 |  |  |                 success = FAILED | 
					
						
							| 
									
										
										
										
											2020-04-07 16:49:17 +07:00
										 |  |  |                 fail_count += 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             build_duration = time.monotonic() - start_time | 
					
						
							|  |  |  |             print(build_format.format(example, board, success, "{:.2f}s".format(build_duration), flash_size, sram_size)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if build_result.returncode != 0: | 
					
						
							|  |  |  |                 print(build_result.stdout.decode("utf-8")) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | total_time = time.monotonic() - total_time | 
					
						
							|  |  |  | print(build_separator) | 
					
						
							| 
									
										
										
										
											2020-09-05 13:57:07 +07:00
										 |  |  | print("Build Summary: {} {}, {} {}, {} {} and took {:.2f}s".format(success_count, SUCCEEDED, fail_count, FAILED, skip_count, SKIPPED, total_time)) | 
					
						
							| 
									
										
										
										
											2020-04-07 16:49:17 +07:00
										 |  |  | print(build_separator) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | sys.exit(exit_status) |