1 #!/bin/sh 2 3 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" 4 5 # Guess path to LLVM_CHECKOUT if not provided 6 if [ "${LLVM_CHECKOUT}" = "" ]; then 7 LLVM_CHECKOUT="${SCRIPT_DIR}/../../../../../" 8 fi 9 10 # python tools setup 11 CPPLINT=${SCRIPT_DIR}/cpplint.py 12 LITLINT=${SCRIPT_DIR}/litlint.py 13 if [ "${PYTHON_EXECUTABLE}" != "" ]; then 14 CPPLINT="${PYTHON_EXECUTABLE} ${CPPLINT}" 15 LITLINT="${PYTHON_EXECUTABLE} ${LITLINT}" 16 fi 17 18 # Filters 19 # TODO: remove some of these filters 20 COMMON_LINT_FILTER=-build/include,-build/header_guard,-legal/copyright,-whitespace/comments,-readability/casting,\ 21 -build/namespaces,-readability/braces 22 ASAN_RTL_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/int 23 ASAN_TEST_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/sizeof,-runtime/int,-runtime/printf,-runtime/threadsafe_fn 24 ASAN_LIT_TEST_LINT_FILTER=${ASAN_TEST_LINT_FILTER},-whitespace/line_length 25 TSAN_RTL_LINT_FILTER=${COMMON_LINT_FILTER} 26 TSAN_TEST_LINT_FILTER=${TSAN_RTL_LINT_FILTER},-runtime/threadsafe_fn,-runtime/int 27 TSAN_LIT_TEST_LINT_FILTER=${TSAN_TEST_LINT_FILTER},-whitespace/line_length 28 MSAN_RTL_LINT_FILTER=${COMMON_LINT_FILTER} 29 LSAN_RTL_LINT_FILTER=${COMMON_LINT_FILTER} 30 LSAN_LIT_TEST_LINT_FILTER=${LSAN_RTL_LINT_FILTER},-whitespace/line_length 31 DFSAN_RTL_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/int,-runtime/printf,-runtime/references,-readability/function 32 SCUDO_RTL_LINT_FILTER=${COMMON_LINT_FILTER} 33 COMMON_RTL_INC_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/int,-runtime/sizeof,-runtime/printf,-readability/fn_size 34 SANITIZER_INCLUDES_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/int 35 36 MKTEMP_DIR=$(mktemp -qd /tmp/check_lint.XXXXXXXXXX) 37 MKTEMP="mktemp -q ${MKTEMP_DIR}/tmp.XXXXXXXXXX" 38 cleanup() { 39 rm -rf $MKTEMP_DIR 40 } 41 trap cleanup EXIT 42 43 cd ${LLVM_CHECKOUT} 44 45 EXITSTATUS=0 46 ERROR_LOG=$(${MKTEMP}) 47 48 run_lint() { 49 FILTER=$1 50 shift 51 TASK_LOG=$(${MKTEMP}) 52 ${CPPLINT} --filter=${FILTER} "$@" 2>$TASK_LOG 53 if [ "$?" != "0" ]; then 54 cat $TASK_LOG | grep -v "Done processing" | grep -v "Total errors found" \ 55 | grep -v "Skipping input" >> $ERROR_LOG 56 fi 57 if [ "${SILENT}" != "1" ]; then 58 cat $TASK_LOG 59 fi 60 ${LITLINT} "$@" 2>>$ERROR_LOG 61 } 62 63 if [ "${COMPILER_RT}" = "" ]; then 64 COMPILER_RT=projects/compiler-rt 65 fi 66 LIT_TESTS=${COMPILER_RT}/test 67 # Headers 68 SANITIZER_INCLUDES=${COMPILER_RT}/include/sanitizer 69 run_lint ${SANITIZER_INCLUDES_LINT_FILTER} ${SANITIZER_INCLUDES}/*.h & 70 71 # Sanitizer_common 72 COMMON_RTL=${COMPILER_RT}/lib/sanitizer_common 73 run_lint ${COMMON_RTL_INC_LINT_FILTER} ${COMMON_RTL}/*.cc \ 74 ${COMMON_RTL}/*.h \ 75 ${COMMON_RTL}/tests/*.cc & 76 77 # Interception 78 INTERCEPTION=${COMPILER_RT}/lib/interception 79 run_lint ${ASAN_RTL_LINT_FILTER} ${INTERCEPTION}/*.cc \ 80 ${INTERCEPTION}/*.h & 81 82 # ASan 83 ASAN_RTL=${COMPILER_RT}/lib/asan 84 run_lint ${ASAN_RTL_LINT_FILTER} ${ASAN_RTL}/*.cc \ 85 ${ASAN_RTL}/*.h & 86 run_lint ${ASAN_TEST_LINT_FILTER} ${ASAN_RTL}/tests/*.cc \ 87 ${ASAN_RTL}/tests/*.h & 88 run_lint ${ASAN_LIT_TEST_LINT_FILTER} ${LIT_TESTS}/asan/*/*.cc & 89 90 # TSan 91 TSAN_RTL=${COMPILER_RT}/lib/tsan 92 run_lint ${TSAN_RTL_LINT_FILTER} ${TSAN_RTL}/rtl/*.cc \ 93 ${TSAN_RTL}/rtl/*.h & 94 run_lint ${TSAN_TEST_LINT_FILTER} ${TSAN_RTL}/tests/rtl/*.cc \ 95 ${TSAN_RTL}/tests/rtl/*.h \ 96 ${TSAN_RTL}/tests/unit/*.cc & 97 run_lint ${TSAN_LIT_TEST_LINT_FILTER} ${LIT_TESTS}/tsan/*.cc & 98 99 # MSan 100 MSAN_RTL=${COMPILER_RT}/lib/msan 101 run_lint ${MSAN_RTL_LINT_FILTER} ${MSAN_RTL}/*.cc \ 102 ${MSAN_RTL}/*.h & 103 104 # LSan 105 LSAN_RTL=${COMPILER_RT}/lib/lsan 106 run_lint ${LSAN_RTL_LINT_FILTER} ${LSAN_RTL}/*.cc \ 107 ${LSAN_RTL}/*.h & 108 run_lint ${LSAN_LIT_TEST_LINT_FILTER} ${LIT_TESTS}/lsan/*/*.cc & 109 110 # DFSan 111 DFSAN_RTL=${COMPILER_RT}/lib/dfsan 112 run_lint ${DFSAN_RTL_LINT_FILTER} ${DFSAN_RTL}/*.cc \ 113 ${DFSAN_RTL}/*.h & 114 ${DFSAN_RTL}/scripts/check_custom_wrappers.sh >> $ERROR_LOG 115 116 # Scudo 117 SCUDO_RTL=${COMPILER_RT}/lib/scudo 118 run_lint ${SCUDO_RTL_LINT_FILTER} ${SCUDO_RTL}/*.cpp \ 119 ${SCUDO_RTL}/*.h & 120 121 # Misc files 122 FILES=${COMMON_RTL}/*.inc 123 TMPFILES="" 124 for FILE in $FILES; do 125 TMPFILE="$(${MKTEMP}).$(basename ${FILE}).cc" 126 cp -f $FILE $TMPFILE 127 run_lint ${COMMON_RTL_INC_LINT_FILTER} $TMPFILE & 128 TMPFILES="$TMPFILES $TMPFILE" 129 done 130 131 wait 132 133 for temp in $TMPFILES; do 134 rm -f $temp 135 done 136 137 if [ -s $ERROR_LOG ]; then 138 cat $ERROR_LOG 139 exit 1 140 fi 141 142 exit 0 143