diff --git a/check-linuxcnc-wasm-blockers-source-map.sh b/check-linuxcnc-wasm-blockers-source-map.sh index 3c8669e..74ff735 100755 --- a/check-linuxcnc-wasm-blockers-source-map.sh +++ b/check-linuxcnc-wasm-blockers-source-map.sh @@ -102,22 +102,38 @@ if sections.get("dlopen") != ["(none)"]: if sections.get("tooldata-users") != ["(none)"]: raise SystemExit("blocked tooldata-users section is no longer empty") -required_entries = [ +required_tracked_entries = [ "src/emc/rs274ngc/gcodemodule.cc", "src/emc/rs274ngc/interpmodule.cc", "src/emc/tooldata/tooldata_mmap.cc", "src/emc/rs274ngc/interp_base.cc", "src/emc/rs274ngc/interp_o_word.cc", "src/emc/rs274ngc/rs274ngc_pre.cc", - "src/emc/tooldata/tooldata_mmap.cc -> core/wasm_shims/tooldata/tooldata_mmap_backend.cc", - "src/emc/rs274ngc/gcodemodule.cc -> core/wasm_shims/linuxcnc_runtime_shim.cc", - "src/emc/rs274ngc/pyparamclass.cc -> core/wasm_shims/python_c_api_shim.cc", ] -for entry in required_entries: +required_replacements = [ + "src/emc/rs274ngc/canonmodule.cc -> core/wasm_shims/linuxcnc_runtime_shim.cc", + "src/emc/rs274ngc/gcodemodule.cc -> core/wasm_shims/linuxcnc_runtime_shim.cc", + "src/emc/rs274ngc/interpmodule.cc -> core/wasm_shims/linuxcnc_runtime_shim.cc", + "src/emc/rs274ngc/pyarrays.cc -> core/wasm_shims/python_c_api_shim.cc", + "src/emc/rs274ngc/pyblock.cc -> core/wasm_shims/python_c_api_shim.cc", + "src/emc/rs274ngc/pyemctypes.cc -> core/wasm_shims/python_c_api_shim.cc", + "src/emc/rs274ngc/pyinterp1.cc -> core/wasm_shims/python_c_api_shim.cc", + "src/emc/rs274ngc/pyparamclass.cc -> core/wasm_shims/python_c_api_shim.cc", + "src/emc/tooldata/tooldata_mmap.cc -> core/wasm_shims/tooldata/tooldata_mmap_backend.cc", +] +for entry in required_tracked_entries: if entry not in output: raise SystemExit(f"WASM blocker analyzer output missing required entry: {entry}") if entry not in source_map: raise SystemExit(f"docs/linuxcnc-wasm-blockers-source-map.md missing required entry: {entry}") +replacement_entries = [entry for entry in sections.get("blocked-replacements", []) if entry != "(none)"] +if replacement_entries != required_replacements: + raise SystemExit(f"WASM blocker replacement set changed: {replacement_entries}") +if "Required replacement set:" not in source_map: + raise SystemExit("docs/linuxcnc-wasm-blockers-source-map.md must document the complete replacement set") +for entry in required_replacements: + if entry not in source_map: + raise SystemExit(f"docs/linuxcnc-wasm-blockers-source-map.md missing required replacement: {entry}") shim_paths = set(Path(line).as_posix() for line in subprocess.check_output( ["./list-linuxcnc-wasm-safe-shims.sh"], diff --git a/docs/linuxcnc-wasm-blockers-source-map.md b/docs/linuxcnc-wasm-blockers-source-map.md index 813dd97..dec93f5 100644 --- a/docs/linuxcnc-wasm-blockers-source-map.md +++ b/docs/linuxcnc-wasm-blockers-source-map.md @@ -46,11 +46,17 @@ a source-link/build guard only; it does not add CNC behavior and must not become | `core-tooldata-users-shimmed` | 2 | Core RS274/NML users of tooldata declarations. | | `core-native-fs-shimmed` | 16 | Core sources with native filesystem includes or calls covered by WASM shims. | -Required replacement examples: +Required replacement set: -- `src/emc/tooldata/tooldata_mmap.cc -> core/wasm_shims/tooldata/tooldata_mmap_backend.cc` +- `src/emc/rs274ngc/canonmodule.cc -> core/wasm_shims/linuxcnc_runtime_shim.cc` - `src/emc/rs274ngc/gcodemodule.cc -> core/wasm_shims/linuxcnc_runtime_shim.cc` +- `src/emc/rs274ngc/interpmodule.cc -> core/wasm_shims/linuxcnc_runtime_shim.cc` +- `src/emc/rs274ngc/pyarrays.cc -> core/wasm_shims/python_c_api_shim.cc` +- `src/emc/rs274ngc/pyblock.cc -> core/wasm_shims/python_c_api_shim.cc` +- `src/emc/rs274ngc/pyemctypes.cc -> core/wasm_shims/python_c_api_shim.cc` +- `src/emc/rs274ngc/pyinterp1.cc -> core/wasm_shims/python_c_api_shim.cc` - `src/emc/rs274ngc/pyparamclass.cc -> core/wasm_shims/python_c_api_shim.cc` +- `src/emc/tooldata/tooldata_mmap.cc -> core/wasm_shims/tooldata/tooldata_mmap_backend.cc` Required tracked core examples: