summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2020-08-26 11:13:18 -0500
committerJeff Epler <jepler@gmail.com>2020-08-26 11:29:55 -0500
commit5422dd682ca107ae27c57c7d3fa240baa354bc87 (patch)
treef84d5433d1091e02afa17873ae14b63ca0579c38 /docs
parent575516072038d470210e1944cbdaaf6868116f39 (diff)
shared_bindings_matrix: Run in parallel
.. this makes it take a fraction of the time, at least on systems with a lot of CPU threads. Even on my old laptop with a 2-core CPU it reduces the time from 55s to 27s.
Diffstat (limited to 'docs')
-rw-r--r--docs/shared_bindings_matrix.py57
1 files changed, 32 insertions, 25 deletions
diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py
index 7b96c14f2..3523b8ec6 100644
--- a/docs/shared_bindings_matrix.py
+++ b/docs/shared_bindings_matrix.py
@@ -28,6 +28,7 @@ import re
import subprocess
import sys
+from concurrent.futures import ThreadPoolExecutor
SUPPORTED_PORTS = ['atmel-samd', 'esp32s2', 'litex', 'mimxrt10xx', 'nrf', 'stm']
@@ -131,38 +132,44 @@ def lookup_setting(settings, key, default=''):
key = value[2:-1]
return value
+def all_ports_all_boards(ports=SUPPORTED_PORTS):
+ for port in ports:
+
+ port_dir = get_circuitpython_root_dir() / "ports" / port
+ for entry in (port_dir / "boards").iterdir():
+ if not entry.is_dir():
+ continue
+ yield (port, entry)
+
def support_matrix_by_board(use_branded_name=True):
""" Compiles a list of the available core modules available for each
board.
"""
base = build_module_map()
- boards = dict()
- for port in SUPPORTED_PORTS:
-
+ def support_matrix(arg):
+ port, entry = arg
port_dir = get_circuitpython_root_dir() / "ports" / port
- for entry in (port_dir / "boards").iterdir():
- if not entry.is_dir():
- continue
- board_modules = []
- board_name = entry.name
-
- settings = get_settings_from_makefile(str(port_dir), entry.name)
-
- if use_branded_name:
- with open(entry / "mpconfigboard.h") as get_name:
- board_contents = get_name.read()
- board_name_re = re.search(r"(?<=MICROPY_HW_BOARD_NAME)\s+(.+)",
- board_contents)
- if board_name_re:
- board_name = board_name_re.group(1).strip('"')
-
- board_modules = []
- for module in base:
- key = f'CIRCUITPY_{module.upper()}'
- if int(lookup_setting(settings, key, '0')):
- board_modules.append(base[module]['name'])
- boards[board_name] = sorted(board_modules)
+ settings = get_settings_from_makefile(str(port_dir), entry.name)
+
+ if use_branded_name:
+ with open(entry / "mpconfigboard.h") as get_name:
+ board_contents = get_name.read()
+ board_name_re = re.search(r"(?<=MICROPY_HW_BOARD_NAME)\s+(.+)",
+ board_contents)
+ if board_name_re:
+ board_name = board_name_re.group(1).strip('"')
+
+ board_modules = []
+ for module in base:
+ key = f'CIRCUITPY_{module.upper()}'
+ if int(lookup_setting(settings, key, '0')):
+ board_modules.append(base[module]['name'])
+
+ return (board_name, sorted(board_modules))
+
+ executor = ThreadPoolExecutor(max_workers=os.cpu_count())
+ boards = dict(sorted(executor.map(support_matrix, all_ports_all_boards())))
#print(json.dumps(boards, indent=2))
return boards