mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-24 14:03:55 +01:00
Some modules used a 'NATIVEINCLUDES' with different include path and no other included directories. It was defining basic 'include' in a different order and not using other things defined in INCLUDES. After doing some checks with the given include path and possible conflicting files, there should be no conflict when using the default one. * No common headers between all the NATIVEINCLUDES directories * No common headers files between board/native/include, cpu/native/include and other files in the repository (except other boards/cpus of course).
186 lines
4.6 KiB
Makefile
186 lines
4.6 KiB
Makefile
export CPU = native
|
|
|
|
# Configuration for core/include/kernel_types.h
|
|
CFLAGS += -DNATIVE_INCLUDES
|
|
|
|
USEMODULE += native-drivers
|
|
|
|
# toolchain:
|
|
export PREFIX =
|
|
export CC ?= $(PREFIX)gcc
|
|
export CXX ?= $(PREFIX)g++
|
|
|
|
ifeq ($(LTO),1)
|
|
export AR = $(PREFIX)gcc-ar
|
|
else
|
|
export AR = $(PREFIX)ar
|
|
endif
|
|
|
|
export AS ?= $(PREFIX)as
|
|
export LINK ?= $(PREFIX)gcc
|
|
export SIZE ?= $(PREFIX)size
|
|
|
|
ifneq ($(shell uname -s),Darwin)
|
|
export OBJCOPY ?= $(PREFIX)objcopy
|
|
else
|
|
ifeq (0,$(shell which gobjcopy 2>&1 > /dev/null ; echo $$?))
|
|
export OBJCOPY ?= gobjcopy
|
|
export OFLAGS ?= -O ihex
|
|
else
|
|
# If gobjcopy is not available, just create an empty file. The hexfile
|
|
# is not used for native anyways.
|
|
export OBJCOPY ?= touch
|
|
export OFLAGS =
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(shell uname -s),Darwin)
|
|
export DEBUGGER ?= lldb
|
|
else
|
|
export DEBUGGER ?= gdb
|
|
endif
|
|
|
|
export TERMPROG ?= $(ELFFILE)
|
|
export FLASHER = true
|
|
export VALGRIND ?= valgrind
|
|
export CGANNOTATE ?= cg_annotate
|
|
export GPROF ?= gprof
|
|
|
|
# basic cflags:
|
|
export CFLAGS += -Wall -Wextra -pedantic -std=gnu99
|
|
|
|
ifeq ($(shell uname -m),x86_64)
|
|
export CFLAGS += -m32
|
|
endif
|
|
ifneq (,$(filter -DDEVELHELP,$(CFLAGS)))
|
|
export CFLAGS += -fstack-protector-all
|
|
endif
|
|
ifeq ($(shell uname -s),FreeBSD)
|
|
ifeq ($(shell uname -m),amd64)
|
|
export CFLAGS += -m32 -DCOMPAT_32BIT -B/usr/lib32
|
|
endif
|
|
endif
|
|
ifeq ($(shell uname -s),Darwin)
|
|
export CFLAGS += -Wno-deprecated-declarations
|
|
endif
|
|
|
|
# unwanted (CXXUWFLAGS) and extra (CXXEXFLAGS) flags for c++
|
|
export CXXUWFLAGS +=
|
|
export CXXEXFLAGS +=
|
|
|
|
ifeq ($(shell uname -m),x86_64)
|
|
export LINKFLAGS += -m32
|
|
endif
|
|
ifeq ($(shell uname -s),FreeBSD)
|
|
ifeq ($(shell uname -m),amd64)
|
|
export LINKFLAGS += -m32 -DCOMPAT_32BIT -L/usr/lib32 -B/usr/lib32
|
|
endif
|
|
export LINKFLAGS += -L $(BINDIR)
|
|
else
|
|
export LINKFLAGS += -ldl
|
|
endif
|
|
|
|
# clean up unused functions
|
|
export CFLAGS += -ffunction-sections -fdata-sections
|
|
ifeq ($(shell uname -s),Darwin)
|
|
export LINKFLAGS += -Wl,-dead_strip
|
|
else
|
|
export LINKFLAGS += -Wl,--gc-sections
|
|
endif
|
|
export LINKFLAGS += -ffunction-sections
|
|
|
|
# set the tap interface for term/valgrind
|
|
ifneq (,$(filter netdev_default gnrc_netdev_default,$(USEMODULE)))
|
|
export PORT ?= tap0
|
|
else
|
|
export PORT =
|
|
endif
|
|
|
|
export TERMFLAGS := $(PORT) $(TERMFLAGS)
|
|
|
|
export ASFLAGS =
|
|
ifeq ($(shell basename $(DEBUGGER)),lldb)
|
|
export DEBUGGER_FLAGS = -- $(ELFFILE) $(TERMFLAGS)
|
|
else
|
|
export DEBUGGER_FLAGS = -q --args $(ELFFILE) $(TERMFLAGS)
|
|
endif
|
|
term-valgrind: export VALGRIND_FLAGS ?= \
|
|
--leak-check=full \
|
|
--track-origins=yes \
|
|
--fullpath-after=$(RIOTBASE)/ \
|
|
--read-var-info=yes
|
|
debug-valgrind-server: export VALGRIND_FLAGS ?= --vgdb=yes --vgdb-error=0 -v \
|
|
--leak-check=full --track-origins=yes --fullpath-after=${RIOTBASE} \
|
|
--read-var-info=yes
|
|
term-cachegrind: export CACHEGRIND_FLAGS += --tool=cachegrind
|
|
term-gprof: export TERMPROG = GMON_OUT_PREFIX=gmon.out $(ELFFILE)
|
|
all-valgrind: export CFLAGS += -DHAVE_VALGRIND_H -g
|
|
all-valgrind: export CFLAGS += $(shell pkg-config valgrind --cflags)
|
|
all-debug: export CFLAGS += -g
|
|
all-cachegrind: export CFLAGS += -g
|
|
all-gprof: export CFLAGS += -pg
|
|
all-gprof: export LINKFLAGS += -pg
|
|
all-asan: export CFLAGS += -fsanitize=address -fno-omit-frame-pointer -g
|
|
all-asan: export CFLAGS += -DNATIVE_IN_CALLOC
|
|
all-asan: export LINKFLAGS += -fsanitize=address -fno-omit-frame-pointer -g
|
|
|
|
export CFLAGS += -DDEBUG_ASSERT_VERBOSE
|
|
|
|
# workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52624
|
|
ifneq ($(shell gcc --version | head -1 | grep -E ' (4.6|4.7)'),)
|
|
export CFLAGS += -DHAVE_NO_BUILTIN_BSWAP16
|
|
endif
|
|
|
|
# backward compatability with glibc <= 2.17 for native
|
|
ifeq ($(CPU),native)
|
|
ifeq ($(shell uname -s),Linux)
|
|
ifeq ($(shell ldd --version | awk '/^ldd/{if ($$NF < 2.17) {print "yes"} else {print "no"} }'),yes)
|
|
LINKFLAGS += -lrt
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# clumsy way to enable building native on osx:
|
|
BUILDOSXNATIVE = 0
|
|
ifeq ($(CPU),native)
|
|
ifeq ($(shell uname -s),Darwin)
|
|
BUILDOSXNATIVE = 1
|
|
endif
|
|
endif
|
|
|
|
all: # do not override first target
|
|
|
|
all-debug: all
|
|
|
|
all-gprof: all
|
|
|
|
all-asan: all
|
|
|
|
all-valgrind: all
|
|
|
|
all-cachegrind: all
|
|
|
|
term-valgrind:
|
|
$(VALGRIND) $(VALGRIND_FLAGS) $(ELFFILE) $(PORT)
|
|
|
|
debug-valgrind-server:
|
|
$(VALGRIND) $(VALGRIND_FLAGS) $(ELFFILE) $(PORT)
|
|
|
|
debug-valgrind:
|
|
$(eval VALGRIND_PID ?= $(shell pgrep -n memcheck-x86-li -u ${USER} | cut -d" " -f1))
|
|
$(eval DEBUGGER_FLAGS := -ex "target remote | vgdb --pid=${VALGRIND_PID}" $(DEBUGGER_FLAGS))
|
|
$(DEBUGGER) $(DEBUGGER_FLAGS)
|
|
|
|
term-cachegrind:
|
|
$(VALGRIND) $(CACHEGRIND_FLAGS) $(ELFFILE) $(PORT)
|
|
|
|
term-gprof: term
|
|
|
|
eval-gprof:
|
|
$(GPROF) $(ELFFILE) $(shell ls -rt gmon.out* | tail -1)
|
|
|
|
eval-cachegrind:
|
|
$(CGANNOTATE) $(shell ls -rt cachegrind.out* | tail -1)
|
|
|
|
export UNDEF += $(BINDIR)/cpu/startup.o
|