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