执行 AGENTS align-linuxcnc 加速规则

结论:补强 WASM Python C API 可执行探针,依据 LinuxCNC src/emc/rs274ngc/gcodemodule.cc、interpmodule.cc 和 py*.cc 对 PyObject_New、Py_TYPE、Py_None、PyList_Type 等 Python C API 的绑定用法。验证通过:./test-linuxcnc-wasm-python-c-api-symbols.sh、./test-native.sh、./test-linuxcnc-source-link.sh。
This commit is contained in:
cnc
2026-06-05 10:23:49 +08:00
parent 3a478ca335
commit 0737d5ea65
2 changed files with 96 additions and 2 deletions

View File

@@ -70,6 +70,12 @@ object_sources=(
"$python_c_api_shim"
"$runtime_shim"
)
probe_objects=(
"$build_dir/python_c_api_probe_main.o"
)
probe_sources=(
core/wasm_shims/python_c_api_probe_main.cc
)
for source in "${python_binding_sources[@]}"; do
object_name=$(basename "$source" .cc)
objects+=("$build_dir/$object_name.o")
@@ -88,9 +94,11 @@ next_signature="$build_dir/python-c-api.signature.next"
printf '\n'
printf 'SOURCES:\n'
printf '%s\n' "${object_sources[@]}"
printf 'PROBE_SOURCES:\n'
printf '%s\n' "${probe_sources[@]}"
} > "$next_signature"
if [[ ! -f "$signature" ]] || ! cmp -s "$signature" "$next_signature"; then
rm -f "$build_dir"/*.o "$build_dir"/*.d
rm -f "$build_dir"/*.o "$build_dir"/*.d "$build_dir/python_c_api_probe"
fi
mv "$next_signature" "$signature"
@@ -107,8 +115,11 @@ makefile="$build_dir/python-c-api.mk"
for object in "${objects[@]}"; do
printf 'DEP_FILES += %s.d\n' "$object"
done
for object in "${probe_objects[@]}"; do
printf 'DEP_FILES += %s.d\n' "$object"
done
printf '\n.PHONY: all\n'
printf 'all: $(OBJECTS)\n\n'
printf 'all: $(OBJECTS) %s\n\n' "$build_dir/python_c_api_probe"
object_index=0
for source in "${object_sources[@]}"; do
@@ -116,6 +127,14 @@ makefile="$build_dir/python-c-api.mk"
printf '\t@$(CXX) $(COMMON_FLAGS) -MMD -MP -MF %s.d -c %s -o %s\n\n' "${objects[$object_index]}" "$source" "${objects[$object_index]}"
object_index=$((object_index + 1))
done
probe_index=0
for source in "${probe_sources[@]}"; do
printf '%s: %s\n' "${probe_objects[$probe_index]}" "$source"
printf '\t@$(CXX) $(COMMON_FLAGS) -MMD -MP -MF %s.d -c %s -o %s\n\n' "${probe_objects[$probe_index]}" "$source" "${probe_objects[$probe_index]}"
probe_index=$((probe_index + 1))
done
printf '%s: %s %s\n' "$build_dir/python_c_api_probe" "$build_dir/python_c_api_shim.o" "${probe_objects[*]}"
printf '\t@$(CXX) %s %s -o %s\n\n' "$build_dir/python_c_api_shim.o" "${probe_objects[*]}" "$build_dir/python_c_api_probe"
printf '\n-include $(DEP_FILES)\n'
} > "$makefile"
make --output-sync=target -j"$build_jobs" -f "$makefile" >/dev/null
@@ -229,4 +248,6 @@ if [[ -s "$build_dir/object.missing-python" ]]; then
exit 1
fi
"$build_dir/python_c_api_probe"
echo "linuxcnc wasm Python C API symbol probe passed"