diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-02-28 15:57:25 -0700 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-02-28 19:39:29 -0700 |
commit | 2de5915f7a06a75611b63507fe7ee123d127a870 (patch) | |
tree | 54165ab0d71b1629446bc1f95669740ba2a8eebc /build-aux | |
parent | 98bd1e6a2d619f015fc6ccfff48f3e129603b3ee (diff) |
stack.c.gen: Also inspect .h files
Diffstat (limited to 'build-aux')
-rwxr-xr-x | build-aux/stack.c.gen | 61 |
1 files changed, 36 insertions, 25 deletions
diff --git a/build-aux/stack.c.gen b/build-aux/stack.c.gen index 858c28a..42a8a62 100755 --- a/build-aux/stack.c.gen +++ b/build-aux/stack.c.gen @@ -145,7 +145,7 @@ class AnalyzeResult(typing.NamedTuple): def analyze( *, - ci_fnames: list[str], + ci_fnames: typing.Collection[str], extra_nodes: list[Node] = [], app_func_filters: dict[str, typing.Callable[[str], int]], app_location_xform: typing.Callable[[str], str], @@ -332,8 +332,8 @@ def main( *, arg_pico_platform: str, arg_base_dir: str, - arg_ci_fnames: list[str], - arg_c_fnames: list[str], + arg_ci_fnames: typing.Collection[str], + arg_c_fnames: typing.Collection[str], ) -> None: re_call_other = re.compile(r"(?P<func>[^(]+)\(.*") @@ -350,7 +350,7 @@ def main( objcalls: dict[str, set[str]] = {} re_vtable_start = re.compile(r"_vtable\s*=\s*\{") re_vtable_entry = re.compile(r"^\s+\.(?P<meth>\S+)\s*=\s*(?P<impl>\S+),.*") - for fname in c_fnames: + for fname in arg_c_fnames: with open(fname, "r") as fh: in_vtable = False for line in fh: @@ -370,8 +370,8 @@ def main( in_vtable = True tmessage_handlers: set[str] | None = None - if any(fname.endswith("lib9p/srv.c") for fname in c_fnames): - srv_c = next(fname for fname in c_fnames if fname.endswith("lib9p/srv.c")) + if any(fname.endswith("lib9p/srv.c") for fname in arg_c_fnames): + srv_c = next(fname for fname in arg_c_fnames if fname.endswith("lib9p/srv.c")) re_tmessage_handler = re.compile( r"^\s*\[LIB9P_TYP_T[^]]+\]\s*=\s*\(tmessage_handler\)\s*(?P<handler>\S+),\s*$" ) @@ -383,9 +383,9 @@ def main( tmessage_handlers.add(m.group("handler")) lib9p_msgs: set[str] = set() - if any(fname.endswith("lib9p/9p.c") for fname in c_fnames): + if any(fname.endswith("lib9p/9p.c") for fname in arg_c_fnames): generated_c = next( - fname for fname in c_fnames if fname.endswith("lib9p/9p.generated.c") + fname for fname in arg_c_fnames if fname.endswith("lib9p/9p.generated.c") ) re_lib9p_msg_entry = re.compile(r"^\s*_MSG_(?:[A-Z]+)\((?P<typ>\S+)\),$") with open(generated_c, "r") as fh: @@ -643,7 +643,7 @@ def main( # TinyUSB device ################################################# - if any(fname.endswith("/tinyusb/src/device/usbd.c") for fname in c_fnames): + if any(fname.endswith("/tinyusb/src/device/usbd.c") for fname in arg_c_fnames): tusb_config_fname = ( arg_base_dir + "/cmd/sbc_harness/config/tusb_config.h" ) # TODO: FIXME @@ -661,7 +661,9 @@ def main( tusb_config[k] = bool(int(v)) usbd_fname = next( - fname for fname in c_fnames if fname.endswith("/tinyusb/src/device/usbd.c") + fname + for fname in arg_c_fnames + if fname.endswith("/tinyusb/src/device/usbd.c") ) tud_drivers: dict[str, set[str]] = {} re_tud_entry = re.compile( @@ -883,20 +885,29 @@ def main( if __name__ == "__main__": - pico_platform = sys.argv[1] - base_dir = sys.argv[2] - fnames = sys.argv[3:] - re_suffix = re.compile(r"\.c\.o(bj)?$") - ci_fnames = [ - re_suffix.sub(".c.ci", fname) for fname in fnames if re_suffix.search(fname) - ] - - c_fnames = [fname for fname in fnames if fname.endswith(".c")] + def _main() -> None: + pico_platform = sys.argv[1] + base_dir = sys.argv[2] + obj_fnames = set(sys.argv[3:]) + + re_c_obj_suffix = re.compile(r"\.c\.(?:o|obj)$") + + c_fnames: set[str] = set() + ci_fnames: set[str] = set() + for obj_fname in obj_fnames: + if re_c_obj_suffix.search(obj_fname): + ci_fnames.add(re_c_obj_suffix.sub(".c.ci", obj_fname)) + with open(obj_fname + ".d", "r") as fh: + c_fnames.update( + fh.read().replace("\\\n", " ").split(":")[-1].split() + ) + + main( + arg_pico_platform=pico_platform, + arg_base_dir=base_dir, + arg_ci_fnames=ci_fnames, + arg_c_fnames=c_fnames, + ) - main( - arg_pico_platform=pico_platform, - arg_base_dir=base_dir, - arg_ci_fnames=ci_fnames, - arg_c_fnames=c_fnames, - ) + _main() |