summaryrefslogtreecommitdiff
path: root/build-aux
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2025-02-28 15:57:25 -0700
committerLuke T. Shumaker <lukeshu@lukeshu.com>2025-02-28 19:39:29 -0700
commit2de5915f7a06a75611b63507fe7ee123d127a870 (patch)
tree54165ab0d71b1629446bc1f95669740ba2a8eebc /build-aux
parent98bd1e6a2d619f015fc6ccfff48f3e129603b3ee (diff)
stack.c.gen: Also inspect .h files
Diffstat (limited to 'build-aux')
-rwxr-xr-xbuild-aux/stack.c.gen61
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()