1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-21 12:33:49 +01:00
RIOT/makefiles/toolchain/gnu.inc.mk
Marian Buschsieweke 0069a6bf9a
build system: enable support for static analysis
Modules can now add the following snipped to their `Makefile`:

    MODULE_SUPPORTS_STATIC_ANALYSIS := 1

When the application is then build with `make STATIC_ANALYSIS=1`, all
modules that opted in to static analysis get build with static analysis.
2025-04-18 09:36:31 +02:00

48 lines
1.6 KiB
Makefile

CC = $(PREFIX)gcc
CXX = $(PREFIX)g++
CCAS ?= $(CC)
ifeq ($(LTO),1)
AR = $(PREFIX)gcc-ar
RANLIB = $(PREFIX)gcc-ranlib
else
AR = $(PREFIX)ar
RANLIB = $(PREFIX)ranlib
endif
AS = $(PREFIX)as
NM = $(PREFIX)nm
LINK = $(PREFIX)gcc
LINKXX = $(PREFIX)g++
SIZE = $(PREFIX)size
_OBJCOPY := $(shell command -v $(PREFIX)objcopy || command -v gobjcopy || command -v objcopy)
OBJCOPY ?= $(_OBJCOPY)
ifeq ($(OBJCOPY),)
$(warning objcopy not found. Hex file will not be created.)
OBJCOPY = true
endif
# Default to the native (g)objdump, helps when using toolchain from docker
_OBJDUMP := $(or $(shell command -v $(PREFIX)objdump || command -v gobjdump),objdump)
OBJDUMP ?= $(_OBJDUMP)
GCC_VERSION := $(shell command -v $(CC) > /dev/null && $(CC) -dumpversion | cut -d . -f 1)
# -fmacro-prefix-map requires GCC 8
ifneq (8, $(firstword $(shell echo 8 $(GCC_VERSION) | tr ' ' '\n' | sort -n)))
OPTIONAL_CFLAGS_BLACKLIST += -fmacro-prefix-map=$(RIOTBASE)/=
endif
# GCC does not warn about documentation (yet)
OPTIONAL_CFLAGS_BLACKLIST += -Wdocumentation -Wno-error=documentation -Wno-documentation-deprecated-sync
# We use GDB for debugging
include $(RIOTMAKE)/tools/gdb.inc.mk
# GCC's static analysis tools can be enabled using -fanalyzer
CFLAGS_STATIC_ANALYSIS := -fanalyzer
# Data address spaces starts at zero for all supported architectures. This fixes
# compilation at least on MSP430 and AVR.
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105523
ifneq (,$(filter $(GCC_VERSION),12 13))
CFLAGS += --param=min-pagesize=0
endif