Files
cnc_wams/wasm-port/docs/source-reuse-map.md
wangdequan 9a9fb5d4c1 按建议,继续完成后续工作
结论:已将 INI 面板的 OPFS 文本文件读写抽为 host-side file-service,并新增 Node mock 验证,确认 OPFS 边界不进入 WASM core 且可覆盖保存、读取、缺失路径和非法路径行为。
2026-06-08 00:19:52 +08:00

9.7 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::convert_g() definitions outside vendor/linuxcnc/.

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 Vendor byte sync, linuxcnc_ini_probe, linuxcnc_inifile_source_probe, tests/wasm/node/verify_ini_wasm.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
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, parameter file paths Allowed in native probes; browser OPFS remains a host-side adapter under runtime/opfs/
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 not yet built for the full interpreter/planner core. The INI parser has a Node WASM smoke harness.
  • OPFS persistence is connected to the INI panel through the host-side runtime/opfs/file-service.js adapter; tool table, parameter file, G-code program loading, and browser-level OPFS validation remain future work.
  • Native LinuxCNC GUI code remains out of scope for implementation.