From 18ee97b9b5df5b44d0e6e64df5f8881d2830cc08 Mon Sep 17 00:00:00 2001 From: wangdequan Date: Sun, 7 Jun 2026 17:02:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=89=E6=8E=A8=E8=8D=90=E5=BB=BA=E8=AE=AE?= =?UTF-8?q?=EF=BC=8C=E7=BB=A7=E7=BB=AD=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 结论:将 vendored LinuxCNC 轨迹规划器、cruckig、posemath 源文件纳入直接编译探针,并通过 native 验证,继续确保核心功能来源于 LinuxCNC 源程序。 --- wasm-port/docs/porting-steps-standalone.md | 8 ++ .../tests/native/verify_native_probes.sh | 33 +++++++++ wasm-port/tools/build_native_probes.sh | 74 +++++++++++++++++++ 3 files changed, 115 insertions(+) diff --git a/wasm-port/docs/porting-steps-standalone.md b/wasm-port/docs/porting-steps-standalone.md index 8696265..5fff336 100644 --- a/wasm-port/docs/porting-steps-standalone.md +++ b/wasm-port/docs/porting-steps-standalone.md @@ -459,6 +459,14 @@ Current verified progress: `rs274ngc_pre.cc`. `rs274ngc_pre.cc` is compiled with the existing standalone `UNIT_TEST`/`LINUXCNC_STANDALONE_USE_RS274_PRE_STATE` boundary that isolates Python runtime integration from the browser simulation core. +- `tools/build_native_probes.sh` now includes direct source compile probes + for the vendored LinuxCNC trajectory-planner and posemath files used by + `linuxcnc_tp_api_probe`: `tp.c`, `tc.c`, `tcq.c`, `spherical_arc.c`, + `blendmath.c`, `sp_scurve.c`, `ruckig_wrapper.c`, the selected + `cruckig/*.c` sources, `emcpose.c`, `posemath.cc`, `_posemath.c`, and + `sincos.c`. These probes use the same `TP_FLAGS` as the standalone TP + harness, including the existing `-fpermissive` boundary required by + upstream enum conversions in `tp.c`. ## Phase 4: Port INI Parsing Without Editing Upstream diff --git a/wasm-port/tests/native/verify_native_probes.sh b/wasm-port/tests/native/verify_native_probes.sh index d1b4102..d2babaf 100755 --- a/wasm-port/tests/native/verify_native_probes.sh +++ b/wasm-port/tests/native/verify_native_probes.sh @@ -34,6 +34,39 @@ check_exitcode() { check_exitcode linuxcnc_interp_state_probe check_exitcode linuxcnc_tp_api_probe check_exitcode linuxcnc_tp_api_probe.run +for name in \ + linuxcnc_tp_tp_source_probe \ + linuxcnc_tp_tc_source_probe \ + linuxcnc_tp_tcq_source_probe \ + linuxcnc_tp_spherical_arc_source_probe \ + linuxcnc_tp_blendmath_source_probe \ + linuxcnc_tp_sp_scurve_source_probe \ + linuxcnc_tp_ruckig_wrapper_source_probe \ + linuxcnc_cruckig_block_source_probe \ + linuxcnc_cruckig_brake_source_probe \ + linuxcnc_cruckig_calculator_source_probe \ + linuxcnc_cruckig_cruckig_source_probe \ + linuxcnc_cruckig_input_parameter_source_probe \ + linuxcnc_cruckig_output_parameter_source_probe \ + linuxcnc_cruckig_profile_source_probe \ + linuxcnc_cruckig_roots_source_probe \ + linuxcnc_cruckig_trajectory_source_probe \ + linuxcnc_cruckig_position_first_step1_source_probe \ + linuxcnc_cruckig_position_first_step2_source_probe \ + linuxcnc_cruckig_position_second_step1_source_probe \ + linuxcnc_cruckig_position_second_step2_source_probe \ + linuxcnc_cruckig_position_third_step1_source_probe \ + linuxcnc_cruckig_position_third_step2_source_probe \ + linuxcnc_cruckig_velocity_second_step1_source_probe \ + linuxcnc_cruckig_velocity_second_step2_source_probe \ + linuxcnc_cruckig_velocity_third_step1_source_probe \ + linuxcnc_cruckig_velocity_third_step2_source_probe \ + linuxcnc_emcpose_source_probe \ + linuxcnc_posemath_source_probe \ + linuxcnc_posemath_c_source_probe \ + linuxcnc_sincos_source_probe; do + check_exitcode "$name" +done check_exitcode linuxcnc_namedparam_harness check_exitcode linuxcnc_namedparam_harness.run check_exitcode linuxcnc_interp_minimal_harness diff --git a/wasm-port/tools/build_native_probes.sh b/wasm-port/tools/build_native_probes.sh index d61e183..1dac468 100755 --- a/wasm-port/tools/build_native_probes.sh +++ b/wasm-port/tools/build_native_probes.sh @@ -300,6 +300,72 @@ TP_RUNTIME_PROBE_SOURCES=( "$WRAP_DIR/linuxcnc_tp_api_probe.cpp" ) +TP_SOURCE_PROBE_NAMES=( + linuxcnc_tp_tp_source_probe + linuxcnc_tp_tc_source_probe + linuxcnc_tp_tcq_source_probe + linuxcnc_tp_spherical_arc_source_probe + linuxcnc_tp_blendmath_source_probe + linuxcnc_tp_sp_scurve_source_probe + linuxcnc_tp_ruckig_wrapper_source_probe + linuxcnc_cruckig_block_source_probe + linuxcnc_cruckig_brake_source_probe + linuxcnc_cruckig_calculator_source_probe + linuxcnc_cruckig_cruckig_source_probe + linuxcnc_cruckig_input_parameter_source_probe + linuxcnc_cruckig_output_parameter_source_probe + linuxcnc_cruckig_profile_source_probe + linuxcnc_cruckig_roots_source_probe + linuxcnc_cruckig_trajectory_source_probe + linuxcnc_cruckig_position_first_step1_source_probe + linuxcnc_cruckig_position_first_step2_source_probe + linuxcnc_cruckig_position_second_step1_source_probe + linuxcnc_cruckig_position_second_step2_source_probe + linuxcnc_cruckig_position_third_step1_source_probe + linuxcnc_cruckig_position_third_step2_source_probe + linuxcnc_cruckig_velocity_second_step1_source_probe + linuxcnc_cruckig_velocity_second_step2_source_probe + linuxcnc_cruckig_velocity_third_step1_source_probe + linuxcnc_cruckig_velocity_third_step2_source_probe + linuxcnc_emcpose_source_probe + linuxcnc_posemath_source_probe + linuxcnc_posemath_c_source_probe + linuxcnc_sincos_source_probe +) + +TP_SOURCE_PROBE_SOURCES=( + "$VENDOR_DIR/src/emc/tp/tp.c" + "$VENDOR_DIR/src/emc/tp/tc.c" + "$VENDOR_DIR/src/emc/tp/tcq.c" + "$VENDOR_DIR/src/emc/tp/spherical_arc.c" + "$VENDOR_DIR/src/emc/tp/blendmath.c" + "$VENDOR_DIR/src/emc/tp/sp_scurve.c" + "$VENDOR_DIR/src/emc/tp/ruckig_wrapper.c" + "$VENDOR_DIR/src/emc/tp/cruckig/block.c" + "$VENDOR_DIR/src/emc/tp/cruckig/brake.c" + "$VENDOR_DIR/src/emc/tp/cruckig/calculator.c" + "$VENDOR_DIR/src/emc/tp/cruckig/cruckig.c" + "$VENDOR_DIR/src/emc/tp/cruckig/input_parameter.c" + "$VENDOR_DIR/src/emc/tp/cruckig/output_parameter.c" + "$VENDOR_DIR/src/emc/tp/cruckig/profile.c" + "$VENDOR_DIR/src/emc/tp/cruckig/roots.c" + "$VENDOR_DIR/src/emc/tp/cruckig/trajectory.c" + "$VENDOR_DIR/src/emc/tp/cruckig/position_first_step1.c" + "$VENDOR_DIR/src/emc/tp/cruckig/position_first_step2.c" + "$VENDOR_DIR/src/emc/tp/cruckig/position_second_step1.c" + "$VENDOR_DIR/src/emc/tp/cruckig/position_second_step2.c" + "$VENDOR_DIR/src/emc/tp/cruckig/position_third_step1.c" + "$VENDOR_DIR/src/emc/tp/cruckig/position_third_step2.c" + "$VENDOR_DIR/src/emc/tp/cruckig/velocity_second_step1.c" + "$VENDOR_DIR/src/emc/tp/cruckig/velocity_second_step2.c" + "$VENDOR_DIR/src/emc/tp/cruckig/velocity_third_step1.c" + "$VENDOR_DIR/src/emc/tp/cruckig/velocity_third_step2.c" + "$VENDOR_DIR/src/emc/nml_intf/emcpose.c" + "$VENDOR_DIR/src/libnml/posemath/posemath.cc" + "$VENDOR_DIR/src/libnml/posemath/_posemath.c" + "$VENDOR_DIR/src/libnml/posemath/sincos.c" +) + INTERP_CORE_SOURCES=( "$VENDOR_DIR/src/emc/rs274ngc/modal_state.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_array.cc" @@ -378,6 +444,14 @@ else "$BUILD_DIR/linuxcnc_tp_api_probe.run.stderr.log" fi +for index in "${!TP_SOURCE_PROBE_NAMES[@]}"; do + build_object_target \ + "${TP_SOURCE_PROBE_NAMES[$index]}" \ + "$BUILD_DIR/${TP_SOURCE_PROBE_NAMES[$index]}.o" \ + "${TP_SOURCE_PROBE_SOURCES[$index]}" \ + TP_FLAGS +done + build_binary_target \ linuxcnc_namedparam_harness \ "$BUILD_DIR/linuxcnc_namedparam_harness" \