继续完成 web-rtcp-5axis-sim-plan
结论:完成 LinuxCNC kinematics WASM ABI 覆盖,并将 web-rtcp-5axis-sim-plan 的 RTCP frame/boundary adapter 接到 xyzac-trt kinematics SDK;Node、build、browser smoke 验证通过。
This commit is contained in:
226
wasm-port/tools/build_kinematics_wasm.sh
Executable file
226
wasm-port/tools/build_kinematics_wasm.sh
Executable file
@@ -0,0 +1,226 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
VENDOR_DIR="$ROOT_DIR/vendor/linuxcnc"
|
||||
WRAP_DIR="$ROOT_DIR/runtime/core/linuxcnc_wrap"
|
||||
SHIM_DIR="$ROOT_DIR/runtime/core/shims"
|
||||
INCLUDE_DIR="$ROOT_DIR/runtime/core/include"
|
||||
OUT_DIR="$ROOT_DIR/build/wasm/kinematics"
|
||||
OBJ_DIR="$OUT_DIR/obj"
|
||||
|
||||
source "$ROOT_DIR/tools/wasm_incremental_build_lib.sh"
|
||||
|
||||
mkdir -p "$OUT_DIR" "$OBJ_DIR"
|
||||
|
||||
COMMON_FLAGS=(
|
||||
-O2
|
||||
-D_GNU_SOURCE
|
||||
-DM_PI=3.14159265358979323846
|
||||
-I"$WRAP_DIR"
|
||||
-I"$SHIM_DIR"
|
||||
-I"$INCLUDE_DIR"
|
||||
-I"$VENDOR_DIR/src"
|
||||
-I"$VENDOR_DIR/src/rtapi"
|
||||
-I"$VENDOR_DIR/src/emc"
|
||||
-I"$VENDOR_DIR/src/emc/nml_intf"
|
||||
-I"$VENDOR_DIR/src/emc/motion"
|
||||
-I"$VENDOR_DIR/src/emc/tp"
|
||||
-I"$VENDOR_DIR/src/emc/kinematics"
|
||||
-I"$VENDOR_DIR/src/libnml/posemath"
|
||||
)
|
||||
|
||||
C_FLAGS=(
|
||||
-std=gnu11
|
||||
"${COMMON_FLAGS[@]}"
|
||||
)
|
||||
|
||||
CXX_FLAGS=(
|
||||
-std=c++20
|
||||
-fpermissive
|
||||
-include "$SHIM_DIR/linuxcnc_wasm_compat.hh"
|
||||
"${COMMON_FLAGS[@]}"
|
||||
)
|
||||
|
||||
build_kinematics_module() {
|
||||
local target="$1"
|
||||
local output="$2"
|
||||
shift 2
|
||||
|
||||
local sources=("$@")
|
||||
local target_obj_dir="$OBJ_DIR/$target"
|
||||
mkdir -p "$target_obj_dir"
|
||||
: > "$OUT_DIR/$target.stdout.log"
|
||||
: > "$OUT_DIR/$target.stderr.log"
|
||||
|
||||
local objects=()
|
||||
local source obj
|
||||
for source in "${sources[@]}"; do
|
||||
obj="$(source_object_path "$source" "$ROOT_DIR" "$target_obj_dir")"
|
||||
objects+=("$obj")
|
||||
case "$source" in
|
||||
*.cc|*.cpp|*.cxx)
|
||||
compile_wasm_object "$target" "$source" "$obj" "$OUT_DIR" "${CXX_FLAGS[@]}"
|
||||
;;
|
||||
*)
|
||||
compile_wasm_object "$target" "$source" "$obj" "$OUT_DIR" "${C_FLAGS[@]}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
link_wasm_module \
|
||||
"$target" \
|
||||
"$OUT_DIR/$output.js" \
|
||||
"$OUT_DIR" \
|
||||
-O2 \
|
||||
"${objects[@]}" \
|
||||
-s MODULARIZE=1 \
|
||||
-s EXPORT_ES6=1 \
|
||||
-s ENVIRONMENT=web,node \
|
||||
-s ALLOW_MEMORY_GROWTH=1 \
|
||||
-s NO_EXIT_RUNTIME=1 \
|
||||
-s EXPORTED_FUNCTIONS='["_malloc","_free","_lckins_init","_lckins_exit","_lckins_type","_lckins_switchable","_lckins_switch","_lckins_forward","_lckins_inverse","_lckins_run_probe","_lckins_free_string"]' \
|
||||
-s EXPORTED_RUNTIME_METHODS='["UTF8ToString"]'
|
||||
}
|
||||
|
||||
TRT_COMMON_SOURCES=(
|
||||
"$VENDOR_DIR/src/emc/kinematics/kins_util.c"
|
||||
"$VENDOR_DIR/src/emc/kinematics/switchkins.c"
|
||||
"$VENDOR_DIR/src/emc/kinematics/userkfuncs.c"
|
||||
"$VENDOR_DIR/src/emc/kinematics/trtfuncs.c"
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp"
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
)
|
||||
|
||||
SWITCHKINS_COMMON_SOURCES=(
|
||||
"$VENDOR_DIR/src/emc/kinematics/kins_util.c"
|
||||
"$VENDOR_DIR/src/emc/kinematics/switchkins.c"
|
||||
"$VENDOR_DIR/src/emc/kinematics/userkfuncs.c"
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp"
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
)
|
||||
|
||||
POSEMATH_SOURCES=(
|
||||
"$VENDOR_DIR/src/libnml/posemath/posemath.cc"
|
||||
"$VENDOR_DIR/src/libnml/posemath/_posemath.c"
|
||||
"$VENDOR_DIR/src/libnml/posemath/sincos.c"
|
||||
)
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_trivkins_kinematics_wasm \
|
||||
linuxcnc_trivkins_kinematics \
|
||||
"$VENDOR_DIR/src/emc/kinematics/kins_util.c" \
|
||||
"$VENDOR_DIR/src/emc/kinematics/trivkins.c" \
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_5axiskins_kinematics_wasm \
|
||||
linuxcnc_5axiskins_kinematics \
|
||||
"${SWITCHKINS_COMMON_SOURCES[@]}" \
|
||||
"$VENDOR_DIR/src/emc/kinematics/5axiskins.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_xyzac_trt_kinematics_wasm \
|
||||
linuxcnc_xyzac_trt_kinematics \
|
||||
"${TRT_COMMON_SOURCES[@]}" \
|
||||
"$VENDOR_DIR/src/emc/kinematics/xyzac-trt-kins.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_xyzbc_trt_kinematics_wasm \
|
||||
linuxcnc_xyzbc_trt_kinematics \
|
||||
"${TRT_COMMON_SOURCES[@]}" \
|
||||
"$VENDOR_DIR/src/emc/kinematics/xyzbc-trt-kins.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_corexy_kinematics_wasm \
|
||||
linuxcnc_corexy_kinematics \
|
||||
"$VENDOR_DIR/src/emc/kinematics/corexykins.c" \
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_rotate_kinematics_wasm \
|
||||
linuxcnc_rotate_kinematics \
|
||||
"$VENDOR_DIR/src/emc/kinematics/rotatekins.c" \
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_rose_kinematics_wasm \
|
||||
linuxcnc_rose_kinematics \
|
||||
"$VENDOR_DIR/src/emc/kinematics/rosekins.c" \
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_max_kinematics_wasm \
|
||||
linuxcnc_max_kinematics \
|
||||
"$VENDOR_DIR/src/emc/kinematics/maxkins.c" \
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_lineardelta_kinematics_wasm \
|
||||
linuxcnc_lineardelta_kinematics \
|
||||
"$VENDOR_DIR/src/emc/kinematics/lineardeltakins.c" \
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_rotarydelta_kinematics_wasm \
|
||||
linuxcnc_rotarydelta_kinematics \
|
||||
"$VENDOR_DIR/src/emc/kinematics/rotarydeltakins.c" \
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_scorbot_kinematics_wasm \
|
||||
linuxcnc_scorbot_kinematics \
|
||||
"$VENDOR_DIR/src/emc/kinematics/scorbot-kins.c" \
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_tripod_kinematics_wasm \
|
||||
linuxcnc_tripod_kinematics \
|
||||
"$VENDOR_DIR/src/emc/kinematics/tripodkins.c" \
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_scara_kinematics_wasm \
|
||||
linuxcnc_scara_kinematics \
|
||||
"${SWITCHKINS_COMMON_SOURCES[@]}" \
|
||||
"$VENDOR_DIR/src/emc/kinematics/scarakins.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_puma_kinematics_wasm \
|
||||
linuxcnc_puma_kinematics \
|
||||
"${SWITCHKINS_COMMON_SOURCES[@]}" \
|
||||
"$VENDOR_DIR/src/emc/kinematics/pumakins.c" \
|
||||
"${POSEMATH_SOURCES[@]}"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_genser_kinematics_wasm \
|
||||
linuxcnc_genser_kinematics \
|
||||
"${SWITCHKINS_COMMON_SOURCES[@]}" \
|
||||
"$VENDOR_DIR/src/emc/kinematics/genserfuncs.c" \
|
||||
"$VENDOR_DIR/src/emc/kinematics/genserkins.c" \
|
||||
"$VENDOR_DIR/src/libnml/posemath/gomath.c" \
|
||||
"$VENDOR_DIR/src/libnml/posemath/sincos.c"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_genhex_kinematics_wasm \
|
||||
linuxcnc_genhex_kinematics \
|
||||
"${SWITCHKINS_COMMON_SOURCES[@]}" \
|
||||
"$VENDOR_DIR/src/emc/kinematics/genhexkins.c" \
|
||||
"${POSEMATH_SOURCES[@]}"
|
||||
|
||||
build_kinematics_module \
|
||||
linuxcnc_pentakins_kinematics_wasm \
|
||||
linuxcnc_pentakins_kinematics \
|
||||
"$VENDOR_DIR/src/emc/kinematics/pentakins.c" \
|
||||
"${POSEMATH_SOURCES[@]}" \
|
||||
"$WRAP_DIR/linuxcnc_hal_adapter.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_kinematics_wasm.c"
|
||||
Reference in New Issue
Block a user