mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
ea3c1661f3
This correctly defines a `scan-build-analyze` target that does not display the result webpage. `scan-build-view` has now been moved to a private target as should not be used directly. The handling of displaying the page on the host system and implementing 'scan-build-analyze' are now explicitely done with separate targets and not double implemented target when in docker or on the host that were executed twice with different implementations.
98 lines
2.7 KiB
Makefile
98 lines
2.7 KiB
Makefile
SCANBUILD_ENV_VARS := \
|
|
APPDIR \
|
|
AR \
|
|
ARFLAGS \
|
|
AS \
|
|
ASFLAGS \
|
|
BINDIR \
|
|
BINDIRBASE \
|
|
BOARD \
|
|
BUILDRELPATH \
|
|
CC \
|
|
CFLAGS \
|
|
CPPMIX \
|
|
CXX \
|
|
CXXEXFLAGS \
|
|
CXXUWFLAGS \
|
|
ELFFILE \
|
|
HEXFILE \
|
|
HOME \
|
|
LINK \
|
|
LINKFLAGPREFIX \
|
|
LINKFLAGS \
|
|
OBJCOPY \
|
|
OFLAGS \
|
|
PATH \
|
|
PREFIX \
|
|
QUIET \
|
|
WERROR \
|
|
RIOT_VERSION \
|
|
RIOT_CI_BUILD \
|
|
SIZE \
|
|
TOOLCHAIN \
|
|
UNDEF \
|
|
USER \
|
|
#
|
|
|
|
SCANBUILD_ARGS ?= \
|
|
-analyze-headers \
|
|
--use-cc=$(CC) \
|
|
--use-c++=$(CXX) \
|
|
-analyzer-config stable-report-filename=true \
|
|
#
|
|
|
|
SCANBUILD_OUTPUTDIR = scan-build/$(BOARD)
|
|
|
|
# Find all variables given on the command line and recreate the command.
|
|
CMDVARS := $(strip $(foreach varname, $(SCANBUILD_ENV_VARS), \
|
|
$(if $(filter command, $(origin $(varname))), \
|
|
'$(varname)=$(subst ','\'',$($(varname)))', \
|
|
)))
|
|
ENVVARS := $(strip $(foreach varname, $(SCANBUILD_ENV_VARS), \
|
|
$(if $(filter environment, $(origin $(varname))), \
|
|
'$(varname)=$(subst ','\'',$($(varname)))', \
|
|
)))
|
|
|
|
.PHONY: scan-build scan-build-analyze
|
|
.PHONY: ..scan-build-view ..scan-build-analyze
|
|
|
|
ifeq (1,$(INSIDE_DOCKER))
|
|
# In the container just do the analysis, 'view' will be done by the host
|
|
scan-build: ..scan-build-analyze
|
|
else # INSIDE_DOCKER
|
|
scan-build: ..scan-build-view
|
|
endif # INSIDE_DOCKER
|
|
|
|
ifeq ($(BUILD_IN_DOCKER),1)
|
|
# It will trigger executing 'scan-build' or 'scan-build-analyze' with docker
|
|
scan-build-analyze: ..in-docker-container
|
|
else # BUILD_IN_DOCKER
|
|
scan-build-analyze: ..scan-build-analyze
|
|
endif # BUILD_IN_DOCKER
|
|
|
|
|
|
..scan-build-analyze: clean
|
|
@$(COLOR_ECHO) '$(COLOR_GREEN)Performing Clang static code analysis using toolchain "$(TOOLCHAIN)".$(COLOR_RESET)'
|
|
# ccc-analyzer needs to be told the proper -target setting for best results,
|
|
# otherwise false error reports about unknown register names etc will be produced.
|
|
# These kinds of errors can be safely ignored as long as they only come from LLVM
|
|
@if [ "$${TOOLCHAIN}" != "llvm" -a "$${BOARD}" != "native" ]; then \
|
|
$(COLOR_ECHO) '$(COLOR_YELLOW)Recommend using TOOLCHAIN=llvm for best results.$(COLOR_RESET)'; \
|
|
$(COLOR_ECHO) '$(COLOR_YELLOW)Ignore any "error: unknown register name '\''rX'\'' in asm" messages.$(COLOR_RESET)'; \
|
|
fi
|
|
$(Q)mkdir -p '$(SCANBUILD_OUTPUTDIR)'
|
|
$(Q)env -i $(ENVVARS) \
|
|
scan-build -o '$(SCANBUILD_OUTPUTDIR)' $(SCANBUILD_ARGS) \
|
|
make -C $(CURDIR) all $(strip $(CMDVARS)) FORCE_ASSERTS=1
|
|
|
|
..scan-build-view: scan-build-analyze
|
|
@echo "Showing most recent report in your web browser..."
|
|
@REPORT_FILE="$$(find '$(SCANBUILD_OUTPUTDIR)' -maxdepth 2 -mindepth 2 \
|
|
-type f -name 'index.html' 2>/dev/null | sort | tail -n 1)"; \
|
|
if [ -n "$${REPORT_FILE}" ]; then \
|
|
echo "$(OPEN) $${REPORT_FILE}"; \
|
|
$(OPEN) "$${REPORT_FILE}"; \
|
|
else \
|
|
echo "No report found"; \
|
|
fi
|