结论:将 GET_EXTERNAL_FEED_RATE 接入 canonical feed 状态,并用 G20/G21 长度单位 fixture 验证回读。
9.5 KiB
9.5 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.shchecks that../linuxcncis at the recorded upstream commit.tools/verify_vendor_sync.shchecks that every manifest file exists invendor/linuxcnc/, that no extra vendored file exists, and that each vendored file is byte-identical to the matching upstream file.tools/build_native_probes.shbuilds source-level native compile probes for every.cand.ccfile in the manifest.tests/native/verify_native_probes.shchecks that every manifest.cand.ccfile has a matching source probe inbuild/native/source-probes.tsv.tools/verify_no_standalone_cnc_semantics.shrejects standaloneInterp::convert_g()definitions outsidevendor/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 |
| 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 future adapter |
| 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, hexapodgenhexkins, and pentapodpentakinshave 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.ccandinterp_queue.cc. - Browser/WASM C ABI and JS SDK layers are not yet built for the full interpreter/planner core.
- OPFS persistence is not yet connected to INI, tool table, parameter file, or G-code program loading.
- Native LinuxCNC GUI code remains out of scope for implementation.