接续上一轮:推进浏览器验证与M428配置收拢
结论:已完成浏览器侧真实加载验证,M428/M429/M430 的配置入口进一步从 LinuxCNC INI/HALFILE/REMAP 来源生成,native 与 source-link 验证通过。
This commit is contained in:
@@ -51,7 +51,9 @@ cleanup_wasm_cmake_probe_temps() {
|
||||
"${duplicate_pre_blocker_manifest:-}" \
|
||||
"${duplicate_pre_blocker_log:-}" \
|
||||
"${duplicate_pre_link_manifest:-}" \
|
||||
"${duplicate_pre_link_log:-}"; do
|
||||
"${duplicate_pre_link_log:-}" \
|
||||
"${duplicate_runtime_link_manifest:-}" \
|
||||
"${duplicate_runtime_link_log:-}"; do
|
||||
if [[ -n "$temp_path" ]]; then
|
||||
rm -rf "$temp_path"
|
||||
fi
|
||||
@@ -62,7 +64,7 @@ trap cleanup_wasm_cmake_probe_temps EXIT
|
||||
LINUXCNC_ROOT="$linuxcnc_root" ./check-linuxcnc-inputs.sh "$manifest"
|
||||
|
||||
rm -f "$missing_manifest"
|
||||
if ./build-wasm.sh "$missing_manifest" >"$missing_manifest_log" 2>&1; then
|
||||
if CNC_SIM_BUILD_WASM_SKIP_LOCK=1 ./build-wasm.sh "$missing_manifest" >"$missing_manifest_log" 2>&1; then
|
||||
echo "build-wasm accepted missing manifest: $missing_manifest" >&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -72,7 +74,7 @@ if ! grep -F "missing manifest: $missing_manifest" "$missing_manifest_log" >/dev
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if LINUXCNC_ROOT="$missing_root" ./build-wasm.sh >"$missing_root_log" 2>&1; then
|
||||
if CNC_SIM_BUILD_WASM_SKIP_LOCK=1 LINUXCNC_ROOT="$missing_root" ./build-wasm.sh >"$missing_root_log" 2>&1; then
|
||||
echo "build-wasm accepted missing LinuxCNC root: $missing_root" >&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -94,9 +96,11 @@ grep -F -- './test-linuxcnc-wasm-tooldata-runtime-symbols.sh' build-wasm.sh >/de
|
||||
grep -F -- './test-linuxcnc-wasm-interp-base-link.sh' build-wasm.sh >/dev/null
|
||||
grep -F -- './test-linuxcnc-wasm-interp-find-link.sh' build-wasm.sh >/dev/null
|
||||
grep -F -- './test-linuxcnc-wasm-python-plugin-link.sh' build-wasm.sh >/dev/null
|
||||
grep -F -- './test-linuxcnc-wasm-python-c-api-symbols.sh' build-wasm.sh >/dev/null
|
||||
grep -F -- './test-linuxcnc-wasm-rs274ngc-pre-object.sh' build-wasm.sh >/dev/null
|
||||
grep -F -- './test-linuxcnc-wasm-rs274ngc-pre-link-blockers.sh "$manifest"' build-wasm.sh >/dev/null
|
||||
grep -F -- './test-linuxcnc-wasm-rs274ngc-pre-link.sh "$manifest"' build-wasm.sh >/dev/null
|
||||
grep -F -- './test-linuxcnc-wasm-runtime-link.sh "$manifest"' build-wasm.sh >/dev/null
|
||||
if grep -F '} > "$report_file" || true' test-linuxcnc-wasm-rs274ngc-pre-link-blockers.sh >/dev/null; then
|
||||
echo "rs274ngc_pre blocker scan still hides report pipeline failures with || true" >&2
|
||||
exit 1
|
||||
@@ -124,9 +128,11 @@ fi
|
||||
for build_dir_probe_script in \
|
||||
test-linuxcnc-wasm-interp-base-link.sh \
|
||||
test-linuxcnc-wasm-interp-find-link.sh \
|
||||
test-linuxcnc-wasm-python-c-api-symbols.sh \
|
||||
test-linuxcnc-wasm-python-plugin-link.sh \
|
||||
test-linuxcnc-wasm-rs274ngc-pre-link-blockers.sh \
|
||||
test-linuxcnc-wasm-rs274ngc-pre-link.sh \
|
||||
test-linuxcnc-wasm-runtime-link.sh \
|
||||
test-linuxcnc-wasm-rs274ngc-pre-object.sh \
|
||||
test-linuxcnc-wasm-source-objects.sh \
|
||||
test-linuxcnc-wasm-tooldata-common-link.sh \
|
||||
@@ -182,7 +188,8 @@ for forbidden_manual_cleanup in \
|
||||
'rm -f "$duplicate_source_manifest" "$duplicate_source_log"' \
|
||||
'rm -f "$duplicate_syntax_manifest" "$duplicate_syntax_log"' \
|
||||
'rm -f "$duplicate_pre_blocker_manifest" "$duplicate_pre_blocker_log"' \
|
||||
'rm -f "$duplicate_pre_link_manifest" "$duplicate_pre_link_log"'; do
|
||||
'rm -f "$duplicate_pre_link_manifest" "$duplicate_pre_link_log"' \
|
||||
'rm -f "$duplicate_runtime_link_manifest" "$duplicate_runtime_link_log"'; do
|
||||
if grep -Fx "$forbidden_manual_cleanup" test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null; then
|
||||
echo "wasm CMake safe probe still relies on manual cleanup: $forbidden_manual_cleanup" >&2
|
||||
exit 1
|
||||
@@ -196,20 +203,74 @@ if grep -RInF "${forbidden_common_flags_process_substitution}LINUXCNC_ROOT=\"\$l
|
||||
exit 1
|
||||
fi
|
||||
grep -F -- '-DCNC_SIM_LINUXCNC_WASM_SOURCE_MANIFEST="$manifest"' build-wasm.sh >/dev/null
|
||||
grep -F -- 'if ! command -v emcmake >/dev/null 2>&1; then' build-wasm.sh >/dev/null
|
||||
grep -F "Emscripten is required. Install/activate emsdk so emcmake and emcc are in PATH." build-wasm.sh >/dev/null
|
||||
grep -F -- 'for required_tool in cmake emcmake emcc node; do' build-wasm.sh >/dev/null
|
||||
grep -F -- 'missing_tools+=("$required_tool")' build-wasm.sh >/dev/null
|
||||
grep -F "WASM build tools are required. Missing:" build-wasm.sh >/dev/null
|
||||
grep -F "Install/activate cmake, emsdk, and Node.js so cmake, emcmake, emcc, and node are in PATH." build-wasm.sh >/dev/null
|
||||
grep -F -- 'emcmake cmake -S core -B build/wasm \' build-wasm.sh >/dev/null
|
||||
grep -F -- 'cmake --build build/wasm --target cnc_sim_wasm_runtime_probe' build-wasm.sh >/dev/null
|
||||
grep -F -- 'cmake --build build/wasm --target cnc_sim_wasm' build-wasm.sh >/dev/null
|
||||
grep -F -- 'mkdir -p web/public' build-wasm.sh >/dev/null
|
||||
grep -F -- 'cp build/wasm/cnc_sim.js web/public/cnc_sim.js' build-wasm.sh >/dev/null
|
||||
grep -F -- 'cp build/wasm/cnc_sim.wasm web/public/cnc_sim.wasm' build-wasm.sh >/dev/null
|
||||
grep -F -- 'cmp -s build/wasm/cnc_sim.js web/public/cnc_sim.js' build-wasm.sh >/dev/null
|
||||
grep -F -- 'cmp -s build/wasm/cnc_sim.wasm web/public/cnc_sim.wasm' build-wasm.sh >/dev/null
|
||||
grep -F -- 'node test-web-wasm-node-smoke.cjs' build-wasm.sh >/dev/null
|
||||
grep -F -- './test-web-wasm-browser-smoke.sh' build-wasm.sh >/dev/null
|
||||
if [[ "$(grep -Fc 'cp build/wasm/cnc_sim.js' build-wasm.sh)" -ne 1 ]]; then
|
||||
echo "build-wasm should copy cnc_sim.js exactly once" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ "$(grep -Fc 'cp build/wasm/cnc_sim.wasm' build-wasm.sh)" -ne 1 ]]; then
|
||||
echo "build-wasm should copy cnc_sim.wasm exactly once" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! awk '
|
||||
index($0, "mkdir -p web/public") { mkdir_line = NR }
|
||||
index($0, "cp build/wasm/cnc_sim.js web/public/cnc_sim.js") { cp_line = NR }
|
||||
END { exit !(mkdir_line && cp_line && mkdir_line < cp_line) }
|
||||
' build-wasm.sh; then
|
||||
echo "build-wasm must create web/public before copying wasm artifacts" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! awk '
|
||||
index($0, "cp build/wasm/cnc_sim.js web/public/cnc_sim.js") { cp_js_line = NR }
|
||||
index($0, "cp build/wasm/cnc_sim.wasm web/public/cnc_sim.wasm") { cp_wasm_line = NR }
|
||||
index($0, "cmp -s build/wasm/cnc_sim.js web/public/cnc_sim.js") { cmp_js_line = NR }
|
||||
index($0, "cmp -s build/wasm/cnc_sim.wasm web/public/cnc_sim.wasm") { cmp_wasm_line = NR }
|
||||
index($0, "node test-web-wasm-node-smoke.cjs") { node_line = NR }
|
||||
index($0, "./test-web-wasm-browser-smoke.sh") { browser_line = NR }
|
||||
END {
|
||||
exit !(cp_js_line && cp_wasm_line && cmp_js_line && cmp_wasm_line && node_line && browser_line &&
|
||||
cp_js_line < cmp_js_line && cp_wasm_line < cmp_wasm_line &&
|
||||
cmp_js_line < node_line && cmp_wasm_line < node_line &&
|
||||
node_line < browser_line)
|
||||
}
|
||||
' build-wasm.sh; then
|
||||
echo "build-wasm must verify copied wasm artifacts before running the Node and browser smokes" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! awk '
|
||||
index($0, "cmake --build build/wasm --target cnc_sim_wasm_runtime_probe") { runtime_probe_line = NR }
|
||||
index($0, "cmake --build build/wasm --target cnc_sim_wasm") &&
|
||||
!index($0, "cnc_sim_wasm_runtime_probe") { wasm_line = NR }
|
||||
END { exit !(runtime_probe_line && wasm_line && runtime_probe_line < wasm_line) }
|
||||
' build-wasm.sh; then
|
||||
echo "build-wasm does not build the CMake runtime probe before the browser WASM target" >&2
|
||||
exit 1
|
||||
fi
|
||||
grep -F -- 'default_manifest="$PWD/linuxcnc-rs274-wasm-source-files.txt"' build-wasm.sh >/dev/null
|
||||
grep -F -- 'manifest_core_output=$(LINUXCNC_ROOT="$linuxcnc_root" ./list-linuxcnc-wasm-manifest-sources.sh "$manifest" core)' build-wasm.sh >/dev/null
|
||||
grep -F -- 'manifest_blocked_output=$(LINUXCNC_ROOT="$linuxcnc_root" ./list-linuxcnc-wasm-manifest-sources.sh "$manifest" blocked)' build-wasm.sh >/dev/null
|
||||
grep -F -- 'count_nonempty_lines() {' build-wasm.sh >/dev/null
|
||||
grep -F -- 'manifest_core_count=$(count_nonempty_lines "$manifest_core_output")' build-wasm.sh >/dev/null
|
||||
grep -F -- 'manifest_blocked_count=$(count_nonempty_lines "$manifest_blocked_output")' build-wasm.sh >/dev/null
|
||||
grep -F -- 'LINUXCNC_ROOT="$linuxcnc_root" ./check-linuxcnc-inputs.sh "$manifest" --require-rs274-complete' build-wasm.sh >/dev/null
|
||||
if grep -F 'grep -c . <<<"$manifest_core_output" || true' build-wasm.sh >/dev/null; then
|
||||
echo "build-wasm still counts manifest output through grep -c with || true" >&2
|
||||
exit 1
|
||||
fi
|
||||
grep -F -- 'if [[ "$manifest" == "$default_manifest" ]] && [[ "$manifest_core_count" -ne 25 || "$manifest_blocked_count" -ne 1 ]]; then' build-wasm.sh >/dev/null
|
||||
grep -F -- 'if [[ "$manifest" == "$default_manifest" ]] && [[ "$manifest_core_count" -ne 25 || "$manifest_blocked_count" -ne 9 ]]; then' build-wasm.sh >/dev/null
|
||||
grep -Fx 'LINUXCNC_ROOT="$linuxcnc_root" ./check-linuxcnc-inputs.sh "$manifest"' test-linuxcnc-wasm-cmake-safe-probe.sh >/dev/null
|
||||
./list-linuxcnc-wasm-safe-shims.sh >/dev/null
|
||||
./list-linuxcnc-wasm-safe-project-sources.sh >/dev/null
|
||||
@@ -222,6 +283,16 @@ if grep -E '\.(hh|h)$' <<<"$wasm_manifest_core" >/dev/null; then
|
||||
fi
|
||||
wasm_manifest_header=$(./list-linuxcnc-wasm-manifest-sources.sh "$manifest" header)
|
||||
grep -Fx "src/emc/rs274ngc/rs274ngc_interp.hh" <<<"$wasm_manifest_header" >/dev/null
|
||||
wasm_manifest_metadata=$(./list-linuxcnc-wasm-manifest-sources.sh "$manifest" metadata)
|
||||
grep -Fx "src/emc/rs274ngc/Submakefile" <<<"$wasm_manifest_metadata" >/dev/null
|
||||
grep -Fx "src/emc/rs274ngc/meson.build" <<<"$wasm_manifest_metadata" >/dev/null
|
||||
wasm_rs274ngc_manifest_entries=$(./list-linuxcnc-wasm-manifest-sources.sh "$manifest" all | grep '^src/emc/rs274ngc/' | sort)
|
||||
wasm_rs274ngc_source_entries=$(find "$linuxcnc_root/src/emc/rs274ngc" -maxdepth 1 -type f -printf 'src/emc/rs274ngc/%f\n' | sort)
|
||||
if ! diff -u <(printf '%s\n' "$wasm_rs274ngc_source_entries") <(printf '%s\n' "$wasm_rs274ngc_manifest_entries") >/dev/null; then
|
||||
echo "wasm rs274ngc manifest no longer covers the full LinuxCNC source directory" >&2
|
||||
diff -u <(printf '%s\n' "$wasm_rs274ngc_source_entries") <(printf '%s\n' "$wasm_rs274ngc_manifest_entries") >&2 || true
|
||||
exit 1
|
||||
fi
|
||||
wasm_manifest_blocked=$(./list-linuxcnc-wasm-manifest-sources.sh "$manifest" blocked)
|
||||
grep -Fx "src/emc/tooldata/tooldata_mmap.cc" <<<"$wasm_manifest_blocked" >/dev/null
|
||||
wasm_manifest_blocked_header=$(./list-linuxcnc-wasm-manifest-sources.sh "$manifest" blocked-header)
|
||||
@@ -252,6 +323,8 @@ dlfcn_shim=$(./list-linuxcnc-wasm-safe-shims.sh dlfcn.cc)
|
||||
grep -Fx "core/wasm_shims/dlfcn.cc" <<<"$dlfcn_shim" >/dev/null
|
||||
python_plugin_shim=$(./list-linuxcnc-wasm-safe-shims.sh python_plugin.cc)
|
||||
grep -Fx "core/wasm_shims/pythonplugin/python_plugin.cc" <<<"$python_plugin_shim" >/dev/null
|
||||
python_c_api_shim=$(./list-linuxcnc-wasm-safe-shims.sh python_c_api_shim.cc)
|
||||
grep -Fx "core/wasm_shims/python_c_api_shim.cc" <<<"$python_c_api_shim" >/dev/null
|
||||
rtapi_compat_shim=$(./list-linuxcnc-wasm-safe-shims.sh rtapi_compat.cc)
|
||||
grep -Fx "core/wasm_shims/rtapi_compat.cc" <<<"$rtapi_compat_shim" >/dev/null
|
||||
tooldata_mmap_backend_shim=$(./list-linuxcnc-wasm-safe-shims.sh tooldata_mmap_backend.cc)
|
||||
@@ -289,7 +362,8 @@ for script in \
|
||||
test-linuxcnc-wasm-source-syntax.sh \
|
||||
test-linuxcnc-wasm-source-objects.sh \
|
||||
test-linuxcnc-wasm-rs274ngc-pre-link-blockers.sh \
|
||||
test-linuxcnc-wasm-rs274ngc-pre-link.sh; do
|
||||
test-linuxcnc-wasm-rs274ngc-pre-link.sh \
|
||||
test-linuxcnc-wasm-runtime-link.sh; do
|
||||
if "./$script" "$missing_wasm_script_manifest" >"$missing_wasm_script_manifest_log" 2>&1; then
|
||||
echo "$script accepted missing manifest: $missing_wasm_script_manifest" >&2
|
||||
exit 1
|
||||
@@ -304,10 +378,12 @@ done
|
||||
missing_root_scripts=(
|
||||
test-linuxcnc-wasm-interp-base-link.sh
|
||||
test-linuxcnc-wasm-interp-find-link.sh
|
||||
test-linuxcnc-wasm-python-c-api-symbols.sh
|
||||
test-linuxcnc-wasm-python-plugin-link.sh
|
||||
test-linuxcnc-wasm-rs274ngc-pre-object.sh
|
||||
test-linuxcnc-wasm-rs274ngc-pre-link-blockers.sh
|
||||
test-linuxcnc-wasm-rs274ngc-pre-link.sh
|
||||
test-linuxcnc-wasm-runtime-link.sh
|
||||
test-linuxcnc-wasm-source-objects.sh
|
||||
test-linuxcnc-wasm-source-syntax.sh
|
||||
test-linuxcnc-wasm-tooldata-common-link.sh
|
||||
@@ -334,6 +410,7 @@ mkdir -p "$missing_source_root/src" "$missing_source_root/include"
|
||||
fixed_source_scripts=(
|
||||
"test-linuxcnc-wasm-interp-base-link.sh:src/emc/rs274ngc/interp_base.cc"
|
||||
"test-linuxcnc-wasm-interp-find-link.sh:src/emc/tooldata/tooldata_common.cc"
|
||||
"test-linuxcnc-wasm-python-c-api-symbols.sh:src/emc/rs274ngc/interp_namedparams.cc"
|
||||
"test-linuxcnc-wasm-rs274ngc-pre-object.sh:src/emc/rs274ngc/rs274ngc_pre.cc"
|
||||
"test-linuxcnc-wasm-tooldata-common-link.sh:src/emc/tooldata/tooldata_common.cc"
|
||||
"test-linuxcnc-wasm-tooldata-link.sh:src/emc/tooldata/tooldata_common.cc"
|
||||
@@ -385,7 +462,7 @@ fi
|
||||
unknown_group_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_unknown_wasm_manifest_group.XXXXXX.txt")
|
||||
unknown_group_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_unknown_wasm_manifest_group.XXXXXX.log")
|
||||
printf 'bogus:src/emc/rs274ngc/interp_arc.cc:test unknown group\n' >"$unknown_group_manifest"
|
||||
if ./build-wasm.sh "$unknown_group_manifest" >"$unknown_group_log" 2>&1; then
|
||||
if CNC_SIM_BUILD_WASM_SKIP_LOCK=1 ./build-wasm.sh "$unknown_group_manifest" >"$unknown_group_log" 2>&1; then
|
||||
echo "build-wasm accepted unknown manifest group" >&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -399,7 +476,8 @@ for script in \
|
||||
test-linuxcnc-wasm-source-syntax.sh \
|
||||
test-linuxcnc-wasm-source-objects.sh \
|
||||
test-linuxcnc-wasm-rs274ngc-pre-link-blockers.sh \
|
||||
test-linuxcnc-wasm-rs274ngc-pre-link.sh; do
|
||||
test-linuxcnc-wasm-rs274ngc-pre-link.sh \
|
||||
test-linuxcnc-wasm-runtime-link.sh; do
|
||||
if "./$script" "$unknown_group_manifest" >"$unknown_group_log" 2>&1; then
|
||||
echo "$script accepted unknown manifest group" >&2
|
||||
exit 1
|
||||
@@ -423,7 +501,7 @@ fi
|
||||
missing_source_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_wasm_manifest_source.XXXXXX.txt")
|
||||
missing_source_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_missing_wasm_manifest_source.XXXXXX.log")
|
||||
printf 'core:src/emc/rs274ngc/does_not_exist.cc:test missing source\n' >"$missing_source_manifest"
|
||||
if ./build-wasm.sh "$missing_source_manifest" >"$missing_source_log" 2>&1; then
|
||||
if CNC_SIM_BUILD_WASM_SKIP_LOCK=1 ./build-wasm.sh "$missing_source_manifest" >"$missing_source_log" 2>&1; then
|
||||
echo "build-wasm accepted missing manifest source" >&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -468,12 +546,21 @@ if ! grep -F "missing manifest source: src/emc/rs274ngc/does_not_exist.cc" "$mis
|
||||
sed -n '1,20p' "$missing_source_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ./test-linuxcnc-wasm-runtime-link.sh "$missing_source_manifest" >"$missing_source_log" 2>&1; then
|
||||
echo "wasm runtime link probe accepted missing manifest source" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "missing manifest source: src/emc/rs274ngc/does_not_exist.cc" "$missing_source_log" >/dev/null; then
|
||||
echo "wasm runtime link probe did not report missing manifest source clearly" >&2
|
||||
sed -n '1,20p' "$missing_source_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
empty_partition_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_empty_wasm_manifest_partition.XXXXXX.log")
|
||||
empty_core_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_empty_wasm_manifest_core.XXXXXX.txt")
|
||||
empty_blocked_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_empty_wasm_manifest_blocked.XXXXXX.txt")
|
||||
printf 'blocked:src/emc/tooldata/tooldata_mmap.cc:test empty core partition\n' >"$empty_core_manifest"
|
||||
if ./build-wasm.sh "$empty_core_manifest" >"$empty_partition_log" 2>&1; then
|
||||
if CNC_SIM_BUILD_WASM_SKIP_LOCK=1 ./build-wasm.sh "$empty_core_manifest" >"$empty_partition_log" 2>&1; then
|
||||
echo "build-wasm accepted empty core manifest partition" >&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -483,7 +570,7 @@ if ! grep -F "unexpected wasm manifest partition: core=0 blocked=1" "$empty_part
|
||||
exit 1
|
||||
fi
|
||||
printf 'core:src/emc/rs274ngc/interp_arc.cc:test empty blocked partition\n' >"$empty_blocked_manifest"
|
||||
if ./build-wasm.sh "$empty_blocked_manifest" >"$empty_partition_log" 2>&1; then
|
||||
if CNC_SIM_BUILD_WASM_SKIP_LOCK=1 ./build-wasm.sh "$empty_blocked_manifest" >"$empty_partition_log" 2>&1; then
|
||||
echo "build-wasm accepted empty blocked manifest partition" >&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -503,7 +590,7 @@ cp list-linuxcnc-manifest-sources.sh "$bad_default_manifest_dir/list-linuxcnc-ma
|
||||
cp list-linuxcnc-wasm-manifest-sources.sh "$bad_default_manifest_dir/list-linuxcnc-wasm-manifest-sources.sh"
|
||||
printf 'core:src/emc/rs274ngc/interp_arc.cc:test bad default core count\nblocked:src/emc/tooldata/tooldata_mmap.cc:test bad default blocked count\n' \
|
||||
>"$bad_default_manifest_dir/linuxcnc-rs274-wasm-source-files.txt"
|
||||
if LINUXCNC_ROOT="$linuxcnc_root_abs" "$bad_default_manifest_dir/build-wasm.sh" >"$bad_default_manifest_log" 2>&1; then
|
||||
if CNC_SIM_BUILD_WASM_SKIP_LOCK=1 LINUXCNC_ROOT="$linuxcnc_root_abs" "$bad_default_manifest_dir/build-wasm.sh" >"$bad_default_manifest_log" 2>&1; then
|
||||
echo "build-wasm accepted bad default wasm manifest partition" >&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -520,7 +607,7 @@ core:src/emc/rs274ngc/interp_arc.cc:duplicate core entry
|
||||
core:src/emc/rs274ngc/interp_arc.cc:duplicate core entry
|
||||
blocked:src/emc/tooldata/tooldata_mmap.cc:blocked entry
|
||||
EOF
|
||||
if ./build-wasm.sh "$duplicate_manifest" >"$duplicate_manifest_log" 2>&1; then
|
||||
if CNC_SIM_BUILD_WASM_SKIP_LOCK=1 ./build-wasm.sh "$duplicate_manifest" >"$duplicate_manifest_log" 2>&1; then
|
||||
echo "build-wasm accepted duplicate manifest source" >&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -538,7 +625,7 @@ cat >"$comment_manifest" <<'EOF'
|
||||
core:src/emc/rs274ngc/interp_arc.cc:commented core entry
|
||||
blocked:src/emc/tooldata/tooldata_mmap.cc:commented blocked entry
|
||||
EOF
|
||||
if ./build-wasm.sh "$comment_manifest" >"$comment_manifest_log" 2>&1; then
|
||||
if CNC_SIM_BUILD_WASM_SKIP_LOCK=1 ./build-wasm.sh "$comment_manifest" >"$comment_manifest_log" 2>&1; then
|
||||
:
|
||||
fi
|
||||
if grep -F "duplicate manifest source" "$comment_manifest_log" >/dev/null; then
|
||||
@@ -615,6 +702,23 @@ if ! grep -F "duplicate manifest source: src/emc/rs274ngc/interp_arc.cc" "$dupli
|
||||
exit 1
|
||||
fi
|
||||
|
||||
duplicate_runtime_link_manifest=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_duplicate_wasm_runtime_link_manifest.XXXXXX.txt")
|
||||
duplicate_runtime_link_log=$(mktemp "${TMPDIR:-/tmp}/cnc_sim_duplicate_wasm_runtime_link_manifest.XXXXXX.log")
|
||||
cat >"$duplicate_runtime_link_manifest" <<'EOF'
|
||||
core:src/emc/rs274ngc/interp_arc.cc:duplicate core entry
|
||||
core:src/emc/rs274ngc/interp_arc.cc:duplicate core entry
|
||||
blocked:src/emc/tooldata/tooldata_mmap.cc:blocked entry
|
||||
EOF
|
||||
if ./test-linuxcnc-wasm-runtime-link.sh "$duplicate_runtime_link_manifest" >"$duplicate_runtime_link_log" 2>&1; then
|
||||
echo "runtime link probe accepted duplicate manifest source" >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! grep -F "duplicate manifest source: src/emc/rs274ngc/interp_arc.cc" "$duplicate_runtime_link_log" >/dev/null; then
|
||||
echo "runtime link probe did not report duplicate manifest source clearly" >&2
|
||||
sed -n '1,20p' "$duplicate_runtime_link_log" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
linuxcnc_root=$(cd "$linuxcnc_root" && pwd)
|
||||
default_manifest="$PWD/linuxcnc-rs274-wasm-source-files.txt"
|
||||
|
||||
@@ -632,7 +736,7 @@ required_shim_sources="$build_dir/wasm_safe_shim_sources.txt"
|
||||
required_project_sources="$build_dir/wasm_safe_project_sources.txt"
|
||||
./list-linuxcnc-wasm-safe-project-sources.sh > "$required_project_sources"
|
||||
|
||||
if [[ "$manifest" == "$default_manifest" ]] && [[ "$manifest_core_count" -ne 25 || "$manifest_blocked_count" -ne 1 ]]; then
|
||||
if [[ "$manifest" == "$default_manifest" ]] && [[ "$manifest_core_count" -ne 25 || "$manifest_blocked_count" -ne 9 ]]; then
|
||||
echo "unexpected wasm manifest partition: core=$manifest_core_count blocked=$manifest_blocked_count" >&2
|
||||
exit 1
|
||||
fi
|
||||
@@ -661,7 +765,15 @@ done < "$required_project_sources"
|
||||
|
||||
grep -F "add_executable(linuxcnc_rs274_wasm_safe_probe EXCLUDE_FROM_ALL" core/CMakeLists.txt >/dev/null
|
||||
grep -F "wasm_shims/rs274ngc_pre_probe_main.cc" core/CMakeLists.txt >/dev/null
|
||||
grep -F "target_compile_definitions(linuxcnc_rs274_wasm_safe_probe" core/CMakeLists.txt >/dev/null
|
||||
grep -F "wasm_shims/cnc_sim_wasm_runtime_probe_main.cc" core/CMakeLists.txt >/dev/null
|
||||
grep -F "add_executable(cnc_sim_wasm_runtime_probe EXCLUDE_FROM_ALL" core/CMakeLists.txt >/dev/null
|
||||
grep -F "target_link_libraries(linuxcnc_rs274_wasm_safe_probe PRIVATE fmt)" core/CMakeLists.txt >/dev/null
|
||||
grep -F "target_link_libraries(cnc_sim_wasm_runtime_probe PRIVATE fmt)" core/CMakeLists.txt >/dev/null
|
||||
if grep -F "target_link_libraries(cnc_sim_wasm PRIVATE fmt)" core/CMakeLists.txt >/dev/null; then
|
||||
echo "wasm target still links host fmt library instead of using header-only fmt" >&2
|
||||
exit 1
|
||||
fi
|
||||
grep -F "add_custom_target(linuxcnc_rs274_wasm_blocked_sources" core/CMakeLists.txt >/dev/null
|
||||
grep -F "LinuxCNC source root does not exist" core/CMakeLists.txt >/dev/null
|
||||
grep -F 'if(NOT IS_DIRECTORY "${CNC_SIM_LINUXCNC_ROOT_ABS}")' core/CMakeLists.txt >/dev/null
|
||||
@@ -670,6 +782,9 @@ grep -F 'if(NOT EXISTS "${CNC_SIM_LINUXCNC_WASM_SOURCE_MANIFEST}")' core/CMakeLi
|
||||
grep -F "LinuxCNC wasm source manifest is not a file" core/CMakeLists.txt >/dev/null
|
||||
grep -F 'if(IS_DIRECTORY "${CNC_SIM_LINUXCNC_WASM_SOURCE_MANIFEST}")' core/CMakeLists.txt >/dev/null
|
||||
grep -F "Bad LinuxCNC wasm source manifest line" core/CMakeLists.txt >/dev/null
|
||||
grep -F 'manifest_group STREQUAL "header"' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'manifest_group STREQUAL "metadata"' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'manifest_group STREQUAL "blocked-header"' core/CMakeLists.txt >/dev/null
|
||||
grep -F "LinuxCNC wasm manifest source does not exist" core/CMakeLists.txt >/dev/null
|
||||
grep -F 'if(NOT EXISTS "${manifest_source}")' core/CMakeLists.txt >/dev/null
|
||||
grep -F "LinuxCNC wasm manifest source is not a file" core/CMakeLists.txt >/dev/null
|
||||
@@ -681,6 +796,36 @@ awk '
|
||||
' core/CMakeLists.txt
|
||||
grep -F "LinuxCNC wasm source manifest has no core entries" core/CMakeLists.txt >/dev/null
|
||||
grep -F "LinuxCNC wasm source manifest has no blocked entries" core/CMakeLists.txt >/dev/null
|
||||
grep -F "WASM builds must enable CNC_SIM_ENABLE_LINUXCNC_WASM_SAFE_PROBE so LinuxCNC rs274 sources are linked" core/CMakeLists.txt >/dev/null
|
||||
grep -F -- '-DCNC_SIM_ENABLE_LINUXCNC_WASM_SAFE_PROBE=ON' build-wasm.sh >/dev/null
|
||||
grep -F 'if(CNC_SIM_ENABLE_LINUXCNC_WASM_SAFE_PROBE)' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'list(APPEND cnc_sim_core_sources ${cnc_sim_linuxcnc_rs274_backend_sources})' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'set(cnc_sim_linuxcnc_kinematics_c_sources' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'project(cnc_sim_wasm_core LANGUAGES C CXX)' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'set(cnc_sim_wasm_safe_preinclude_options "SHELL:-include wctype.h")' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'if(EMSCRIPTEN)' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'list(APPEND cnc_sim_wasm_safe_preinclude_options "SHELL:-include libgen.h")' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'find_path(CNC_SIM_FMT_INCLUDE_DIR fmt/format.h' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'NO_CMAKE_FIND_ROOT_PATH' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'list(APPEND cnc_sim_wasm_safe_preinclude_options "SHELL:-idirafter ${CNC_SIM_FMT_INCLUDE_DIR}")' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'FMT_HEADER_ONLY=1' core/CMakeLists.txt >/dev/null
|
||||
grep -F '${CNC_SIM_FMT_INCLUDE_DIR}' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'target_compile_options(linuxcnc_rs274_wasm_safe_probe_objects PRIVATE ${cnc_sim_wasm_safe_preinclude_options})' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'target_compile_options(linuxcnc_rs274_wasm_safe_probe PRIVATE ${cnc_sim_wasm_safe_preinclude_options})' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'target_compile_options(cnc_sim_objects PRIVATE ${cnc_sim_wasm_safe_preinclude_options})' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'target_compile_options(cnc_sim_wasm_runtime_probe PRIVATE ${cnc_sim_wasm_safe_preinclude_options})' core/CMakeLists.txt >/dev/null
|
||||
test -f core/wasm_shims/boost/noncopyable.hpp
|
||||
grep -F 'class noncopyable' core/wasm_shims/boost/noncopyable.hpp >/dev/null
|
||||
grep -F 'noncopyable(const noncopyable &) = delete;' core/wasm_shims/boost/noncopyable.hpp >/dev/null
|
||||
test -f core/wasm_shims/libgen.h
|
||||
grep -F 'inline char *basename(const char *path)' core/wasm_shims/libgen.h >/dev/null
|
||||
grep -F 'return basename(const_cast<char *>(path));' core/wasm_shims/libgen.h >/dev/null
|
||||
grep -F 'extern "C" int wordexp(const char *words, wordexp_t *pwordexp, int)' core/wasm_shims/linuxcnc_runtime_shim.cc >/dev/null
|
||||
grep -F 'extern "C" void wordfree(wordexp_t *pwordexp)' core/wasm_shims/linuxcnc_runtime_shim.cc >/dev/null
|
||||
grep -F '$<TARGET_OBJECTS:linuxcnc_rs274_wasm_safe_probe_objects>' core/CMakeLists.txt >/dev/null
|
||||
grep -F '$<TARGET_OBJECTS:cnc_sim_objects>' core/CMakeLists.txt >/dev/null
|
||||
grep -F 'CNC_SIM_ENABLE_LINUXCNC_RS274_BACKEND' core/CMakeLists.txt >/dev/null
|
||||
grep -F '#ifndef CNC_SIM_ENABLE_LINUXCNC_WASM_SAFE_PROBE' core/src/linuxcnc_rs274_backend.cpp >/dev/null
|
||||
|
||||
if ! command -v cmake >/dev/null 2>&1; then
|
||||
echo "cmake not found; skipping linuxcnc wasm-safe CMake probe target"
|
||||
@@ -696,5 +841,7 @@ cmake -S core -B "$build_dir" \
|
||||
cmake --build "$build_dir" --target linuxcnc_rs274_wasm_safe_probe_objects
|
||||
cmake --build "$build_dir" --target linuxcnc_rs274_wasm_safe_probe
|
||||
"$build_dir/linuxcnc_rs274_wasm_safe_probe"
|
||||
cmake --build "$build_dir" --target cnc_sim_wasm_runtime_probe
|
||||
"$build_dir/cnc_sim_wasm_runtime_probe"
|
||||
|
||||
echo "linuxcnc wasm-safe CMake probe target passed"
|
||||
|
||||
Reference in New Issue
Block a user