| #!/usr/bin/env bash |
| set -eo pipefail |
| if [ ! -d sdk ] ; then |
| echo Please run this script from the root of the cheriot-rtos repository. |
| exit 1 |
| fi |
| CLANG_TIDY=/cheriot-tools/bin/clang-tidy |
| CLANG_FORMAT=/cheriot-tools/bin/clang-format |
| if [ -n "$1" ] ; then |
| CLANG_TIDY=$1/clang-tidy |
| CLANG_FORMAT=$1/clang-format |
| fi |
| if [ ! -x ${CLANG_TIDY} ] ; then |
| echo Usage: $0 path/to/cheriot/tools/bin |
| echo clang-tidy not found at ${CLANG_TIDY} |
| exit 1 |
| fi |
| if [ ! -x ${CLANG_FORMAT} ] ; then |
| echo Usage: $0 path/to/cheriot/tools/bin |
| echo clang-tidy not found at ${CLANG_FORMAT} |
| exit 1 |
| fi |
| |
| if which nproc ; then |
| PARALLEL_JOBS=$(nproc) |
| else |
| PARALLEL_JOBS=$(sysctl -n kern.smp.cpus) |
| fi |
| DIRECTORIES="sdk tests examples" |
| # Standard headers should be included once we move to a clang-tidy that |
| # supports NOLINTBEGIN to disable specific checks over a whole file. |
| # In particular, modernize-redundant-void-arg should be disabled in any header |
| # file that's included from C. |
| # |
| # FreeRTOS-Compat headers follow FreeRTOS naming conventions and should be |
| # excluded for now. Eventually they should be included for everything except |
| # the identifier naming checks. |
| HEADERS=$(find ${DIRECTORIES} -name '*.h' -or -name '*.hh' | grep -v libc++ | grep -v third_party | grep -v 'std.*.h' | grep -v errno.h | grep -v strings.h | grep -v string.h | grep -v -assembly.h | grep -v cdefs.h | grep -v /riscv.h | grep -v inttypes.h | grep -v /cheri-builtins.h | grep -v c++-config | grep -v ctype.h | grep -v switcher.h | grep -v assert.h | grep -v /build/ | grep -v microvium | grep -v FreeRTOS-Compat) |
| SOURCES=$(find ${DIRECTORIES} -name '*.cc' | grep -v /build/ | grep -v third_party | grep -v arith64.c) |
| |
| echo Headers: ${HEADERS} |
| echo Sources: ${SOURCES} |
| rm -f tidy-*.fail |
| |
| # sh syntax is -c "string" [name [args ...]], so "tidy" here is the name and not included in "$@" |
| echo ${HEADERS} ${SOURCES} | xargs -P${PARALLEL_JOBS} -n5 sh -c "${CLANG_TIDY} -export-fixes=\$(mktemp -p. tidy.fail-XXXX) \$@" tidy |
| if [ $(find . -maxdepth 1 -name 'tidy.fail-*' -size +0 | wc -l) -gt 0 ] ; then |
| # clang-tidy put non-empty output in one of the tidy-*.fail files |
| cat tidy.fail-* |
| exit 1 |
| fi |
| |
| ${CLANG_FORMAT} -i ${HEADERS} ${SOURCES} |
| if git diff --exit-code ${HEADERS} ${SOURCES} ; then |
| exit 0 |
| fi |
| echo clang-format applied changes |
| exit 1 |