From c897773daf84276facf81b589d899d3e11945a3f Mon Sep 17 00:00:00 2001 From: Francisco Acosta Date: Mon, 14 May 2018 19:25:21 +0200 Subject: [PATCH] makefiles: add atmega arch generic makefile --- makefiles/arch/atmega.inc.mk | 50 ++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 makefiles/arch/atmega.inc.mk diff --git a/makefiles/arch/atmega.inc.mk b/makefiles/arch/atmega.inc.mk new file mode 100644 index 0000000000..b45178e301 --- /dev/null +++ b/makefiles/arch/atmega.inc.mk @@ -0,0 +1,50 @@ +# Target architecture for the build. Use avr if you are unsure. +TARGET_ARCH ?= avr + +CFLAGS_CPU = -mmcu=$(CPU) $(CFLAGS_FPU) +CFLAGS_LINK = -ffunction-sections -fdata-sections -fno-builtin -fshort-enums +CFLAGS_DBG ?= -ggdb -g3 +CFLAGS_OPT ?= -Os + +CFLAGS += $(CFLAGS_CPU) $(CFLAGS_LINK) $(CFLAGS_DBG) $(CFLAGS_OPT) +ASFLAGS += $(CFLAGS_CPU) $(CFLAGS_DBG) +LINKFLAGS += $(CFLAGS_CPU) $(CFLAGS_DBG) $(CFLAGS_OPT) -static -lgcc -e reset_handler -Wl,--gc-sections +OFLAGS += -j .text -j .data + +# Tell the build system that the CPU depends on the atmega common files: +USEMODULE += atmega_common + +# export the peripheral drivers to be linked into the final binary +USEMODULE += atmega_common_periph +USEMODULE += periph_common + +# Export the peripheral drivers to be linked into the final binary, for now +# only atmega126rfr2 has periph drivers +ifeq ($(CPU), atmega256rfr2) + USEMODULE += periph +endif + +# the atmel port uses stdio_uart +USEMODULE += stdio_uart + +# explicitly tell the linker to link the syscalls and startup code. +# without this the interrupt vectors will not be linked correctly! +UNDEF += $(BINDIR)/atmega_common/startup.o + +# Use ROM_LEN and RAM_LEN during link +$(if $(ROM_LEN),,$(error ROM_LEN is not defined)) +$(if $(RAM_LEN),,$(error RAM_LEN is not defined)) +LINKFLAGS += $(LINKFLAGPREFIX)--defsym=__TEXT_REGION_LENGTH__=$(ROM_LEN)$(if $(ROM_RESERVED),-$(ROM_RESERVED)) +LINKFLAGS += $(LINKFLAGPREFIX)--defsym=__DATA_REGION_LENGTH__=$(RAM_LEN) + +# Use newer linker script to have ROM/RAM configuration symbols in binutils<2.26 +LDSCRIPT_COMPAT = $(if $(shell $(TARGET_ARCH)-ld --verbose | grep __TEXT_REGION_LENGTH__),,\ + -T$(RIOTCPU)/$(CPU)/ldscripts_compat/avr_2.26.ld) +LINKFLAGS += $(LDSCRIPT_COMPAT) + +ifeq ($(LTO),1) + # avr-gcc <4.8.3 has a bug when using LTO which causes a warning to be printed always: + # '_vector_25' appears to be a misspelled signal handler [enabled by default] + # See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59396 + LINKFLAGS += -Wno-error +endif