1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/makefiles/scan-build.inc.mk
Gaëtan Harter 1d268c4cdb
Makefile.include: introduce FLASHFILE
Introduce FLASHFILE variable to start migrating boards to use it.

This is the file that will be used for flashing.
Boards do not currently use it but will migrated in upcoming PRs.
2019-02-28 18:11:49 +01:00

108 lines
3.1 KiB
Makefile

SCANBUILD_ENV_VARS := \
APPDIR \
AR \
ARFLAGS \
AS \
ASFLAGS \
BINDIR \
BINDIRBASE \
BOARD \
BUILD_DIR \
BUILDRELPATH \
CC \
CFLAGS \
CPPMIX \
CXX \
CXXEXFLAGS \
CXXUWFLAGS \
ELFFILE \
HEXFILE \
FLASHFILE \
HOME \
LINK \
LINKFLAGPREFIX \
LINKFLAGS \
OBJCOPY \
OFLAGS \
PATH \
PREFIX \
QUIET \
WERROR \
RIOT_VERSION \
RIOT_CI_BUILD \
SIZE \
TOOLCHAIN \
UNDEF \
USER \
#
# Produce errors by default at the end of compilation when warning are found
SCANBUILD_ERROR ?= $(if $(filter 1,$(WERROR)),--status-bugs)
SCANBUILD_ARGS ?= \
-analyze-headers \
--use-cc=$(CC) \
--use-c++=$(CXX) \
-analyzer-config stable-report-filename=true \
$(SCANBUILD_ERROR) \
#
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
# Prevent 'analyze' from producing an error when doing 'scan-build' and
# still show the webpage for interractive checking.
scan-build: SCANBUILD_ERROR=
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