59 lines
2.8 KiB
Bash
Executable File
59 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
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/task-hal"
|
|
OBJ_DIR="$OUT_DIR/obj"
|
|
|
|
source "$ROOT_DIR/tools/wasm_incremental_build_lib.sh"
|
|
|
|
mkdir -p "$OUT_DIR" "$OBJ_DIR"
|
|
|
|
TARGET="linuxcnc_task_hal_wasm"
|
|
: > "$OUT_DIR/$TARGET.stdout.log"
|
|
: > "$OUT_DIR/$TARGET.stderr.log"
|
|
|
|
COMMON_FLAGS=(
|
|
-O2
|
|
-D_GNU_SOURCE
|
|
-I"$WRAP_DIR"
|
|
-I"$SHIM_DIR"
|
|
-I"$INCLUDE_DIR"
|
|
)
|
|
|
|
SOURCES=(
|
|
"$WRAP_DIR/linuxcnc_hal_runtime.cpp"
|
|
"$WRAP_DIR/linuxcnc_motion_runtime.c"
|
|
"$WRAP_DIR/linuxcnc_task_hal_wasm.cpp"
|
|
)
|
|
|
|
OBJECTS=()
|
|
for source in "${SOURCES[@]}"; do
|
|
obj="$(source_object_path "$source" "$ROOT_DIR" "$OBJ_DIR")"
|
|
OBJECTS+=("$obj")
|
|
if [[ "$source" == *.c ]]; then
|
|
compile_wasm_object "$TARGET" "$source" "$obj" "$OUT_DIR" -std=c11 "${COMMON_FLAGS[@]}"
|
|
else
|
|
compile_wasm_object "$TARGET" "$source" "$obj" "$OUT_DIR" -std=c++20 "${COMMON_FLAGS[@]}"
|
|
fi
|
|
done
|
|
|
|
link_wasm_module \
|
|
"$TARGET" \
|
|
"$OUT_DIR/linuxcnc_task_hal.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","_hal_init","_hal_ready","_hal_exit","_hal_malloc","_hal_pin_bit_new","_hal_pin_float_new","_hal_pin_s32_new","_hal_pin_u32_new","_hal_pin_s64_new","_hal_pin_u64_new","_hal_pin_bit_newf","_hal_pin_float_newf","_hal_pin_s32_newf","_hal_pin_u32_newf","_hal_pin_s64_newf","_hal_pin_u64_newf","_hal_param_bit_new","_hal_param_float_new","_hal_param_s32_new","_hal_param_u32_new","_hal_param_s64_new","_hal_param_u64_new","_hal_param_bit_newf","_hal_param_float_newf","_hal_param_s32_newf","_hal_param_u32_newf","_hal_param_s64_newf","_hal_param_u64_newf","_hal_get_pin_value_by_name","_hal_get_signal_value_by_name","_hal_get_param_value_by_name","_hal_link","_hal_unlink","_hal_set_p","_hal_get_p","_hal_create_thread","_hal_add_funct_to_thread","_hal_del_funct_from_thread","_hal_start_threads","_hal_stop_threads","_lchal_init_runtime","_lchal_load_hal_file","_lchal_set_pin_float","_lchal_set_pin_s32","_lchal_set_pin_bit","_lchal_get_pin_json","_lchal_get_snapshot_json","_lchal_step_threads","_lchal_reset_runtime","_lcmot_init_from_ini","_lcmot_write_command_json","_lcmot_step_servo","_lcmot_read_status_json","_lcmot_read_hal_snapshot_json","_lcmot_reset","_lctask_init_session","_lctask_stage_file","_lctask_open_program","_lctask_send_command_json","_lctask_run_cycles","_lctask_read_status_json","_lctask_read_events_json","_lctask_reset_session"]' \
|
|
-s EXPORTED_RUNTIME_METHODS='["UTF8ToString","stringToUTF8","lengthBytesUTF8","getValue","setValue"]'
|
|
|
|
echo "linuxcnc_task_hal_wasm_build=ok"
|