第 6 组:源码链接、构建和文档约束闭环完成

This commit is contained in:
cnc
2026-06-01 06:11:08 +08:00
parent 1498d9830d
commit 4c55ab3435
43 changed files with 8414 additions and 636 deletions

View File

@@ -27,6 +27,22 @@ designed project code. See `docs/linuxcnc-source-policy.md`.
4. Compile with Emscripten after replacing `dlopen`, Python, HAL and filesystem-only features.
5. Compare event output with native LinuxCNC using the same G-code corpus.
## Current Workstreams
The current porting work is being split into six small contexts and should be
advanced in this order:
1. `switchkins/remap` generator and tables
2. `linuxcnc-kinematics` source manifest
3. WASM filesystem and OPFS persistence
4. browser app integration
5. Node and browser smoke coverage
6. source-link, build, and documentation constraints
Each step should stay source-backed and close one small gap at a time. A single
pass should advance one workstream context only; crossing into another context
requires naming the dependency and keeping the edit set minimal.
## Dialect expansion
LinuxCNC support should be the baseline. Fanuc and Siemens support should be implemented as dialect adapters, not by forking the simulator core.

View File

@@ -159,8 +159,13 @@ LinuxCNC interpreter sources currently involve Python/Boost.Python remap paths.
- disable Python remap
- disable dynamic module loading
- replace file-backed parameter persistence with in-memory buffers
- provide browser-safe tool table and INI/config loading through JSON
- route LinuxCNC parameter-file reads and writes through an OPFS-backed wasm
workspace, preserving `rs274ngc.var` and `.bak` persistence in browser runs
as defined by `src/emc/rs274ngc/interp_internal.hh` and exercised by
`Interp::restore_parameters`/`Interp::save_parameters` in
`src/emc/rs274ngc/rs274ngc_pre.cc`
- provide browser-safe tool table and INI/config loading through JSON or
OPFS-backed files
## Step 5: Emscripten build

View File

@@ -3,8 +3,23 @@
The simulator must not grow independently designed functional behavior.
Functional behavior must come from LinuxCNC source code.
Hard rules:
- Port-first: prefer direct LinuxCNC source porting, trimming, wrapping, or
platform adaptation over project-authored replacements.
- Do not write project-owned functional CNC behavior.
- Functional CNC behavior must be ported, trimmed, wrapped, or routed from
LinuxCNC source code.
- Any G/M-code interpretation, motion behavior, kinematics, coordinate
handling, cutter compensation, canned cycle, parameter expression, modal
state, tool data, remap behavior, or RTCP behavior must first be traced to
LinuxCNC source before implementation.
- Browser-side wasm filesystem behavior must use OPFS-backed storage. Do not
add browser filesystem paths that bypass OPFS.
Allowed project code:
- LinuxCNC source porting, trimming, wrappers, and platform adaptation.
- Thin adapters between LinuxCNC source code and the simulator C API.
- Platform shims needed to compile LinuxCNC code for native tests or wasm.
- Event serialization, test fixtures, build scripts, and documentation.
@@ -22,7 +37,81 @@ Required workflow for every functional change:
2. Add or update a test that demonstrates the LinuxCNC behavior.
3. Port, wrap, or route to that LinuxCNC implementation.
4. Record the source file/function in code comments or nearby documentation when the mapping is not obvious.
5. Run `./test-native.sh` and `./test-linuxcnc-source-link.sh`.
5. Keep the change inside one active workstream context unless a dependency is
unavoidable and explicitly named in the final report.
6. Run `./test-native.sh` and `./test-linuxcnc-source-link.sh`.
7. For source-manifest, build, or build-policy changes, also run the aggregate
and guardrail checks: `./test-all-native.sh`,
`./test-linuxcnc-source-syntax.sh`, and
`./test-linuxcnc-wasm-cmake-safe-probe.sh`.
Efficiency rules:
- Do not add a smoke-only behavior path when the LinuxCNC-backed route already
exists; add coverage to the source-backed route instead.
- Do not mix generator/table work, manifests, OPFS/browser work, and build
policy cleanup in the same pass unless the files directly depend on each
other.
- Prefer tightening an existing probe or manifest over adding another broad
end-to-end smoke case.
- Default native, source-link, build-wasm, and wasm-safe CMake probe
parallelism to `CNC_SIM_BUILD_JOBS:-8`; raise it only by explicit
positive-integer environment override.
- Persistent native, source-link, and wasm-safe CMake probe build directories
may be overridden for local workflows, but must not point at the filesystem
root.
- Build policy knobs are intentionally narrow:
`CNC_SIM_BUILD_JOBS`, `CNC_SIM_NATIVE_BUILD_DIR`,
`CNC_SIM_SOURCE_LINK_BUILD_DIR`, `CNC_SIM_SOURCE_SYNTAX_BUILD_DIR`, and
`CNC_SIM_WASM_CMAKE_SAFE_PROBE_BUILD_DIR`. Build directory overrides must
stay non-empty, whitespace-free, and outside the filesystem root.
- `build-wasm.sh` keeps fixed artifact paths: CMake writes `build/wasm`, then
the script copies and byte-compares `cnc_sim.js` and `cnc_sim.wasm` under
`web/public` before running Node and browser smoke checks.
Build and source-link guardrails:
- `CNC_SIM_BUILD_JOBS` must be a positive integer and defaults to `8`.
- `test-native.sh` uses persistent `build/native-test` objects, dependency
files, and `native-build.signature`.
- `test-linuxcnc-source-link.sh` uses persistent `build/source-link-test`
objects, dependency files, and `source-link-build.signature`.
- `test-linuxcnc-source-syntax.sh` uses persistent
`build/source-syntax-test` stamps, dependency files, and
`source-syntax.signature`.
- `test-linuxcnc-wasm-cmake-safe-probe.sh` uses persistent
`build/wasm-cmake-safe-probe` and `wasm-cmake-safe-probe.signature`.
- Native, source-link, source-syntax, wasm-safe CMake probe, and build-wasm
paths must reject empty, whitespace-containing, or filesystem-root build
directory overrides before doing destructive cleanup.
- Native, source-link, source-syntax, and build-wasm entry points must serialize
shared non-concurrency-safe paths with lock files before writing fixed
outputs.
- Source-link and syntax probes must build from generated makefiles with
`-MMD -MP` dependency tracking and `make --output-sync=target`.
- `build-wasm.sh` must run blocker, syntax, object, CMake, tooldata,
`interp_*`, Python, `rs274ngc_pre`, and runtime link probes before copying
browser artifacts.
- `build-wasm.sh` must check `cmake`, `emcmake`, `emcc`, and `node` before the
Emscripten configure step.
- `build-wasm.sh` must build `cnc_sim_wasm_runtime_probe` before
`cnc_sim_wasm`.
- `build-wasm.sh` must copy `build/wasm/cnc_sim.js` and
`build/wasm/cnc_sim.wasm` exactly once each.
- `build-wasm.sh` must compare copied artifacts with `cmp -s` before running
Node or browser smoke tests.
- `build-wasm.sh` must run the Node smoke before the browser smoke.
- The default wasm manifest partition must remain explicitly checked for 25
wasm-safe core sources and 9 blocked sources.
- Manifest source listers must reject malformed lines, absolute source paths,
unknown groups, unknown filters, and duplicate source entries.
- Native link flags must include the built LinuxCNC `lib` path and rpath.
- Common CXX flag helpers must surface helper failures instead of hiding them
behind process substitution or `read`.
- Temporary probe reports must be cleaned on failure and preserved only after a
successful report path explicitly opts in.
- Documentation-only build policy edits should still update the guardrail
checks that enforce the relevant script and artifact ordering.
Current temporary exceptions: