Files
cnc_wams/wasm-port/docs/source-reuse-map.md
wangdequan d2041596ed 补齐 INI 文件名复用边界文档
结论:源复用图和漂移报告现在明确 INI 文件名查询来自 LinuxCNC inifile.cc,OPFS 默认路径和显式覆盖只属于 host 边界。
2026-06-08 10:13:25 +08:00

14 KiB

Source Reuse Map

Purpose

This map records which LinuxCNC source files are currently vendored into the standalone WASM port, why they are present, which standalone boundary they touch, and how the port verifies that they still come directly from upstream LinuxCNC.

The authoritative extraction list is tools/source-manifest.txt. The upstream baseline is recorded in tools/upstream-baseline.txt and docs/scope-and-baseline.md.

Validation Contract

Current validation is intentionally mechanical:

  • tools/verify_upstream_baseline.sh checks that ../linuxcnc is at the recorded upstream commit.
  • tools/verify_vendor_sync.sh checks that every manifest file exists in vendor/linuxcnc/, that no extra vendored file exists, and that each vendored file is byte-identical to the matching upstream file.
  • tools/build_native_probes.sh builds source-level native compile probes for every .c and .cc file in the manifest.
  • tests/native/verify_native_probes.sh checks that every manifest .c and .cc file has a matching source probe in build/native/source-probes.tsv.
  • tools/verify_no_standalone_cnc_semantics.sh rejects standalone Interp::... member definitions outside vendor/linuxcnc/, except for the documented Python/remap runtime-edge stubs in runtime/core/linuxcnc_wrap/linuxcnc_interp_edge_stubs.cpp.

Reuse Matrix

Capability LinuxCNC source files Port classification Standalone boundary Current validation
INI parsing src/emc/ini/inifile.cc, inifile.h, inifile.hh Copy unchanged Native file IO remains LinuxCNC-style in the vendored parser; browser OPFS integration remains outside this layer; runtime/sdk/src/index.js exports the INI SDK wrapper around the generated WASM C ABI, including LinuxCNC iniFindBool() for machine-session flags and LinuxCNC string lookup for INI-declared [RS274NGC]PARAMETER_FILE and [EMCIO]TOOL_TABLE machine file names Vendor byte sync, linuxcnc_ini_probe, linuxcnc_inifile_source_probe, tests/wasm/node/verify_ini_wasm.sh boolean plus file-name lookup assertions, tests/browser/verify_ini_panel_browser.sh, tests/host/verify_host_smokes.sh
RTAPI compatibility headers src/rtapi/rtapi_*.h in the manifest Copy unchanged plus standalone shim include path runtime/core/shims/rtapi.h supplies the minimal standalone RTAPI surface needed by vendored code Vendor byte sync, compile coverage through dependent source probes
Canon/NML-facing interpreter types src/emc/nml_intf/canon*.hh, emctool.h, interp_return.hh, motion_types.h, emcpose.*, emcpos.h, debugflags.h, src/emc/linuxcnc.h Copy unchanged plus narrow standalone status shim NML transport is not ported; runtime/core/shims/nml_intf/emc.hh exposes only the emcStatus machine-units status edge currently needed by vendored interpreter conversion and initialization code Vendor byte sync, dependent source probes, linuxcnc_emc_status_probe, linuxcnc_tp_api_probe, interpreter harnesses
Motion state headers src/emc/motion/state_tag.h, emcmotcfg.h, simple_tp.h, motion.h, mot_priv.h, axis.h Copy unchanged Realtime motion process is not ported; standalone probes seed the small motion status/config state required by TP calls Vendor byte sync, linuxcnc_tp_api_probe
Identity/trivial kinematics src/emc/kinematics/kinematics.h, cubic.h, kins_util.c, trivkins.c Copy unchanged HAL component lifecycle and RTAPI module metadata are replaced by standalone shims; forward/inverse mapping behavior remains LinuxCNC source Vendor byte sync, per-file source probes, linuxcnc_kinematics_probe
Switchable 5-axis bridge kinematics src/emc/kinematics/5axiskins.c, switchkins.c, switchkins.h, userkfuncs.c, plus src/rtapi/rtapi_ctype.h Copy unchanged HAL pin allocation, HAL component lifecycle, and RTAPI module metadata are standalone runtime edges; switchable 5-axis forward/inverse behavior remains LinuxCNC source Vendor byte sync, per-file source probes, linuxcnc_5axis_kinematics_probe
TRT table-rotary kinematics src/emc/kinematics/trtfuncs.c, xyzac-trt-kins.c, xyzbc-trt-kins.c Copy unchanged HAL pin allocation and switchkins lifecycle stay runtime boundaries; XYZAC/XYZBC TRT forward/inverse behavior remains LinuxCNC source Vendor byte sync, per-file source probes, linuxcnc_xyzac_trt_kinematics_probe, linuxcnc_xyzbc_trt_kinematics_probe
Additional non-switchable kinematics src/emc/kinematics/corexykins.c, rotatekins.c, rosekins.c, maxkins.c, lineardeltakins.c, lineardeltakins-common.h, rotarydeltakins.c, rotarydeltakins-common.h, scorbot-kins.c, tripodkins.c, scarakins.c, pumakins.c, pumakins.h, genhexkins.c, genhexkins.h, genserfuncs.c, genserkins.c, genserkins.h, ugenserkins.c, pentakins.c, pentakins.h, cubic.c Copy unchanged HAL pin allocation, HAL parameter allocation, HAL component lifecycle, RTAPI module metadata, Go math C/C++ linkage, switchkins iterative-forward warmup, and userspace test-program process entry remain standalone runtime edges; forward/inverse behavior remains LinuxCNC source where the module exposes it Vendor byte sync, per-file source probes, linuxcnc_corexy_kinematics_probe, linuxcnc_rotate_kinematics_probe, linuxcnc_rose_kinematics_probe, linuxcnc_max_kinematics_probe, linuxcnc_lineardelta_kinematics_probe, linuxcnc_rotarydelta_kinematics_probe, linuxcnc_scorbot_kinematics_probe, linuxcnc_tripod_kinematics_probe, linuxcnc_scara_kinematics_probe, linuxcnc_puma_kinematics_probe, linuxcnc_genser_kinematics_probe, linuxcnc_genhex_kinematics_probe, linuxcnc_pentakins_kinematics_probe
Trajectory planner src/emc/tp/tp.c, tc.c, tcq.c, spherical_arc.c, blendmath.c, sp_scurve.c, ruckig_wrapper.c, plus matching *.h files Copy unchanged Native realtime scheduling and motion process state are replaced by standalone probe setup Vendor byte sync, per-file source probes, linuxcnc_tp_api_probe
Ruckig C planner support Selected src/emc/tp/cruckig/*.c and *.h files in the manifest Copy unchanged Used as LinuxCNC planner support code through vendored TP sources Vendor byte sync, per-file source probes
Posemath src/libnml/posemath/posemath.cc, _posemath.c, gomath.c, sincos.c, and matching headers Copy unchanged gomath.c is compiled as C; rtapi.h shim is C/C++ compatible for this boundary Vendor byte sync, per-file source probes, TP probe
RS274 interpreter state and parser src/emc/rs274ngc/modal_state.*, interp_internal.*, interp_read.cc, interp_check.cc, interp_execute.cc, interp_find.cc, interp_array.cc, interp_queue.*, rs274ngc*, units.h Copy unchanged Python/remap/runtime edges are isolated in standalone wrappers and shims; parser and execution logic remain LinuxCNC source Vendor byte sync, per-file source probes, interpreter harness fixtures
RS274 conversion semantics src/emc/rs274ngc/interp_convert.cc, interp_arc.cc, interp_inverse.cc, interp_cycles.cc, interp_g7x.cc, interp_o_word.cc, interp_write.cc Copy unchanged Canonical calls are captured by standalone event sink functions; conversion behavior stays in vendored LinuxCNC files; feed-rate state is read back through the canonical runtime boundary during length-unit conversion Vendor byte sync, per-file source probes, canonical fixture suite, no standalone Interp::convert_g() guard
Named parameters and tool slot status src/emc/rs274ngc/interp_namedparams.cc, related interpreter headers Copy unchanged _ini[...] and _hal[...] resolve through standalone INI/HAL adapters while lookup order stays LinuxCNC-derived; current/selected tool slot reads for vendored Interp::synch() come from the standalone tool adapter Vendor byte sync, source probe, linuxcnc_namedparam_harness, linuxcnc_interp_init_harness
Tool table parsing and formatting src/emc/tooldata/tooldata_common.cc Copy unchanged plus standalone storage callbacks Native file parsing/formatting stays in vendored LinuxCNC source; the standalone tool adapter supplies tooldata_get()/tooldata_put() storage and index lookup, the WASM boundary only selects the LinuxCNC non-random or random-toolchanger branch via tooldata_init(), and OPFS remains a host-side persistence boundary Vendor byte sync, linuxcnc_tooldata_common_source_probe, tests/wasm/node/verify_interp_wasm.sh non-random/random load/save tool-table assertions
Dynamic interpreter base src/emc/rs274ngc/interp_base.* Copy unchanged interp_base.cc source probe uses standalone EMC2_HOME compile-time path boundary for LinuxCNC dynamic interpreter lookup Vendor byte sync, linuxcnc_interp_base_source_probe

Dependency Matrix

Dependency LinuxCNC files that expose it Standalone treatment
Native file IO inifile.cc, rs274ngc_pre.cc, tooldata_common.cc, parameter file paths, tool table paths Allowed in native probes; the interpreter WASM C ABI validates parameter-file restore/save by calling vendored Interp::restore_parameters() and Interp::save_parameters() and tool-table load/save by calling vendored tooldata_load() and tooldata_save() against Emscripten filesystem paths; browser OPFS remains a host-side adapter under runtime/opfs/, with path ownership in runtime/opfs/path-model.js, generic snapshot persistence in runtime/opfs/snapshot-store.js, pure-text machine-file persistence in runtime/opfs/machine-file-store.js, OPFS-to-WASM parameter-file copying in runtime/opfs/linuxcnc-parameter-bridge.js, OPFS-to-WASM tool-table copying in runtime/opfs/linuxcnc-tool-table-bridge.js, and grouped INI/parameter/tool-table session loading in runtime/opfs/linuxcnc-machine-session-bridge.js, including INI-derived [RS274NGC]PARAMETER_FILE and [EMCIO]TOOL_TABLE OPFS filename selection through the LinuxCNC-backed INI SDK; explicit host session file-name options take precedence over INI-derived names, missing INI file-name values fall back to host default linuxcnc.var and tool.tbl paths, and OPFS path validation rejects traversal and nested segments before host storage access
RTAPI rtapi_*.h, TP, posemath, motion headers Minimal standalone shim in runtime/core/shims/rtapi.h
NML transport emc.hh, motion/NML type headers Transport is not ported; only the status/type edges needed by vendored compute code are exposed through standalone shims and probes
HAL runtime named parameter lookup, kinematics component lifecycle, and runtime status edges Standalone HAL adapter under runtime/core/linuxcnc_wrap/
Python/remap rs274ngc_pre.cc, interp_o_word.cc, remap hooks Stubbed at runtime boundary; no Python CNC semantics are reimplemented
Canonical machine actions interp_convert.cc, interp_execute.cc, interp_queue.cc Captured by standalone canonical event sink functions for regression fixtures
Realtime scheduling TP and motion headers Not ported; native TP probes seed deterministic status/config state
GUI None used as implementation Native LinuxCNC GUI remains reference-only

Known Gaps

  • Additional non-trivial kinematics implementation files are now extracted at source-probe level. Serial genserkins, hexapod genhexkins, and pentapod pentakins have native runtime baselines; full runtime machine baselines for userspace genser flows are not yet established.
  • Cutter compensation positive motion and negative interpreter paths are fixture-covered through vendored interp_convert.cc and interp_queue.cc.
  • Browser/WASM C ABI and JS SDK layers are now present for the INI parser and the current interpreter-core smoke scope. The interpreter SDK is a thin allocation, filesystem, and C ABI wrapper over vendored LinuxCNC execution paths, including parameter-file restore/save through vendored rs274ngc_pre.cc and non-random/random tool-table load/save through vendored tooldata_common.cc; it does not define G-code, parameter, or tool-table semantics. Full planner/session SDK coverage remains future work.
  • OPFS persistence is connected to the INI panel through the host-side runtime/opfs/file-service.js adapter. runtime/opfs/path-model.js now defines paths for INI, tool table, parameter file, G-code program, preview-cache, and session-snapshot targets. runtime/opfs/snapshot-store.js adds a generic JSON session snapshot envelope, supports custom snapshot filenames under the session directory, and validates its format, version, session id, metadata, payload shape, and filename boundary. runtime/opfs/machine-file-store.js adds pure-text storage for INI, tool table, parameter file, and G-code program content, with G-code program filenames constrained by runtime/opfs/path-model.js. runtime/opfs/linuxcnc-parameter-bridge.js copies OPFS-backed parameter files into the interpreter SDK filesystem and writes back the LinuxCNC-saved parameter file plus backup. runtime/opfs/linuxcnc-tool-table-bridge.js copies OPFS-backed tool tables into the interpreter SDK filesystem and writes back the LinuxCNC-saved tool table. runtime/opfs/linuxcnc-machine-session-bridge.js groups INI, parameter, and tool-table loading into one host-side session load boundary and can derive the random-toolchanger tooldata mode from [EMCIO]RANDOM_TOOLCHANGER plus parameter/tool-table OPFS file names from [RS274NGC]PARAMETER_FILE and [EMCIO]TOOL_TABLE through the LinuxCNC-backed INI SDK. Explicit host session file-name options take precedence over those INI-derived names, missing INI file-name values fall back to the default host path model, and invalid traversal or nested file names are rejected by runtime/opfs/path-model.js. Full machine-state restoration remains future work.
  • Native LinuxCNC GUI code remains out of scope for implementation.