3.8 KiB
LinuxCNC rs274 source map
This is the working map for moving from native librs274 linking to source-level compilation and then to wasm.
Compile assumptions
Native user-space syntax checks require:
-DULAPI- LinuxCNC include roots:
linuxcnc/srclinuxcnc/src/emclinuxcnc/src/emc/nml_intflinuxcnc/src/emc/rs274ngclinuxcnc/src/emc/motionlinuxcnc/src/emc/pythonpluginlinuxcnc/include
- Python development headers for current upstream sources, because the interpreter still embeds Python/Boost.Python paths.
Source groups
Interpreter core
These are the first group to keep compiling while we peel away native-only dependencies:
interp_arc.ccinterp_array.ccinterp_base.ccinterp_check.ccinterp_convert.ccinterp_cycles.ccinterp_execute.ccinterp_find.ccinterp_g7x.ccinterp_inspection.ccinterp_internal.ccinterp_inverse.ccinterp_namedparams.ccinterp_o_word.ccinterp_python.ccinterp_queue.ccinterp_read.ccinterp_remap.ccinterp_setup.ccinterp_write.ccmodal_state.ccnurbs_additional_functions.ccrs274ngc_pre.cc
Python binding modules
These are not needed for the browser simulator ABI and should not be part of the wasm core:
canonmodule.ccgcodemodule.ccinterpmodule.ccpyarrays.ccpyblock.ccpyemctypes.ccpyinterp1.ccpyparamclass.cc
Browser-hostile dependencies to replace
- Python/Boost.Python remap and named parameter hooks.
dlopen/dlsyminterpreter loading ininterp_base.cc.- mmap-backed
tooldata_mmap.cc. - persistent parameter file writes.
- dynamic INI/HAL queries.
Current syntax probe
Run:
./test-linuxcnc-source-syntax.sh
The probe checks a representative subset of source files with -DULAPI. It is not a full source build yet; it is a guardrail before the full source backend is introduced.
Current object probe
Run:
./test-linuxcnc-source-objects.sh
This compiles every core: entry in linuxcnc-rs274-source-files.txt into object files. As of this step, the core interpreter sources compile to .o in the native environment with -DULAPI.
The next boundary is linking. Expected link risks:
PythonPluginand Boost.Python symbols from remap/named parameter paths.- Python module initialization symbols if the source backend reuses the existing builtin module setup.
tooldata_*implementations, currently mmap-backed in native LinuxCNC and unsuitable for wasm.- dynamic loader code in
interp_base.cc. - parameter file persistence in
rs274ngc_pre.cc.
Current source-link probe
Run:
./test-linuxcnc-source-link.sh
This compiles every core: interpreter source into local objects and links the
native runner without librs274. It still uses built LinuxCNC support objects
and libraries for the dependencies that have not been replaced yet:
- Boost.Python binding module initializers required by the current interpreter constructor.
libpypluginfor Python remap and named-parameter hooks.liblinuxcnciniandliblinuxcnchalfor INI/HAL named parameter paths.liblinuxcnc-uspace-posixforrtapi_*user-space helpers.libtooldatafor the current mmap-backed native tool table.
This is not wasm-ready yet, but it proves the simulator can own and compile the RS274 interpreter core sources directly. The next source-port boundary is to replace each support dependency with browser-safe shims instead of pulling in the LinuxCNC task, motion, HAL, and Python runtime layers.
The native runner used by this probe now recognizes simulator-owned control
lines before handing code to LinuxCNC: M428, M429, M430, G43.4,
G43.5, and G49. This keeps the direct runner aligned with the public
linuxcnc-rs274 API backend for RTCP and kinematics switch tests.