Files
build_infra/Graphviz/Cmake_Target_Graph.sh.in
T
2026-07-28 10:54:38 +08:00

53 lines
1.9 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
targets=(@PSC_TARGETS_SH@)
edges=(@PSC_TARGET_EDGES_SH@)
output_dir='@PSC_OUTPUT_DIR@'
format='@PSC_FORMAT@'
dot_exe='@PSC_DOT_EXECUTABLE@'
mkdir -p "$output_dir"
dot_file="$output_dir/radio_cmake_targets.dot"
image_file="$output_dir/radio_cmake_targets.$format"
{
echo 'digraph "radio cmake_targets" {'
echo 'rankdir=LR;'
echo 'splines=ortho;'
echo 'concentrate=true;'
echo 'forcelabels=true;'
echo 'graph [fontname="Consolas", label="radio cmake_targets", labelloc=t, fontsize=18];'
echo 'node [shape=box, style="rounded,filled", fontname="Consolas", fontsize=10];'
echo 'edge [fontname="Consolas", fontsize=9];'
for target in "${targets[@]}"; do
safe=${target//\"/\\\"}
echo "\"$safe\" [label=\"$safe\", tooltip=\"$safe\", fillcolor=\"#dcfce7\"];"
done
for edge in "${edges[@]}"; do
left=${edge%%|*}
right=${edge#*|}
left=${left//\"/\\\"}
right=${right//\"/\\\"}
echo "\"$left\" -> \"$right\" [xlabel=\"links\"];"
done
echo 'subgraph cluster_legend {'
echo 'label="legend";'
echo 'style="rounded,dashed";'
echo '"legend_target" [label="cmake target", fillcolor="#dcfce7"];'
echo '"legend_edge" [label="edge = target_link_libraries / target dependency", fillcolor="#f8fafc"];'
echo '}'
echo '}'
} > "$dot_file"
"$dot_exe" "-T$format" "$dot_file" -o "$image_file"
items=(radio_directory_tree radio_module_dependency radio_cmake_targets radio_include_dependency radio_render_architecture)
{
echo '<!doctype html><meta charset="utf-8"><title>Radio Graphviz</title><h1>Radio Graphviz</h1><ul>'
for item in "${items[@]}"; do
file="$item.$format"
if [ -f "$output_dir/$file" ]; then
echo "<li><a href=\"$file\">$item</a></li>"
else
echo "<li>$item (not generated)</li>"
fi
done
echo '</ul>'
} > "$output_dir/index.html"