From 214951cc8d485e826ec52a381b8e50f0e75aafa1 Mon Sep 17 00:00:00 2001 From: sprhawk Date: Fri, 29 Aug 2014 01:48:19 +0800 Subject: modified from nordic nRF51 SDK --- Makefile.common | 209 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 Makefile.common (limited to 'Makefile.common') diff --git a/Makefile.common b/Makefile.common new file mode 100644 index 0000000..9f81b00 --- /dev/null +++ b/Makefile.common @@ -0,0 +1,209 @@ +DEVICE := NRF51 +DEVICESERIES := nrf51 + +SDK_INCLUDE_PATH = $(SDK_PATH)/Include/ +SDK_SOURCE_PATH = $(SDK_PATH)/Source/ +# TEMPLATE_PATH += $(SDK_SOURCE_PATH)/templates/gcc/ +OUTPUT_BINARY_DIRECTORY := _build + +ifeq ($(OS),Windows_NT) +include $(TEMPLATE_PATH)Makefile.windows +else +include $(TEMPLATE_PATH)Makefile.posix +endif + +ifeq ($(LINKER_SCRIPT),) + ifeq ($(USE_SOFTDEVICE), S110) + LINKER_SCRIPT = gcc_$(DEVICESERIES)_s110_$(DEVICE_VARIANT).ld + OUTPUT_FILENAME := $(OUTPUT_FILENAME)_s110_$(DEVICE_VARIANT) + else + ifeq ($(USE_SOFTDEVICE), S210) + LINKER_SCRIPT = gcc_$(DEVICESERIES)_s210_$(DEVICE_VARIANT).ld + OUTPUT_FILENAME := $(OUTPUT_FILENAME)_s210_$(DEVICE_VARIANT) + else + LINKER_SCRIPT = gcc_$(DEVICESERIES)_blank_$(DEVICE_VARIANT).ld + OUTPUT_FILENAME := $(OUTPUT_FILENAME)_$(DEVICE_VARIANT) + endif + endif +else +# Use externally defined settings +endif + +CPU := cortex-m0 + +# Toolchain commands +JLINK := JLinkExe -Device nrf51822 -speed 100 -if swd +CC := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc" +AS := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as" +AR := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar" -r +LD := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld" +NM := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm" +OBJDUMP := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump" +OBJCOPY := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy" + +MK := mkdir +RM := rm -rf + +OBJECT_DIRECTORY := _build +LISTING_DIRECTORY := _build + +C_SOURCE_FILES += system_$(DEVICESERIES).c +ASSEMBLER_SOURCE_FILES += gcc_startup_$(DEVICESERIES).s + +# Linker flags +#LDFLAGS += -L"$(GNU_INSTALL_ROOT)/arm-none-eabi/lib/armv6-m" +#LDFLAGS += -L"$(GNU_INSTALL_ROOT)/lib/gcc/arm-none-eabi/$(GNU_VERSION)/armv6-m" +LDFLAGS += -Xlinker -Map=$(LISTING_DIRECTORY)/$(OUTPUT_FILENAME).map +LDFLAGS += -mcpu=$(CPU) -mthumb -mabi=aapcs -L $(TEMPLATE_PATH) -T$(LINKER_SCRIPT) + +# Compiler flags +CFLAGS += -mcpu=$(CPU) -mthumb -mabi=aapcs -D$(DEVICE) -D$(BOARD) -D$(TARGET_CHIP) --std=gnu99 +CFLAGS += -Wall -Werror +CFLAGS += -mfloat-abi=soft + +# Assembler flags +ASMFLAGS += -x assembler-with-cpp + +INCLUDEPATHS += -I"$(SDK_PATH)Include" +INCLUDEPATHS += -I"$(SDK_PATH)Include/gcc" +INCLUDEPATHS += -I"$(SDK_PATH)Include/ext_sensors" + +# Sorting removes duplicates +BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) ) + +#################################################################### +# Rules # +#################################################################### + +C_SOURCE_FILENAMES = $(notdir $(C_SOURCE_FILES) ) +ASSEMBLER_SOURCE_FILENAMES = $(notdir $(ASSEMBLER_SOURCE_FILES) ) + +# Make a list of source paths +C_SOURCE_PATHS += $(SDK_SOURCE_PATH) $(TEMPLATE_PATH) $(wildcard $(SDK_SOURCE_PATH)*/) $(wildcard $(SDK_SOURCE_PATH)ext_sensors/*/) $(wildcard $(SDK_SOURCE_PATH)ble/*/) $(BUILD_SCRIPTS_PATH) +ASSEMBLER_SOURCE_PATHS = $(SDK_SOURCE_PATH) $(TEMPLATE_PATH) $(wildcard $(SDK_SOURCE_PATH)*/) $(BUILD_SCRIPTS_PATH) + +C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILENAMES:.c=.o) ) +ASSEMBLER_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASSEMBLER_SOURCE_FILENAMES:.s=.o) ) + +# Set source lookup paths +vpath %.c $(C_SOURCE_PATHS) +vpath %.s $(ASSEMBLER_SOURCE_PATHS) + +# Include automatically previously generated dependencies +-include $(addprefix $(OBJECT_DIRECTORY)/, $(COBJS:.o=.d)) + +### Targets +debug: CFLAGS += -DDEBUG -g3 -O0 +debug: ASMFLAGS += -DDEBUG -g3 -O0 +debug: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex + +.PHONY: release +release: clean +release: CFLAGS += -DNDEBUG -O3 +release: ASMFLAGS += -DNDEBUG -O3 +release: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex + +echostuff: + @echo C_OBJECTS: [$(C_OBJECTS)] + @echo C_SOURCE_FILES: [$(C_SOURCE_FILES)] + @echo C_SOURCE_PATHS: [$(C_SOURCE_PATHS)] + +## Create build directories +$(BUILD_DIRECTORIES): + $(MK) $@ + +## Create objects from C source files +$(OBJECT_DIRECTORY)/%.o: %.c +# Build header dependencies + $(CC) $(CFLAGS) $(INCLUDEPATHS) -M $< -MF "$(@:.o=.d)" -MT $@ +# Do the actual compilation + $(CC) $(CFLAGS) $(INCLUDEPATHS) -c -o $@ $< + +## Assemble .s files +$(OBJECT_DIRECTORY)/%.o: %.s + $(CC) $(ASMFLAGS) $(INCLUDEPATHS) -c -o $@ $< + +## Link C and assembler objects to an .out file +$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out: $(BUILD_DIRECTORIES) $(C_OBJECTS) $(ASSEMBLER_OBJECTS) $(LIBRARIES) + $(CC) $(LDFLAGS) $(C_OBJECTS) $(ASSEMBLER_OBJECTS) $(LIBRARIES) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out + +## Create binary .bin file from the .out file +$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out + $(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin + +## Create binary .hex file from the .out file +$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out + $(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex + +## Default build target +.PHONY: all +all: clean release + +clean: + $(RM) $(OUTPUT_BINARY_DIRECTORY) + + +$(OUTPUT_BINARY_DIRECTORY)/erase_all.jlink : $(BUILD_DIRECTORIES) + echo " \ +r \n\ +h \n\ +w4 0x4001e504,2 # enable erase all \n\ +w4 0x4001e50c,1 # start erasing \n\ +sleep 1000 \n\ +r \n\ +qc \n\ + " \ + > $(OUTPUT_BINARY_DIRECTORY)/erase_all.jlink + +erase_all: $(OUTPUT_BINARY_DIRECTORY)/erase_all.jlink + $(JLINK) -CommanderScript $(OUTPUT_BINARY_DIRECTORY)/erase_all.jlink; [ "$$?" -eq 1 ] + +$(OUTPUT_BINARY_DIRECTORY)/flash_softdevice.jlink: $(BUILD_DIRECTORIES) + echo " \n\ +r \n\ +h \n\ +w4 0x4001e504,2 # enable erase \n\ +w4 0x4001e50c,1 # start erasing all \n\ +sleep 1000 \n\ +w4 0x10001000, 0x14000 \n\ +w4 0x4001e504,1 \n\ +loadbin \"$(SOFTDEVICE_BIN_PATH)\", 0x0 \n\ +r \n\ +qc \n\ +" > $(OUTPUT_BINARY_DIRECTORY)/flash_softdevice.jlink + +flash_softdevice: $(OUTPUT_BINARY_DIRECTORY)/flash_softdevice.jlink + $(JLINK) -CommanderScript $(OUTPUT_BINARY_DIRECTORY)/flash_softdevice.jlink; [ "$$?" -eq 1 ] + +$(OUTPUT_BINARY_DIRECTORY)/flash.jlink: $(BUILD_DIRECTORIES) $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin + echo " \n\ +r \n\ +h \n\ +w4 0x4001e504,2 # enable erase \n\ +" > $(OUTPUT_BINARY_DIRECTORY)/flash.jlink + binsize=`stat -f %z $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin`; \ + starthexaddr=0x14000; \ + startaddr=`printf "%d" $$starthexaddr`; \ + page=0; \ + while [ $$binsize -gt 0 ]; \ + do \ + echo "w4 0x4001e508, $$starthexaddr # start erasing code region 1 page $$page\n" >> $(OUTPUT_BINARY_DIRECTORY)/flash.jlink ; \ + binsize=`expr $$binsize - 1024`; \ + page=`expr $$page + 1`; \ + startaddr=`expr $$startaddr + 1024`; \ + starthexaddr=`printf "0x%x" $$startaddr`; \ + done + echo "sleep 1000 \n\ +r \n\ +w4 0x4001e504,1 # enable write \n\ +loadbin \"$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin\", 0x14000 \n\ +verifybin \"$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin\", 0x14000 \n\ +r \n\ +g \n\ +qc \n\ +" >> $(OUTPUT_BINARY_DIRECTORY)/flash.jlink + +flash: $(OUTPUT_BINARY_DIRECTORY)/flash.jlink + $(JLINK) -CommanderScript $(OUTPUT_BINARY_DIRECTORY)/flash.jlink; [ "$$?" -eq 1 ] + +.PHONY: erase_all flash_softdevice flash -- cgit v1.2.3