#!/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"