| 
									
										
										
										
											2024-09-17 12:17:12 -07:00
										 |  |  | #!/usr/bin/env python3 | 
					
						
							| 
									
										
										
										
											2022-06-29 21:06:02 +07:00
										 |  |  | import subprocess | 
					
						
							| 
									
										
										
										
											2022-01-05 15:44:23 -08:00
										 |  |  | import pathlib | 
					
						
							| 
									
										
										
										
											2024-10-15 17:55:24 +07:00
										 |  |  | import re | 
					
						
							| 
									
										
										
										
											2022-06-29 21:06:02 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  | build_format = '| {:29} | {:30} | {:18} | {:7} | {:6} | {:6} |' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SUCCEEDED = "\033[32msucceeded\033[0m" | 
					
						
							|  |  |  | FAILED = "\033[31mfailed\033[0m" | 
					
						
							|  |  |  | SKIPPED = "\033[33mskipped\033[0m" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-05 15:44:23 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | def skip_example(example, board): | 
					
						
							|  |  |  |     ex_dir = pathlib.Path('examples/') / example | 
					
						
							|  |  |  |     bsp = pathlib.Path("hw/bsp") | 
					
						
							| 
									
										
										
										
											2022-06-29 21:06:02 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-30 21:53:57 +07:00
										 |  |  |     # board within family | 
					
						
							|  |  |  |     board_dir = list(bsp.glob("*/boards/" + board)) | 
					
						
							|  |  |  |     if not board_dir: | 
					
						
							|  |  |  |         # Skip unknown boards | 
					
						
							|  |  |  |         return True | 
					
						
							| 
									
										
										
										
											2022-06-29 21:06:02 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-30 21:53:57 +07:00
										 |  |  |     board_dir = list(board_dir)[0] | 
					
						
							|  |  |  |     family_dir = board_dir.parent.parent | 
					
						
							|  |  |  |     family = family_dir.name | 
					
						
							| 
									
										
										
										
											2022-06-29 21:06:02 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-30 21:53:57 +07:00
										 |  |  |     # family.mk | 
					
						
							|  |  |  |     family_mk = family_dir / "family.mk" | 
					
						
							|  |  |  |     mk_contents = family_mk.read_text() | 
					
						
							| 
									
										
										
										
											2022-01-05 15:44:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-29 14:06:44 +07:00
										 |  |  |     # Find the mcu, first in family mk then board mk | 
					
						
							| 
									
										
										
										
											2022-01-05 15:44:23 -08:00
										 |  |  |     if "CFG_TUSB_MCU=OPT_MCU_" not in mk_contents: | 
					
						
							| 
									
										
										
										
											2024-09-30 21:53:57 +07:00
										 |  |  |         board_mk = board_dir / "board.mk" | 
					
						
							| 
									
										
										
										
											2022-01-05 15:44:23 -08:00
										 |  |  |         if not board_mk.exists(): | 
					
						
							| 
									
										
										
										
											2024-09-30 21:53:57 +07:00
										 |  |  |             board_mk = board_dir / "board.cmake" | 
					
						
							| 
									
										
										
										
											2022-01-05 15:44:23 -08:00
										 |  |  |         mk_contents = board_mk.read_text() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-02 16:21:49 +07:00
										 |  |  |     mcu = "NONE" | 
					
						
							| 
									
										
										
										
											2024-10-15 17:55:24 +07:00
										 |  |  |     if family == "espressif": | 
					
						
							|  |  |  |         for line in mk_contents.splitlines(): | 
					
						
							|  |  |  |             match = re.search(r'set\(IDF_TARGET\s+"([^"]+)"\)', line) | 
					
						
							|  |  |  |             if match: | 
					
						
							| 
									
										
										
										
											2024-11-11 21:40:03 +07:00
										 |  |  |                 mcu = match.group(1).upper() | 
					
						
							| 
									
										
										
										
											2024-10-15 17:55:24 +07:00
										 |  |  |                 break | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         for token in mk_contents.split(): | 
					
						
							|  |  |  |             if "CFG_TUSB_MCU=OPT_MCU_" in token: | 
					
						
							|  |  |  |                 # Strip " because cmake files has them. | 
					
						
							|  |  |  |                 token = token.strip("\"") | 
					
						
							|  |  |  |                 _, opt_mcu = token.split("=") | 
					
						
							|  |  |  |                 mcu = opt_mcu[len("OPT_MCU_"):] | 
					
						
							|  |  |  |             if mcu != "NONE": | 
					
						
							|  |  |  |                 break | 
					
						
							| 
									
										
										
										
											2022-01-05 15:44:23 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Skip all OPT_MCU_NONE these are WIP port | 
					
						
							|  |  |  |     if mcu == "NONE": | 
					
						
							|  |  |  |         return True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-30 21:53:57 +07:00
										 |  |  |     max3421_enabled = False | 
					
						
							|  |  |  |     for line in mk_contents.splitlines(): | 
					
						
							|  |  |  |         if "MAX3421_HOST=1" in line or 'MAX3421_HOST 1' in line: | 
					
						
							|  |  |  |             max3421_enabled = True | 
					
						
							|  |  |  |             break | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-05 15:44:23 -08:00
										 |  |  |     skip_file = ex_dir / "skip.txt" | 
					
						
							|  |  |  |     only_file = ex_dir / "only.txt" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-04 14:10:48 +07:00
										 |  |  |     if skip_file.exists(): | 
					
						
							| 
									
										
										
										
											2022-01-05 15:44:23 -08:00
										 |  |  |         skips = skip_file.read_text().split() | 
					
						
							| 
									
										
										
										
											2024-04-04 14:10:48 +07:00
										 |  |  |         if ("mcu:" + mcu in skips or | 
					
						
							|  |  |  |             "board:" + board in skips or | 
					
						
							|  |  |  |             "family:" + family in skips): | 
					
						
							|  |  |  |             return True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if only_file.exists(): | 
					
						
							| 
									
										
										
										
											2022-01-05 15:44:23 -08:00
										 |  |  |         onlys = only_file.read_text().split() | 
					
						
							| 
									
										
										
										
											2024-04-04 14:10:48 +07:00
										 |  |  |         if not ("mcu:" + mcu in onlys or | 
					
						
							| 
									
										
										
										
											2024-09-30 21:53:57 +07:00
										 |  |  |                 ("mcu:MAX3421" in onlys and max3421_enabled) or | 
					
						
							| 
									
										
										
										
											2024-04-04 14:10:48 +07:00
										 |  |  |                 "board:" + board in onlys or | 
					
						
							|  |  |  |                 "family:" + family in onlys): | 
					
						
							|  |  |  |             return True | 
					
						
							| 
									
										
										
										
											2022-01-05 15:44:23 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return False | 
					
						
							| 
									
										
										
										
											2022-06-29 21:06:02 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-13 23:57:01 +07:00
										 |  |  | def build_size(make_cmd): | 
					
						
							|  |  |  |     size_output = subprocess.run(make_cmd + ' size', shell=True, stdout=subprocess.PIPE).stdout.decode("utf-8").splitlines() | 
					
						
							|  |  |  |     for i, l in enumerate(size_output): | 
					
						
							|  |  |  |         text_title = 'text	   data	    bss	    dec' | 
					
						
							|  |  |  |         if text_title in l: | 
					
						
							|  |  |  |             size_list = size_output[i+1].split('\t') | 
					
						
							|  |  |  |             flash_size = int(size_list[0]) | 
					
						
							|  |  |  |             sram_size = int(size_list[1]) + int(size_list[2]) | 
					
						
							|  |  |  |             return (flash_size, sram_size) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return (0, 0) |