使用刚更新的 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:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user