efm32: Major rework of build. Use single link script, more common code.
This commit is contained in:
parent
62b2f375a2
commit
5bf2012426
|
@ -1,4 +1,8 @@
|
|||
# Rule
|
||||
EFM_UPPER = $(shell echo -n $(MCU) | tr a-z A-Z )
|
||||
|
||||
# Common Includes
|
||||
MCU_INCLUDE += -I$(LIBDIR)/CMSIS/Device/EnergyMicro/$(EFM_UPPER)/Include
|
||||
MCU_INCLUDE += -I$(LIBDIR)/emlib/inc
|
||||
|
||||
# CPPFLAGS
|
||||
|
@ -12,3 +16,10 @@ EFM32COMMON_OBJSR = em_acmp.o em_cmu.o em_emu.o em_lesense.o em_opamp.o em_syste
|
|||
em_burtc.o em_ebi.o em_lcd.o em_msc.o em_rtc.o em_wdog.o
|
||||
|
||||
EFM32COMMON_OBJS += $(addprefix $(LIBDIR)/emlib/src/,$(EFM32COMMON_OBJSR))
|
||||
|
||||
EFM32COMMON_OBJS += $(LIBDIR)/CMSIS/Device/EnergyMicro/$(EFM_UPPER)/Source/system_$(MCU).o $(LIBDIR)/startup_$(MCU).o
|
||||
|
||||
# Build Rules
|
||||
$(LIBDIR)/startup_$(MCU).o: $(LIBDIR)/CMSIS/Device/EnergyMicro/$(EFM_UPPER)/Source/GCC/startup_$(MCU).S
|
||||
@$(E) " AS " $@
|
||||
$(Q)$(CPP) -include inc/$(MCU)_hw.h -D__STACK_SIZE=MCU_STACK_SIZE -D_start=main -p < $< | $(AS) -c -o $@
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
CMSIS/Device/EnergyMicro/EFM32G/Source/GCC/efm32g.ld
|
152
libs/efm32g.ld.in
Normal file
152
libs/efm32g.ld.in
Normal file
|
@ -0,0 +1,152 @@
|
|||
/* Linker script for Energy Micro EFM32 family of devices */
|
||||
/* */
|
||||
/* This file is subject to the license terms as defined in ARM's */
|
||||
/* CMSIS END USER LICENSE AGREEMENT.pdf, governing the use of */
|
||||
/* Example Code. */
|
||||
/* */
|
||||
/* Energy Micro AS, 2012 */
|
||||
MEMORY
|
||||
{
|
||||
FLASH (rx) : ORIGIN = MCU_FLASH_BASE, LENGTH = MCU_FLASH_SIZE
|
||||
RAM (rwx) : ORIGIN = MCU_SRAM_BASE, LENGTH = MCU_SRAM_SIZE
|
||||
}
|
||||
|
||||
/* Linker script to place sections and symbol values. Should be used together
|
||||
* with other linker script that defines memory regions FLASH and RAM.
|
||||
* It references following symbols, which must be defined in code:
|
||||
* Reset_Handler : Entry of reset handler
|
||||
*
|
||||
* It defines following symbols, which code can use without definition:
|
||||
* __exidx_start
|
||||
* __exidx_end
|
||||
* __etext
|
||||
* __data_start__
|
||||
* __preinit_array_start
|
||||
* __preinit_array_end
|
||||
* __init_array_start
|
||||
* __init_array_end
|
||||
* __fini_array_start
|
||||
* __fini_array_end
|
||||
* __data_end__
|
||||
* __bss_start__
|
||||
* __bss_end__
|
||||
* __end__
|
||||
* end
|
||||
* __HeapLimit
|
||||
* __StackLimit
|
||||
* __StackTop
|
||||
* __stack
|
||||
*/
|
||||
ENTRY(Reset_Handler)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text :
|
||||
{
|
||||
KEEP(*(.isr_vector))
|
||||
*(.text*)
|
||||
|
||||
KEEP(*(.init))
|
||||
KEEP(*(.fini))
|
||||
|
||||
/* .ctors */
|
||||
*crtbegin.o(.ctors)
|
||||
*crtbegin?.o(.ctors)
|
||||
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
|
||||
*(SORT(.ctors.*))
|
||||
*(.ctors)
|
||||
|
||||
/* .dtors */
|
||||
*crtbegin.o(.dtors)
|
||||
*crtbegin?.o(.dtors)
|
||||
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
|
||||
*(SORT(.dtors.*))
|
||||
*(.dtors)
|
||||
|
||||
*(.rodata*)
|
||||
|
||||
KEEP(*(.eh_frame*))
|
||||
} > FLASH
|
||||
|
||||
.ARM.extab :
|
||||
{
|
||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||
} > FLASH
|
||||
|
||||
__exidx_start = .;
|
||||
.ARM.exidx :
|
||||
{
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
} > FLASH
|
||||
__exidx_end = .;
|
||||
|
||||
__etext = .;
|
||||
|
||||
.data : AT (__etext)
|
||||
{
|
||||
__data_start__ = .;
|
||||
*(vtable)
|
||||
*(.data*)
|
||||
. = ALIGN (4);
|
||||
*(.ram)
|
||||
|
||||
. = ALIGN(4);
|
||||
/* preinit data */
|
||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||
KEEP(*(.preinit_array))
|
||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||
|
||||
. = ALIGN(4);
|
||||
/* init data */
|
||||
PROVIDE_HIDDEN (__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE_HIDDEN (__init_array_end = .);
|
||||
|
||||
. = ALIGN(4);
|
||||
/* finit data */
|
||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
KEEP(*(.fini_array))
|
||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||
|
||||
. = ALIGN(4);
|
||||
/* All data end */
|
||||
__data_end__ = .;
|
||||
|
||||
} > RAM
|
||||
|
||||
.bss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > RAM
|
||||
|
||||
.heap :
|
||||
{
|
||||
__end__ = .;
|
||||
end = __end__;
|
||||
_end = __end__;
|
||||
*(.heap*)
|
||||
__HeapLimit = .;
|
||||
} > RAM
|
||||
|
||||
/* .stack_dummy section doesn't contains any symbols. It is only
|
||||
* used for linker to calculate size of stack sections, and assign
|
||||
* values to stack symbols later */
|
||||
.stack_dummy :
|
||||
{
|
||||
*(.stack)
|
||||
} > RAM
|
||||
|
||||
/* Set stack top to end of RAM, and stack limit move down by
|
||||
* size of stack_dummy section */
|
||||
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
|
||||
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
|
||||
PROVIDE(__stack = __StackTop);
|
||||
|
||||
/* Check if data + heap + stack exceeds RAM limit */
|
||||
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
|
||||
}
|
|
@ -1,21 +1,15 @@
|
|||
# The processor!
|
||||
MCU_CORE=cm3
|
||||
|
||||
# Set up include paths
|
||||
MCU_INCLUDE += -I$(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32G/Include
|
||||
# Common definitions
|
||||
include $(LIBDIR)/efm32_common.mk
|
||||
|
||||
# Set up CFLAGS
|
||||
MCU_CFLAGS += -mcpu=cortex-m3 -mthumb -Wa,-mthumb
|
||||
|
||||
# CMSIS
|
||||
EFM32G_OBJS = $(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32G/Source/system_$(MCU).o
|
||||
include $(LIBDIR)/efm32_common.mk
|
||||
# Any specific target?
|
||||
EFM32G_OBJS =
|
||||
|
||||
# Bookkeeping
|
||||
MCU_LIBS =
|
||||
MCU_LIBS_OBJS += $(EFM32G_OBJS) $(EFM32COMMON_OBJS) $(LIBDIR)/startup_$(MCU).o
|
||||
|
||||
# Build Rules
|
||||
$(LIBDIR)/startup_$(MCU).o: $(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32G/Source/GCC/startup_$(MCU).S
|
||||
@$(E) " AS " $@
|
||||
$(Q)$(CPP) -D_start=main -p < $< | $(AS) -c -o $@
|
||||
MCU_LIBS_OBJS += $(EFM32G_OBJS) $(EFM32COMMON_OBJS)
|
||||
|
|
|
@ -1 +1 @@
|
|||
CMSIS/Device/EnergyMicro/EFM32GG/Source/GCC/efm32gg.ld
|
||||
efm32g.ld.in
|
|
@ -1,21 +1,15 @@
|
|||
# The processor!
|
||||
MCU_CORE=cm3
|
||||
|
||||
# Set up include paths
|
||||
MCU_INCLUDE += -I$(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32GG/Include
|
||||
# Common definitions
|
||||
include $(LIBDIR)/efm32_common.mk
|
||||
|
||||
# Set up CFLAGS
|
||||
MCU_CFLAGS += -mcpu=cortex-m3 -mthumb -Wa,-mthumb
|
||||
|
||||
# CMSIS
|
||||
EFM32GG_OBJS = $(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32GG/Source/system_$(MCU).o
|
||||
include $(LIBDIR)/efm32_common.mk
|
||||
# Any specific target?
|
||||
EFM32GG_OBJS =
|
||||
|
||||
# Bookkeeping
|
||||
MCU_LIBS =
|
||||
MCU_LIBS_OBJS += $(EFM32GG_OBJS) $(EFM32COMMON_OBJS) $(LIBDIR)/startup_$(MCU).o
|
||||
|
||||
# Build Rules
|
||||
$(LIBDIR)/startup_$(MCU).o: $(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32GG/Source/GCC/startup_$(MCU).S
|
||||
@$(E) " AS " $@
|
||||
$(Q)$(CPP) -D_start=main -p < $< | $(AS) -c -o $@
|
||||
MCU_LIBS_OBJS += $(EFM32GG_OBJS) $(EFM32COMMON_OBJS)
|
||||
|
|
|
@ -1 +1 @@
|
|||
CMSIS/Device/EnergyMicro/EFM32LG/Source/GCC/efm32lg.ld
|
||||
efm32g.ld.in
|
|
@ -1,21 +1,16 @@
|
|||
# The processor!
|
||||
MCU_CORE=cm3
|
||||
|
||||
# Set up include paths
|
||||
MCU_INCLUDE += -I$(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32LG/Include
|
||||
# Common definitions
|
||||
include $(LIBDIR)/efm32_common.mk
|
||||
|
||||
# Set up CFLAGS
|
||||
MCU_CFLAGS += -mcpu=cortex-m3 -mthumb -Wa,-mthumb
|
||||
|
||||
# CMSIS
|
||||
EFM32LG_OBJS = $(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32LG/Source/system_$(MCU).o
|
||||
include $(LIBDIR)/efm32_common.mk
|
||||
# Any specific target?
|
||||
EFM32LG_OBJS =
|
||||
|
||||
# Bookkeeping
|
||||
MCU_LIBS =
|
||||
MCU_LIBS_OBJS += $(EFM32LG_OBJS) $(EFM32COMMON_OBJS) $(LIBDIR)/startup_$(MCU).o
|
||||
MCU_LIBS_OBJS += $(EFM32LG_OBJS) $(EFM32COMMON_OBJS)
|
||||
|
||||
# Build Rules
|
||||
$(LIBDIR)/startup_$(MCU).o: $(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32LG/Source/GCC/startup_$(MCU).S
|
||||
@$(E) " AS " $@
|
||||
$(Q)$(CPP) -D_start=main -p < $< | $(AS) -c -o $@
|
||||
|
|
|
@ -1 +1 @@
|
|||
CMSIS/Device/EnergyMicro/EFM32TG/Source/GCC/efm32tg.ld
|
||||
efm32g.ld.in
|
|
@ -1,20 +1,16 @@
|
|||
# The processor!
|
||||
MCU_CORE=cm3
|
||||
# Set up include paths
|
||||
MCU_INCLUDE += -I$(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32TG/Include
|
||||
|
||||
# Common definitions
|
||||
include $(LIBDIR)/efm32_common.mk
|
||||
|
||||
# Set up CFLAGS
|
||||
MCU_CFLAGS += -mcpu=cortex-m3 -mthumb -Wa,-mthumb
|
||||
|
||||
# CMSIS
|
||||
EFM32TG_OBJS = $(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32TG/Source/system_$(MCU).o
|
||||
include $(LIBDIR)/efm32_common.mk
|
||||
# Any specific target?
|
||||
EFM32TG_OBJS =
|
||||
|
||||
# Bookkeeping
|
||||
MCU_LIBS =
|
||||
MCU_LIBS_OBJS += $(EFM32TG_OBJS) $(EFM32COMMON_OBJS) $(LIBDIR)/startup_$(MCU).o
|
||||
MCU_LIBS_OBJS += $(EFM32TG_OBJS) $(EFM32COMMON_OBJS)
|
||||
|
||||
# Build Rules
|
||||
$(LIBDIR)/startup_$(MCU).o: $(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32TG/Source/GCC/startup_$(MCU).S
|
||||
@$(E) " AS " $@
|
||||
$(Q)$(CPP) -D_start=main -p < $< | $(AS) -c -o $@
|
||||
|
|
|
@ -1 +1 @@
|
|||
CMSIS/Device/EnergyMicro/EFM32WG/Source/GCC/efm32wg.ld
|
||||
efm32g.ld.in
|
|
@ -1,20 +1,15 @@
|
|||
# The processor!
|
||||
MCU_CORE=cm4
|
||||
# Set up include paths
|
||||
MCU_INCLUDE += -I$(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32WG/Include
|
||||
|
||||
# Common definitions
|
||||
include $(LIBDIR)/efm32_common.mk
|
||||
|
||||
# Set up CFLAGS
|
||||
MCU_CFLAGS += -mcpu=cortex-m4 -mthumb -Wa,-mthumb
|
||||
|
||||
# CMSIS
|
||||
EFM32WG_OBJS = $(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32WG/Source/system_$(MCU).o
|
||||
include $(LIBDIR)/efm32_common.mk
|
||||
# Any specific target?
|
||||
EFM32WG_OBJS =
|
||||
|
||||
# Bookkeeping
|
||||
MCU_LIBS =
|
||||
MCU_LIBS_OBJS += $(EFM32WG_OBJS) $(EFM32COMMON_OBJS) $(LIBDIR)/startup_$(MCU).o
|
||||
|
||||
# Build Rules
|
||||
$(LIBDIR)/startup_$(MCU).o: $(LIBDIR)/CMSIS/Device/EnergyMicro/EFM32WG/Source/GCC/startup_$(MCU).S
|
||||
@$(E) " AS " $@
|
||||
$(Q)$(CPP) -D_start=main -p < $< | $(AS) -c -o $@
|
||||
MCU_LIBS_OBJS += $(EFM32WG_OBJS) $(EFM32COMMON_OBJS)
|
||||
|
|
Loading…
Reference in a new issue