From 98755528e43790e608cc2ec9308d31673575e3eb Mon Sep 17 00:00:00 2001 From: cnc Date: Fri, 5 Jun 2026 15:21:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=88=9A=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=9A=84=20AGENTS.md=20=E5=92=8C=20align-linuxcnc=20=E5=8A=A0?= =?UTF-8?q?=E9=80=9F=E8=A7=84=E5=88=99=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 结论:按 align-linuxcnc 先确认干净基线,避免 source-map-only 和 smoke 扩展;增强 WASM runtime link probe,覆盖 LinuxCNC src/emc/rs274ngc/gcodemodule.cc 与 src/emc/task/taskclass.cc 的 _task=0 preview 边界和 builtin_modules interpreter/emccanon 表结构。\n\n测试结论:./test-linuxcnc-wasm-runtime-link.sh、./test-native.sh、./test-linuxcnc-source-link.sh 均通过。 --- .../cnc_sim_wasm_runtime_probe_main.cc | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/core/wasm_shims/cnc_sim_wasm_runtime_probe_main.cc b/core/wasm_shims/cnc_sim_wasm_runtime_probe_main.cc index 6aa9b65..8fdf44c 100644 --- a/core/wasm_shims/cnc_sim_wasm_runtime_probe_main.cc +++ b/core/wasm_shims/cnc_sim_wasm_runtime_probe_main.cc @@ -1,4 +1,5 @@ #include "cnc_sim_api.h" +#include "boost/python/object.hpp" #include "hal.h" #include "libnml/nml/stat_msg.hh" @@ -9,6 +10,14 @@ #include #include +extern int _task; + +extern "C" { +extern PyObject *PyInit_interpreter(void); +extern PyObject *PyInit_emccanon(void); +extern struct _inittab builtin_modules[]; +} + // LinuxCNC source basis: src/emc/rs274ngc/rs274ngc_pre.cc provides read(), // execute(), and wordexp() paths; interp_convert.cc converts G0, G2, and M30. // src/emc/rs274ngc/interp_namedparams.cc calls the HAL lookup functions @@ -129,6 +138,23 @@ bool nml_status_constructors_match_linuxcnc() { status._state == -1; } +bool builtin_modules_match_linuxcnc_preview_runtime() { + // LinuxCNC source basis: src/emc/rs274ngc/gcodemodule.cc defines _task=0 + // for preview and registers interpreter/emccanon builtin module entries; + // src/emc/task/taskclass.cc uses the same builtin module table shape. + return _task == 0 && + builtin_modules[0].name && + std::strcmp(builtin_modules[0].name, "interpreter") == 0 && + builtin_modules[0].initfunc == PyInit_interpreter && + builtin_modules[0].initfunc() == nullptr && + builtin_modules[1].name && + std::strcmp(builtin_modules[1].name, "emccanon") == 0 && + builtin_modules[1].initfunc == PyInit_emccanon && + builtin_modules[1].initfunc() == nullptr && + builtin_modules[2].name == nullptr && + builtin_modules[2].initfunc == nullptr; +} + } // namespace int main() { @@ -147,6 +173,9 @@ int main() { if (!nml_status_constructors_match_linuxcnc()) { return 9; } + if (!builtin_modules_match_linuxcnc_preview_runtime()) { + return 10; + } std::vector events; CncSimHandle *sim = cnc_sim_create();