mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-18 12:52:44 +01:00
3f59eefbaf
Creating all object files in one directory is bound to produce name clashes. RIOT developers may take care to use unique file names, but external packages surely don't. With this change all the objects of a module (e.g. `shell`) will be created in `bin/$(BOARD)/$(MODULE)`. I compared the final linker command before and after the change. The `.o` files (e.g. `startup.o`, `syscall.o` ...) are included in the same order. Neglecting the changed path name where the `.o` files reside, the linker command stays exactly the same. A major problem could be third party boards, because the location of the `startup.o` needs to the specified now in `boards/$(BOARD)/Makefile.include`, e.g. ```Makefile export UNDEF += $(BINDIR)msp430_common/startup.o ```
93 lines
2.3 KiB
Makefile
93 lines
2.3 KiB
Makefile
include $(RIOTBOARD)/$(BOARD)/Makefile.dep
|
|
|
|
export NATIVEINCLUDES = -I$(RIOTBOARD)/$(BOARD)/include/
|
|
export NATIVEINCLUDES += -I$(RIOTBASE)/core/include/
|
|
export NATIVEINCLUDES += -I$(RIOTBASE)/drivers/include/
|
|
|
|
export CPU = native
|
|
export ELF = $(BINDIR)$(PROJECT).elf
|
|
|
|
# toolchain:
|
|
export PREFIX =
|
|
export CC ?= $(PREFIX)gcc
|
|
export AR = $(PREFIX)ar
|
|
export AS = $(PREFIX)as
|
|
export LINK = $(PREFIX)gcc
|
|
export SIZE = $(PREFIX)size
|
|
export OBJCOPY = true
|
|
|
|
export DEBUGGER = gdb
|
|
export TERMPROG = $(ELF)
|
|
export FLASHER = true
|
|
export VALGRIND ?= valgrind
|
|
export CGANNOTATE ?= cg_annotate
|
|
export GPROF ?= gprof
|
|
|
|
# flags:
|
|
export CFLAGS += -Wall -Wextra -pedantic -m32
|
|
export LINKFLAGS += -m32 -gc -ldl
|
|
export ASFLAGS =
|
|
export DEBUGGER_FLAGS = $(ELF)
|
|
term-memcheck: export VALGRIND_FLAGS ?= --track-origins=yes
|
|
term-cachegrind: export CACHEGRIND_FLAGS += --tool=cachegrind
|
|
term-gprof: export TERMPROG = GMON_OUT_PREFIX=gmon.out $(ELF)
|
|
all-valgrind: export CFLAGS += -DHAVE_VALGRIND_H -g
|
|
all-valgrind: export NATIVEINCLUDES += $(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
|
|
|
|
export INCLUDES += $(NATIVEINCLUDES)
|
|
|
|
# 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
|
|
|
|
# set the tap interface for term/valgrind
|
|
ifneq (,$(filter nativenet,$(USEMODULE)))
|
|
export PORT ?= tap0
|
|
else
|
|
export PORT =
|
|
endif
|
|
|
|
all: # do not override first target
|
|
|
|
all-gprof: all
|
|
|
|
all-valgrind: all
|
|
|
|
all-cachegrind: all
|
|
|
|
term-valgrind:
|
|
# use this if you want to attach gdb from valgrind:
|
|
# echo 0 > /proc/sys/kernel/yama/ptrace_scope
|
|
# VALGRIND_FLAGS += --db-attach=yes
|
|
$(VALGRIND) $(VALGRIND_FLAGS) $(ELF) $(PORT)
|
|
|
|
term-cachegrind:
|
|
$(VALGRIND) $(CACHEGRIND_FLAGS) $(ELF) $(PORT)
|
|
|
|
term-gprof: term
|
|
|
|
eval-gprof:
|
|
$(GPROF) $(ELF) $(shell ls -rt gmon.out* | tail -1)
|
|
|
|
eval-cachegrind:
|
|
$(CGANNOTATE) $(shell ls -rt cachegrind.out* | tail -1)
|
|
|
|
export UNDEF += $(BINDIR)cpu/startup.o
|