#!/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" NAMEDPARAM_INI_FIXTURE="$ROOT_DIR/tests/fixtures/ini/namedparams.ini" CXX="${CXX:-g++}" CC="${CC:-gcc}" mkdir -p "$BUILD_DIR" COMMON_FLAGS=( -std=c++20 -O2 -D_GNU_SOURCE -DM_PI=3.14159265358979323846 -DOBJECT_FWD_DWA2002724_HPP -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" ) COMMON_INI_FLAGS=( "${COMMON_FLAGS[@]}" -I"$VENDOR_DIR/src/emc/ini" ) MINIMAL_FLAGS=( "${COMMON_INI_FLAGS[@]}" -ffunction-sections -fdata-sections -DUNIT_TEST -DLINUXCNC_STANDALONE_USE_RS274_PRE_STATE ) INTERP_BASE_FLAGS=( "${MINIMAL_FLAGS[@]}" -DEMC2_HOME=\"/standalone\" ) MINIMAL_LINK_FLAGS=( -Wl,--gc-sections ) TP_FLAGS=( "${COMMON_FLAGS[@]}" -fpermissive ) C_FLAGS=( -std=gnu11 -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" ) write_command_file() { local file="$1" shift printf '%q\n' "$@" > "$file" } command_matches() { local file="$1" shift local tmp tmp="$(mktemp)" write_command_file "$tmp" "$@" if [[ -f "$file" ]] && cmp -s "$tmp" "$file"; then rm -f "$tmp" return 0 fi rm -f "$tmp" return 1 } depfile_newer_than() { local depfile="$1" local output="$2" [[ -f "$depfile" ]] || return 0 local deps deps="$(tr '\\\n' ' ' < "$depfile" | sed -e 's/^[^:]*://')" local dep for dep in $deps; do if [[ -f "$dep" && "$dep" -nt "$output" ]]; then return 0 fi done return 1 } object_needs_rebuild() { local obj="$1" local depfile="$2" local cmdfile="$3" shift 3 [[ -f "$obj" ]] || return 0 command_matches "$cmdfile" "$@" || return 0 depfile_newer_than "$depfile" "$obj" && return 0 return 1 } compile_object() { local target="$1" local source="$2" local obj="$3" shift 3 local stdout_log="$BUILD_DIR/$target.stdout.log" local stderr_log="$BUILD_DIR/$target.stderr.log" local depfile="$obj.d" local cmdfile="$obj.cmd" local cmd=("$CXX" "$@" -MMD -MP -MF "$depfile" -c "$source" -o "$obj") mkdir -p "$(dirname "$obj")" if ! object_needs_rebuild "$obj" "$depfile" "$cmdfile" "${cmd[@]}"; then printf 'up to date: %s\n' "$source" >> "$stdout_log" return 0 fi printf 'compile: %s\n' "$source" >> "$stdout_log" if "${cmd[@]}" >> "$stdout_log" 2>> "$stderr_log"; then write_command_file "$cmdfile" "${cmd[@]}" return 0 fi return 1 } compile_c_object() { local target="$1" local source="$2" local obj="$3" shift 3 local stdout_log="$BUILD_DIR/$target.stdout.log" local stderr_log="$BUILD_DIR/$target.stderr.log" local depfile="$obj.d" local cmdfile="$obj.cmd" local cmd=("$CC" "$@" -MMD -MP -MF "$depfile" -c "$source" -o "$obj") mkdir -p "$(dirname "$obj")" if ! object_needs_rebuild "$obj" "$depfile" "$cmdfile" "${cmd[@]}"; then printf 'up to date: %s\n' "$source" >> "$stdout_log" return 0 fi printf 'compile-c: %s\n' "$source" >> "$stdout_log" if "${cmd[@]}" >> "$stdout_log" 2>> "$stderr_log"; then write_command_file "$cmdfile" "${cmd[@]}" return 0 fi return 1 } link_needs_rebuild() { local output="$1" local cmdfile="$2" shift 2 [[ -f "$output" ]] || return 0 command_matches "$cmdfile" "$@" || return 0 local arg for arg in "$@"; do if [[ -f "$arg" && "$arg" -nt "$output" ]]; then return 0 fi done return 1 } link_binary() { local target="$1" local output="$2" shift 2 local stdout_log="$BUILD_DIR/$target.stdout.log" local stderr_log="$BUILD_DIR/$target.stderr.log" local cmdfile="$output.cmd" local cmd=("$CXX" "$@" -o "$output") if ! link_needs_rebuild "$output" "$cmdfile" "${cmd[@]}"; then printf 'up to date: %s\n' "$output" >> "$stdout_log" return 0 fi printf 'link: %s\n' "$output" >> "$stdout_log" if "${cmd[@]}" >> "$stdout_log" 2>> "$stderr_log"; then write_command_file "$cmdfile" "${cmd[@]}" return 0 fi return 1 } compile_target_objects() { local target="$1" local flags_name="$2" local sources_name="$3" local objs_name="$4" local -n flags="$flags_name" local -n sources="$sources_name" local -n objs="$objs_name" local obj_dir="$BUILD_DIR/obj/$target" local status=0 objs=() local source for source in "${sources[@]}"; do local base base="$(basename "$source")" local obj="$obj_dir/${base%.*}.o" objs+=("$obj") if ! compile_object "$target" "$source" "$obj" "${flags[@]}"; then status=1 fi done return "$status" } build_binary_target() { local target="$1" local output="$2" local flags_name="$3" local sources_name="$4" local link_flags_name="$5" shift 5 local stdout_log="$BUILD_DIR/$target.stdout.log" local stderr_log="$BUILD_DIR/$target.stderr.log" : > "$stdout_log" : > "$stderr_log" local target_objs=() local status=0 if ! compile_target_objects "$target" "$flags_name" "$sources_name" target_objs; then status=1 fi if [[ "$status" -eq 0 ]]; then local -n link_flags="$link_flags_name" if ! link_binary "$target" "$output" "${link_flags[@]}" "${target_objs[@]}" "$@"; then status=1 fi fi echo "$status" > "$BUILD_DIR/$target.exitcode" return "$status" } build_object_target() { local target="$1" local output="$2" local source="$3" local flags_name="$4" local stdout_log="$BUILD_DIR/$target.stdout.log" local stderr_log="$BUILD_DIR/$target.stderr.log" : > "$stdout_log" : > "$stderr_log" local -n flags="$flags_name" local status=0 if ! compile_object "$target" "$source" "$output" "${flags[@]}"; then status=1 fi echo "$status" > "$BUILD_DIR/$target.exitcode" return "$status" } build_c_object_target() { local target="$1" local output="$2" local source="$3" local flags_name="$4" local stdout_log="$BUILD_DIR/$target.stdout.log" local stderr_log="$BUILD_DIR/$target.stderr.log" : > "$stdout_log" : > "$stderr_log" local -n flags="$flags_name" local status=0 if ! compile_c_object "$target" "$source" "$output" "${flags[@]}"; then status=1 fi echo "$status" > "$BUILD_DIR/$target.exitcode" return "$status" } NO_LINK_FLAGS=() INI_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/ini/inifile.cc" "$WRAP_DIR/linuxcnc_ini_probe.cpp" ) STATE_PROBE_SOURCES=( "$WRAP_DIR/linuxcnc_interp_state_probe.cpp" ) TP_API_PROBE_SOURCES=( "$WRAP_DIR/linuxcnc_tp_api_probe.cpp" ) TP_CORE_SOURCES=( "$VENDOR_DIR/src/emc/tp/tp.c" "$VENDOR_DIR/src/emc/tp/tc.c" "$VENDOR_DIR/src/emc/tp/tcq.c" "$VENDOR_DIR/src/emc/tp/spherical_arc.c" "$VENDOR_DIR/src/emc/tp/blendmath.c" "$VENDOR_DIR/src/emc/tp/sp_scurve.c" "$VENDOR_DIR/src/emc/tp/ruckig_wrapper.c" "$VENDOR_DIR/src/emc/tp/cruckig/block.c" "$VENDOR_DIR/src/emc/tp/cruckig/brake.c" "$VENDOR_DIR/src/emc/tp/cruckig/calculator.c" "$VENDOR_DIR/src/emc/tp/cruckig/cruckig.c" "$VENDOR_DIR/src/emc/tp/cruckig/input_parameter.c" "$VENDOR_DIR/src/emc/tp/cruckig/output_parameter.c" "$VENDOR_DIR/src/emc/tp/cruckig/profile.c" "$VENDOR_DIR/src/emc/tp/cruckig/roots.c" "$VENDOR_DIR/src/emc/tp/cruckig/trajectory.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_first_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_first_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_second_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_second_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_third_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_third_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_second_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_second_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_third_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_third_step2.c" "$VENDOR_DIR/src/emc/nml_intf/emcpose.c" "$VENDOR_DIR/src/libnml/posemath/posemath.cc" "$VENDOR_DIR/src/libnml/posemath/_posemath.c" "$VENDOR_DIR/src/libnml/posemath/sincos.c" ) TP_RUNTIME_PROBE_SOURCES=( "${TP_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_tp_api_probe.cpp" ) TP_SOURCE_PROBE_NAMES=( linuxcnc_tp_tp_source_probe linuxcnc_tp_tc_source_probe linuxcnc_tp_tcq_source_probe linuxcnc_tp_spherical_arc_source_probe linuxcnc_tp_blendmath_source_probe linuxcnc_tp_sp_scurve_source_probe linuxcnc_tp_ruckig_wrapper_source_probe linuxcnc_cruckig_block_source_probe linuxcnc_cruckig_brake_source_probe linuxcnc_cruckig_calculator_source_probe linuxcnc_cruckig_cruckig_source_probe linuxcnc_cruckig_input_parameter_source_probe linuxcnc_cruckig_output_parameter_source_probe linuxcnc_cruckig_profile_source_probe linuxcnc_cruckig_roots_source_probe linuxcnc_cruckig_trajectory_source_probe linuxcnc_cruckig_position_first_step1_source_probe linuxcnc_cruckig_position_first_step2_source_probe linuxcnc_cruckig_position_second_step1_source_probe linuxcnc_cruckig_position_second_step2_source_probe linuxcnc_cruckig_position_third_step1_source_probe linuxcnc_cruckig_position_third_step2_source_probe linuxcnc_cruckig_velocity_second_step1_source_probe linuxcnc_cruckig_velocity_second_step2_source_probe linuxcnc_cruckig_velocity_third_step1_source_probe linuxcnc_cruckig_velocity_third_step2_source_probe linuxcnc_emcpose_source_probe linuxcnc_posemath_source_probe linuxcnc_posemath_c_source_probe linuxcnc_sincos_source_probe ) TP_SOURCE_PROBE_SOURCES=( "$VENDOR_DIR/src/emc/tp/tp.c" "$VENDOR_DIR/src/emc/tp/tc.c" "$VENDOR_DIR/src/emc/tp/tcq.c" "$VENDOR_DIR/src/emc/tp/spherical_arc.c" "$VENDOR_DIR/src/emc/tp/blendmath.c" "$VENDOR_DIR/src/emc/tp/sp_scurve.c" "$VENDOR_DIR/src/emc/tp/ruckig_wrapper.c" "$VENDOR_DIR/src/emc/tp/cruckig/block.c" "$VENDOR_DIR/src/emc/tp/cruckig/brake.c" "$VENDOR_DIR/src/emc/tp/cruckig/calculator.c" "$VENDOR_DIR/src/emc/tp/cruckig/cruckig.c" "$VENDOR_DIR/src/emc/tp/cruckig/input_parameter.c" "$VENDOR_DIR/src/emc/tp/cruckig/output_parameter.c" "$VENDOR_DIR/src/emc/tp/cruckig/profile.c" "$VENDOR_DIR/src/emc/tp/cruckig/roots.c" "$VENDOR_DIR/src/emc/tp/cruckig/trajectory.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_first_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_first_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_second_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_second_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_third_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/position_third_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_second_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_second_step2.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_third_step1.c" "$VENDOR_DIR/src/emc/tp/cruckig/velocity_third_step2.c" "$VENDOR_DIR/src/emc/nml_intf/emcpose.c" "$VENDOR_DIR/src/libnml/posemath/posemath.cc" "$VENDOR_DIR/src/libnml/posemath/_posemath.c" "$VENDOR_DIR/src/libnml/posemath/sincos.c" ) INTERP_CORE_SOURCES=( "$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_namedparams.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_write.cc" "$VENDOR_DIR/src/emc/rs274ngc/interp_o_word.cc" "$VENDOR_DIR/src/emc/rs274ngc/rs274ngc_pre.cc" "$WRAP_DIR/linuxcnc_hal_adapter.cpp" "$WRAP_DIR/linuxcnc_interp_edge_stubs.cpp" "$WRAP_DIR/linuxcnc_runtime_state_stubs.cpp" "$WRAP_DIR/linuxcnc_tool_adapter.cpp" "$WRAP_DIR/linuxcnc_interp_minimal_runtime.cpp" "$VENDOR_DIR/src/emc/ini/inifile.cc" ) NAMEDPARAM_SOURCES=( "${INTERP_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_namedparam_harness.cpp" ) MINIMAL_SOURCES=( "${INTERP_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_interp_minimal_harness.cpp" ) PARAMETER_FILE_SOURCES=( "${INTERP_CORE_SOURCES[@]}" "$WRAP_DIR/linuxcnc_parameter_file_harness.cpp" ) build_binary_target \ linuxcnc_ini_probe \ "$BUILD_DIR/linuxcnc_ini_probe" \ COMMON_FLAGS \ INI_PROBE_SOURCES \ NO_LINK_FLAGS \ -lfmt build_object_target \ linuxcnc_inifile_source_probe \ "$BUILD_DIR/linuxcnc_inifile_source_probe.o" \ "$VENDOR_DIR/src/emc/ini/inifile.cc" \ COMMON_INI_FLAGS build_binary_target \ linuxcnc_interp_state_probe \ "$BUILD_DIR/linuxcnc_interp_state_probe" \ COMMON_FLAGS \ STATE_PROBE_SOURCES \ NO_LINK_FLAGS build_binary_target \ linuxcnc_tp_api_probe \ "$BUILD_DIR/linuxcnc_tp_api_probe" \ TP_FLAGS \ TP_RUNTIME_PROBE_SOURCES \ NO_LINK_FLAGS if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_tp_api_probe.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_tp_api_probe" \ >"$BUILD_DIR/linuxcnc_tp_api_probe.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_tp_api_probe.run.stderr.log" TP_API_RUN_RC=$? set -e echo "$TP_API_RUN_RC" > "$BUILD_DIR/linuxcnc_tp_api_probe.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_tp_api_probe.run.exitcode" \ "$BUILD_DIR/linuxcnc_tp_api_probe.run.stdout.log" \ "$BUILD_DIR/linuxcnc_tp_api_probe.run.stderr.log" fi for index in "${!TP_SOURCE_PROBE_NAMES[@]}"; do build_object_target \ "${TP_SOURCE_PROBE_NAMES[$index]}" \ "$BUILD_DIR/${TP_SOURCE_PROBE_NAMES[$index]}.o" \ "${TP_SOURCE_PROBE_SOURCES[$index]}" \ TP_FLAGS done build_binary_target \ linuxcnc_namedparam_harness \ "$BUILD_DIR/linuxcnc_namedparam_harness" \ MINIMAL_FLAGS \ NAMEDPARAM_SOURCES \ MINIMAL_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_namedparam_harness.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_namedparam_harness" "$NAMEDPARAM_INI_FIXTURE" \ >"$BUILD_DIR/linuxcnc_namedparam_harness.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_namedparam_harness.run.stderr.log" NAMEDPARAM_RUN_RC=$? set -e echo "$NAMEDPARAM_RUN_RC" > "$BUILD_DIR/linuxcnc_namedparam_harness.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_namedparam_harness.run.exitcode" \ "$BUILD_DIR/linuxcnc_namedparam_harness.run.stdout.log" \ "$BUILD_DIR/linuxcnc_namedparam_harness.run.stderr.log" fi build_binary_target \ linuxcnc_interp_minimal_harness \ "$BUILD_DIR/linuxcnc_interp_minimal_harness" \ MINIMAL_FLAGS \ MINIMAL_SOURCES \ MINIMAL_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_interp_minimal_harness.exitcode")" == "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" else rm -f \ "$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" fi build_binary_target \ linuxcnc_parameter_file_harness \ "$BUILD_DIR/linuxcnc_parameter_file_harness" \ MINIMAL_FLAGS \ PARAMETER_FILE_SOURCES \ MINIMAL_LINK_FLAGS \ -lfmt if [[ "$(tr -d '[:space:]' < "$BUILD_DIR/linuxcnc_parameter_file_harness.exitcode")" == "0" ]]; then set +e "$BUILD_DIR/linuxcnc_parameter_file_harness" \ >"$BUILD_DIR/linuxcnc_parameter_file_harness.run.stdout.log" \ 2>"$BUILD_DIR/linuxcnc_parameter_file_harness.run.stderr.log" PARAMETER_FILE_RUN_RC=$? set -e echo "$PARAMETER_FILE_RUN_RC" > "$BUILD_DIR/linuxcnc_parameter_file_harness.run.exitcode" else rm -f \ "$BUILD_DIR/linuxcnc_parameter_file_harness.run.exitcode" \ "$BUILD_DIR/linuxcnc_parameter_file_harness.run.stdout.log" \ "$BUILD_DIR/linuxcnc_parameter_file_harness.run.stderr.log" fi build_object_target \ linuxcnc_rs274_compile_probe \ "$BUILD_DIR/linuxcnc_rs274_compile_probe.o" \ "$WRAP_DIR/linuxcnc_rs274_compile_probe.cpp" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_convert_source_probe \ "$BUILD_DIR/linuxcnc_interp_convert_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_convert.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_read_source_probe \ "$BUILD_DIR/linuxcnc_interp_read_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_read.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_check_source_probe \ "$BUILD_DIR/linuxcnc_interp_check_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_check.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_execute_source_probe \ "$BUILD_DIR/linuxcnc_interp_execute_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_execute.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_modal_state_source_probe \ "$BUILD_DIR/linuxcnc_modal_state_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/modal_state.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_array_source_probe \ "$BUILD_DIR/linuxcnc_interp_array_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_array.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_internal_source_probe \ "$BUILD_DIR/linuxcnc_interp_internal_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_internal.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_arc_source_probe \ "$BUILD_DIR/linuxcnc_interp_arc_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_arc.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_inverse_source_probe \ "$BUILD_DIR/linuxcnc_interp_inverse_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_inverse.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_cycles_source_probe \ "$BUILD_DIR/linuxcnc_interp_cycles_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_cycles.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_g7x_source_probe \ "$BUILD_DIR/linuxcnc_interp_g7x_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_g7x.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_queue_source_probe \ "$BUILD_DIR/linuxcnc_interp_queue_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_queue.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_find_source_probe \ "$BUILD_DIR/linuxcnc_interp_find_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_find.cc" \ COMMON_FLAGS build_object_target \ linuxcnc_interp_namedparams_source_probe \ "$BUILD_DIR/linuxcnc_interp_namedparams_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_namedparams.cc" \ COMMON_INI_FLAGS build_object_target \ linuxcnc_interp_write_source_probe \ "$BUILD_DIR/linuxcnc_interp_write_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_write.cc" \ COMMON_INI_FLAGS build_object_target \ linuxcnc_interp_o_word_source_probe \ "$BUILD_DIR/linuxcnc_interp_o_word_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_o_word.cc" \ COMMON_INI_FLAGS build_object_target \ linuxcnc_rs274ngc_pre_source_probe \ "$BUILD_DIR/linuxcnc_rs274ngc_pre_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/rs274ngc_pre.cc" \ MINIMAL_FLAGS build_object_target \ linuxcnc_interp_base_source_probe \ "$BUILD_DIR/linuxcnc_interp_base_source_probe.o" \ "$VENDOR_DIR/src/emc/rs274ngc/interp_base.cc" \ INTERP_BASE_FLAGS build_c_object_target \ linuxcnc_gomath_source_probe \ "$BUILD_DIR/linuxcnc_gomath_source_probe.o" \ "$VENDOR_DIR/src/libnml/posemath/gomath.c" \ C_FLAGS echo "native probes complete"