blob: d66d44f08a9aa6607be500b404e27b765a23fd4e [file] [log] [blame]
#!/bin/bash
# Generates a graphviz dependency graph for :ruy, with details trimmed.
# Suggested rendering: pipe to `neato` (part of graphviz standard distribution)
# doc/depgraph.sh | dot -Tsvg > depgraph.svg
drop=(
':platform'
':check_macros'
':asm_helpers'
':size_util'
':system_aligned_alloc'
':side_pair'
':opt_set'
':blocking_counter'
':wait'
':time'
':path'
':performance_advisory'
':tune'
':matrix'
':mat'
':mul_params'
':context_get_ctx'
':have_built_path_for'
':pack_common'
':kernel_common'
':trace'
':validate'
'profiler:instrumentation'
'\bclog\b'
'\bcpuinfo_impl\b'
':apply_multiplier'
'\blabel='
)
graph="$(bazel query 'kind("cc_library", deps(//ruy))' --output graph --noimplicit_deps 2>/dev/null)"
graph="$(echo "${graph}" | sed 's|//ruy/\?||g')"
for t in "${drop[@]}"; do
graph="$(echo "${graph}" | grep -v "${t}")"
done
graph="$(echo "${graph}" | sed 's|//:cpuinfo_with_unstripped_include_path||g')"
graph="$(echo "${graph}" | sed 's|//third_party/cpuinfo:[a-z0-9_]*|@cpuinfo|g')"
frontend=(
':ruy'
':context'
':frontend'
':prepare_packed_matrices'
':create_trmul_params'
)
middleend=(
':ctx'
':trmul_params'
':trmul'
':block_map'
':cpuinfo'
':cpu_cache_params'
':allocator'
':prepacked_cache'
)
backend=(
':kernel.*'
':pack.*'
)
threadpool=(
':thread_pool'
)
frontend_lines=()
middleend_lines=()
backend_lines=()
threadpool_lines=()
misc_lines=()
arrow_lines=()
while IFS= read -r line; do
if [[ "${line}" =~ '->' ]]; then
arrow_lines+=("${line}")
else
handled=false
if [ $handled = false ]; then
for f in "${frontend[@]}"; do
if [[ "${line}" =~ ${f} ]]; then
frontend_lines+=("${line}")
handled=true
break
fi
done
fi
if [ $handled = false ]; then
for f in "${middleend[@]}"; do
if [[ "${line}" =~ ${f} ]]; then
middleend_lines+=("${line}")
handled=true
break
fi
done
fi
if [ $handled = false ]; then
for f in "${backend[@]}"; do
if [[ "${line}" =~ ${f} ]]; then
backend_lines+=("${line}")
handled=true
break
fi
done
fi
if [ $handled = false ]; then
for f in "${threadpool[@]}"; do
if [[ "${line}" =~ ${f} ]]; then
threadpool_lines+=("${line}")
handled=true
break
fi
done
fi
if [ $handled = false ]; then
if [[ "${line}" =~ ^[[:space:]]+\" ]]; then
misc_lines+=("${line}")
fi
fi
fi
done <<< "${graph}"
echo "digraph ruy {"
echo " splines = true"
echo " node [shape=box]"
for f in "${frontend_lines[@]}"; do
echo " $f [style=filled, color=\"#B2EBF2\"];"
done
for m in "${middleend_lines[@]}"; do
echo " $m [style=filled, color=\"#C8E6C9\"];"
done
for b in "${backend_lines[@]}"; do
echo " $b [style=filled, color=\"#FFCDD2\"];"
done
for b in "${threadpool_lines[@]}"; do
echo " $b [style=filled, color=\"#FFF9C4\"];"
done
for m in "${misc_lines[@]}"; do
echo "$m"
done
for a in "${arrow_lines[@]}"; do
echo "$a"
done
echo "}"