3 if [[ $# -lt 2 ||
$# -gt 4 ]]; then
4 echo "Usage: $0 <build dir> <file or dir path> [rejects dir] [checks]"
5 echo " - <build dir> has to be a LLVM build directory (you should use CCACHE!)."
6 echo " - <file or dir path> is the path that contains the .cpp files to update."
7 echo " - [rejects dir] is a directory where rejected patch (build failure) will be stored."
8 echo " - [checks] is an optional space-separated list of check to use instead of auto-detecting"
9 echo " Also define the env var CLANG_TIDY the path to use for the clang-tidy binary (default to 'clang-tidy' in the PATH)"
10 echo " Also define the env var TIMING_TIDY to 'time' to prefix clang-tidy execution with it"
12 echo "This tool will execute clang-tidy on every .cpp file in the provided path and"
13 echo "rerun the tests. On success, a commit is added to the repo for each individual"
14 echo "pair <clang-tidy check, file>."
22 if [[ -v CLANG_TIDY
]] && [[ ! -z "$CLANG_TIDY" ]] ; then
23 CLANG_TIDY
=$
(realpath
$CLANG_TIDY)
24 if [[ ! -f "$CLANG_TIDY" ]]; then
25 echo "Invalid path '$CLANG_TIDY'"
31 TIMING_TIDY
=${TIMING_TIDY:-}
32 echo "Using: '$CLANG_TIDY"
34 if [[ ! -z "$REJECT_DIR" ]] && [[ ! -d "$REJECT_DIR" ]]; then
35 echo "Expects 'rejects dir' to be a directory, got '$REJECT_DIR'"
39 ensure_clean_build
() {
41 time ninja
-C $BUILD_DIR check-mlir-build-only
> ${REJECT_DIR}/ninja.clean.log
2>&1
42 if [[ $?
!= 0 ]] ; then
43 echo "-- Build failed on clean state, cleaning TableGen files and retry"
44 # Reinitialize the TableGen generated file to have a clean state
45 find $BUILD_DIR/tools
/mlir
/ |
grep '\.inc' |
while read file ; do rm $file ; done
46 time ninja
-C $BUILD_DIR check-mlir-build-only
> ${REJECT_DIR}/ninja.clean.log
2>&1
47 if [[ $?
!= 0 ]] ; then
48 echo "check-mlir-build-only failed on clean state! (see ninja.clean.log)"
55 tmpfile
=$
(mktemp
/tmp
/mhlo-temp-checks.XXXXXX
)
56 find $SRCS |
grep ".cpp$" |
sort |
while read file ; do
57 echo "================================"
58 echo "======= Processing $file ======="
60 echo "================================"
62 if [[ ! -z "$PRESET_CHECKS" ]]; then
63 CHECKS
="$PRESET_CHECKS"
65 CHECKS
=$
($CLANG_TIDY $file -p $BUILD_DIR --list-checks \
66 |
grep -v "Enabled checks:" |
grep -v "^$" \
67 |
while read check
; do echo -n "${check} " ; done;)
69 echo "-----------------------------------"
70 echo "-- Reset state before applying all checks on file $file"
73 echo "-----------------------------------"
74 echo "-- Apply all checks on file $file"
75 echo "$TIMING_TIDY $CLANG_TIDY -p $BUILD_DIR $file -fix -fix-errors"
76 $TIMING_TIDY $CLANG_TIDY -p $BUILD_DIR $file -fix -fix-errors \
77 |
grep "warning:.*\]$" |
sed -r 's#.*\[(.*)]$#\1#' |
sort -u > $tmpfile
79 if [[ $
(git
diff --stat) == '' ]]; then
80 echo 'Nothing was applied, skip'
83 echo "-----------------------------------"
84 echo "-- Got some diff, run one check at a time now"
85 cat $tmpfile |
while read check
; do
86 echo "-----------------------------------"
87 echo "-- Reset state before applying check $check on file $file"
90 echo "-----------------------------------"
91 echo "-- Apply check $check on file $file"
92 echo "$TIMING_TIDY $CLANG_TIDY -p $BUILD_DIR $file --checks="-*,$check" -fix -fix-errors"
93 { $TIMING_TIDY $CLANG_TIDY -p $BUILD_DIR $file --checks="-*,$check" -fix -fix-errors ; } 2>&1
95 if [[ $
(git
diff --stat) == '' ]]; then
96 echo 'Nothing was applied, skip'
99 echo "-----------------------------------"
100 echo "-- Test check $check on file $file"
101 # Clang-tidy sometimes update files in the build directory, erase the .inc file generate by tablegen
102 # to force them to be regenerated now.
103 find $BUILD_DIR/tools
/mlir
/ |
grep '\.inc' |
while read file ; do rm $file ; done
104 ninja
-C $BUILD_DIR check-mlir
> ${REJECT_DIR}/ninja.
${check}.$
(basename $file).log
2>&1
105 if [[ $?
!= 0 ]] ; then
106 echo "check-mlir failed! (see ninja.${check}.${file}.log)"
107 [[ ! -z "$REJECT_DIR" ]] && git
diff > "${REJECT_DIR}/${check}_$(basename ${file}).reject.diff"
110 echo "-----------------------------------"
111 echo "-- Success, commit changes for check $check on file $file"
114 git commit
-a -m "Apply clang-tidy fixes for $check in $(basename $file) (NFC)"