74 lines
1.9 KiB
Bash
74 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
set -u
|
|
|
|
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
cd "$ROOT_DIR" || exit 1
|
|
|
|
EXTRA_ARGS=(
|
|
-extra-arg=-isystem
|
|
-extra-arg=/opt/devkitpro/devkitARM/arm-none-eabi/include/c++/15.2.0
|
|
-extra-arg=-isystem
|
|
-extra-arg=/opt/devkitpro/devkitARM/arm-none-eabi/include/c++/15.2.0/arm-none-eabi
|
|
-extra-arg=-isystem
|
|
-extra-arg=/opt/devkitpro/devkitARM/arm-none-eabi/include/c++/15.2.0/backward
|
|
-extra-arg=-isystem
|
|
-extra-arg=/opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/15.2.0/include
|
|
-extra-arg=-isystem
|
|
-extra-arg=/opt/devkitpro/devkitARM/lib/gcc/arm-none-eabi/15.2.0/include-fixed
|
|
-extra-arg=-isystem
|
|
-extra-arg=/opt/devkitpro/devkitARM/arm-none-eabi/include
|
|
)
|
|
|
|
rebuild_tidy_db() {
|
|
mkdir -p .clang-tidy-db
|
|
sed 's/-mthumb-interwork//g' compile_commands.json > .clang-tidy-db/compile_commands.json
|
|
}
|
|
|
|
collect_sources() {
|
|
find source include -type f \( -name '*.c' -o -name '*.cc' -o -name '*.cpp' -o -name '*.cxx' \) 2>/dev/null | sort
|
|
}
|
|
|
|
declare -A mtimes
|
|
last_cc_mtime=""
|
|
|
|
while true; do
|
|
if [[ ! -f compile_commands.json ]]; then
|
|
echo "Waiting for compile_commands.json (run CMake configure/build once)..."
|
|
sleep 2
|
|
continue
|
|
fi
|
|
|
|
cc_mtime="$(stat -c %Y compile_commands.json 2>/dev/null || echo 0)"
|
|
db_regenerated=0
|
|
if [[ "$cc_mtime" != "$last_cc_mtime" ]]; then
|
|
rebuild_tidy_db
|
|
last_cc_mtime="$cc_mtime"
|
|
db_regenerated=1
|
|
fi
|
|
|
|
mapfile -t files < <(collect_sources)
|
|
changed=()
|
|
|
|
for f in "${files[@]}"; do
|
|
m="$(stat -c %Y "$f" 2>/dev/null || echo 0)"
|
|
if [[ "${mtimes[$f]:-}" != "$m" ]]; then
|
|
changed+=("$f")
|
|
mtimes["$f"]="$m"
|
|
fi
|
|
done
|
|
|
|
if [[ $db_regenerated -eq 1 && ${#files[@]} -gt 0 ]]; then
|
|
changed=("${files[@]}")
|
|
fi
|
|
|
|
if [[ ${#changed[@]} -gt 0 ]]; then
|
|
echo "TIDY-WATCH-BEGIN"
|
|
for f in "${changed[@]}"; do
|
|
clang-tidy -quiet -p .clang-tidy-db "$f" "${EXTRA_ARGS[@]}" || true
|
|
done
|
|
echo "TIDY-WATCH-END"
|
|
fi
|
|
|
|
sleep 1
|
|
done
|