From d6e1044aa7ee35f08761077f392a4e75a83f7b52 Mon Sep 17 00:00:00 2001 From: linD026 Date: Tue, 5 Oct 2021 10:38:40 +0800 Subject: [PATCH] CI: introduce GCC static analysis Since GCC version 10, there has been a new option -fanalyzer for static analysis. It can make the CI pipeline more comprehensive. Also, the static analysis updates in GCC 11, but we cannot install the GCC 11 in ubuntu 20.04 straightforwardly right now, which is the GitHub workflow environment (see status-check.yaml). For this reason, we stay at the GCC 10. Close #117 Reference - https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html - https://developers.redhat.com/blog/2020/03/26/static-analysis-in-gcc-10 - https://lwn.net/Articles/870290/ - https://developers.redhat.com/blog/2021/01/28/static-analysis-updates-in-gcc-11 - https://github.com/torvalds/linux/commit/7d73c3e9c51400d3e0e755488050804e4d44737a --- .ci/static-analysis.sh | 22 ++++++++++++++++++++++ .github/workflows/status-check.yaml | 1 + examples/Makefile | 9 +++++++-- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.ci/static-analysis.sh b/.ci/static-analysis.sh index 1079b59..6bb8348 100755 --- a/.ci/static-analysis.sh +++ b/.ci/static-analysis.sh @@ -60,6 +60,28 @@ function do_sparse() make -C examples clean } +function do_gcc() +{ + local GCC=$(which gcc-10) + if [ $? -ne 0 ]; then + echo "[!] gcc-10 is not installed. Failed to run static analysis with GCC." >&2 + exit 1 + fi + + make -C examples CONFIG_STATUS_CHECK_GCC=y STATUS_CHECK_GCC=$GCC 2> gcc.log + + local WARNING_COUNT=$(cat gcc.log | egrep -c " warning:" ) + local ERROR_COUNT=$(cat gcc.log | egrep -c " error:" ) + local COUNT=`expr $WARNING_COUNT + $ERROR_COUNT` + if [ $COUNT -gt 0 ]; then + echo "gcc failed: $WARNING_COUNT warning(s), $ERROR_COUNT error(s)" + cat gcc.log + exit 1 + fi + make -C examples CONFIG_STATUS_CHECK_GCC=y STATUS_CHECK_GCC=$GCC clean +} + do_cppcheck do_sparse +do_gcc exit 0 diff --git a/.github/workflows/status-check.yaml b/.github/workflows/status-check.yaml index e89a9fa..4511de1 100644 --- a/.github/workflows/status-check.yaml +++ b/.github/workflows/status-check.yaml @@ -18,6 +18,7 @@ jobs: run: | sudo apt-get install -q -y clang-format-11 sudo apt-get install -q -y cppcheck + sudo apt-get install -q -y gcc-10 .ci/check-format.sh .ci/static-analysis.sh .ci/build-n-run.sh diff --git a/examples/Makefile b/examples/Makefile index 098f20b..2c2a125 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -32,11 +32,16 @@ obj-m += ioctl.o PWD := $(CURDIR) +ifeq ($(CONFIG_STATUS_CHECK_GCC),y) +CC=$(STATUS_CHECK_GCC) +ccflags-y += -fanalyzer +endif + all: - $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules + $(MAKE) -C /lib/modules/$(shell uname -r)/build CC=$(CC) M=$(PWD) modules clean: - $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean + $(MAKE) -C /lib/modules/$(shell uname -r)/build CC=$(CC) M=$(PWD) clean $(RM) other/cat_noblock *.plist indent: