继续把 interp_execute.cc、interp_queue.cc、interp_find.cc 等 LinuxCNC 源文件纳入直接编译/链接路径,逐步删除临时 convert_g() wrapper 行为
结论:已将核心 LinuxCNC interpreter 源接入 standalone native 编译链接路径,移除 minimal runtime 中的手写 convert_g 行为,并通过 native probe 验证。
This commit is contained in:
24
wasm-port/tools/build_ini_panel.sh
Executable file
24
wasm-port/tools/build_ini_panel.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
OUT_DIR="$ROOT_DIR/runtime/ui/ini-panel"
|
||||
|
||||
emcc \
|
||||
-std=c++20 \
|
||||
-O2 \
|
||||
-I"$ROOT_DIR/runtime/core/shims" \
|
||||
-I"$ROOT_DIR/vendor/linuxcnc/src" \
|
||||
-I"$ROOT_DIR/vendor/linuxcnc/src/rtapi" \
|
||||
-I"$ROOT_DIR/vendor/linuxcnc/src/emc" \
|
||||
"$ROOT_DIR/vendor/linuxcnc/src/emc/ini/inifile.cc" \
|
||||
"$ROOT_DIR/runtime/core/linuxcnc_wrap/linuxcnc_ini_wasm.cpp" \
|
||||
-o "$OUT_DIR/linuxcnc_ini.js" \
|
||||
-s MODULARIZE=1 \
|
||||
-s EXPORT_ES6=1 \
|
||||
-s ENVIRONMENT=web \
|
||||
-s ALLOW_MEMORY_GROWTH=1 \
|
||||
-s NO_EXIT_RUNTIME=1 \
|
||||
-s FORCE_FILESYSTEM=1 \
|
||||
-s EXPORTED_FUNCTIONS='["_malloc","_free","_lcini_get_string","_lcini_tilde_expand"]' \
|
||||
-s EXPORTED_RUNTIME_METHODS='["FS","UTF8ToString","stringToUTF8","lengthBytesUTF8"]'
|
||||
198
wasm-port/tools/build_native_probes.sh
Executable file
198
wasm-port/tools/build_native_probes.sh
Executable file
@@ -0,0 +1,198 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
VENDOR_DIR="$ROOT_DIR/vendor/linuxcnc"
|
||||
BUILD_DIR="$ROOT_DIR/build/native"
|
||||
WRAP_DIR="$ROOT_DIR/runtime/core/linuxcnc_wrap"
|
||||
SHIM_DIR="$ROOT_DIR/runtime/core/shims"
|
||||
INCLUDE_DIR="$ROOT_DIR/runtime/core/include"
|
||||
MINIMAL_GCODE_FIXTURE="$ROOT_DIR/tests/fixtures/gcode/minimal_linear.ngc"
|
||||
|
||||
mkdir -p "$BUILD_DIR"
|
||||
|
||||
rm -f \
|
||||
"$BUILD_DIR/linuxcnc_ini_probe" \
|
||||
"$BUILD_DIR/linuxcnc_interp_state_probe" \
|
||||
"$BUILD_DIR/linuxcnc_interp_state_probe.exitcode" \
|
||||
"$BUILD_DIR/linuxcnc_interp_state_probe.stdout.log" \
|
||||
"$BUILD_DIR/linuxcnc_interp_state_probe.stderr.log" \
|
||||
"$BUILD_DIR/linuxcnc_namedparam_harness" \
|
||||
"$BUILD_DIR/linuxcnc_namedparam_harness.exitcode" \
|
||||
"$BUILD_DIR/linuxcnc_namedparam_harness.stdout.log" \
|
||||
"$BUILD_DIR/linuxcnc_namedparam_harness.stderr.log" \
|
||||
"$BUILD_DIR/linuxcnc_interp_minimal_harness" \
|
||||
"$BUILD_DIR/linuxcnc_interp_minimal_harness.exitcode" \
|
||||
"$BUILD_DIR/linuxcnc_interp_minimal_harness.stdout.log" \
|
||||
"$BUILD_DIR/linuxcnc_interp_minimal_harness.stderr.log" \
|
||||
"$BUILD_DIR/linuxcnc_interp_minimal_harness.run.exitcode" \
|
||||
"$BUILD_DIR/linuxcnc_interp_minimal_harness.run.stdout.log" \
|
||||
"$BUILD_DIR/linuxcnc_interp_minimal_harness.run.stderr.log" \
|
||||
"$BUILD_DIR/linuxcnc_rs274_compile_probe.o" \
|
||||
"$BUILD_DIR/linuxcnc_rs274_compile_probe.exitcode" \
|
||||
"$BUILD_DIR/linuxcnc_rs274_compile_probe.stdout.log" \
|
||||
"$BUILD_DIR/linuxcnc_rs274_compile_probe.stderr.log" \
|
||||
"$BUILD_DIR/linuxcnc_interp_convert_source_probe.o" \
|
||||
"$BUILD_DIR/linuxcnc_interp_convert_source_probe.exitcode" \
|
||||
"$BUILD_DIR/linuxcnc_interp_convert_source_probe.stdout.log" \
|
||||
"$BUILD_DIR/linuxcnc_interp_convert_source_probe.stderr.log"
|
||||
|
||||
g++ -std=c++20 -O2 \
|
||||
-D_GNU_SOURCE \
|
||||
-DM_PI=3.14159265358979323846 \
|
||||
-DOBJECT_FWD_DWA2002724_HPP \
|
||||
-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/libnml/posemath" \
|
||||
"$VENDOR_DIR/src/emc/ini/inifile.cc" \
|
||||
"$WRAP_DIR/linuxcnc_ini_probe.cpp" \
|
||||
-lfmt \
|
||||
-o "$BUILD_DIR/linuxcnc_ini_probe"
|
||||
|
||||
set +e
|
||||
g++ -std=c++20 -O2 \
|
||||
-D_GNU_SOURCE \
|
||||
-DM_PI=3.14159265358979323846 \
|
||||
-DOBJECT_FWD_DWA2002724_HPP \
|
||||
-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/libnml/posemath" \
|
||||
"$WRAP_DIR/linuxcnc_interp_state_probe.cpp" \
|
||||
-o "$BUILD_DIR/linuxcnc_interp_state_probe" \
|
||||
>"$BUILD_DIR/linuxcnc_interp_state_probe.stdout.log" \
|
||||
2>"$BUILD_DIR/linuxcnc_interp_state_probe.stderr.log"
|
||||
STATE_RC=$?
|
||||
set -e
|
||||
|
||||
echo "$STATE_RC" > "$BUILD_DIR/linuxcnc_interp_state_probe.exitcode"
|
||||
|
||||
set +e
|
||||
g++ -std=c++20 -O2 \
|
||||
-D_GNU_SOURCE \
|
||||
-DM_PI=3.14159265358979323846 \
|
||||
-DOBJECT_FWD_DWA2002724_HPP \
|
||||
-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/libnml/posemath" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/modal_state.cc" \
|
||||
"$WRAP_DIR/linuxcnc_runtime_state_stubs.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_namedparam_harness.cpp" \
|
||||
"$VENDOR_DIR/src/emc/ini/inifile.cc" \
|
||||
-lfmt \
|
||||
-o "$BUILD_DIR/linuxcnc_namedparam_harness" \
|
||||
>"$BUILD_DIR/linuxcnc_namedparam_harness.stdout.log" \
|
||||
2>"$BUILD_DIR/linuxcnc_namedparam_harness.stderr.log"
|
||||
NAMEDPARAM_RC=$?
|
||||
set -e
|
||||
|
||||
echo "$NAMEDPARAM_RC" > "$BUILD_DIR/linuxcnc_namedparam_harness.exitcode"
|
||||
|
||||
set +e
|
||||
g++ -std=c++20 -O2 -ffunction-sections -fdata-sections \
|
||||
-Wl,--gc-sections \
|
||||
-D_GNU_SOURCE \
|
||||
-DM_PI=3.14159265358979323846 \
|
||||
-DOBJECT_FWD_DWA2002724_HPP \
|
||||
-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/libnml/posemath" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/modal_state.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_array.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_internal.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_read.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_check.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_arc.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_inverse.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_execute.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_convert.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_cycles.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_g7x.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_queue.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_find.cc" \
|
||||
"$VENDOR_DIR/src/emc/rs274ngc/interp_write.cc" \
|
||||
"$WRAP_DIR/linuxcnc_runtime_state_stubs.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_interp_minimal_runtime.cpp" \
|
||||
"$WRAP_DIR/linuxcnc_interp_minimal_harness.cpp" \
|
||||
-lfmt \
|
||||
-o "$BUILD_DIR/linuxcnc_interp_minimal_harness" \
|
||||
>"$BUILD_DIR/linuxcnc_interp_minimal_harness.stdout.log" \
|
||||
2>"$BUILD_DIR/linuxcnc_interp_minimal_harness.stderr.log"
|
||||
INTERP_MIN_RC=$?
|
||||
set -e
|
||||
|
||||
echo "$INTERP_MIN_RC" > "$BUILD_DIR/linuxcnc_interp_minimal_harness.exitcode"
|
||||
|
||||
if [[ "$INTERP_MIN_RC" -eq 0 ]]; then
|
||||
set +e
|
||||
"$BUILD_DIR/linuxcnc_interp_minimal_harness" "$MINIMAL_GCODE_FIXTURE" \
|
||||
>"$BUILD_DIR/linuxcnc_interp_minimal_harness.run.stdout.log" \
|
||||
2>"$BUILD_DIR/linuxcnc_interp_minimal_harness.run.stderr.log"
|
||||
INTERP_MIN_RUN_RC=$?
|
||||
set -e
|
||||
echo "$INTERP_MIN_RUN_RC" > "$BUILD_DIR/linuxcnc_interp_minimal_harness.run.exitcode"
|
||||
fi
|
||||
|
||||
set +e
|
||||
g++ -std=c++20 -O2 \
|
||||
-D_GNU_SOURCE \
|
||||
-DM_PI=3.14159265358979323846 \
|
||||
-DOBJECT_FWD_DWA2002724_HPP \
|
||||
-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/libnml/posemath" \
|
||||
-c "$WRAP_DIR/linuxcnc_rs274_compile_probe.cpp" \
|
||||
-o "$BUILD_DIR/linuxcnc_rs274_compile_probe.o" \
|
||||
>"$BUILD_DIR/linuxcnc_rs274_compile_probe.stdout.log" \
|
||||
2>"$BUILD_DIR/linuxcnc_rs274_compile_probe.stderr.log"
|
||||
RS274_RC=$?
|
||||
set -e
|
||||
|
||||
echo "$RS274_RC" > "$BUILD_DIR/linuxcnc_rs274_compile_probe.exitcode"
|
||||
|
||||
set +e
|
||||
g++ -std=c++20 -O2 \
|
||||
-D_GNU_SOURCE \
|
||||
-DM_PI=3.14159265358979323846 \
|
||||
-DOBJECT_FWD_DWA2002724_HPP \
|
||||
-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/libnml/posemath" \
|
||||
-c "$VENDOR_DIR/src/emc/rs274ngc/interp_convert.cc" \
|
||||
-o "$BUILD_DIR/linuxcnc_interp_convert_source_probe.o" \
|
||||
>"$BUILD_DIR/linuxcnc_interp_convert_source_probe.stdout.log" \
|
||||
2>"$BUILD_DIR/linuxcnc_interp_convert_source_probe.stderr.log"
|
||||
CONVERT_SOURCE_RC=$?
|
||||
set -e
|
||||
|
||||
echo "$CONVERT_SOURCE_RC" > "$BUILD_DIR/linuxcnc_interp_convert_source_probe.exitcode"
|
||||
echo "native probes complete"
|
||||
35
wasm-port/tools/extract_sources.sh
Executable file
35
wasm-port/tools/extract_sources.sh
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
UPSTREAM_DIR="$ROOT_DIR/../linuxcnc"
|
||||
VENDOR_DIR="$ROOT_DIR/vendor/linuxcnc"
|
||||
MANIFEST_FILE="$ROOT_DIR/tools/source-manifest.txt"
|
||||
|
||||
copy_file() {
|
||||
local src_rel="$1"
|
||||
local src="$UPSTREAM_DIR/$src_rel"
|
||||
local dst="$VENDOR_DIR/$src_rel"
|
||||
|
||||
if [[ ! -f "$src" ]]; then
|
||||
echo "missing upstream file: $src" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$(dirname "$dst")"
|
||||
cp "$src" "$dst"
|
||||
echo "copied $src_rel"
|
||||
}
|
||||
|
||||
if [[ ! -f "$MANIFEST_FILE" ]]; then
|
||||
echo "missing manifest: $MANIFEST_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while IFS= read -r src_rel; do
|
||||
[[ -z "$src_rel" ]] && continue
|
||||
[[ "${src_rel:0:1}" == "#" ]] && continue
|
||||
copy_file "$src_rel"
|
||||
done < "$MANIFEST_FILE"
|
||||
|
||||
echo "extraction complete"
|
||||
7
wasm-port/tools/serve_ini_panel.sh
Executable file
7
wasm-port/tools/serve_ini_panel.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
PORT="${1:-8011}"
|
||||
|
||||
python3 -m http.server "$PORT" --directory "$ROOT_DIR"
|
||||
53
wasm-port/tools/source-manifest.txt
Normal file
53
wasm-port/tools/source-manifest.txt
Normal file
@@ -0,0 +1,53 @@
|
||||
src/emc/ini/inifile.cc
|
||||
src/emc/ini/inifile.h
|
||||
src/emc/ini/inifile.hh
|
||||
src/rtapi/rtapi_stdint.h
|
||||
src/rtapi/rtapi_string.h
|
||||
src/rtapi/rtapi_gfp.h
|
||||
src/rtapi/rtapi_math.h
|
||||
src/rtapi/rtapi_byteorder.h
|
||||
src/emc/nml_intf/emcpos.h
|
||||
src/emc/nml_intf/emcpose.h
|
||||
src/emc/linuxcnc.h
|
||||
src/emc/nml_intf/canon.hh
|
||||
src/emc/nml_intf/canon_position.hh
|
||||
src/emc/nml_intf/emc.hh
|
||||
src/emc/nml_intf/emctool.h
|
||||
src/emc/nml_intf/debugflags.h
|
||||
src/emc/nml_intf/interp_return.hh
|
||||
src/emc/motion/state_tag.h
|
||||
src/emc/motion/emcmotcfg.h
|
||||
src/emc/rs274ngc/modal_state.hh
|
||||
src/emc/rs274ngc/modal_state.cc
|
||||
src/libnml/posemath/posemath.h
|
||||
src/libnml/posemath/gomath.h
|
||||
src/libnml/posemath/gotypes.h
|
||||
src/libnml/posemath/sincos.h
|
||||
src/emc/rs274ngc/interp_parameter_def.hh
|
||||
src/emc/rs274ngc/interp_array.cc
|
||||
src/emc/rs274ngc/interp_namedparams.cc
|
||||
src/emc/rs274ngc/interp_internal.hh
|
||||
src/emc/rs274ngc/interp_fwd.hh
|
||||
src/emc/rs274ngc/interp_base.hh
|
||||
src/emc/rs274ngc/interp_base.cc
|
||||
src/emc/rs274ngc/rs274ngc.hh
|
||||
src/emc/rs274ngc/rs274ngc_interp.hh
|
||||
src/emc/rs274ngc/rs274ngc_return.hh
|
||||
src/emc/rs274ngc/rs274ngc_pre.cc
|
||||
src/emc/rs274ngc/interp_queue.hh
|
||||
src/emc/rs274ngc/interp_queue.cc
|
||||
src/emc/rs274ngc/units.h
|
||||
src/emc/rs274ngc/interp_arc.cc
|
||||
src/emc/rs274ngc/interp_internal.cc
|
||||
src/emc/rs274ngc/interp_write.cc
|
||||
src/emc/rs274ngc/interp_check.cc
|
||||
src/emc/rs274ngc/interp_read.cc
|
||||
src/emc/rs274ngc/interp_execute.cc
|
||||
src/emc/rs274ngc/interp_find.cc
|
||||
src/emc/rs274ngc/interp_inverse.cc
|
||||
src/emc/rs274ngc/interp_o_word.cc
|
||||
src/emc/rs274ngc/interp_convert.cc
|
||||
src/emc/rs274ngc/interp_cycles.cc
|
||||
src/emc/rs274ngc/interp_g7x.cc
|
||||
src/emc/rs274ngc/interp_check.cc
|
||||
src/emc/rs274ngc/interp_execute.cc
|
||||
Reference in New Issue
Block a user