osd-contiki/cpu/arm/stm32l152/Makefile.stm32l152
2015-10-09 19:40:39 +02:00

137 lines
3.9 KiB
Makefile

# Makefile for the STM32L152 Cortex M3 medium-density microcontroller
.SUFFIXES:
# CPU folder
CONTIKI_CPU=$(CONTIKI)/cpu/arm/stm32l152
# Source folders for contiki cpu files
CONTIKI_CPU_DIRS = .
# source files: proprietary sources for startup. Refer to CMSIS docs.
PROP_SYS_ARCH_C = system_stm32l1xx.c
ifdef IAR
include $(CONTIKI_CPU)/Makefile.stm32l152.iar
else
include $(CONTIKI_CPU)/Makefile.stm32l152.gnu
endif
# source files: Contiki arch source files
CONTIKI_CPU_ARCH= watchdog.c \
rtimer-arch.c \
clock.c
ifdef GCC
CONTIKI_CPU_PORT= syscalls.c \
console.c \
crt.c \
uart.c
else
CONTIKI_CPU_PORT=
endif
UIPDRIVERS=
# to be implemented
ELFLOADER=
# add CPU folder to search path for .s (assembler) files
ifdef GCC
vpath %.s $(CONTIKI)/platform/$(TARGET)/stm32cube-lib/stm32cube-prj/startup_files/gcc
else
vpath %.s $(CONTIKI)/platform/$(TARGET)/stm32cube-lib/stm32cube-prj/startup_files/iar
endif
# include all files above
ssubst = ${patsubst %.s,%.o,${patsubst %.s79,%.o,$(1)}}
CONTIKI_TARGET_SOURCEFILES += $(PROP_SYS_ARCH_C) $(PROP_USB_ARCH) $(CONTIKI_CPU_ARCH) $(CONTIKI_CPU_PORT) $(ELFLOADER) $(UIPDRIVERS)
CONTIKI_SOURCEFILES += $(CONTIKI_TARGET_SOURCEFILES)
PROJECT_OBJECTFILES += ${addprefix $(OBJECTDIR)/,$(CONTIKI_TARGET_MAIN:.c=.o)}
PROJECT_OBJECTFILES += ${addprefix $(OBJECTDIR)/,${call ssubst, $(PROP_SYS_ARCH_S)}}
#CONTIKI_OBJECTFILES += ${addprefix $(OBJECTDIR)/,${call ssubst, $(PROP_SYS_ARCH_S)}}
#------------------------------------------------ defines common for IAR and GCC
# set CPU speed in Hz, NB this might have unexpected side-effects if not at 32
# Mhz as it is not immediately clear how specialized the startup code etc is.
# That being said, setting to 24MHz seems to work fine, looking at Contiki clocks
# at least.
F_CPU = 32000000
CFLAGS+=\
-DHSE_VALUE=$(F_CPU)ul \
-DUSE_STDPERIPH_DRIVER \
-DSTM32L1XX_MD \
-DIAR_ARM_CM3 \
-DVECT_TAB_FLASH \
-DWITH_UIP6
# ------------------------------------------------------------------ Build rules
CUSTOM_RULE_C_TO_CE=yes
CUSTOM_RULE_C_TO_CO=yes
CUSTOM_RULE_C_TO_O=yes
CUSTOM_RULE_S_TO_OBJECTDIR_O=yes
CUSTOM_RULE_LINK=yes
%.o: %.c
$(CC) $(CFLAGS) $< -o $@
%.o: %.s
$(AS) $(ASFLAGS) $< -o $@
define FINALIZE_CYGWIN_DEPENDENCY
sed -e 's/ \([A-Z]\):\\/ \/cygdrive\/\L\1\//' -e 's/\\\([^ ]\)/\/\1/g' \
<$(@:.o=.P) >$(@:.o=.d); \
rm -f $(@:.o=.P)
endef
$(OBJECTDIR)/%.o: %.s
$(AS) $(ASFLAGS) $< -o $@
%.ce: %.o
$(LD) $(LDFLAGS) --relocatable -T $(CONTIKI_CPU)/merge-rodata.ld $< -o $@ $(LDLIBS)
$(STRIP) -K _init -K _fini --strip-unneeded -g -x $@
%-stripped.o: %.c
$(CC) $(CFLAGS) $< -o $@
$(STRIP) --strip $@
%-stripped.o: %.o
$(STRIP) --strip $@ $<
%.o: ${CONTIKI_TARGET}/loader/%.S
$(AS) -o $(notdir $(<:.S=.o)) $<
ifdef IAR
%.$(TARGET): %.co $(PROJECT_OBJECTFILES) contiki-$(TARGET).a $(STARTUPFOLDER) # $(OBJECTDIR)/empty-symbols.o
$(LD) $(LDFLAGS) -o $@ $(filter-out %.a,$^) $(filter %.a,$^) $(LDLIBS)
else
#CONTIKI_CPU_OBJS=$(CONTIKI_CPU_PORT:%.c=obj_stm32nucleo-spirit1/%.o)
CONTIKI_CPU_OBJS=$(CONTIKI_CPU_PORT:%.c=$(OBJECTDIR)/%.o)
%.$(TARGET): %.co $(PROJECT_OBJECTFILES) $(PROJECT_LIBRARIES) contiki-$(TARGET).a $(OBJECTDIR)/symbols.o
$(TRACE_LD)
$(Q)$(LD) $(LDFLAGS) $(TARGET_STARTFILES) ${filter-out %.a,$^} -Wl,-\( ${filter %.a,$^} $(TARGET_LIBFILES) -Wl,-\) $(CONTIKI_CPU_OBJS) -o $@
@echo >> contiki-$(TARGET).map
@$(SIZE) $(SIZEFLAGS) $@ >> contiki-$(TARGET).map
endif
%.hex: %.ihex
# @rm $*.hex
@mv -f $*.ihex $*.hex
.PHONY: symbols.c
symbols.c:
cp ${CONTIKI}/tools/empty-symbols.c symbols.c
cp ${CONTIKI}/tools/empty-symbols.h symbols.h
# Don't use core/loader/elfloader.c, use elfloader-otf.c instead
$(OBJECTDIR)/elfloader.o:
echo -n >$@