#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")" cxx=${CXX:-g++} build_dir=$(mktemp -d "${TMPDIR:-/tmp}/cnc_sim_native.XXXXXX") trap 'rm -rf "$build_dir"' EXIT ./check-linuxcnc-inputs.sh linuxcnc-rs274-source-files.txt --require-rs274-complete ./check-linuxcnc-inputs.sh linuxcnc-rs274-wasm-source-files.txt --require-rs274-complete ./check-linuxcnc-inputs.sh linuxcnc-kinematics-source-files.txt --require-kinematics-complete ./check-linuxcnc-switchkins-remap-table.sh linuxcnc-kinematics-source-files.txt grep -F '#include "linuxcnc_switchkins_remap_table.inc"' core/src/cnc_sim_api.cpp >/dev/null grep -F 'switchkins: options.switchkins' web/src/wasm-core.js >/dev/null grep -F 'kinematics: options.kinematics' web/src/wasm-core.js >/dev/null grep -F 'pivotLength: options.pivotLength' web/src/wasm-core.js >/dev/null grep -F 'xyzbcTrt: options.xyzbcTrt' web/src/wasm-core.js >/dev/null grep -F 'globalThis.createCncSimModule' web/src/wasm-core.js >/dev/null grep -F 'createModule(moduleOptions)' web/src/wasm-core.js >/dev/null grep -F 'export type CncParseOptions' web/src/index.ts >/dev/null grep -F '): CncEvent[];' web/src/index.ts >/dev/null grep -F 'options?: CncParseOptions' web/src/wasm-core.d.ts >/dev/null grep -F 'export type WasmModuleOptions' web/src/wasm-core.d.ts >/dev/null grep -F 'printErr?: (text: string) => void;' web/src/wasm-core.d.ts >/dev/null grep -F '"moduleResolution": "Bundler"' web/tsconfig.json >/dev/null grep -F '"include": ["src/index.ts", "src/**/*.d.ts"]' web/tsconfig.json >/dev/null grep -F 'createWasmSimulator' test-web-wasm-node-smoke.cjs >/dev/null grep -F 'locateFile: (file) => path.join(wasmDir, file)' test-web-wasm-node-smoke.cjs >/dev/null grep -F 'printErr: () => {}' test-web-wasm-node-smoke.cjs >/dev/null grep -F 'expected web wasm-core options to pass LinuxCNC xyzac-trt RTCP config into WASM' test-web-wasm-node-smoke.cjs >/dev/null grep -F 'node test-web-wasm-node-smoke.cjs' test-web-wasm-node-smoke.sh >/dev/null grep -F 'createWasmSimulator' web/test-browser-wasm-smoke.html >/dev/null grep -F 'browser wasm smoke passed' web/test-browser-wasm-smoke.html >/dev/null grep -F 'chromium chromium-browser google-chrome' test-web-wasm-browser-smoke.sh >/dev/null grep -F 'browser wasm smoke passed' test-web-wasm-browser-smoke.sh >/dev/null kinematics_manifest_sources="$build_dir/linuxcnc_kinematics_manifest_sources.txt" ./list-linuxcnc-kinematics-manifest-sources.sh linuxcnc-kinematics-source-files.txt all > "$kinematics_manifest_sources" grep -Fx "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/5axis/bridgemill/5axis.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/xyzacb-trsrn_twp/xyzacb-trsrn.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/xyzbca-trsrn_twp/xyzbca-trsrn.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/hexapod-sim/hexapod.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/melfa-sim/melfa.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/millturn/millturn.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/puma/puma.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/puma/puma_cube.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/puma/puma560.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/puma/puma560_uvw.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/scara/scara.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/qtaxis/non-trivial/scara/scara.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/qtvcp_screens/non-trivial/scara/scara.ini" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/puma/puma560_dh.hal" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/5axis/bridgemill/remap_subs/428remap.ngc" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/5axis/table-dual-rotary/remap_subs/428remap.ngc" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/remap_subs/429remap.ngc" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/hexapod-sim/remap_subs/430remap.ngc" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/melfa-sim/remap_subs/429remap.ngc" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/millturn/remap_subs/429remap.ngc" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/puma/remap_subs/430remap.ngc" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/axis/vismach/scara/remap_subs/428remap.ngc" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/qtaxis/non-trivial/scara/remap_subs/429remap.ngc" "$kinematics_manifest_sources" >/dev/null grep -Fx "configs/sim/qtvcp_screens/non-trivial/scara/remap_subs/430remap.ngc" "$kinematics_manifest_sources" >/dev/null if [[ "$(grep -Ec '/remap_subs/(428|429|430)remap\.ngc$' "$kinematics_manifest_sources")" -ne 31 ]]; then echo "expected kinematics manifest to cover all LinuxCNC M428/M429/M430 remap sources" >&2 exit 1 fi grep -Fx "src/hal/components/xyzab_tdr_kins.comp" "$kinematics_manifest_sources" >/dev/null grep -Fx "src/objects/hal/components/xyzab_tdr_kins.c" "$kinematics_manifest_sources" >/dev/null grep -Fx "src/hal/components/xyzacb_trsrn.comp" "$kinematics_manifest_sources" >/dev/null grep -Fx "src/objects/hal/components/xyzacb_trsrn.c" "$kinematics_manifest_sources" >/dev/null grep -Fx "src/hal/components/xyzbca_trsrn.comp" "$kinematics_manifest_sources" >/dev/null grep -Fx "src/objects/hal/components/xyzbca_trsrn.c" "$kinematics_manifest_sources" >/dev/null grep -Fx "src/hal/components/matrixkins.comp" "$kinematics_manifest_sources" >/dev/null grep -Fx "src/objects/hal/components/matrixkins.c" "$kinematics_manifest_sources" >/dev/null grep -Fx "src/hal/components/userkins.comp" "$kinematics_manifest_sources" >/dev/null grep -Fx "src/objects/hal/components/userkins.c" "$kinematics_manifest_sources" >/dev/null core_source_list="$build_dir/cnc_sim_core_sources.txt" ./list-cnc-sim-core-sources.sh --with-smoke > "$core_source_list" mapfile -t core_sources < "$core_source_list" smoke_cxxflags=(-std=c++17 -fpermissive -DCNC_SIM_ENABLE_SMOKE_BACKEND -I core/include -I core/src -I ../linuxcnc/include) "$cxx" "${smoke_cxxflags[@]}" \ "${core_sources[@]}" \ core/tests/canon_event_sink_smoke.cpp \ -o "$build_dir/canon_event_sink_smoke" "$cxx" "${smoke_cxxflags[@]}" \ "${core_sources[@]}" \ core/tests/rtcp_kinematics_smoke.cpp \ -o "$build_dir/rtcp_kinematics_smoke" "$cxx" "${smoke_cxxflags[@]}" \ core/tests/linuxcnc_gees_table_smoke.cpp \ -o "$build_dir/linuxcnc_gees_table_smoke" "$cxx" "${smoke_cxxflags[@]}" \ "${core_sources[@]}" \ core/tests/simulator_gcode_controls_smoke.cpp \ -o "$build_dir/simulator_gcode_controls_smoke" "$cxx" "${smoke_cxxflags[@]}" \ "${core_sources[@]}" \ core/tests/cnc_sim_api_smoke.cpp \ -o "$build_dir/cnc_sim_api_smoke" "$cxx" "${smoke_cxxflags[@]}" \ "${core_sources[@]}" \ core/tools/cnc_sim_dump.cpp \ -o "$build_dir/cnc_sim_dump" "$build_dir/canon_event_sink_smoke" "$build_dir/rtcp_kinematics_smoke" "$build_dir/linuxcnc_gees_table_smoke" "$build_dir/simulator_gcode_controls_smoke" "$build_dir/cnc_sim_api_smoke" ./test-web-wasm-node-smoke.sh ./test-web-wasm-browser-smoke.sh basic_mill_json="$build_dir/cnc_sim_basic_mill.json" incremental_arc_json="$build_dir/cnc_sim_incremental_and_r_arc.json" subprogram_m98_json="$build_dir/cnc_sim_smoke_subprogram_m98.json" oword_subprogram_json="$build_dir/cnc_sim_smoke_oword_subprogram.json" "$build_dir/cnc_sim_dump" tests/gcode/basic_mill.ngc >"$basic_mill_json" "$build_dir/cnc_sim_dump" tests/gcode/incremental_and_r_arc.ngc >"$incremental_arc_json" "$build_dir/cnc_sim_dump" tests/gcode/smoke_subprogram_m98.ngc >"$subprogram_m98_json" "$build_dir/cnc_sim_dump" tests/gcode/smoke_oword_subprogram.ngc >"$oword_subprogram_json" echo "native tests passed" echo "dumped $basic_mill_json" echo "dumped $incremental_arc_json" echo "dumped $subprogram_m98_json" echo "dumped $oword_subprogram_json"