使用刚更新的 AGENTS.md 和 align-linuxcnc 加速规则执行

结论:按 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 均通过。
This commit is contained in:
cnc
2026-06-05 15:21:06 +08:00
parent 504b9b6d23
commit 98755528e4

View File

@@ -1,4 +1,5 @@
#include "cnc_sim_api.h" #include "cnc_sim_api.h"
#include "boost/python/object.hpp"
#include "hal.h" #include "hal.h"
#include "libnml/nml/stat_msg.hh" #include "libnml/nml/stat_msg.hh"
@@ -9,6 +10,14 @@
#include <vector> #include <vector>
#include <wordexp.h> #include <wordexp.h>
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(), // LinuxCNC source basis: src/emc/rs274ngc/rs274ngc_pre.cc provides read(),
// execute(), and wordexp() paths; interp_convert.cc converts G0, G2, and M30. // execute(), and wordexp() paths; interp_convert.cc converts G0, G2, and M30.
// src/emc/rs274ngc/interp_namedparams.cc calls the HAL lookup functions // src/emc/rs274ngc/interp_namedparams.cc calls the HAL lookup functions
@@ -129,6 +138,23 @@ bool nml_status_constructors_match_linuxcnc() {
status._state == -1; 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 } // namespace
int main() { int main() {
@@ -147,6 +173,9 @@ int main() {
if (!nml_status_constructors_match_linuxcnc()) { if (!nml_status_constructors_match_linuxcnc()) {
return 9; return 9;
} }
if (!builtin_modules_match_linuxcnc_preview_runtime()) {
return 10;
}
std::vector<CncSimEvent> events; std::vector<CncSimEvent> events;
CncSimHandle *sim = cnc_sim_create(); CncSimHandle *sim = cnc_sim_create();