blob: ec07138cac1c5d6fec6fdf547e236967a4f3b3e0 [file] [log] [blame]
Ed Maste89b80fb2014-10-07 20:23:57 +00001#!/bin/sh
Alexey Samsonov79b36282012-08-31 08:36:36 +00002
Alexey Samsonov79b36282012-08-31 08:36:36 +00003SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
4
5# Guess path to LLVM_CHECKOUT if not provided
Ed Maste89b80fb2014-10-07 20:23:57 +00006if [ "${LLVM_CHECKOUT}" = "" ]; then
Alexey Samsonov79b36282012-08-31 08:36:36 +00007 LLVM_CHECKOUT="${SCRIPT_DIR}/../../../../../"
Alexey Samsonov79b36282012-08-31 08:36:36 +00008fi
9
Greg Fitzgeralda310d982014-05-14 22:49:46 +000010# python tools setup
Alexey Samsonovd875c392013-08-28 11:27:31 +000011CPPLINT=${SCRIPT_DIR}/cpplint.py
Greg Fitzgeralda310d982014-05-14 22:49:46 +000012LITLINT=${SCRIPT_DIR}/litlint.py
Will Dietzf967d1f2013-08-28 15:53:17 +000013if [ "${PYTHON_EXECUTABLE}" != "" ]; then
14 CPPLINT="${PYTHON_EXECUTABLE} ${CPPLINT}"
Greg Fitzgeralda310d982014-05-14 22:49:46 +000015 LITLINT="${PYTHON_EXECUTABLE} ${LITLINT}"
Will Dietzf967d1f2013-08-28 15:53:17 +000016fi
Alexey Samsonov79b36282012-08-31 08:36:36 +000017
18# Filters
19# TODO: remove some of these filters
Evgeniy Stepanov60a8e5b2013-02-08 12:13:43 +000020COMMON_LINT_FILTER=-build/include,-build/header_guard,-legal/copyright,-whitespace/comments,-readability/casting,\
Kostya Serebryanyad272b02017-06-02 21:32:04 +000021-build/namespaces,-readability/braces
Kostya Serebryany5b4267f2013-04-05 14:40:25 +000022ASAN_RTL_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/int
Alexey Samsonov98aa08c2014-02-25 12:09:25 +000023ASAN_TEST_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/sizeof,-runtime/int,-runtime/printf,-runtime/threadsafe_fn
Alexey Samsonov506b97d2012-12-13 12:09:47 +000024ASAN_LIT_TEST_LINT_FILTER=${ASAN_TEST_LINT_FILTER},-whitespace/line_length
Evgeniy Stepanov60a8e5b2013-02-08 12:13:43 +000025TSAN_RTL_LINT_FILTER=${COMMON_LINT_FILTER}
Alexey Samsonov79b36282012-08-31 08:36:36 +000026TSAN_TEST_LINT_FILTER=${TSAN_RTL_LINT_FILTER},-runtime/threadsafe_fn,-runtime/int
Alexey Samsonov84748432012-12-28 10:06:26 +000027TSAN_LIT_TEST_LINT_FILTER=${TSAN_TEST_LINT_FILTER},-whitespace/line_length
Evgeniy Stepanov60a8e5b2013-02-08 12:13:43 +000028MSAN_RTL_LINT_FILTER=${COMMON_LINT_FILTER}
Sergey Matveev48c1d1a2013-05-20 11:09:27 +000029LSAN_RTL_LINT_FILTER=${COMMON_LINT_FILTER}
Sergey Matveev39e8a6d2013-05-27 11:41:46 +000030LSAN_LIT_TEST_LINT_FILTER=${LSAN_RTL_LINT_FILTER},-whitespace/line_length
Lorenzo Martignoni60ebffc2014-10-08 10:01:42 +000031DFSAN_RTL_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/int,-runtime/printf,-runtime/references,-readability/function
Kostya Kortchinsky6edadae2017-11-08 16:42:29 +000032SCUDO_RTL_LINT_FILTER=${COMMON_LINT_FILTER}
Sergey Matveev6b339752014-01-31 14:02:21 +000033COMMON_RTL_INC_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/int,-runtime/sizeof,-runtime/printf,-readability/fn_size
Evgeniy Stepanov1a2262e2013-04-22 13:28:26 +000034SANITIZER_INCLUDES_LINT_FILTER=${COMMON_LINT_FILTER},-runtime/int
Evgeniy Stepanove0009352015-01-16 10:09:56 +000035
36MKTEMP_DIR=$(mktemp -qd /tmp/check_lint.XXXXXXXXXX)
37MKTEMP="mktemp -q ${MKTEMP_DIR}/tmp.XXXXXXXXXX"
Evgeniy Stepanov29235e32015-01-16 10:20:49 +000038cleanup() {
Evgeniy Stepanove0009352015-01-16 10:09:56 +000039 rm -rf $MKTEMP_DIR
40}
41trap cleanup EXIT
42
Alexey Samsonov79b36282012-08-31 08:36:36 +000043cd ${LLVM_CHECKOUT}
44
Alexey Samsonov903c3252013-08-23 07:43:56 +000045EXITSTATUS=0
Alexander Potapenkod1bae722013-09-20 11:29:44 +000046ERROR_LOG=$(${MKTEMP})
Timur Iskhodzhanovdd052ce2013-08-13 13:44:02 +000047
Alexey Samsonov903c3252013-08-23 07:43:56 +000048run_lint() {
49 FILTER=$1
50 shift
Alexander Potapenkod1bae722013-09-20 11:29:44 +000051 TASK_LOG=$(${MKTEMP})
Alexey Samsonov25dc0182013-08-29 11:35:01 +000052 ${CPPLINT} --filter=${FILTER} "$@" 2>$TASK_LOG
Alexey Samsonov903c3252013-08-23 07:43:56 +000053 if [ "$?" != "0" ]; then
Alexey Samsonov25dc0182013-08-29 11:35:01 +000054 cat $TASK_LOG | grep -v "Done processing" | grep -v "Total errors found" \
55 | grep -v "Skipping input" >> $ERROR_LOG
56 fi
Ed Maste89b80fb2014-10-07 20:23:57 +000057 if [ "${SILENT}" != "1" ]; then
Alexey Samsonov25dc0182013-08-29 11:35:01 +000058 cat $TASK_LOG
Alexey Samsonov903c3252013-08-23 07:43:56 +000059 fi
Greg Fitzgeraldceae1fb2014-05-14 23:31:20 +000060 ${LITLINT} "$@" 2>>$ERROR_LOG
Alexey Samsonov903c3252013-08-23 07:43:56 +000061}
62
Ed Maste89b80fb2014-10-07 20:23:57 +000063if [ "${COMPILER_RT}" = "" ]; then
Greg Fitzgerald8288afb2014-03-21 00:45:21 +000064 COMPILER_RT=projects/compiler-rt
65fi
Alexey Samsonov98aa08c2014-02-25 12:09:25 +000066LIT_TESTS=${COMPILER_RT}/test
Alexey Samsonov79b36282012-08-31 08:36:36 +000067# Headers
68SANITIZER_INCLUDES=${COMPILER_RT}/include/sanitizer
Alexey Samsonov25dc0182013-08-29 11:35:01 +000069run_lint ${SANITIZER_INCLUDES_LINT_FILTER} ${SANITIZER_INCLUDES}/*.h &
Alexey Samsonov79b36282012-08-31 08:36:36 +000070
71# Sanitizer_common
72COMMON_RTL=${COMPILER_RT}/lib/sanitizer_common
Ed Maste89b80fb2014-10-07 20:23:57 +000073run_lint ${COMMON_RTL_INC_LINT_FILTER} ${COMMON_RTL}/*.cc \
74 ${COMMON_RTL}/*.h \
Alexey Samsonov25dc0182013-08-29 11:35:01 +000075 ${COMMON_RTL}/tests/*.cc &
Alexey Samsonov79b36282012-08-31 08:36:36 +000076
Evgeniy Stepanov83f05bf2012-12-11 12:52:38 +000077# Interception
Alexey Samsonov79b36282012-08-31 08:36:36 +000078INTERCEPTION=${COMPILER_RT}/lib/interception
Ed Maste89b80fb2014-10-07 20:23:57 +000079run_lint ${ASAN_RTL_LINT_FILTER} ${INTERCEPTION}/*.cc \
80 ${INTERCEPTION}/*.h &
Alexey Samsonov79b36282012-08-31 08:36:36 +000081
82# ASan
83ASAN_RTL=${COMPILER_RT}/lib/asan
Ed Maste89b80fb2014-10-07 20:23:57 +000084run_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 &
Alexey Samsonov98aa08c2014-02-25 12:09:25 +000088run_lint ${ASAN_LIT_TEST_LINT_FILTER} ${LIT_TESTS}/asan/*/*.cc &
Alexey Samsonov79b36282012-08-31 08:36:36 +000089
90# TSan
91TSAN_RTL=${COMPILER_RT}/lib/tsan
Ed Maste89b80fb2014-10-07 20:23:57 +000092run_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 \
Alexey Samsonov25dc0182013-08-29 11:35:01 +000096 ${TSAN_RTL}/tests/unit/*.cc &
Alexey Samsonov98aa08c2014-02-25 12:09:25 +000097run_lint ${TSAN_LIT_TEST_LINT_FILTER} ${LIT_TESTS}/tsan/*.cc &
Evgeniy Stepanovc8cde8d2013-01-18 15:53:43 +000098
Evgeniy Stepanov83f05bf2012-12-11 12:52:38 +000099# MSan
100MSAN_RTL=${COMPILER_RT}/lib/msan
Ed Maste89b80fb2014-10-07 20:23:57 +0000101run_lint ${MSAN_RTL_LINT_FILTER} ${MSAN_RTL}/*.cc \
102 ${MSAN_RTL}/*.h &
Evgeniy Stepanovc8cde8d2013-01-18 15:53:43 +0000103
Sergey Matveev48c1d1a2013-05-20 11:09:27 +0000104# LSan
105LSAN_RTL=${COMPILER_RT}/lib/lsan
Ed Maste89b80fb2014-10-07 20:23:57 +0000106run_lint ${LSAN_RTL_LINT_FILTER} ${LSAN_RTL}/*.cc \
107 ${LSAN_RTL}/*.h &
Alexey Samsonov98aa08c2014-02-25 12:09:25 +0000108run_lint ${LSAN_LIT_TEST_LINT_FILTER} ${LIT_TESTS}/lsan/*/*.cc &
Evgeniy Stepanov8a3666f2013-01-18 16:24:50 +0000109
Lorenzo Martignoni895454e2013-11-26 11:45:58 +0000110# DFSan
111DFSAN_RTL=${COMPILER_RT}/lib/dfsan
Ed Maste89b80fb2014-10-07 20:23:57 +0000112run_lint ${DFSAN_RTL_LINT_FILTER} ${DFSAN_RTL}/*.cc \
113 ${DFSAN_RTL}/*.h &
Lorenzo Martignoni895454e2013-11-26 11:45:58 +0000114${DFSAN_RTL}/scripts/check_custom_wrappers.sh >> $ERROR_LOG
115
Kostya Kortchinsky6edadae2017-11-08 16:42:29 +0000116# Scudo
117SCUDO_RTL=${COMPILER_RT}/lib/scudo
118run_lint ${SCUDO_RTL_LINT_FILTER} ${SCUDO_RTL}/*.cpp \
119 ${SCUDO_RTL}/*.h &
120
Evgeniy Stepanovc8cde8d2013-01-18 15:53:43 +0000121# Misc files
122FILES=${COMMON_RTL}/*.inc
Alexey Samsonov25dc0182013-08-29 11:35:01 +0000123TMPFILES=""
Evgeniy Stepanovc8cde8d2013-01-18 15:53:43 +0000124for FILE in $FILES; do
Alexey Samsonovfa103da2013-10-16 13:38:23 +0000125 TMPFILE="$(${MKTEMP}).$(basename ${FILE}).cc"
126 cp -f $FILE $TMPFILE
127 run_lint ${COMMON_RTL_INC_LINT_FILTER} $TMPFILE &
128 TMPFILES="$TMPFILES $TMPFILE"
Evgeniy Stepanovc8cde8d2013-01-18 15:53:43 +0000129done
Alexey Samsonov903c3252013-08-23 07:43:56 +0000130
Alexey Samsonov25dc0182013-08-29 11:35:01 +0000131wait
132
133for temp in $TMPFILES; do
134 rm -f $temp
135done
136
Ed Maste89b80fb2014-10-07 20:23:57 +0000137if [ -s $ERROR_LOG ]; then
Alexey Samsonov25dc0182013-08-29 11:35:01 +0000138 cat $ERROR_LOG
139 exit 1
Alexey Samsonovd875c392013-08-28 11:27:31 +0000140fi
141
Alexey Samsonov25dc0182013-08-29 11:35:01 +0000142exit 0