32
32
33
33
SUPPORTED_PORTS = ['atmel-samd' , 'broadcom' , 'cxd56' , 'espressif' , 'litex' , 'mimxrt10xx' , 'nrf' , 'raspberrypi' , 'stm' ]
34
34
35
- aliases_by_board = {
35
+ ALIASES_BY_BOARD = {
36
36
"circuitplayground_express" : [
37
37
"circuitplayground_express_4h" ,
38
38
"circuitplayground_express_digikey_pycon2019" ,
43
43
"pewpew10" : ["pewpew13" ],
44
44
}
45
45
46
- aliases_brand_names = {
46
+ ALIASES_BRAND_NAMES = {
47
47
"circuitplayground_express_4h" :
48
48
"Adafruit Circuit Playground Express 4-H" ,
49
49
"circuitplayground_express_digikey_pycon2019" :
58
58
"PewPew 13" ,
59
59
}
60
60
61
- additional_modules = {
61
+ ADDITIONAL_MODULES = {
62
62
"fontio" : "CIRCUITPY_DISPLAYIO" ,
63
63
"terminalio" : "CIRCUITPY_DISPLAYIO" ,
64
64
"adafruit_bus_device" : "CIRCUITPY_BUSDEVICE" ,
65
65
"adafruit_pixelbuf" : "CIRCUITPY_PIXELBUF" ,
66
66
"usb" : "CIRCUITPY_USB_HOST" ,
67
67
}
68
68
69
- frozen_excludes = ["examples" , "docs" , "tests" , "utils" , "conf.py" , "setup.py" ]
69
+ FROZEN_EXCLUDES = ["examples" , "docs" , "tests" , "utils" , "conf.py" , "setup.py" ]
70
70
"""Files and dirs at the root of a frozen directory that should be ignored.
71
71
This is the same list as in the preprocess_frozen_modules script."""
72
72
73
73
repository_urls = {}
74
74
"""Cache of repository URLs for frozen modules."""
75
75
76
76
def get_circuitpython_root_dir ():
77
- """ The path to the root './circuitpython' directory
77
+ """ The path to the root './circuitpython' directory.
78
78
"""
79
79
file_path = pathlib .Path (__file__ ).resolve ()
80
80
root_dir = file_path .parent .parent
81
81
82
82
return root_dir
83
83
84
84
def get_shared_bindings ():
85
- """ Get a list of modules in shared-bindings based on folder names
85
+ """ Get a list of modules in shared-bindings based on folder names.
86
86
"""
87
87
shared_bindings_dir = get_circuitpython_root_dir () / "shared-bindings"
88
88
return [item .name for item in shared_bindings_dir .iterdir ()] + ["binascii" , "errno" , "json" , "re" , "ulab" ]
89
89
90
90
91
+ def get_board_mapping ():
92
+ """
93
+ Compiles the list of boards from the directories, with aliases and mapping
94
+ to the port.
95
+ """
96
+ boards = {}
97
+ for port in SUPPORTED_PORTS :
98
+ board_path = os .path .join ("../ports" , port , "boards" )
99
+ for board_path in os .scandir (board_path ):
100
+ if board_path .is_dir ():
101
+ board_files = os .listdir (board_path .path )
102
+ board_id = board_path .name
103
+ aliases = ALIASES_BY_BOARD .get (board_path .name , [])
104
+ boards [board_id ] = {
105
+ "port" : port ,
106
+ "download_count" : 0 ,
107
+ "aliases" : aliases ,
108
+ }
109
+ for alias in aliases :
110
+ boards [alias ] = {
111
+ "port" : port ,
112
+ "download_count" : 0 ,
113
+ "alias" : True ,
114
+ "aliases" : [],
115
+ }
116
+ return boards
117
+
118
+
91
119
def read_mpconfig ():
92
120
""" Open 'circuitpy_mpconfig.mk' and return the contents.
93
121
"""
@@ -112,8 +140,8 @@ def build_module_map():
112
140
full_build = False
113
141
for module in modules :
114
142
full_name = module
115
- if module in additional_modules :
116
- search_identifier = additional_modules [module ]
143
+ if module in ADDITIONAL_MODULES :
144
+ search_identifier = ADDITIONAL_MODULES [module ]
117
145
else :
118
146
search_identifier = 'CIRCUITPY_' + module .lstrip ("_" ).upper ()
119
147
re_pattern = f"{ re .escape (search_identifier )} \s*\??=\s*(.+)"
@@ -211,14 +239,14 @@ def frozen_modules_from_dirs(frozen_mpy_dirs, withurl):
211
239
$(TOP)/frozen/Adafruit_CircuitPython_CircuitPlayground
212
240
$(TOP)/frozen/circuitpython-stage/meowbit
213
241
Python modules are at the root of the path, and are python files or directories
214
- containing python files. Except the ones in the frozen_excludes list.
242
+ containing python files. Except the ones in the FROZEN_EXCLUDES list.
215
243
"""
216
244
frozen_modules = []
217
245
for frozen_path in filter (lambda x : x , frozen_mpy_dirs .split (" " )):
218
246
source_dir = get_circuitpython_root_dir () / frozen_path [7 :]
219
247
url_repository = get_repository_url (source_dir )
220
248
for sub in source_dir .glob ("*" ):
221
- if sub .name in frozen_excludes :
249
+ if sub .name in FROZEN_EXCLUDES :
222
250
continue
223
251
if sub .name .endswith (".py" ):
224
252
if withurl :
@@ -279,7 +307,10 @@ def support_matrix(arg):
279
307
board_modules .sort ()
280
308
281
309
if "CIRCUITPY_BUILD_EXTENSIONS" in settings :
282
- board_extensions = settings ["CIRCUITPY_BUILD_EXTENSIONS" ]
310
+ board_extensions = [
311
+ extension .strip () for extension in
312
+ settings ["CIRCUITPY_BUILD_EXTENSIONS" ].split ("," )
313
+ ]
283
314
else :
284
315
raise OSError (f"Board extensions undefined: { board_name } ." )
285
316
@@ -297,11 +328,11 @@ def support_matrix(arg):
297
328
"extensions" : board_extensions ,
298
329
}
299
330
)]
300
- if entry .name in aliases_by_board :
301
- for alias in aliases_by_board [entry .name ]:
331
+ if entry .name in ALIASES_BY_BOARD :
332
+ for alias in ALIASES_BY_BOARD [entry .name ]:
302
333
if use_branded_name :
303
- if alias in aliases_brand_names :
304
- alias = aliases_brand_names [alias ]
334
+ if alias in ALIASES_BRAND_NAMES :
335
+ alias = ALIASES_BRAND_NAMES [alias ]
305
336
else :
306
337
alias = alias .replace ("_" ," " ).title ()
307
338
board_matrix .append ((
0 commit comments