diff options
author | Megan <megan.teo@ibm.com> | 2019-06-25 15:17:40 -0500 |
---|---|---|
committer | Daniel M Crowell <dcrowell@us.ibm.com> | 2019-09-11 10:53:06 -0500 |
commit | 1d4530dac35a6baddf60a3bfd454aac1949f69b6 (patch) | |
tree | 5322e1e18208364078d0e0a5f54ecdf48402fe50 /src/build/mkrules/cc.rules.mk | |
parent | bafe5de9d8b538d978d9955386b5f1fd0ae1d82b (diff) | |
download | talos-hostboot-1d4530dac35a6baddf60a3bfd454aac1949f69b6.tar.gz talos-hostboot-1d4530dac35a6baddf60a3bfd454aac1949f69b6.zip |
Implement Static Analysis with cppcheck
Cppcheck static analysis tool can now be run when compiling
by running: make cppcheck
And it will always run when committing without stopping the
commit if an error is found.
This commit suppresses some false positives found in the code.
A false positive can be suppressed inline by placing
“// cppcheck-suppress syntaxError” in a line before the false
positive., e.g.:
char arr[5];
// cppcheck-suppress arrayIndexOutOfBounds
arr[10] = 0;
Change-Id: I9e833a153d6b04df2f8a72cd994e43922c61c2fe
RTC: 201451
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/79629
Reviewed-by: Zachary Clark <zach@ibm.com>
Reviewed-by: Nicholas E Bofferding <bofferdn@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/build/mkrules/cc.rules.mk')
-rw-r--r-- | src/build/mkrules/cc.rules.mk | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/build/mkrules/cc.rules.mk b/src/build/mkrules/cc.rules.mk index 584b11db4..2d465e2e3 100644 --- a/src/build/mkrules/cc.rules.mk +++ b/src/build/mkrules/cc.rules.mk @@ -54,6 +54,20 @@ $(OBJDIR)/%.o : %.C -o $@.trace $(INCLUDE_DIRS) -iquote . $(C1)$(TRACE_HASHER) $@ $(TRACE_FLAGS) @rm $@.trace + $(C2) " CPPCHECK $(notdir $<)" +# TODO RTC 215692 +# The following script is used to run the cppcheck tool when enabled. If one +# cppcheck error is found, the make process will stop here, the error will be +# printed out to the terminal and stored in a file .`basename $<`.cppcheck in +# the directory where the original file is located + $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(CXX_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \ + if [ "$$exit_code" -ne 1 ]; then \ + rm -f .`basename $<`.cppcheck; \ + if [ "$$exit_code" -eq 127 ]; then \ +# Error code 127 means that the command timed-out. We do not fail for timeouts.\ + exit_code=0; \ + fi; \ + fi; exit "$$exit_code" # Compiling *.cc files $(OBJDIR)/%.o : %.cc @@ -63,6 +77,15 @@ $(OBJDIR)/%.o : %.cc $(INCLUDE_DIRS) -iquote . $(C1)$(TRACE_HASHER) $@ $(TRACE_FLAGS) @rm $@.trace + $(C2) " CPPCHECK $(notdir $<)" +# TODO RTC 215692 + $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(CXX_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \ + if [ "$$exit_code" -ne 1 ]; then \ + rm -f .`basename $<`.cppcheck; \ + if [ "$$exit_code" -eq 127 ]; then \ + exit_code=0; \ + fi; \ + fi; exit "$$exit_code" $(OBJDIR)/%.o : %.c @@ -73,10 +96,28 @@ ifndef CC_OVERRIDE $(C2) " CC $(notdir $<)" $(C1)$(CC) -c $(call FLAGS_FILTER, $(CFLAGS), $<) $(SOURCE_FILE) \ -o $@.trace $(INCLUDE_DIRS) -iquote . + $(C2) " CPPCHECK $(notdir $<)" +# TODO RTC 215692 + $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(C_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \ + if [ "$$exit_code" -ne 1 ]; then \ + rm -f .`basename $<`.cppcheck; \ + if [ "$$exit_code" -eq 127 ]; then \ + exit_code=0; \ + fi; \ + fi; exit "$$exit_code" else $(C2) " CXX $(notdir $<)" $(C1)$(CXX) -c $(call FLAGS_FILTER, $(CXXFLAGS), $<) $(SOURCE_FILE) \ -o $@.trace $(INCLUDE_DIRS) -iquote . + $(C2) " CPPCHECK $(notdir $<)" +# TODO RTC 215692 + $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(CXX_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \ + if [ "$$exit_code" -ne 1 ]; then \ + rm -f .`basename $<`.cppcheck; \ + if [ "$$exit_code" -eq 127 ]; then \ + exit_code=0; \ + fi; \ + fi; exit "$$exit_code" endif $(C1)$(TRACE_HASHER) $@ $(TRACE_FLAGS) @rm $@.trace |