Files
cnc_wams/wasm-port/tools/verify_task_taskintf_motion_bridge.sh
2026-07-08 09:20:47 -04:00

87 lines
4.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
LINUXCNC_ROOT="${LINUXCNC_ROOT:-$ROOT_DIR/../linuxcnc}"
UPSTREAM_TASKINTF="$LINUXCNC_ROOT/src/emc/task/taskintf.cc"
UPSTREAM_USRMOT="$LINUXCNC_ROOT/src/emc/motion/usrmotintf.cc"
SUBSET_SRC="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.cc"
SUBSET_HDR="$ROOT_DIR/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hh"
LCMOT_HDR="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.h"
LCMOT_SRC="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c"
TASK_WRAPPER="$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp"
WASM_TEST="$ROOT_DIR/tests/wasm/node/verify_task_hal_wasm.mjs"
BUILD_SCRIPT="$ROOT_DIR/tools/build_task_hal_wasm.sh"
MATRIX="$ROOT_DIR/working/04-任务矩阵.md"
fail() {
printf 'task_taskintf_motion_bridge_status=fail\n'
printf 'task_taskintf_motion_bridge_error=%s\n' "$1"
exit 1
}
require_file() {
local label="$1"
local file="$2"
[[ -f "$file" ]] || fail "$label missing: $file"
printf 'task_taskintf_motion_bridge_%s=ok\n' "$label"
}
require_text() {
local label="$1"
local file="$2"
local text="$3"
grep -Fq "$text" "$file" || fail "$label missing"
printf 'task_taskintf_motion_bridge_%s=ok\n' "$label"
}
require_file upstream_taskintf "$UPSTREAM_TASKINTF"
require_file upstream_usrmot "$UPSTREAM_USRMOT"
require_file subset_source "$SUBSET_SRC"
require_file subset_header "$SUBSET_HDR"
require_file lcmot_header "$LCMOT_HDR"
require_file lcmot_source "$LCMOT_SRC"
require_file task_wrapper "$TASK_WRAPPER"
require_file wasm_test "$WASM_TEST"
require_file build_script "$BUILD_SCRIPT"
require_file matrix "$MATRIX"
for fn in emcMotionInit emcMotionUpdate emcMotionAbort; do
require_text "upstream_taskintf_$fn" "$UPSTREAM_TASKINTF" "int $fn("
done
for fn in usrmotReadEmcmotStatus usrmotReadEmcmotConfig usrmotReadEmcmotError; do
require_text "upstream_usrmot_$fn" "$UPSTREAM_USRMOT" "$fn"
done
require_text subset_has_motion_init "$SUBSET_HDR" "lc_taskintf_subset_motion_init"
require_text subset_has_motion_update "$SUBSET_HDR" "lc_taskintf_subset_motion_update"
require_text subset_has_motion_abort "$SUBSET_HDR" "lc_taskintf_subset_motion_abort"
require_text subset_init_maps_lcmot "$SUBSET_SRC" "lcmot_init_from_ini"
require_text subset_update_reads_status "$SUBSET_SRC" "lcmot_read_status_snapshot"
require_text subset_update_reads_config "$SUBSET_SRC" "lcmot_read_config_snapshot"
require_text subset_update_reads_error "$SUBSET_SRC" "lcmot_read_error_message"
require_text subset_abort_maps_traj_abort "$SUBSET_SRC" "lc_taskintf_subset_traj_abort(out)"
require_text subset_motion_bridge_anchors "$SUBSET_SRC" "emcMotionInit,emcMotionUpdate,emcMotionAbort,usrmotReadEmcmotStatus,usrmotReadEmcmotConfig,usrmotReadEmcmotError"
require_text lcmot_has_config_type "$LCMOT_HDR" "LcmotConfigSnapshot"
require_text lcmot_has_config_read "$LCMOT_HDR" "lcmot_read_config_snapshot"
require_text lcmot_has_error_read "$LCMOT_HDR" "lcmot_read_error_message"
require_text lcmot_source_config_impl "$LCMOT_SRC" "int lcmot_read_config_snapshot"
require_text lcmot_source_error_impl "$LCMOT_SRC" "int lcmot_read_error_message"
require_text lcmot_source_error_queue "$LCMOT_SRC" "queue_error_message"
require_text wrapper_init_uses_bridge "$TASK_WRAPPER" "lc_taskintf_subset_motion_init"
require_text wrapper_update_uses_bridge "$TASK_WRAPPER" "lc_taskintf_subset_motion_update"
require_text wrapper_abort_uses_bridge "$TASK_WRAPPER" "lc_taskintf_subset_motion_abort"
require_text wrapper_status_exports_bridge "$TASK_WRAPPER" "taskintfMotionBridge"
require_text build_exports_config "$BUILD_SCRIPT" "_lcmot_read_config_snapshot"
require_text build_exports_error "$BUILD_SCRIPT" "_lcmot_read_error_message"
require_text wasm_test_asserts_bridge "$WASM_TEST" "taskintfMotionBridge"
require_text wasm_test_prints_bridge "$WASM_TEST" "taskintf_motion_bridge_status=ok"
require_text matrix_t033_done "$MATRIX" '| T-033 | `taskintf.cc` motion init/update/abort 子集 | 完成 |'
require_text matrix_t034_done "$MATRIX" '| T-034 | `taskintf.cc` traj control 子集 | 完成 |'
printf 'task_taskintf_motion_bridge_status=ok\n'