2016-01-15 18:21:29 +01:00
|
|
|
# Target triple for the build. Use arm-none-eabi if you are unsure.
|
2016-03-17 21:55:17 +01:00
|
|
|
export TARGET_ARCH ?= arm-none-eabi
|
2016-01-15 18:21:29 +01:00
|
|
|
|
|
|
|
# define build specific options
|
|
|
|
export CFLAGS_CPU = -mcpu=$(MCPU) -mlittle-endian -mthumb $(CFLAGS_FPU)
|
|
|
|
ifneq (llvm,$(TOOLCHAIN))
|
|
|
|
# Clang (observed with v3.7) does not understand -mno-thumb-interwork, only add if
|
|
|
|
# not building with LLVM
|
2018-03-13 12:17:53 +01:00
|
|
|
export CFLAGS += -mno-thumb-interwork
|
2016-01-15 18:21:29 +01:00
|
|
|
endif
|
|
|
|
export CFLAGS_LINK = -ffunction-sections -fdata-sections -fno-builtin -fshort-enums
|
2017-01-16 15:54:59 +01:00
|
|
|
export CFLAGS_DBG ?= -ggdb -g3
|
2016-01-15 18:21:29 +01:00
|
|
|
export CFLAGS_OPT ?= -Os
|
|
|
|
|
2016-02-08 11:19:01 +01:00
|
|
|
export CFLAGS += $(CFLAGS_CPU) $(CFLAGS_LINK) $(CFLAGS_DBG) $(CFLAGS_OPT)
|
2016-01-15 18:21:29 +01:00
|
|
|
|
2016-02-08 13:31:11 +01:00
|
|
|
export ASFLAGS += $(CFLAGS_CPU) $(CFLAGS_DBG)
|
2016-01-15 18:21:29 +01:00
|
|
|
export LINKFLAGS += -L$(RIOTCPU)/$(CPU)/ldscripts -L$(RIOTCPU)/cortexm_common/ldscripts
|
2016-10-03 23:19:00 +02:00
|
|
|
export LINKER_SCRIPT ?= $(CPU_MODEL).ld
|
2016-09-29 22:49:32 +02:00
|
|
|
export LINKFLAGS += -T$(LINKER_SCRIPT) -Wl,--fatal-warnings
|
|
|
|
|
2016-02-08 13:31:50 +01:00
|
|
|
export LINKFLAGS += $(CFLAGS_CPU) $(CFLAGS_DBG) $(CFLAGS_OPT) -static -lgcc -nostartfiles
|
2016-01-15 18:21:29 +01:00
|
|
|
export LINKFLAGS += -Wl,--gc-sections
|
|
|
|
|
2015-04-22 12:56:28 +02:00
|
|
|
# Tell the build system that the CPU depends on the Cortex-M common files:
|
2015-05-18 18:47:17 +02:00
|
|
|
export USEMODULE += cortexm_common
|
|
|
|
# Export the peripheral drivers to be linked into the final binary:
|
|
|
|
export USEMODULE += periph
|
2017-01-09 19:19:23 +01:00
|
|
|
# include common periph code
|
|
|
|
export USEMODULE += periph_common
|
2017-11-06 10:35:30 +01:00
|
|
|
export USEMODULE += cortexm_common_periph
|
|
|
|
|
2015-04-22 12:56:28 +02:00
|
|
|
# all cortex MCU's use newlib as libc
|
|
|
|
export USEMODULE += newlib
|
|
|
|
|
2015-06-11 20:41:21 +02:00
|
|
|
# set default for CPU_MODEL
|
|
|
|
export CPU_MODEL ?= $(CPU)
|
|
|
|
|
2015-09-16 21:41:58 +02:00
|
|
|
# Temporary LLVM/Clang Workaround:
|
|
|
|
# report cortex-m0 instead of cortex-m0plus if llvm/clang (<= 3.6.2) is used
|
|
|
|
# llvm/clang version 3.6.2 still does not support the cortex-m0plus mcpu type
|
|
|
|
ifeq (llvm,$(TOOLCHAIN))
|
|
|
|
ifeq (cortex-m0plus,$(CPU_ARCH))
|
|
|
|
LLVM_UNSUP = $(shell clang -target arm-none-eabi -mcpu=$(CPU_ARCH) -c -x c /dev/null -o /dev/null \
|
|
|
|
> /dev/null 2>&1 || echo 1 )
|
|
|
|
ifeq (1,$(LLVM_UNSUP))
|
|
|
|
CPU_ARCH = cortex-m0
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2015-05-18 18:47:17 +02:00
|
|
|
# export the CPU model and architecture
|
2015-04-22 12:56:28 +02:00
|
|
|
MODEL = $(shell echo $(CPU_MODEL) | tr 'a-z' 'A-Z')
|
|
|
|
export CFLAGS += -DCPU_MODEL_$(MODEL)
|
2015-05-18 18:47:17 +02:00
|
|
|
ARCH = $(shell echo $(CPU_ARCH) | tr 'a-z-' 'A-Z_')
|
|
|
|
export CFLAGS += -DCPU_ARCH_$(ARCH)
|
|
|
|
|
|
|
|
# set the compiler specific CPU and FPU options
|
|
|
|
ifeq ($(CPU_ARCH),cortex-m4f)
|
2015-05-29 13:56:41 +02:00
|
|
|
# TODO: enable hard floating points for the M4F once the context save/restore
|
|
|
|
# code is adjusted to take care of FPU registers
|
|
|
|
#export CFLAGS_FPU += -mfloat-abi=hard -mfpu=fpv4-sp-d16
|
2015-05-18 18:47:17 +02:00
|
|
|
export MCPU := cortex-m4
|
|
|
|
endif
|
2015-05-29 13:56:41 +02:00
|
|
|
CFLAGS_FPU ?= -mfloat-abi=soft
|
|
|
|
export MCPU ?= $(CPU_ARCH)
|
2015-04-22 12:56:28 +02:00
|
|
|
|
2015-05-30 10:02:46 +02:00
|
|
|
# CMSIS DSP needs to know about the CPU core
|
|
|
|
ifneq (,$(filter cmsis-dsp,$(USEPKG)))
|
|
|
|
# definition needed to use cmsis-dsp headers
|
|
|
|
ifeq ($(CPU_ARCH),cortex-m0)
|
|
|
|
export CFLAGS += -DARM_MATH_CM0
|
|
|
|
else ifeq ($(CPU_ARCH),cortex-m0plus)
|
|
|
|
export CFLAGS += -DARM_MATH_CM0PLUS
|
|
|
|
else ifeq ($(CPU_ARCH),cortex-m3)
|
|
|
|
export CFLAGS += -DARM_MATH_CM3
|
|
|
|
else ifeq ($(CPU_ARCH),cortex-m4)
|
|
|
|
export CFLAGS += -DARM_MATH_CM4
|
|
|
|
else ifeq ($(CPU_ARCH),cortex-m4f)
|
|
|
|
export CFLAGS += -DARM_MATH_CM4
|
|
|
|
else ifeq ($(CPU_ARCH),cortex-m7)
|
|
|
|
export CFLAGS += -DARM_MATH_CM7
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2015-04-22 12:56:28 +02:00
|
|
|
# Explicitly tell the linker to link the startup code.
|
|
|
|
# Without this the interrupt vectors will not be linked correctly!
|
2018-01-29 15:15:18 +01:00
|
|
|
VECTORS_O ?= $(BINDIR)/cpu/vectors.o
|
2015-05-27 18:13:02 +02:00
|
|
|
ifeq ($(COMMON_STARTUP),)
|
2018-01-29 15:15:18 +01:00
|
|
|
export UNDEF += $(VECTORS_O)
|
2015-05-27 18:13:02 +02:00
|
|
|
endif
|
2015-04-22 12:56:28 +02:00
|
|
|
|
|
|
|
# CPU depends on the cortex-m common module, so include it:
|
2015-05-18 18:47:17 +02:00
|
|
|
include $(RIOTCPU)/cortexm_common/Makefile.include
|
2015-04-22 12:56:28 +02:00
|
|
|
|
2016-01-15 18:21:29 +01:00
|
|
|
# use the nano-specs of Newlib when available
|
2016-03-21 07:36:02 +01:00
|
|
|
USEMODULE += newlib_nano
|
2016-03-16 10:00:03 +01:00
|
|
|
export USE_NANO_SPECS = 1
|
2016-01-15 18:21:29 +01:00
|
|
|
|
2015-04-22 12:56:28 +02:00
|
|
|
# Avoid overriding the default rule:
|
|
|
|
all:
|
|
|
|
|
|
|
|
# Rule to generate assembly listings from ELF files:
|
|
|
|
%.lst: %.elf
|
|
|
|
$(OBJDUMP) $(OBJDUMPFLAGS) $< > $@
|